From cd59b9ae092749c76a950cfb5de3452571adeaec Mon Sep 17 00:00:00 2001 From: Matthias Bussonnier Date: Fri, 15 Jun 2018 13:46:29 +0200 Subject: [PATCH 001/105] init --- outline.md | 128 +++++++++++++++++++++++++++++++++++++++++++++++++++++ readme.md | 53 ++++++++++++++++++++++ 2 files changed, 181 insertions(+) create mode 100644 outline.md create mode 100644 readme.md diff --git a/outline.md b/outline.md new file mode 100644 index 0000000..56e06b3 --- /dev/null +++ b/outline.md @@ -0,0 +1,128 @@ +For the last two years the Jupyter team has been working on the new Jupyter frontend: JupyterLab. While JupyterLab does of course allow the use of Jupyter Notebooks, it goes beyond the classic Jupyter Notebook by providing a flexible and extensible web application with a set of reusable components. Users can arrange multiple notebooks, text editors, terminals, output areas, and custom components using tabs and collapsible sidebars. These components are carefully designed to enable the user to use them together or separately (for example, a user can send code from a file to a console with a keystroke, or can pop out an output from a notebook to work with it alone). + +JupyterLab is based on a flexible application plugin system provided by PhosphorJS that makes it easy to customize existing components or extend it with new components. For example, users can install or write third-party plugins to view custom file formats, such as GeoJSON, interact with external services, such as Dask or Apache Spark, or display their data in effective and useful ways, such as interactive maps, tables, or plots. + +In this tutorial we’ll walk users thought the best way to make use of JupyterLab, how to transition from the “classic” Jupyter Notebook frontend to JupyterLab, and how to make the best use of the new powerful features of JupyterLab. + + + +Outline. + +// Sticky notes red/green + +1. Overview of JupyterLab + + 0-0:10 (10 min) - introduction of who we are, and others in the room that can help, and rough outline of schedule, explaining of red/green sticky notes, quick installation notes or binder instructions + - We will be using Conda and provide the necessary commands to get everything working. (as an example, see the instructions in the ipywidgets tutorial readme:https://github.com/mwcraig/scipy2017-jupyter-widgets-tutorial) + - If you are not using Conda, we’ll be here to help you but will not make your case a priority. + - There will be a binder available, but do not rely on the conference wifi. + - hopefully should be done before tutorial + - If there are improvements to JupyterLab that you observe, or is something is confusing to you, please write it down and tell us at the break. + MATTHIAS 0:10-0:25 (15min) - Standard slides covering background of notebook and JupyterLab. These are from the jupyterlab-demo repo + - Respond to FAQ: + - Why JupyterLab ? + - Can you get Lab and notebook at the same time: YES + - No difference in file format; Notebooks files are the same + JASON? 0:25-0:45 (20 min): Tour of The User Interface + - if it does not work, hop on binder. + - Point to documentation, follow the naming conventions, maybe follow that outline + - various existing default panel, and layout, file browser, support of multiple file types, multiple file viewers for single file + - Command palette + - Important shortcuts + - Dragging ui + - Inspector + - Can follow the outline in the pydata seattle talk or scipy 2017 lightning talk (see https://github.com/jupyterlab/jupyterlab-demo/tree/master/narrative) + 0:45-1:05 (20 min): Exercise (and help installation issues if needed): + Keep in mind, if something is not intuitive, or not in the place you expected it, write it down, and give it to us at the break. + - Create a new python 3 notebook. + - Create a markdown cell. + - Write some markdown with Bold, italic and Math. + - Create a code cell and evaluate it. + - Try importing Pandas, + - use `pandas?` to get the help on the pandas library. + - try `pandas.D` to get tab completion on the pandas library. + - note that it can take a few second the first time the library get inspected to get result. + - Complete to `DataFrame(` place the cursor after the pen bracket and press `Shift-Tab` to get quick help. + - To always see the info about the current function you can open the inspector via the Cmd-I/Ctrl-I or via the command palette. + - Change the inspector layout to be side-by-side with the notebook. + - use panda’s `read_csv` to load `'demo/data/iris.csv'` into a dataframe, display this dataframe + - Move a cell by dragging + - Collapse and expand an input and output + - Enable output scrolling in a cell that has lots of output + - “Create new view for output” in the context menu of an output. Execute the cell again to see the mirrored output update + - Open the inspector and place it side-by-side with the notebook. Type a command to see the help pop up. + - Open a long notebook. Do “New View into File” from the tab context menu. Scroll down to the bottom of the notebook in one frame, and drag a cell from the top of the file to the bottom by dragging between the two windows. + - Create a new python notebook and put it side by side with the first one. Copy a cell by dragging a cell from the first notebook to this notebook. + - get several notebooks/python/data files opens next to each other to prepare next session + - open the `demo/data/iris.csv` and other data files in separate windows. + - You can duplicate one of the file and use right-click to open both in a viewer an editor. See how modification in one is reflected immediately in the Other. + - Creating new document/notebook/terminal/console + - Refresh to see the interface stays + - (Maybe introduce workspaces?) + - arranging things side-by-side. Come up with specific layouts they have to get + - single-document mode + - Use keyboard shortcuts to use command palette + - Open same notebook in classic notebook + - Opening document with several viewers. Live markdown rendering. + - CSV viewing + - Json/GeoJson. + 1:05-1:15 (10 min): break 10min + sticky notes + 1:15-1:20 (5 min) : Q.A. 5 min . +2. Workflows around executing code + 1:20-1:30 (10 min): Minor Notebook UI interface difference + 1. How to author markdown and equations + 2. Collapsible cells + 3. drag cells + 4. javascript rendering restrictions + 5. creating new view of outputs + 1:30-1:55 (25 min): Attaching kernels to multiple documents + 1. R-markdown like workflow + 2. Developing libraries with notebook and Python files attached to same kernel + 1:55-2:10 (15 min) Exercise + - binding multiple documents to the same kernel (Section II) + - New Console for Notebook + - R-Markdown workflow. + - Python code file + console workflow + - Open in classic notebook, modify, save and reopen in Lab. + 2:10-2:25 (15min) break 10 min + sticky notes + Q.A 5min +3. Customizing JupyterLab + 2:25-2:50 (35min) + 1. Changing editor settings + 2. Changing theme + 3. Json config system over + 4. Changing keyboard shortcuts + 5. Exercise (10 min) + 1. change a keyboard shortcut + 1. Assign existing shortcut to new action. + 2. Assign new Keyboard shortcut to an existing action. + 2. add a keyboard shortcut (restart and run all) + 3. change an editor setting +4. 2:50-3:15 (25min) - Workflows around Widgets + 1. Introduction to widgets and libraries like bqplot, ipyvolume, pythreejs, etc. + 2. Mirroring widget output + 3. Exercise: + 1. Making sure widgets works: + 2. Interact + 3. Simple slider + Graph + 4. bqplot graph controlling another graph +5. Going further (3:15-3:50, 35 min) : + 1. Extending JupyterLab – scratching the surface + - everything is plugin + - installing a plugin, example + - Plotly could be a fun one (https://github.com/plotly/jupyterlab-chart-editor) + - high-level walkthrough of what happens when a plugin is installed/enabled + - requires npm + - recompiling js + - --core-mode + - enabling/disabling extensions + - getting started bootstrapping custom plugin + - Walkthrough of theme plugin + - Walkthrough of simple mimetype rendering plugin + - Exercise: + - Modifying and installing theme plugin + - and/or + - Modifying and installing mimetype plugin + - Point to cookie Cutter. +6. Mention JupyterLab in a multiuser environment: point to jupyterlab docs +7. Mention sprints! +8. 3:50-4:00 QA, Question diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..c0a8f90 --- /dev/null +++ b/readme.md @@ -0,0 +1,53 @@ +# SciPy 2018 JupyterLab tutorial. + +This repository contain material and instructions to follow the "Getting started with JupyterLab" tutorial during SciPy 2018. + +# Installation instructions + +We'd like attendees to read the following section and install the required +software ahead of time. We'll run through the tutorial by assuming that the +wireless connection may be unreliable. + +Do not rely on cloud hosting to follow this tutorial. If possible comes to the +tutorial with a computer where you have administrative privileges. + +We'll assume you are using an Anaconda python distribution. Yo can come with a +non anaconda python distribution we'll do our best to help you, but +non-anaconda installations will not be a priority during the tutorial. + +## install steps: + +1. You can install either the full [anaconda distribution](https://www.continuum.io/downloads) (very extensive, but large) or [miniconda](https://conda.io/miniconda.html) (much smaller, only essential packages). + +2. Create a conda environment: + +``` +$ conda create -n jupyterlab-2018 jupyter notebook jupyterlab --yes + +# Mac/Linux: +$ source activate jupyterlab-2018 + +# Windows: +$ activate jupyterlab-2018 + +``` + + +## Tutorial materials + +To get the tutorial materials, clone this repository. **Please plan to update the materials shortly before the tutorial.** + +``` +git clone https://github.com/jupyter/scipy2018-jupyterLab-tutorial +``` + +update : +``` +$ cd scipy2018-jupyterLab-tutorial +$ git pull +``` + +Feel free to send Pull request to update the material if things are unclear. + + + From 62b42bb15a9bf0cd1c29dd3bbe938c512d69fc13 Mon Sep 17 00:00:00 2001 From: Matthias Bussonnier Date: Fri, 15 Jun 2018 14:00:32 +0200 Subject: [PATCH 002/105] update --- outline.md | 53 ++++++++++++++++++++++++++++++----------------------- readme.md | 2 ++ 2 files changed, 32 insertions(+), 23 deletions(-) diff --git a/outline.md b/outline.md index 56e06b3..a7def0f 100644 --- a/outline.md +++ b/outline.md @@ -5,25 +5,31 @@ JupyterLab is based on a flexible application plugin system provided by Phosphor In this tutorial we’ll walk users thought the best way to make use of JupyterLab, how to transition from the “classic” Jupyter Notebook frontend to JupyterLab, and how to make the best use of the new powerful features of JupyterLab. +You (should) be provided with red and green sticky notes. If you have any question and concern or need help, stick the red sticky note visible on back of your laptop's screen. A helper will come see you, or the speaker will take time to get questions. -Outline. +If all is fine, or we're too slow for you, stick the green sticky note to the +back of your laptop screen. -// Sticky notes red/green +At each break, write a thing you understood of liked on the green sticky note, +a thing you did not like or found hard on the red one. When exiting the room, +stick them to the door frame. Make sure to get new sticky notes for the next +section. ! -1. Overview of JupyterLab +## Overview of JupyterLab - 0-0:10 (10 min) - introduction of who we are, and others in the room that can help, and rough outline of schedule, explaining of red/green sticky notes, quick installation notes or binder instructions - - We will be using Conda and provide the necessary commands to get everything working. (as an example, see the instructions in the ipywidgets tutorial readme:https://github.com/mwcraig/scipy2017-jupyter-widgets-tutorial) +### 0-0:10 (10 min) - introduction of who we are, and others in the room that can help, and rough outline of schedule, explaining of red/green sticky notes, quick installation notes or binder instructions + - We will be using Conda and provide the necessary commands to get everything working See + https://github.com/jupyter/scipy2018-jupyterLab-tutorial - If you are not using Conda, we’ll be here to help you but will not make your case a priority. - - There will be a binder available, but do not rely on the conference wifi. + - There will likely be a binder available, but do not rely on the conference wifi. - hopefully should be done before tutorial - If there are improvements to JupyterLab that you observe, or is something is confusing to you, please write it down and tell us at the break. - MATTHIAS 0:10-0:25 (15min) - Standard slides covering background of notebook and JupyterLab. These are from the jupyterlab-demo repo +### MATTHIAS 0:10-0:25 (15min) - Standard slides covering background of notebook and JupyterLab. These are from the jupyterlab-demo repo - Respond to FAQ: - Why JupyterLab ? - Can you get Lab and notebook at the same time: YES - No difference in file format; Notebooks files are the same - JASON? 0:25-0:45 (20 min): Tour of The User Interface +### JASON? 0:25-0:45 (20 min): Tour of The User Interface - if it does not work, hop on binder. - Point to documentation, follow the naming conventions, maybe follow that outline - various existing default panel, and layout, file browser, support of multiple file types, multiple file viewers for single file @@ -32,7 +38,8 @@ Outline. - Dragging ui - Inspector - Can follow the outline in the pydata seattle talk or scipy 2017 lightning talk (see https://github.com/jupyterlab/jupyterlab-demo/tree/master/narrative) - 0:45-1:05 (20 min): Exercise (and help installation issues if needed): + +### 0:45-1:05 (20 min): Exercise (and help installation issues if needed): Keep in mind, if something is not intuitive, or not in the place you expected it, write it down, and give it to us at the break. - Create a new python 3 notebook. - Create a markdown cell. @@ -66,27 +73,27 @@ Outline. - Opening document with several viewers. Live markdown rendering. - CSV viewing - Json/GeoJson. - 1:05-1:15 (10 min): break 10min + sticky notes - 1:15-1:20 (5 min) : Q.A. 5 min . -2. Workflows around executing code - 1:20-1:30 (10 min): Minor Notebook UI interface difference +### 1:05-1:15 (10 min): break 10min + sticky notes +### 1:15-1:20 (5 min) : Q.A. 5 min . +## Workflows around executing code +### 1:20-1:30 (10 min): Minor Notebook UI interface difference 1. How to author markdown and equations 2. Collapsible cells 3. drag cells 4. javascript rendering restrictions 5. creating new view of outputs - 1:30-1:55 (25 min): Attaching kernels to multiple documents +### 1:30-1:55 (25 min): Attaching kernels to multiple documents 1. R-markdown like workflow 2. Developing libraries with notebook and Python files attached to same kernel - 1:55-2:10 (15 min) Exercise +### 1:55-2:10 (15 min) Exercise - binding multiple documents to the same kernel (Section II) - New Console for Notebook - R-Markdown workflow. - Python code file + console workflow - Open in classic notebook, modify, save and reopen in Lab. - 2:10-2:25 (15min) break 10 min + sticky notes + Q.A 5min -3. Customizing JupyterLab - 2:25-2:50 (35min) +### 2:10-2:25 (15min) break 10 min + sticky notes + Q.A 5min +## Customizing JupyterLab +### 2:25-2:50 (35min) 1. Changing editor settings 2. Changing theme 3. Json config system over @@ -97,7 +104,7 @@ Outline. 2. Assign new Keyboard shortcut to an existing action. 2. add a keyboard shortcut (restart and run all) 3. change an editor setting -4. 2:50-3:15 (25min) - Workflows around Widgets +## 2:50-3:15 (25min) - Workflows around Widgets 1. Introduction to widgets and libraries like bqplot, ipyvolume, pythreejs, etc. 2. Mirroring widget output 3. Exercise: @@ -105,7 +112,7 @@ Outline. 2. Interact 3. Simple slider + Graph 4. bqplot graph controlling another graph -5. Going further (3:15-3:50, 35 min) : +## Going further (3:15-3:50, 35 min) : 1. Extending JupyterLab – scratching the surface - everything is plugin - installing a plugin, example @@ -123,6 +130,6 @@ Outline. - and/or - Modifying and installing mimetype plugin - Point to cookie Cutter. -6. Mention JupyterLab in a multiuser environment: point to jupyterlab docs -7. Mention sprints! -8. 3:50-4:00 QA, Question +## Mention JupyterLab in a multiuser environment: point to jupyterlab docs +## Mention sprints! +## 3:50-4:00 QA, Question diff --git a/readme.md b/readme.md index c0a8f90..c1139b5 100644 --- a/readme.md +++ b/readme.md @@ -32,6 +32,8 @@ $ activate jupyterlab-2018 ``` +If you open multiple terminal windows make sure to activate the environment in each of them. + ## Tutorial materials From a86129798155f8e511334fe0ef24f218b5673d89 Mon Sep 17 00:00:00 2001 From: Matthias Bussonnier Date: Fri, 15 Jun 2018 14:53:57 +0200 Subject: [PATCH 003/105] Ex1 --- Exercise-1/A Notebook has No Name - .ipynb | 614 +++++++++++++++++++++ Exercise-1/Exercise1.md | 61 ++ readme.md | 3 +- 3 files changed, 677 insertions(+), 1 deletion(-) create mode 100644 Exercise-1/A Notebook has No Name - .ipynb create mode 100644 Exercise-1/Exercise1.md diff --git a/Exercise-1/A Notebook has No Name - .ipynb b/Exercise-1/A Notebook has No Name - .ipynb new file mode 100644 index 0000000..ecd51bf --- /dev/null +++ b/Exercise-1/A Notebook has No Name - .ipynb @@ -0,0 +1,614 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is a markdown cell with **bold** _italic_ inline $math$, and formulas:\n", + "\n", + "$$\\pi \\simeq 3$$" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Hello SciPy\n" + ] + } + ], + "source": [ + "print(\"Hello SciPy\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.DataFrame()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0 : 0\n", + "1 : 1\n", + "2 : 4\n", + "3 : 9\n", + "4 : 16\n", + "5 : 25\n", + "6 : 36\n", + "7 : 49\n", + "8 : 64\n", + "9 : 81\n", + "10 : 100\n", + "11 : 121\n", + "12 : 144\n", + "13 : 169\n", + "14 : 196\n", + "15 : 225\n", + "16 : 256\n", + "17 : 289\n", + "18 : 324\n", + "19 : 361\n", + "20 : 400\n", + "21 : 441\n", + "22 : 484\n", + "23 : 529\n", + "24 : 576\n", + "25 : 625\n", + "26 : 676\n", + "27 : 729\n", + "28 : 784\n", + "29 : 841\n", + "30 : 900\n", + "31 : 961\n", + "32 : 1024\n", + "33 : 1089\n", + "34 : 1156\n", + "35 : 1225\n", + "36 : 1296\n", + "37 : 1369\n", + "38 : 1444\n", + "39 : 1521\n", + "40 : 1600\n", + "41 : 1681\n", + "42 : 1764\n", + "43 : 1849\n", + "44 : 1936\n", + "45 : 2025\n", + "46 : 2116\n", + "47 : 2209\n", + "48 : 2304\n", + "49 : 2401\n", + "50 : 2500\n", + "51 : 2601\n", + "52 : 2704\n", + "53 : 2809\n", + "54 : 2916\n", + "55 : 3025\n", + "56 : 3136\n", + "57 : 3249\n", + "58 : 3364\n", + "59 : 3481\n", + "60 : 3600\n", + "61 : 3721\n", + "62 : 3844\n", + "63 : 3969\n", + "64 : 4096\n", + "65 : 4225\n", + "66 : 4356\n", + "67 : 4489\n", + "68 : 4624\n", + "69 : 4761\n", + "70 : 4900\n", + "71 : 5041\n", + "72 : 5184\n", + "73 : 5329\n", + "74 : 5476\n", + "75 : 5625\n", + "76 : 5776\n", + "77 : 5929\n", + "78 : 6084\n", + "79 : 6241\n", + "80 : 6400\n", + "81 : 6561\n", + "82 : 6724\n", + "83 : 6889\n", + "84 : 7056\n", + "85 : 7225\n", + "86 : 7396\n", + "87 : 7569\n", + "88 : 7744\n", + "89 : 7921\n", + "90 : 8100\n", + "91 : 8281\n", + "92 : 8464\n", + "93 : 8649\n", + "94 : 8836\n", + "95 : 9025\n", + "96 : 9216\n", + "97 : 9409\n", + "98 : 9604\n", + "99 : 9801\n", + "100 : 10000\n", + "101 : 10201\n", + "102 : 10404\n", + "103 : 10609\n", + "104 : 10816\n", + "105 : 11025\n", + "106 : 11236\n", + "107 : 11449\n", + "108 : 11664\n", + "109 : 11881\n", + "110 : 12100\n", + "111 : 12321\n", + "112 : 12544\n", + "113 : 12769\n", + "114 : 12996\n", + "115 : 13225\n", + "116 : 13456\n", + "117 : 13689\n", + "118 : 13924\n", + "119 : 14161\n", + "120 : 14400\n", + "121 : 14641\n", + "122 : 14884\n", + "123 : 15129\n", + "124 : 15376\n", + "125 : 15625\n", + "126 : 15876\n", + "127 : 16129\n", + "128 : 16384\n", + "129 : 16641\n", + "130 : 16900\n", + "131 : 17161\n", + "132 : 17424\n", + "133 : 17689\n", + "134 : 17956\n", + "135 : 18225\n", + "136 : 18496\n", + "137 : 18769\n", + "138 : 19044\n", + "139 : 19321\n", + "140 : 19600\n", + "141 : 19881\n", + "142 : 20164\n", + "143 : 20449\n", + "144 : 20736\n", + "145 : 21025\n", + "146 : 21316\n", + "147 : 21609\n", + "148 : 21904\n", + "149 : 22201\n", + "150 : 22500\n", + "151 : 22801\n", + "152 : 23104\n", + "153 : 23409\n", + "154 : 23716\n", + "155 : 24025\n", + "156 : 24336\n", + "157 : 24649\n", + "158 : 24964\n", + "159 : 25281\n", + "160 : 25600\n", + "161 : 25921\n", + "162 : 26244\n", + "163 : 26569\n", + "164 : 26896\n", + "165 : 27225\n", + "166 : 27556\n", + "167 : 27889\n", + "168 : 28224\n", + "169 : 28561\n", + "170 : 28900\n", + "171 : 29241\n", + "172 : 29584\n", + "173 : 29929\n", + "174 : 30276\n", + "175 : 30625\n", + "176 : 30976\n", + "177 : 31329\n", + "178 : 31684\n", + "179 : 32041\n", + "180 : 32400\n", + "181 : 32761\n", + "182 : 33124\n", + "183 : 33489\n", + "184 : 33856\n", + "185 : 34225\n", + "186 : 34596\n", + "187 : 34969\n", + "188 : 35344\n", + "189 : 35721\n", + "190 : 36100\n", + "191 : 36481\n", + "192 : 36864\n", + "193 : 37249\n", + "194 : 37636\n", + "195 : 38025\n", + "196 : 38416\n", + "197 : 38809\n", + "198 : 39204\n", + "199 : 39601\n", + "200 : 40000\n", + "201 : 40401\n", + "202 : 40804\n", + "203 : 41209\n", + "204 : 41616\n", + "205 : 42025\n", + "206 : 42436\n", + "207 : 42849\n", + "208 : 43264\n", + "209 : 43681\n", + "210 : 44100\n", + "211 : 44521\n", + "212 : 44944\n", + "213 : 45369\n", + "214 : 45796\n", + "215 : 46225\n", + "216 : 46656\n", + "217 : 47089\n", + "218 : 47524\n", + "219 : 47961\n", + "220 : 48400\n", + "221 : 48841\n", + "222 : 49284\n", + "223 : 49729\n", + "224 : 50176\n", + "225 : 50625\n", + "226 : 51076\n", + "227 : 51529\n", + "228 : 51984\n", + "229 : 52441\n", + "230 : 52900\n", + "231 : 53361\n", + "232 : 53824\n", + "233 : 54289\n", + "234 : 54756\n", + "235 : 55225\n", + "236 : 55696\n", + "237 : 56169\n", + "238 : 56644\n", + "239 : 57121\n", + "240 : 57600\n", + "241 : 58081\n", + "242 : 58564\n", + "243 : 59049\n", + "244 : 59536\n", + "245 : 60025\n", + "246 : 60516\n", + "247 : 61009\n", + "248 : 61504\n", + "249 : 62001\n", + "250 : 62500\n", + "251 : 63001\n", + "252 : 63504\n", + "253 : 64009\n", + "254 : 64516\n", + "255 : 65025\n", + "256 : 65536\n", + "257 : 66049\n", + "258 : 66564\n", + "259 : 67081\n", + "260 : 67600\n", + "261 : 68121\n", + "262 : 68644\n", + "263 : 69169\n", + "264 : 69696\n", + "265 : 70225\n", + "266 : 70756\n", + "267 : 71289\n", + "268 : 71824\n", + "269 : 72361\n", + "270 : 72900\n", + "271 : 73441\n", + "272 : 73984\n", + "273 : 74529\n", + "274 : 75076\n", + "275 : 75625\n", + "276 : 76176\n", + "277 : 76729\n", + "278 : 77284\n", + "279 : 77841\n", + "280 : 78400\n", + "281 : 78961\n", + "282 : 79524\n", + "283 : 80089\n", + "284 : 80656\n", + "285 : 81225\n", + "286 : 81796\n", + "287 : 82369\n", + "288 : 82944\n", + "289 : 83521\n", + "290 : 84100\n", + "291 : 84681\n", + "292 : 85264\n", + "293 : 85849\n", + "294 : 86436\n", + "295 : 87025\n", + "296 : 87616\n", + "297 : 88209\n", + "298 : 88804\n", + "299 : 89401\n", + "300 : 90000\n", + "301 : 90601\n", + "302 : 91204\n", + "303 : 91809\n", + "304 : 92416\n", + "305 : 93025\n", + "306 : 93636\n", + "307 : 94249\n", + "308 : 94864\n", + "309 : 95481\n", + "310 : 96100\n", + "311 : 96721\n", + "312 : 97344\n", + "313 : 97969\n", + "314 : 98596\n", + "315 : 99225\n", + "316 : 99856\n", + "317 : 100489\n", + "318 : 101124\n", + "319 : 101761\n", + "320 : 102400\n", + "321 : 103041\n", + "322 : 103684\n", + "323 : 104329\n", + "324 : 104976\n", + "325 : 105625\n", + "326 : 106276\n", + "327 : 106929\n", + "328 : 107584\n", + "329 : 108241\n", + "330 : 108900\n", + "331 : 109561\n", + "332 : 110224\n", + "333 : 110889\n", + "334 : 111556\n", + "335 : 112225\n", + "336 : 112896\n", + "337 : 113569\n", + "338 : 114244\n", + "339 : 114921\n", + "340 : 115600\n", + "341 : 116281\n", + "342 : 116964\n", + "343 : 117649\n", + "344 : 118336\n", + "345 : 119025\n", + "346 : 119716\n", + "347 : 120409\n", + "348 : 121104\n", + "349 : 121801\n", + "350 : 122500\n", + "351 : 123201\n", + "352 : 123904\n", + "353 : 124609\n", + "354 : 125316\n", + "355 : 126025\n", + "356 : 126736\n", + "357 : 127449\n", + "358 : 128164\n", + "359 : 128881\n", + "360 : 129600\n", + "361 : 130321\n", + "362 : 131044\n", + "363 : 131769\n", + "364 : 132496\n", + "365 : 133225\n", + "366 : 133956\n", + "367 : 134689\n", + "368 : 135424\n", + "369 : 136161\n", + "370 : 136900\n", + "371 : 137641\n", + "372 : 138384\n", + "373 : 139129\n", + "374 : 139876\n", + "375 : 140625\n", + "376 : 141376\n", + "377 : 142129\n", + "378 : 142884\n", + "379 : 143641\n", + "380 : 144400\n", + "381 : 145161\n", + "382 : 145924\n", + "383 : 146689\n", + "384 : 147456\n", + "385 : 148225\n", + "386 : 148996\n", + "387 : 149769\n", + "388 : 150544\n", + "389 : 151321\n", + "390 : 152100\n", + "391 : 152881\n", + "392 : 153664\n", + "393 : 154449\n", + "394 : 155236\n", + "395 : 156025\n", + "396 : 156816\n", + "397 : 157609\n", + "398 : 158404\n", + "399 : 159201\n", + "400 : 160000\n", + "401 : 160801\n", + "402 : 161604\n", + "403 : 162409\n", + "404 : 163216\n", + "405 : 164025\n", + "406 : 164836\n", + "407 : 165649\n", + "408 : 166464\n", + "409 : 167281\n", + "410 : 168100\n", + "411 : 168921\n", + "412 : 169744\n", + "413 : 170569\n", + "414 : 171396\n", + "415 : 172225\n", + "416 : 173056\n", + "417 : 173889\n", + "418 : 174724\n", + "419 : 175561\n", + "420 : 176400\n", + "421 : 177241\n", + "422 : 178084\n", + "423 : 178929\n", + "424 : 179776\n", + "425 : 180625\n", + "426 : 181476\n", + "427 : 182329\n", + "428 : 183184\n", + "429 : 184041\n", + "430 : 184900\n", + "431 : 185761\n", + "432 : 186624\n", + "433 : 187489\n", + "434 : 188356\n", + "435 : 189225\n", + "436 : 190096\n", + "437 : 190969\n", + "438 : 191844\n", + "439 : 192721\n", + "440 : 193600\n", + "441 : 194481\n", + "442 : 195364\n", + "443 : 196249\n", + "444 : 197136\n", + "445 : 198025\n", + "446 : 198916\n", + "447 : 199809\n", + "448 : 200704\n", + "449 : 201601\n", + "450 : 202500\n", + "451 : 203401\n", + "452 : 204304\n", + "453 : 205209\n", + "454 : 206116\n", + "455 : 207025\n", + "456 : 207936\n", + "457 : 208849\n", + "458 : 209764\n", + "459 : 210681\n", + "460 : 211600\n", + "461 : 212521\n", + "462 : 213444\n", + "463 : 214369\n", + "464 : 215296\n", + "465 : 216225\n", + "466 : 217156\n", + "467 : 218089\n", + "468 : 219024\n", + "469 : 219961\n", + "470 : 220900\n", + "471 : 221841\n", + "472 : 222784\n", + "473 : 223729\n", + "474 : 224676\n", + "475 : 225625\n", + "476 : 226576\n", + "477 : 227529\n", + "478 : 228484\n", + "479 : 229441\n", + "480 : 230400\n", + "481 : 231361\n", + "482 : 232324\n", + "483 : 233289\n", + "484 : 234256\n", + "485 : 235225\n", + "486 : 236196\n", + "487 : 237169\n", + "488 : 238144\n", + "489 : 239121\n", + "490 : 240100\n", + "491 : 241081\n", + "492 : 242064\n", + "493 : 243049\n", + "494 : 244036\n", + "495 : 245025\n", + "496 : 246016\n", + "497 : 247009\n", + "498 : 248004\n", + "499 : 249001\n" + ] + } + ], + "source": [ + "for i in range(500):\n", + " print(i,\":\",i**2)\n", + " " + ] + }, + { + "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.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Exercise-1/Exercise1.md b/Exercise-1/Exercise1.md new file mode 100644 index 0000000..4aa231c --- /dev/null +++ b/Exercise-1/Exercise1.md @@ -0,0 +1,61 @@ +# Exercises + +Remove all the sticky notes from your screen :-) and attempt the following. +These are _guidelines_, feel free to ere on the side of workflow and +options that suits _you_ if you find them best. + +Keep in mind, if something is not intuitive, or not in the place you expected it, write +it down (for example on the red sticky note), and give it to us at the break. + +## 1. View this file as rendered markdown. + +You should be able to view this file as a rendered markdown. + +## 2. Arrange the edit and view side by side + +Or bellow each other, to still be able to follow instructions +while completing the rest of the tasks. + +Did you manage that ? +YOUR ANSWER HERE + +See how the view live updates. + +### 3. Create a new Python 3 notebook + +- Create a new python 3 notebook. + - Change the first cell to markdown, and write some markdown with + - Bold + - italic + - Math (inilne and formulas) + - Code (triple backtick fences ` ``` `, and indented 4 spaces) + - Create a code cell and evaluate it, printing "Hello SciPy" + - Describe the difference between the Ctrl-Enter, Shift-Enter, and Alt-Enter shortcuts + - try importing `pandas` + - use pandas? to get the help on the pandas library. + - try `pandas.D` to get tab completion on the pandas library. Note that completions can take a few second the first time the library get inspected to get result. + - Complete to `pandas.DataFrame(` place the cursor after the open bracket and press `Shift-Tab` to get quick help. + - To always see the info about the current function you can open the inspector via the command palette. + - Use the command palette the find the Keyboard shortcut to open the inspector. + - Change the inspector layout to be side-by-side with the notebook. + - use panda’s `read_csv` to load `'demo/data/iris.csv'` into a dataframe, display this dataframe + - Move a cell by dragging + - Find how to collapse and expand an input and output + - Find how to enable output scrolling in a cell that has lots of output + - Try “Create new view for output” in the context menu of an output. Modify and execute the cell again to see the mirrored output update + +Open a long notebook. Do “New View into File” from the tab context menu. Scroll down to the bottom of the notebook in one frame, and drag a cell from the top of the file to the bottom by dragging between the two windows. +Create a new python notebook and put it side by side with the first one. Copy a cell by dragging a cell from the first notebook to this notebook. +get several notebooks/python/data files opens next to each other to prepare next session +open the demo/data/iris.csv and other data files in separate windows. +You can duplicate one of the file and use right-click to open both in a viewer an editor. See how modification in one is reflected immediately in the Other. +Creating new document/notebook/terminal/console +Refresh to see the interface stays +(Maybe introduce workspaces?) +arranging things side-by-side. Come up with specific layouts they have to get +single-document mode +Use keyboard shortcuts to use command palette +Open same notebook in classic notebook +Opening document with several viewers. Live markdown rendering. +CSV viewing +Json/GeoJson. \ No newline at end of file diff --git a/readme.md b/readme.md index c1139b5..6ac676c 100644 --- a/readme.md +++ b/readme.md @@ -22,7 +22,8 @@ non-anaconda installations will not be a priority during the tutorial. 2. Create a conda environment: ``` -$ conda create -n jupyterlab-2018 jupyter notebook jupyterlab --yes +$ conda config --add channels conda-forge +$ conda create -n jupyterlab-2018 jupyter notebook jupyterlab pandas --yes # Mac/Linux: $ source activate jupyterlab-2018 From 7dcee39ecfd6262441360f36a4b15dd714e8af23 Mon Sep 17 00:00:00 2001 From: Matthias Bussonnier Date: Fri, 15 Jun 2018 18:41:37 +0200 Subject: [PATCH 004/105] update --- Exercise-1/Exercise1.md | 63 +++++++++++++++++----------------------- Exercise-2/Exercide-2.md | 34 ++++++++++++++++++++++ outline.md | 51 +++++++------------------------- 3 files changed, 70 insertions(+), 78 deletions(-) create mode 100644 Exercise-2/Exercide-2.md diff --git a/Exercise-1/Exercise1.md b/Exercise-1/Exercise1.md index 4aa231c..9b6c542 100644 --- a/Exercise-1/Exercise1.md +++ b/Exercise-1/Exercise1.md @@ -1,4 +1,4 @@ -# Exercises +# Exercises 2 Remove all the sticky notes from your screen :-) and attempt the following. These are _guidelines_, feel free to ere on the side of workflow and @@ -23,39 +23,28 @@ See how the view live updates. ### 3. Create a new Python 3 notebook -- Create a new python 3 notebook. - - Change the first cell to markdown, and write some markdown with - - Bold - - italic - - Math (inilne and formulas) - - Code (triple backtick fences ` ``` `, and indented 4 spaces) - - Create a code cell and evaluate it, printing "Hello SciPy" - - Describe the difference between the Ctrl-Enter, Shift-Enter, and Alt-Enter shortcuts - - try importing `pandas` - - use pandas? to get the help on the pandas library. - - try `pandas.D` to get tab completion on the pandas library. Note that completions can take a few second the first time the library get inspected to get result. - - Complete to `pandas.DataFrame(` place the cursor after the open bracket and press `Shift-Tab` to get quick help. - - To always see the info about the current function you can open the inspector via the command palette. - - Use the command palette the find the Keyboard shortcut to open the inspector. - - Change the inspector layout to be side-by-side with the notebook. - - use panda’s `read_csv` to load `'demo/data/iris.csv'` into a dataframe, display this dataframe - - Move a cell by dragging - - Find how to collapse and expand an input and output - - Find how to enable output scrolling in a cell that has lots of output - - Try “Create new view for output” in the context menu of an output. Modify and execute the cell again to see the mirrored output update - -Open a long notebook. Do “New View into File” from the tab context menu. Scroll down to the bottom of the notebook in one frame, and drag a cell from the top of the file to the bottom by dragging between the two windows. -Create a new python notebook and put it side by side with the first one. Copy a cell by dragging a cell from the first notebook to this notebook. -get several notebooks/python/data files opens next to each other to prepare next session -open the demo/data/iris.csv and other data files in separate windows. -You can duplicate one of the file and use right-click to open both in a viewer an editor. See how modification in one is reflected immediately in the Other. -Creating new document/notebook/terminal/console -Refresh to see the interface stays -(Maybe introduce workspaces?) -arranging things side-by-side. Come up with specific layouts they have to get -single-document mode -Use keyboard shortcuts to use command palette -Open same notebook in classic notebook -Opening document with several viewers. Live markdown rendering. -CSV viewing -Json/GeoJson. \ No newline at end of file + +- Change the first cell to markdown, and write some markdown with + - Bold + - italic + - Math (inilne and formulas) + - Code (triple backtick fences ` ``` `, and indented 4 spaces) +- Create a code cell and evaluate it, printing "Hello SciPy" + - Describe the difference between the Ctrl-Enter, Shift-Enter, and Alt-Enter shortcuts + - try importing `pandas` + - use pandas? to get the help on the pandas library. + - try `pandas.D` to get tab completion on the pandas library. Note that completions can take a few second the first time the library get inspected to get result. + - Complete to `pandas.DataFrame(` place the cursor after the open bracket and press `Shift-Tab` to get quick help. + - To always see the info about the current function you can open the inspector via the command palette. + - Use the command palette the find the Keyboard shortcut to open the inspector. + - Change the inspector layout to be side-by-side with the notebook. + - Type a command to see the help pop up. + - TODO: use panda’s `read_csv` to load `'demo/data/iris.csv'` into a dataframe, display this dataframe + - Move a cell by dragging + - Find how to collapse and expand an input and output + - Find how to enable output scrolling in a cell that has lots of output + - Try “Create new view for output” in the context menu of an output. Modify and execute the cell again to see the mirrored output update (will learn more in section 2) +- Learn the various Keyboard shortcuts. + - How to open command palette +- TODO : CSV viewing +- TODO : Json/GeoJson. \ No newline at end of file diff --git a/Exercise-2/Exercide-2.md b/Exercise-2/Exercide-2.md new file mode 100644 index 0000000..f17c988 --- /dev/null +++ b/Exercise-2/Exercide-2.md @@ -0,0 +1,34 @@ +# Exercises 2 + +Remove all the sticky notes from your screen :-) and attempt the following. +These are _guidelines_, feel free to ere on the side of workflow and +options that suits _you_ if you find them best. + +Keep in mind, if something is not intuitive, or not in the place you expected it, write +it down (for example on the red sticky note), and give it to us at the break. + + +- Create a new python notebook and put it side by side with the first one. + - Copy a cell by dragging a cell from the first notebook to this notebook. + - TODO: get several notebooks/python/data files opens next to each other to prepare next session + - TODO open the demo/data/iris.csv and other data files in separate windows. + +- TODO: Open a long notebook. + - Do “New View into File” from the tab context menu. + - Scroll down to the bottom of the notebook in one frame, and drag a cell from the top of the file to the bottom by dragging between the two windows. + +- Try arranging different layout, and refresh the page. Get a feeling of which layout element persist across refresh + - TODO :arranging things side-by-side. Come up with specific layouts they have to get + - Try to find information about "single-document mode" + +- binding multiple documents to the same kernel (Section II) + - New Console for Notebook + - R-Markdown workflow. + - Python code file + console workflow + - Open in classic notebook, modify, save and reopen in Lab. + - Try creating new document/notebook/terminal/console + + +- Look in the help menu how to open same notebook in classic notebook + + \ No newline at end of file diff --git a/outline.md b/outline.md index a7def0f..3f2917c 100644 --- a/outline.md +++ b/outline.md @@ -35,49 +35,18 @@ section. ! - various existing default panel, and layout, file browser, support of multiple file types, multiple file viewers for single file - Command palette - Important shortcuts - - Dragging ui - - Inspector - Can follow the outline in the pydata seattle talk or scipy 2017 lightning talk (see https://github.com/jupyterlab/jupyterlab-demo/tree/master/narrative) -### 0:45-1:05 (20 min): Exercise (and help installation issues if needed): - Keep in mind, if something is not intuitive, or not in the place you expected it, write it down, and give it to us at the break. - - Create a new python 3 notebook. - - Create a markdown cell. - - Write some markdown with Bold, italic and Math. - - Create a code cell and evaluate it. - - Try importing Pandas, - - use `pandas?` to get the help on the pandas library. - - try `pandas.D` to get tab completion on the pandas library. - - note that it can take a few second the first time the library get inspected to get result. - - Complete to `DataFrame(` place the cursor after the pen bracket and press `Shift-Tab` to get quick help. - - To always see the info about the current function you can open the inspector via the Cmd-I/Ctrl-I or via the command palette. - - Change the inspector layout to be side-by-side with the notebook. - - use panda’s `read_csv` to load `'demo/data/iris.csv'` into a dataframe, display this dataframe - - Move a cell by dragging - - Collapse and expand an input and output - - Enable output scrolling in a cell that has lots of output - - “Create new view for output” in the context menu of an output. Execute the cell again to see the mirrored output update - - Open the inspector and place it side-by-side with the notebook. Type a command to see the help pop up. - - Open a long notebook. Do “New View into File” from the tab context menu. Scroll down to the bottom of the notebook in one frame, and drag a cell from the top of the file to the bottom by dragging between the two windows. - - Create a new python notebook and put it side by side with the first one. Copy a cell by dragging a cell from the first notebook to this notebook. - - get several notebooks/python/data files opens next to each other to prepare next session - - open the `demo/data/iris.csv` and other data files in separate windows. - - You can duplicate one of the file and use right-click to open both in a viewer an editor. See how modification in one is reflected immediately in the Other. - - Creating new document/notebook/terminal/console - - Refresh to see the interface stays - - (Maybe introduce workspaces?) - - arranging things side-by-side. Come up with specific layouts they have to get - - single-document mode - - Use keyboard shortcuts to use command palette - - Open same notebook in classic notebook - - Opening document with several viewers. Live markdown rendering. - - CSV viewing - - Json/GeoJson. +### 0:45-1:05 (20 min): Exercise 1 (and help installation issues if needed): + +Look into the Exercide 1 folder, and follow the instruction in `Exercise-1.md` + ### 1:05-1:15 (10 min): break 10min + sticky notes ### 1:15-1:20 (5 min) : Q.A. 5 min . ## Workflows around executing code ### 1:20-1:30 (10 min): Minor Notebook UI interface difference 1. How to author markdown and equations + 2. Dragging ui 2. Collapsible cells 3. drag cells 4. javascript rendering restrictions @@ -85,8 +54,8 @@ section. ! ### 1:30-1:55 (25 min): Attaching kernels to multiple documents 1. R-markdown like workflow 2. Developing libraries with notebook and Python files attached to same kernel -### 1:55-2:10 (15 min) Exercise - - binding multiple documents to the same kernel (Section II) +### 1:55-2:10 (15 min) Exercise 2 + - binding multiple documents to the same kernel - New Console for Notebook - R-Markdown workflow. - Python code file + console workflow @@ -98,7 +67,7 @@ section. ! 2. Changing theme 3. Json config system over 4. Changing keyboard shortcuts - 5. Exercise (10 min) + 5. Exercise 3 (10 min) 1. change a keyboard shortcut 1. Assign existing shortcut to new action. 2. Assign new Keyboard shortcut to an existing action. @@ -107,7 +76,7 @@ section. ! ## 2:50-3:15 (25min) - Workflows around Widgets 1. Introduction to widgets and libraries like bqplot, ipyvolume, pythreejs, etc. 2. Mirroring widget output - 3. Exercise: + 3. Exercise 4: 1. Making sure widgets works: 2. Interact 3. Simple slider + Graph @@ -125,7 +94,7 @@ section. ! - getting started bootstrapping custom plugin - Walkthrough of theme plugin - Walkthrough of simple mimetype rendering plugin - - Exercise: + - Exercise 4: - Modifying and installing theme plugin - and/or - Modifying and installing mimetype plugin From ddb2c320e7df603e31d2bdfa3f7a8320eb99fe69 Mon Sep 17 00:00:00 2001 From: Matthias Bussonnier Date: Sat, 16 Jun 2018 10:49:17 +0200 Subject: [PATCH 005/105] some updates --- outline.md | 69 ++++++++++++++++++++++++++++++++++++++++++------------ readme.md | 2 +- 2 files changed, 55 insertions(+), 16 deletions(-) diff --git a/outline.md b/outline.md index 3f2917c..3ab0862 100644 --- a/outline.md +++ b/outline.md @@ -13,17 +13,36 @@ back of your laptop screen. At each break, write a thing you understood of liked on the green sticky note, a thing you did not like or found hard on the red one. When exiting the room, stick them to the door frame. Make sure to get new sticky notes for the next -section. ! +section. + +This ca serve as a quick read through summary of what we talked about (with +links) and a rough timeline if you want to follow up on the video later. + +## Overview of JupyterLab, + +### 0-0:10 (10 min) - introduction + +Today this tutorial will be presented to you by Jason Grout, and Matthias +Bussonnier, two long standing member of the Jupyter Project. We have a number +of helpers in the Room. In person attendees should have been giver red/green +sticky notes. + +By now you should have installed jupyterlab following the instructions in the readme. +If you are not using Conda, we’ll be here to help you but will not make your case a priority. + +Keep in mind that JupyterLab is (still) in beta and that first time impression +are critical to usability of JupyterLab. We will show you what can be done, but +can still improve the usability quite a bit. When trying to do any task in the +exercise try to think first: + - How would I do that + - Then try to do the task. + - Note what was intuitive, and what surprised you. + - Tell it to us (via post it or issues) + - Feel free to interrupt with questions and clarification -## Overview of JupyterLab -### 0-0:10 (10 min) - introduction of who we are, and others in the room that can help, and rough outline of schedule, explaining of red/green sticky notes, quick installation notes or binder instructions - - We will be using Conda and provide the necessary commands to get everything working See - https://github.com/jupyter/scipy2018-jupyterLab-tutorial - - If you are not using Conda, we’ll be here to help you but will not make your case a priority. - There will likely be a binder available, but do not rely on the conference wifi. - - hopefully should be done before tutorial - - If there are improvements to JupyterLab that you observe, or is something is confusing to you, please write it down and tell us at the break. + ### MATTHIAS 0:10-0:25 (15min) - Standard slides covering background of notebook and JupyterLab. These are from the jupyterlab-demo repo - Respond to FAQ: - Why JupyterLab ? @@ -39,41 +58,59 @@ section. ! ### 0:45-1:05 (20 min): Exercise 1 (and help installation issues if needed): -Look into the Exercide 1 folder, and follow the instruction in `Exercise-1.md` +Look into the Exercise 1 folder, and follow the instruction in `Exercise-1.md` ### 1:05-1:15 (10 min): break 10min + sticky notes + +Write one good thing on the green sticky note, one bad on the red one. + ### 1:15-1:20 (5 min) : Q.A. 5 min . + ## Workflows around executing code + ### 1:20-1:30 (10 min): Minor Notebook UI interface difference + 1. How to author markdown and equations 2. Dragging ui 2. Collapsible cells 3. drag cells 4. javascript rendering restrictions 5. creating new view of outputs -### 1:30-1:55 (25 min): Attaching kernels to multiple documents - 1. R-markdown like workflow - 2. Developing libraries with notebook and Python files attached to same kernel -### 1:55-2:10 (15 min) Exercise 2 + +### 1:30-1:55 (20 min): Attaching kernels to multiple documents + + 1. R-markdown like workflow + 2. Developing libraries with notebook and Python files attached to same kernel + +### 1:55-2:10 (10 min) Exercise 2 + - binding multiple documents to the same kernel - New Console for Notebook - R-Markdown workflow. - Python code file + console workflow - Open in classic notebook, modify, save and reopen in Lab. + ### 2:10-2:25 (15min) break 10 min + sticky notes + Q.A 5min + + + ## Customizing JupyterLab + ### 2:25-2:50 (35min) + 1. Changing editor settings 2. Changing theme - 3. Json config system over + 3. Json config system overvie 4. Changing keyboard shortcuts - 5. Exercise 3 (10 min) + 5. Exercise 3 (10 min)A 1. change a keyboard shortcut 1. Assign existing shortcut to new action. 2. Assign new Keyboard shortcut to an existing action. 2. add a keyboard shortcut (restart and run all) 3. change an editor setting + ## 2:50-3:15 (25min) - Workflows around Widgets + 1. Introduction to widgets and libraries like bqplot, ipyvolume, pythreejs, etc. 2. Mirroring widget output 3. Exercise 4: @@ -81,7 +118,9 @@ Look into the Exercide 1 folder, and follow the instruction in `Exercise-1.md` 2. Interact 3. Simple slider + Graph 4. bqplot graph controlling another graph + ## Going further (3:15-3:50, 35 min) : + 1. Extending JupyterLab – scratching the surface - everything is plugin - installing a plugin, example diff --git a/readme.md b/readme.md index 6ac676c..ce706b5 100644 --- a/readme.md +++ b/readme.md @@ -23,7 +23,7 @@ non-anaconda installations will not be a priority during the tutorial. ``` $ conda config --add channels conda-forge -$ conda create -n jupyterlab-2018 jupyter notebook jupyterlab pandas --yes +$ conda create -n jupyterlab-2018 notebook jupyterlab pandas nodejs bqplot ipyvolume pythreejs --yes # Mac/Linux: $ source activate jupyterlab-2018 From 4c2135183d57f3927ad032fb9446a0a820abd1af Mon Sep 17 00:00:00 2001 From: Jason Grout Date: Sat, 16 Jun 2018 10:47:02 -0700 Subject: [PATCH 006/105] Update readme. --- readme.md | 39 ++++++++++++++++++--------------------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/readme.md b/readme.md index ce706b5..12c8e6d 100644 --- a/readme.md +++ b/readme.md @@ -1,35 +1,35 @@ -# SciPy 2018 JupyterLab tutorial. +# SciPy 2018 JupyterLab tutorial. This repository contain material and instructions to follow the "Getting started with JupyterLab" tutorial during SciPy 2018. -# Installation instructions +# Installation We'd like attendees to read the following section and install the required -software ahead of time. We'll run through the tutorial by assuming that the -wireless connection may be unreliable. +software ahead of time. We may ask you to update versions of the software more +closely to the tutorial date. -Do not rely on cloud hosting to follow this tutorial. If possible comes to the -tutorial with a computer where you have administrative privileges. +Please do not rely on cloud hosting to follow this tutorial, as the network +connection may be unreliable. If possible, come to the tutorial with a computer +where you have administrative privileges. -We'll assume you are using an Anaconda python distribution. Yo can come with a -non anaconda python distribution we'll do our best to help you, but -non-anaconda installations will not be a priority during the tutorial. +We'll assume you are using an Anaconda Python distribution (such as Anaconda or +miniconda). If you choose to work with a different Python distribution, we'll do +our best to help you, but you may have to solve any difficulties on your own. -## install steps: +## Software installation -1. You can install either the full [anaconda distribution](https://www.continuum.io/downloads) (very extensive, but large) or [miniconda](https://conda.io/miniconda.html) (much smaller, only essential packages). +1. Install either the full [anaconda distribution](https://www.continuum.io/downloads) (very extensive, but large) or [miniconda](https://conda.io/miniconda.html) (much smaller, only essential packages). 2. Create a conda environment: ``` -$ conda config --add channels conda-forge -$ conda create -n jupyterlab-2018 notebook jupyterlab pandas nodejs bqplot ipyvolume pythreejs --yes +$ conda create -c conda-forge -n scipy18jlab notebook jupyterlab pandas nodejs bqplot ipyvolume pythreejs --yes # Mac/Linux: -$ source activate jupyterlab-2018 +$ conda activate scipy18jlab # Windows: -$ activate jupyterlab-2018 +$ conda activate scipy18jlab ``` @@ -41,16 +41,13 @@ If you open multiple terminal windows make sure to activate the environment in e To get the tutorial materials, clone this repository. **Please plan to update the materials shortly before the tutorial.** ``` -git clone https://github.com/jupyter/scipy2018-jupyterLab-tutorial +git clone https://github.com/jupyterlab/scipy2018-jupyterLab-tutorial ``` -update : +To update the materials: ``` $ cd scipy2018-jupyterLab-tutorial $ git pull ``` -Feel free to send Pull request to update the material if things are unclear. - - - +Feel free to send a pull request to update these materials if things are unclear. From 3efe5857b78efbf94419414b6bd3ad701ea4f8a5 Mon Sep 17 00:00:00 2001 From: Matthias Bussonnier Date: Mon, 18 Jun 2018 12:28:37 +0200 Subject: [PATCH 007/105] labextensions --- readme.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/readme.md b/readme.md index ce706b5..0f129e2 100644 --- a/readme.md +++ b/readme.md @@ -31,6 +31,10 @@ $ source activate jupyterlab-2018 # Windows: $ activate jupyterlab-2018 +# to use widgets +$ jupyter labextension install @jupyter-widgets/jupyterlab-manager +$ jupyter labextension install jupyter-threejs ipyvolume + ``` If you open multiple terminal windows make sure to activate the environment in each of them. From 3885648cdb43aae7cb52c3184106af4139a704cb Mon Sep 17 00:00:00 2001 From: Matthias Bussonnier Date: Mon, 18 Jun 2018 12:36:57 +0200 Subject: [PATCH 008/105] compact and simplify instructions --- readme.md | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/readme.md b/readme.md index f015981..a255a15 100644 --- a/readme.md +++ b/readme.md @@ -25,16 +25,10 @@ our best to help you, but you may have to solve any difficulties on your own. ``` $ conda create -c conda-forge -n scipy18jlab notebook jupyterlab pandas nodejs bqplot ipyvolume pythreejs --yes -# Mac/Linux: -$ conda activate scipy18jlab - -# Windows: $ conda activate scipy18jlab # to use widgets -$ jupyter labextension install @jupyter-widgets/jupyterlab-manager -$ jupyter labextension install jupyter-threejs ipyvolume - +$ jupyter labextension install @jupyter-widgets/jupyterlab-manager jupyter-threejs ipyvolume ``` If you open multiple terminal windows make sure to activate the environment in each of them. @@ -54,4 +48,4 @@ $ cd scipy2018-jupyterLab-tutorial $ git pull ``` -Feel free to send a pull request to update these materials if things are unclear. +Feel free to open an issue or send a pull request to update these materials if things are unclear. From 077c91d0dc387ed95c6e1ddf328e140b69db5e50 Mon Sep 17 00:00:00 2001 From: Matthias Bussonnier Date: Mon, 18 Jun 2018 13:55:28 +0200 Subject: [PATCH 009/105] fix more instructions --- outline.md | 3 ++- readme.md | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/outline.md b/outline.md index 3ab0862..e2c8450 100644 --- a/outline.md +++ b/outline.md @@ -102,7 +102,7 @@ Write one good thing on the green sticky note, one bad on the red one. 2. Changing theme 3. Json config system overvie 4. Changing keyboard shortcuts - 5. Exercise 3 (10 min)A + 5. Exercise 3 (10 min) 1. change a keyboard shortcut 1. Assign existing shortcut to new action. 2. Assign new Keyboard shortcut to an existing action. @@ -124,6 +124,7 @@ Write one good thing on the green sticky note, one bad on the red one. 1. Extending JupyterLab – scratching the surface - everything is plugin - installing a plugin, example + - rendere : https://github.com/jupyterlab/jupyter-renderers - Plotly could be a fun one (https://github.com/plotly/jupyterlab-chart-editor) - high-level walkthrough of what happens when a plugin is installed/enabled - requires npm diff --git a/readme.md b/readme.md index a255a15..ff53310 100644 --- a/readme.md +++ b/readme.md @@ -28,7 +28,7 @@ $ conda create -c conda-forge -n scipy18jlab notebook jupyterlab pandas nodejs b $ conda activate scipy18jlab # to use widgets -$ jupyter labextension install @jupyter-widgets/jupyterlab-manager jupyter-threejs ipyvolume +$ jupyter labextension install @jupyter-widgets/jupyterlab-manager jupyter-threejs ipyvolume bqplot ``` If you open multiple terminal windows make sure to activate the environment in each of them. From dc6059fa92871d94e68f58d7700886a3349ece69 Mon Sep 17 00:00:00 2001 From: Matthias Bussonnier Date: Mon, 18 Jun 2018 14:48:01 +0200 Subject: [PATCH 010/105] add data and notebooks --- ...acting_Galaxy_AM_0500-620_(2008-04-24).jpg | Bin 0 -> 228027 bytes data/Dockerfile | 100 + data/Museums_in_DC.geojson | 1 + data/README.md | 26 + data/bar.vl.json | 1 + data/iris.csv | 151 ++ ...pan_meterological_agency_201707211555.json | 1 + data/zika_assembled_genomes.fasta | 2002 +++++++++++++++++ notebooks/Data.ipynb | 874 +++++++ notebooks/Fasta.ipynb | 65 + notebooks/Lorenz.ipynb | 233 ++ notebooks/bqplot demo.ipynb | 188 ++ notebooks/lorenz.py | 46 + 13 files changed, 3688 insertions(+) create mode 100644 data/1024px-Hubble_Interacting_Galaxy_AM_0500-620_(2008-04-24).jpg create mode 100644 data/Dockerfile create mode 100644 data/Museums_in_DC.geojson create mode 100644 data/README.md create mode 100644 data/bar.vl.json create mode 100644 data/iris.csv create mode 100644 data/japan_meterological_agency_201707211555.json create mode 100644 data/zika_assembled_genomes.fasta create mode 100644 notebooks/Data.ipynb create mode 100644 notebooks/Fasta.ipynb create mode 100644 notebooks/Lorenz.ipynb create mode 100644 notebooks/bqplot demo.ipynb create mode 100644 notebooks/lorenz.py diff --git a/data/1024px-Hubble_Interacting_Galaxy_AM_0500-620_(2008-04-24).jpg b/data/1024px-Hubble_Interacting_Galaxy_AM_0500-620_(2008-04-24).jpg new file mode 100644 index 0000000000000000000000000000000000000000..286e6a2f7501826a8ee43d4d6a127c925a7b9670 GIT binary patch literal 228027 zcmb4~_di?z`~OddhzN}swFR-Yuf(cRZ9+t1?;0JkNokFu)gg&e6pa`~ZLwk$HT$ZT z+O1WqimI2YmX;2kihle4;qwQ4ujh}?b9>ybAI`bXd7Q`n`DgCWGJvuoQ^^1b1Ooj2 zF5u4sU=F~bd@w#J48{lJ=ZC=&C>J&ppvAP58khVVndU@!>G4+4t-5JfbesO0Dk z4Hwm6@|k6nHuZdhDL?zq=`+8Wu8(*G)?7l51?QCg6_Ea)^#AJr)Bykl{-6BcJ-xqe z{MCd&0X`@M1VH{Skcc7}PlTWymAu10L3NlJrJ_we&&>Y&>?Ee_!xy3ZXC6TQy%a10 z5dn?^yX~lEGMov?H}`^Qi92$c%EmFT@+Z&B*f2Usb;KPDn}#RYKE^<^<4j`Xg%R4g zxGT{>{0!l^tzE40K}5Ujh5)D^L@lUx3$l$&4bKk)CaAtGp(ZX#6PQA- zq{-AWn1aof+no^Ng}DzK0Zx|y!;`&Ic``EzsO#~@Vbs&M=*y7ucXp)hrF>v9hk;qs zXaw#Jtb})0gXO4&UA)I$XbB|FeSAZ`1e9JzELi zPSXM54;9!=yD&mqP}EEc)VCT>BW)g?42^rI+WGU_NG#x-W~^;3esxEIy}m3Sa1!>L~5%OulPd$E8(MdVy|2 z%&;C?+qzhlSYC24zWPJB8N?TpRu&g)$q=0?NJd5GUu2L6Nj2i0$tJCwe=0ys06)jNs`}ge0O3%Y* zd9!frMk*oI&BJE2N(GenBY!ff8EqZ`=rSKXYr}XI@H^DD0Ku56*0o%avS`1x8@xIU zYL;ZWRvQMBcyTjGr-Ya}ezE4I*iCR|qNu8C-j zQs=^aa4`P-0&|e|@OiTq4dawC{w~vQFdmyJ{kbdf!YSB`ph*lRNBLuP@n?#&wk;uN z)hi%p`q4kBvz5{;!sBHSIR{L|(bs<82~q(Um6762#`prSI|+CI4-NOjJySTS_zHbl zS@r|hFrsgrIq6o{!qPnpY2!pcq3uyCv+fIBk6qdsF}w5%0?ceU*HDB2P?RppxH=H8 zcjIVls(H>Ob!=iED79}q#n!{3kAuba@E@IQmPjJ8lpFi)XjC8f&ZwC~+)kW0G;?>; z60U;nTHlJjoZ4P*eE&&ym`nVsi^s}zJuEjx>N-wx;7Bb33$j~fQy23}lr@0(FY!xv z8WoeJaIoY3PC{4#446dTUduamo&P&CUhgzW*hWKiC*bCyXc02}sMDO3dm=xQ(mkIE z=9_jA7+Six;|S!;80o}h_6J~^0b@ply;8J35rcZr$RW9AU55!bT4ko~#?%~Jc0ZsU zEjRWps*Jyesh}>B#Qf-rz0Z9TDxUNrwOPM22+XwBgY!1DC+XF zkvUK>CNuX(zsD+=^mja6Tq+tWamSAIygKUAEc9cQ9o{c!W;_F##D9)h znJZjgLKXRGA(P`6vxJon0`l@+wa1<%!Lgi!5rN`<(Bl2tN7K`r>DEePFvH}v>%t|T z%A)Bj>}Ax`^PPs<6biy7UK9wOuQs?^ApN%5D>!&j7wih<0NBCFD~Q@Qg~;T$A3J4k zXg?8bKn@v+wkqT}owKoNT#Bv+qJ>xn^Z64}`S!sBb2S(a5z6tpvKCw~1_P~&94&Co zA=dZhP@z{hu*>3`4^1Zc<5Q8Zzn2Ki4aLuwN5EX2rH4cx#ZHpoIc_w`!d1yz6)ssg zCDtfLKquTI_+NF35{TJv1adl2{bXz|f3m=vEj{ePQjMN__C|$qJrLP_rMyVJ>5^(U zm+cp(6h|K+$dRk3G79>x^5KyTIyN2i>y&xYGV(k@ zf>7mvgU{1$Rp7nZ0+WcfyC??W)OAV~t1#i_hw7M7z?r14HGGGK$YC>N56n#m=MZ9V z5tH3N>U~K9m*5@3@TR*ncS_8$mcXVig@NSY-|9h??1ZV@Mp>J4k1YsPL6rVQ)Aa)k z%W;U@jsKiEtVm9vuPf@h!ui+U=QB)^CzKh%grD|hI0X#@NunsM3-|Z)J zRl!v!19RmyXjncVF}de60kX|kxE(L*Q10a%_DLE`UTduvT}^Qfbe}!o-70p7rI(oy zw5TyM9aDDw4e^xc_i=jb?cqa!7g|s_vvY}GhiAws?v7;vQ=<=AiU&N?WV2dmft%V{0kOLg3QaDt9|+e5#Y&3t;dgt?F{cHo4} z=M$+^;|mq= zCwK{7U7ETq3t4KgC3Ty_wRs&^la;-HyX2w%p*T1uF@c1>8Rv)QpU~Ezf3T~p=xx$` zG*Hs!7hO2~!IXFA4FNeA&FChk{Q+j=s@d?F5F*f%QTwd|e6*BCn2{Px(e^SUlfyjn zbjaVFFAITR__*8H^V97CVUjs<{NY&x;JqpdZRErMrpsl{j~oK3AO(trH=SI)?TYJDv?_Mx1jHqE2%M>*3J@~*d(t&d6TLMh7HxX4 z-%YM%J#DR!(aahzjr%XIHLh}hXrFiQ{c&EGa%{1!zo4h40QfB$YyUj|{j>ezH{(TD z;$rc4p6;t0|8;vauKC!@{nl?qk3PuQ`%b)?g1@FB#q3vz$33^-B+4C~?>#g4F3RI* zlhc*mLi2Mae$15llevl*j-dSo$oy1tpo?ZHA!MqNKZ1jDZbT_Yby z$?vd=Mi5{SY{Ub@VV)7XDJn9GxPEGyX`+xSNZ>8i`934k5 zc4I7I9-sa-jFG6DtK4b;r@{IBZmrG~16pXBU-~x{u&;689MbtFbP92FSzd_j&^>S= zoo3@|8^lT%6M^YyY{9Vi@Gy^S-@j;-HlhS1j|r?*)T+w}N+}&ja0Re$zH(@2!^-Z` z*pxy?lS{RFkVdLI^qj5S2VsK46IvrnSLb-f32mRGlvNH~rZ9ab%K_pE8KkvDqv$^3M^J5QbN_Xu4cDis+p{8?v&#bk!8C4_x zRJc;kCQ!C|*8R=R#MDZ66d@x661z0Q2Cu3cN1dbY*&h4=iPA&4wko2l9;KvNs<^37 z30Aq>TGPOSTOgvTzh^_r59i?!Oi!u>LqqzZ^V|1Sg0iZrZt5Q(W&998ItLz8+jHZ5 z0p&vDt8(=*NEh->vZ$JZRYn+a5CzBn_+3_;#(V-$+}D?-q`3AEEAgrVM0y>z0lpJuY*Fx#iK(o7S*EaBGo%~{sZK#LCs zfRBAXo)Dm2mi#2A$H?RvV}L_rD_>m7O+*V|wBbpzQ!P|Pn-9Uc(I~$ONl{Ez=@eDH zg)%6r$dyjqwXn7U-KH}ByOo*3$ZR_0)fetYXp#}?^J#V%0tS_m7=VGzco1H{1Rb3` zpc5cunk$y70O=ybpur2rZ_O5CXuZ_j(9=p9^V!KTJxU&wnBNM7Mac>=MH~$Q9R~(B zVk!j-C!Tv|g#GAb4ejZT%7nC?b!`@I7~N~`OY9!Grmu3J;C_lU%%VvaKPj8ZLNMr> zl`bo!QTI?F0kKi{G8~%Oo?;!Hq(e%;@$easZoz728G0hx<#Ipr)6_Kuwa-lo#Uu+hag}?#&9P3IHl4~9K(JedQF)H zH!cA^?f%nc}2y84^HPXL5DI?-yw zwXb?i%v9XpgVH}6sovC>04sGIo}Jskgvx6O83J0XY^aox*g&*ogbdM94Z=IZ9nsU% z9Jg9lU(d@_=(5zsI00AWnv}bOPu(DzJznLVrNu~%i#vB>NcVcQZP)@m^Y`?epjZ;e z9X&U^z3JRp3dOw3@i_AfIpbk3(Z|>PNQ9ZtEjjX;{3tBX<8&Emxz~rQZ*v9c5#j-A zXdOD^0iQGx<5MxpKo26Z3QymA(zP+`($-+gsjeEVl44Ho$IT+T&+KiLAb(X^scePR znavO@*)%~-FSBlNxLSK;e{iptQl-glP4~tCRgf}T(CX}Dfq!#^9E56 zG>%Af+#Avxn3&U+n6<*crjIsm5)L=^pUlkrWpOgX-UkX?_ZIv>xE1^K2LOiIg^|+U z+tU*5BMng+Xl_2TAyao=I4+OZY;_&}Q;86e_8K$&5|qU%$@vmcrXltO_d0H@jsvf9 z9PX1hsww;6L`YO3ZG}ZweuYKrAbV89QyPX;BQWXPtrn|7iX6$ib`wXo-ADju0rf9U za%b{Nmi7e5M>z1kMH#RaWt3TvwxO;e7R9F$`5@c{Majk5k0@DoQBi;jW$J+FN5Vmr ze{x!1+B=3UimF6APyx75mBPo1zqvhwi*fv;@hQV3DJjWxEvqEGx~~_$7jA4Z20-bB zO2W^+ZM*I-n;~qhGS|+kU=V@FG~E$w{K$9SR{)2lZhj=2!ByeRm1Gzo5I@*;iuvK5 zS5&w?r5CN zKll;S_cmpHGEJno;nC*<-#&i5@#4`$9Axt!=Ya8sW~H5u_r5*uDC&=;f4}_!PzzTn zi4Rr&049HcsUpL$rG5L6;$MQBUJ9Xcu6q^lyZFkAGVU5SOAag9T{(ZN;>vjMh2LSh z$sM1M$~Uw*tpsRZDWY)%-1sjIHGEuL^;+M&**^PBX)XZBZ2V0APp7`yYQTRd0n?_J}l*rN1SYg7l+DObmqGjOv+2(0k_I`?JOB-gIvRrS$@)Q77(Ra1e!}XY`-NV~i+)Z7 zccK~%E)z-x8K+zr-o0nH1r;%uDp2ps5D#@ghxvUAA5}+|pvY7yaSUqp1ApjBEp!sY zd2C-41k(gg+t_K|XEu5Gf?+1p7x;lIIC%G#uA3vg$|~>IDk0U?mc$VGQsaQl(7#=y z&LH_+YxU$v6!02@1vLpGU-yF6RG``tLRA>aV+ZI@)bGbe1)Gk9Xl_j?Is!>XBhn1r zB=`8VnnsAK-?r!y8=zvSz-8+9T0DWJmus|bvCQWwASq9tK20D1u#97KdJ}Vwf_O}P zk*1AM!l90TrKwmO(#(|>et#CoO^N}}&(t&RvoOvYmsF08vHOWKb7Al+M;xiydLkjs zF`=Dr&u=5#zcItHNj^RnRC?Y*a{hTFMTZ6)Q0`Lb0fep9(Ilc2|L$yrlgn~rskSv* zayhAAB?U>Jl5QUqW-}Q378H3j&`F`3i zirhPx&#AO{m#?yu+DF}s+o+q~e|#8rRSAKgjtw*VsE_80=ubrps8PV_&)L@9cM8v< z2pHN$aK$>4RcIyI#KDCtcuoetp`~*;2U-4=04r zsBq<@MV4w$mHT^o5R}4G9UIwC&(|79E0XtT)P@u(u9#u`u6PY82x0%2@4B(S4fT6@ z7t}mN!sUc2akRb+R=C^) z*OhKbd5}F#bfrgxSZ>Z=OxMksvqPWLMudXtCb73-e_l|2|3CA=ZVgSBS96X&95Mhg6yzxQfakk@h9ff88pDXE^c4OO}5OMe9 z#XWi@j}Fim-iNw>r=JG(%y2RorBC;jeGt6>R?i zqaGoAI$?fr{0Rv%ppux8^eRs8>~(ne!X=#soAsXYF57CT(>63MIcYb|l23lZmeAx! zNt(hIi#=7H#&A}-tiBffNK@@%3+aY**5P`B{pbT1hbKdST_Sr1B)BeAC7p1F1|U$q z5yG$gRfC{UQnP6#0Lq-P7IAmYrtbOYW8 zbZp{`qA8$WaH~$5AWRs1s+*6K9NM=vi#Kl8OZOG`V`~6!KNo3IsUm7>>-|oAv98I< z3)HnVaa=I;_uq%tPUo2`3MM=d$rOW_aNcfx7aJa;2%>Za$J7Dk;8gqARAH7MCp`D4 z@V7GbL9~tRW~(}wTvX`TS^Y%hdORTVbA~U+*Mn)w4c~Nhkc_<AmJYB6qEoTJDS%f6 zbj(`#9>YD>ns$d~I%Mp(9zTEozxdGs?Wf@(8?mp}@3wUDznI-S-|+kROzat(HSvbh zQvrDB=Z9BL2yZQN{{6jEXyUJXBYLTTMcVrJZSh!pg?f);GB#oCN=jpo3WMQiv#Adp zF$Rfw*3b!#>|sIb0zT!-1)WQk`*xkx z@gr?z8&*9^J~2NUzT7e50K+2O+>t%am@s##u&!rR#Tjz*8rdZwa`3wj{pO8*Iw zEg~YJ16l-+$2-6%)5R>PUv_6S}V+rPO2YC}!mHADunJV1!8_dGV@7`BO@A zGIyOa3}wReRpt%&9lCF(^kjV_N-1CZ?6pbH&FwU{PSc#oXBd!U5a75|=yl^T{bGY1m$fOH_7rM{)Hu{-^Hv5nDlSnM63MaI-aPT;QAShN zg@f_i0MH+p^p6rX@DR7Wz;1^7`m5@ogE7(dbhXO8^!-b9zi-c-LJ*{tR)dp!(r%>a zj{^cm-qn_PmJzSXFN8HvYcui~_Ld$K)QEROrq)?scuHdO-}1I`c@m^kuT@)7(D3X* zysIS^n0zi~;BbLKCcXYri`LVBlLrBEO1VG7y+N;F5uV{ob0!a(^;OHOobDFRg>1X*!auz?7P{ zUJ9lW1L@doG^~nrQ!=lae;1iJM}C#9iM^G zIPNSTC0g90oodc=#l}WOq7g6039(-=IYF#T zyh%4kfR_gco4S92&eXR-_Wa^S0L0J%e&7CJODIY{&2e7?UzWzBHRZ}69nBy@nts`8 zmr~Lw(0Cl-C;|%z3n*xeL|0)B_uH70)-3-!!4Ow;j^u>_8E);v+Fm@@)C_)c^eR{7 zLTJk^$a`l3SjA6t{EKEY#0}plvn@(6n*x>3AuKU$H)3{%l8MU;DgZz1%euGRFLst#$`zRYaYwammY!~6rS`; zEC00P;)yhie4WgjB52#yGsb}O7)1=2pmZsj`xt^L5c*N1lmmhhS@?oq6#(cTkr9#$ zBuMj!)Y!gHodev5;|$FZ+I02n6Z*{Wn8_VGk|}oSn4a=biW($SWO!$K2SEY_t8#l_cmVnKXBiH;n^mU_bIR zrywZHD-5*bGJ#RG8Rmy&sDPdTF{1tU3`r-9P1vZYQKfwKDccJ#5wDpszIcdDgIUfxjtkotzWYn*!eE<4>dEEN>4MByVn-U*2 zMH*&$6mReTYIrGJyB^S-{Cih+CpYHx0`79$?$bZO?el+tRnYoX{;IEM-#r}r+Ud&g zym&EL6))8vx$*ku#*e#G-;Ugf7?3&U;Lfadoa#)sB|QMSBo9fhBD|oIm|9$)-9Wy^ z5ouB`*zWCoCYBX!gxZ!Gd{03en%{}_;;){R%&>S29LMpu%vQ?5`ImH_jRr1CxX)Av zWA(;9|C-_ym47(D@u=T1539=Y0lCDjgd1(4QY zgFS4zEuyAGv3+kAbEkZ(=-I1LSI%Zw@`a=AmNSa7JRhlbP?5NJykzLyM!(7T`I7a;SzvQw^rVUlrrYG zE46mjxish8hA}Z+`1N}Wm+!~;&-yxD_YX31RJ9CWx=js1F>VQ($nh$tvUiid=(mF0 zy^H-rZ?sx&xQGK7KNWXkW>x!a*-03fE!)72$Fy(jS1o=|DrXtaL_>KHolD2Zg0HKE z7)dPiy%|z6(*2fl32>NCmkeGU3+%4BdE0_6om1|MTIna)7FIXTm?CM7`ioppK z7bm&pC;xWzEK9=61IZPKimK3(B)`|Sx%v|aDqitNsD^i)E5Ze4Fm6W3dH5BU9r#&e z!PkE%i9h*P4mScT#b_53Fc}LTJ-A9Z@DhFh`fxYD_~|4ueif3&`PH9Xmvq}letU%* z`!nCpu6Oa3$Nq*?xU5~5ob|p*iTxXgp^+U z(E?&!i8YoLMNiHYIiUi=>GgS`k*RsS<)q6hS*YtmWK|v0cLhmW7;5eU)E2$mOjSd| zj;z!^DPizaJ}hwX3L6zcKq{nCmA_Sup~t4g8;Y!Ctb*q_1P6PtPi-eq0FvF;$MO~C z5sfd~x~*LovHSt;KJ8P+Aen8Zr9-FkAt&tF8PPgg6p4x0CV|)VDDdUi=4eRn>+HDBE57Y!wuQjD1c3BmV#| zE&L}u;A-wHUD>~35M6O6Suuio$2*%$lQ*$-d%hcls9KQ*pHdN z+&I-7#0xAOpE61$HjTZGEm85N)k(>@QjZ>Er5%Wc0(zn*zJb%#8Ldzu$$o(+IjqQYGrVVa2CLPAerg1?@l3{3(T zla$Yu2OL#eqhE{bbyuy;Efe)PX$|D}wX%V9jb%X{qVkXuL&sbS4VtgbCIrP-QM8Ro zk&Y9Tne7dth7NUVK8<|G9% zfVyfI`kYIGj8*QCLPD@1*EYw<_;EwIvb|&RU~7QlQ~4hFO^mm}lhv!5r(I4Vwp`-F z{i>(1q5HeD^UF`Khg*1REw~1 zwHq2OZT0-8=8jdOw2#-`Y>rOXq;i0&*(0R(dze{#viz=#Z989hQ~uh&sMUXT2(NPW zvo|cJBraU|H#=h*LffMs(Izm!Zj?YB73hJxziQ{FO7&#A>qj*dW3)ytPdl#i5hv#- zLJ>T*r8J|ttV0z6VOIZoImx4#|#dSqTck;B+UF)M!FDCU+12paUV_FSfj%3#|&i#}4?kVP6T;Y3N%^O2~5?X2g z>6d>iyw$s<;2|Y-?|;ZuX-_0 zC#dNxv2(7Bs2b=tfzvwmRLk!c0DT98*$}GE&ST?A;?jOaZ+#t&v`U*1spF6FII)9=EWK#Ml8@Ve;R(N6WlfI>~uxXd$S3`i79I5z`u z;jFnWdWo*)x`~FNDbH%TTma{Tmy&TbFVUvZ81bf$G{Xob##S6L(XpQ^?RpbG#GeKO za3C)~yAhv5tVUnl3i@&m1p$U4s|UsNntPOx8&0&rxL825`_`}X$|6faX7&!6m+-5u z{onsOD-7|=MQ&CAWGxZ8x#++I!zE7#1l-|EQH+wqrjGpq%$?{$@F(B5AYtNISo{OG zreTwlQmiuUI(BGq&!vdaca-iwQ#kZ$sg7{E8(YMmpCO~+BdH5)tQhRfeya3O`Orrl zi`n$x^au=6Ffm7`mYL3ngkL1p#%drE90CY`@4IYm!9&%{;A`13t3s7_gyeq| zfHs0vp`1inRG1z48-XlEWJjxJ=rJV==cud$De8AH^+h#(JxaA9$Ti|3L&*X-NIi2O z7ARHS?hnTf&wVu9)1tNzPrh?pOxwL!*DW}Nxu!ebMNvOVFt#gMn7E!jDEgK@wNEG` zWGXj_8-b>Yc%;k~CnmH(67K!4TcMQ6B9lhKVmPADe>huTNUn&t$m6auE|Bg zj`mY2LOK`#E>-jg=u#9D%z7u zFuJ|%MalI)B&q@pA@vRE^ zt7Fbs!mS{c3Kmr@^v#XphOb+BlqQM6-Umx3REXMeku8h!f?;hVO(um%pd&Q#7h=yHF(J1^r8;KFe4I;b!1umNKE>dq%uQO^1|h@Z+zl8!Vi{_L5M zbrvzP^Fc4fbwHnY^vlqn@rKFzwG68jqmc+!rxB8l=<5iZFSbZ*E0!rU3HI zp!Ls=Cfd?h)$0BL(~r)5yGhH^;XNj$u3fBePcO6S)%bSg5Afae)IwdgV=5ajKQk^q zU$W2yx!#7a$qi&fpWApQ;hw9|fS!no^eZXjO_V4UR%p5KrnF5b;IT1D*0DJC2^6|l z9;en%`h|?)%aXI?=TZi{NQjpVH7Y7Bx)vp#nqI26VN6?z&>TC7fZ&bY3$-5$C?wLc zOo8{tE)?1QvLt|jn{)}_b9q09KXL9VS6L>7nf?f{)Ine2^94M=d0&Zn*0fT{5A9=!tZ0In>2xnVKNI}>npI` z>p~6JMe*2cQFWPjlq4I7RJ8Dmx(Z>z9=B!ys_x8DYQ>j@0IN0YV}AQHxk2UN08ty# z>agDVA+z)D2?xr9L-$;S*ss`Xep zn!7BNnzQyQq*&ZQPka)oGgKh-$XK1-m*>sBB-&BQq*t;l<}{2p9SQ4C5h>ymiyU=%PgUSDz0BFQAS4rQS{Z{qlW=&_EVl(mm7)!^MMLfGd7wl zF02Y1yX<%$E(9Hx5#F|SfOk+d$=#rQdrW~&y9^>hsmE*pB;!-7D3T@4dUTmjLa4Up2Wlz3X{?j*WsD3wfpdv(z4p z`gkncp|Sh5V_&|Sx`^4o9X^X6_&=`IKOw=>hJ(EbbN18JIu4KuQ_1`TM%-r#l3Ov`zG&x z39hPbNsD@T!!NW4TqAwkNv;=!GeJBV&~sb6;YF)e|E#L>^8Mv!LR#PBs>4G(+q@Wc z&BPCvom*@79-p%f;cPonGAeHPRPt0hiPYn+aqnjwK z3(7j%X|;0oo&NbuyLyA%%sQ#Z$vZQXJ|R9M?i=?%5Hca6J>pKw0_7De%1~|l*C*O! zIhNM#dHZV4nt3yG+aDQP0xJbNy>#o)r6}`C9X)mo%{KVW4qQw;09)2L1z{h1)T$;{ z1CKb6i02+`E0Zj;4=PV66OZN8fT$Q+X1r-t+gYdbsi9w*jt!uIw;0k@t-}FCHK0r^ zB;>_k9{y@wStIh}cBt{~Oy|zWDD&)W3<@KXk^v@n4ESvfrEUqi2b-yNdgw~0G&v?L zryQs0iaW^>)_XvH0SSQ#O*7 zik}8C!h{FcJqH5N}vOB`O zwMOq_2cGV-sUWV^+A3lwg=AHO)z2QYHyf#HcVQTg)``sKAXBZ^_%xnA%_DmqWxt#H z(E-U!N?Vo`H3?`q{f2z=Sowd|7eLL+hvL{nu%QyD4vY`ppbD zaCNhNZ)0-^u1Z0%Recx;YHlvaCLq5N=hPQefIPhIs8^rXAv+wwixSF#BGl9g)po-i zQr_@)-j^`UO}m>>%I~HZBI(JVC;CbxsnBGV_zOOC$~c>z<~X z9{oL&HB57wPd?>!e#Ge~xDjlVIO6-G917ig@hZ%a>uxZA@7$AGGtR~Ehe1`GU8#nq zz>X1@BBDuP3Y{U#5a^I}Gm7)qR`cgaWhNgLfb&XqX%}8RpwAo((|ME-GVw=(|L~i19;5 z;pGIgC=_zzwI1YN6qs^)6>)c_v07EiJp=CwFS-Ew3h-2(6WU z5ok&}*88} z8+{s>RKb7eo)n~S?_*np*AF2JyC*78rd?LvC}4{ijgaWnT+zZ1k!5@ zB)c}-n5+`e@XY9-osC^)a#Bh@!?30CLYmtrFX|G{*8Li+wSZ5JiX#q{^=g#Nv-(^5 znd^M1$W7VlWS>d~t>A_rdB}Dd(?e_Pcj}(|+XbVOWiTV7ZOd2a_MX zDz>Mn)d#&6(BhBpyrpEmYFN2I2>1 za@{x6*5xyIPV6*{zwqY#c=7$J)k`PwElJ&1=gz)-wtK=JDKGW<*jxE3Ywd!S%Vm;<96>C2mJxI=GfQJJGj+F-C+@CO4NdT z!wji+oA^e`(vfx{6OwkubF@o(cEEh%KO&*mbiC29X5lhgmz4-kbXK$xId-)+xQ}?- zyDi~1#ZL)heql&vfBMEwj>E~b9Ud=Q1GyY(8guvkp`*nY=5nhK-3vP9T+OhP1Swt? zJ<YcVJLvS(1tK*-mn+RiJPbH%8|EbZ>3SG40+ z^976k@&eYRpRokvZ`nhLSi+Bax_`=`#IN5&9@brAjVEPvGn-dm)B7~SyjGq15uN^r zM3}`D!2{pzeGEz3^DRxof=lJ+EgW<_y~c7COSHq4YJ*REA}(s(w>}APn+5t-Z^a%h zdWM!=kS0ji;j17r|p zs|aW(MCreJWD5g8ad?HlGg7( zU#UlKvAW@CFar1l6@--4;hcKIALbwTxx!HYr^=B=85xN#vt0+d1P_n-n9M+Sb%^Su zhUEadJ)1OH^=9Uw%-=z)AC9DTH)7s8C7&~~wWN2qJt=F{aVc!u)pB_Oi*j@34nssb zx3pYo1O{%pTSzDFrN721*H#Z4_n%Ht^N-8n9n_2AbHi|b$GI>5ksk=J5$=AXeE^~52Szv01gf1E0$9T2B3-9 zaM2TsBHdK*0qFD#N{JTh#oT_B+lK;?oKs244^7vHFwiF8s%jYk)1l>?fDA=zc`^AV zc|t7Rp&A``420?|-7c@W`3z=UNV=`Y4qALC$SssEH+}b!5Z31ffExcMt~ZDHslIIN z2(yvb22~QqS*~e<6|z<-e~siWsHE^J#As}#3JvI3V)ver1gf|q_+oJ%hJzL#v(5dp zV^;ECvU{cv@qm5)`hOnx!;Z%`>0qy?U4*y|j%iYuh-@etrm7l{%I6|td@)&EM*R%< zg$BA&a(k`rA~r#Wd=RE73HB|38iGAR||3UhHkE8_AlRSswHqoV~WbZwje~VGnW)< zGQ}`9Whluh(hs_QxRq!f2;V&3a>GpZ$AAehlB zV`12+!!bvji;Jw@+9{9n5d{D9_>^%xZZUMzwY>vm9M7UU08;p(Z{l6uewuDkRA8X~ zNirPJT= z=$$XY=GRkMi(b0O|E{m=oOqC*@iJ?_BG*BLw>hkZ<=jtS!nazc8q5oP%8M%Y_!J65 zrc!X8ivx7uI}RzI?X30!tB;k=coNz!wAq24)KR14iDr+x^X~rG4ZL#a+Pxy7&T~@XPZI*7 z6w^4zC`r)GdG29SGwf`fh-==}X7@l(^2YWu&eq$Q1_-Pw80RLY-fvrL-mfn-IxI`MpFQxR+++y@A>}$Y-{T zD`~>mXQsRyulhKA%xb7@i02;P6yNcBzxGh4wz|e;Z4Vng$=C7+wp;14jw-fnRL&{| zl1}|z{Rj9(yreAODA`<&l$aY->vCCmjMYcp;;7lEch6ZG@|tV>ZfX%c?o%`u8wX#H zq8p7D!r+0Y96T-M(x{FqOmc;$mpK>%V1);}xfNR!4Q+@>BsF0XDQanokE*(4wVj!)Frh2)Qzo zVtgv+qQr6CB4922fnf{90$mU;ma*zKy*l#Fm!s?u*%^An#LcPP#-%p{2Uop36YQ*X z1wiqr=s|jOl9rK|g*EC3^Hoa9SI1{W-wJn{@2D)(3XK$*1JmoR)G%p`_;3CG7yW<2 z6E99a8C0@+%yYt;=NPYomTtGe!|J&5_RyQ}&@ME#=*QYbmtUP5RCMP2{sRR5KLF`K7QeT_TlU1+Ajuqmy5o;kcXs4- zcsTAxOHfz>8&@QD?OmEm4t5KQB(Mib;9@H&y_KX8fSY8Wekl_*AaA#6CYVU zt2oJ6z?~q09D(Hb{3^`25FjKH09Mj|_|06RSrF=sBI>{-697lQ(xY%)iuU6{Skk=d z-aFJ;MKILb65%hc`F74{9t~<+wn|zj!e+P?14)mUGfbMs*h#uaR^OseMd?qd^@MzB z(k(`>rEtfnx{kDTcsv!HySM%|()UD`5V3%?Eu7hUl^NH_!% zzr#%cGftx>K*ZFb5P48`8-Ddupem_lfFK-gKoAEwJ4{wUR2zk{BrerfA+iGm>DvYe zKJ;sVNEjt@cLevQwl)ADm=Z?#;;v8-#tMl&Sp`7aqyaD^mIpO#6B>I)M&CszTOK92PudNCQx%c`b<0q=0iKIIOFp zv4aKDBd16^#}!w(7)a?>>C}0cs_vLU5L9Ay907qff|dfXO~wkqm>NkDR-y%l+A}B1 z3fLsiy=Ri}U0@arvcQM~upi>K=6#IOuFa$pw??KI6A@LYP|)U!7Qxfd-~}gPI%o6z zD>(NjDHXxl`zP%7^)`*sbX*@S2aF62`H$AUSoHGAN^}1JkaKw?;tD>~^!9x(sbT4s z804(#(~OLP-nnOvIMV+BW|MB&$0RPDN?-y2oO}5uxW45~-8&XEx-tb`kP68pV}E)) zlaFAN55y&u+b2R1EWjv1)-?25I_n`GjIoC-nNrQ zX_1xQ=o+;n2_$lR)RoC#WwtIhm5nD8aexALF-%smY&W(5t8I#xl_L|_Zy(63in2E& z*=wH+Swc#)NlE#SpYdD8N`?3IBXMlhmYGmFJ!~@@4%z*w{XW}~-85&rai2=uW|o#Z zjDt0q$-h%9D4_oUZS9$3A~351@tuWE%yCUjm$|nh71e0l>KsWp{Cn16Wk|CY6+qgc zX&?wAFx|v&TE)`I`6JvQT3t-C%1a$gN!!8gQZ8E$P=-}epkzDLWfU(p&epK%eC}60%wPeX4PCNT= zMT>_4v^}z`7%Qea!Jcsyhg&MLm@XZi+=a$Ou`{u&J`@NmV16@7g;K&bF3<-xtZ|hR zM(#^2yQRT))GGi$BX4S&Qa3<(O=@FSBt%t9hCRwzV3QI6j+6ZFR>)XE_=>FnKw_gI zYPBqI2368qSq6C8xYYZjvm0KLoA>K!13)$bhZ%! zjd?Ihz!Fd6Npb`|Oi3A-h^r`r2x%-L2O>pBJQW0nF4|b)4DdYF$;QGam1ZC?Y)@cn zd;wK~fgK|l+?rArS*VC*AmRw(wDP%RfMf#W1n>CPTb+~(05Q@T8xk@2RZUIsAZbul zZLtfmC+0cG@kf+Q2=XdP2T6%JCj;wIHh=+X45B;6=B!4>&bQdVYB!?2ruCC@!-%+t zeD?EPbLp(s&EuQI-}c|w)~tl}-hsY1qqt<~$zSK?TzXwxr}}wsgQj?>snPdhfK}*uK`m zTSOW9d)Lj+uKxfLmu5OWYo@wNS>ry~^>=+=sCIsnG87yE{%h!Tx_y|X!RG2^-IHb> zt&{>c@m-<8%nBkWQ1d%|D$-OzWD$)-Z;?@eDB?!=BYJZHl2yqWJ-gLaK!D7S$G_u5 zfWR1)Dg*%sk=~I)K%kk()g13tdk}+Cu$;zB_o+Oxig4QjB51(h51skNSP~KrqFYGR zFgtjl6KVkdnnz5t!1e~9EgE!{a#gdalg(*EL@FQ*08iyvDHULl0gNA|CIMowO-%+^ zK%DPZ6F>x#3cvWQj`h-{VH;pAn6PV5+Zy4HBwB1shf}h(;QPK5LJqv zkp!RQio5~I1Fck!{K?+0{{ZSfMTp5T4{m0or(k_j;Y%He5O|8y&9|~aUd#>2)qxd> zXwhL%xJmZ{XWEs?003^M1OwZ@wH;Cjj7ic<9b1_jc&Rl-EDg~BA9)o33~5u4Ap38< z8<1Gb2(9=LpT?#s#PC+cHVYlh_9Wnad)BqGZ$*$okRhIUAGKzxN5eAiqtZkd+gw#K!*1&wWSz$uB7+)tcS7m{r* zLx`|_u(yTcFFH4<0BX=@CnQ0@ipO1cw~k8DdUt5cZM6D(ngWvJODO{f$6_m+$x2V} zgGq8{bPUC?polTKJ?QdWAeXo;v?`GDUYKTtnvt-^)D5|$9mtE7ZB&shpKJ;fGMn2Rm=p{@&;01G;Fr$_^X8%Le$ zyrrn3B}JbEq>Iw52_4v<(mktL;P7n)l$l#rqN;_i5F@k>{p+81EYx@&L0pn_ZlrBa z_WuAd?eIgU+3Q#(ft5NyBigG;s3L68w&i-&Kp+rfW1JeXHug!1LYqv^3kD5^fJ6dz zs?uBpTvQ8X6d_!da56Ff0Ci{nO+uj@3Vk_SOc|R%hC(r@8L5+9sXyFfx-+t#wP-A} zgMceAv4+uRL>9v-Eg@j$cAfyKxq|pbcY0WxgzGRM=TEg8q9t?-cJ(j!t`HXlY)sW@ z;;1WjMYKbdRvT*DbGB-$rbkv)X3#cDfZvaiR{=>NL611R2NBR-2V%RLWG3g_MwTy<29asD`Ydi6-U%7>LbM z1r8b|uy!y2{3|U_C72kHRfxDUG{_l0N~%%9!UIVF7LmA!%~s~J z9_Wz7YXAT-1DbBg6Vl2w0P!2nd(?<5$e~>>zzhMI_pL%?k#V5u zIiA&rvr9s$5%-801B%<#860E-xjW4iN4O%(=>Rd)wsZK_TcW`M)<7hHG3}kG2^|Ey zm4hGmMALR7z{MLwJ3v?f9t}xlfk0*i4xmVp&(fMF$mj{w18sxinzmih*!u_VJD!VG zvUS@htqH^b06SL>w@Vz{YamMFp40r|vyNHevbBy{Fr&2MsW{aO= z-9XKIQo0aGKg`Wmqr1v7xc4^tFR}&8UlQu7I0JdW@7kC=n{b9nB$3U(_I{>1P>C5i zCVUgUI+WmIj(`5MzpJz9t*f>6fT^cG7vFkqOCJZi`w#3pAJblteW~`zANv}01c(6e zE5rD_^Xj#VRW<(rXQ!i%I7@EN5B*E_->Ca*)*H7ELHT5n5zJSwq0(JEea}BrKIiOl zH8hq0<#_|~uT1ccLYt(7Qm9A&0H!2R6_8xXpAt#MRHDNM8Yd&Lr@$Me84HjyDIVkj zkS0hYc`;g0K}pFyQ^A^=WfWk>;N!L`Fcy;fx#z`D7BcxVXT2CF-ZB>+aZAt%I#W&x z?+1ycf(X&L$(Zmea0C)afws|BfJg_v2jxVh1vP8TP6!c2U^1m#l0$va2kTWO78pL6 zJ*yxx41*as&MBZlDnOVU!8=lUMSzG0u>6KO6!stxZ-6Jy=}lM+Nh&Z80PjU*WF1>& zhBU=$CuAdZ-3!})erh##5TI%>q(RJ7mIo>D*kH*U9w-F>hL9#QJJLLYbhcv=-$mB)~2!kStv^Ek! zV#ib+;Np`a1ptu)rZe>IQe#C6+l@L5V4RvO11_dBtcejh+9HI2DAZVq{5w>1P=El` z4?lMY`85E?=Kujbk+GyCz(NMp8VQY42AU}sP*Qw>RD(&-gYJxAZJ*(&wgS3k^_deo zhvE8Gq!F^rqGfyLM-`lJVfzkkuqBww01i8Q)a1MlvcZAU6^Pr8)mags2~rrOHpAP` z(vYT$Wy4V*vvfz^$L2YTH&WI35N-7K^xVlASy>`Gim9xeKl~a}dVlF}MfQKI`$EtE z0F=De2?VsBm>r^WewFO}Cr_o+%eNa?2Gsng0N)?|q;D0K0nM*~rW3)2Ray zEO{(>89h!=I`D&O`w_vfHcMl2eokOdBMjDTEMMlu4)pFZ_CvXjk>ZF#*2{xu%_wInhGfXbqwzOzIz{N$vc_iO`Cu z4pbnFvk%58i%Ir|rp-R3?KO{1scfattR2~=F^R49A5Sb&O8)?lsLm@S+h$R0umzBr zF#t~4{p%Q~mb6yV`70{Hj-i1cDDzX?qFhHe03%V5bx-5?R`OlDGMwmJ$mLw(AUvKt z4;6C8H?Wyg7*JFlqeu`lS%@so#JGjY-Bfm5%~?t@*&~uc&>#Z%QJMNvfCU;&!MELp zJ9AaFFsTHd*#Q3Ga1;o{o;;3eo=M6POOZLLOHDD=_XZ9fhrZ4z$foE-$7bY z5RARZJ|0vyw(X2&lCedG>o_qctosNobkd*#G~j{zRmOI? zBk)%TG9q{z)>IY9M#TJvAm(}PTTo;qof=FPoyYC zgUGDI1k3<_S>~&C0Gxu|^9CwzfE0`v#F4#Lf+U?gh*dk9cFc({L{@L_$Wxx2nTkh& zED9#%BLM_Voy`@~8nWclS+y1rM%&Nt6^~-aCZA1VuK@9_R%C2{?vcS{^gq(yXxsER zn#J2+7t&oL;vo`NaUsr`Rd^%b?6msE9r!~UMLa0NEQlwwFZBp8?+ZC>2}00{aStg+Iw zjy+E7VeIVs@9FEFy_j1;q1RDeKS`{0x(hC(;TBvnYZzv4NA?e?TgsQwZ2Egc1g@nK z!5f|GbUzI1CCKV^6{chLKhsxkdWO?)P2;3=Bni$y7_9ZWDNprQzf1iKhF|<1o9yrC z-?M+DeFe|9{?|ph>Q#Ca?wHtlu8Rp$)V>$rsFM{Z#y_ln*84;HgY8ytRi?@#e{R$m zPd;nK)amwQ`}g->XKAvv8}^uNhN1sF`4fq)ARLxCfkkli1dD>Wq z7KWKSVzS>QB$+EL7+|S8VyaTfz`8nA2`7<8!UDwLZIWopOvq!g7&~)T8?q6Kf+l7+ z9qT^@7`8#_&SEiD$^-}H*vS3=04kbbm}XT~B%GfI#T3Kf(6)y6TdYZofQQast6>&F*&BK4`Em3la?go_VHGTI=KiBbfgHbXK5@?)`)IE#I~;{2NxAQxE}df#m-HIj>LQ z`XASx)n+r#vuADp0H+V9`(=L3avJy}popACPX@Z<_&kS8p{{D=AGwTns1L~2zQTSh41%0MHjzbKFwgl#Z&ZQ2K#&R(Zg1yrnu z(lBzYbj(SeyHA*-P$VMIbyA-xh9~*IwHt|>VkbvK;IBb)OOkp)fFqjh<>Ox8QH4&- zFKt8JC60`cM3Q6l9xIfzY6?jBg6xRWyT(EP0F+jFm$O_#EmU0ur^6@i01Rim*Gw@@ zNtW&k(Ewo)reql~-M8G=G~1=Yr{#}qss=!iLYNF9Hpla|UqfD^dZvap^(-k?X@!hW zxAH1uq@=HN1XH9zQ>n+yFf*_-^{r!`?V>z%S!e*IOqM`K56n0j-lyidvg?XA4@}6q z#LoNxt^WWYHL7|u@@Vwx*GRIe0D{2@(ht;TuT4C(GK4;xmYHrUvZkytfZ6T-Yk78K zOJs)jV=eI=)q%R00UPH(TI8pVqfgwX?U_Ymb&1n6I!Z5KI6Lu1-+ISA{p2cBiB;qQ zwK%vOkR6Jd&ct}}N$qNhwXz#aZ2?o$q=$Yr4l~7Ord=AhqKnp1t+@jW0Oy}>MRc~N z4C%m)>GZgDwiR4sg&qB>dVeeb0I_>QJ+g$5#fE~i4QKu^=)BIvD9oyDhSM@O8TwUO zCGtjy>KIwV>5>5?m;?RSRMS!XnTTa>sdC-6B!dJA;<27lx>&5r zR(hR$arCxp9+S$hNyd7Qeew0pGbP!;Is!GhkJ0BFq zE%F=SLVAELiOP3 zdDD)ggZ}_k7lN}zuuaL=A9NG3@$Fpla*blF>G~p!$5xwn1UYYRJZ)T?dRqIlq$92N zf2CX3?c6HP_l$Im6F;STIxG6lF;;WW(5(Ak^f#>k0Pv+!{-&{U{{Xm*Foc1SYwRz= zP74=VEgnzm!~Bf- zU61|GP#0PWi2i20J#61osX2a!r>Ba?7{vLX^~b8c_RhPC!9;~ncD6HHa8siqfOWo??KHwCN z1__Fj;1fY(gR8W2nz>T}kD39HNHM?TQ`iA|P;Nx#aaJb4RZfPP0~r|`^H*wsSch;! z835)<1M#dvNVdfjAwk;}ND_8Bx`E^Hs`Low{{XzsNCR``q`edFM~vyn497{}J6yqGOvZvaVRAf6{`LvAD?QAi_5W?%_|F;(meld30B z18yR-Dr~BFAS3RQBZ4q!(wGDqobMBeGx?q=pdCF5#6j`RB7}~?nM@*pyPu~$=@YO8 z04r)IZVpL}y{f4rB9I`M#C2vqwNyF9 zf(V(dV@=5(sItNxasVPC2OrEk8ro|YMs4iueUJ8!s`~_4^*)vKY6q<5I5It}zfUfw;nM1G{@IL{Jx@u8*L|sb z)cW!2J|)v}-{Ljp!#`sqVa0i$TR!KU-;<)jCE8%P&dqVj9~AD*l0h?)YY!&xlTeia zT6VasSdtg0EE5}v{Hse26#g$dE!EKb!SHx_}kCwH?f6+M|PMZk~rb#+L zJMHwO%I#%~k=R_ivfU|#V5G#xOwj^ zjN_WlVDn>963okOgA&TJPJbHa+_^Uu0xC7c)K{&R7Su+Nc?54;)1rKipcW#~V5%&mJGtXZ}-F!*-FkV8&9^90t?U6=RA-bsDMx2&B(w5EV?%_B(v0Dt0{ z;?_TCV&#+4+hi&X1`@~)Ti^4o^ps@V+MmCvGS{)M)Z1+;szA_2lx)KDK0DRwVzF?z zB6Tdw>3uU?^?wanS&0gyu4jY)096-HyC$*ovb>>Ko}S%{ezxHCXfF^7bhIkB4aq*= zrD3dF?aBV%>+F^HZxcPsKNZ1NEYU0pFb^X&&n5jvqW(=M+fIe`9+><_(%PAhtx9kY zw_{rBV~!2?Wq!oPyp{U{TwP4A7#+0{x|-9<{ZC|yqPupO+b)G<9LXa*S6=L1 zE?3X}8HSw{vdzU%!PIY==X%ac93rnJP)al?)C_7SMl&#cRC}O=L{MA%U~9&bKT%k4 z?V3-)x6pc0%W^by^$_jzs2q2U*88F-?}IVm{bBzAioV_ciu7O6hQ;Re{+|7-Z1>jb zP+zAz?;{b;)#=Zt(|tbpQOf;)w}x`ZJeFOr^glBH0OU_w>Auqbr1hS+(x^)=-`che zm0gFoc(0xKR@NzSdV03cCKE_tmf?uRwmjFVT{DaJDj=&FwnG*X%7g9Rii^F6T$_PN zT}P-d5nG(ULn4qKBo~XB})+pf@k)swJ=SO3KLN?!~wXh#|avrBCtk* zrU1{Hi9lcjr~+a~c#PHgAjJUt!XqL#{{VE7jiq7PSb!IfX&gv@1B*b9lq)O)K4}r5 zGHtAEoKBD)*bOT_lSDxSQzV}*j!tC&2 z4=O&b{VD1G4VJLYHiilvf$?7lKBMbo+egsH71K#0*ZO}&Xa!=R#?{T_((OasmwhVO zR(onR^0ZlZRzu+M{{Ys{ak?#nK@wnX?_QpaW9rLD&T{=I_;>ZMt8^DVO^a;E%r#2m z+>ahBr}c8^$5AQKg^J74e4qM@?GH?SQ$4>%Z7^arO9FhJ)yu2+u7-Ihjz7t~dU>U6 z^1h=`y3?~{5JnH0`PpQ%ZJo4WV9*s-2HMWTXaHgP%eRw#gAM;ndipbClOBN#NI zjeyWZ&yH&9iLqUjvys{|DkTBf`ijc}6obYi{Z^8oD9hDz!yz&yvj=g-R;Ul5u4w`!j*vHsRD2MQ zs{hzJhNz$Bl-oDN1T8%Zia7yxJM?@nNQj5?Vl4M*5V6*z+O zF+(y$hS-C=RZTYtk3mF|2;4RS6Zp}40qq8HaEAM*2a)2cX)7SwS}lY!+DRCVxA8=p zq$kO3w0Bl`Qb3-UjRU{dq&B;eWhV?K*cQPKSw=dCC&x9FD6F+DKM!R<* zS!fCvkh)_S+fV(`!;d9WT=vRY3^yhSo;DSGWlQ_)NxB~9m1PH3qIMC39zPt>_e`|` zL>gMkXg6)75I13##_`+vwN{jOKhQ0~OWvDmfP%opMquQ}=}dA<7-6R}ie(i_hG?8D zWM^SmPE;mVyn$DstAbS=$cZ9rDI-jGRZxWFMmS>|ev{>3MYe9Wf z+_rBJa8QNMnk=45U8W*6z=>h~Tae+E%k-#Tc&pmm)rpFe(SJ~XO8ukuKcV!#qu1GF z^!HGF5=863&%eEAIm0)GOZ^pku~{a0pkGzBV%h*R7$9~vh)p=zb+K++)Jq*iK$u_( zk=iRt8}}ul&7b}~dTzT(ou)RXDP*Pn@*8TAqScb98Wh|rWtaK>vr(yP75@NY%qM1) z^yXb(Mxaf`)K5wF+v!s-=U?O~RxPVxG_be>PJ@7Sjz1dKIH{M%ByOY0w#ZUcDP^~( zEu=A6;tzh}yW-{cul)P`9P;v6X_2l5wyYS-a&yn^OuCL+Yh_r}Nw3jZYu7bhw{5g9 zQ#Xyzo-wsdF>U&TX=pyT(zUC96GS&r(u3t(M4r^nDYbX?h2b)T@od`(Wg_}4HO>kD z03Ir?r>2yA6SnNa)(WBnaA9sU7U0o6l9W_CU+9bTHp zD%QVKSY;~Ap0eGhEX=wJ>BzvD{0(x+)VPC5Js58KZoN(f&dPR;qO#J6MNaI^cG8wA z!&+lJkWcAVX5BUa07JGd2$mSGxA<)0V^(EPA6n_sj@er=oXi;3%8N+PtPGUlK<2RV zTP&G{xI&J)R2e;^&%SF*C8i!N*!RFI(#%*kTW$na-d)SNJCiXK%KamoTAf4uLLrq# zAmctO2|SHBLZ4Z8L)%M?HLwIsjDIm#xlFW3E5CDBr$BD08p(*u7>N9+@_n$vS16%` z5g}wZO3na3$*f~`nWtMtL@emG3bB$y9DCNaY|pSl%d9af&^0E*=}6>H46FcILkMZa z@t!JQ=vpjR4Bc)CB#As7rjZcPEV_!;brW-0GN23?{{X7$(rR5Z9>y>wPMATt51)nNePLWvpUG=U^4y-b~= z4&&)piyI0o&Iti_0)IM+z<>a-vO(bf)hEb+vXPxyxcsK7NukLUn`c%@BZ`ht*knp* zkU+`R^Bwp8ZCakqk|eAtBL#I0yV3Y4*wd-1ZQeE{XoUQx~!_CE(Dy-Aqy;7xWuRg z?>j)8ipyyh4wu=Q%RnT5`izL+8a$MCD=dG>o`cd`OPbeCfYS;vSONZL6`5|+lva}7 z&!PVSM17VM(l9It5bD#v^J@Jk;P6;trCIa(**1L#`etqVp)gfM$nDK~e-nl+N@ot9 zO*==`zoze{%V7L63FKGjl}b$dc^R6(y- zOD?B+i}^E}$F<4vFY8}R>(a@%mhIoR5rF^@N%7u0SJ3O?^1`t^-8_`+_|MvQ{?J<| z;@SS|9O}uQN9kXk&!(`-a--g|c`7{bu6BEbWFRL5R`A6Uwqj&p&=;ueW8o zD`r_bN6dNc?^XFC6sZU`0ALOL({=_5Kr1Oc5#EyuK(KXTbsv|#GV&3>?9a4r`U`jd z8d!AoHjS6JaWyF%XMzkF?_7G_1=ea@HD_L*QS{S=x;f}U0b{0iCM&v9&P>;R{UG!< zR?4~c0F!ly$FQutVowmr>RF@#Ivs{E(I{`Iif-;YYRLLZmAc!Z&VML~Yz!q=q zhEcK4H0Sc91hvfP#`q85{CNK2b|hD?n(CwMM{a z@u<~E5usEC1c@Yh6{fs|9aCtjP)zCvKY$e?T#sTPXI2UzNS5>3uQCGBj2wBXd;pC- zMNHyHIqYbckj6#tTl`YB=h2~PsNb})IPmBgAC93sm!951#5dD z1nmc5P4Z0_C6ZK}D2bA|pWC%gVbOjI6-(R*z=VQSnBJz}q`FpH@bxffT)!un?OJ%X zqDiD8uyDGh07Dkc&u-Nl%MH;|Pez+QpW-^&!1#lrcL$$vc=KAus}(Q(k@;o+0BU-4 z^p-8y)HSl5coLZ>ao=h@f2U7t?S%V`9~CV~AdXEl5qH%2pV0~8BR#}N7qzH(Z zJ-zB)N(&GuOfuX@S%Mli#?x5scLeW@ zhm$ejRbA8W9B?|?CA2#ahwmF6ID$o2aM=}17eF^gl4N|qCSc%xqNB!UI0@-9Rf_@J zORc>`@3aw*&bN*)DQ&|eX=_1kc8Zo3#4!ay0D^x%6`s_u!DoRWi+352Tv863X9_d6 zGe6?6@|Px(4WvZ2K(`}Q={s#(St*2Ns+K!?VR4a^vk(9=+=-m-D?PV3E=%1|&3=l@ zwbP)e&~-GJBe@=CotZgkN>Fva+WU9ceXZ%OTlJr4`is{6I)t4o#lRS25`F8;{{S;<^g68|t*e1ZWlbU!7>M)vQdZNj{mlr4w3H+g z01V(@oa6AVVw&G1Yv8aqyJ1G9>hOH{+PbIer9b4)7Q(i~YII=D5xkSm{i~iy zcSBbOl*KaZAx@Q3s52IBkOjhakr?M{xV06pk~H}pE&NM}P|yDWasWB)?^7i28LuT= zI5$|echz1{j5MU3BN~sqX1a9eIPO}QGnc1FO?@TXFd|qsoRJ{*j@1@9V>9so0LdFn zPf`^vTeWXeg#uTRJQ~JX_T>iFGNk8vfWp}p(CG(B8@GUKODv`v(Uy^2uS$mLgq=BL zA^@NIIIGyxhw~gy&c}4AEmUVZbvuwX3`|zB&ChQC0KpnjCd;;cIUflWTUF$pTE_=% z>q%qUp=;m!66ChculDl7z;t|lEIqb!Vo#_ z>??SBeJO8~8C|mvtot;jxh1v*gBfr1J?lMAo0R9|);S!T-ka1LY`2lE-y{ZLV3XJ$ z4%n_OWR$dRMAIlfl$CN63~2`7kPqR5oyBFSw5!Qg(=%T5;Xyh;mKvBY{r&q^qnFRw zB+V3Fvuo3%2Dr^|vB26RayTbw@m)Hr3^8fBe|PR<3Ck)mlW|$qZ36mX$y`No?OA0j zkF);Hj+8SuSs{VBaSqyM4a901gzu$m~sJr!;Dyq@zxshaedojiS0^IVmvc0W^Zj2T7I-f_}9W z0USO$BV%eqFsNY@$=G>DjiB}H!tnKHt}BI5`Q;igSJN&A65a!P=~#K`xL z^;T+PBo(s|6gc>YjQ&+IfXUEE1{BPYycoy*(-x+~P(Q>^fT*E^f?>5`r;i4;-Bd^_ zP^QJraAPpIBQg5Z7;3}WSra(RL5j-Civ#Heh?24=NIoc=1m z6ToTyW`L2Xu!tiV=Ze(Lkd2&^)3D%HT)Qb28G1sV=h~xC_EgB)gC4GuH3siinKVF* zwzUuh;AbbrX;PFxF=jyofdrohvlk^9T*xqdXPBTYk)}y$oyT*{Hlva5E|&NqkH|BT z=ls-i4L+H*71Cgw0!G8NMdL=dXHU`+s!+(dfRfAjjP|a1M`}pY+_TaBhw)d|BVM?Q z%Af+oFT>|^?=|ZDG$&0*-|lkG){nM-Nqv+)(*FS0w`uLGkt8U`y?&28dVM~c>K{A1 zEVFnc(fzgkHR^uH^>!@UX*Y2zfu8x^ykGuw;M&H{{{a3y+mq-&)3&Ysk@jjYs<|YI z)PG9(uP2wUBh?Y<7WT=_KcdrEqW371 z&3{_m^&Xegk6Y+iUG(J11WXS2r%R^0`*W|lE_puL#Q4|sC-q&whPSR;E3bHI`o|US z&+$*8>B&jv$E31ykDPt4_MN|1b=eV!xO##%XV~vw7x7sxudQ!Kv!tFb4>9W6ml z#8S@04JHIvmlc*Oj;*J&1?zo1I!(50G{pH8-d{YNoEY6g1=9j~j1LvI=*d$oI8&JB zcd5jem@HTWP$PYYK!lYT z)gIf?TCfNT0fI@~QGvkJx}XsmleBU9){;aN856u@gP*NsDP-`qR_;BFh(Rr$ zsWpOxk~%;l20=VhEDa(_2QdVlvqahiwoal7%AY%b1u9TATW^PbO6U{!j^p{gW2u6Q zH-=EnUuu1;>i*DVPgQ&4d?BS^VMJFhhvD(*-YO*DQ>ydZIhO%Z8B%lH*P+?P3Q)-n z17WttjXwbpmJC4v&tXQnWkl>mXQlw!iV+zIE<&i10pensCB#b2( z>Vi0^)j?#LEFdcYe)5d?s+k~Qr5;=n92f-EN*n;P#naW&qD20cnN1gw&^EL-*-ua! zPQagfJ5YxrsQ{>k3nvq`Dr|5#Mr*n)s_NbZ{zJVTer7kIvXo|k!GMFS^QK7zIYA1^ zt#$yDxgPZ{BoWb1QAhy6kH_(-+&U^!Sidj?7!5e&dsdZfn=Y~o5~U*OJtQ&2W0+h$Ou9dxtSR8t2GzVMVu3**jDsU{nypKeNe8JKok>MN!&H%z z?^=0&gpbsuL=T7y7Ki|W2Dz^Z8}}`=TG_Z>*kENqVYKE)eWH6BB;IwgE4IzQXZm}W z$Xg1oEtv$4kUIn0{8v@efAKK#T$=BCVPxH6P)2nDFekU4HI?aB9q8w^r!GqAZ2}2Q z0pJeRm6C5IJ`FVqP`?b@TT5`L5!51e4&C>U6lrApr($A@RSVtF>`5uoXS{D5iiuC9 z=&kaN7Ogd>9~F_Vg3#(_V~_JzRL3N0r+_k-L`!;=%7y{9f%|x?dQaF?%SO_xeULIT zX%Nnv$K79T{{RZsS-zuP)$ilm{{T#-+N#JsGhHHOE&xCx29xc@PgZe?g4Q<6EZG_r z6q2QY1x_=_?Mx#{hMy;M(tVzEzr#0AP}3MAd`SIk)s77&(aFCf5^bfmDj9=ilpdkL zish803(n2O*cAg>V|WCWmIDOOGhDEa+thz^SxnZ>ZO~Tn(oU!O3YZ9gc&>Q1vai$R z)KO*2H?QjT1{r|VNnsQF)y?Gco_zb06q1FZeIWQi7q+em+i$PEcfqFTB&^0$!PWE@ zRHG{c@r!ELtBz~757XtC$xHSU@)XdGAh8Hk8Jz9@Y1!K4)QOUhOp-z{xdVMi<(}WQ zPK>z4%{>=CCXZ3+uim+)(9&5?UPz9|xvsGC{{a4OKK}r7G`}&1{{Y!!+jd~?6w5x% z{{U6Z^xhY6X=NtAv_8tZeKPu$8tp^}Q5u(@_gm`pq8nQ?j#EdR^aw4coqN(DYycTa65BD~K6_SjiG|1Czp14>nTMw?j0MdlGFw(q z&i>qeD#FReB-OJYtn`N6#0jTbLDK|dznVO9UztEnJs7Xq3gv(~ZO=(3-`=a#5o}AK zuDe%=S0^SU=g03vp9sv&DEQ}GgS$kZP7bbNb8M!cZLFOv20fm)|Lj?q7 zfDr?ViG~ZR4w;w)6$DJ5HDW9kv2@gAmz>C-txKN+fe6rFUgr{d`q9je1~3?Og0IZL z$DZ_;kkMJxs1ULNs&Sb2u90xeiU|t3NC*T=Y3PW|&wBV!OX%F2U? zIjbmuR4TGSAo1dAO_VD!(*$lL)C7`oq!4j45mozv%WEnZ<-mshYWuPp5kk8H&1wfY(p*07XVF$$!U12bJZZ?(?`aPP9JwC=tlcqLw&RM>m{qf z0b6Ubcpc3@q_KU-*L!Li<9&bi#s2`dy<6J!_ig+ood|h8O??iJ;ktP4+2`tYGW`s< zKHGnX>Fpzub%`L%3COQrI3%7>aB5sghu2(xR7^u=6KY8v4-mf!My3_2L(rD*vT;@=dTMaLRRgFKq+lrxz{>+K8}g1~42yLdIt zVyT*vi#o+Ngwz~+LbNppyU5-Ts*tK0%-AhO2e+N!cJ zI}o68#v|)a0LTQY#JmGD=A@JpEvo=W<|x$;NhI47jL0!ncp&0t1m_ZYHFZPWujSPS zINR}>&%r`TAQ{rCAc0mH0s+zjfj{!`Q53Kly4fzqH=XG81+)P&N8`tuIN)BG$Y(8{ zOn$W3(AI9fw?{{0GDwZbwOU}Z>G*_~mMy%TNvz_c5-W3LRRMq|6y$TBa%w$5MS%#m z05BjJ8)W{qTq_D)7Frn^vd42GW5r6FLxVyqY5|D&jSzIe5zSw4yc&HClYFclWX!%y z0nB;YwA8CxB5|W#-$n3!GZie_nEadB5!YrDJAX4?kHlo~U9Qe}B;6iX<=uK& zi9p#pOip{B+ZFTPFKq6g0=1&WoCHKsi6nz3_484s38JUN5L*jyxYTrx2Ii{E9Ej6J zy4Kj!jEt-wef(B2d1WwZq@qi`7+a2QvMi3EXO1VeRH0SAL)olaYpSZM3CPwaBWzFe zwKz?`zQpqdpgAZ4X$k<;BohWb{*_@&Z}0jB`%)OOV~K)t2YSwUce*Yv6`ea5Jw3pN z3a}bWMg}l{g1UCB;bXt!_cJY9(W1|xu-Zb$sN|WM#(3{syP8olZKXaAXRP}+>-vJ- zPiG^mOcTJL70)iFIb$Z4FBbm;9OOYk}^GvL8ym83Kct)hB*2#c#S2 zOp&-OMFq(#s?i0+^p;XbZhY1yt6Gxp2J{nrP zanz9t6Hcj`-gv_9$$j=FF5?o!vd-tHD&Ht`9Lf53J?iBdG@3H08kf@`HtmLXwqydr zNIqkKt#7qDT9QlI)B7*d4^+PZqLLH^3-^y1;=Mf#R(Q1cM?Bm)J*U`~KFRdG9=A|< zfg}j*E8UJAINTg^%RdL1`(M>1&s=SKOIiZ-{6M;xlfggYzIRusrLLOM=*JrMGd0gl zt7lEc>u@AQpD|u%geQtt&WkHfOg3#Py21i#h|&OWdgqR5I!4|t?C-bPevkhE!!_ko zZtC09pn;d*jt9Mc2Zle=?&V+KW6j+AFgXVO7cDlo^jdiq$nhH}aBRqMSrk5o}wCtz>^HJq`Gp>OVroU16Y_GxQ? zuS)8N1VkS77fN%8*zTj(eV6uan|4&(5vB@&b3WDW>2%jm6plIN+;e`>vX(5r!&L=f zff0gF`>bae_)J z2Wr+ZgYwGmAPo>sAkN_U@7k|!N{K6FB>`w-r*J^V!fN8XoFXuMHD^#dfBS4n{{X5d zeWCd(U;~76IpbqhC#Fw=mIOJIs81Yu6%&twwIDJWk+Au^&-$wg5Rn&IfE_?g4XZ23 zbx152#-#-Aq9Q)Er(7FgroX zB~(wDtjGW$g;s0>+r~3pCUHodgE<%k;1i0*kwqc2pZJ^_wv>{zHV6WB05+UeS^&`n zLxaH)u$r4xT@xbaB=3x5#Yz@MFi1Tu6BTp=ZrQma*gJ0=)NLhfB{~?eV5n3Au_tNw ztfbqb%~@hFP|}82!jXs+Ksr=Y)3Y;o9Zs$M$da5B|E}^j@UB{{T&XdK^ZR-Dhg?<MG~`{GFCB8^xTTw*4BV!J~G98BQDP=z9@}>eB>n2obdu z!C43-61tob1)~#FZUG>N*-{4YA1I9`RAA1RXF8?*MN{sRItF24G?rx4kEp0I4bzQW^m(AebZ> z&lLFql832fMq*~7f2e_;Q0QO*8&5Q8r(=2xm4T;is(cgzK#f=fG)_S4f=Czx9z0RI zm;@bfur0e2ol{b0MQR1Oiv%RF1~NCQl-VbN;fQTIj$lsl&h%L|vG7-HviRZWH zRj76gPz7=d8AH>o$et!V)M{jWj#b%?r3C7jUU5@yOT-#2h_oej!NQS~?G=@Dis;d3 zd^8S0C_7~PiS1EL@9)5I8Z`QA%WKtJHb$lmEIwVt4fp)(rmd4|5z|oKuHhEY+GfV^ zr#;T!rE2=C)B6&zb`MkQu6j>QeIN(n6NcHO9rpbzd3Ew#Kj^rx;L5=_+;Ri1pM(*P zt${pF{{W8l#}?G1qq`-|X3zstxWL$j9fyOz)}y>vFUc0b>h{gBSxT_~0F-2y0QsYD zEwZRmXtV&Z=c#V|te}A>Y5XgbPH5WD_N=tRAa0?jatVQ5Rh-#+rmK&kq|5+#@0iYH zMPX+-8hF*3fFuMV^+8=A!HJ16=DEBv#dkG-QMHy$!u!a-`}fCV8}&oC{tK-o z#B~U!bb|o&&+j?STqU%h&;7w1L8IU++z)R`>oBEE&*Pe9jyYv1l{SAh;$QFh(6R?`SEsk`KT zE3Z$fjy}9pe{(Mu{Vc23`s3I~C9eEZi<_^<9ok0_-JX(;y};>aY#68VTVmZKJ%zCzt1 z{{Tn!jmtivZ&=Xt1cu$1ckNxU>pq)VE7CKT3ndPXE9*WxlFO=0v25edYSukY>c>QQ z#?HT^Mi$NRj8Rw&h@SQA!f{>AoSZr?z4pDOzpUNH`l5cm1#9}4r)-_A@N?Z;?MJ$8 zl0+V*CQtaT3HP@K+J$El^_TSb7(Jj_WG-ZkW6gOdwwji{{{Z3B-cD`H9}!;SBTAm2 zbF0U_VdCAhNx_Zm3riOe5=0)HuYzft&C^sAaL#wADB|+P!0bZXn9m#5GI1$6@gI09 z;hgVL>F!**6d(-q5t2w9wyE2k%SD`G3~gZQRD425xaNyC-0~hNQBw=7%%L@0L<+Le ziRb*$XQh+=Ke+8%NarX4?yDk(2S{>biN$J@g=E?YBsfq&54ayR_Z^2drn&NE44Pfw z1rZ{35DaiWxuR0k=@rqQ;-!{gM@TcGG?|a*(wQf{ku=QgBHpDkB!YLD?ewg~KHmnW zY@x=prHeKONREFh+}xRgN`_E~gfntB!&b0O?2ZanOAt!5NuB=y6IrZTc2ZxUh}`5J zeX7K*kYNVmfJtNj02chc>ZXGTb=1nh6UdkoFLXZx$vSxf+<8i~Z$t$tb2#q8WhxoO6notkbmL`@3lJFH4hGi_q<1o0k z*xQXn%$(vPs+Q$FlDrgM^-gj_Bn?qG$0EG%6+Y)g+!?)X@a$NCSp=97o$^0|x+c?> zV~Q>wu|6X=s?^q;0Kl--k;fH#a#(iw3nkqm{j=ya6Y6aw*k~ca!uYN|KC@|Kmd=^< z`Nu~dR1}hN5<7o8*QL6Ia6%3A&U26}Q4WAGE}d9Eg(HA5fjSA*tL4m*+|=5ZS4>f| zhM6Rj-|Iy7NFLguokm(Z02pJ~?fBNRPE-)gvUV^dnu!#)+{gipjlnTlXtH&G^*t#2 z6}?UW09PKl*e$v~Y4>8bgwr`C&Y~2MF@fT?n@Sldo35rHXK1ARh!so_ z199yXP5?|dN|1AsOif6D87cv3iJ0SRv zPLcu6@(+5p2@C*uk+wFPKpc^$OHOi0@7k=Z0)<&1@z0L}vB`KKA2A11iI8#yYB?bY z{^v6hou;4}3nI))w*W;n!CwK4ne#OGDDZR>1wg@#{L!hhOb|S5gZ}`nB?}mUR6!6h zt5vWdSOORmvCh;5h}uS=K*10MiYQ5jS1pht0h|dlS>U{v9WU_tGFKzO&%IS|w4UO* z0K_(uaJ$soqUa+qaj3yrq6~X#R#++07jEXSxCxJjq%a3EKS-i~z$}uAfduEO4u3k6 zZ8SItS1zCqH|_>%N?)l>Y0&Jk^C*HN8KX&Q!1;s@P3al_d;~wA+y*1dhLNi1`>iMHN90Rp=?@t)S%TVmd&2H$nNjeApnE+PJ5S z-`|sMG-P(xX4-{gAn+h~sFQ3BX(Y7 zea+%t6q>%zvGH|VL^l|Nqz`Sse`?aj^>XdUf9w1azSS&s^v2b|1;;F~pe_I;#%J)X zq|@yy)R%fo4|Lpy2@M1hAjf0${c5ac=kNLx932+)V^LQDRApv#hUUs{ zExSrhp*l`(ZX3LI6^yY-*`(ft3hwHc6-CC_lL`lKc&Oj0ta&QZW!4ho1}cS8(1|gs zCw%c*#~h=(YwnD;rV5df&>M$KGaSyT8HxNWmr+a`#lg4G`kzhd?E0HmeK@&wgj#}O z4&;tWiNUO7yQM9!>{U?sIpna>r9wDqI`K39jaKFA#1{c1gi;i_1xo|}0Aus0;=$Cn z=*_i(mwhKnfwXdX72o<BFEMK_KOI?fxp`mG@|kakEODOj+*AmJD?P=10=A zl9wNUQl|!xsMeU7Y3Nc;pb6|hN~!tR16ut`EwQ(Cp2|yONIOn;u2QBk@@gy8S=Mi8 zu&|~u3D{54yWyWvO2tH&c;mKFrA5*3)VnTQR_uENSZQu0{n1nXg4WjR#<_8@ZKub* zZ7=Gze^Eaw(S4@7Y?VMYDATGZNgGHNyfSI}SN@r4a&`X80?J)`fP^zB#x#!g>Bf^! z{{Rd>Co9!O{{T__xCG}%5yTqu=KJ!bzW6#XO0%W*H`|BolD?c3cDfC*@i?94E7#Ke zLg?e!x&G%Y`d#n4M=#W0KCa<*)u^#%DkKB2o?^VusPb_h{{RP0*ebi}&AVV?kBrNN7233n}wCc1yV%n_xvlW>E!3Rzk@QALNa}=_9f3q5MKqE^14Ll z+PHN;51tt;P2_SkVv5VA`jeopH`)h! zlKbyWu$DgtZ&~TC2R|CtrVXXBr%8@H{`IAcpH)ZhNtIlj&s2`2s36-JgSo|6mkH7w zODlIO2`U*3PX;~z0Fy-4DiIoNsercXq!X;vw+XQRh0ena`oU!eeRdi=%A#~~k zuTc{Xn$vCwQ*k3v3db;FBk`$B6%-}4AcMTNYD(at=w-kFn8*ZxV>MJY9Fh4dw5l#0 zSdY9$#%b<=Mx|!gvt&Hr=94$b1nEW%8e2J|Oc6*zs&#oAh(F1#O5~6k0YDi5{ZDLG zW}z37y~LTB+kSt|Nq`0{3=njXOs_erl0Z07(!_#u-mEFGLI_|~V|r|w86#0Dy+;$? zqn45`fTR*sQbZA(~NDHzSR3-{{XJ_Hpz0f zQHGUWhrM^`^cD!`)apE$iLSNM7&L+m2!b>D*KBZ=5OZw4)BG_D8sZ0u@8+jb+D#V~ zO`+1{TvQ|gM3!ylcf~QB)IffhBQ3)BRKcCPv!8C&l)F@|mAPQ%dA$3Lw%}9Z=y=~GT>OX3&5i_m!C)(foYHa#| zFM2n@w%O4<*DkL~bsK2uhHn}d`iJbxUX7CPqitTA>@X8CH0bpk^yRUhEAwJ;f`ZXG zoUz)w*~prsFhMvV=4hV@8Uy}@lkbqzQK{r&1L|kV>KQZMs2i-1W>3s<81G2(1sMlP1n&pEML;72 zf`Io^$C|k6b{JR?1Z+lRRdECqXz#w!wPd6iCJcfg=Bxq{A^?#Y_o&nY6%ZF8rmE0n zQUQ|Cdl9uxK*B**Q>Qs-$T3w@kOm=!px7J=Pk=TglAw*jKGhSEq8&dBHlj?-O+=xU zvarQiXu%lYYPulBw1YZ>kuqw_;I z{wlRephy!o!m-k4J62|9Kp4r@&UaB)Cm|9+>H|H==Cdgl1`+~;CNifp6tF$OBc^1D zlaLR+T$&<~D+XabL}jxiRQV}k0TOKG2J@Z!QBK7QH4(51atS+m_M%b?f~aFZ+$TDt ze*jgU+_p9r4#zr5fu~lH6`ZM+XuH$f1$OBJGraaRa;X#K)oCrW%jHH1;CcE~rn`78 z?7GqbA%S#2VtXCGhNq>uEvgAKY_-io*quT)J;(Djc{S-`CeZAu>0Wn`iL z^or!+CyYWjb2|m7EEdwLmDrIh1pffKjkKX~H@-s*j=_NG*_F48dM&xisbo;TpBgz?>{X1#}8}ftr z*P0t}b(kW%YE)uH;ztnzJbr!ZV)C2VX+;femDbkv5W;kg!0i>Jp-CTrEr(;Jbr1+* zHydsI?NMN}%0KW=YM=cS+Dk~f^u59f39IHNKMG35sj}PlIv)j)YrKH45YD>-dslnM z7nW+j+0SkpvWYEi8^Q}8@{*_i->1IkMYs`>6X5r*&ozz> zvkMm5Mpn3*iYZM?B4cjRIIQIj@j*&QTkL;KeMO*3DJ-GXxdlk)-`c%h9+Oy7zxH#_ zKT)81GH$i7#JdcgJw|J?=_z=x20Nk~GJoybvvm4@P*5^F9PAHqS;wu4oEy=ni~PtI z?jrhv8BUz2Qqmyy?_BVVUvCdZ%TiV9@7s4_YS?AK2r-T^-ltL=#j5-AF-;YGMn|+l z6)GUxA_uhBHJZmLG}Ngz+qZX3rYyjNBmspR=e>GV#N@2z1(veK)t2(88bFN6 zuAL}KxBQvPWM5VGUH<^JE}{bGK$s1XJ65`#H`Qs3a#$W`?LV^K&BnKS;I+TlPmDkb(F033AJ>&4MKheroSU=p_%|lruKdbbu>6PrF zoi@&7>Iz3=`Tc9AICibWs1sEl{~D!j6WAxeUiYSLd8%Ca+U8JlYH~kk-%M$0~bQEO5#7Kd78=%{IGXnd}=uHQfMPm=^#AqI~Qt z(6L!LZ}u@QEf#&H=`33*@O?r((wdmANS&v?D}9?u&$*P|&O@sF9a=)Fi2`|@#at7aL5n3O zTreNzq)QwSk<|flI~q)}0x%_1sUZ8*R2_`BPBICI%o;mZ1!+}KAc%?Ynyev#41`Gs zzT}$HQzR7WBtRlK-fKFvQIgvf)D(a*CyLK^4eYQ>gGq@K7{}yl<1s<(fa+<1*o~WTMQwNPsn)=bCOp<; zura*F?S(8JG>9AdKg?8yrI%!r@rY)Eu{q!PYbnuLUB)jYiD>|h`R`haGb7s26~nLq z2?-k>=e;sYD`i`=J<}a48OZkLXtV`*P#7_jk|QFkAPZ?DN|?`zO(1Hs>pmLjx~1)D zAg5{V?MU|$CCezmohL{V0OfhAlX4{)z9F52%>6r5X*MKfB0?$`TW#VW;Ay7da8I7qDtPqGG0U{uY$TeMTB2GrA z(;(xI6i(z5AQ_DC#%gU100^1N>?W(!f!%`=Nr(bRdI1aovAs`_3Hgi?A|{K#4#a{% z*yC-g`+&&l*dA#&AbBWc&eCJ{s-GdCDb*r6d5n`;QJ^1$RTaqTGAcL0U`)W6fxHU7 z#0ZUFFei=b(x5PfGT?|JNXLda7&6iA<()Hu%6ncE=6Ll8+3GDzZTD$z(uZB9<0GdmCFD$;O4 z$SZ(L41hb;Tz~-@gk)!on$DRB}N#CkSOJmK+7(A-%H6l zfr#3ZKBicTHL?doa@mbi4xtfQ%NS}(oTBBlS{YO`YMDO=)SX9l3lZSYHPPWeKWvi%x6W5WfRG6$HT^4=u~_hHZbkIw z*@d{!v!#b1llUKFRX@B0sMTXm7_f|kQU$WhfZ+wiU`bj`mgso39TEv$yzlNlMV zx4-S95x}Wvx~{STGEC%0xaO*I8iLT1sQ?-sLj^gU{p!bc!~VsJlxXx;oL<)OOlpoX z+s$5|R~#R}%NLS5A=}gt@(K9~QPmr5-n%@Paxj%0udyxqTbIS3Qm&Q^BP#V9kF8tA&nRja_c`YBN>!aN>IbpvE}M1~S+I~0j2j>PAN70yc%sSk9hiq z8t%9{f{i#QdYw#MIsQg16f>1>y-KQjQJ_c}IOCeaZA98esf}*&)Wij1%hC`0YZ*4* zsnMjAQnBs-0B{v%wg@1Ej4|+knG|_VO_5@4^#1^7yS9Y4g#_w=e8H_Qo5^U8DCErE zm95`~8l2#aiJgbgewEL&G|l%YH`(;=EQL@M0|ANEsP?Xl9N|fZ)X}6HpADn}plKj) z-nG=q5iwHB!J8<+GTlwC0R#`H6{VZSC}fG?Z-yS(EX?;=q^QX-aChdScfI}Dc-D_m z={^|r_N{AKa$80-#76`iO?@0zG@G-}Y~}r?sp;>%w+t>U6QuVNBk5jTn!`U<&Z^ZM zFNiLNyKI7`hszy5{;Km~EjG@XQ%Mn6DVb7>05b19@0#UVabJJ2y>n--x$Az;we~_= z^mYmLYIL*4J7@XLeJ-=+PmhTVtF$Osibf&yE^MuFs%VtVt$<0i#GV$JL4ar+50!_ z+t+;ydZo4iQ>#-MB=H@F_1ScCcr4->&%G?WWZCGN=ff6|Ms$~mpQkmf`pIDlM3WpY z$Msrm-AhG&Ao+e=H1KP~k5?Y}c6WHb+0o0tbK(NZ%^F}X@@u=z@aO!PSguqU66eI! zu2d<^6Bj9JS#F>_+@8; zdxKt{w_g>LNyHgr4W3_r$;?_R=efBxNl$l%9f9$u$J!9fZlGvO@bH*}nKXXo~ z^#1_T%jm6KOP-}kL4^f$h5j1%^zn=w?DOW|a)ZPF0AD|+yY{X3^hyXVgQg1OaCq%s zFY!5~{XbFa>8i8FUUHX;Sp!QcV#+%WkKy&2%FYxeUu*7))a=1~(-CAn$S$O-D8Zka ze=%5nER*&B0O!o6XEb}s-Zni#kDG>fCC~w3|8V@vpg7ERDWqno#estO=q>W-0Dj_32~XwZV+w; zHAm<5t$E3)C$XHdAQBV>*qq>qW(ff~aH;??5{TH z#4*~5awLNayq?1pZ~(x^Ni1WiZ#5GFI>-!6fskV)f2yg%4Fd&?nK917tVIxncbFrb zNbgf+9?KMsVS=6~F-PsO@*CFlnN4QdIWdt_9HxU@l?6IRPVxZ$VzfcB%2lCB1KOjf zB_a4>gqb{JZzin8K&Dhz$rzPvNUh_NOVmb+W=Pn_ZfhRp7!UxFEk5-@7=VF6 z^AY;gYQQiCT};5x))`XiW|k-N zKhD)Mmgu;Q5^gf1XI9c+{yD9rzf&XHfKN)0U>#ijIjl7b4X4Sf)Md$l2r^`W^zV<- zw4w~zrqI$=iESjogZICYS$)uIq~C2(Jw=zc31-OYfE&OYkAF416I(LN{dcN+w+s4} zLd<}wr_0ahSkE_>Pd-g!j4sn2rZO%V7Z*@4C$X5@6_`tJ@AxYA`~JmLLcvO?*8z7K zCj`?bv1&q1rvWVXS_^d^tvY5u4{FD1nMIm{d`A|(RwdFk1`_-iW; z$A5p>UR}zLfCw$4Taf<%GL13S=Zs+1<`I}J^uD6izfd9c=~kUa3C2Xv>0L2uExP;m zOti~=SFG07;3j}2fivy(n$~}bc;J#>C0#VzF?x%P1F36@#s)#hFlTe#MP zBHYjkUUdVtXC9_p8hE1H&8-nHvbCqhy(^>;4CD;&HPO7BHq0cft&sd%N;;cHM9z^X z0)HCgl1h$>c3otTkEEotOG?cCC-I8K<4=zGv|y4oPb-+HTwh zbD<16tdbOTel_ZSRnlpHD}$GBb)4g><XMZLu&yBOAqgtrz2wZ^@K+}o9 z{V6$GiTnJDEesqKMRYp8c!?b6pW&@0;t2@9(t10;B5Gr77?VGVtA|e~X;K+vi`z=t z$^^Wl<~To={p+(>q~RD+`5bz|=c)+Byy@A+^`5Tps&=_~ zpQ|k!_=8?Pqsu>5rq0-;t78D)`sUNBsUSSB0Q24s`Kr@ZkI(Kz)3!awP~d=|l#l?% z<3C?DGS3%lL1NW2U697!W9rNC!>USt^QBv)4sI?TMul9;G099fmzti`v$Em%4b2CtCwd=3j^uPM; zakKzs17VG89=2VbjnN(pySWzGPFC(;oQk{%Xf= zEKIXquS<8-+BXWl%So1;1^WIQRx(|$)S#;L3ravH*wTc;!3KK??L5}{Y4*zGnQj@a z5L!|K#HOGVJe}*l9+ahi)?wSG5pK%>?QO->I+d~`98q?vxm>|7^b*NrYd~m?dWx)L zJpQ#4%e``>t{~Vx(7kOywp-!2AQ^ziksfQ+{cfXaY~|UFoL^A4@0TArz*LUsxvw@@ z<(5u8v~*1*a6&l-3t;LB;zpo<>+r4^X{4auTSa#4sJ(9OT_sJk0M7^7x7wO=>xwgUc&}aQPp2##X<2}G+coCRMqZ~URcel9 z(i#D^sAo=bJLA1;yVWLQpw7bR)R!0(IMb+Sn2rdml-^kd4v-mU*TitF6|hO)5x801$9
K_RVA0ERE?=qU?i6zh#(P?2h(~q5p}fyE|yiC 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

j#c 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

ZwwP7}wr$(Bcofh<04Ya#*(|j95p#VUV4oDn% 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 + +USER root + +# libav-tools for matplotlib anim +RUN apt-get update && \ + apt-get install -y --no-install-recommends libav-tools && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + +USER $NB_USER + +# Install Python 3 packages +# Remove pyqt and qt pulled in for matplotlib since we're only ever going to +# use notebook-friendly backends in these images +RUN conda install --quiet --yes \ + 'nomkl' \ + 'ipywidgets=6.0*' \ + 'pandas=0.19*' \ + 'numexpr=2.6*' \ + 'matplotlib=2.0*' \ + 'scipy=0.19*' \ + 'seaborn=0.7*' \ + 'scikit-learn=0.18*' \ + 'scikit-image=0.12*' \ + 'sympy=1.0*' \ + 'cython=0.25*' \ + 'patsy=0.4*' \ + 'statsmodels=0.8*' \ + 'cloudpickle=0.2*' \ + 'dill=0.2*' \ + 'numba=0.31*' \ + 'bokeh=0.12*' \ + 'sqlalchemy=1.1*' \ + 'hdf5=1.8.17' \ + 'h5py=2.6*' \ + 'vincent=0.4.*' \ + 'beautifulsoup4=4.5.*' \ + 'xlrd' && \ + conda remove --quiet --yes --force qt pyqt && \ + conda clean -tipsy + +# Activate ipywidgets extension in the environment that runs the notebook server +RUN jupyter nbextension enable --py widgetsnbextension --sys-prefix + +# Install Python 2 packages +# Remove pyqt and qt pulled in for matplotlib since we're only ever going to +# use notebook-friendly backends in these images +RUN conda create --quiet --yes -p $CONDA_DIR/envs/python2 python=2.7 \ + 'nomkl' \ + 'ipython=5.3*' \ + 'ipywidgets=6.0*' \ + 'pandas=0.19*' \ + 'numexpr=2.6*' \ + 'matplotlib=2.0*' \ + 'scipy=0.19*' \ + 'seaborn=0.7*' \ + 'scikit-learn=0.18*' \ + 'scikit-image=0.12*' \ + 'sympy=1.0*' \ + 'cython=0.25*' \ + 'patsy=0.4*' \ + 'statsmodels=0.8*' \ + 'cloudpickle=0.2*' \ + 'dill=0.2*' \ + 'numba=0.31*' \ + 'bokeh=0.12*' \ + 'hdf5=1.8.17' \ + 'h5py=2.6*' \ + 'sqlalchemy=1.1*' \ + 'pyzmq' \ + 'vincent=0.4.*' \ + 'beautifulsoup4=4.5.*' \ + 'xlrd' && \ + conda remove -n python2 --quiet --yes --force qt pyqt && \ + conda clean -tipsy +# Add shortcuts to distinguish pip for python2 and python3 envs +RUN ln -s $CONDA_DIR/envs/python2/bin/pip $CONDA_DIR/bin/pip2 && \ + ln -s $CONDA_DIR/bin/pip $CONDA_DIR/bin/pip3 + +# Import matplotlib the first time to build the font cache. +ENV XDG_CACHE_HOME /home/$NB_USER/.cache/ +RUN MPLBACKEND=Agg $CONDA_DIR/envs/python2/bin/python -c "import matplotlib.pyplot" + +USER root + +# Install Python 2 kernel spec globally to avoid permission problems when NB_UID +# switching at runtime and to allow the notebook server running out of the root +# environment to find it. Also, activate the python2 environment upon kernel +# launch. +RUN pip install kernda --no-cache && \ + $CONDA_DIR/envs/python2/bin/python -m ipykernel install && \ + kernda -o -y /usr/local/share/jupyter/kernels/python2/kernel.json && \ + pip uninstall kernda -y + +USER $NB_USER diff --git a/data/Museums_in_DC.geojson b/data/Museums_in_DC.geojson new file mode 100644 index 0000000..a20a9e6 --- /dev/null +++ b/data/Museums_in_DC.geojson @@ -0,0 +1 @@ +{"type":"FeatureCollection","features":[{"type":"Feature","properties":{"OBJECTID":1,"ADDRESS":"716 MONROE STREET NE","NAME":"AMERICAN POETRY MUSEUM","ADDRESS_ID":309744,"LEGALNAME":"HERITAGE US","ALTNAME":"AMERICAN POETRY MUSEUM","WEBURL":" http://americanpoetrymuseum.org/"},"geometry":{"type":"Point","coordinates":[-76.995003703568,38.9328428790235]}},{"type":"Feature","properties":{"OBJECTID":2,"ADDRESS":"719 6TH STREET NW","NAME":"GERMAN-AMERICAN HERITAGE MUSEUM","ADDRESS_ID":238949,"LEGALNAME":"CORCORAN GALLERY OF ART","ALTNAME":" ","WEBURL":"http://gahmusa.org/"},"geometry":{"type":"Point","coordinates":[-77.01958878310639,38.89911061096782]}},{"type":"Feature","properties":{"OBJECTID":3,"ADDRESS":"1307 NEW HAMPSHIRE AVENUE NW","NAME":"HEURICH HOUSE FOUNDATION","ADDRESS_ID":241060,"LEGALNAME":"U.S. DEPARTMENT OF THE INTERIOR MUSEUM","ALTNAME":"HEURICH HOUSE FOUNDATION","WEBURL":"HTTP://HEURICHHOUSE.ORG"},"geometry":{"type":"Point","coordinates":[-77.04460619923155,38.908030206509885]}},{"type":"Feature","properties":{"OBJECTID":4,"ADDRESS":"950 INDEPENDENCE AVENUE SW","NAME":"NATIONAL MUSEUM OF AFRICAN ART","ADDRESS_ID":293262,"LEGALNAME":"BUILDING PRESERVATION FOUNDATION","ALTNAME":"NATIONAL MUSEUM OF AFRICAN ART","WEBURL":"HTTP://AFRICA.SI.EDU/"},"geometry":{"type":"Point","coordinates":[-77.02550917725944,38.88796214949963]}},{"type":"Feature","properties":{"OBJECTID":5,"ADDRESS":"740 JACKSON PLACE NW","NAME":"THE WHITE HOUSE ENDOWMENT TRUST","ADDRESS_ID":218748,"LEGALNAME":"NATIONAL BUILDING MUSEUM","ALTNAME":"THE WHITE HOUSE ENDOWMENT TRUST","WEBURL":"HTTP://WWW.WHITEHOUSEHISTORY.ORG"},"geometry":{"type":"Point","coordinates":[-77.03820629325264,38.899842529027275]}},{"type":"Feature","properties":{"OBJECTID":6,"ADDRESS":"921 PENNSYLVANIA AVENUE SE","NAME":"OLD NAVAL HOSPITAL FOUNDATION","ADDRESS_ID":82564,"LEGALNAME":"JEWISH WAR VETERANS NATIONAL MEMORIAL MUSEUM ARCHIVES AND LI","ALTNAME":"OLD NAVAL HOSPITAL FOUNDATION","WEBURL":"http://hillcenterdc.org/home/"},"geometry":{"type":"Point","coordinates":[-76.99314290714912,38.8829885933721]}},{"type":"Feature","properties":{"OBJECTID":7,"ADDRESS":"2201 C STREET NW","NAME":"DIPLOMATIC ROOMS FOUNDATION","ADDRESS_ID":243360,"LEGALNAME":"NATIONAL PLASTICS MUSEUM INC","ALTNAME":"DIPLOMATIC ROOMS FOUNDATION","WEBURL":"https://diplomaticrooms.state.gov/home.aspx"},"geometry":{"type":"Point","coordinates":[-77.04831079505838,38.894135140073566]}},{"type":"Feature","properties":{"OBJECTID":8,"ADDRESS":"4400 MASSACHUSETTS AVENUE NW","NAME":"AMERICAN UNIVERSITY MUSEUM AT THE KATZEN ARTS CENTER","ADDRESS_ID":223994,"LEGALNAME":"VERNISSAGE FOUNDATION","ALTNAME":"AMERICAN UNIVERSITY MUSEUM AT THE KATZEN ARTS CENTER","WEBURL":"HTTP://WWW.AMERICAN.EDU/CAS/MUSEUM/"},"geometry":{"type":"Point","coordinates":[-77.08841712551974,38.9390892139132]}},{"type":"Feature","properties":{"OBJECTID":9,"ADDRESS":"2320 S STREET NW","NAME":"TEXTILE MUSEUM","ADDRESS_ID":243164,"LEGALNAME":"SMITHSONIAN INSTITUTION, S. DILLON RIPLEY CENTER","ALTNAME":"TEXTILE MUSEUM","WEBURL":"HTTP://WWW.TEXTILEMUSEUM.ORG"},"geometry":{"type":"Point","coordinates":[-77.0464284034822,38.89880233850966]}},{"type":"Feature","properties":{"OBJECTID":10,"ADDRESS":"1145 17TH STREET NW","NAME":"NATIONAL GEOGRAPHIC MUSEUM","ADDRESS_ID":290192,"LEGALNAME":"CAPITOL HILL RESTORATION SOCIETY INC","ALTNAME":" ","WEBURL":"HTTP://WWW.NATIONALGEOGRAPHIC.COM"},"geometry":{"type":"Point","coordinates":[-77.03815544194862,38.90519711304962]}},{"type":"Feature","properties":{"OBJECTID":11,"ADDRESS":"3501 NEW YORK AVENUE NE","NAME":"THE NATIONAL BONSAI & PENJING MUSEUM","ADDRESS_ID":293238,"LEGALNAME":"NATIONAL BONSAI FOUNDATION","ALTNAME":" ","WEBURL":"https://www.bonsai-nbf.org/contact-us/"},"geometry":{"type":"Point","coordinates":[-76.96989266812075,38.91241055669072]}},{"type":"Feature","properties":{"OBJECTID":12,"ADDRESS":"2020 O STREET NW","NAME":"O STREET MUSEUM","ADDRESS_ID":243057,"LEGALNAME":"LEPIDOPTERISTS SOCIETY","ALTNAME":" ","WEBURL":"http://www.omuseum.org/museum/"},"geometry":{"type":"Point","coordinates":[-77.04592748104784,38.90839101941751]}},{"type":"Feature","properties":{"OBJECTID":13,"ADDRESS":"2101 CONSTITUTION AVENUE NW","NAME":"NATIONAL ACADEMY OF SCIENCES","ADDRESS_ID":242716,"LEGALNAME":"SMITHSONIAN INSTITUTION, NATURAL HISTORY MUSEUM","ALTNAME":"NATIONAL ACADEMY OF SCIENCES","WEBURL":"WWW.NATIONALACADEMIES.ORG/NAS/ARTS"},"geometry":{"type":"Point","coordinates":[-77.0476448925699,38.89296693766957]}},{"type":"Feature","properties":{"OBJECTID":14,"ADDRESS":"2401 FOXHALL ROAD NW","NAME":"KREEGER MUSEUM","ADDRESS_ID":271251,"LEGALNAME":"CONGRESSIONAL CEMETERY","ALTNAME":"KREEGER MUSEUM","WEBURL":"HTTP://WWW.KREEGERMUSEUM.ORG/"},"geometry":{"type":"Point","coordinates":[-77.08878098790044,38.92191197499568]}},{"type":"Feature","properties":{"OBJECTID":15,"ADDRESS":"1250 NEW YORK AVENUE NW","NAME":"THE NATIONAL MUSEUM OF WOMEN IN THE ART","ADDRESS_ID":279010,"LEGALNAME":"NATIONAL MUSEUM OF HEALTH AND MEDICINE","ALTNAME":"THE NATIONAL MUSEUM OF WOMEN IN THE ART","WEBURL":"HTTP://WWW.NMWA.ORG"},"geometry":{"type":"Point","coordinates":[-77.029163689541,38.90005647268176]}},{"type":"Feature","properties":{"OBJECTID":16,"ADDRESS":"900 JEFFERSON DRIVE SW","NAME":"ARTS AND INDUSTRIES BUILDING","ADDRESS_ID":293260,"LEGALNAME":"ANACOSTIA COMMUNITY MUSEUM","ALTNAME":" ","WEBURL":"http://www.si.edu/Museums/arts-and-industries-building"},"geometry":{"type":"Point","coordinates":[-77.02446647929001,38.888201004559114]}},{"type":"Feature","properties":{"OBJECTID":17,"ADDRESS":"736 SICARD STREET SE","NAME":"NATIONAL MUSEUM OF UNITED STATES NAVY","ADDRESS_ID":311896,"LEGALNAME":"BLACK SPORTS LEGENDS FOUNDATION","ALTNAME":"NATIONAL MUSEUM OF UNITED STATES NAVY","WEBURL":"http://www.history.navy.mil/museums/NationalMuseum/org8-1.htm"},"geometry":{"type":"Point","coordinates":[-76.99526950368147,38.87303084860059]}},{"type":"Feature","properties":{"OBJECTID":18,"ADDRESS":"500 17TH STREET NW","NAME":"CORCORAN GALLERY OF ART","ADDRESS_ID":279802,"LEGALNAME":"SMITHSONIAN INSTITUTION, NATIONAL ZOOLOGICAL PARK","ALTNAME":"CORCORAN GALLERY OF ART","WEBURL":"http://www.corcoran.org/"},"geometry":{"type":"Point","coordinates":[-77.0397427304576,38.895854463821884]}},{"type":"Feature","properties":{"OBJECTID":19,"ADDRESS":"2017 I STREET NW","NAME":"THE ARTS CLUB OF WASHINGTON","ADDRESS_ID":285527,"LEGALNAME":"SMITHSONIAN INSTITUTION, NATIONAL MUSEUM OF AFRICAN AMERICAN HISTORY AND CULTURE","ALTNAME":"THE ARTS CLUB OF WASHINGTON","WEBURL":"HTTP://WWW.ARTSCLUBOFWASHINGTON.ORG"},"geometry":{"type":"Point","coordinates":[-77.04573426864144,38.90157618582308]}},{"type":"Feature","properties":{"OBJECTID":20,"ADDRESS":"701 3RD STREET NW","NAME":"LILLIAN AND ALBERT SMALL JEWISH MUSEUM","ADDRESS_ID":293253,"LEGALNAME":"LILLIAN AND ALBERT SMALL JEWISH MUSEUM","ALTNAME":" ","WEBURL":"http://www.jhsgw.org/"},"geometry":{"type":"Point","coordinates":[-77.01493675564363,38.89857205791096]}},{"type":"Feature","properties":{"OBJECTID":21,"ADDRESS":"320 A STREET NE","NAME":"FREDERICK DOUGLASS MUSEUM","ADDRESS_ID":38979,"LEGALNAME":"COSMOS CLUB HISTORIC PRESERVATION FOUNDATION","ALTNAME":" ","WEBURL":"http://www3.nahc.org/fd/"},"geometry":{"type":"Point","coordinates":[-77.00110470253333,38.891131915241964]}},{"type":"Feature","properties":{"OBJECTID":22,"ADDRESS":"1334 G STREET NW","NAME":"ARMENIAN GENOCIDE MUSEUM AND MEMORIAL","ADDRESS_ID":240658,"LEGALNAME":"GERMAN-AMERICAN HERITAGE MUSEUM","ALTNAME":"ARMENIAN GENOCIDE MUSEUM AND MEMORIAL","WEBURL":"http://www.armeniangenocidemuseum.org/"},"geometry":{"type":"Point","coordinates":[-77.03108432435003,38.89804891426683]}},{"type":"Feature","properties":{"OBJECTID":23,"ADDRESS":"1799 NEW YORK AVENUE NW","NAME":"OCTAGON MUSEUM","ADDRESS_ID":218490,"LEGALNAME":"AMERICAN RED CROSS MUSEUM","ALTNAME":" ","WEBURL":"HTTP://WWW.THEOCTAGON.ORG"},"geometry":{"type":"Point","coordinates":[-77.04141820048949,38.89635375607101]}},{"type":"Feature","properties":{"OBJECTID":24,"ADDRESS":"1901 FORT PLACE SE","NAME":"ANACOSTIA COMMUNITY MUSEUM","ADDRESS_ID":286524,"LEGALNAME":"FAUNA & FLORA INTERNATIONAL INC","ALTNAME":"ANACOSTIA COMMUNITY MUSEUM","WEBURL":"HTTP://ANACOSTIA.SI.EDU"},"geometry":{"type":"Point","coordinates":[-76.97678467186984,38.8565826636904]}},{"type":"Feature","properties":{"OBJECTID":25,"ADDRESS":"2312 CALIFORNIA STREET NW","NAME":"NATIONAL MUSEUM OF THE JEWISH PEOPLE","ADDRESS_ID":234961,"LEGALNAME":"GREENSEED COMMUNITY GARDEN LAND TRUST","ALTNAME":" ","WEBURL":"http://www.nsideas.com/archive/nmjh/"},"geometry":{"type":"Point","coordinates":[-77.05118108814123,38.91537084189858]}},{"type":"Feature","properties":{"OBJECTID":26,"ADDRESS":"430 17TH STREET NW","NAME":"AMERICAN RED CROSS MUSEUM","ADDRESS_ID":300987,"LEGALNAME":"DOUBLE M MANAGEMENT","ALTNAME":"AMERICAN RED CROSS MUSEUM","WEBURL":"http://www.redcross.org/"},"geometry":{"type":"Point","coordinates":[-77.04020705622152,38.89482654014118]}},{"type":"Feature","properties":{"OBJECTID":27,"ADDRESS":"1600 21ST STREET NW","NAME":"THE PHILLIPS COLLECTION","ADDRESS_ID":243333,"LEGALNAME":"SMITHSONIAN INSTITUTION, RENWICK GALLERY","ALTNAME":"THE PHILLIPS COLLECTION","WEBURL":"HTTP://WWW.PHILLIPSCOLLECTION.ORG"},"geometry":{"type":"Point","coordinates":[-77.04685454590388,38.91150979086159]}},{"type":"Feature","properties":{"OBJECTID":28,"ADDRESS":"800 F STREET NW","NAME":"INTERNATIONAL SPY MUSEUM","ADDRESS_ID":238378,"LEGALNAME":"CONFEDERATE MEMORIAL HALL ASSOCIATION","ALTNAME":"INTERNATIONAL SPY MUSEUM","WEBURL":"HTTP://WWW.SPYMUSEUM.ORG/"},"geometry":{"type":"Point","coordinates":[-77.02328618491306,38.896986480912865]}},{"type":"Feature","properties":{"OBJECTID":29,"ADDRESS":"100 RAOUL WALLENBERG PLACE SW","NAME":"UNITED STATES HOLOCAUST MEMORIAL MUSEUM","ADDRESS_ID":293186,"LEGALNAME":"NATIONAL MUSIC CENTER AND MUSEUM FOUNDATION","ALTNAME":"UNITED STATES HOLOCAUST MEMORIAL MUSEUM","WEBURL":"HTTP://WWW.USHMM.ORG"},"geometry":{"type":"Point","coordinates":[-77.03268853739414,38.88668873773371]}},{"type":"Feature","properties":{"OBJECTID":30,"ADDRESS":"801 K STREET NW","NAME":"HISTORICAL SOCIETY OF WASHINGTON DC","ADDRESS_ID":238956,"LEGALNAME":"Historical Society of Washington, D.C","ALTNAME":" ","WEBURL":"http://www.dchistory.org/"},"geometry":{"type":"Point","coordinates":[-77.02294505078932,38.90262956584554]}},{"type":"Feature","properties":{"OBJECTID":31,"ADDRESS":"1849 C STREET NW","NAME":"INTERIOR MUSEUM","ADDRESS_ID":293214,"LEGALNAME":"VICE PRESIDENTS RESIDENCE FOUNDATION","ALTNAME":"INTERIOR MUSEUM","WEBURL":"HTTP://WWW.DOI.GOV/INTERIORMUSEUM"},"geometry":{"type":"Point","coordinates":[-77.04260256434321,38.89445283458921]}},{"type":"Feature","properties":{"OBJECTID":32,"ADDRESS":"4155 LINNEAN AVENUE NW","NAME":"HILLWOOD MUSEUM & GARDENS","ADDRESS_ID":284839,"LEGALNAME":"SMITHSONIAN INSTITUTION, NATIONAL GALLERY OF ART","ALTNAME":"HILLWOOD MUSEUM & GARDENS","WEBURL":"WWW.HILLWOODMUSEUM.ORG"},"geometry":{"type":"Point","coordinates":[-77.0526196505072,38.94364171194315]}},{"type":"Feature","properties":{"OBJECTID":33,"ADDRESS":"1318 VERMONT AVENUE NW","NAME":"BETHUNE MEMORIAL MUSEUM","ADDRESS_ID":225385,"LEGALNAME":"NATIONAL MUSEUM OF WOMEN IN THE ARTS INC","ALTNAME":" ","WEBURL":"http://www.nps.gov/mamc/index.htm"},"geometry":{"type":"Point","coordinates":[-77.03086564182146,38.90817580546652]}},{"type":"Feature","properties":{"OBJECTID":34,"ADDRESS":"1500 MASSACHUSETTS AVENUE NW","NAME":"NATIONAL MUSEUM OF CATHOLIC ART AND LIBRARY","ADDRESS_ID":242324,"LEGALNAME":"KREEGER MUSEUM","ALTNAME":" ","WEBURL":"http://nmcal.org/nmcah_exhibition_in_washington.html"},"geometry":{"type":"Point","coordinates":[-77.03551120800971,38.90651019329394]}},{"type":"Feature","properties":{"OBJECTID":35,"ADDRESS":"1 MASSACHUSETTS AVENUE NW","NAME":"NATIONAL GUARD MEMORIAL MUSEUM","ADDRESS_ID":238009,"LEGALNAME":"CARL SCHMITT FOUNDATION INC","ALTNAME":" ","WEBURL":"HTTP://WWW.NGEF.ORG"},"geometry":{"type":"Point","coordinates":[-77.00956143652462,38.89812580681995]}},{"type":"Feature","properties":{"OBJECTID":36,"ADDRESS":"1811 R STREET NW","NAME":"NATIONAL MUSEUM OF AMERICAN JEWISH MILITARY HISTORY","ADDRESS_ID":243292,"LEGALNAME":"CITY TAVERN PRESERVATION FOUNDATION","ALTNAME":"JEWISH WAR VETERANS NATIONAL MEMORIAL MUSEUM ARCHIVES AND LIBRARY","WEBURL":"http://www.nmajmh.org/"},"geometry":{"type":"Point","coordinates":[-77.04211577477285,38.91282059721026]}},{"type":"Feature","properties":{"OBJECTID":37,"ADDRESS":"3900 HAREWOOD ROAD NE","NAME":"POPE JOHN PAUL II CULTURAL CENTER","ADDRESS_ID":288031,"LEGALNAME":"AMERICAN POETRY MUSEUM","ALTNAME":" ","WEBURL":"HTTP://WWW.JP2CC.ORG"},"geometry":{"type":"Point","coordinates":[-77.00466710351098,38.93776654366721]}},{"type":"Feature","properties":{"OBJECTID":38,"ADDRESS":"700 PENNSYLVANIA AVENUE NW","NAME":"NATIONAL ARCHIVES MUSEUM","ADDRESS_ID":293251,"LEGALNAME":"PHILLIPS COLLECTION","ALTNAME":"NATIONAL ARCHIVES MUSEUM","WEBURL":"https://www.archives.gov/dc-metro/washington/"},"geometry":{"type":"Point","coordinates":[-77.0228592459719,38.89285370583677]}},{"type":"Feature","properties":{"OBJECTID":39,"ADDRESS":"201 18TH STREET NW","NAME":"ART MUSEUM OF THE AMERICAS","ADDRESS_ID":294191,"LEGALNAME":"Art Museum of the Americas","ALTNAME":" ","WEBURL":"http://www.museum.oas.org/"},"geometry":{"type":"Point","coordinates":[-77.04147388756545,38.892799844291474]}},{"type":"Feature","properties":{"OBJECTID":40,"ADDRESS":"9 HILLYER COURT NW","NAME":"INTERNATIONAL ARTS & ARTISTS","ADDRESS_ID":279975,"LEGALNAME":"THE INTERNATIONAL SPY MUSEUM","ALTNAME":"INTERNATIONAL ARTS & ARTISTS","WEBURL":"WWW.ARTSANDARTISTS.ORG"},"geometry":{"type":"Point","coordinates":[-77.04730884101534,38.91222144699389]}},{"type":"Feature","properties":{"OBJECTID":41,"ADDRESS":"2 MASSACHUSETTS AVENUE NE","NAME":"NATIONAL POSTAL MUSEUM","ADDRESS_ID":293217,"LEGALNAME":"BEAD SOCIETY OF GREATER WASHINGTON","ALTNAME":"NATIONAL POSTAL MUSEUM","WEBURL":"HTTP://POSTALMUSEUM.SI.EDU"},"geometry":{"type":"Point","coordinates":[-77.00819124512859,38.8981463599396]}},{"type":"Feature","properties":{"OBJECTID":42,"ADDRESS":"1519 MONROE STREET NW","NAME":"POWHATAN MUSEUM","ADDRESS_ID":234557,"LEGALNAME":"AMERICAN UNIVERSITY MUSEUM","ALTNAME":" ","WEBURL":"http://www.powhatanmuseum.com/"},"geometry":{"type":"Point","coordinates":[-77.03550660261739,38.93243814726252]}},{"type":"Feature","properties":{"OBJECTID":43,"ADDRESS":"144 CONSTITUTION AVENUE NE","NAME":"SEWALL-BELMONT HOUSE AND MUSEUM","ADDRESS_ID":286201,"LEGALNAME":"AMERICAN MUSEUM OF PEACE INC","ALTNAME":" ","WEBURL":"HTTP://WWW.SEWALLBELMONT.ORG"},"geometry":{"type":"Point","coordinates":[-77.00375845550963,38.89219466787653]}},{"type":"Feature","properties":{"OBJECTID":44,"ADDRESS":"802 MASSACHUSETTS AVENUE NE","NAME":"SHOOK MUSEUM FOUNDATION","ADDRESS_ID":79669,"LEGALNAME":"GREENPEACE FUND","ALTNAME":" ","WEBURL":"SHOOKMUSEUM.ORG"},"geometry":{"type":"Point","coordinates":[-76.9944246526475,38.891834530779185]}},{"type":"Feature","properties":{"OBJECTID":45,"ADDRESS":"1400 CONSTITUTION AVENUE NW","NAME":"SMITHSONIAN INSTITUTION, NATIONAL MUSEUM OF NATURAL HISTORY","ADDRESS_ID":310702,"LEGALNAME":"B'NAI B'RITH KLUTZNICK MUSEUM","ALTNAME":"SMITHSONIAN INSTITUTION, NATIONAL MUSEUM OF NATURAL HISTORY","WEBURL":"http://www.mnh.si.edu/"},"geometry":{"type":"Point","coordinates":[-77.02591603234607,38.89121850995097]}},{"type":"Feature","properties":{"OBJECTID":46,"ADDRESS":"500 HOWARD PLACE NW","NAME":"HOWARD UNIVERSITY MUSEUM","ADDRESS_ID":243398,"LEGALNAME":"COLLECTONS STRIES AMRCN MSLIMS","ALTNAME":" ","WEBURL":"http://www.coas.howard.edu/msrc/museum.html"},"geometry":{"type":"Point","coordinates":[-77.0196991986925,38.922360224748935]}},{"type":"Feature","properties":{"OBJECTID":47,"ADDRESS":"8TH STREET NW AND F ST NW","NAME":"NATIONAL PORTRAIT GALLERY","ADDRESS_ID":294248,"LEGALNAME":"BOHEMIA ARTS","ALTNAME":"NATIONAL PORTRAIT GALLERY","WEBURL":"HTTP://WWW.NPG.SI.EDU"},"geometry":{"type":"Point","coordinates":[-77.02295571583119,38.89815890118559]}},{"type":"Feature","properties":{"OBJECTID":48,"ADDRESS":"14TH STREET NW AND CONSTITUTION AVENUE NW","NAME":"NATIONAL MUSEUM OF AFRICAN AMERICAN HISTORY AND CULTURE","ADDRESS_ID":903110,"LEGALNAME":"AMERICANS FOR BATTLEFIELD PRESERVATION","ALTNAME":"NATIONAL MUSEUM OF AFRICAN AMERICAN HISTORY AND CULTURE","WEBURL":"HTTP://WWW.NMAAHC.SI.EDU/"},"geometry":{"type":"Point","coordinates":[-77.03271597832732,38.89119983415094]}},{"type":"Feature","properties":{"OBJECTID":49,"ADDRESS":"4TH STREET SW AND INDEPENDENCE AVENUE SW","NAME":"NATIONAL MUSEUM OF AMERICAN INDIAN","ADDRESS_ID":294429,"LEGALNAME":"BLAIR HOUSE RESTORATION FUND","ALTNAME":" ","WEBURL":"WWW.NMAI.SI.EDU"},"geometry":{"type":"Point","coordinates":[-77.01672595283219,38.88826561652]}},{"type":"Feature","properties":{"OBJECTID":50,"ADDRESS":"6TH STREET SW AND INDEPENDENCE AVENUE SW","NAME":"NATIONAL AIR AND SPACE MUSEUM","ADDRESS_ID":301565,"LEGALNAME":"BETHUNE MEMORIAL MUSEUM","ALTNAME":"NATIONAL AIR AND SPACE MUSEUM","WEBURL":"HTTP://WWW.NASM.SI.EDU/"},"geometry":{"type":"Point","coordinates":[-77.01979999825605,38.888161175521944]}},{"type":"Feature","properties":{"OBJECTID":51,"ADDRESS":"7THB STREET AND INDEPENDENCE AVENUE SW","NAME":"HIRSHHORN MUSEUM AND SCULPTURE GARDEN","ADDRESS_ID":294428,"LEGALNAME":"D.C. OFFICE OF PUBLIC RECORDS AND ARCHIVES","ALTNAME":"HIRSHHORN MUSEUM AND SCULPTURE GARDEN","WEBURL":"HTTP://HIRSHHORN.SI.EDU/"},"geometry":{"type":"Point","coordinates":[-77.02294902891254,38.88843565656003]}},{"type":"Feature","properties":{"OBJECTID":52,"ADDRESS":"MADISON DRIVE NW AND 12TH STREET NW","NAME":"SMITHSONIAN INSTITUTION, NATIONAL MUSEUM OF AMERICAN HISTORY","ADDRESS_ID":293200,"LEGALNAME":null,"ALTNAME":"SMITHSONIAN INSTITUTION, NATIONAL MUSEUM OF AMERICAN HISTORY","WEBURL":"HTTP://AMERICANHISTORY.SI.EDU"},"geometry":{"type":"Point","coordinates":[-77.03005156534492,38.89123181993075]}},{"type":"Feature","properties":{"OBJECTID":53,"ADDRESS":"4TH STREET NW AND MADISON DRIVE NW","NAME":"NATIONAL GALLERY OF ART - EAST BUILDING","ADDRESS_ID":293209,"LEGALNAME":null,"ALTNAME":null,"WEBURL":"http://www.nga.gov/content/ngaweb/visit/maps-and-information/east-building.html"},"geometry":{"type":"Point","coordinates":[-77.01668919569053,38.89125721273486]}},{"type":"Feature","properties":{"OBJECTID":54,"ADDRESS":"4TH STREET NW AND MADISON DRIVE NW","NAME":"NATIONAL GALLERY OF ART - WEST BUILDING","ADDRESS_ID":293249,"LEGALNAME":null,"ALTNAME":null,"WEBURL":"http://www.nga.gov/content/ngaweb/visit/maps-and-information/west-building.html"},"geometry":{"type":"Point","coordinates":[-77.01989150273015,38.891313914429645]}},{"type":"Feature","properties":{"OBJECTID":55,"ADDRESS":"1000 JEFFERSON DRIVE SW","NAME":"SMITHSONIAN INSTITUTION - CASTLE","ADDRESS_ID":293187,"LEGALNAME":null,"ALTNAME":null,"WEBURL":"http://www.si.edu/Museums/smithsonian-institution-building"},"geometry":{"type":"Point","coordinates":[-77.02597189316775,38.88879577572046]}},{"type":"Feature","properties":{"OBJECTID":56,"ADDRESS":"1050 INDEPENDENCE AVENUE SW","NAME":"SACKLER GALLERY","ADDRESS_ID":293191,"LEGALNAME":"ARTHUR M. SACKLER GALLERY","ALTNAME":null,"WEBURL":"http://www.asia.si.edu/"},"geometry":{"type":"Point","coordinates":[-77.02645343758842,38.88796502751886]}},{"type":"Feature","properties":{"OBJECTID":57,"ADDRESS":"JEFFERSON DRIVE SW AND 12TH STREET SW","NAME":"FREER GALLERY","ADDRESS_ID":294417,"LEGALNAME":"FREER GALLERY OF ART","ALTNAME":null,"WEBURL":"http://www.asia.si.edu/"},"geometry":{"type":"Point","coordinates":[-77.02736845485786,38.8882746680144]}}]} \ No newline at end of file diff --git a/data/README.md b/data/README.md new file mode 100644 index 0000000..fb03d02 --- /dev/null +++ b/data/README.md @@ -0,0 +1,26 @@ +# Data used in demonstrations + + +## `zika_assembled_genomes.fasta` + +**Description** + +* [Fasta](https://en.wikipedia.org/wiki/FASTA_format) file. +* 110 Zika virus genomes +* Assembled from clinical and mosquito samples across 10 countries and territories. +* Followed by phylogenetic analysis to infer evolution of virus through Americas. + +For more information, see the paper [here](https://www.nature.com/nature/journal/v546/n7658/full/nature22402.html). + + +**Citation** + +``` +@article{metsky2017zika, + title={Zika virus evolution and spread in the Americas}, + author={Metsky, Hayden C and Matranga, Christian B and Wohl, Shirlee and Schaffner, Stephen F and Freije, Catherine A and Winnicki, Sarah M and West, Kendra and Qu, James and Baniecki, Mary Lynn and Gladden-Young, Adrianne and others}, + journal={Nature}, + year={2017}, + publisher={Nature Research} +} +``` diff --git a/data/bar.vl.json b/data/bar.vl.json new file mode 100644 index 0000000..92980e9 --- /dev/null +++ b/data/bar.vl.json @@ -0,0 +1 @@ +{"data":{"values":[{"a":"A","b":28},{"a":"B","b":55},{"a":"C","b":43},{"a":"D","b":91},{"a":"E","b":81},{"a":"F","b":53},{"a":"G","b":19},{"a":"H","b":87},{"a":"I","b":52}]},"description":"A simple bar chart with embedded data.","encoding":{"x":{"field":"a","type":"ordinal"},"y":{"field":"b","type":"quantitative"}},"mark":"bar"} \ No newline at end of file diff --git a/data/iris.csv b/data/iris.csv new file mode 100644 index 0000000..43ff582 --- /dev/null +++ b/data/iris.csv @@ -0,0 +1,151 @@ +sepal_length,sepal_width,petal_length,petal_width,species +5.1,3.5,1.4,0.2,se +4.9,3,1.4,0.2,setosa +4.7,3.2,1.3,0.2,setosa +4.6,3.1,1.5,0.2,setosa +5,3.6,1.4,0.2,setosa +5.4,3.9,1.7,0.4,setosa +4.6,3.4,1.4,0.3,setosa +5,3.4,1.5,0.2,setosa +4.4,2.9,1.4,0.2,setosa +4.9,3.1,1.5,0.1,setosa +5.4,3.7,1.5,0.2,setosa +4.8,3.4,1.6,0.2,setosa +4.8,3,1.4,0.1,setosa +4.3,3,1.1,0.1,setosa +5.8,4,1.2,0.2,setosa +5.7,4.4,1.5,0.4,setosa +5.4,3.9,1.3,0.4,setosa +5.1,3.5,1.4,0.3,setosa +5.7,3.8,1.7,0.3,setosa +5.1,3.8,1.5,0.3,setosa +5.4,3.4,1.7,0.2,setosa +5.1,3.7,1.5,0.4,setosa +4.6,3.6,1,0.2,setosa +5.1,3.3,1.7,0.5,setosa +4.8,3.4,1.9,0.2,setosa +5,3,1.6,0.2,setosa +5,3.4,1.6,0.4,setosa +5.2,3.5,1.5,0.2,setosa +5.2,3.4,1.4,0.2,setosa +4.7,3.2,1.6,0.2,setosa +4.8,3.1,1.6,0.2,setosa +5.4,3.4,1.5,0.4,setosa +5.2,4.1,1.5,0.1,setosa +5.5,4.2,1.4,0.2,setosa +4.9,3.1,1.5,0.1,setosa +5,3.2,1.2,0.2,setosa +5.5,3.5,1.3,0.2,setosa +4.9,3.1,1.5,0.1,setosa +4.4,3,1.3,0.2,setosa +5.1,3.4,1.5,0.2,setosa +5,3.5,1.3,0.3,setosa +4.5,2.3,1.3,0.3,setosa +4.4,3.2,1.3,0.2,setosa +5,3.5,1.6,0.6,setosa +5.1,3.8,1.9,0.4,setosa +4.8,3,1.4,0.3,setosa +5.1,3.8,1.6,0.2,setosa +4.6,3.2,1.4,0.2,setosa +5.3,3.7,1.5,0.2,setosa +5,3.3,1.4,0.2,setosa +7,3.2,4.7,1.4,versicolor +6.4,3.2,4.5,1.5,versicolor +6.9,3.1,4.9,1.5,versicolor +5.5,2.3,4,1.3,versicolor +6.5,2.8,4.6,1.5,versicolor +5.7,2.8,4.5,1.3,versicolor +6.3,3.3,4.7,1.6,versicolor +4.9,2.4,3.3,1,versicolor +6.6,2.9,4.6,1.3,versicolor +5.2,2.7,3.9,1.4,versicolor +5,2,3.5,1,versicolor +5.9,3,4.2,1.5,versicolor +6,2.2,4,1,versicolor +6.1,2.9,4.7,1.4,versicolor +5.6,2.9,3.6,1.3,versicolor +6.7,3.1,4.4,1.4,versicolor +5.6,3,4.5,1.5,versicolor +5.8,2.7,4.1,1,versicolor +6.2,2.2,4.5,1.5,versicolor +5.6,2.5,3.9,1.1,versicolor +5.9,3.2,4.8,1.8,versicolor +6.1,2.8,4,1.3,versicolor +6.3,2.5,4.9,1.5,versicolor +6.1,2.8,4.7,1.2,versicolor +6.4,2.9,4.3,1.3,versicolor +6.6,3,4.4,1.4,versicolor +6.8,2.8,4.8,1.4,versicolor +6.7,3,5,1.7,versicolor +6,2.9,4.5,1.5,versicolor +5.7,2.6,3.5,1,versicolor +5.5,2.4,3.8,1.1,versicolor +5.5,2.4,3.7,1,versicolor +5.8,2.7,3.9,1.2,versicolor +6,2.7,5.1,1.6,versicolor +5.4,3,4.5,1.5,versicolor +6,3.4,4.5,1.6,versicolor +6.7,3.1,4.7,1.5,versicolor +6.3,2.3,4.4,1.3,versicolor +5.6,3,4.1,1.3,versicolor +5.5,2.5,4,1.3,versicolor +5.5,2.6,4.4,1.2,versicolor +6.1,3,4.6,1.4,versicolor +5.8,2.6,4,1.2,versicolor +5,2.3,3.3,1,versicolor +5.6,2.7,4.2,1.3,versicolor +5.7,3,4.2,1.2,versicolor +5.7,2.9,4.2,1.3,versicolor +6.2,2.9,4.3,1.3,versicolor +5.1,2.5,3,1.1,versicolor +5.7,2.8,4.1,1.3,versicolor +6.3,3.3,6,2.5,virginica +5.8,2.7,5.1,1.9,virginica +7.1,3,5.9,2.1,virginica +6.3,2.9,5.6,1.8,virginica +6.5,3,5.8,2.2,virginica +7.6,3,6.6,2.1,virginica +4.9,2.5,4.5,1.7,virginica +7.3,2.9,6.3,1.8,virginica +6.7,2.5,5.8,1.8,virginica +7.2,3.6,6.1,2.5,virginica +6.5,3.2,5.1,2,virginica +6.4,2.7,5.3,1.9,virginica +6.8,3,5.5,2.1,virginica +5.7,2.5,5,2,virginica +5.8,2.8,5.1,2.4,virginica +6.4,3.2,5.3,2.3,virginica +6.5,3,5.5,1.8,virginica +7.7,3.8,6.7,2.2,virginica +7.7,2.6,6.9,2.3,virginica +6,2.2,5,1.5,virginica +6.9,3.2,5.7,2.3,virginica +5.6,2.8,4.9,2,virginica +7.7,2.8,6.7,2,virginica +6.3,2.7,4.9,1.8,virginica +6.7,3.3,5.7,2.1,virginica +7.2,3.2,6,1.8,virginica +6.2,2.8,4.8,1.8,virginica +6.1,3,4.9,1.8,virginica +6.4,2.8,5.6,2.1,virginica +7.2,3,5.8,1.6,virginica +7.4,2.8,6.1,1.9,virginica +7.9,3.8,6.4,2,virginica +6.4,2.8,5.6,2.2,virginica +6.3,2.8,5.1,1.5,virginica +6.1,2.6,5.6,1.4,virginica +7.7,3,6.1,2.3,virginica +6.3,3.4,5.6,2.4,virginica +6.4,3.1,5.5,1.8,virginica +6,3,4.8,1.8,virginica +6.9,3.1,5.4,2.1,virginica +6.7,3.1,5.6,2.4,virginica +6.9,3.1,5.1,2.3,virginica +5.8,2.7,5.1,1.9,virginica +6.8,3.2,5.9,2.3,virginica +6.7,3.3,5.7,2.5,virginica +6.7,3,5.2,2.3,virginica +6.3,2.5,5,1.9,virginica +6.5,3,5.2,2,virginica +6.2,3.4,5.4,2.3,virginica +5.9,3,5.1,1.8,virginica diff --git a/data/japan_meterological_agency_201707211555.json b/data/japan_meterological_agency_201707211555.json new file mode 100644 index 0000000..440a6fb --- /dev/null +++ b/data/japan_meterological_agency_201707211555.json @@ -0,0 +1 @@ +{"type": "FeatureCollection", "features": [{"geometry": {"type": "Point", "coordinates": [130.119, 34.967]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [140.446, 42.368]}, "type": "Feature", "properties": {"type": 1}}, {"geometry": {"type": "Point", "coordinates": [130.115, 34.838]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [130.064, 34.727]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [140.829, 42.568]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [140.777, 42.508]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [140.677, 42.437]}, "type": "Feature", "properties": {"type": 1}}, {"geometry": {"type": "Point", "coordinates": [129.987, 35.013]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [130.103, 35.144]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [129.958, 35.36]}, "type": "Feature", "properties": {"type": 1}}, {"geometry": {"type": "Point", "coordinates": [130.126, 34.962]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [140.202, 42.152]}, "type": "Feature", "properties": {"type": 1}}, {"geometry": {"type": "Point", "coordinates": [140.539, 42.373]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [140.589, 42.441]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [130.093, 34.883]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [140.504, 42.38]}, "type": "Feature", "properties": {"type": 1}}, {"geometry": {"type": "Point", "coordinates": [130.143, 34.834]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [130.064, 34.873]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [140.605, 42.478]}, "type": "Feature", "properties": {"type": 1}}, {"geometry": {"type": "Point", "coordinates": [140.481, 42.39]}, "type": "Feature", "properties": {"type": 1}}, {"geometry": {"type": "Point", "coordinates": [140.753, 42.543]}, "type": "Feature", "properties": {"type": 1}}, {"geometry": {"type": "Point", "coordinates": [130.117, 35.206]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [130.128, 34.917]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [130.148, 34.921]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [140.418, 42.319]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [129.993, 34.949]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [130.022, 34.952]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [140.637, 42.499]}, "type": "Feature", "properties": {"type": 1}}, {"geometry": {"type": "Point", "coordinates": [140.203, 42.15]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [140.375, 42.344]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [140.749, 42.615]}, "type": "Feature", "properties": {"type": 1}}, {"geometry": {"type": "Point", "coordinates": [129.976, 35.214]}, "type": "Feature", "properties": {"type": 1}}, {"geometry": {"type": "Point", "coordinates": [130.031, 34.87]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [140.524, 42.402]}, "type": "Feature", "properties": {"type": 1}}, {"geometry": {"type": "Point", "coordinates": [130.15, 34.865]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [124.928, 22.035]}, "type": "Feature", "properties": {"type": 1}}, {"geometry": {"type": "Point", "coordinates": [124.829, 22.113]}, "type": "Feature", "properties": {"type": 1}}, {"geometry": {"type": "Point", "coordinates": [124.877, 22.303]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [140.87, 42.587]}, "type": "Feature", "properties": {"type": 1}}, {"geometry": {"type": "Point", "coordinates": [140.868, 42.579]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [129.981, 34.943]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [130.052, 34.91]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [130.036, 34.957]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [130.135, 34.891]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [130.0, 34.962]}, "type": "Feature", "properties": {"type": 1}}, {"geometry": {"type": "Point", "coordinates": [140.618, 42.414]}, "type": "Feature", "properties": {"type": 1}}, {"geometry": {"type": "Point", "coordinates": [130.088, 34.896]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [140.626, 42.492]}, "type": "Feature", "properties": {"type": 1}}, {"geometry": {"type": "Point", "coordinates": [140.649, 42.417]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [140.533, 42.304]}, "type": "Feature", "properties": {"type": 1}}, {"geometry": {"type": "Point", "coordinates": [130.036, 34.814]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [130.041, 34.966]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [130.149, 34.853]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [140.586, 42.234]}, "type": "Feature", "properties": {"type": 1}}, {"geometry": {"type": "Point", "coordinates": [140.571, 42.239]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [129.947, 34.931]}, "type": "Feature", "properties": {"type": 0}}, {"geometry": {"type": "Point", "coordinates": [140.695, 42.514]}, "type": "Feature", "properties": {"type": 1}}]} \ No newline at end of file diff --git a/data/zika_assembled_genomes.fasta b/data/zika_assembled_genomes.fasta new file mode 100644 index 0000000..970e0fd --- /dev/null +++ b/data/zika_assembled_genomes.fasta @@ -0,0 +1,2002 @@ +>EU545988.1|Micronesia|2007-06 +------------------------------------------------------------ +-----------------------------------------------ATGAAAAACCCCA +AAGAAGAAATCCGGAGGATCCGGATTGTCAATATGCTAAAACGCGGAGTAGCCCGTGTGA +GCCCCTTTGGGGGCTTGAAGAGGCTGCCAGCCGGACTTCTGCTGGGTCATGGGCCCATCA +GGATGGTCTTGGCGATACTAGCCTTTTTGAGATTCACGGCAATCAAGCCATCACTGGGTC +TCATCAATAGATGGGGTTCAGTGGGGAAAAAAGAGGCTATGGAAATAATAAAGAAGTTCA +AGAAAGATCTGGCTGCCATGCTGAGAATAATCAATGCTAGGAAGGAGAAGAAGAGACGAG +GCACAGATACTAGTGTCGGAATTGTTGGCCTCCTGCTGACCACAGCCATGGCAGTGGAGG +TCACTAGACGTGGGAGTGCATACTATATGTACTTGGACAGAAGCGATGCTGGGGAGGCCA +TATCTTTTCCAACCACACTGGGGATGAACAAGTGTTACATACAGATCATGGATCTTGGAC +ACATGTGTGATGCCACCATGAGCTATGAATGCCCTATGTTGGATGAGGGGGTAGAACCAG +ATGACGTCGATTGTTGGTGCAACACGACATCAACTTGGGTTGTGTACGGAACCTGCCACC +ACAAAAAAGGTGAAGCACGGAGATCTAGAAGAGCTGTGACGCTCCCCTCCCATTCCACTA +GGAAGCTGCAAACGCGGTCGCAGACCTGGTTGGAATCAAGAGAATATACAAAGCACCTGA +TTAGAGTCGAAAATTGGATATTCAGGAACCCTGGCTTCGCGTTAGCAGCAGCTGCCATCG +CCTGGCTTTTGGGAAGTTCAACGAGCCAAAAAGTCATATACTTGGTCATGATACTGCTGA +TTGCCCCGGCATACAGCATCAGGTGCATAGGAGTCAGCAATAGGGACTTTGTGGAAGGTA +TGTCAGGTGGGACTTGGGTTGATGTTGTCTTGGAACATGGAGGTTGTGTTACCGTAATGG +CACAGGACAAACCGGCTGTCGACATAGAGCTGGTTACAACAACAGTCAGCAACATGGCGG +AGGTAAGATCCTATTGCTATGAGGCATCAATATCGGACATGGCTTCGGACAGCCGCTGCC +CAACACAAGGTGAAGCCTACCTTGACAAGCAGTCAGACACTCAATATGTCTGCAAAAGAA +CGTTAGTGGACAGAGGCTGGGGAAATGGATGTGGACTTTTTGGCAAAGGGAGCCTGGTGA +CATGCGCTAAGTTTGCATGCTCCAAGAAAATGACCGGGAAGAGCATCCAGCCAGAGAATC +TGGAGTACCGGATAATGCTGTCAGTTCATGGCTCCCAGCACAGTGGGATGATCGTTAATG +ACACAGGACATGAAACTGATGAGAATAGAGCGAAGGTTGAGATAACGCCCAATTCACCAA +GAGCTGAAGCCACCCTGGGGGGTTTTGGAAGCCTAGGACTTGATTGTGAACCGAGGACAG +GCCTTGACTTTTCAGATTTGTATTACTTGACTATGAATAACAAGCACTGGTTGGTTCACA +AGGAGTGGTTCCACGACATTCCATTACCTTGGCATGCTGGGGCAGACACCGGAACTCCAC +ATTGGAACAACAAAGAAGCATTGGTAGAGTTCAAGGACGCACATGCCAAAAGGCAAACTG +TCGTGGTTCTAGGGAGTCAAGAAGGAGCAGTTCACACGGCCCTTGCTGGAGCTCTGGAGG +CTGAGATGGATGGTGCAAAGGGAAGGCTGTCCTCTGGCCACTTGAAATGTCGCCTGAAAA +TGGATAAACTTAGATTGAAGGGCGTGTCATACTCCTTGTGTACCGCAGCGTTCACATTCA +CCAAGATCCCGGCTGAAACACTGCACGGGACAGTCACAGTGGAGGTACAGTACGCAGGGA +CAGATGGACCCTGCAAGGTTCCAGCTCAGATGGCGGTGGACATGCAAACTCTGACCCCAG +TTGGGAGGCTGATAACCGCTAACCCTGTAATCACTGAAAGCACTGAGAACTCTAAGATGA +TGCTGGAACTTGATCCACCATTTGGGGACTCTTACATTGTCATAGGAGTCGGGGAGAAGA +AGATCACCCATCACTGGCACAGGAGTGGCAGCACCATTGGAAAAGCATTTGAAGCCACTG +TGAGAGGTGCCAAGAGAATGGCAGTCTTGGGAGACACAGCCTGGGATTTTGGATCAGTTG +GAGGTGCTCTCAACTCATTGGGCAAGGGCATCCATCAAATTTTTGGAGCAGCTTTCAAAT +CATTGTTTGGAGGAATGTCCTGGTTCTCACAAATTCTCATTGGAACGTTGCTGGTGTGGT +TGGGTCTGAATACAAAGAATGGATCTATTTCCCTTACGTGCTTGGCCTTAGGGGGAGTGT +TGATCTTTTTATCCACAGCCGTCTCTGCTGATGTGGGGTGCTCGGTGGACTTCTCAAAGA +AGGAAACGAGATGCGGTACGGGGGTGTTCGTCTATAACGACGTTGATGCCTGGAGGGACA +GGTACAAGTACCATCCTGACTCCCCTCGTAGATTAGCAGCAGCAGTCAAGCAAGCCTGGG +RAGATGGGATCTGTGGGATCTCCTCTGTTTCAAGAATGGAAAACATCATGTGGAGATCAG +TAGAAGGGGAGCTCAACGCAATCCTGGAAGAGAATGGAGTTCAACTGACGGTCGTTGTGG +GATCTGTAAAAAACCCCATGTGGAGAGGTCCACAGAGATTGCCCGTGCCTGTGAACGAGC +TGCCCCACGGCTGGAAGGCTTGGGGGAAATCGTACTTCGTCAGAGCAGCAAAGACAAATA +ACAGCTTTGTCGTGGATGGTGACACACTGAAGGAATGCCCACTCAAACATAGAGCATGGA +ACAGCTTTCTTGTGGAGGATCATGGGTTCGGGGTATTTCACACTAGTGTCTGGCTCAAGG +TTAGAGAAGATTATTCATTAGAGTGTGATCCAGCCGTTATTGGAACAGCTGCTAAGGGAA +AGGAGGCTGTGCACAGTGATCTAGGCTACTGGATTGAGAGTGAGAAGAATGACACATGGA +GGCTGAAGAGGGCCCACCTGATCGAGATGAAAACATGTGAATGGCCAAAGTCCCACACAT +TGTGGACAGATGGAATAGAAGAAAGTGATCTGATCATACCCAAGTCTTTAGCTGGGCCAC +TCAGCCATCACAACACCAGAGAGGGCTACAGGACTCAAATGAAAGGGCCATGGCACAGTG +AAGAGCTTGAAATTCGGTTTGAGGAATGCCCAGGCACTAAGGTCCACGTGGAGGAAACAT +GTGGAACAAGAGGACCATCTCTGAGATCAACCACTGCAAGCGGAAGGGTGATCGAGGAAT +GGTGCTGCAGGGAATGCACAATGCCCCCACTGTCGTTCCGGGCTAAAGATGGCTGTTGGT +ATGGAATGGAGATAAGGCCCAGGAAAGAACCAGAAAGTAACTTAGTAAGGTCAATGGTGA +CTGCAGGATCAACTGATCACATGGATCACTTCTCCCTTGGAGTGCTTGTGATTCTGCTCA +TGGTGCAGGAAGGGCTGAAGAAGAGAATGACCACAAAGATCATCATAAGCACATCAATGG +CAGTGCTGGTAGCTATGATCCTGGGAGGATTTTCAATGAGTGACCTGGCCAAGCTTGCAA +TTTTGATGGGTGCCACCTTTGCGGAAATGAACACTGGAGGAGATGTAGCTCATCTGGCGC +TGATAGCGGCATTCAAAGTCAGACCTGCGTTGCTGGTATCTTTCATCTTCAGAGCTAATT +GGACACCCCGTGAGAGCATGCTGCTGGCCCTGGCTTCGTGTCTTCTGCAAACTGCGATCT +CCGCCTTGGAAGGCGACCTGATGGTTCTCATCAATGGTTTTGCTTTGGCCTGGTTGGCAA +TACGAGCGATGGTTGTTCCACGCACTGACAACATCACCTTGGCAATCCTGACTGCGCTGA +CACCACTGGCCCGGGGCACGCTGCTTGTGGCGTGGAGAGCAGGCCTTGCTACTTGCGGGG +GGTTCATGCTTCTCTCTCTGAAGGGGAAGGGCAGTGTGAAGAAGAACCTACCATTTGTCA +TGGCCTTGGGACTCACCGCTGTGAGGCTGGTCGACCCCATCAACGTGGTGGGACTGCTGT +TGCTCACAAGGAGTGGGAAGCGGAGCTGGCCCCCTAGTGAAGTACTCACAGCTGTTGGTC +TGATATGCGCGTTGGCCGGAGGGTTCGCCAAGGCGGATATAGAGATGGCTGGGCCCATGG +CCGCGGTCGGTCTGCTAATTGTCAGTTACGTGGTCTCAGGAAAGAGTGTGGACATGTACA +TTGAAAGAGCAGGTGACATCACATGGGAAAAAGATGCGGAAGTCACTGGAAACAGTCCCC +GGCTCGATGTGGCACTGGATGAGAGTGGTGATTTCTCCCTAGTGGAGGATGATGGTCCCC +CCATGAGAGAGATCATACTCAAAGTGGTCCTGATGACCATCTGTGGCATGAACCCAATAG +CCATACCCTTTGCAGCTGGAGCGTGGTACGTGTATGTGAAGACTGGAAAAAGGAGTGGTG +CTCTATGGGATGTGCCTGCTCCCAAGGAAGTAAAAAAGGGGGAGACCACAGATGGAGTGT +ACAGAGTAATGACTCGTAGACTGCTTGGTTCAACACAAGTTGGAGTGGGAGTCATGCAAG +AGGGGGTCTTCCACACTATGTGGCACGTCACAAAAGGATCCGCGCTGAGAAGCGGTGAAG +GGAGACTTGATCCATACTGGGGAGATGTCAAGCAGGATCTGGTGTCATATTGTGGTCCGT +GGAAGCTAGACGCCGCCTGGGACGGGCACAGCGAGGTGCAGCTCTTGGCCGTGCCCCCCG +GAGAGAGAGCGAGGAACATCCAGACTCCGCCCGGAATATTTAAGACAAAGGATGGGGACA +TTGGAGCAGTTGCGTTGGACTACCCAGCAGGAACTTCAGGATCTCCAATCCTAGACAAGT +GTGGGAGAGTGATAGGACTCTATGGTAATGGGGTCGTGATAAAAAATGGGAGTTATGTTA +GTGCCATCACCCAAGGGAGGAGGGAGGAAGAGACTCCTGTTGAGTGCTTCGAGCCTTCGA +TGTTGAAGAAGAAGCAGCTAACTGTCTTAGACCTGCATCCTGGAGCTGGGAAAACCAGGA +GAGTTCTTCCTGAAATAGTCCGTGAAGCCATAAAAACAAGACTCCGTACTGTGATCTTAG +CTCCAACCAGGGTTGTCGCTGCTGAAATGGAGGAAGCCCTTAGAGGGCTTCCAGTGCGTT +ATATGACAACAGCAGTCAATGTCACCCATTCTGGGACAGAAATTGTTGACTTAATGTGCC +ATGCCACCTTCACTTCACGTCTACTACAACCAATCAGAGTCCCCAACTATAATCTGTATA +TTATGGACGAGGCCCACTTCACAGATCCCTCAAGTATAGCAGCAAGAGGATACATTTCAA +CAAGGGTTGAGATGGGCGAGGCGGCCGCCATCTTCATGACCGCCACCCCACCAGGAACCC +GTGACGCATTCCCGGACTCCAACTCACCAATTATGGACACCGAAGTGGAAGTCCCAGAGA +GAGCCTGGAGCTCAGGCTTTGATTGGGTGACGGATCATTCTGGAAAAACAGTTTGGTTTG +TTCCAAGCGTGAGGAACGGCAATGAGATCGCAGCTTGTCTGACAAAGGCTGGAAAACGGG +TCATACAGCTCAGCAGAAAGACTTTTGAGACAGAGTTCCTGAAAACAAAAAATCAAGAGT +GGGACTTCGTCGTGACAACTGACATTTCAGAGATGGGCGCCAACTTTAAAGCTGACCGTG +TCATAGATTCCAGGAGATGCCTAAAGCCGGTCATACTTGATGGCGAGAGAGTCATTCTGG +CTGGACCCATGCCTGTCACACATGCCAGCGCTGCCCAGAGGAGGGGGCGCATAGGCAGGA +ATCCCAACAAACCTGGAGATGAGTATCTGTATGGAGGTGGGTGCGCAGAGACTGATGAAG +ACCATGCACACTGGCTTGAAGCAAGAATGCTTCTTGACAACATTTACCTCCAAGATGGCC +TCATAGCCTCGCTCTATCGACCTGAGGCCGACAAAGTAGCAGCTATTGAGGGAGAGTTCA +AGCTTAGGACGGAGCAAAGGAAGACCTTTGTGGAACTCATGAAAAGAGGAGATCTTCCTG +TTTGGCTGGCCTATCAGGTTGCATCTGCCGGAATAACCTACACAGATAGAAAATGGTGCT +TTGATGGCACGACCAACAACACCATAATGGAAGACAGTGTGCCGGCAGAGGTGTGGACCA +GATACGGAGAGAAAAGAGTGCTCAAACCAAGGTGGATGGACGCCAGAGTTTGTTCAGATC +ATGCGGCCCTGAAGTCATTCAAAGAGTTTGCCGCTGGGAAAAGAGGAGYGGCCTTTGGAG +TGATGGAAGCCCTGGGAACATTGCCGGGACACATGACAGAGAGATTCCAGGAAGCCATTG +ACAACCTCGCTGTGCTCATGCGGGCAGAGACTGGAAGCAGGCCTTACGAAGCCGCGGCGG +CCCAATTGCCGGAGACCTTAGAGACCATCATGCTTTTGGGGTTGCTGGGAACAGTCTCGC +TGGGAATCTTTTTCGTCTTGATGCGGAATAAGGGCATCGGGAAGATGGGCTTTGGAATGG +TGACTCTTGGGGCCAGCGCATGGCTTATGTGGCTCTCGGAAATTGAGCCAGCCAGAATTG +CATGTGTCCTCATTGTTGTGTTCCTATTGCTGGTGGTGCTCATACCTGAGCCAGAAAAGC +AAAGATCTCCCCAGGACAACCAAATGGCAATCATCATCATGATAGCAGTGGGTCTTCTGG +GTTTGATTACCGCCAATGAACTTGGATGGTTGGAAAGAACAAAGAGTGACCTAAGCCATC +TAATGGGAAGGAGAGAGGAGGGGGCAACCATAGGATTCTCAATGGACATTGACCTGCGGC +CAGCCTCAGCTTGGGCTATCTATGCTGCTCTGACAACTTTCATCACCCCAGCCGTCCAAC +ATGCGGTGACCACTTCATACAACAACTACTCCTTAATGGCGATGGCCACGCAAGCTGGAG +TGTTGTTTGGTATGGGTAAAGGGATGCCATTCTACGCATGGGACTTTGGAGTCCCGCTGC +TAATGATGGGTTGCTACTCACAATTAACACCCCTGACCCTAATAGTGGCCATCATTTTGC +TCGTGGCGCACTACATGTACTTGATCCCAGGGCTGCAGGCAGCAGCTGCGCGTGCTGCCC +AGAAGAGAACGGCAGCTGGCATCATGAAGAACCCTGTTGTGGATGGAATAGTGGTGACTG +ACATTGACACAATGACAATTGACCACCGAGTGGAGAAAAAGATGGGACAGGTGCTACTCA +TAGCAGTAGCCGTCTCCAGCGCCATACTGTCGCGGACCGCCTGGGGGTGGGGGGAGGCTG +GGGCCCTGATCACAGCTGCAACTTCCACTTTGTGGGAAGGCTCTCCGAACAAGTACTGGA +ACTCCTCCACAGCCACTTCACTGTGTAACATTTTTAGGGGAAGTTACTTGGCTGGAGCTT +CTCTAATCTACACAGTAACAAGAAACGCTGGCTTGGTCAAGAGACGTGGGGGTGGAACGG +GAGAGACCCTGGGAGAGAAATGGAAGGCCCGCCTGAACCAGATGTCGGCCCTAGAGTTCT +ACTCCTACAAAAAGTCAGGCATCACCGAGGTGTGCAGAGAAGAGGCCCGCCGCGCCCTCA +AGGACGGTGTGGCAACAGGAGGCCATGCTGTGTCCCGAGGAAGTGCAAAGCTTAGATGGT +TGGTGGAGAGAGGATACCTGCAGCCCTATGGAAAGGTCATTGATCTTGGATGTGGCAGAG +GGGGCTGGAGTTACTACGCCGCCACCATCCGCAAAGTTCAAGAAGTGAAAGGATACACAA +AAGGAGGCCCTGGTCATGAAGAACCCATGTTGGTGCAAAGCTATGGGTGGAACATAGTCC +GTCTTAAGAGTGGGGTGGACGTCTTTCATATGGCGGCTGAGCCGTGTGACACTTTGCTGT +GTGATATAGGTGAGTCATCATCTAGTCCTGAAGTGGAAGAAGCACGGACGCTCAGAGTCC +TTTCCATGGTGGGGGATTGGCTTGAAAAAAGACCAGGAGCCTTTTGTATAAAAGTGTTGT +GCCCATACACCAGCACTATGATGGAAACCCTGGAGCGACTGCAGCGTAGGTATGGGGGAG +GACTGGTCAGAGTGCCACTCTCCCGCAACTCTACACATGAGATGTACTGGGTCTCTGGAG +CGAAAAGCAACACCATAAAAAGTGTGTCCACCACGAGCCAGCTCCTCTTGGGGCGCATGG +ACGGGCCCAGGAGGCCAGTGAAATATGAGGAGGATGTGAATCTCGGCTCCGGCACGCGGG +CTGTGGTAAGCTGCGCTGAAGCTCCCAACATGAAGATCATTGGTAACCGCATTGAGAGGA +TCCGCAGTGAGCACGCGGAAACGTGGTTCTTTGACGAGAACCACCCATATAGGACATGGG +CTTACCATGGAAGCTATGAGGCCCCTACACAAGGGTCAGCGTCCTCTCTAATAAACGGGG +TTGTCAGGCTCCTGTCAAAACCCTGGGATGTGGTGACTGGAGTCACAGGAATAGCCATGA +CCGACACCACACCGTATGGTCAGCAAAGAGTTTTCAAGGAAAAAGTGGACACTAGGGTGC +CAGACCCCCAAGAAGGCACTCGTCAGGTTATGAGCATGGTCTCTTCCTGGTTATGGAAAG +AGCTAGGCAAACACAAACGGCCACGAGTCTGTACCAAAGAAGAGTTCATCAACAAGGTTC +GTAGCAATGCAGCATTAGGGGCAATATTTGAAGAGGAAAAAGAGTGGAAGACTGCAGTGG +AAGCTGTGAACGATCCAAGGTTCTGGGCTCTAGTGGACAAGGAAAGAGAGCACCACCTGA +GAGGAGAGTGTCAGAGCTGTGTGTACAACATGATGGGAAAAAGAGAAAAGAAACAAGGGG +AATTTGGAAAGGCCAAGGGCAGCCGCGCCATCTGGTATATGTGGCTAGGGGCTAGATTCC +TGGAGTTCGAAGCCCTTGGATTCTTGAACGAGGATCACTGGATGGGGAGAGAGAATTCAG +GAGGTGGTGTTGAAGGGCTGGGATTACAAAGACTCGGATATGTCCTAGAAGAGATGAGTC +GCATACCAGGAGGAAGGATGTATGCTGATGACACAGCTGGCTGGGACACCCGCATCAGCA +GGTTTGATCTGGAGAATGAAGCTCTAATCACCAACCAAATGGAGAAAGGGCACAGGGCCT +TGGCATTGGCCATAATCAAGTACACATACCAAAACAAAGTGGTAAAGGTCCTCAGACCAG +CTGAAAAAGGGAAGACAGTTATGGACATTATTTCAAGACAAGACCAAAGGGGGAGCGGAC +AAGTTGTCACTTACGCTCTTAATACATTCACCAACCTGGTGGTGCAGCTCATTCGGAATA +TGGAGGCTGAGGAAGTTCTAGAGATGCAAGACTTGTGGCTGCTGCGGAGGTCAGAGAAAG +TGACCAACTGGTTGCAGAGCAACGGATGGGATAGGCTCAAACGAATGGCAGTCAGTGGAG +ATGATTGCGTTGTGAAACCAATTGATGATAGGTTTGCACATGCCCTCAGGTTCTTGAATG +ATATGGGAAAAGTCAGGAAGGACACACAAGAGTGGAAACCCTCAACTGGATGGGACAATT +GGGAAGAAGTTCCGTTTTGCTCCCACCACTTCAACAAGCTCCATCTCAAGGACGGGAGGT +CCATTGTGGTTCCCTGCCGCCACCAAGATGAACTGATTGGCCGAGCCCGCGTCTCACCAG +GGGCGGGATGGAGCATCCGGGAGACTGCTTGCCTAGCAAAATCATATGCGCAAATGTGGC +AGCTCCTTTATTTCCACAGAAGGGACCTCCGACTGATGGCCAATGCCATTTGTTCATCTG +TGCCAGTTGACTGGGTTCCAACTGGGAGAACTACCTGGTCAATCCATGGAAAGGGAGAAT +GGATGACCACTGAAGACATGCTTGTGGTGTGGAACAGAGTGTGGATTGAGGAGAACGACC +ACATGGAAGACAAGACCCCAGTTACGAAATGGACAGACATTCCCTATTTGGGAAAAAGGG +AAGACTTGTGGTGTGGATCTCTCATAGGGCACAGACCGCGCACTACCTGGGCTGAGAACA +TCAAAAACACAGTCAACATGATGCGCAGGATCATAGGTGATGAAGAAAAGTACATGGACT +ACCTATCCACCCAAGTTCGCTACTTGGGTGAAGAAGGGTCCACACCCGGAGTGTTGTAA- +------------------------------------------------------------ +------------------------------------------------------------ +------------------------------------------------------------ +------------------------------------------------------------ +------------------------------------------------------------ +------------------------------------------------------------ +------------------------------------------------------------ +-------- +>JN860885.1|Cambodia|2010 +------------------------------------------------------------ +-----------------------------------------------ATGAAAAACCCAA +AGAAGAAATCCGGAGGATTCCGGATTGTCAATATGCTAAAACGCGGAGTAGCCCGTGTGA +GCCCCTTTGGGGGCTTGAAGAGGCTGCCAGCCGGACTTCTGCTGGGTCATGGGCCCATCA +GGATGGTCTTGGCGATTCTAGCCTTTTTGAGATTCACGGCAATCAAGCCATCACTGGGTC +TCATCAATAGATGGGGTTCAGTGGGGAAAAAAGAGGCTATGGAAATAATAAAGAAGTTTA +AGAAAGATCTGGCTGCCATGCTGAGAATAATCAATGCTAGGAAGGAGAAGAAGAGACGAG +GCACAGATACTAGTGTCGGAATTGTTGGCCTCCTGCTGACCACAGCCATGGCAGTGGAGG +TCACTAGACGTGGGAATGCATACTATATGTACTTGGACAGAAGCGATGCTGGGGAGGCCA +TATCTTTTCCAACCACAATGGGGATGAATAAGTGTTATATACAGATCATGGATCTTGGAC +ACATGTGTGATGCCACCATGAGCTATGAATGCCCTATGCTGGATGAGGGGGTAGAACCAG +ATGACGTCGATTGTTGGTGCAACACGACGTCAACTTGGGTTGTGTACGGAACCTGCCACC +ACAAAAAAGGTGAAGCACGGAGATCTAGAAGAGCTGTGACGCTCCCCTCCCATTCCACTA +GGAAGCTGCAAACGCGGTCGCAGACCTGGTTGGAATCAAGAGAATACACAAAGCACCTGA +TTAGAGTCGAAAATTGGATATTCAGGAACCCTGGCTTCGCGTTAGCAGCAGCTGCCATCG +CTTGGCTTTTGGGAAGCTCAACGAGCCAAAAAGTCATATACTTGGTCATGATACTGCTGA +TTGCCCCGGCATACAGCATCAGGTGCATAGGAGTCAGCAATAGGGACTTTGTGGAAGGTA +TGTCAGGTGGGACTTGGGTTGATGTTGTCTTGGAACATGGAGGTTGTGTTACCGTAATGG +CACAGGACAAACCGACTGTCGACATAGAGCTGGTTACAACAACAGTCAGCAACATGGCGG +AGGTAAGATCCTACTGCTATGAGGCATCAATATCGGACATGGCTTCGGACAGCCGCTGCC +CAACACAAGGTGAAGCCTACCTTGACAAGCAATCAGACACTCAATATGTCTGCAAAAGAA +CGTTAGTGGACAGAGGCTGGGGAAATGGATGTGGACTTTTTGGCAAAGGGAGCCTGGTGA +CATGCGCTAAGTTTGCTTGCTCTAAGAAAATGACCGGGAAGAGCATCCAGCCAGAGAATC +TGGAGTACCGGATAATGCTGTCAGTTCATGGCTCCCAGCACAGTGGGATGATCGTTAATG +ATACAGGACATGAAACTGATGAGAATAGAGCGAAGGTTGAGATAACGCCCAATTCACCAA +GAGCCGAAGCCACCCTGGGGGGTTTTGGAAGCCTAGGACTTGATTGTGAACCGAGGACAG +GCCTTGACTTTTCAGATTTGTATTACTTGACTATGAATAACAAGCACTGGTTGGTTCACA +AGGAGTGGTTCCACGACATTCCATTACCTTGGCATGCTGGGGCAGACACCGGAACTCCAC +ACTGGAACAACAAAGAAGCACTGGTAGAGTTCAAGGACGCACATGCCAAAAGGCAGACTG +TCGTGGTTCTAGGGAGTCAAGAAGGAGCAGTTCACACGGCCCTTGCTGGAGCTCTGGAGG +CTGAGATGGATGGTGCAAAGGGAAGGCTGTCCTCTGGCCACTTGAAATGTCGCCTGAAAA +TGGATAAACTTAGATTGAAGGGCGTGTCATACTCCTTGTGTACCGCAGCGTTCACATTCA +CTAAGATCCCGGCTGAAACACTGCACGGGACAGTCACAGTGGAGGTACAGTACGCAGGGA +CAGATGGACCTTGCAAGGTTCCAGCTCAGATGGCGGTGGACATGCAAACTCTGACCCCAG +TTGGGAGGTTGATAACCGCTAACCCTGTAATCACTGAAAGCACTGAGAACTCCAAGATGA +TGCTGGAACTGGATCCACCATTTGGGGACTCTTACATTGTCATAGGAGTCGGGGAAAAGA +AGATCACCCACCACTGGCACAGGAGTGGCAGCACCATTGGAAAAGCATTTGAAGCCACTG +TGAGAGGTGCCAAGAGAATGGCAGTCTTGGGAGACACAGCCTGGGACTTTGGATCAGTTG +GGGGTGCTCTCAACTCACTGGGCAAGGGCATCCATCAAATTTTTGGAGCAGCTTTCAAAT +CATTGTTTGGAGGAATGTCCTGGTTCTCACAAATTCTCATTGGAACGTTGCTGGTGTGGT +TGGGTCTGAATACAAAGAATGGATCTATTTCCCTTATGTGCTTGGCCTTAGGGGGAGTGT +TGATCTTCTTATCCACAGCCGTCTCTGCTGATGTGGGGTGCTCGGTGGACTTCTCAAAGA +AGGAAACGAGATGCGGTACAGGGGTGTTCGTCTATAACGACGTTGAAGCTTGGAGGGACA +GGTACAAGTACCATCCTGACTCCCCTCGTAGATTGGCAGCAGCAGTCAAGCAAGCCTGGG +AAGATGGGATCTGTGGGATCTCCTCTGTTTCAAGAATGGAAAACATCATGTGGAGATCAG +TAGAAGGGGAGCTCAACGCAATCCTGGAAGAGAATGGAGTTCAACTGACGGTCGTTGTGG +GATCTGTAAAAAACCCCATGTGGAGAGGTCCACAGAGATTGCCCGTGCCTGTGAACGAGC +TGCCCCATGGCTGGAAGGCTTGGGGGAAATCGTACTTCGTCAGGGCAGCAAAGACAAATA +ACAGCTTTGTCGTGGATGGTGACACACTGAAGGAATGCCCACTCAAACATAGAGCATGGA +ACAGCTTTCTTGTGGAGGATCATGGGTTCGGGGTATTTCACACTAGTGTCTGGCTCAAGG +TTAGAGAAGATTATTCATTAGAGTGTGATCCAGCCGTCATTGGAACAGCCGCTAAGGGAA +AGGAGGCTGTGCACAGTGATCTAGGCTACTGGATTGAGAGTGAGAAGAACGACACATGGA +GGCTGAAGAGGGCCCACCTGATCGAGATGAAAACATGTGAATGGCCAAAGTCCCACACAT +TGTGGACAGATGGAATAGAAGAAAGTGATCTGATCATACCCAAGTCTTTAGCTGGGCCAC +TCAGCCATCACAACACCAGAGAGGGCTACAGGACCCAAATGAAAGGGCCATGGCATAGTG +AAGAGCTTGAAATTCGGTTTGAGGAATGCCCAGGCACTAAGGTCCACGTGGAGGAAACAT +GTGGAACAAGAGGACCATCTCTGAGATCAACCACTGCAAGCGGAAGGGTGATCGAGGAAT +GGTGCTGCAGGGAGTGCACAATGCCCCCACTGTCGTTCCGGGCTAAAGATGGTTGTTGGT +ATGGAATGGAGATAAGGCCCAGGAAAGAACCAGAAAGTAACTTAGTAAGGTCAATGGTGA +CTGCAGGATCAACTGATCACATGGATCACTTCTCCCTTGGAGTGCTTGTGATTCTGCTCA +TGGTACAGGAAGGGCTAAAGAAGAGAATGACCACAAAGATCATCATAAGCACATCAATGG +CAGTGCTGGTAGCTATGATCCTGGGAGGATTTTCAATGAGTGACCTGGCTAAGCTTGCAA +TTTTGATGGGTGCCACCTTCGCGGAAATGAACACTGGAGGAGATGTTGCTCATCTGGCGC +TGATAGCGGCATTCAAAGTCAGACCTGCGTTGCTGGTATCTTTCATTTTCAGAGCTAATT +GGACACCCCGTGAGAGCATGCTGCTGGCCTTGGCCTCGTGTCTTCTGCAAACTGCGATCT +CCGCCTTGGAAGGCGACCTGATGGTTCCCATCAATGGTTTTGCTTTGGCCTGGTTGGCAA +TACGAGCGATGGTTGTTCCACGCACTGACAACATCACCTTGGCAATCCTGGCTGCTCTGA +CACCACTGGCCCGGGGCACACTGCTTGTGGCGTGGAGAGCAGGCCTTGCTACTTGCGGGG +GGTTCATGCTCCTTTCTCTGAAGGGGAAAGGCAGTGTGAAGAAGAACTTACCATTTGTCA +TGGCCCTGGGACTAACCGCTGTGAGGCTGGTCGACCCCATCAACGTGGTGGGACTGCTGT +TGCTCACAAGGAGTGGGAAGCGGAGCTGGCCCCCTAGTGAAGTACTCACAGCTGTTGGCC +TGATATGCGCATTGGCTGGAGGGTTCGCCAAGGCGGATATAGAGATGGCTGGGCCCATGG +CCGCGGTCGGTCTGCTAATTGTCAGTTACGTGGTCTCAGGAAAGAGTGTGGACATGTACA +TTGAAAGAGCAGGTGACATCACATGGGAAAAAGATGCGGAAGTCACTGGAAACAGTCCCC +GGCTCGATGTGGCACTAGATGAGAGTGGTGATTTCTCCCTAGTGGAGGATGATGGTCCCC +CCATGAGAGAGATCATACTCAAAGTGGTCCTGATGNCCATCTGTGGCATGAACCCAATAG +CCATACCCTTTGCAGCTGGAGCGTGGTACGTGTATGTGAAGACTGGAAAAAGGAGTGGTG +CTCTATGGGATGTGCCTGCTCCCAAGGAAGTAAAAAAGGGGGAGACCACAGATGGAGTGT +ACAGAGTAATGACTCGTAGACTGCTAGGTTCAACACAAGTTGGAGTGGGAGTCATGCAAG +AGGGGGTCTTCCACACTATGTGGCACGTCACAAAAGGATCCGCGCTGAGAAGCGGTGAAG +GGAGACTTGATCCATACTGGGGAGATGTCAAGCAGGATCTGGTGTCATACTGTGGTCCAT +GGAAGCTAGATGCCGCCTGGGACGGGCACAGCGAGGTGCAGCTCTTGGCCGTGCCCCCCG +GAGAGAGAGCGAGGAACATCCAGACTCTGCCCGGAATATTTAAGACAAAGGATGGGGACA +TTGGAGCAGTTGCGCTGGACTACCCAGCAGGAACTTCAGGATCTCCAATCCTAGATAAGT +GTGGGAGAGTGATAGGACTCTATGGTAATGGGGTCGTGATCAAAAATGGGAGTTACGTTA +GTGCCATCACCCAAGGGAGGAGGGAGGAAGAGACTCCTGTTGAGTGCTTCGAGCCTTCGA +TGCTGAAGAAGAAGCAGCTAACTGTCTTAGACTTGCATCCTGGAGCTGGGAAAACCAGGA +GAGTTCTTCCTGAAATAGTCCGTGAAGCCATAAAAACAAGACTCCGCACTGTGATCTTAG +CTCCAACCAGGGTTGTCGCTGCTGAAATGGAGGAAGCCCTTAGAGGGCTTCCAGTGCGTT +ATATGACAACAGCAGTCAATGTCACCCATTCTGGGACAGAAATCGTTGACTTAATGTGCC +ATGCCACCTTCACTTCACGTCTACTACAGCCAATCAGAGTCCCCAACTATAATCTGTATA +TTATGGATGAGGCCCACTTCACAGATCCCTCAAGTATAGCAGCAAGAGGATACATTTCAA +CAAGGGTTGAGATGGGCGAGGCGGCTGCCATCTTCATGACTGCCACGCCACCAGGAACCC +GTGACGCATTCCCGGACTCCAACTCACCAATTATGGACACCGAAGTGGAAGTCCCAGAGA +GAGCCTGGAGCTCAGGCTTTGATTGGGTGACGGATCATTCTGGAAAAACAGTTTGGTTTG +TTCCAAGCGTGAGGAATGGCAATGAGATCGCAGCTTGTCTGACAAAGGCTGGAAAACGGG +TCATACAGCTCAGCAGAAAGACTTTTGAGACAGAGTTCCAGAAAACAAAACATCAAGAGT +GGGACTTCGTCGTGACAACTGACATTTCAGAGATGGGCGCCAACTTTAAAGCTGACCGTG +TCATAGATTCCAGGAGATGCCTAAAGCCGGTCATACTTGATGGCGAGAGAGTCATTCTGG +CTGGACCCATGCCTGTCACACATGCCAGCGCTGCCCAGAGGAGGGGGCGCATAGGCAGGA +ACCCCAACAAACCTGGAGATGAGTATCTGTATGGAGGTGGGTGCGCAGAGACTGATGAAG +ACCATGCACACTGGCTTGAAGCAAGAATGCTTCTTGACAACATTTACCTCCAAGATGGCC +TCATAGCCTCGCTCTATCGACCTGAGGCCGACAAAGTAGCAGCTATTGAGGGAGAGTTCA +AGCTTAGGACGGAGCAAAGGAAGACCTTTGTGGAACTCATGAAAAGAGGAGATCTTCCTG +TTTGGCTGGCCTATCAGGTTGCATCTGCCGGAATAACCTACACAGATAGAAGATGGTGCT +TTGATGGCACGACCAACAACACCATAATGGAAGACAGTGTGCCGGCAGAGGTGTGGACCA +GATACGGAGAGAAAAGAGTGCTCAAACCGAGGTGGATGGACGCCAGAGTTTGTTCAGATC +ATGCGGCCCTGAAGTCATTCAAAGAGTTTGCCGCTGGGAAAAGAGGAGCGGCCTTTGGAG +TGATGGAAGCCCTGGGAACACTGCCAGGACATATGACAGAGAGATTCCAGGAGGCCATTG +ACAACCTCGCTGTGCTCATGCGGGCAGAGACTGGAAGCAGGCCCTACAAAGCCGCGGCGG +CCCAATTACCGGAGACCCTAGAGACTATCATGCTTTTGGGGTTGCTGGGAACAGTCTCGC +TGGGAATCTTTTTCGTCTTGATGCGGAACAAGGGCATAGGGAAGATGGGCTTTGGAATGG +TGACTCTTGGGGCCAGCGCATGGCTTATGTGGCTCTCGGAAATTGAGCCAGCCAGAATTG +CATGTGTCCTCATTGTTGTGTTCCTATTGCTGGTGGTGCTCATACCTGAGCCAGAAAAGC +AAAGATCTCCCCAGGACAACCAAATGGCAATCATCATCATGGTAGCAGTGGGTCTTCTGG +GCTTGATTACCGCCAATGAACTCGGATGGTTGGAGAGAACAAAGAGTGACCTAAGCCATC +TAATGGGAAGGAGAGAGGAGGGGGCAACNATAGGATTCTCAATGGACATTGACCTGCGGC +CAGCCTCAGCTTGGGCTATCTATGCTGCTCTGACAACTTTCATTACCCCAGCCGTCCAAC +ATGCAGTGACCACTTCATACAACAACTACTCCTTAATGGCGATGGCCACGCAAGCTGGAG +TGTTGTTCGGTATGGGTAAAGGGATGCCATTCTATGCATGGGACTTTGGAGTCCCGCTGC +TAATGATAGGTTGCTACTCACAATTAACACCCCTGACCCTAATAGTGGCCATCATTTTGC +TCGTGGCGCACTACATGTACTTGATCCCAGGGCTGCAGGCAGCAGCTGCGCGTGCTGCCC +AGAAGAGAACGGCAGCTGGCATCATGAAGAACCCTGTTGTGGATGGAATAGTGGTGACTG +ACATTGACACAATGACAATTGACCCCCAAGTGGAGAAAAAGATGGGACAGGTGCTACTCA +TAGCAGTAGCTGTCTCCAGCGCCATACTGTCGCGGACCGCCTGGGGGTGGGGTGAGGCTG +GGGCCCTGATCACAGCTGCAACTTCCACTTTGTGGGAGGGCTCTCCGAACAAGTACTGGA +ACTCCTCCACAGCCACCTCACTGTGTAACATTTTTAGGGGAAGCTACTTGGCTGGAGCTT +CTCTAATCTACACAGTAACAAGAAACGCTGGCTTGGTCAAGAGACGTGGGGGTGGAACGG +GAGAGACCCTGGGAGAGAAATGGAAGGCCCGCCTGAACCAGATGTCGGCCCTGGAGTTCT +ACTCCTACAAAAAGTCAGGCATCACCGAGGTGTGCAGAGAAGAGGCCCGCCGCGCCCTCA +AGGACGGTGTGGCAACGGGAGGCCACGCTGTGTCCCGAGGAAGTGCAAAGCTGAGATGGT +TGGTGGAGAGGGGATACCTGCAGCCCTATGGAAAGGTCATTGATCTTGGATGTGGCAGAG +GGGGCTGGAGTTACTATGCCGCCACCATCCGCAAAGTTCAAGAAGTGAAAGGATACACAA +AAGGAGGCCCTGGTCATGAAGAACCCATGTTGGTGCAAAGCTATGGGTGGAACATAGTCC +GTCTTAAGAGTGGGGTGGACGTCTTTCATATGGCGGCTGAGCCGTGTGACACGTTGCTGT +GTGATATAGGTGAGTCATCATCTAGTCCTGAAGTGGAAGAAGCACGGACGCTCAGAGTCC +TCTCCATGGTGGGGGATTGGCTTGAAAAAAGACCAGGAGCCTTTTGTATAAAAGTGTTGT +GCCCATACACCAGCACTATGATGGAAACCCTGGAGCGACTGCAGCGTAGGTATGGGGGAG +GACTGGTCAGAGTGCCACTCTCCCGCAACTCTACACATGAGATGTACTGGGTCTCTGGAG +CGAAAAGCAACACCATAAAAAGTGTGTCCACCACGAGCCAGCTCCTTTTGGGGCGCATGG +ACGGGCCCAGGAGGCCAGTGAAATATGAAGAGGATGTGAATCTCGGCTCTGGCACGCGGG +CTGTGGTAAGCTGCGCTGAAGCTCCCAACATGAAGATCATTGGTAACCGCATTGAGAGGA +TCCGCAGTGAGCACGCGGAAACGTGGTTCTTTGACGAGAACCACCCATATAGGACATGGG +CTTACCATGGAAGCTACGAGGCCCCCACACAAGGGTCAGCGTCCTCTCTAATAAACGGGG +TTGTCAGGCTCCTGTCAAAACCCTGGGATGTGGTGACTGGAGTCACAGGAATAGCCATGA +CCGACACCACACCGTATGGTCAGCAAAGAGTTTTCAAGGAAAAAGTGGACACTAGGGTGC +CAGACCCCCAAGAAGGCACTCGTCAGGTTATGAGCATGGTCTCTTCCTGGTTGTGGAAAG +AGTTAGGCAAACACAAACGGCCACGAGTCTGTACCAAAGAAGAGTTCATCAACAAGGTTC +GTAGCAACGCAGCATTAGGGGCAATATTTGAAGAGGAAAAAGAGTGGAAGACTGCAGTGG +AAGCTGTGAACGATCCAAGGTTCTGGGCTCTAGTGGACAAGGAAAGAGAGCACCACCTGA +GAGGAGAGTGCCAGAGCTGTGTGTACAACATGATGGGAAAAAGAGAAAAGAAACAAGGGG +AATTTGGAAAGGCCAAGGGCAGCCGCGCCATCTGGTACATGTGGCTAGGGGCTAGATTTC +TAGAGTTCGAAGCCCTTGGATTCTTGAACGAGGATCACTGGATGGGGAGAGAGAATTCAG +GAGGTGGTGTTGAAGGGCTAGGATTACAAAGACTCGGATATGTCTTAGAAGAGATGAGTC +GCATACCAGGAGGAAGGATGTATGCAGATGATACTGCTGGCTGGGACACCCGCATCAGCA +GGTTTGATCTGGAGAATGAAGCTCTAATCACCAACCAAATGGAGAAAGGGCACAGGGCCT +TGGCATTGGCCATAATCAAGTACACATACCAAAACAAAGTGGTAAAGGTCCTTAGACCAG +CTGAAAAAGGGAAGACAGTTATGGACATTATTTCAAGACAAGACCAAAGGGGGAGCGGAC +AAGTTGTCACTTACGCTCTTAATACATTTACCAACCTAGTGGTGCAGCTCATTCGGAATA +TGGAGGCTGAGGAAGTTCTAGAGATGCAAGACTTGTGGCTGCTGCGGAGGTCAGAGAAAG +TGACCAACTGGTTGCAGAGCAATGGATGGGATAGGCTCAAACGAATGGCAGTCAGTGGAG +ATGATTGCGTTGTGAAACCAATTGATGATAGGTTTGCACATGCTCTCAGGTTCTTGAATG +ATATGGGAAAAGTTAGGAAGGACACACAAGAGTGGAAGCCCTCAACTGGATGGGACAACT +GGGAAGAAGTTCCGTTTTGCTCCCACCACTTCAACAAGCTCCATCTCAAGGACGGGAGGT +CCATTGTGGTTCCCTGCCGCCACCAAGATGAACTGATTGGCCGAGCTCGCGTCTCACCGG +GGGCGGGATGGAGCATCCGGGAGACTGCTTGCCTAGCAAAATCATATGCGCAAATGTGGC +AGCTCCTTTATTTCCACAGAAGGGACCTCCGACTGATGGCCAATGCCATTTGTTCATCTG +TGCCAGTTGACTGGGTTCCAACTGGGAGAACTACCTGGTCAATCCATGGAAAGGGAGAAT +GGATGACCACTGAAGACATGCTTGTGGTGTGGAACAGAGTGTGGATTGAGGAGAACGACC +ACATGGAAGACAAGACCCCAGTTACGAAATGGACAGACATTCCCTATTTGGGAAAAAGGG +AAGACTTGTGGTGTGGGTCTCTCATAGGGCACAGACCGCGCACCACCTGGGCTGAGAACA +TTAAAAACACAGTCAACATGATGCGTAGGATCATAGGTGATGAAGAAAAGTACGTGGACT +ACCTATCCACCCAAGTTCGCTACTTGGGCGAAGAAGGGTCCACACCTGGAGTGCTA---- +------------------------------------------------------------ +------------------------------------------------------------ +------------------------------------------------------------ +------------------------------------------------------------ +------------------------------------------------------------ +------------------------------------------------------------ +------------------------------------------------------------ +-------- +>KJ776791.2|French_Polynesia|2013-11-28 +AGTTGTTGATCTGTGTGAATCAGACTGCGACAGTTCGAGTTTGAAGCGAAAGCTAGCAAC +AGTATCAACAGGTTTTATTTTGGATTTGGAAACGAGAGTTTCTGGTCATGAAAAACCCAA +AAAAGAAATCCGGAGGATTCCGGATTGTCAATATGCTAAAACGCGGAGTAGCCCGTGTGA +GCCCCTTTGGGGGCTTGAAGAGGCTGCCAGCCGGACTTCTGCTGGGTCATGGGCCCATCA +GGATGGTCTTGGCGATTCTAGCCTTTTTGAGATTCACGGCAATCAAGCCATCACTGGGTC +TCATCAATAGATGGGGTTCAGTGGGGAAAAAAGAGGCTATGGAAATAATAAAGAAGTTCA +AGAAAGATCTGGCTGCCATGCTGAGAATAATCAATGCTAGGAAGGAGAAGAAGAGACGAG +GCGCAGATACTAGTGTCGGAATTGTTGGCCTCCTGCTGACCACAGCTATGGCAGCGGAGG +TCACTAGACGTGGGAGTGCATACTATATGTACTTGGACAGAAACGACGCTGGGGAGGCCA +TATCTTTTCCAACCACATTGGGGATGAATAAGTGTTATATACAGATCATGGATCTTGGAC +ACATGTGTGATGCCACCATGAGCTATGAATGCCCTATGCTGGATGAGGGGGTGGAACCAG +ATGACGTCGATTGTTGGTGCAACACGACGTCAACTTGGGTTGTGTACGGAACCTGCCATC +ACAAAAAAGGTGAAGCACGGAGATCTAGAAGAGCTGTGACGCTCCCCTCCCATTCCACTA +GGAAGCTGCAAACGCGGTCGCAAACCTGGTTGGAATCAAGAGAATACACAAAGCACTTGA +TTAGAGTCGAAAATTGGATATTCAGGAACCCTGGCTTCGCGTTAGCAGCAGCTGCCATCG +CTTGGCTTTTGGGAAGCTCAACGAGCCAAAAAGTCATATACTTGGTCATGATACTGCTGA +TTGCCCCGGCATACAGCATCAGGTGCATAGGAGTCAGCAATAGGGACTTTGTGGAAGGTA +TGTCAGGTGGGACTTGGGTTGATGTTGTCTTGGAACATGGAGGTTGTGTCACCGTAATGG +CACAGGACAAACCGACTGTCGACATAGAGCTGGTTACAACAACAGTCAGCAACATGGCGG +AGGTAAGATCCTACTGCTATGAGGCATCAATATCGGACATGGCTTCGGACAGCCGCTGCC +CAACACAAGGTGAAGCCTACCTTGACAAGCAATCAGACACTCAATATGTCTGCAAAAGAA +CGTTAGTGGACAGAGGCTGGGGAAATGGATGTGGACTTTTTGGCAAAGGGAGCCTGGTGA +CATGCGCTAAGTTTGCATGCTCCAAGAAAATGACCGGGAAGAGCATCCAGCCAGAGAATC +TGGAGTACCGGATAATGCTGTCAGTTCATGGCTCCCAGCACAGTGGGATGATCGTTAATG +ACACAGGACATGAAACTGATGAGAATAGAGCGAAGGTTGAGATAACGCCCAATTCACCAA +GAGCCGAAGCCACCCTGGGGGGTTTTGGAAGCCTAGGACTTGATTGTGAACCGAGGACAG +GCCTTGACTTTTCAGATTTGTATTACTTGACTATGAATAACAAGCACTGGTTGGTTCACA +AGGAGTGGTTCCACGACATTCCATTACCTTGGCACGCTGGGGCAGACACCGGAACTCCAC +ACTGGAACAACAAAGAAGCACTGGTAGAGTTCAAGGACGCACATGCCAAAAGGCAAACTG +TCGTGGTTCTAGGGAGTCAAGAAGGAGCAGTTCACACGGCCCTTGCTGGAGCTCTGGAGG +CTGAGATGGATGGTGCAAAGGGAAGGCTGTCCTCTGGCCACTTGAAATGTCGCCTGAAAA +TGGATAAACTTAGATTGAAGGGCGTGTCATACTCCTTGTGTACCGCAGCGTTCACATTCA +CCAAGATCCCGGCTGAAACACTGCACGGGACAGTCACAGTGGAGGTACAGTACGCAGGGA +CAGATGGACCTTGCAAGGTTCCAGCTCAGATGGCGGTGGACATGCAAACTCTGACCCCAG +TTGGGAGGTTGATAACCGCTAACCCCGTAATCACTGAAAGCACTGAGAACTCTAAGATGA +TGCTGGAACTTGATCCACCATTTGGGGACTCTTACATTGTCATAGGAGTCGGGGAGAAGA +AGATCACCCACCACTGGCACAGGAGTGGCAGCACCATTGGAAAAGCATTTGAAGCCACTG +TGAGAGGTGCCAAGAGAATGGCAGTCTTGGGAGACACAGCCTGGGACTTTGGATCAGTTG +GAGGCGCTCTCAACTCATTGGGCAAGGGCATCCATCAAATTTTTGGAGCAGCTTTCAAAT +CATTGTTTGGAGGAATGTCCTGGTTCTCACAAATTCTCATTGGAACGTTGCTGATGTGGT +TGGGTCTGAACACAAAGAATGGATCTATTTCCCTTATGTGCTTGGCCTTAGGGGGAGTGT +TGATCTTCTTATCCACAGCTGTCTCTGCTGATGTGGGGTGCTCGGTGGACTTCTCAAAGA +AGGAGACGAGATGCGGTACAGGGGTGTTCGTCTATAACGACGTTGAAGCCTGGAGGGACA +GGTACAAGTACCATCCTGACTCCCCCCGTAGATTGGCAGCAGCAGTCAAGCAAGCCTGGG +AAGATGGTATCTGTGGGATCTCCTCTGTTTCAAGAATGGAAAACATCATGTGGAGATCAG +TAGAAGGGGAGCTCAACGCAATCCTGGAAGAGAATGGAGTTCAACTGACGGTCGTTGTGG +GATCTGTAAAAAACCCCATGTGGAGAGGTCCACAGAGATTGCCCGTGCCTGTGAACGAGC +TGCCCCACGGCTGGAAGGCTTGGGGGAAATCGTACTTCGTCAGAGCAGCAAAGACAAATA +ACAGCTTTGTCGTGGATGGTGACACACTGAAGGAATGCCCACTCAAACATAGAGCATGGA +ACAGCTTTCTTGTGGAGGATCATGGGTTCGGGGTATTTCACACTAGTGTCTGGCTCAAGG +TTAGAGAAGATTATTCATTAGAGTGTGATCCAGCCGTTATTGGAACAGCTGTTAAGGGAA +AGGAGGCTGTACACAGTGATCTAGGCTACTGGATTGAGAGTGAGAAGAATGACACATGGA +GGCTGAAGAGGGCCCATCTGATCGAGATGAAAACATGTGAATGGCCAAAGTCCCACACAT +TGTGGACAGATGGAATAGAAGAGAGTGATCTGATCATACCCAAGTCTTTAGCTGGGCCAC +TCAGCCATCACAATACCAGAGAGGGCTACAGGACCCAAATGAAAGGGCCATGGCACAGTG +AAGAGCTTGAAATTCGGTTTGAGGAATGCCCAGGCACTAAGGTCCACGTGGAGGAAACAT +GTGGAACAAGAGGACCATCTCTGAGATCAACCACTGCAAGCGGAAGGGTGATCGAGGAAT +GGTGCTGCAGGGAGTGCACAATGCCCCCACTGTCGTTCCGGGCTAAAGATGGCTGTTGGT +ATGGAATGGAGATAAGGCCCAGGAAAGAACCAGAAAGTAACTTAGTAAGGTCAATGGTGA +CTGCAGGATCAACTGATCACATGGATCACTTCTCCCTTGGAGTGCTTGTGATTCTGCTCA +TGGTGCAGGAAGGGCTGAAGAAGAGAATGACCACAAAGATCATCATAAGCACATCGATGG +CAGTGCTGGTAGCTATGATCCTGGGAGGATTTTCAATGAGTGACCTGGCTAAGCTTGCAA +TTTTGATGGGTGCCACCTTCGCGGAAATGAACACTGGAGGAGATGTAGCTCATCTGGCGC +TGATAGCGGCATTCAAAGTCAGACCAGCGTTGCTGGTATCTTTCATCTTCAGAGCTAATT +GGACACCCCGTGAAAGCATGCTGCTGGCCTTGGCCTCGTGTCTTTTGCAAACTGCGATCT +CCGCCTTGGAAGGCGACCTGATGGTTCTCATCAATGGTTTTGCTTTGGCCTGGTTGGCAA +TACGAGCGATGGTTGTTCCACGCACTGATAACATCACCTTGGCAATCCTGGCTGCTCTGA +CACCACTGGCCCGGGGCACACTGCTTGTGGCGTGGAGAGCAGGCCTTGCTACTTGCGGGG +GGTTTATGCTCCTCTCTCTGAAGGGAAAAGGCAGTGTGAAGAAGAACTTACCATTTGTCA +TGGCCCTGGGACTAACCGCTGTGAGGCTGGTCGACCCCATCAACGTGGTGGGACTGCTGT +TGCTCACAAGGAGTGGGAAGCGGAGCTGGCCCCCTAGCGAAGTACTCACAGCTGTTGGCC +TGATATGCGCATTGGCTGGAGGGTTCGCCAAGGCAGATATAGAGATGGCTGGGCCCATGG +CCGCGGTCGGTCTGCTAATTGTCAGTTACGTGGTCTCAGGAAAGAGTGTGGACATGTACA +TTGAAAGAGCAGGTGACATCACATGGGAAAAAGATGCGGAAGTCACTGGAAACAGTCCCC +GGCTCGATGTGGCGCTAGATGAGAGTGGTGATTTCTCCCTGGTGGAGGATGACGGTCCCC +CCATGAGAGAGATCATACTCAAGGTGGTCCTGATGACCATCTGTGGCATGAACCCAATAG +CCATACCCTTTGCAGCTGGAGCGTGGTACGTATACGTGAAGACTGGAAAAAGGAGTGGTG +CTCTATGGGATGTGCCTGCTCCCAAGGAAGTAAAAAAGGGGGAGACCACAGATGGAGTGT +ACAGAGTAATGACTCGTAGACTGCTAGGTTCAACACAAGTTGGAGTGGGAGTTATGCAAG +AGGGGGTCTTTCACACTATGTGGCACGTCACAAAAGGATCCGCGCTGAGAAGCGGTGAAG +GGAGACTTGATCCATACTGGGGAGATGTCAAGCAGGATCTGGTGTCATACTGTGGTCCAT +GGAAGCTAGATGCCGCCTGGGACGGGCACAGCGAGGTGCAGCTCTTGGCCGTGCCCCCCG +GAGAGAGAGCGAGGAACATCCAGACTCTGCCCGGAATATTTAAGACAAAGGATGGGGACA +TTGGAGCGGTTGCGCTGGATTACCCAGCAGGAACTTCAGGATCTCCAATCCTAGACAAGT +GTGGGAGAGTGATAGGACTTTATGGCAATGGGGTCGTGATCAAAAATGGGAGTTATGTTA +GTGCCATCACCCAAGGGAGGAGGGAGGAAGAGACTCCTGTTGAGTGCTTCGAGCCTTCGA +TGCTGAAGAAGAAGCAGCTAACTGTCTTAGACTTGCATCCTGGAGCTGGGAAAACCAGGA +GAGTTCTTCCTGAAATAGTCCGTGAAGCCATAAAAACAAGACTCCGTACTGTGATCTTAG +CTCCAACCAGGGTTGTCGCTGCTGAAATGGAGGAAGCCCTTAGAGGGCTTCCAGTGCGTT +ATATGACAACAGCAGTCAATGTCACCCACTCTGGAACAGAAATCGTCGACTTAATGTGCC +ATGCCACCTTCACTTCACGTCTACTACAGCCAATCAGAGTCCCCAACTATAATCTGTATA +TTATGGATGAGGCCCACTTCACAGATCCCTCAAGTATAGCAGCAAGAGGATACATTTCAA +CAAGGGTTGAGATGGGCGAGGCGGCTGCCATCTTCATGACCGCCACGCCACCAGGAACCC +GTGACGCATTTCCGGACTCCAACTCACCAATTATGGACACCGAAGTGGAAGTCCCAGAGA +GAGCCTGGAGCTCAGGCTTTGATTGGGTGACGGATCATTCTGGAAAAACAGTTTGGTTTG +TTCCAAGCGTGAGGAACGGCAATGAGATCGCAGCTTGTCTGACAAAGGCTGGAAAACGGG +TCATACAGCTCAGCAGAAAGACTTTTGAGACAGAGTTCCAGAAAACAAAACATCAAGAGT +GGGACTTTGTCGTGACAACTGACATTTCAGAGATGGGCGCCAACTTTAAAGCTGACCGTG +TCATAGATTCCAGGAGATGCCTAAAGCCGGTCATACTTGATGGCGAGAGAGTCATTCTGG +CTGGACCCATGCCTGTCACACATGCCAGCGCTGCCCAGAGGAGGGGGCGCATAGGCAGGA +ATCCCAACAAACCTGGAGATGAGTATCTGTATGGAGGTGGGTGCGCAGAGACTGACGAAG +ACCATGCACACTGGCTTGAAGCAAGAATGCTCCTTGACAATATTTACCTCCAAGATGGCC +TCATAGCCTCGCTCTATCGACCTGAGGCCGACAAAGTAGCAGCCATTGAGGGAGAGTTCA +AGCTTAGGACGGAGCAAAGGAAGACCTTTGTGGAACTCATGAAAAGAGGAGATCTTCCTG +TTTGGCTGGCCTATCAGGTTGCATCTGCCGGAATAACCTACACAGATAGAAGATGGTGCT +TTGATGGCACGACCAACAACACCATAATGGAAGACAGTGTGCCGGCAGAGGTGTGGACCA +GACACGGAGAGAAAAGAGTGCTCAAACCGAGGTGGATGGACGCCAGAGTTTGTTCAGATC +ATGCGGCCCTGAAGTCATTCAAGGAGTTTGCCGCTGGGAAAAGAGGAGCGGCTTTTGGAG +TGATGGAAGCCCTGGGAACACTGCCAGGACACATGACAGAGAGATTCCAGGAAGCCATTG +ACAACCTCGCTGTGCTCATGCGGGCAGAGACTGGAAGCAGGCCTTACAAAGCCGCGGCGG +CCCAATTGCCGGAGACCCTAGAGACCATTATGCTTTTGGGGTTGCTGGGAACAGTCTCGC +TGGGAATCTTTTTCGTCTTGATGAGGAACAAGGGCATAGGGAAGATGGGCTTTGGAATGG +TGACTCTTGGGGCCAGCGCATGGCTCATGTGGCTCTCGGAAATTGAGCCAGCCAGAATTG +CATGTGTCCTCATTGTTGTGTTCCTATTGCTGGTGGTGCTCATACCTGAGCCAGAAAAGC +AAAGATCTCCCCAGGACAACCAAATGGCAATCATCATCATGGTAGCAGTAGGTCTTCTGG +GCTTGATTACCGCCAATGAACTCGGATGGTTGGAGAGAACAAAGAGTGACCTAAGCCATC +TAATGGGAAGGAGAGAGGAGGGGGCAACCATAGGATTCTCAATGGACATTGACCTGCGGC +CAGCCTCAGCTTGGGCCATCTATGCTGCCTTGACAACTTTCATTACCCCAGCCGTCCAAC +ATGCAGTGACCACTTCATACAACAACTACTCCTTAATGGCGATGGCCACGCAAGCTGGAG +TGTTGTTTGGTATGGGCAAAGGGATGCCATTCTACGCATGGGACTTTGGAGTCCCGCTGC +TAATGATAGGTTGCTACTCACAATTAACACCCCTGACCCTAATAGTGGCCATCATTTTGC +TCGTGGCGCACTACATGTACTTGATCCCAGGGCTGCAGGCAGCAGCTGCGCGTGCTGCCC +AGAAGAGAACGGCAGCTGGCATCATGAAGAACCCTGTTGTGGATGGAATAGTGGTGACTG +ACATTGACACAATGACAATTGACCCCCAAGTGGAGAAAAAGATGGGACAGGTGCTACTCA +TAGCAGTAGCCGTCTCCAGCGCCATACTGTCGCGGACCGCCTGGGGGTGGGGGGAGGCTG +GGGCCCTGATCACAGCGGCAACTTCCACTTTGTGGGAAGGCTCTCCGAACAAGTACTGGA +ACTCCTCTACAGCCACTTCACTGTGTAACATTTTTAGGGGAAGTTACTTGGCTGGAGCTT +CTCTAATCTACACAGTAACAAGAAACGCTGGCTTGGTCAAGAGACGTGGGGGTGGAACAG +GAGAGACCCTGGGAGAGAAATGGAAGGCCCGCTTGAACCAGATGTCGGCCCTGGAGTTCT +ACTCCTACAAAAAGTCAGGCATCACCGAGGTGTGCAGAGAAGAGGCCCGCCGCGCCCTCA +AGGACGGTGTGGCAACGGGAGGCCATGCTGTGTCCCGAGGAAGTGCAAAGCTGAGATGGT +TGGTGGAGCGGGGATACCTGCAGCCCTATGGAAAGGTCATTGATCTTGGATGTGGCAGAG +GGGGCTGGAGTTACTACGCCGCCACCATCCGCAAAGTTCAAGAAGTGAAAGGATACACAA +AAGGAGGCCCTGGTCATGAAGAACCCATGTTGGTGCAAAGCTATGGGTGGAACATAGTCC +GTCTTAAGAGTGGGGTGGACGTCTTTCATATGGCGGCTGAGCCGTGTGACACGTTGCTGT +GTGACATAGGTGAGTCATCATCTAGTCCTGAAGTGGAAGAAGCACGGACGCTCAGAGTCC +TCTCCATGGTGGGGGATTGGCTTGAAAAAAGACCAGGAGCCTTTTGTATAAAAGTGTTGT +GCCCATACACCAGCACTATGATGGAAACCCTGGAGCGACTGCAGCGTAGGTATGGGGGAG +GACTGGTCAGAGTGCCACTCTCCCGCAACTCTACACATGAGATGTACTGGGTCTCTGGAG +CGAAAAGCAACACCATAAAAAGTGTGTCCACCACGAGCCAGCTCCTCTTGGGGCGCATGG +ACGGGCCCAGGAGGCCAGTGAAATATGAGGAGGATGTGAATCTCGGCTCTGGCACGCGGG +CTGTGGTAAGCTGCGCTGAAGCTCCCAACATGAAGATCATTGGTAACCGCATTGAAAGGA +TCCGCAGTGAGCACGCGGAAACGTGGTTCTTTGACGAGAACCACCCATATAGGACATGGG +CTTACCATGGAAGCTATGAGGCCCCCACACAAGGGTCAGCGTCCTCTCTAATAAACGGGG +TTGTCAGGCTCCTGTCAAAACCCTGGGATGTGGTGACTGGAGTCACAGGAATAGCCATGA +CCGACACCACACCGTATGGTCAGCAAAGAGTTTTCAAGGAAAAAGTGGACACTAGGGTGC +CAGACCCCCAAGAAGGCACTCGTCAGGTTATGAGCATGGTCTCTTCCTGGTTGTGGAAAG +AGCTAGGCAAACACAAACGGCCACGAGTCTGTACCAAAGAAGAGTTCATCAACAAGGTTC +GTAGCAATGCAGCATTAGGGGCAATATTTGAAGAGGAAAAAGAGTGGAAGACTGCAGTGG +AAGCTGTGAACGATCCAAGGTTCTGGGCTCTAGTGGACAAGGAAAGAGAGCACCACCTGA +GAGGAGAGTGCCAGAGTTGTGTGTACAACATGATGGGAAAAAGAGAAAAGAAACAAGGGG +AATTTGGAAAGGCCAAGGGCAGCCGCGCCATCTGGTATATGTGGCTAGGGGCTAGATTTC +TAGAGTTCGAAGCCCTTGGATTCTTGAACGAGGATCACTGGATGGGGAGAGAGAACTCAG +GAGGTGGTGTTGAAGGGCTGGGATTACAAAGACTCGGATATGTCCTAGAAGAGATGAGTC +GCATACCAGGAGGAAGGATGTATGCAGATGACACTGCTGGCTGGGACACCCGCATCAGCA +GGTTTGATCTGGAGAATGAAGCTCTAATCACCAACCAAATGGAGAAAGGGCACAGGGCCT +TGGCATTGGCCATAATCAAGTACACATACCAAAACAAAGTGGTAAAGGTCCTTAGACCAG +CTGAAAAAGGGAAGACAGTTATGGACATTATTTCGAGACAAGACCAAAGGGGGAGCGGAC +AAGTTGTCACTTACGCTCTTAACACATTTACCAACCTAGTGGTGCAACTCATTCGGAATA +TGGAGGCTGAGGAAGTTCTAGAGATGCAAGACTTGTGGCTGCTGCGGAGGTCAGAGAAAG +TGACCAACTGGTTGCAGAGCAACGGATGGGATAGGCTCAAACGAATGGCAGTCAGTGGAG +ATGATTGCGTTGTGAAGCCAATTGATGATAGGTTTGCACATGCCCTCAGGTTCTTGAATG +ATATGGGAAAAGTTAGGAAGGACACACAAGAGTGGAAACCCTCAACTGGATGGGACAACT +GGGAAGAAGTTCCGTTTTGCTCCCACCACTTCAACAAGCTCCATCTCAAGGACGGGAGGT +CCATTGTGGTTCCCTGCCGCCACCAAGATGAACTGATTGGCCGGGCCCGCGTCTCTCCAG +GGGCGGGATGGAGCATCCGGGAGACTGCTTGCCTAGCAAAATCATATGCGCAAATGTGGC +AGCTCCTTTATTTCCACAGAAGGGACCTCCGACTGATGGCCAATGCCATTTGTTCATCTG +TGCCAGTTGACTGGGTTCCAACTGGGAGAACTACCTGGTCAATCCATGGAAAGGGAGAAT +GGATGACCACTGAAGACATGCTTGTGGTGTGGAACAGAGTGTGGATTGAGGAGAACGACC +ACATGGAAGACAAGACCCCAGTTACGAAATGGACAGACATTCCCTATTTGGGAAAAAGGG +AAGACTTGTGGTGTGGATCTCTCATAGGGCACAGACCGCGCACCACCTGGGCTGAGAACA +TTAAAAACACAGTCAACATGGTGCGCAGGATCATAGGTGATGAAGAAAAGTACATGGACT +ACCTATCCACCCAAGTTCGCTACTTGGGTGAAGAAGGGTCTACACCTGGAGTGCTGTAAG +CACCAATCTTAGTGTTGTCAGGCCTGCTAGTCAGCCACAGCTTGGGGAAAGCTGTGCAGC +CTGTGACCCCCCCAGGAGAAGCTGGGAAACCAAGCCTATAGTCAGGCCGAGAACGCCATG +GCACGGAAGAAGCCATGCTGCCTGTGAGCCCCTCAGAGGACACTGAGTCAAAAAACCCCA +CGCGCTTGGAGGCGCAGGATGGGAAAAGAAGGTGGCGACCTTCCCCACCCTTCAATCTGG +GGCCTGAACTGGAGATCAGCTGTGGATCTCCAGAAGAGGGACTAGTGGTTAGAGGAGACC +CCCCGGAAAACGCAAAACAGCATATTGACGCTGGGAAAGACCAGAGACTCCATGAGTTTC +CACCACGCTGGCCGCCAGGCACAGATCGCCGAATAGCGGCGGCCGGTGTGGGGAAATCCA +TGGGTCT- +>KU681082.3|Philippines|2012-05-09 +AGTTGTTGATCTGTGTGAATCAGACTGCGACAGTTCGAGTTTGAAGCGAAAGCTAGCAAC +AGTATCAACAGGTTTTATTTTGGATTTGGAAACGAGAGTTTCTGGTCATGAAAAACCCAA +AAAAGAAATCCGGAGGATTCCGGATTGTCAATATGCTAAAACGCGGAGTAGCCCGTGTGA +GCCCCTTTGGGGGCTTGAAGAGGCTGCCAGCCGGACTTCTGCTGGGCCATGGGCCCATCA +GGATGGTCTTGGCGATACTAGCCTTTTTGAGATTCACGGCAATCAAGCCATCACTGGGTC +TCATCAATAGATGGGGTTCAGTGGGGAAAAAAGAGGCTATGGAAATAATAAAGAAGTTCA +AGAAAGATCTGGCTGCCATGCTGAGAATAATCAATGCTAGGAAGGAGAAGAAGAGACGAG +GCGCAGATACTAGCGTCGGAATTGTTGGCCTCCTCCTGACCACAGCCATGGCAGTAGAGG +TCACTAGACGTGGGAGTGCATACTATATGTACTTGGACAGAAGCGATGCTGGGGAGGCCA +TATCTTTTCCAACCACACTGGGGATGAATAAGTGTTACATACAAATCATGGATCTTGGAC +ACATGTGTGATGCCACCATGAGCTATGAATGCCCTATGTTGGATGAGGGGGTAGAACCAG +ATGACGTCGATTGCTGGTGCAACACGACATCAACTTGGGTTGTGTATGGAACCTGCCACC +ACAAAAAAGGTGAAGCACGGAGATCTAGAAGAGCTGTGACGCTCCCCTCCCATTCCACTA +GGAAGCTGCAAACGCGGTCGCAGACCTGGTTGGAATCAAGAGAATACACAAAGCACCTGA +TTAGAGTTGAAAATTGGATATTCAGGAACCCTGGCTTCGCGTTAGCAGCAGCTGTCATCG +CTTGGCTTTTGGGAAGTTCAACGAGCCAAAAAGTCATATATCTGGTCATGATACTGCTGA +TTGCCCCGGCATACAGCATCAGGTGCATAGGAGTCAGCAATAGGGACTTTGTGGAAGGTA +TGTCAGGTGGGACTTGGGTTGATGTTGTCTTGGAACATGGAGGTTGTGTTACCGTAATGG +CACAGGACAAACCGACTGTCGACATAGAGCTGGTTACAACAACAGTCAGCAACATGGCGG +AGGTAAGATCCTACTGCTATGAGGCATCAATATCGGATATGGCTTCGGACAGCCGCTGCC +CAACACAAGGTGAGGCCTACCTTGACAAGCAGTCAGACACTCAATATGTCTGCAAAAGAA +CGTTAGTGGACAGAGGCTGGGGAAATGGATGTGGACTTTTTGGCAAAGGGAGCCTGGTGA +CATGCGCTAAGTTTGCATGCTCCAAGAAAATGACCGGGAAGAGCATCCAGCCAGAGAATC +TGGAGTACCGGATAATGCTGTCAGTTCATGGCTCCCAGCACAGTGGGATGATCGTTAATG +ACACAGGACATGAAACTGATGAGAATAGAGCGAAGGTTGAGATAACGCCCAATTCACCAA +GAGCCGAAGCCACCCTGGGGGGTTTTGGGAGCCTAGGACTTGATTGTGAACCGAGGACAG +GCCTTGACTTTTCAGATTTGTATTACCTGACTATGAATAACAAGCACTGGTTGGTTCACA +AGGAGTGGTTCCACGACATTCCATTACCTTGGCATGCTGGGGCAGACACTGGAACTCCAC +ATTGGAACAACAAAGAAGCACTGGTAGAGTTCAAGGACGCACATGCAAAAAGGCAAACTG +TCGTGGTTCTAGGGAGTCAAGAAGGAGCAGTTCACACGGCCCTTGCTGGAGCTCTGGAGG +CTGAGATGGATGGAGCCAAGGGAAGGCTGTCCTCTGGCCACTTGAAATGTCGCCTGAAAA +TGGATAAACTTAGATTGAAGGGCGTGTCATACTCCTTGTGCACTGCAGCGTTCACATTCA +CCAAGATCCCGGCTGAAACACTGCACGGGACAGTCACAGTGGAGGTACAGTACGCAGGGA +CAGATGGACCTTGCAAGGTTCCAGCTCAGATGGCGGTGGATATGCAAACTCTGACCCCAG +TTGGGAGGTTGATAACCGCTAACCCTGTAATCACTGAAAGCACCGAGAACTCTAAGATGA +TGCTGGAACTTGATCCACCATTTGGGGACTCTTACATTGTCATAGGAGTCGGGGAGAAGA +AGATCACCCATCACTGGCACAGGAGTGGCAGCACCATTGGAAAAGCATTTGAAGCCACTG +TGAGAGGTGCCAAGAGAATGGCAGTCTTGGGAGACACAGCCTGGGACTTTGGATCAGTTG +GGGGTGCTCTCAACTCATTGGGCAAGGGCATCCATCAAATTTTTGGAGCAGCTTTCAAAT +CATTGTTCGGAGGAATGTCCTGGTTCTCACAAATTCTCATTGGAACGTTGCTGGTGTGGT +TGGGTCTGAATACAAAGAATGGATCTATTTCCCTTACGTGCTTGGCCTTAGGGGGAGTGT +TGATCTTCTTATCCACAGCCGTTTCTGCTGATGTGGGGTGCTCGGTGGACTTCTCAAAGA +AGGAAACGAGATGCGGTACAGGGGTGTTCGTCTATAACGACGTTGAAGCCTGGAGGGACA +GGTACAAGTACCATCCTGACTCCCCTCGTAGATTGGCAGCAGCAGTCAAGCAAGCCTGGG +AAGATGGGATCTGTGGGATCTCCTCTGTCTCAAGAATGGAAAACATCATGTGGAGATCAG +TAGAAGGGGAGCTCAACGCAATCCTGGAAGAGAATGGAGTTCAACTGACGGTCGTTGTGG +GATCTGTAAAAAACCCCATGTGGAGAGGTCCACAGAGATTGCCCGTGCCTGTGAACGAGC +TGCCCCACGGCTGGAAGGCTTGGGGGAAATCGTACTTCGTCAGAGCAGCAAAGACAAATA +ACAGCTTTGTCGTGGATGGTGACACACTGAAGGAATGCCCACTCAAACATAGAGCATGGA +ACAGCTTTCTTGTGGAGGATCATGGGTTTGGGGTATTTCACACTAGTGTCTGGCTCAAGG +TTAGAGAAGATTATTCATTAGAGTGTGATCCAGCCGTCATTGGAACAGCTGCTAAGGGAA +AGGAGGCTGTGCACAGCGATCTAGGCTACTGGATTGAGAGTGAGAAGAACGACACATGGA +GGCTGAAGAGGGCCCACCTGATCGAGATGAAAACATGTGAATGGCCAAAGTCCCACACAT +TGTGGACAGATGGAGTAGAAGAAAGTGATCTGATCATACCCAAGTCTTTAGCTGGGCCAC +TCAGCCATCACAACACCAGAGAGGGCTACAGGACTCAAATGAAAGGGCCATGGCACAGTG +AAGAGCTTGAAATTCGGTTTGAGGAATGCCCAGGCACTAAGGTCCACGTGGAGGAAACAT +GTGGGACAAGAGGACCATCCCTGAGATCAACCACTGCAAGCGGAAGGGTGATCGAGGAAT +GGTGCTGCAGGGAATGCACAATGCCCCCACTGTCGTTCCGAGCTAAAGATGGCTGTTGGT +ATGGAATGGAGATAAGGCCCAGGAAAGAACCAGAAAGTAACTTAGTAAGGTCAATGGTGA +CTGCAGGATCAACTGATCACATGGATCACTTCTCTCTTGGAGTGCTTGTGATTTTGCTCA +TGGTGCAGGAAGGGCTGAAGAAGAGAATGACCACAAAGATCATCATAAGCACATCAATGG +CAGTGCTGGTAGCCATGATCCTGGGAGGATTTTCAATGAGTGACCTGGCTAAGCTTGCAA +TTTTGATGGGTGCCACCTTCGCGGAAATGAACACTGGAGGAGATGTAGCTCATTTGGCGC +TGATAGCGGCATTCAAAGTCAGACCTGCGTTGCTGGTATCTTTCATCTTCAGAGCTAATT +GGACACCCCGTGAGAGCATGCTGCTGGCCTTGGCCTCGTGTCTTCTGCAAACTGCGATCT +CCGCCTTGGAAGGCGACCTGATGGTTCTCATCAATGGTTTTGCTTTGGCCTGGTTGGCAA +TACGAGCGATGGTTGTTCCACGCACTGACAACATCACCTTGGCAATCCTGGCTGCTCTGA +CACCACTGGCCCGGGGCACACTGCTTGTGGCGTGGAGAGCAGGCCTTGCTACTTGCGGGG +GGTTCATGCTCCTCTCTCTGAAGGGGAAAGGCAGTGTGAAGAAGAACCTACCATTTGTCA +TGGCCTTGGGACTAACTGCTGTGAGGCTGGTCGACCCCATCAACGTGGTGGGACTGCTGT +TGCTCACAAGGAGTGGGAAGCGGAGCTGGCCCCCTAGTGAAGTACTCACAGCTGTTGGCC +TGATATGCGCATTGGCTGGAGGGTTCGCCAAGGCGGATATAGAGATGGCTGGGCCCATGG +CCGCGGTCGGTCTGCTAATTGTCAGTTACGTGGTCTCAGGAAAGAGTGTGGACATGTACA +TTGAAAGAGCAGGTGACATCACATGGGAAAAAGATGCGGAAATCACTGGAAACAGTCCCC +GGCTCGATGTGGCACTAGATGAGAGTGGTGATTTCTCCCTAGTGGAGGATGATGGTCCAC +CCATGAGAGAGATCATACTCAAAGTGGTCCTGATGACCATCTGCGGCATGAACCCAATAG +CCATACCCTTTGCAGCTGGAGCGTGGTACGTGTATGTGAAGACTGGAAAAAGGAGTGGTG +CTCTATGGGATGTGCCTGCTCCCAAGGAAGTAAAAAAGGGGGAGACCACAGATGGAGTGT +ACAGAGTAATGACTCGTAGACTGCTTGGTTCAACACAAGTTGGAGTGGGAGTCATGCAAG +AGGGGGTCTTCCACACTATGTGGCACGTCACAAAAGGATCCGCGCTGAGAAGCGGTGAAG +GGAGACTTGATCCATACTGGGGAGATGTCAAGCAGGATCTGGTGTCATACTGTGGTCCGT +GGAAGCTAGACGCCGCCTGGGACGGGCACAGCGAGGTGCAGCTCTTGGCCGTGCCCCCCG +GAGAGAGAGCGAGGAACATCCAGACTCTGCCCGGAACATTTAAGACAAAGGATGGGGACA +TTGGAGCAGTTGCGCTGGACTACCCAGCAGGAACTTCAGGATCTCCAATCCTAGACAAGT +GTGGGAGAGTGATAGGACTCTATGGTAATGGGGTCGTGATAAAAAATGGGAGTTATGTTA +GTGCCATCACCCAAGGGAGGAGGGAGGAAGAGACTCCTGTTGAGTGCTTCGAGCCTTCGA +TGCTGAAGAAGAAGCAGCTAACTGTCTTAGACCTGCATCCTGGAGCCGGGAAAACCAGGA +GAGTTCTTCCTGAAATAGTCCGTGAAGCCATAAAAACAAGACTCCGTACTGTGATCTTAG +CTCCAACCAGGGTCGTCGCTGCTGAAATGGAGGAAGCCCTTAGAGGGCTTCCAGTTCGTT +ATATGACAACAGCAGTCAATGTCACCCATTCTGGGACAGAAATCGTTGACTTAATGTGCC +ATGCTACCTTCACTTCACGCCTACTACAACCAATCAGAGTCCCCAACTATAATTTGTATA +TTATGGATGAGGCCCACTTCACAGATCCCTCAAGTATAGCAGCAAGAGGATACATTTCAA +CAAGGGTTGAGATGGGCGAGGCGGCTGCCATCTTCATGACCGCCACGCCACCAGGAACCC +GTGACGCATTCCCGGACTCCAACTCACCAATTATGGACACCGAGGTGGAAGTCCCAGAGA +GAGCCTGGAGCACAGGCTTTGATTGGGTGACGGATCATTCTGGGAAAACAGTCTGGTTTG +TTCCAAGCGTGAGGAACGGCAATGAGATCGCAGCTTGTCTGACAAAGGCTGGAAAACGGG +TCATACAGCTCAGCAGAAAGACTTTTGAGACAGAGTTCCAGAAAACGAAAAATCAAGAGT +GGGACTTCGTCGTGACAACCGACATTTCAGAGATGGGCGCCAACTTTAAAGCTGACCGTG +TCATAGATTCCAGGAGATGCTTAAAGCCGGTCATACTTGATGGCGAGAGAGTCATTTTGG +CTGGACCCATGCCTGTCACACATGCCAGCGCTGCTCAGAGGAGGGGGCGCATAGGCAGGA +ATCCCAACAAACCTGGAGATGAGTATCTGTATGGAGGTGGGTGCGCAGAGACTGATGAAG +ATCACGCACACTGGCTTGAAGCAAGAATGCTTCTTGACAACATTTACCTCCAAGATGGCC +TCATAGCTTCGCTCTATCGACCTGAGGCCGACAAAGTAGCAGCTATTGAGGGAGAGTTCA +AGCTTAGGACGGAGCAAAGGAAGACCTTTGTGGAACTCATGAAAAGAGGAGATCTTCCGG +TTTGGTTGGCCTATCAGGTTGCATCTGCCGGAATAACCTACACAGATAGAAGATGGTGCT +TTGATGGCATGACCAACAACACCATAATGGAAGACAGTGTGCCGGCAGAGGTGTGGACCA +GATACGGAGAGAAAAGAGTGCTCAAACCGAGGTGGATGGACGCCAGAGTTTGTTCAGATC +ATGCGGCCCTGAAGTCATTCAAAGAGTTTGCCGCTGGGAAAAGAGGAGCGGCCTTTGGAG +TGATAGAAGCCCTGGGAACACTGCCAGGACACATGACAGAGAGATTCCAGGAAGCCATTG +ACAACCTCGCTGTGCTCATGCGGGCAGAGACTGGAAGCAGGCCTTACAAAGCCGCGGCGG +CCCAATTGCCGGAGACCCTAGAGACCATTATGCTTTTGGGGTTGCTGGGAACAGTCTCGC +TGGGAATCTTTTTCGTCTTGATGCGGAACAAGGGCATGGGGAAGATGGGCTTTGGAATGG +TGACTCTTGGGGCCAGCGCATGGCTTATGTGGCTCTCGGAAATTGAGCCAGCCAGAATTG +CATGTGTCCTCATTGTCGTGTTCCTATTGCTGGTGGTGCTCATACCTGAGCCAGAAAAGC +AAAGATCTCCTCAGGACAACCAAATGGCAATCATCATCATGGTAGCAGTGGGTCTTCTGG +GCTTGATTACCGCCAATGAACTCGGATGGTTGGAGAGAACAAAAAGTGACCTAAGCCATC +TAATGGGAAGGAGAGAGGAGGGGGCAACCACAGGATTCTCAATGGACATTGACCTGCGGC +CAGCCTCAGCTTGGGCTATCTATGCTGCTCTGACAACTTTCATCACCCCAGCCGTCCAAC +ATGCGGTGACCACTTCATACAACAACTACTCCTTAATGGCGATGGCCACGCAAGCTGGGG +TGTTGTTTGGTATGGGCAAAGGGATGCCATTCTACGCATGGGACTTTGGAGTCCCGCTGC +TAATGATGGGTTGCTACTCACAATTAACACCTCTGACCCTAATAGTGGCCATCATTTTGC +TCGTGGCGCACTACATGTACTTGATCCCAGGGCTGCAGGCAGCAGCTGCGCGGGCTGCCC +AGAAGAGAACGGCAGCTGGCATCATGAAGAACCCTGTTGTGGATGGAATAGTGGTGACTG +ACATTGACACAATGACAATTGACCCCCAAGTGGAAAAAAAGATGGGGCAGGTGCTACTCA +TAGCAGTAGCCGTCTCCAGCGCCATACTGTCGCGGACCGCCTGGGGGTGGGGGGAGGCTG +GGGCCCTGATCACAGCTGCAACTTCCACCTTGTGGGAAGGCTCTCCGAACAAGTACTGGA +ACTCCTCCACAGCCACTTCACTGTGTAACATTTTTAGGGGAAGTTACTTGGCTGGAGCTT +CTCTAATCTACACAGTAACAAGAAACGCTGGCTTGGTCAAGAGACGTGGGGGTGGAACGG +GAGAGACCCTGGGAGAGAAATGGAAGGCCCGCCTGAACCAGATGTCGGCCCTGGAGTTCT +ACTCCTACAAAAAGTCAGGCATCACCGAGGTGTGCAGAGAAGAGGCCCGCCGTGCCCTCA +AGGACGGTGTGGCAACAGGAGGCCATGCTGTGTCCCGAGGAAGTGCAAAGCTTAGATGGC +TGGTGGAGAGAGGATACCTGCAGCCCTATGGAAAGGTCATTGATCTTGGATGTGGCAGAG +GGGGCTGGAGTTACTATGCCGCCACCATCCGCAAAGTTCAGGAAGTGAAAGGATACACAA +AAGGAGGCCCTGGTCATGAAGAACCCATGTTGGTGCAAAGCTATGGGTGGAACATAGTCC +GTCTTAAGAGTGGGGTGGACGTCTTTCACATGGCGGCTGAGCCGTGTGACACTTTGCTGT +GTGATATAGGTGAGTCATCATCTAGTCCTGAAGTGGAAGAAGCACGGACGCTCAGAGTCC +TCTCCATGGTGGGGGATTGGCTTGAAAAAAGACCAGGAGCCTTTTGTATAAAAGTGTTGT +GCCCATACACCAGCACTATGATGGAAACCCTGGAGCGACTGCAGCGTAGGTATGGGGGAG +GACTGGTCAGGGTGCCACTCTCCCGCAACTCTACACATGAGATGTACTGGGTCTCTGGAG +CGAAAAGCAACACCATAAAAAGTGTGTCCACCACGAGCCAGCTCCTCTTGGGGCGCATGG +ACGGGCCCAGGAGGCCAGTGAAATATGAGGAGGATGTGAATCTCGGCTCTGGCACGCGGG +CTGTGGTAAGCTGCGCTGAAGCTCCCAACATGAAGATCATTGGTAACCGCATTGAGAGGA +TCCGCAGTGAGCACGCGGAAACGTGGTTCTTTGACGAGAACCACCCATATAGGACATGGG +CTTACCATGGAAGCTATGAGGCCCCTACACAAGGGTCAGCGTCCTCTCTAATAAACGGGG +TTGTCAGGCTCCTGTCAAAACCCTGGGATGTGGTGACTGGAGTCACAGGAATAGCCATGA +CTGACACCACACCGTATGGTCAGCAAAGAGTTTTCAAGGAAAAAGTGGACACTAGGGTGC +CAGACCCCCAAGAAGGCACTCGTCAGGTTATGAGCATGGTCTCTTCCTGGTTATGGAAGG +AGCTAGGCAAACACAAACGGCCACGAGTCTGTACCAAAGAAGAGTTCATCAACAAGGTTC +GTAGCAATGCAGCATTAGGGGCAATATTTGAAGAGGAAAAAGAGTGGAAGACTGCAGTGG +AAGCTGTGAATGATCCAAGGTTCTGGGCTCTAGTGGACAAGGAAAGAGAGCATCACCTGA +GAGGAGAGTGTCAGAGCTGTGTGTACAACATGATGGGAAAAAGAGAAAAGAAACAAGGGG +AATTTGGAAAGGCCAAGGGCAGCCGCGCCATCTGGTATATGTGGCTAGGGGCTAGATTCC +TAGAGTTCGAAGCCCTTGGATTCTTGAATGAGGATCATTGGATGGGGAGAGAGAATTCAG +GAGGTGGTGTTGAAGGACTGGGATTACAAAGACTCGGATATGTCCTAGAAGAGATGAGTC +GCATACCAGGAGGAAGGATGTATGCAGATGATACTGCTGGCTGGGACACCCGCATCAGCA +GGTTTGATCTGGAGAATGAAGCTCTAATCACCAACCAAATGGAGAAAGGGCACAGGGCCT +TGGCATTGGCCATAATCAAGTACACATACCAAAACAAAGTGGTAAAGGTCCTTAGACCAG +CTGAAAAAGGGAAGACAGTTATGGACATTATTTCAAGACAAGACCAAAGGGGGAGCGGAC +AAGTTGTCACTTACGCTCTTAATACATTCACCAACCTGGTGGTGCAGCTCATTCGGAATA +TGGAGGCTGAGGAAGTTCTAGAGATGCAAGACTTGTGGCTGCTGCGGAGGCCAGAGAAAG +TGACCAACTGGTTGCAAAGCAACGGATGGGATAGGCTCAAAAGAATGGCAGTCAGTGGAG +ATGATTGCGTTGTGAAACCAATTGATGATAGGTTTGCACATGCCCTCAGGTTCTTGAATG +ATATGGGAAAAGTTAGGAAGGACACACAAGAGTGGAAACCCTCAACTGGATGGGACAACT +GGGAAGAAGTTCCGTTTTGCTCCCACCACTTCAACAAACTCCATCTTAAGGACGGGAGGT +CCATTGTGGTTCCCTGCCGCCACCAAGATGAACTGATTGGCCGAGCCCGCGTATCACCAG +GGGCGGGATGGAGCATCCGGGAGACTGCTTGCCTAGCAAAATCATATGCGCAAATGTGGC +AGCTCCTTTATTTCCACAGAAGGGACCTCCGACTGATGGCCAATGCCATTTGTTCATCTG +TGCCAGTTGATTGGGTTCCAACTGGGAGAACTACCTGGTCAATCCATGGAAAGGGAGAAT +GGATGACCACTGAAGACATGCTTGTGGTATGGAACAGAGTGTGGATTGAGGAAAACGACC +ACATGGAAGACAAGACCCCAGTTACAAAATGGACAGACATTCCCTATTTGGGAAAAAGAG +AAGACTTGTGGTGTGGATCTCTCATAGGGCACAGACCGCGTACTACCTGGGCTGAGAACA +TCAAAAATACAGTCAACATGATGCGCAGGATCATAGGTGATGAAGAAAAGTACATGGACT +ACCTATCCACCCAGGTTCGCTACTTGGGTGAAGAAGGGTCCACACCTGGAGTGCTGTAAG +CACCAATCTTAGTGTTGTCAGGCCTGCTAGTCAGCCACAGCTTGGGGAAAGCTGTGCAGC +CTGTGACCCCCCCAGGAGAAGCTGGGAAACCAAGCCTATAGTCAGGCCGAGAACGCCATG +GCACGGAAGAAGCCATGCTGCCTGTGAGCCCCTCAGAGGACACTGAGTCAAAAAACCCCA +CGCGCTTGGAGGCGCAGGATGGGAAAAGAAGGTGGCGACCTTCCCCACCCTTCAATCTGG +GGCCTGAACTGGAGATCAGCTGTGGATCTCCAGAAGAGGGACTAGTGGTTAGAGGAGACC +CCCCGGAAAACGCAAAACAGCATATTGACGCTGGGAAAGACCAGAGACTCCATGAGTTTC +CACCACGCTGGCCGCCAGGCACAGATCGCCGAATAGCGGCGGCCGGTGTGGGGAAATCCA +TGGGTCT- +>KU729218.1|Brazil|2015-06-02 +--------------GTGAATCAGACTGCGACAGTTCGAGTTTGAAGCGAAAGCTAGCAAC +AGTATCAACAGGTTTTATTTTGGATTTGGAAACGAGAGTTTCTGGTCATGAAAAACCCAA +AAAAGAAATCCGGAGGATTCCGGATTGTCAATATGCTAAAACGCGGAGTAGCCCGTGTGA +GCCCCTTTGGGGGCTTGAAGAGGCTGCCAGCCGGACTTCTGCTGGGTCATGGGCCCATCA +GGATGGTCTTGGCGATTCTAGCCTTTTTGAGATTCACGGCAATCAAGCCATCACTGGGTC +TCATCAATAGATGGGGTTCAGTGGGGAAAAAAGAGGCTATGGAAATAATAAAGAAGTTCA +AGAAAGATCTGGCTGCCATGCTGAGAATAATCAATGCTAGGAAGGAGAAGAAGAGACGAA +GCGCAGATACTAGTGTCGGAATTGTTGGCCTCCTGCTGACCACAGCTATGGCAGCGGAGG +TCACTAGACGTGGGAGTGCATACTATATGTACTTGGACAGAAACGATGCTGGGGAGGCCA +TATCTTTTCCAACCACATTGGGGATGAATAAGTGTTATATACAGATCATGGATCTTGGAC +ACATGTGTGATGCCACTATGAGCTATGAATGCCCTATGCTGGATGAGGGGGTGGAACCAG +ATGACGTCGATTGTTGGTGCAACACGACGTCAACTTGGGTTGTGTACGGAACCTGCCATC +ACAAAAAAGGTGAAGCACGGAGATCTAGAAGAGCTGTGACGCTCCCCTCCCATTCCACTA +GGAAGCTGCAAACGCGGTCGCAAACCTGGTTGGAATCAAGAGAATACACAAAGCACTTGA +TTAGAGTCGAAAATTGGATATTCAGGAACCCTGGCTTCGCGTTAGCAGCAGCTGCCATCG +CTTGGCTTTTGGGAAGCTCAACGAGCCAAAAAGTCATATACTTGGTCATGATACTGCTGA +TTGCCCCGGCATACAGCATCAGGTGCATAGGAGTCAGCAATAGGGACTTTGTGGAAGGTA +TGTCAGGTGGGACTTGGGTTGATGTTGTCTTGGAACATGGAGGTTGTGTCACCGTAATGG +CACAGGACAAACCGACTGTCGACATAGAGCTGGTTACAACAACAGTCAGCAACATGGCGG +AGGTAAGATCCTACTGCTATGAGGCATCAATATCAGACATGGCTTCGGACAGCCGCTGCC +CAACACAAGGTGAAGCCTACCTTGACAAGCAATCAGACACTCAATATGTCTGCAAAAGAA +CGTTAGTGGACAGAGGCTGGGGAAATGGATGTGGACTTTTTGGCAAAGGGAGCCTGGTGA +CATGCGCTAAGTTTGCATGCTCCAAGAAAATGACCGGGAAGAGCATCCAGCCAGAGAATC +TGGAGTACCGGATAATGCTGTCAGTTCATGGCTCCCAGCACAGTGGGATGATCGTTAATG +ACACAGGACATGAAACTGATGAGAATAGAGCGAAGGTTGAGATAACGCCCAATTCACCAA +GAGCCGAAGCCACCCTGGGGGGTTTTGGAAGCCTAGGACTTGATTGTGAACCGAGGACAG +GCCTTGACTTTTCAGATTTGTATTACTTGACTATGAATAACAAGCACTGGTTGGTTCACA +AGGAGTGGTTCCACGACATTCCATTACCTTGGCACGCTGGGGCAGACACCGGAACTCCAC +ACTGGAACAATAAAGAAGCACTGGTAGAGTTCAAGGACGCACATGCCAAAAGGCAAACTG +TCGTGGTTCTAGGGAGTCAAGAAGGAGCAGTTCACACGGCCCTTGCTGGAGCTCTGGAGG +CTGAGATGGATGGTGCAAAGGGAAGGCTGTCCTCTGGCCACTTGAAATGTCGCCTGAAAA +TGGATAAACTTAGATTGAAGGGCGTGTCATACTCCTTGTGTACCGCAGCGTTCACATTCA +CCAAGATCCCGGCTGAAACACTGCACGGGACAGTCACAGTGGAGGTACAGTACGCAGGGA +CAGATGGACCTTGCAAGGTTCCAGCTCAGATGGCGGTGGACACGCAAACTCTGACCCCAG +TTGGGAGGTTGATAACCGCTAACCCCGTAATCACTGAAAGCACTGAGAACTCTAAGATGA +TGCTGGAACTTGATCCACCATTTGGGGACTCTTACATTGTCATAGGAGTCGGGGAGAAGA +AGATCACCCACCACTGGCACAGGAGTGGCAGCACCATTGGAAAAGCATTTGAAGCCACTG +TGAGAGGTGCCAAGAGAATGGCAGTCTTGGGAGACACAGCCTGGGACTTTGGATCAGTTG +GAGGCGCTCTCAACTCATTGGGCAAGGGCATCCATCAAATTTTTGGAGCAGCTTTCAAAT +CATTGTTTGGAGGAATGTCCTGGTTCTCACAAATTCTCATTGGAACGTTGCTGATGTGGT +TGGGTCTGAACACAAAGAATGGATCTATTTCCCTTATGTGCTTGGCCTTAGGGGGAGTGT +TGATCTTCTTATCCACAGCCGTCTCTGCTGATGTGGGGTGCTCGGTGGACTTCTCAAAGA +AGGAGACGAGATGCGGTACAGGGGTGTTCGTCTATAACGACGTTGAAGCCTGGAGGGACA +GGTACAAGTACCATCCTGACTCCCCCCGTAGATTGGCAGCAGCAGTCAAGCAAGCCTGGG +AAGATGGTATCTGCGGGATCTCCTCTGTTTCAAGAATGGAAAACATCATGTGGAGATCAG +TAGAAGGGGAGCTCAACGCAATCCTGGAAGAGAATGGAGTTCAACTGACGGTCGTTGTGG +GATCTGTAAAAAACCCCATGTGGAGAGGTCCACAGAGATTGCCCGTGCCTGTGAACGAGC +TGCCCCACGGCTGGAAGGCTTGGGGGAAATCGTACTTCGTCAGAGCAGCAAAGACAAATA +ACAGCTTTGTCGTGGATGGTGACACACTGAAGGAATGCCCACTCAAACATAGAGCATGGA +ACAGCTTTCTTGTGGAGGATCATGGGTTCGGGGTATTTCACACTAGTGTCTGGCTCAAGG +TTAGAGAAGATTATTCATTAGAGTGTGATCCAGCCGTTATTGGAACAGCTGTTAAGGGAA +AGGAGGCTGTACACAGTGATCTAGGCTACTGGATTGAGAGTGAGAAGAATGACACATGGA +GGCTGAAGAGGGCCCATCTGATCGAGATGAAAACATGTGAATGGCCAAAGTCCCACACAT +TGTGGACAGATGGAATAGAAGAGAGTGATCTGATCATACCCAAGTCTTTAGCTGGGCCAC +TCAGCCATCACAATACCAGAGAGGGCTACAGGACCCAAATGAAAGGGCCATGGCACAGTG +AAGAGCTTGAAATTCGGTTTGAGGAATGCCCAGGCACTAAGGTCCACGTGGAGGAAACAT +GTGGAACAAGAGGACCATCTCTGAGATCAACCACTGCAAGCGGAAGGGTGATCGAGGAAT +GGTGCTGCAGGGAGTGCACAATGCCCCCACTGTCGTTCCGGGCTAAAGATGGCTGTTGGT +ATGGAATGGAGATAAGGCCCAGGAAAGAACCAGAAAGCAACTTAGTAAGGTCAATGGTGA +CTGCAGGATCAACTGATCACATGGATCACTTCTCCCTTGGAGTGCTTGTGATTCTGCTCA +TGGTGCAGGAAGGGCTGAAGAAGAGAATGACCACAAAGATCATCATAAGCACATCAATGG +CAGTGCTGGTAGCTATGATCCTGGGAGGATTTTCAATGAGTGACCTGGCTAAGCTTGCAA +TTTTGATGGGTGCCACCTTCGCGGAAATGAACACTGGAGGAGATGTAGCTCATCTGGCGC +TGATAGCGGCATTCAAAGTCAGACCAGCGTTGCTGGTATCTTTCATCTTCAGAGCTAATT +GGACACCCCGTGAAAGCATGCTGCTGGCCTTGGCCTCGTGTCTTTTGCAAACTGCGATCT +CCGCCTTGGAAGGCGACCTGATGGTTCTCATCAATGGTTTTGCTTTGGCCTGGTTGGCAA +TACGAGCGATGGTTGTTCCACGCACTGATAACATCACCTTGGCAATCCTGGCTGCTCTGA +CACCACTGGCCCGGGGCACACTGCTTGTGGCGTGGAGAGCAGGCCTTGCTACTTGCGGGG +GGTTTATGCTCCTCTCTCTGAAGGGAAAAGGCAGTGTGAAGAAGAACTTACCATTTGTCA +TGGCCCTGGGACTAACCGCTGTGAGGCTGGTCGACCCCATCAACGTGGTGGGACTGCTGT +TGCTCACAAGGAGTGGGAAGCGGAGCTGGCCCCCTAGCGAAGTACTCACAGCTGTTGGCC +TGATATGCGCATTGGCTGGAGGGTTCGCCAAGGCAGATATAGAGATGGCTGGGCCCATGG +CCGCGGTCGGTCTGCTAATTGTCAGTTACGTGGTCTCAGGAAAGAGTGTGGACATGTACA +TTGAAAGAGCAGGTGACATCACATGGGAAAAAGATGCGGAAGTCACTGGAAACAGTCCCC +GGCTCGATGTGGCGCTAGATGAGAGTGGTGATTTCTCCCTGGTGGAGGATGACGGTCCCC +CCATGAGAGAGATCATACTCAAGGTGGTCCTGATGACCATCTGTGGCATGAACCCAATAG +CCATACCCTTTGCAGCTGGAGCGTGGTACGTATACGTGAAGACTGGAAAAAGGAGTGGTG +CTCTATGGGATGTGCCTGCTCCCAAGGAAGTAAAAAAGGGGGAGACCACAGATGGAGTGT +ACAGAGTAATGACTCGTAGACTGCTAGGTTCAACACAAGTTGGAGTGGGAGTTATGCAAG +AGGGGGTCTTTCACACTATGTGGCACGTCACAAAAGGATCCGCGCTGAGAAGCGGTGAAG +GGAGACTTGATCCATACTGGGGAGATGTCAAGCAGGATCTGGTGTCATACTGTGGTCCAT +GGAAGCTAGATGCCGCCTGGGACGGGCACAGCGAGGTGCAGCTCTTGGCCGTGCCCCCCG +GAGAGAGAGCGAGGAACATCCAGACTCTGCCCGGAATATTTAAGACAAAGGATGGGGACA +TTGGAGCGGTTGCGCTGGATTACCCAGCAGGAACTTCAGGATCTCCAATCCTAGACAAGT +GCGGGAGAGTGATAGGACTTTATGGCAATGGGGTCGTGATCAAAAATGGGAGTTATGTTA +GTGCCATCACCCAAGGGAGGAGGGAGGAAGAGACTCCTGTTGAGTGCTTCGAGCCTTCGA +TGCTGAAGAAGAAGCAGCTAACTGTCTTAGACTTGCATCCTGGAGCTGGGAAAACCAGGA +GAGTTCTTCCTGAAATAGTCCGTGAAGCCATAAAAACAAGACTCCGTACTGTGATCTTAG +CTCCAACCAGGGTTGTCGCTGCTGAAATGGAGGAAGCCCTTAGAGGGCTTCCAGTGCGTT +ATATGACAACAGCAGTCAATGTCACCCACTCTGGAACAGAAATCGTCGACTTAATGTGCC +ATGCCACCTTCACTTCACGTCTACTACAGCCAATCAGAGTCCCCAATTATAATCTGTATA +TTATGGATGAGGCCCACTTCACAGATCCCTCAAGTATAGCAGCAAGAGGATACATTTCAA +CAAGGGTTGAGATGGGCGAGGCGGCTGCCATCTTCATGACCGCCACGCCACCAGGAACCC +GTGACGCATTTCCGGACTCCAACTCACCAATTACGGACACCGAAGTGGAAGTCCCAGAGA +GAGCCTGGAGCTCAGGCTTTGATTGGGTGACGGATCATTCTGGAAAAACAGTTTGGTTTG +TTCCAAGCGTGAGGAACGGCAATGAGATCGCAGCTTGTCTGACAAAGGCTGGAAAACGGG +TCATACAGCTCAGCAGAAAGACTTTTGAGACAGAGTTCCAGAAAACAAAACATCAAGAGT +GGGACTTTGTCGTGACAACTGACATTTCAGAGATGGGCGCCAACTTTAAAGCTGACCGTG +TCATAGATTCCAGGAGATGCCTAAAGCCGGTCATACTTGATGGCGAGAGAGTCATTCTGG +CTGGACCCATGCCTGTCACACATGCCAGCGCTGCCCAGAGGAGGGGGCGCATAGGCAGGA +ATCCCAACAAACCTGGAGATGAGTATCTGTATGGAGGTGGGTGCGCAGAGACTGACGAAG +ACCATGCACACTGGCTTGAAGCAAGAATGCTCCTTGACAATATTTACCTCCAAGATGGCC +TCATAGCCTCGCTCTATCGACCTGAGGCCGACAAAGTAGCAGCCATTGAGGGAGAGTTCA +AGCTTAGGACGGAGCAAAGGAAGACCTTTGTGGAACTCATGAAAAGAGGAGATCTTCCTG +TTTGGCTGGCCTATCAGGTTGCATCTGCCGGAATAACCTACACAGATAGAAGATGGTGCT +TTGATGGCACGACCAACAACACCATAATGGAAGACAGTGTGCCGGCAGAGGTGTGGACCA +GACACGGAGAGAAAAGAGTGCTCAAACCGAGGTGGATGGACGCCAGAGTTTGTTCAGATC +ATGCGGCCCTGAAGTCATTCAAGGAGTTTGCCGCTGGGAAAAGAGGAGCGGCTTTTGGAG +TGATGGAAGCCCTGGGAACACTGCCAGGACACATGACAGAGAGATTCCAGGAAGCCATTG +ACAACCTCGCTGTGCTCATGCGGGCAGAGACTGGAAGCAGGCCTTACAAAGCCGCGGCGG +CCCAATTGCCGGAGACCCTAGAGACCATTATGCTTTTGGGGTTGCTGGGAACAGTCTCGC +TGGGAATCTTTTTCGTCTTGATGAGGAACAAGGGCATAGGGAAGATGGGCTTTGGAATGG +TGACTCTTGGGGCCAGCGCATGGCTCATGTGGCTCTCGGAAATTGAGCCAGCCAGAATTG +CATGTGTCCTCATTGTTGTGTTCCTATTGCTGGTGGTGCTCATACCTGAGCCAGAAAAGC +AAAGATCTCCCCAGGACAACCAAATGGCAATCATCATCATGGTAGCAGTAGGTCTTCTGG +GCTTGATTACCGCCAATGAACTCGGATGGTTGGAGAGAACAAAGAGTGACCTAAGCCATC +TAATGGGAAGGAGAGAGGAGGGGGCAACCATAGGATTCTCAATGGACATTGACCTGCGGC +CAGCCTCAGCTTGGGCCATCTATGCTGCCTTGACAACTTTCATTACCCCAGCCGTCCAAC +ATGCAGTGACCACTTCATACAACAACTACTCCTTAATGGCGATGGCCACGCAAGCTGGAG +TGTTGTTTGGTATGGGCAAAGGGATGCCATTCTACGCATGGGACTTTGGAGTCCCGCTGC +TAATGATAGGTTGCTACTCACAATTAACACCCCTGACCCTAATAGTGGCCATCATTTTGC +TCGTGGCGCACTACATGTACTTGATCCCAGGGCTGCAGGCAGCAGCTGCGCGTGCTGCCC +AGAAGAGAACGGCAGCTGGCATCATGAAGAACCCTGTTGTGGATGGAATAGTGGTGACTG +ACATTGACACAATGACAATTGACCCCCAAGTGGAGAAAAAGATGGGACAGGTGCTACTCA +TAGCAGTAGCCGTCTCCAGCGCCATACTGTCGCGGACCGCCTGGGGGTGGGGGGAGGCTG +GGGCCCTGATCACAGCCGCAACTTCCACTTTGTGGGAAGGCTCTCCGAACAAGTACTGGA +ACTCCTCTACAGCCACTTCACTGTGTAACATTTTTAGGGGAAGTTACTTGGCTGGAGCTT +CTCTGATCTACACAGTAACAAGAAACGCTGGCTTGGTCAAGAGACGTGGGGGTGGAACAG +GAGAGACCCTGGGAGAGAAATGGAAGGCCCGCTTGAACCAGATGTCGGCTCTGGAGTTCT +ACTCCTACAAAAAGTCAGGCATCACCGAGGTGTGCAGAGAAGAGGCCCGCCGCGCCCTCA +AGGACGGTGTGGCAACGGGAGGCCATGCTGTGTCCCGAGGAAGTGCAAAGCTGAGATGGT +TGGTGGAGCGGGGATACCTGCAGCCCTATGGAAAGGTCATTGATCTTGGATGTGGCAGAG +GGGGCTGGAGTTACTACGCCGCCACCATCCGCAAAGTTCAAGAAGTGAAAGGATACACAA +AAGGAGGCCCTGGTCATGAAGAACCCGTGTTGGTGCAAAGCTATGGGTGGAACATAGTCC +GTCTTAAGAGTGGGGTGGACGTCTTTCATATGGCGGCTGAGCCGTGTGACACGTTGCTGT +GTGACATAGGTGAGTCATCATCTAGTCCTGAAGTGGAAGAAGCACGGACGCTCAGAGTCC +TCTCCATGGTGGGGGATTGGCTTGAAAAAAGACCAGGAGCCTTTTGTATAAAAGTGTTGT +GCCCATACACCAGCACTATGATGGAAACCCTGGAGCGACTGCAGCGTAGGTATGGGGGAG +GACTGGTCAGAGTGCCACTCTCCCGCAACTCCACACATGAGATGTACTGGGTCTCTGGAG +CGAAAAGCAACACCATAAAAAGTGTGTCCACCACGAGCCAGCTCCTCTTGGGGCGCATGG +ACGGGCCTAGGAGGCCAGTGAAATATGAGGAGGATGTGAATCTCGGCTCTGGCACGCGGG +CTGTGGTAAGCTGCGCTGAAGCTCCCAACATGAAGATCATTGGTAACCGCATTGAAAGGA +TCCGCAGTGAGCACGCGGAAACGTGGTTCTTTGACGAGAACCACCCATATAGGACATGGG +CTTACCATGGAAGCTATGAGGCCCCCACACAAGGGTCAGCGTCCTCTCTAATAAACGGGG +TTGTCAGGCTCCTGTCAAAACCCTGGGATGTGGTGACTGGAGTCACAGGAATAGCCATGA +CCGACACCACACCGTATGGTCAGCAAAGAGTTTTCAAGGAAAAAGTGGACACTAGGGTGC +CAGACCCCCAAGAAGGCACTCGTCAGGTTATGAGCATGGTCTCTTCCTGGTTGTGGAAAG +AGCTAGGCAAACACAAACGGCCACGAGTCTGTACCAAAGAAGAGTTCATCAACAAGGTTC +GTAGCAATGCAGCATTAGGGGCAATATTTGAAGAGGAAAAAGAGTGGAAGACTGCAGTGG +AAGCTGTGAACGATCCAAGGTTCTGGGCTCTAGTGGACAAGGAAAGAGAGCACCACCTGA +GAGGAGAGTGCCAGAGTTGTGTGTACAACATGATGGGGAAAAGAGAAAAGAAACAAGGGG +AATTTGGAAAGGCCAAGGGCAGCCGCGCCATCTGGTATATGTGGCTAGGGGCTAGATTTC +TAGAGTTCGAAGCCCTTGGATTCTTGAACGAGGATCACTGGATGGGGAGAGAGAACTCAG +GAGGTGGTGTTGAAGGGCTGGGATTACAAAGACTCGGATATGTCCTAGAAGAGATGAGTC +GCATACCAGGAGGAAGGATGTATGCAGATGACACTGCTGGCTGGGACACCCGCATCAGCA +GGTTTGATCTGGAGAATGAAGCTCTAATCACCAACCAAATGGAGAAAGGGCACAGGGCCT +TGGCATTGGCTATAATCAAGTACACATACCAAAACAAAGTGGTAAAGGTCCTTAGACCAG +CTGAAAAAGGGAAAACAGTTATGGACATTATTTCGAGACAAGACCAAAGGGGGAGCGGAC +AAGTTGTCACTTACGCTCTTAACACATTTACCAACCTAGTGGTGCAACTCATTCGGAATA +TGGAGGCTGAGGAAGTTCTAGAGATGCAAGACTTGTGGCTGCTGCGGAGGTCAGAGAAAG +TGACCAACTGGTTGCAGAGCAACGGATGGGATAGGCTCAAACGAATGGCAGTCAGTGGGG +ATGATTGCGTTGTGAAGCCAATTGATGATAGGTTTGCACATGCCCTTAGGTTCTTGAATG +ATATGGGAAAAGTTAGGAAGGACACACAAGAGTGGAAACCCTCAACTGGATGGGACAACT +GGGAAGAAGTTCCGTTTTGCTCCCACCACTTCAACAAGCTCCATCTCAAGGACGGGAGGT +CCATTGTGGTTCCCTGCCGCCACCAAGATGAACTGATTGGCCGGGCCCGCGTCTCTCCAG +GGGCGGGATGGAGCATCCGGGAGACTGCTTGCCTAGCAAAATCATATGCGCAAATGTGGC +AGCTCCTTTATTTCCACAGAAGGGACCTCCGACTGATGGCCAATGCCATTTGTTCATCTG +TGCCAGTTGACTGGGTTCCAACTGGGAGAACTACCTGGTCAATCCATGGAAAGGGAGAAT +GGATGACCACTGAAGACATGCTTGTGGTGTGGAACAGAGTGTGGATTGAGGAGAACGACC +ACATGGAAGACAAGACCCCAGTTACGAAATGGACAGACATTCCCTATTTGGGAAAAAGGG +AAGACTTGTGGTGTGGATCTCTCATAGGGCACAGACCGCGCACCACCTGGGCTGAGAACA +TTAAAAACACAGTCAACATGGTGCGCAGGATCATAGGTGATGAAGAAAAGTACATGGACT +ACCTATCCACCCAAGTTCGCTACTTGGGTGAAGAAGGGTCTACACCTGGAGTGCTGTAAG +CACCAATCTTAATGTTGTCAGGCCTGCTAGTCAGCCACAGCTTGGGGAAAGCTGTGCAGC +CTGTGACCCCCCCAGGAGAAGCTGGGAAACCAAGCCTATAGTCAGGCCGAGAACGCCATG +GCACGGAAGAAGCCATGCTGCCTGTGAGCCCCTCAGAGGACACTGAGTCAAAAAACCCCA +CGCGCTTGGAGGCGCAGGATGGGAAAAGAAGGTGGCGACCTTCCCCACCCTTCAATCTGG +GGCCTGAACTGGAGATCAGCTGTGGATCTCCAGAAGAGGGACTAGTGGTTAGAGGAGACC +CCCCGGAAAACGCAAAACAGCATATTGACGCTGGGAAAGACCAGAGACTCCATGAGTTTC +CAC--------------------------------------------------------- +-------- +>KU820897.5|Colombia|2015-12 +GGTTGTTGATCTGTGTGAATCAGACTGCGACAGTTCGAGTTTGAAGCGAAAGCTAGCAAC +AGTATCAACAGGTTTTATTTTGGATTTGGAAACGAGAGTTTCTGGTCATGAAAAACCCAA +AAAAGAAATCCGGAGGATTCCGGATTGTCAATATGCTAAAACGCGGAGTAGCCCGTGTGA +GCCCCTTTGGGGGCTTGAAGAGGCTGCCAGCCGGACTTCTGCTGGGTCATGGGCCCATCA +GGATGGTCTTGGCGATTCTAGCCTTTTTGAGATTCACGGCAATCAAGCCATCACTGGGTC +TCATCAATAGATGGGGTTCAGTGGGGAAAAAAGAGGCTATGGAAATAATAAAGAAGTTCA +AGAAAGATCTGGCTGCCATGCTGAGAATAATCAATGCTAGGAAGGAGAAGAAGAGACGAG +GCGCAGAAACTAGTGTCGGAATTGTTGGCCTCCTGCTGACCACAGCTATGGCAGCGGAGG +TCACTAGACGTGGGAGTGCATACTATATGTACTTGGACAGAAACGATGCTGGGGAGGCCA +TATCTTTTCCAACCACATTGGGGATGAATAAGTGTTATATACAGATCATGGATCTTGGAC +ACATGTGTGATGCCACCATGAGCTATGAATGCCCTATGCTGGATGAGGGGGTGGAACCAG +ATGACGTCGATTGTTGGTGCAACACGACGTCAACTTGGGTTGTGTACGGAACCTGCCATC +ACAAAAAAGGTGAAGCACGGAGATCTAGAAGAGCCGTGACGCTCCCCTCCCATTCCACTA +GGAAGCTGCAAACGCGGTCGCAAACCTGGTTGGAATCAAGAGAATACACAAAGCACTTGA +TTAGAGTCGAAAATTGGATATTCAGGAACCCTGGTTTCGCTTTAGCAGCAGCTGCCATCG +CTTGGCTTTTGGGAAGCTCAACGAGCCAAAAAGTCATATACTTGGTCATGATACTGCTGA +TTGCCCCGGCATACAGCATCAGGTGCATAGGAGTCAGCAATAGGGACTTTGTGGAAGGTA +TGTCAGGTGGGACTTGGGTTGATGTCGTCTTGGAACATGGAGGTTGTGTCACCGTAATGG +CACAGGACAAACCGACTGTCGACATAGAGCTGGTTACAACAACAGTCAGCAACATGGCGG +AGGTAAGATCCTACTGCTATGAGGCATCAATATCAGACATGGCTTCGGACAGCCGCTGCC +CAACACAAGGTGAAGCCTACCTTGACAAGCAATCAGACACTCAATATGTCTGCAAAAGAA +CGTTAGTGGACAGAGGCTGGGGAAATGGATGTGGACTTTTTGGCAAAGGGAGCCTGGTGA +CATGCGCTAAGTTTGCATGCTCCAAGAAAATGACCGGGAAGAGCATCCAGCCAGAGAATC +TGGAGTACCGGATAATGTTGTCAGTTCATGGCTCCCAGCACAGTGGGATGATCGTTAATG +ACACAGGACATGAAACTGATGAGAATAGAGCGAAGGTTGAGATAACGCCCAATTCACCAA +GAGCCGAAGCCACCCTGGGGGGCTTTGGAAGCCTAGGACTTGATTGTGAACCGAGGACAG +GCCTTGACTTTTCAGATTTGTATTACTTGACTATGAATAACAAGCACTGGTTGGTTCACA +AGGAGTGGTTCCACGACATTCCATTACCTTGGCACGCTGGGGCAGACACCGGAACTCCAC +ACTGGAACAACAAAGAAGCACTGGTAGAGTTCAAGGACGCACATGCCAAAAGGCAAACTG +TCGTGGTTCTAGGGAGTCAAGAAGGAGCAGTTCACACGGCCCTTGCTGGAGCTCTGGAGG +CTGAGATGGATGGTGCAAAGGGAAGGCTGTCCTCTGGCCACTTGAAATGTCGCCTGAAAA +TGGATAAACTTAGATTGAAGGGCGTGTCATACTCCTTGTGTACCGCAGCGTTCACATTCA +CCAAGATCCCGGCTGAAACACTGCACGGGACAGTCACAGTGGAGGTACAGTACGCAGGGA +CAGATGGACCTTGCAAGGTTCCAGCTCAGATGGCGGTGGACATGCAAACTCTGACCCCAG +TTGGGAGGTTGATAACCGCTAACCCCGTAATCACTGAAAGCACTGAGAACTCTAAGATGA +TGCTGGAACTTGATCCACCATTTGGGGACTCTTACATTGTCATAGGAGTCGGGGAGAAGA +AGATCACCCACCACTGGCACAGGAGTGGCAGCACCATTGGAAAAGCATTTGAAGCCACTG +TGAGAGGTGCCAAGAGAATGGCAGTCTTGGGAGACACAGCCTGGGACTTTGGATCAGTTG +GAGGCGCTCTCAACTCATTGGGCAAGGGCATCCATCAAATTTTTGGAGCAGCTTTCAAAT +CATTGTTTGGAGGAATGTCCTGGTTCTCACAAATTCTCATTGGAACGTTGCTGATGTGGT +TGGGTCTGAACACAAAGAATGGATCTATTTCCCTTATGTGCTTGGCCTTAGGGGGAGTGT +TGATCTTCTTATCCACAGCCGTCTCTGCTGATGTGGGGTGCTCGGTGGACTTCTCAAAGA +AGGAGACGAGATGTGGTACAGGGGTGTTCGTCTATAACGACGTTGAAGCCTGGAGGGACA +GGTACAAGTACCATCCTGACTCCCCCCGTAGATTGGCAGCAGCAGTCAAGCAAGCCTGGG +AAGATGGTATCTGCGGGATCTCCTCTGTTTCAAGAATGGAAAACATCATGTGGAGATCAG +TAGAAGGGGAGCTCAACGCAATCCTGGAAGAGAATGGAGTTCAACTGACGGTCGTTGTGG +GATCTGTAAAAAACCCCATGTGGAGAGGTCCACAGAGATTGCCCGTGCCTGTGAACGAGC +TGCCCCACGGCTGGAAGGCTTGGGGGAAATCGTACTTCGTCAGAGCAGCAAAGACAAATA +ACAGCTTTGTCGTGGATGGTGACACACTGAAAGAATGCCCACTCAAACATAGAGCATGGA +ACAGCTTTCTTGTGGAGGATCATGGGTTCGGGGTATTTCACACTAGTGTCTGGCTCAAGG +TTAGAGAAGATTATTCATTAGAGTGTGATCCAGCCGTTATTGGAACAGCTGTTAAGGGAA +AGGAGGCTGTACACAGTGATCTAGGCTACTGGATTGAGAGTGAGAAGAATGACACATGGA +GGCTGAAGAGGGCCCATCTGATCGAGATGAAAACATGTGAATGGCCAAAGTCCCACACAT +TGTGGACAGATGGAATAGAAGAGAGTGATCTGATCATACCCAAGTCTTTAGCTGGGCCAC +TCAGCCATCACAATACCAGAGAGGGCTACAGGACCCAAATGAAAGGGCCATGGCACAGTG +AAGAGCTTGAAATTCGGTTTGAGGAATGCCCAGGCACTAAGGTCCACGTGGAGGAAACAT +GTGGAACAAGAGGACCATCTCTGAGATCAACCACTGCAAGCGGAAGGGTGATCGAGGAAT +GGTGCTGCAGGGAGTGCACAATGCCCCCACTGTCGTTCTGGGCTAAAGATGGCTGTTGGT +ATGGAATGGAGATAAGGCCCAGGAAAGAACCAGAAAGCAACTTAGTAAGGTCAATGGTGA +CTGCAGGATCAACTGATCACATGGATCACTTCTCCCTTGGAGTGCTTGTGATTCTGCTCA +TGGTGCAGGAAGGGCTGAAGAAGAGAATGACCACAAAGATCATCATAAGCACATCAATGG +CAGTGCTGGTAGCTATGATCCTGGGAGGATTTTCAATGAGTGACCTGGCTAAGCTTGCAA +TCTTGATGGGTGCCACCTTCGCGGAAATGAACACTGGAGGAGATGTAGCTCATCTGGCGC +TGATAGCGGCATTCAAAGTCAGACCAGCGTTGCTGGTATCCTTCATCTTCAGAGCTAATT +GGACACCCCGTGAAAGCATGCTGCTGGCCTTGGCCTCGTGTCTTTTGCAAACTGCGATCT +CCGCCTTGGAGGGCGACCTGATGGTTCTCATCAATGGTTTTGCTTTGGCCTGGTTGGCAA +TACGAGCGATGGTTGTTCCACGCACTGACAACATCACCTTGGCAATCCTGGCTGCTCTGA +CACCACTGGCCCGGGGCACACTGCTTGTGGCGTGGAGAGCAGGCCTTGCTACTTGCGGGG +GGTTTATGCTCCTCTCTCTGAAGGGAAAAGGCAGTGTGAAGAAGAACTTACCATTTGTCA +TGGCCCTGGGACTAACCGCTGTGAGGCTGGTCGACCCCATCAACGTGGTGGGACTGCTGT +TGCTCACAAGGAGTGGGAAGCGGAGCTGGCCCCCTAGCGAAGTACTCACAGCTGTTGGCC +TGATATGCGCATTGGCTGGAGGGTTCGCCAAGGCAGATATAGAGATGGCTGGGCCCATGG +CCGCGGTTGGTCTGCTAATTGTCAGTTACGTGGTCTCAGGAAAGAGTGTGGACATGTACA +TTGAAAGAGCAGGTGACATCACATGGGAAAAAGATGCGGAAGTCACTGGAAACAGTCCCC +GGCTCGATGTGGCGCTAGATGAGAGTGGTGATTTCTCCCTGGTGGAGGATGACGGTCCCC +CCATGAGAGAGATCATACTCAAGGTGGTCCTGATGACCATCTGTGGCATGAACCCAATAG +CCATACCCTTTGCAGCTGGAGCGTGGTACGTATACGTGAAGACTGGAAAAAGGAGTGGTG +CGCTATGGGATGTGCCTGCTCCCAAGGAAGTAAAAAAGGGGGAGACCACAGATGGAGTGT +ACAGAGTAATGACTCGTAGACTGCTAGGTTCAACACAAGTTGGAGTGGGAGTTATGCAAG +AGGGGGTCTTTCACACTATGTGGCACGTCACAAAAGGATCCGCGCTGAGAAGCGGTGAAG +GGAGACTTGATCCATACTGGGGAGATGTCAAGCAGGATCTGGTGTCATACTGTGGTCCAT +GGAAGCTAGATGCCGCCTGGGACGGGCACAGCGAGGTGCAGCTCTTGGCCGTGCCCCCCG +GAGAGAGAGCGAGGAACATCCAGACTCTGCCCGGAATATTTAAGACAAAGGATGGGGACA +TTGGAGCGGTTGCGCTGGATTACCCAGCAGGAACTTCAGGATCTCCAATCCTAGACAAGT +GTGGGAGAGTGATAGGACTTTATGGCAATGGGGTCGTGATCAAAAATGGGAGTTATGTTA +GTGCCATCACCCAAGGGAGGAGGGAGGAAGAGACTCCTGTTGAGTGCTTCGAGCCTTCGA +TGCTGAAGAAGAAGCAGCTAACTGTCTTAGACTTGCATCCTGGAGCTGGGAAAACCAGGA +GAGTTCTTCCTGAAATAGTCCGTGAAGCCATAAAAACAAGACTCCGTACTGTGATCTTAG +CTCCAACCAGGGTTGTCGCTGCTGAAATGGAGGAAGCCCTTAGAGGGCTTCCAGTGCGTT +ATATGACAACAGCAGTCAATGTCACCCACTCTGGAACAGAAATCGTCGACTTAATGTGCC +ATGCCACCTTCACTTCACGTCTACTACAGCCAATCAGAGTCCCCAACTATAATCTGTATA +TTATGGATGAGGCCCACTTCACAGATCCCTCAAGTATAGCAGCAAGAGGATACATTTCAA +CAAGGGTTGAGATGGGCGAGGCGGCTGCCATCTTCATGACCGCCACGCCACCAGGAACCC +GTGACGCATTTCCGGACTCCAACTCACCAATTATGGACACCGAAGTGGAAGTCCCAGAGA +GAGCCTGGAGCTCAGGCTTTGATTGGGTGACGGATCATTCTGGAAAAACAGTTTGGTTTG +TTCCAAGCGTGAGGAACGGCAATGAGATCGCAGCTTGTCTGACAAAGGCTGGAAAACGGG +TCATACAGCTCAGCAGAAAGACTTTTGAGACAGAGTTCCAGAAAACAAAACATCAAGAGT +GGGACTTTGTCGTGACAACTGACATTTCAGAGATGGGCGCCAACTTTAAAGCTGACCGTG +TCATAGATTCCAGGAGATGCCTAAAGCCGGTCATACTTGATGGCGAGAGAGTCATTCTGG +CTGGACCCATGCCTGTCACACATGCCAGCGCTGCCCAGAGGAGGGGGCGCATAGGCAGGA +ATCCCAATAAACCTGGAGATGAGTATCTGTATGGAGGTGGGTGCGCAGAGACTGACGAAG +ACCATGCACACTGGCTTGAAGCAAGAATGCTCCTTGACAATATTTACCTCCAAGATGGCC +TCATAGCCTCGCTCTATCGACCTGAGGCCGACAAAGTAGCAGCCATTGAGGGAGAGTTCA +AGCTTAGGACGGAGCAAAGGAAGACCTTTGTGGAACTCATGAAAAGAGGAGATCTTCCTG +TTTGGCTGGCCTATCAGGTTGCATCTGCCGGAATAACCTACACAGATAGAAGATGGTGCT +TTGATGGCACGACCAACAACACCATAATGGAAGACAGTGTGCCGGCAGAGGTGTGGACCA +GACACGGAGAGAAAAGAGTGCTCAAACCGAGGTGGATGGACGCCAGAGTTTGTTCAGATC +ATGCGGCCCTGAAGTCATTCAAGGAGTTTGCCGCTGGGAAAAGAGGAGCGGCTTTTGGAG +TGATGGAAGCCCTGGGAACACTGCCAGGACACATGACAGAGAGATTCCAGGAAGCCATTG +ACAACCTCGCTGTGCTCATGCGGGCAGAGACTGGAAGCAGGCCTTACAAAGCCGCGGCGG +CCCAATTGCCGGAGACCCTAGAGACCATTATGCTTTTGGGGTTGCTGGGAACAGTCTCGT +TGGGAATCTTTTTCGTCTTGATGAGGAACAAGGGCATAGGGAAGATGGGCTTTGGAATGG +TGACTCTTGGGGCCAGCGCATGGCTCATGTGGCTCTCGGAAATTGAGCCAGCCAGAATTG +CATGTGTCCTCATTGTTGTGTTCCTATTGCTGGTGGTGCTCATACCTGAGCCAGAAAAGC +AAAGATCTCCCCAGGACAACCAAATGGCAATCATCATCATGGTAGCAGTAGGTCTTCTGG +GCTTGATTACCGCCAATGAACTCGGATGGTTGGAGAGAACAAAGAGTGACCTAAGCCATC +TAATGGGAAGGAGAGAGGAGGGGGCAACCATAGGATTCTCAATGGACATTGACCTGCGGC +CAGCCTCAGCTTGGGCCATCTATGCTGCCTTGACAACTTTCATTACCCCAGCCGTCCAAC +ATGCAGTGACCACTTCATACAACAACTACTCCTTAATGGCGATGGCCACGCAAGCTGGAG +TGTTGTTTGGTATGGGCAAAGGGATGCCATTCTACGCATGGGACTTTGGAGTCCCGCTGC +TAATGATAGGTTGCTACTCACAATTAACACCCCTGACCCTAATAGTGGCCATCATTTTGC +TCGTGGCGCACTACATGTACTTGATCCCAGGGCTGCAGGCAGCAGCTGCGCGTGCTGCCC +AGAAGAGAACGGCAGCTGGCATCATGAAGAACCCTGTTGTGGATGGAATAGTGGTGACTG +ACATTGACACAATGACAATTGACCCCCAAGTGGAGAAAAAGATGGGACAGGTGCTACTCA +TAGCAGTAGCCGTCTCCAGCGCCATACTGTCGCGGACCGCCTGGGGGTGGGGGGAGGCTG +GGGCCCTGATCACAGCCGCAACTTCCACTTTGTGGGAAGGCTCTCCGAACAAGTACTGGA +ACTCCTCTACAGCCACTTCACTGTGTAACATTTTTAGGGGAAGTTACTTGGCTGGAGCTT +CTCTAATCTACACAGTAACAAGAAACGCTGGCTTGGTCAAGAGACGTGGGGGTGGAACAG +GAGAGACCCTGGGAGAGAAATGGAAGGCCCGCTTGAACCAGATGTCGGCCCTGGAGTTCT +ACTCCTACAAAAAGTCAGGCATCACCGAGGTGTGCAGAGAAGAGGCCCGCCGCGCCCTCA +AGGACGGTGTGGCAACGGGAGGCCATGCTGTGTCCCGAGGAAGTGCAAAGCTGAGATGGT +TGGTGGAGCGGGGATACCTGCAGCCCTATGGAAAGGTCATTGATCTTGGATGTGGCAGAG +GGGGCTGGAGTTACTACGCCGCCACCATCCGCAAAGTTCAAGAAGTGAAAGGATACACAA +AAGGAGGCCCTGGTCATGAAGAACCCGTGTTGGTGCAAAGCTATGGGTGGAACATAGTCC +GTCTTAAGAGTGGGGTGGACGTCTTTCATATGGCGGCTGAGCCGTGTGACACGTTGCTGT +GTGACATAGGTGAGTCATCATCTAGTCCTGAAGTGGAAGAAGCACGGACGCTCAGAGTCC +TCTCCATGGTGGGGGATTGGCTTGAAAAAAGACCAGGAGCCTTTTGTATAAAAGTGTTGT +GCCCATACACCAGCACTATGATGGAAACCCTGGAGCGACTGCAGCGTAGGTATGGGGGAG +GACTGGTCAGAGTGCCACTCTCCCGCAACTCTACACATGAGATGTACTGGGTCTCTGGAG +CGAAAAGCAACACCATAAAAAGTGTGTCCACCACGAGCCAGCTCCTCTTGGGGCGCATGG +ACGGGCCTAGGAGGCCAGTGAAATATGAGGAGGATGTGAATCTCGGCTCTGGCACGCGGG +CTGTGGTAAGCTGCGCTGAAGCTCCCAACATGAAGATCATTGGTAACCGCATTGAAAGGA +TCCGCAGTGAGCACGCGGAAACGTGGTTCTTTGACGAGAACCACCCATATAGGACATGGG +CTTACCATGGAAGCTATGAGGCCCCCACACAAGGGTCAGCGTCCTCTCTAATAAACGGGG +TTGTCAGGCTCCTGTCAAAACCCTGGGATGTGGTGACTGGAGTCACAGGAATAGCCATGA +CCGACACCACACCGTATGGTCAGCAAAGAGTTTTCAAGGAAAAAGTGGACACTAGGGTGC +CAGACCCCCAAGAAGGCACTCGTCAGGTTATGAGCATGGTCTCTTCCTGGTTGTGGAAAG +AGCTAGGCAAACACAAACGGCCACGAGTCTGTACCAAAGAAGAGTTCATCAACAAGGTGC +GTAGCAATGCAGCATTAGGGGCAATATTTGAAGAGGAAAAAGAGTGGAAGACTGCAGTGG +AAGCTGTGAACGATCCAAGGTTCTGGGCTCTAGTGGACAAGGAAAGAGAGCACCACCTGA +GAGGAGAGTGCCAGAGTTGTGTGTACAACATGATGGGAAAAAGAGAAAAGAAACAAGGGG +AATTTGGAAAGGCCAAGGGCAGCCGCGCCATCTGGTATATGTGGCTAGGGGCTAGATTTC +TAGAGTTCGAAGCCCTTGGATTCTTGAACGAGGATCACTGGATGGGGAGAGAGAACTCAG +GAGGTGGTGTTGAAGGGCTGGGATTACAAAGACTCGGATATGTCCTAGAAGAGATGAGTC +GCATACCAGGAGGAAGGATGTATGCAGATGACACTGCTGGCTGGGACACCCGCATTAGCA +GGTTTGATCTGGAGAATGAAGCTCTAATCACCAACCAAATGGAGAAAGGGCACAGGGCCT +TGGCATTGGCCATAATCAAGTACACATACCAAAACAAAGTGGTAAAGGTCCTTAGACCAG +CTGAAAAAGGGAAAACAGTTATGGACATTATTTCGAGACAAGACCAAAGGGGGAGCGGAC +AAGTTGTCACTTACGCTCTTAACACATTTACCAACCTAGTGGTGCAACTCATTCGGAATA +TGGAGGCTGAGGAAGTTCTAGAGATGCAAGACTTGTGGCTGCTGCGGAGGTCAGAGAAAG +TGACCAACTGGTTGCAGAGCAACGGATGGGATAGGCTCAAACGAATGGCAGTCAGTGGAG +ATGATTGCGTTGTGAAGCCAATTGATGATAGGTTTGCACATGCCCTCAGGTTCTTGAATG +ATATGGGAAAAGTTAGGAAGGACACACAAGAGTGGAAACCCTCAACTGGATGGGACAACT +GGGAAGAAGTTCCGTTTTGCTCCCACCACTTCAACAAGCTCCATCTCAAGGACGGGAGGT +CCATTGTGGTTCCCTGCCGCCACCAAGATGAACTGATTGGCCGGGCCCGCGTCTCTCCAG +GGGCGGGATGGAGCATCCGGGAGACTGCTTGCCTAGCAAAATCATATGCGCAAATGTGGC +AGCTCCTTTATTTCCACAGAAGGGACCTCCGACTGATGGCCAATGCCATTTGTTCATCTG +TGCCAGTTGACTGGGTTCCAACTGGGAGAACTACCTGGTCAATCCATGGAAAGGGAGAAT +GGATGACCACTGAAGACATGCTTGTGGTGTGGAACAGAGTGTGGATTGAGGAGAACGACC +ACATGGAAGACAAGACCCCAGTTGCGAAATGGACAGACATTCCCTATTTGGGAAAAAGGG +AAGACTTGTGGTGTGGATCTCTCATAGGGCACAGACCGCGCACCACCTGGGCTGAGAACA +TTAAAAACACAGTCAACATGGTGCGCAGGATCATAGGTGATGAAGAAAAGTACATGGACT +ACCTATCCACCCAAGTTCGCTACTTGGGTGAAGAAGGGTCTACACCTGGAGTGCTGTAAG +CACCAATCTTAATGTTGTCAGGCCTGCTAGTCAGCCACAGCTTGGGGAAAGCTGTGCAGC +CTGTGACCCCCCCAGGAGAAGCTGGGAAACCAAGCCTATAGTCAGGCCGAGAACGCCATG +GCACGGAAGAAGCCATGCTGCCTGTGAGCCCCTCAGAGGACACTGAGTCAAAAAACCCCA +CGCGCTTGGAGGCGCAGGATGGGAAAAGAAGGTGGCGACCTTCCCCACCCTTCAATCTGG +GGCCTGAACTGGAGATCAGCTGTGGATCTCCAGAAGAGGGACTAGTGGTTAGAGGAGACC +CCCCGGAAAACGCAAAACAGCATATTGACGCTGGGAAAGACCAGAGACTCCATGAATTTC +CACCACGCTGGCCGCCAGGCACAGATCGCCGAATAGCGGCGGCCGGTGTGGGGAAATCCA +TGGGTCT- +>KU853012.1|Dominican_Republic|2016-02-01 +AGTTGTTGATCTGTGTGAATCAGACTGCGACAGTTCGAGTTTGAAGCGAAAGCTAGCAAC +AGTATCAACAGGTTTTATTTTGGATTTGGAAACGAGAGTTTCTGGTCATGAAAAACCCAA +AAAAGAAATCCGGAGGATTCCGGATTGTCAATATGCTAAAACGCGGAGTAGCCCGTGTGA +GCCCCTTTGGGGGCTTGAAGAGGCTGCCAGCCGGACTTCTGCTGGGTCATGGGCCCATCA +GGATGGTCTTGGCGATTCTAGCCTTTTTGAGATTCACGGCAATCAAGCCATCACTGGGTC +TCATCAATAGATGGGGTTCAGTGGGGAAAAAAGAGGCTATGGAAATAATAAAGAAGTTCA +AGAAAGATCTGGCTGCCATGCTGAGAATAATCAATGCTAGGAAGGAGAAGAAGAGACGAG +GCGCAGATACTAGTGTCGGAATTGTTGGCCTCCTGCTGACCACAGCTATGGCAGCGGAGG +TCACTAGACGTGGGAGTGCATACTACATGTACTTGGACAGAAACGATGCTGGGGAGGCCA +TATCTTTTCCAACCACATTGGGGATGAATAAGTGTTATATACAGATCATGGATCTTGGAC +ACATGTGTGATGCCACCATGAGCTATGAATGCCCTATGCTGGATGAGGGGGTGGAACCAG +ATGACGTCGATTGTTGGTGCAACACGACGTCAACTTGGGTTGTGTACGGAACCTGCCATC +ACAAAAAAGGTGAAGCACGGAGATCTAGAAGAGCTGTGACGCTCCCCTCCCATTCCACTA +GGAAGCTGCAAACGCGGTCGCAAACCTGGTTGGAATCAAGAGAATACACAAAGCACTTGA +TTAGAGTCGAAAATTGGATATTCAGGAACCCTGGCTTCGCGTTAGCAGCAGCTGCCATCG +CTTGGCTTTTGGGAAGCTCAACGAGCCAAAAAGTCATATACTTGGTCATGATACTGCTGA +TTGCCCCGGCATACAGCATCAGGTGCATAGGAGTCAGCAATAGGGACTTTGTGGAAGGTA +TGTCAGGTGGGACTTGGGTTGATGTTGTCTTGGAACATGGAGGTTGTGTCACCGTAATGG +CACAGGACAAACCGACTGTCGACATAGAGCTGGTTACAACAACAGTCAGCAACATGGCGG +AGGTAAGATCCTACTGCTATGAGGCATCAATATCAGACATGGCTTCGGACAGCCGCTGCC +CAACACAAGGTGAAGCCTACCTTGACAAGCAATCAGACACTCAATATGTCTGCAAAAGAA +CGTTAGTGGACAGAGGCTGGGGAAATGGATGTGGACTTTTTGGCAAAGGGAGCCTGGTGA +CATGCGCTAAGTTTGCATGCTCCAAGAAAATGACCGGGAAGAGCATCCAGCCAGAGAATC +TGGAGTACCGGATAATGCTGTCAGTTCATGGCTCCCAGCACAGTGGGATGATCGTTAATG +ACACTGGACATGAAACTGATGAGAATAGAGCGAAGGTTGAGATAACGCCCAATTCACCAA +GAGCCGAAGCCACCCTGGGGGGTTTTGGAAGCCTAGGACTTGATTGTGAACCGAGGACAG +GCCTTGACTTTTCAGATTTGTATTACTTGACTATGAATAACAAGCACTGGTTGGTTCACA +AGGAGTGGTTCCACGACATTCCATTACCTTGGCACGCTGGGGCAGACACCGGAACTCCAC +ACTGGAACAACAAAGAAGCACTGGTAGAGTTCAAGGACGCACATGCCAAAAGGCAAACTG +TCGTGGTTCTAGGGAGTCAAGAAGGAGCAGTTCACACGGCCCTTGCTGGAGCTCTGGAGG +CTGAGATGGATGGTGCAAAGGGAAGGCTGTCCTCTGGCCACTTGAAATGTCGCCTGAAAA +TGGATAAACTTAGATTGAAGGGCGTGTCATACTCCTTGTGTACCGCAGCGTTCACATTCA +CCAAGATCCCGGCTGAAACACTGCACGGGACAGTCACAGTGGAGGTACAGTACGCAGGGA +CAGATGGACCTTGCAAGGTTCCAGCTCAGATGGCGGTGGACATGCAAACTCTGACCCCAG +TTGGGAGGTTGATAACCGCCAACCCCGTAATCACTGAAAGCACTGAGAACTCTAAGATGA +TGCTGGAACTTGATCCACCATTTGGGGACTCTTACATTGTCATAGGAGTCGGGGAGAAGA +AGATCACCCACCACTGGCACAGGAGTGGCAGCACCATTGGAAAAGCATTTGAAGCCACTG +TGAGAGGTGCCAAGAGAATGGCAGTCTTGGGAGACACAGCCTGGGACTTTGGATCAGTTG +GAGGCGCTCTCAACTCATTGGGCAAGGGCATCCATCAAATTTTTGGAGCAGCTTTCAAAT +CATTGTTTGGAGGAATGTCCTGGTTCTCACAAATCCTCATTGGAACGTTGCTGATGTGGT +TGGGTCTGAACACAAAGAATGGATCTATTTCCCTCATGTGCTTGGCCTTAGGGGGAGTGT +TGATCTTCTTATCCACAGCCGTCTCTGCTGATGTGGGGTGCTCGGTGGACTTCTCAAAGA +AGGAGACGAGATGCGGTACAGGGGTGTTCGTCTATAACGACGTTGAAGCCTGGAGGGACA +GGTACAAGTACCATCCTGACTCCCCCCGTAGATTGGCAGCAGCAGTCAAGCAAGCCTGGG +AAGATGGTATCTGCGGGATCTCCTCTGTTTCAAGAATGGAAAACATCATGTGGAGATCAG +TAGAAGGGGAGCTCAATGCAATCCTGGAAGAGAATGGAGTTCAACTGACGGTCGTTGTGG +GATCTGTAAAAAACCCCATGTGGAGAGGTCCACAGAGATTGCCCGTGCCTGTGAACGAGC +TGCCCCACGGCTGGAAGGCTTGGGGGAAATCGTACTTCGTTAGAGCAGCAAAGACAAATA +ACAGCTTTGTCGTGGATGGTGACACACTGAAGGAATGCCCACTCAAACATAGAGCATGGA +ACAGCTTTCTTGTGGAGGATCATGGGTTCGGGGTATTTCACACTAGTGTCTGGCTCAAGG +TTAGAGAAGATTATTCATTAGAGTGTGATCCAGCCGTTATTGGAACAGCTGTTAAGGGAA +AGGAGGCTGTACACAGTGATCTAGGCTACTGGATTGAGAGTGAGAAGAATGACACATGGA +GGCTGAAGAGGGCCCATCTGATCGAGATGAAAACATGTGAATGGCCAAAGTCCCACACAT +TGTGGACAGATGGAATAGAAGAGAGTGATCTGATCATACCCAAGTCTTTAGCTGGGCCAC +TCAGCCATCACAATACCAGAGAGGGCTACAGGACCCAAATGAAAGGGCCATGGCACAGTG +AAGAGCTTGAAATTCGGTTTGAGGAATGCCCAGGCACTAAGGTCCACGTGGAGGAAACAT +GTGGAACAAGAGGACCATCTCTGAGATCAACCACTGCAAGCGGAAGGGTGATCGAGGAAT +GGTGCTGCAGGGAGTGCACAATGCCCCCACTGTCGTTCCGGGCTAAAGATGGCTGTTGGT +ATGGAATGGAGATAAGGCCCAGGAAAGAACCAGAAAGCAACTTAGTAAGGTCAGTGGTGA +CTGCAGGATCAACTGATCACATGGATCACTTCTCCCTTGGAGTGCTTGTGATTCTGCTCA +TGGTGCAGGAAGGGCTGAAGAAGAGAATGACCACAAAGATCATCATAAGCACATCRATGG +CAGTGCTGGTAGCTATGATCCTGGGAGGATTTTCAATGAGTGACCTGGCTAAGCTTGCAA +TTTTGATGGGTGCCACCTTCGCGGAAATGAACACTGGAGGAGATGTAGCTCATCTGGCGC +TGATAGCGGCATTCAAAGTCAGACCAGCGTTGCTGGTATCTTTCATCTTCAGAGCTAATT +GGACACCCCGTGAAAGCATGCTGCTGGCCTTGGCCTCGTGTCTTTTGCAAACTGCGATCT +CCGCCTTGGAAGGCGACCTGATGGTTCTCATCAATGGTTTTGCTTTGGCCTGGTTGGCAA +TACGAGCGATGGTTGTTCCACGCACTGATAACATCACCTTGGCAATCCTGGCTGCTCTGA +CACCACTGGCCCGGGGCACACTGCTTGTGGCGTGGAGAGCAGGCCTTGCTACTTGCGGGG +GGTTTATGCTCCTCTCTCTGAAGGGAAAAGGCAGTGTGAAGAAGAACTTACCATTTGTCA +TGGCCCTGGGACTAACCGCTGTGAGGCTGGTCGACCCCATCAACGTGGTGGGACTGCTGT +TGCTCACAAGGAGTGGGAAGCGGAGCTGGCCCCCTAGCGAAGTACTCACAGCTGTTGGCC +TGATATGCGCATTGGCTGGAGGGTTCGCCAAGGCAGATATAGAGATGGCTGGGCCCATGG +CCGCAGTCGGTCTGCTAATTGTCAGTTACGTGGTCTCAGGAAAGAGTGTGGACATGTACA +TTGAAAGAGCAGGTGACATCACATGGGAAAAAGATGCGGAAGTCACTGGAAACAGTCCCC +GGCTCGATGTGGCGCTAGATGAGAGTGGTGATTTCTCCCTGGTGGAGGATGACGGTCCCC +CCATGAGAGAGATCATACTCAAGGTGGTCCTGATGACCATCTGTGGCATGAACCCAATAG +CCATACCCTTTGCAGCTGGAGCGTGGTACGTATACGTGAAGACTGGAAAAAGGAGTGGTG +CTCTATGGGATGTGCCTGCTCCCAAGGAAGTAAAAAAGGGGGAGACCACAGATGGAGTGT +ACAGAGTAATGACTCGTAGACTGCTAGGTTCAACACAAGTTGGAGTGGGAGTTATGCAAG +AGGGGGTCTTTCACACTATGTGGCACGTCACAAAAGGATCCGCGCTGAGAAGCGGTGAAG +GGAGACTTGATCCATACTGGGGAGATGTCAAGCAGGATCTGGTGTCATACTGTGGTCCAT +GGAAGCTAGATGCCGCCTGGGACGGGCACAGCGAGGTGCAGCTCTTGGCCGTGCCCCCCG +GAGAGAGAGCGAGGAACATCCAGACTCTGCCCGGAATATTTAAGACAAAGGATGGGGACA +TTGGAGCGGTTGCGCTGGATTACCCAGCAGGAACTTCAGGATCTCCAATCCTAGACAAGT +GTGGGAGAGTGATAGGACTTTATGGCAATGGGGTCGTGATCAAAAATGGGAGTTATGTTA +GTGCCATCACCCAAGGGAGGAGGGAGGAAGAGACTCCTGTTGAGTGCTTCGAGCCTTCGA +TGCTGAAGAAGAAGCAGCTAACTGTCTTAGACTTGCATCCTGGAGCTGGGAAAACCAGGA +GAGTTCTTCCTGAAATAGTCCGTGAAGCTATAAAAACAAGACTCCGTACTGTGATCTTAG +CTCCAACCAGGGTTGTCGCTGCTGAAATGGAGGAAGCCCTTAGAGGGCTTCCAGTGCGTT +ATATGACAACAGCAGTCAATGTCACCCATTCTGGAACAGAAATCGTCGACTTAATGTGCC +ATGCCACCTTCACTTCACGTCTACTACAGCCAATCAGAGTCCCCAACTATAATCTGTACA +TTATGGATGAGGCCCACTTCACAGATCCCTCAAGTATAGCAGCAAGAGGATACATTTCAA +CAAGGGTTGAGATGGGCGAGGCGGCTGCCATCTTCATGACCGCCACGCCACCAGGAACCC +GTGACGCATTTCCGGACTCCAACTCACCAATTATGGACACCGAAGTGGAAGTCCCAGAGA +GAGCCTGGAGCTCAGGCTTTGATTGGGTGACGGATCATTCTGGAAAAACAGTTTGGTTTG +TTCCAAGCGTGAGGAACGGCAATGAGATCGCAGCTTGTCTGACAAAGGCTGGAAAACGGG +TCATACAGCTCAGCAGAAAGACTTTTGAGACAGAGTTCCAGAAAACAAAACATCAAGAGT +GGGACTTTGTCGTGACAACCGACATTTCAGAGATGGGCGCCAACTTTAAAGCTGACCGTG +TCATAGATTCCAGGAGATGCCTAAAGCCGGTCATACTTGATGGCGAGAGAGTCATTCTGG +CTGGACCCATGCCTGTCACACATGCCAGCGCTGCCCAGAGGAGGGGGCGCATAGGCAGGA +ATCCCAACAAACCTGGAGATGAGTATCTGTATGGAGGTGGGTGCGCAGAGACTGACGAAG +ACCATGCACACTGGCTTGAAGCAAGAATGCTCCTTGACAATATTTACCTCCAAGATGGCC +TCATAGCCTCGCTCTATCGACCTGAGGCCGACAAAGTAGCAGCCATTGAGGGAGAGTTCA +AGCTTAGGACGGAGCAAAGGAAGACCTTTGTGGAACTCATGAAAAGAGGAGATCTTCCTG +TTTGGCTGGCCTATCAGGTTGCATCTGCCGGAATAACTTACACAGATAGAAGATGGTGCT +TTGATGGCACGACCAACAACACCATAATGGAAGACAGTGTGCCGGCAGAGGTGTGGACCA +GACACGGAGAGAAAAGAGTGCTCAAACCGAGGTGGATGGACGCCAGAGTTTGTTCAGATC +ATGCGGCCCTGAAGTCATTCAAGGAGTTTGCCGCTGGGAAAAGAGGAGCGGCTTTTGGAG +TGATGGAAGCCCTGGGAACACTGCCAGGACACATGACAGAGAGATTCCAGGAAGCCATTG +ACAACCTCGCTGTGCTCATGCGGGCAGAGACTGGAAGCAGGCCTTACAAAGCCGCGGCGG +CCCAATTGCCGGAGACCCTAGAGACCATTATGCTTTTGGGGTTGCTGGGAACAGTCTCGC +TGGGAATCTTTTTCGTCTTGATGAGGAACAAGGGCATAGGGAAGATGGGCTTTGGAATGG +TGACTCTTGGGGCCAGCGCATGGCTCATGTGGCTCTCGGAAATTGAGCCAGCCAGAATTG +CATGTGTCCTCATTGTTGTGTTCCTACTGCTGGTGGTGCTCATACCTGAGCCAGAAAAGC +AAAGATCTCCCCAGGACAACCAAATGGCAATCATCATCATGGTAGCAGTAGGTCTTCTGG +GCTTGATCACCGCCAATGAACTCGGATGGTTGGAGAGAACAAAGAGTGACCTAAGCCATC +TAATGGGAAGGAGAGAGGAGGGAGCAACCATAGGATTCTCAATGGACATTGACCTGCGGC +CAGCCTCAGCTTGGGCCATCTATGCTGCCTTGACAACTTTCATTACCCCAGCCGTCCAAC +ATGCAGTGACCACTTCATACAACAACTACTCCTTAATGGCGATGGCCACGCAAGCTGGAG +TGTTGTTTGGTATGGGCAAAGGGATGCCATTCTACGCATGGGACTTTGGAGTCCCGCTGC +TAATGATAGGTTGCTACTCACAATTAACACCCCTGACCCTAATAGTGGCCATCATTTTGC +TCGTGGCGCACTACATGTACTTGATCCCAGGGCTGCAGGCAGCAGCTGCGCGTGCTGCCC +AGAAGAGAACGGCAGCTGGCATCATGAAGAACCCTGTTGTGGATGGAATAGTGGTGACTG +ACATTGACACAATGACAATTGACCCCCAAGTGGAGAAAAAGATGGGACAGGTGCTACTCA +TAGCAGTAGCCGTCTCCAGCGCCATACTGTCGCGGACCGCCTGGGGGTGGGGGGAGGCTG +GGGCCCTGATCACAGCCGCAACTTCCACTTTGTGGGAAGGCTCTCCGAACAAGTACTGGA +ACTCCTCTACAGCCACTTCACTGTGTAACATTTTTAGGGGAAGTTACTTGGCTGGAGCTT +CTCTAATCTACACAGTAACAAGAAACGCTGGCTTGGTCAAGAGACGTGGGGGTGGAACAG +GAGAGACCCTGGGAGAGAAATGGAAGGCCCGCTTGAACCAGATGTCGGCCCTGGAGTTCT +ACTCCTACAAAAAGTCAGGCATCACCGAGGTGTGCAGAGAAGAGGCCCGCCGCGCCCTCA +AGGACGGTGTGGCAACGGGAGGCCATGCTGTGTCCCGAGGAAGTGCAAAGCTGAGATGGT +TGGTGGAGCGGGGATACCTGCAGCCCTATGGAAAGGTCATTGATCTTGGATGTGGCAGAG +GGGGCTGGAGTTACTACGCCGCCACCATCCGCAAAGTTCAAGAAGTGAAAGGATACACAA +AAGGAGGCCCTGGTCATGAAGAACCCGTGTTGGTGCAAAGCTATGGGTGGAACATAGTCC +GTCTCAAGAGTGGGGTGGACGTCTTTCATATGGCGGCTGAGCCGTGTGACACGTTGCTGT +GTGACATAGGTGAGTCATCATCTAGTCCTGAAGTGGAAGAAGCACGGACGCTCAGAGTCC +TCTCCATGGTGGGGGATTGGCTTGAAAAAAGACCAGGAGCCTTTTGTATAAAAGTGTTGT +GCCCATACACCAGCACTATGATGGAAACCCTGGAGCGACTGCAGCGTAGGTATGGGGGAG +GACTGGTCAGAGTGCCACTCTCCCGCAACTCTACACATGAGATGTACTGGGTCTCTGGAG +CGAAAAGCAACACCATAAAAAGTGTGTCCACCACGAGCCAGCTCCTCTTGGGGCGCATGG +ACGGGCCTAGGAGGCCAGTGAAATATGAGGAGGATGTGAATCTCGGCTCTGGCACGCGGG +CTGTGGTAAGCTGCGCTGAAGCTCCCAACATGAAGATCATTGGTAACCGCATTGAAAGGA +TCCGCAGTGAGCACGCGGAAACGTGGTTCTTTGACGAGAACCACCCATATAGGACATGGG +CTTACCATGGAAGCTATGAGGCCCCCACACAAGGGTCAGCATCCTCTCTAGTAAACGGGG +TTGTCAGGCTCCTGTCAAAACCCTGGGATGTGGTGACTGGAGTCACAGGAATAGCCATGA +CCGACACCACACCGTATGGTCAGCAAAGAGTTTTCAAGGAAAAAGTGGACACTAGGGTGC +CAGACCCCCAAGAAGGCACTCGTCAGGTTATGAGCATGGTCTCTTCCTGGTTGTGGAAAG +AGCTAGGCAAACACAAACGGCCACGAGTCTGTACCAAAGAAGAGTTCATCAACAAGGTTC +GTAGCAATGCAGCATTAGGGGCAATATTTGAAGAGGAAAAAGAGTGGAAGACTGCAGTGG +AAGCTGTGAACGATCCAAGGTTCTGGGCTCTAGTGGACAAGGAAAGAGAGCACCACCTGA +GAGGAGAGTGCCAGAGTTGTGTGTACAACATGATGGGAAAAAGAGAAAAGAAACAAGGGG +AATTTGGAAAGGCCAAGGGCAGCCGCGCCATCTGGTATATGTGGCTAGGGGCTAGATTTC +TAGAGTTCGAAGCCCTTGGATTCTTGAACGAGGATCACTGGATGGGGAGAGAGAACTCAG +GAGGTGGTGTTGAAGGGCTGGGATTACAAAGACTCGGATATGTCCTAGAAGAGATGAGTC +GCATACCAGGAGGAAGGATGTATGCAGATGACACTGCTGGCTGGGATACCCGCATCAGCA +GGTTTGATCTAGAGAATGAAGCTCTAATCACCAACCAAATGGAGAAAGGGCACAGGGCCT +TGGCATTGGCCATAATCAAGTACACATACCAAAACAAAGTGGTAAAGGTCCTTAGACCAG +CTGAAAAAGGGAAAACAGTTATGGACATTATTTCGAGACAAGACCAAAGGGGGAGCGGAC +AAGTTGTCACTTACGCTCTTAACACATTTACCAACCTAGTGGTGCAACTCATTCGGAATA +TGGAGGCTGAGGAAGTTCTAGAGATGCAAGACTTGTGGCTGCTGCGGAGGTCAGAGAAAG +TGACCAACTGGTTGCAGAGCAACGGATGGGATAGGCTCAAACGAATGGCAGTCAGTGGAG +ATGATTGCGTTGTGAAGCCAATTGATGATAGGTTTGCACATGCCCTCAGGTTCTTGAATG +ATATGGGAAAAGTTAGGAAGGACACACAAGAGTGGAAACCCTCAACTGGATGGGACAACT +GGGAAGAAGTTCCGTTTTGCTCCCACCACTTCAACAAGCTCCATCTCAAGGACGGGAGGT +CCATTGTGGTTCCCTGCCGCCACCAAGATGAACTGATTGGCCGGGCCCGCGTCTCTCCAG +GGGCGGGATGGAGCATCCGGGAGACTGCTTGCCTAGCAAAATCATATGCGCAAATGTGGC +AGCTCCTTTATTTCCACAGAAGGGACCTCCGACTGATGGCCAATGCCATTTGTTCATCTG +TGCCAGTTGACTGGGTTCCAACTGGGAGAACTACCTGGTCAATCCATGGAAAGGGAGAAT +GGATGACCACTGAAGACATGCTTGTGGTGTGGAACAGAGTGTGGATTGAGGAGAACGACC +ACATGGAAGACAAGACCCCAGTTACGAAATGGACAGACATTCCCTATTTGGGGAAAAGGG +AAGACTTGTGGTGTGGATCTCTCATAGGGCACAGACCGCGCACCACCTGGGCTGAGAACA +TTAAAAACACAGTCAACATGGTGCGCAGGATCATAGGTGAGGAAGAAAAGTACATGGACT +ACCTATCCACCCAAGTTCGCTACTTGGGTGAAGAAGGGTCTACACCTGGARTGCTGTAAG +CACCAATCTTAATGTTGTCAGGCCTGCTAGTCAGCCACAGCTTGGGGAAAGCTGTGCAGC +CTGTGACCCCCCCAGGAGAAGCTGGGAAACCAAGCCTATAGTCAGGCCGAGAACGCCATG +GCACGGAAGAAGCCATGCTGCCTGTGAGCCCCTCAGAGGACACTGAGTCAAAAAACCCCA +CGCGCTTGGAGGCGCAGGATGGGAAAAGAAGGTGGCGACCTTCCCCACCCTTCAATCTGG +GGCCTGAACTGGAGAT-------------------------------------------- +------------------------------------------------------------ +------------------------------------------------------------ +-------- +>KU853013.1|Dominican_Republic|2016-02-01 +AGTTGTTGATCTGTGTGAATCAGACTGCGACAGTTCGAGTTTGAAGCGAAAGCTAGCAAC +AGTATCAACAGGTTTTATTTTGGATTTGGAAACGAGAGTTTCTGGTCATGAAAAACCCAA +AAAAGAAATCCGGAGGATTCCGGATTGTCAATATGCTAAAACGCGGAGTAGCCCGTGTGA +GCCCCTTTGGGGGCTTGAAGAGGCTGCCAGCCGGACTTCTGCTGGGTCATGGGCCCATCA +GGATGGTCTTGGCGATTCTAGCCTTTTTGAGATTCACGGCAATCAAGCCATCACTGGGTC +TCATCAATAGATGGGGTTCAGTGGGGAAAAAAGAGGCTATGGAAATAATAAAGAAGTTCA +AGAAAGATCTGGCTGCCATGCTGAGAATAATCAATGCTAGGAAGGAGAAGAAGAGACGAG +GCGCAGATACTAGTGTCGGAATTGTTGGCCTCCTGCTGACCACAGCTATGGCAGCGGAGG +TCACTAGACGTGGGAGTGCATACTACATGTACTTGGACAGAAACGATGCTGGGGAGGCCA +TATCTTTTCCAACCACATTGGGGATGAATAAGTGTTATATACAGATCATGGATCTTGGAC +ACATGTGTGATGCCACCATGAGCTATGAATGCCCTATGCTGGATGAGGGGGTGGAACCAG +ATGACGTCGATTGTTGGTGCAACACGACGTCAACTTGGGTTGTGTACGGAACCTGCCATC +ACAAAAAAGGTGAAGCACGGAGATCTAGAAGAGCTGTGACGCTCCCCTCCCATTCCACTA +GGAAGCTGCAAACGCGGTCGCAAACCTGGTTGGAATCAAGAGAATACACAAAGCACTTGA +TTAGAGTCGAAAATTGGATATTCAGGAACCCTGGCTTCGCGTTAGCAGCAGCTGCCATCG +CTTGGCTTTTGGGAAGCTCAACGAGCCAAAAAGTCATATACTTGGTCATGATACTGCTGA +TTGCCCCGGCATACAGCATCAGGTGCATAGGAGTCAGCAATAGGGACTTTGTGGAAGGTA +TGTCAGGTGGGACTTGGGTTGATGTTGTCTTGGAACATGGAGGTTGTGTCACCGTAATGG +CACAGGACAAACCGACTGTCGACATAGAGCTGGTTACAACAACAGTCAGCAACATGGCGG +AGGTAAGATCCTACTGCTATGAGGCATCAATATCAGACATGGCTTCGGACAGCCGCTGCC +CAACACAAGGTGAAGCCTACCTTGACAAGCAATCAGACACTCAATATGTCTGCAAAAGAA +CGTTAGTGGACAGAGGCTGGGGAAATGGATGTGGACTTTTTGGCAAAGGGAGCCTGGTGA +CATGCGCTAAGTTTGCATGCTCCAAGAAAATGACCGGGAAGAGCATCCAGCCAGAGAATC +TGGAGTACCGGATAATGCTGTCAGTTCATGGCTCCCAGCACAGTGGGATGATCGTTAATG +ACACTGGACATGAAACTGATGAGAATAGAGCGAAGGTTGAGATAACGCCCAATTCACCAA +GAGCCGAAGCCACCCTGGGGGGTTTTGGAAGCCTAGGACTTGATTGTGAACCGAGGACAG +GCCTTGACTTTTCAGATTTGTATTACTTGACTATGAATAACAAGCACTGGTTGGTTCACA +AGGAGTGGTTCCACGACATTCCATTACCTTGGCACGCTGGGGCAGACACCGGAACTCCAC +ACTGGAACAACAAAGAAGCACTGGTAGAGTTCAAGGACGCACATGCCAAAAGGCAAACTG +TCGTGGTTCTAGGGAGTCAAGAAGGAGCAGTTCACACGGCCCTTGCTGGAGCTCTGGAGG +CTGAGATGGATGGTGCAAAGGGAAGGCTGTCCTCTGGCCACTTGAAATGTCGCCTGAAAA +TGGATAAACTTAGATTGAAGGGCGTGTCATACTCCTTGTGTACCGCAGCGTTCACATTCA +CCAAGATCCCGGCTGAAACACTGCACGGGACAGTCACAGTGGAGGTACAGTACGCAGGGA +CAGATGGACCTTGCAAGGTTCCAGCTCAGATGGCGGTGGACATGCAAACTCTGACCCCAG +TTGGGAGGTTGATAACCGCCAACCCCGTAATCACTGAAAGCACTGAGAACTCTAAGATGA +TGCTGGAACTTGATCCACCATTTGGGGACTCTTACATTGTCATAGGAGTCGGGGAGAAGA +AGATCACCCACCACTGGCACAGGAGTGGCAGCACCATTGGAAAAGCATTTGAAGCCACTG +TGAGAGGTGCCAAGAGAATGGCAGTCTTGGGAGACACAGCCTGGGACTTTGGATCAGTTG +GAGGCGCTCTCAACTCATTGGGCAAGGGCATCCATCAAATTTTTGGAGCAGCTTTCAAAT +CATTGTTTGGAGGAATGTCCTGGTTCTCACAAATCCTCATTGGAACGTTGCTGATGTGGT +TGGGTCTGAACACAAAGAATGGATCTATTTCCCTCATGTGCTTGGCCTTAGGGGGAGTGT +TGATCTTCTTATCCACAGCCGTCTCTGCTGATGTGGGGTGCTCGGTGGACTTCTCAAAGA +AGGAGACGAGATGCGGTACAGGGGTGTTCGTCTATAACGACGTTGAAGCCTGGAGGGACA +GGTACAAGTACCATCCTGACTCCCCCCGTAGATTGGCAGCAGCAGTCAAGCAAGCCTGGG +AAGATGGTATCTGCGGGATCTCCTCTGTTTCAAGAATGGAAAACATCATGTGGAGATCAG +TAGAAGGGGAGCTCAATGCAATCCTGGAAGAGAATGGAGTTCAACTGACGGTCGTTGTGG +GATCTGTAAAAAACCCCATGTGGAGAGGTCCACAGAGATTGCCCGTGCCTGTGAACGAGC +TGCCCCACGGCTGGAAGGCTTGGGGGAAATCGTACTTCGTTAGAGCAGCAAAGACAAATA +ACAGCTTTGTCGTGGATGGTGACACACTGAAGGAATGCCCACTCAAACATAGAGCATGGA +ACAGCTTTCTTGTGGAGGATCATGGGTTCGGGGTATTTCACACTAGTGTCTGGCTCAAGG +TTAGAGAAGATTATTCATTAGAGTGTGATCCAGCCGTTATTGGAACAGCTGTTAAGGGAA +AGGAGGCTGTACACAGTGATCTAGGCTACTGGATTGAGAGTGAGAAGAATGACACATGGA +GGCTGAAGAGGGCCCATCTGATCGAGATGAAAACATGTGAATGGCCAAAGTCCCACACAT +TGTGGACAGATGGAATAGAAGAGAGTGATCTGATCATACCCAAGTCTTTAGCTGGGCCAC +TCAGCCATCACAATACCAGAGAGGGCTACAGGACCCAAATGAAAGGGCCATGGCACAGTG +AAGAGCTTGAAATTCGGTTTGAGGAATGCCCAGGCACTAAGGTCCACGTGGAGGAAACAT +GTGGAACAAGAGGACCATCTCTGAGATCAACCACTGCAAGCGGAAGGGTGATCGAGGAAT +GGTGCTGCAGGGAGTGCACAATGCCCCCACTGTCGTTCCGGGCTAAAGATGGCTGTTGGT +ATGGAATGGAGATAAGGCCCAGGAAAGAACCAGAAAGCAACTTAGTAAGGTCAGTGGTGA +CTGCAGGATCAACTGATCACATGGATCACTTCTCCCTTGGAGTGCTTGTGATTCTGCTCA +TGGTGCAGGAAGGGCTGAAGAAGAGAATGACCACAAAGATCATCATAAGCACATCAATGG +CAGTGCTGGTAGCTATGATCCTGGGAGGATTTTCAATGAGTGACCTGGCTAAGCTTGCAA +TTTTGATGGGTGCCACCTTCGCGGAAATGAACACTGGAGGAGATGTAGCTCATCTGGCGC +TGATAGCGGCATTCAAAGTCAGACCAGCGTTGCTGGTATCTTTCATCTTCAGAGCTAATT +GGACACCCCGTGAAAGCATGCTGCTGGCCTTGGCCTCGTGTCTTTTGCAAACTGCGATCT +CCGCCTTGGAAGGCGACCTGATGGTTCTCATCAATGGTTTTGCTTTGGCCTGGTTGGCAA +TACGAGCGATGGTTGTTCCACGCACTGATAACATCACCTTGGCAATCCTGGCTGCTCTGA +CACCACTGGCCCGGGGCACACTGCTTGTGGCGTGGAGAGCAGGCCTTGCTACTTGCGGGG +GGTTTATGCTCCTCTCTCTGAAGGGAAAAGGCAGTGTGAAGAAGAACTTACCATTTGTCA +TGGCCCTGGGACTAACCGCTGTGAGGCTGGTCGACCCCATCAACGTGGTGGGACTGCTGT +TGCTCACAAGGAGTGGGAAGCGGAGCTGGCCCCCTAGCGAAGTACTCACAGCTGTTGGCC +TGATATGCGCATTGGCTGGAGGGTTCGCCAAGGCAGATATAGAGATGGCTGGGCCCATGG +CCGCAGTCGGTCTGCTAATTGTCAGTTACGTGGTCTCAGGAAAGAGTGTGGACATGTACA +TTGAAAGAGCAGGTGACATCACATGGGAAAAAGATGCGGAAGTCACTGGAAACAGTCCCC +GGCTCGATGTGGCGCTAGATGAGAGTGGTGATTTCTCCCTGGTGGAGGATGACGGTCCCC +CCATGAGAGAGATCATACTCAAGGTGGTCCTGATGACCATCTGTGGCATGAACCCAATAG +CCATACCCTTTGCAGCTGGAGCGTGGTACGTATACGTGAAGACTGGAAAAAGGAGTGGTG +CTCTATGGGATGTGCCTGCTCCCAAGGAAGTAAAAAAGGGGGAGACCACAGATGGAGTGT +ACAGAGTAATGACTCGTAGACTGCTAGGTTCAACACAAGTTGGAGTGGGAGTTATGCAAG +AGGGGGTCTTTCACACTATGTGGCACGTCACAAAAGGATCCGCGCTGAGAAGCGGTGAAG +GGAGACTTGATCCATACTGGGGAGATGTCAAGCAGGATCTGGTGTCATACTGTGGTCCAT +GGAAGCTAGATGCCGCCTGGGACGGGCACAGCGAGGTGCAGCTCTTGGCCGTGCCCCCCG +GAGAGAGAGCGAGGAACATCCAGACTCTGCCCGGAATATTTAAGACAAAGGATGGGGACA +TTGGAGCGGTTGCGCTGGATTACCCAGCAGGAACTTCAGGATCTCCAATCCTAGACAAGT +GTGGGAGAGTGATAGGACTTTATGGCAATGGGGTCGTGATCAAAAATGGGAGTTATGTTA +GTGCCATCACCCAAGGGAGGAGGGAGGAAGAGACTCCTGTTGAGTGCTTCGAGCCTTCGA +TGCTGAAGAAGAAGCAGCTAACTGTCTTAGACTTGCATCCTGGAGCTGGGAAAACCAGGA +GAGTTCTTCCTGAAATAGTCCGTGAAGCTATAAAAACAAGACTCCGTACTGTGATCTTAG +CTCCAACCAGGGTTGTCGCTGCTGAAATGGAGGAAGCCCTTAGAGGGCTTCCAGTGCGTT +ATATGACAACAGCAGTCAATGTCACCCATTCTGGAACAGAAATCGTCGACTTAATGTGCC +ATGCCACCTTCACTTCACGTCTACTACAGCCAATCAGAGTCCCCAACTATAATCTGTACA +TTATGGATGAGGCCCACTTCACAGATCCCTCAAGTATAGCAGCAAGAGGATACATTTCAA +CAAGGGTTGAGATGGGCGAGGCGGCTGCCATCTTCATGACCGCCACGCCACCAGGAACCC +GTGACGCATTTCCGGACTCCAACTCACCAATTATGGACACCGAAGTGGAAGTCCCAGAGA +GAGCCTGGAGCTCAGGCTTTGATTGGGTGACGGATCATTCTGGAAAAACAGTTTGGTTTG +TTCCAAGCGTGAGGAACGGCAATGAGATCGCAGCTTGTCTGACAAAGGCTGGAAAACGGG +TCATACAGCTCAGCAGAAAGACTTTTGAGACAGAGTTCCAGAAAACAAAACATCAAGAGT +GGGACTTTGTCGTGACAACCGACATTTCAGAGATGGGCGCCAACTTTAAAGCTGACCGTG +TCATAGATTCCAGGAGATGCCTAAAGCCGGTCATACTTGATGGCGAGAGAGTCATTCTGG +CTGGACCCATGCCTGTCACACATGCCAGCGCTGCCCAGAGGAGGGGGCGCATAGGCAGGA +ATCCCAACAAACCTGGAGATGAGTATCTGTATGGAGGTGGGTGCGCAGAGACTGACGAAG +ACCATGCACACTGGCTTGAAGCAAGAATGCTCCTTGACAATATTTACCTCCAAGATGGCC +TCATAGCCTCGCTCTATCGACCTGAGGCCGACAAAGTAGCAGCCATTGAGGGAGAGTTCA +AGCTTAGGACGGAGCAAAGGAAGACCTTTGTGGAACTCATGAAAAGAGGAGATCTTCCTG +TTTGGCTGGCCTATCAGGTTGCATCTGCCGGAATAACTTACACAGATAGAAGATGGTGCT +TTGATGGCACGACCAACAACACCATAATGGAAGACAGTGTGCCGGCAGAGGTGTGGACCA +GACACGGAGAGAAAAGAGTGCTCAAACCGAGGTGGATGGACGCCAGAGTTTGTTCAGATC +ATGCGGCCCTGAAGTCATTCAAGGAGTTTGCCGCTGGGAAAAGAGGAGCGGCTTTTGGAG +TGATGGAAGCCCTGGGAACACTGCCAGGACACATGACAGAGAGATTCCAGGAAGCCATTG +ACAACCTCGCTGTGCTCATGCGGGCAGAGACTGGAAGCAGGCCTTACAAAGCCGCGGCGG +CCCAATTGCCGGAGACCCTAGAGACCATTATGCTTTTGGGGTTGCTGGGAACAGTCTCGC +TGGGAATCTTTTTCGTCTTGATGAGGAACAAGGGCATAGGGAAGATGGGCTTTGGAATGG +TGACTCTTGGGGCCAGCGCATGGCTCATGTGGCTCTCGGAAATTGAGCCAGCCAGAATTG +CATGTGTCCTCATTGTTGTGTTCCTACTGCTGGTGGTGCTCATACCTGAGCCAGAAAAGC +AAAGATCTCCCCAGGACAACCAAATGGCAATCATCATCATGGTAGCAGTAGGTCTTCTGG +GCTTGATCACCGCCAATGAACTCGGATGGTTGGAGAGAACAAAGAGTGACCTAAGCCATC +TAATGGGAAGAAGAGAGGAGGGAGCAACCATAGGATTCTCAATGGACATTGACCTGCGGC +CAGCCTCAGCTTGGGCCATCTATGCTGCCTTGACAACTTTCATTACCCCAGCCGTCCAAC +ATGCAGTGACCACTTCATACAACAACTACTCCTTAATGGCGATGGCCACGCAAGCTGGAG +TGTTGTTTGGTATGGGCAAAGGGATGCCATTCTACGCATGGGACTTTGGAGTCCCGCTGC +TAATGATAGGTTGCTACTCACAATTAACACCCCTGACCCTAATAGTGGCCATCATTTTGC +TCGTGGCGCACTACATGTACTTGATCCCAGGGCTGCAGGCAGCAGCTGCGCGTGCTGCCC +AGAAGAGAACGGCAGCTGGCATCATGAAGAACCCTGTTGTGGATGGAATAGTGGTGACTG +ACATTGACACAATGACAATTGACCCCCAAGTGGAGAAAAAGATGGGACAGGTGCTACTCA +TAGCAGTAGCCGTCTCCAGCGCCATACTGTCGCGGACCGCCTGGGGGTGGGGGGAGGCTG +GGGCCCTGATCACAGCCGCAACTTCCACTTTGTGGGAAGGCTCTCCGAACAAGTACTGGA +ACTCCTCTACAGCCACTTCACTGTGTAACATTTTTAGGGGAAGTTACTTGGCTGGAGCTT +CTCTAATCTACACAGTAACAAGAAACGCTGGCTTGGTCAAGAGACGTGGGGGTGGAACAG +GAGAGACCCTGGGAGAGAAATGGAAGGCCCGCTTGAACCAGATGTCGGCCCTGGAGTTCT +ACTCCTACAAAAAGTCAGGCATCACCGAGGTGTGCAGAGAAGAGGCCCGCCGCGCCCTCA +AGGACGGTGTGGCAACGGGAGGCCATGCTGTGTCCCGAGGAAGTGCAAAGCTGAGATGGT +TGGTGGAGCGGGGATACCTGCAGCCCTATGGAAAGGTCATTGATCTTGGATGTGGCAGAG +GGGGCTGGAGTTACTACGCCGCCACCATCCGCAAAGTTCAAGAAGTGAAAGGATACACAA +AAGGAGGCCCTGGTCATGAAGAACCCGTGTTGGTGCAAAGCTATGGGTGGAACATAGTCC +GTCTCAAGAGTGGGGTGGACGTCTTTCATATGGCGGCTGAGCCGTGTGACACGTTGCTGT +GTGACATAGGTGAGTCATCATCTAGTCCTGAAGTGGAAGAAGCACGGACGCTCAGAGTCC +TCTCCATGGTGGGGGATTGGCTTGAAAAAAGACCAGGAGCCTTTTGTATAAAAGTGTTGT +GCCCATACACCAGCACTATGATGGAAACCCTGGAGCGACTGCAGCGTAGGTATGGGGGAG +GACTGGTCAGAGTGCCACTCTCCCGCAACTCTACACATGAGATGTACTGGGTCTCTGGAG +CGAAAAGCAACACCATAAAAAGTGTGTCCACCACGAGCCAGCTCCTCTTGGGGCGCATGG +ACGGGCCTAGGAGGCCAGTGAAATATGAGGAGGATGTGAATCTCGGCTCTGGCACGCGGG +CTGTGGTAAGCTGCGCTGAAGCTCCCAACATGAAGATCATTGGTAACCGCATTGAAAGGA +TCCGCAGTGAGCACGCGGAAACGTGGTTCTTTGACGAGAACCACCCATATAGGACATGGG +CTTACCATGGAAGCTATGAGGCCCCCACACAAGGGTCAGCATCCTCTCTAGTAAACGGGG +TTGTCAGGCTCCTGTCAAAACCCTGGGATGTGGTGACTGGAGTCACAGGAATAGCCATGA +CCGACACCACACCGTATGGTCAGCAAAGAGTTTTCAAGGAAAAAGTGGACACTAGGGTGC +CAGACCCCCAAGAAGGCACTCGTCAGGTTATGAGCATGGTCTCTTCCTGGTTGTGGAAAG +AGCTAGGCAAACACAAACGGCCACGAGTCTGTACCAAAGAAGAGTTCATCAACAAGGTTC +GTAGCAATGCAGCATTAGGGGCAATATTTGAAGAGGAAAAAGAGTGGAAGACTGCAGTGG +AAGCTGTGAACGATCCAAGGTTCTGGGCTCTAGTGGACAAGGAAAGAGAGCACCACCTGA +GAGGAGAGTGCCAGAGTTGTGTGTACAACATGATGGGAAAAAGAGAAAAGAAACAAGGGG +AATTTGGAAAGGCCAAGGGCAGCCGCGCCATCTGGTATATGTGGCTAGGGGCTAGATTTC +TAGAGTTCGAAGCCCTTGGATTCTTGAACGAGGATCACTGGATGGGGAGAGAGAACTCAG +GAGGTGGTGTTGAAGGGCTGGGATTACAAAGACTCGGATATGTCCTAGAAGAGATGAGTC +GCATACCAGGAGGAAGGATGTATGCAGATGACACTGCTGGCTGGGATACCCGCATCAGCA +GGTTTGATCTAGAGAATGAAGCTCTAATCACCAACCAAATGGAGAAAGGGCACAGGGCCT +TGGCATTGGCCATAATCAAGTACACATACCAAAACAAAGTGGTAAAGGTCCTTAGACCAG +CTGAAAAAGGGAAAACAGTTATGGACATTATTTCGAGACAAGACCAAAGGGGGAGCGGAC +AAGTTGTCACTTACGCTCTTAACACATTTACCAACCTAGTGGTGCAACTCATTCGGAATA +TGGAGGCTGAGGAAGTTCTAGAGATGCAAGACTTGTGGCTGCTGCGGAGGTCAGAGAAAG +TGACCAACTGGTTGCAGAGCAACGGATGGGATAGGCTCAAACGAATGGCAGTCAGTGGAG +ATGATTGCGTTGTGAAGCCAATTGATGATAGGTTTGCACATGCCCTCAGGTTCTTGAATG +ATATGGGAAAAGTTAGGAAGGACACACAAGAGTGGAAACCCTCAACTGGATGGGACAACT +GGGAAGAAGTTCCGTTTTGCTCCCACCACTTCAACAAGCTCCATCTCAAGGACGGGAGGT +CCATTGTGGTTCCCTGCCGCCACCAAGATGAACTGATTGGCCGGGCCCGCGTCTCTCCAG +GGGCGGGATGGAGCATCCGGGAGACTGCTTGCCTAGCAAAATCATATGCGCAAATGTGGC +AGCTCCTTTATTTCCACAGAAGGGACCTCCGACTGATGGCCAATGCCATTTGTTCATCTG +TGCCAGTTGACTGGGTTCCAACTGGGAGAACTACCTGGTCAATCCATGGAAAGGGAGAAT +GGATGACCACTGAAGACATGCTTGTGGTGTGGAACAGAGTGTGGATTGAGGAGAACGACC +ACATGGAAGACAAGACCCCAGTTACGAAATGGACAGACATTCCCTATTTGGGGAAAAGGG +AAGACTTGTGGTGTGGATCTCTCATAGGGCACAGACCGCGCACCACCTGGGCTGAGAACA +TTAAAAACACAGTCAACATGGTGCGCAGGATCATAGGTGAGGAAGAAAAGTACATGGACT +ACCTATCCACCCAAGTTCGCTACTTGGGTGAAGAAGGGTCTACACCTGGAGTGCTGTAAG +CACCAATCTTAATGTTGTCAGGCCTGCTAGTCAGCCACAGCTTGGGGAAAGCTGTGCAGC +CTGTGACCCCCCCAGGAGAAGCTGGGAAACCAAGCCTATAGTCAGGCCGAGAACGCCATG +GCACGGAAGAAGCCATGCTGCCTGTGAGCCCCTCAGAGGACACTGAGTCAAAAAACCCCA +CGCGCTTGGAGGCGCAGGATGGGAAAAGAAGGTGGCGACCTTCCCCACCCTTCAATCTGG +GGCCTGAACTGGAGAT-------------------------------------------- +------------------------------------------------------------ +------------------------------------------------------------ +-------- +>ZBRC319|Brazil|2016-07-10 +------------------------------------------------------------ +----------------------GATTTGGAAACGAGAGTTTCTGGTCATGAAAAACCCAA +AAAAGAAATCCGGAGGATTCCGGATTGTCAATATGCTAAAACGCGGAGTAGCCCGTGTGA +GCCCCTTTGGGGGCTTGAAGAGGCTGCCAGCCGGACTTCTGCTGGGTCATGGGCCCATCA +GGATGGTCTTGGCGATTCTAGCCTTTTTGAGATTCACGGCAATCAAGCCATCACTGGGTC +TCATCAATAGATGGGGTTCAGTGGGGAAAAAAGAGGCTATGGAAATAATAAAGAAGTTCA +AGAAAGATCTGGCTGCCATGCTGAGAATAATCAATGCTAGGAAGGAGAAGAAGAGACGAG +GCGCAGAAACTAGTGTCGGAATTGTTGGCCTCCTGCTGACCACAGCTATGGCAGCGGAGG +TCACTAGACGTGGGAGTGCATACTATATGTACTTGGACAGAAACGATGCTGGGGAGGCCA +TATCTTTTCCAACCACATTGGGGATGAATAAGTGTTATATACAGATCATGGATCTTGGAC +ACATGTGTGATGCCACCATGAGCTATGAATGCCCTATGCTGGATGAGGGGGTGGAACCAG +ATGACGTCGATTGTTGGTGCAACACGACGTCAACTTGGGTTGTGTACGGAACCTGCCATC +ACAAAAAAGGTGAAGCACGGAGATCTAGAAGAGCTGTGACGCTCCCCTCCCATTCCACTA +GGAAGCTGCAAACGCGGTCGCAAACCTGGTTGGAATCAAGAGAATACACAAAGCACTTGA +TTAGAGTCGAAAATTGGATATTCAGGAACCCTGGCTTCGCGTTAGCAGCAGCTGCCATCG +CTTGGCTTTTGGGAAGCTCAACGAGCCAAAAAGTCATATACTTGGTCATGATACTGCTGA +TTGCCCCGGCATACAGCATCAGGTGCATAGGAGTCAGCAATAGGGACTTTGTGGAAGGTA +TGTCAGGTGGGACTTGGGTTGATGTTGTCTTGGAACATGGAGGTTGTGTCACCGTAATGG +CACAGGACAAACCGACTGTCGACATAGAGCTGGTTACAACAACAGTCAGCAACATGGCGG +AGGTAAGATCCTACTGCTATGAGGCATCAATATCAGACATGGCTTCGGACAGCCGCTGCC +CAACACAAGGTGAAGCCTACCTTGACAAGCAATCAGACACTCAATATGTCTGCAAAAGAA +CGTTAGTGGACAGAGGCTGGGGAAATGGATGTGGACTTTTTGGCAAAGGGAGCCTGGTGA +CATGCGCTAAGTTTGCATGCTCCAAGAAAATGACCGGGAAGAGCATCCAGCCAGAGAATC +TGGAGTACCGGATAATGCTGTCAGTTCATGGCTCCCAGCACAGTGGGATGATCGTTAATG +ACACAGGACATGAAACTGATGAGAATAGAGCGAAGGTTGAGATAACGCCCAATTCACCAA +GAGCCGAAGCCACCCTGGGGGGTTTTGGAAGCCTAGGACTTGATTGTGAACCGAGGACAG +GCCTTGACTTTTCAGATTTGTATTACTTGACTATGAATAACAAGCACTGGTTGGTTCACA +AGGAGTGGTTCCACGACATTCCATTACCTTGGCACGCTGGGGCAGACACCGGAACTCCAC +ACTGGAACAACAAAGAAGCACTGGTAGAGTTCAAGGACGCACATGCCAAAAGGCAAACTG +TCGTGGTTCTAGGGAGTCAAGAAGGAGCAGTTCACACGGCCCTTGCTGGAGCTCTGGAGG +CTGAGATGGATGGTGCAAAGGGAAGGCTGTCCTCTGGCCACTTGAAATGTCGCCTGAAAA +TGGATAAACTTAGATTGAAGGGCGTGTCATACTCCTTGTGTACCGCAGCGTTCACATTCA +CCAAGATCCCGGCTGAAACACTGCACGGGACAGTCACAGTGGAGGTACAGTACGCAGGGA +CAGATGGACCTTGCAAGGTTCCAGCTCAGATGGCGGTGGACATGCAAACTCTGACCCCAG +TTGGGAGGTTGATAACCGCTAACCCCGTAATCACTGAAAGCACTGAGAACTCTAAGATGA +TGCTGGAACTTGATCCACCATTTGGGGACTCTTACATTGTCATAGGAGTCGGGGAGAAGA +AGATCACCCACCACTGGCACAGGAGTGGCAGCACCATTGGAAAAGCATTTGAAGCCACTG +TGAGAGGTGCCAAGAGAATGGCAGTCTTGGGAGACACAGCCTGGGACTTTGGATCAGTTG +GAGGAGCTCTCAACTCATTGGGCAAGGGCATCCATCAAATTTTTGGAGCAGCTTTCAAAT +CATTGTTTGGAGGAATGTCCTGGTTCTCACAAATTCTCATTGGAACGTTGCTGATGTGGT +TGGGTCTGAACACAAAGAATGGATCTATTTCCCTTATGTGCTTGGCCTTAGGGGGAGTGT +TGATCTTCTTATCCACAGCCGTCTCTGCTGATGTGGGGTGCTCGGTGGACTTCTCAAAGA +AGGAGACGAGATGTGGTACAGGGGTGTTCGTCTATAACGACGTTGAAGCCTGGAGGGACA +GGTACAAGTACCATCCTGACTCCCCCCGTAGATTGGCAGCAGCAGTCAAGCAAGCCTGGG +AAGATGGTATCTGCGGGATCTCCTCTGTTTCAAGAATGGAAAACATCATGTGGAGATCAG +TAGAAGGGGAGCTCAACGCAATCCTGGAAGAGAATGGAGTTCAACTGACGGTCGTTGTGG +GATCTGTAAAAAACCCCATGTGGAGAGGTCCACAGAGATTGCCCGTGCCTGTGAACGAGC +TGCCCCACGGCTGGAAGGCTTGGGGGAAATCGTACTTCGTCAGAGCAGCAAAGACAAATA +ACAGCTTTGTCGTGGATGGTGACACACTGAAGGAATGCCCACTCAAACATAGAGCGTGGA +ACAGCTTTCTTGTGGAGGATCATGGGTTCGGGGTATTTCACACTAGTGTCTGGCTCAAGG +TTAGAGAAGATTATTCATTAGAGTGTGATCCAGCCGTTATTGGAACAGCTGTTAAGGGAA +AGGAGGCTGTACACAGTGATCTAGGCTACTGGATTGAGAGTGAGAAGAATGACACATGGA +GGCTGAAGAGGGCCCATCTGATCGAGATGAAAACATGTGAATGGCCAAAGTCCCACACAT +TGTGGACAGATGGAATAGAAGAGAGTGATCTGATCATACCCAAGTCTTTAGCTGGGCCAC +TCAGCCATCACAATACCAGAGAGGGCTACAGGACCCAAATGAAAGGGCCATGGCACAGTG +AAGAGCTTGAAATTCGGTTTGAGGAATGCCCAGGCACTAAGGTCCACGTGGAGGAAACAT +GTGGAACAAGAGGACCATCTCTGAGATCAACCACTGCAAGCGGAAGGGTGATCGAGGAAT +GGTGCTGCAGGGAGTGCACAATGCCCCCACTGTCGTTCCGGGCTAAAGATGGCTGTTGGT +ATGGAATGGAGATAAGGCCCAGGAAAGAACCAGAAAGCAACTTAGTAAGGTCAACGGTGA +CTGCAGGATCAACTGATCACATGGATCACTTCTCCCTTGGAGTGCTTGTGATTCTGCTCA +TGGTGCAGGAAGGGCTGAAGAAGAGAATGACCACAAAGATCATCATAAGCACATCAATGG +CAGTGCTGGTAGCTATGATCCTGGGAGGATTTTCAATGAGTGACCTGGCTAAGCTTGCAA +TTTTGATGGGTGCCACCTTCGCGGAAATGAACACTGGAGGAGATGTAGCTCATCTGGCGC +TGATAGCGGCATTCAAAGTCAGACCAGCGTTGCTGGTATCTTTCATCTTCAGAGCTAATT +GGACACCCCGTGAAAGCATGCTGCTGGCCTTGGCCTCGTGTCTTTTGCAAACTGCGATCT +CCGCCTTGGAAGGCGACCTGATGGTTCTCATCAATGGTTTTGCTTTGGCCTGGTTGGCAA +TACGAGCGATGGTTGTTCCACGCACTGACAACATCACCTTGGCAATCCTGGCTGCTCTGA +CACCACTGGCCCGGGGCACACTGCTTGTGGCGTGGAGAGCAGGCCTTGCTACTTGCGGGG +GGTTTATGCTCCTCTCTCTGAAGGGAAAAGGCAGTGTGAAGAAGAACTTACCATTTGTCA +TGGCCCTGGGACTAACCGCTGTGAGGCTGGTCGACCCCATCAACGTGGTGGGACTGCTGT +TGCTCACAAGGAGTGGGAAGCGGAGCTGGCCCCCTAGCGAAGTACTCACAGCTGTTGGCC +TGATATGCGCATTGGCTGGAGGGTTCGCCAAGGCAGATATAGAGATGGCTGGGCCCATGG +CCGCGGTCGGTCTGCTAATTGTCAGTTACGTGGTCTCAGGAAAGAGTGTGGACATGTACA +TTGAAAGAGCAGGTGACATCACATGGGAAAAAGATGCGGAAGTCACTGGAAACAGTCCCC +GGCTCGATGTGGCGCTAGATGAGAGTGGTGATTTCTCCCTGGTGGAGGATGACGGTCCCC +CCATGAGAGAGATCATACTCAAGGTGGTCCTGATGACCATCTGTGGCATGAACCCAATAG +CCATACCCTTTGCAGCTGGAGCGTGGTACGTATACGTGAAGACTGGAAAAAGGAGTGGTG +CTCTATGGGATGTGCCTGCTCCCAAGGAAGTAAAAAAGGGGGAGACCACAGATGGAGTGT +ACAGAGTAATGACTCGTAGACTGCTAGGTTCAACACAAGTTGGAGTGGGAGTTATGCAAG +AGGGGGTCTTTCACACTATGTGGCACGTCACAAAAGGATCCGCGCTGAGAAGCGGTGAAG +GGAGACTTGATCCATACTGGGGAGATGTCAAGCAGGATCTGGTGTCATACTGTGGTCCAT +GGAAGCTAGATGCCGCCTGGGACGGGCACAGCGAGGTGCAGCTCTTGGCCGTGCCCCCCG +GAGAGAGAGCGAGGAACATCCAGACTCTGCCCGGAATATTTAAGACAAAGGATGGGGACA +TTGGAGCGGTTGCGCTGGATTACCCAGCAGGAACTTCAGGATCTCCAATCCTAGACAAGT +GTGGGAGAGTGATAGGACTTTATGGCAATGGGGTCGTGATCAAAAATGGGAGTTATGTTA +GTGCCATCACCCAAGGGAGGAGGGAGGAAGAGACTCCTGTTGAGTGCTTCGAGCCTTCGA +TGCTGAAGAAGAAGCAGCTAACTGTCTTAGACTTGCATCCTGGAGCTGGGAAAACCAGGA +GAGTTCTTCCTGAAATAGTCCGTGAAGCCATAAAAACAAGACTCCGTACTGTGATCTTAG +CTCCAACCAGGGTTGTCGCTGCTGAAATGGAGGANGCCCTTAGAGGGCTTCCAGTGCGTT +ATATGACAACAGCAGTCAATGTCACCCACTCTGGAACAGAAATCGTCGACTTAATGTGCC +ATGCCACCTTCACTTCACGTCTACTACAGCCAATCAGAGTCCCCAACTATAATCTGTATA +TTATGGATGAGGCCCACTTCACAGATCCCTCAAGTATAGCAGCAAGAGGATACATTTCAA +CAAGGGTTGAGATGGGCGAGGCGGCTGCCATCTTCATGACCGCCACGCCACCAGGAACCC +GTGACGCATTTCCGGACTCCAACTCACCAATTATGGACACCGAAGTGGAAGTCCCAGAGA +GAGCCTGGAGCTCAGGCTTTGATTGGGTGACGGATCATTCTGGAAAAACAGTTTGGTTTG +TTCCAAGCGTGAGGAACGGCAATGAGATCGCAGCTTGTCTGACAAAGGCTGGAAAACGGG +TCATACAGCTCAGCAGAAAGACTTTTGAGACAGAGTTCCAGAAAACAAAACATCAAGAGT +GGGACTTTGTCGTGACAACTGACATTTCAGAGATGGGCGCCAACTTTAAAGCTGACCGTG +TCATAGATTCCAGGAGATGCCTAAAGCCGGTCATACTTGATGGCGAGAGAGTCATTCTGG +CTGGACCCATGCCTGTCACACATGCCAGCGCTGCCCAGAGGAGGGGGCGCATAGGCAGGA +ATCCCAACAAACCTGGAGATGAGTATCTGTATGGAGGTGGGTGCGCAGAGACTGACGAAG +ACCATGCACACTGGCTTGAAGCAAGAATGCTCCTTGACAATATTTACCTCCAAGATGGCC +TCATAGCCTCGCTCTATCGACCTGAGGCCGACAAAGTAGCAGCCATTGAGGGAGAGTTCA +AGCTTAGGACGGAGCAAAGGAAGACCTTTGTGGAACTCATGAAAAGAGGAGATCTTCCTG +TTTGGCTGGCCTATCAGGTTGCATCTGCCGGAATAACCTACACAGATAGAAGATGGTGCT +TTGATGGCACGACCAACAACACCATAATGGAAGACAGTGTGCCGGCAGAGGTGTGGACCA +GACACGGAGAGAAAAGAGTGCTCAAACCGAGGTGGATGGACGCCAGAGTTTGTTCAGATC +ATGCGGCCCTGAAGTCATTCAAGGAGTTTGCCGCTGGGAAAAGAGGAGCGGCTTTTGGAG +TGATGGAAGCCCTGGGAACACTGCCAGGACACATGACAGAGAGATTCCAGGAAGCCATTG +ACAACCTCGCTGTGCTCATGCGGGCAGAGACTGGAAGCAGGCCTTACAAAGCCGCGGCGG +CCCAATTGCCGGAGACCCTAGAGACCATTATGCTTTTGGGGTTGCTGGGAACAGTCTCGC +TGGGAATCTTTTTCGTCTTGATGAGGAACAAGGGCATAGGGAAGATGGGCTTTGGAATGG +TGACTCTTGGGGCCAGCGCATGGCTCATGTGGCTCTCGGAAATTGAGCCAGCCAGAATTG +CATGTGTCCTCATTGTTGTGTTCCTATTGCTGGTGGTGCTCATACCTGAGCCAGAAAAGC +AAAGATCTCCCCAGGACAACCAAATGGCAATCATCATCATGGTAGCAGTAGGTCTTCTGG +GCTTGATTACCGCCAATGAACTCGGATGGTTGGAGAGAACAAAGAGTGACCTAAGCCATC +TAATGGGAAGGAGAGAGGAGGGGGCAACCATAGGATTCTCAATGGACATTGACCTGCGGC +CAGCCTCAGCTTGGGCCATCTATGCTGCCTTGACAACTTTCATTACCCCAGCCGTCCAAC +ATGCAGTGACCACTTCATACAACAACTACTCCTTAATGGCGATGGCCACGCAAGCTGGAG +TGTTGTTTGGTATGGGCAAAGGGATGCCATTCTACGCATGGGACTTTGGAGTCCCGCTGC +TAATGATAGGTTGCTACTCACAATTAACACCCCTGACCCTAATAGTGGCCATCATTTTGC +TCGTGGCGCACTACATGTACTTGATCCCAGGGCTGCAGGCAGCAGCTGCGCGTGCTGCCC +AGAAGAGAACGGCAGCTGGCATCATGAAGAACCCTGTTGTGGATGGAATAGTGGTGACTG +ACATTGACACAATGACAATTGACCCCCAAGTGGAGAAAAAGATGGGACAGGTGCTACTCA +TAGCAGTAGCCGTCTCCAGCGCCATACTGTCGCGGACCGCCTGGGGGTGGGGGGAGGCTG +GGGCCCTGATCACAGCCGCAACTTCCACTTTGTGGGAAGGCTCTCCGAACAAGTACTGGA +ACTCCTCTACAGCCACTTCACTGTGTAACATTTTTAGGGGAAGTTACTTGGCTGGAGCTT +CTCTAATCTACACAGTAACAAGAAACGCTGGCTTGGTCAAGAGACGTGGGGGTGGAACAG +GAGAGACCCTGGGAGAGAAATGGAAGGCCCGCTTGAACCAGATGTCGGCCCTGGAGTTCT +ACTCCTACAAAAAGTCAGGCATCACCGAGGTGTGCAGAGAAGAGGCCCGCCGCGCCCTCA +AGGACGGTGTGGCAACGGGAGGCCATGCTGTGTCCCGAGGAAGTGCAAAGCTGAGATGGT +TGGTGGAGCGGGGATACCTGCAGCCCTATGGAAAGGTCATTGATCTTGGATGTGGCAGAG +GGGGCTGGAGTTACTACGCCGCCACCATCCGCAAAGTTCAAGAAGTGAAAGGATACACAA +AAGGAGGCCCTGGTCATGAAGAACCCGTGTTGGTGCAAAGCTATGGGTGGAACATAGTCC +GTCTTAAGAGTGGGGTGGACGTCTTTCATATGGCGGCTGAGCCGTGTGACACGTTGCTGT +GTGACATAGGTGAGTCATCATCTAGTCCTGAAGTGGAAGAAGCACGGACGCTCAGAGTCC +TCTCCATGGTGGGGGATTGGCTTGAAAAAAGACCAGGAGCCTTTTGTATAAAAGTGTTGT +GCCCATACACCAGCACTATGATGGAAACCCTGGAGCGACTGCAGCGTAGGTATGGGGGAG +GACTGGTCAGAGTGCCACTCTCCCGCAACTCTACACATGAGATGTACTGGGTCTCTGGAG +CGAAAAGCAACACCATAAAAAGTGTGTCCACCACGAGCCAGCTCCTCTTGGGGCGCATGG +ACGGGCCTAGGAGGCCAGTGAAATATGAGGAGGATGTGAATCTCGGCTCTGGCACGCGGG +CTGTGGTAAGCTACGCTGAAGCTCCCAACATGAAGATCATTGGTAACCGCATTGAAAGGA +TCCGCAGTGAGCACGCGGAAACGTGGTTCTTTGACGAGAACCACCCATATAGGACATGGG +CTTACCATGGAAGCTATGAGGCCCCCACACAAGGGTCAGCGTCCTCTCTAATAAACGGGG +TTGTCAGGCTCCTGTCAAAACCCTGGGATGTGGTGACTGGAGTCACAGGAATAGCCATGA +CCGACACCACACCGTATGGTCAGCAAAGAGTTTTCAAGGAAAAAGTGGACACTAGGGTGC +CAGACCCCCAAGAAGGCACTCGTCAGGTTATGAGCATGGTCTCTTCCTGGTTGTGGAAAG +AGCTAGGCAAACACAAACGGCCACGAGTCTGTACCAAAGAAGAGTTCATCAACAAGGTTC +GTAGCAATGCAGCATTAGGGGCAATATTTGAAGAGGAAAAAGAGTGGAAGACTGCAGTGG +AAGCTGTGAACGATCCAAGGTTCTGGGCTCTAGTGGACAAGGAAAGAGAGCACCACCTGA +GAGGAGAGTGCCAGAGTTGTGTGTACAACATGATGGGAAAAAGAGAAAAGAAACAAGGGG +AATTTGGAAAGGCCAAGGGCAGCCGCGCCATCTGGTATATGTGGCTAGGGGCTAGATTTC +TAGAGTTCGAAGCCCTTGGATTCTTGAACGAGGATCACTGGATGGGGAGAGAGAACTCAG +GAGGTGGTGTTGAAGGGCTGGGATTACAAAGACTCGGATATGTCCTAGAAGAGATGAGTC +GCATACCAGGAGGAAGGATGTATGCAGATGACACTGCTGGCTGGGACACCCGCATCAGCA +GGTTTGATCTGGAGAATGAAGCTCTAATCACCAACCAAATGGAGAAAGGGCACAGGGCCT +TGGCATTGGCCATAATCAAGTACACATACCAAAACAAAGTGGTAAAGGTCCTCAGACCAG +CTGAAAAAGGGAAAACAGTTATGGACATTATTTCGAGACAAGACCAAAGGGGGAGCGGAC +AAGTTGTCACTTACGCTCTTAACACATTTACCAACCTAGTGGTGCAACTCATTCGGAATA +TGGAGGCTGAGGAAGTTCTAGAGATGCAAGACTTGTGGCTGCTGCGGAGGTCAGAGAAAG +TGACCAACTGGTTGCAGAGCAACGGATGGGATAGGCTCAAACGAATGGCAGTCAGTGGAG +ATGATTGCGTTGTGAAGCCAATTGATGATAGGTTTGCACATGCCCTCAGGTTCTTGAATG +ATATGGGAAAAGTTAGGAAGGACACACAAGAGTGGAAACCCTCAACTGGATGGGACAACT +GGGAAGAAGTTCCGTTTTGCTCCCACCACTTCAACAAGCTCCATCTCAAGGACGGGAGGT +CCATTGTGGTTCCCTGCCGCCACCAAGATGAACTGATTGGCCGGGCCCGCGTCTCTCCAG +GGGCGGGATGGAGCATCCGGGAGACTGCTTGCCTAGCAAAATCATATGCGCAAATGTGGC +AGCTCCTTTATTTCCACAGAAGGGACCTCCGACTGATGGCCAATGCCATTTGTTCATCTG +TGCCAGTTGACTGGGTTCCAACTGGGAGAACTACCTGGTCAATCCATGGAAAGGGAGAAT +GGATGACCACTGAAGACATGCTTGTGGTGTGGAACAGAGTGTGGATTGAGGAGAACGACC +ACATGGAAGACAAGACCCCAGTTACGAAATGGACAGACATTCCCTACTTGGGAAAAAGGG +AAGACTTGTGGTGTGGATCTCTCATAGGGCACAGACCGCGCACCACCTGGGCTGAGAACA +TTAAAAACACAGTCAACATGGTGCGCAGGATCATAGGTGATGAAGAAAAGTACATGGACT +ACCTATCCACCCAAGTTCGCTACTTGGGTGAAGAAGGGTCTACACCTGGAGTGCTGTAAG +CACCAATCTTAATGTTGTCAGGCCTGCTAGTCAGCCACAGCTTGGGGAAAGCTGTGCAGC +CTGTGACCCCCCCAGGAGAAGCTGGGAAACCAAGCCTATAGTCAGGCCGAGAACGCCATG +GCACGGAAGAAGCCATGCTGCCTGTGAGCCCCTCAGAGGACACTGAGTCAAAAAACCCCA +CGCGCTTGGAGGCGCAGGATGGGAAAAGAAGGTGGCGACCTTCCCCACCCTTCAATCTGG +GGCCTGAACTGGAGATCAGCTGTGGAT--------------------------------- +------------------------------------------------------------ +------------------------------------------------------------ +-------- +>USA_2016_FL-03-MOS|USA|2016-08-23 +-------------TGTGAATCAGACTGCGACAGTTCGAGTTTGAAGCGAAAGCTAGCAAC +AGTATCAACAGGTTTTATTTTGGATTTGGAAACGAGAGTTTCTGGTCATGAAAAACCCAA +AAAAGAAATCCGGAGGATTCCGGATTGTCAATATGCTAAAACGCGGAGTAGCCCGTGTGA +GCCCCTTTGGGGGCTTGAAGAGGCTGCCAGCCGGACTTCTGCTGGGTCATGGGCCCATCA +GGATGGTCTTGGCGATTCTAGCCTTTTTGAGATTCACGGCAATCAAGCCATCACTGGGTC +TCATCAATAGATGGGGTTCAGTGGGGAAAAAAGAGGCTATGGAAATAATAAAGAAGTTCA +AGAAAGATCTGGCTGCCATGCTGAGAATAATCAATGCTAGGAAGGAGAAGAAGAGACGAG +GCGCAGATACTAGTGTCGGAATTGTTGGCCTCCTGCTGACCACAGCTATGGCAGCGGAGG +TCACTAGACGTGGGAGTGCATACTACATGTACTTGGACAGAAACGATGCTGGGGAGGCCA +TATCTTTTCCAACCACATTGGGGATGAATAAGTGTTATATACAGATCATGGATCTTGGAC +ACATGTGTGATGCCACCATGAGCTATGAATGCCCTATGCTGGATGAGGGGGTGGAACCAG +ATGACGTCGATTGTTGGTGCAACACGACGTCAACTTGGGTTGTGTACGGAACCTGCCATC +ACAAAAAAGGTGAAGCACGGAGATCTAGAAGAGCTGTGACGCTCCCCTCCCATTCCACTA +GGAAGCTGCAAACGCGGTCGCAAACCTGGTTGGAATCAAGAGAATACACAAAGCACTTGA +TTAGAGTCGAAAATTGGATATTCAGGAACCCTGGCTTCGCGTTAGCAGCAGCTGCCATCG +CTTGGCTTTTGGGAAGCTCAACGAGCCAAAAAGTCATATACTTGGTCATGATACTGCTGA +TTGCCCCGGCATACAGCATCAGGTGCATAGGAGTCAGCAATAGGGACTTTGTGGAAGGTA +TGTCAGGTGGGACTTGGGTTGATGTTGTCTTGGAACATGGAGGTTGTGTCACCGTAATGG +CACAGGACAAACCGACTGTCGACATAGAGCTGGTTACAACAACAGTCAGCAACATGGCGG +AGGTAAGATCCTACTGCTATGAGGCATCAATATCAGACATGGCTTCGGACAGCCGCTGCC +CAACACAAGGTGAAGCCTACCTTGACAAGCAATCAGACACTCAATATGTCTGCAAAAGAA +CGTTAGTGGACAGAGGCTGGGGAAATGGATGTGGACTTTTTGGCAAAGGGAGCCTGGTGA +CATGCGCTAAGTTTGCATGCTCCAAGAAAATGACCGGGAAGAGCATCCAGCCAGAGAATC +TGGAGTACCGGATAATGCTGTCAGTTCATGGCTCCCAGCACAGTGGGATGATCGTTAATG +ACACAGGACATGAAACTGATGAGAATAGAGCGAAGGTTGAGATAACGCCCAATTCACCAA +GAGCCGAAGCCACCCTGGGGGGTTTTGGAAGCCTAGGACTTGATTGTGAACCGAGGACAG +GCCTTGACTTCTCAGATTTGTATTACTTGACTATGAATAACAAGCACTGGTTGGTTCACA +AGGAGTGGTTCCACGACATTCCATTACCTTGGCACGCTGGGGCAGACACCGGAACTCCAC +ACTGGAACAACAAAGAAGCACTGGTAGAGTTCAAGGACGCACATGCCAAAAGGCAAACTG +TCGTGGTTCTAGGGAGTCAAGAAGGAGCAGTTCACACGGCCCTTGCTGGAGCTCTGGAGG +CTGAGATGGATGGTGCAAAGGGAAGGCTGTCCTCTGGCCACTTGAAATGTCGCCTGAAAA +TGGATAAACTTAGATTGAAGGGCGTGTCATACTCCTTGTGTACCGCAGCGTTCACATTCA +CCAAGATCCCGGCTGAAACACTGCACGGGACAGTCACAGTGGAGGTACAGTACGCAGGGA +CAGATGGACCTTGCAAGGTTCCAGCTCAGATGGCGGTGGACATGCAAACTCTGACCCCAG +TTGGGAGGTTGATAACCGCCAACCCCGTAATCACTGAAAGCACTGAGAACTCTAAGATGA +TGCTGGAACTTGATCCACCATTTGGGGACTCTTACATTGTCATAGGAGTCGGGGAGAAGA +AGATCACCCACCACTGGCACAGGAGTGGCAGCACCATTGGAAAAGCATTTGAAGCCACTG +TGAGAGGTGCCAAGAGAATGGCAGTCTTGGGAGACACAGCCTGGGACTTTGGATCAGTTG +GAGGCGCTCTCAACTCATTGGGCAAGGGCATCCATCAAATTTTTGGAGCAGCTTTCAAAT +CATTGTTTGGAGGAATGTCCTGGTTCTCACAAATCCTCATTGGAACGTTGCTGATGTGGT +TGGGTCTGAACACAAAGAATGGATCTATTTCCCTCATGTGCTTGGCCTTAGGGGGAGTGC +TGATCTTCTTATCCACAGCCGTCTCTGCTGATGTGGGGTGCTCGGTGGACTTCTCAAAGA +AGGAGACGAGATGCGGTACAGGGGTGTTCGTCTATAACGACGTTGAAGCCTGGAGGGACA +GGTACAAGTACCATCCTGACTCCCCCCGTAGATTGGCAGCAGCAGTCAAGCAAGCCTGGG +AAGATGGTATCTGCGGGATCTCCTCTGTTTCAAGAATGGAAAACATCATGTGGAGATCAG +TAGAAGGGGAGCTCAATGCAATCCTGGAAGAGAATGGAGTTCAACTGACGGTCGTTGTGG +GATCTGTAAAAAACCCCATGTGGAGAGGTCCACAGAGATTGCCCGTGCCTGTGAACGAGC +TGCCCCACGGCTGGAAGGCTTGGGGGAAATCGTACTTCGTTAGAGCAGCAAAGACAAATA +ACAGCTTTGTCGTGGATGGTGACACACTGAAGGAATGCCCACTCAAACATAGAGCATGGA +ACAGCTTTCTTGTGGAGGATCATGGGTTCGGGGTATTCCACACTAGTGTCTGGCTCAAGG +TTAGAGAAGATTATTCATTAGAGTGTGATCCAGCCGTTATTGGAACAGCTGTTAAGGGAA +AGGAGGCTGTACACAGTGATCTAGGCTACTGGATTGAGAGTGAGAAGAATGACACATGGA +GGCTGAAGAGGGCCCATCTGATCGAGATGAAAACATGTGAATGGCCAAAGTCCCACACAT +TGTGGACAGATGGAATAGAAGAGAGTGATCTGATCATACCCAAGTCTTTAGCTGGGCCAC +TCAGCCATCACAATACCAGAGAGGGCTACAGGACCCAAATGAAAGGGCCATGGCACAGTG +AAGAGCTTGAAATTCGGTTTGAGGAATGCCCAGGCACTAAGGTCCACGTGGAGGAAACAT +GTGGAACAAGAGGACCATCTCTGAGATCAACCACTGCAAGCGGAAGGGTGATCGAGGAAT +GGTGCTGCAGGGAGTGCACAATGCCCCCACTGTCGTTCCGGGCTAAAGATGGCTGTTGGT +ATGGAATGGAGATAAGGCCCAGGAAAGAACCAGAAAGCAACTTAGTAAGGTCAGTGGTGA +CTGCAGGATCAACTGATCACATGGATCACTTCTCCCTTGGAGTGCTTGTGATTCTGCTCA +TGGTGCAGGAAGGGCTGAAGAAGAGAATGACCACAAAGATCATCATAAGCACATCAATGG +CAGTGCTGGTAGCTATGATCCTGGGAGGATTTTCAATGAGTGACCTGGCTAAGCTTGCAA +TTTTGATGGGTGCCACCTTCGCGGAAATGAACACTGGAGGAGATGTAGCTCATCTGGCGC +TGATAGCGGCATTCAAAGTCAGACCAGCGTTGCTGGTATCTTTCATCTTCAGAGCTAATT +GGACACCCCGTGAAAGCATGCTGCTGGCCTTGGCCTCGTGTCTTTTGCAAACTGCGATCT +CCGCCTTGGAAGGCGACCTGATGGTTCTCATCAATGGTTTTGCTTTGGCCTGGTTGGCAA +TACGAGCGATGGTTGTTCCACGCACTGATAACATCACCTTGGCAATCCTGGCTGCTCTGA +CACCACTGGCCCGGGGCACACTGCTTGTGGCGTGGAGAGCAGGCCTTGCTACTTGCGGGG +GGTTTATGCTCCTCTCTCTGAAGGGAAAAGGCAGTGTGAAGAAGAACTTACCATTTGTCA +TGGCCCTGGGACTAACCGCTGTGAGACTGGTCGACCCCATCAACGTGGTGGGACTGCTGT +TGCTCACAAGGAATGGGAAGCGGAGCTGGCCCCCTAGCGAAGTACTCACAGCTGTTGGCC +TGATATGCGCATTGGCTGGAGGGTTCGCCAAGGCAGATATAGAGATGGCTGGGCCCATGG +CCGCGGTCGGTCTGCTAATTGTCAGTTACGTGGTCTCAGGAAAGAGTGTGGACATGTACA +TTGAAAGAGCAGGTGACATCACATGGGAAAAAGATGCGGAAGTCACTGGAAACAGTCCCC +GGCTCGATGTGGCGCTAGATGAGAGTGGTGATTTCTCCCTGGTGGAGGATGACGGTCCCC +CCATGAGAGAGATCATACTCAAGGTGGTCCTGATGACCATCTGTGGCATGAACCCAATAG +CCATACCCTTTGCAGCTGGAGCGTGGTACGTATACGTGAAGACTGGAAAAAGGAGTGGTG +CTCTATGGGATGTGCCTGCTCCCAAGGAAGTAAAAAAGGGGGAGACCACAGATGGAGTGT +ACAGAGTAATGACTCGTAGACTGCTAGGTTCAACACAAGTTGGAGTGGGAGTTATGCAAG +AGGGGGTCTTTCACACTATGTGGCACGTCACAAAAGGATCCGCGCTGAGAAGCGGTGAAG +GGAGACTTGATCCATACTGGGGAGATGTCAAGCAGGATCTGGTGTCATACTGTGGTCCAT +GGAAGCTAGATGCCGCCTGGGACGGGCACAGCGAGGTGCAGCTCTTGGCCGTGCCCCCCG +GAGAGAGAGCGAGGAACATCCAGACTCTGCCCGGAATATTTAAGACAAAGGATGGGGACA +TTGGAGCGGTTGCGCTGGATTACCCAGCAGGAACTTCAGGATCTCCAATCCTAGACAAGT +GTGGGAGAGTGATAGGACTTTATGGCAATGGGGTCGTGATCAAAAATGGGAGTTATGTTA +GTGCCATCACCCAAGGGAGGAGGGAGGAAGAGACTCCTGTTGAGTGCTTCGAGCCTTCGA +TGCTGAAGAAGAAGCAGCTAACTGTCTTAGACTTGCACCCTGGAGCTGGGAAAACCAGGA +GAGTTCTTCCTGAAATAGTCCGTGAAGCTATAAAAACAAGACTCCGTACTGTGATCTTAG +CTCCAACCAGGGTTGTCGCTGCTGAAATGGAGGAAGCCCTTAGAGGGCTTCCAGTGCGTT +ATATGACAACAGCAGTCAATGTCACCCATTCTGGAACAGAAATCGTCGACTTAATGTGCC +ATGCCACCTTCACTTCACGTCTACTACAGCCAATCAGAGTCCCCAACTATAATCTGTATA +TTATGGATGAGGCCCACTTCACAGATCCCTCAAGTATAGCAGCAAGAGGATACATTTCAA +CAAGGGTTGAGATGGGCGAGGCGGCTGCCATCTTCATGACCGCCACGCCACCAGGAACCC +GTGACGCATTTCCGGACTCCAACTCACCAATTATGGACACCGAAGTGGAAGTCCCAGAGA +GAGCCTGGAGCTCAGGCTTTGATTGGGTGACGGATCATTCTGGAAAAACAGTTTGGTTTG +TTCCAAGCGTGAGGAACGGCAATGAGATCGCAGCTTGTCTGACAAAGGCTGGAAAACGGG +TCATACAGCTCAGCAGAAAGACTTTTGAGACAGAGTTCCAGAAAACAAAACATCAAGAGT +GGGACTTTGTCGTGACAACCGACATTTCAGAGATGGGCGCCAACTTTAAAGCTGACCGTG +TCATAGATTCCAGGAGATGCCTAAAGCCGGTCATACTTGATGGCGAGAGAGTCATTCTGG +CTGGACCCATGCCTGTCACACATGCCAGCGCTGCCCAGAGGAGGGGGCGCATAGGCAGGA +ATCCCAACAAACCTGGAGATGAGTATCTGTATGGAGGTGGGTGCGCAGAGACTGACGAAG +ACCATGCACACTGGCTTGAAGCAAGAATGCTCCTTGACAATATTTACCTCCAAGATGGCC +TCATAGCCTCGCTCTATCGACCTGAGGCCGACAAAGTAGCAGCCATTGAGGGAGAGTTCA +AGCTTAGGACGGAGCAAAGGAAGACCTTTGTGGAACTCATGAAAAGAGGAGATCTTCCTG +TTTGGCTGGCCTATCAGGTTGCATCTGCCGGAATAACTTACACAGATAGAAGATGGTGCT +TTGATGGCACGACCAACAACACCATAATGGAAGACAGTGTGCCGGCAGAGGTGTGGACCA +GACACGGAGAGAAAAGAGTGCTCAAACCGAGGTGGATGGACGCCAGAGTTTGTTCAGATC +ATGCGGCCCTGAAGTCATTCAAGGAGTTTGCCGCTGGGAAAAGAGGAGCGGCTTTTGGAG +TGATGGAAGCCCTGGGAACACTGCCAGGACACATGACAGAGAGATTCCAGGAAGCCATTG +ACAACCTCGCTGTGCTCATGCGGGCAGAGACTGGAAGCAGGCCTTACAAAGCCGCGGCGG +CCCAATTGCCGGAGACCCTAGAGACCATTATGCTTTTGGGGTTGCTGGGAACAGTCTCGC +TGGGAATCTTTTTCGTCTTGATGAGGAACAAGGGCATAGGGAAGATGGGCTTTGGAATGG +TGACTCTTGGGGCCAGCGCATGGCTCATGTGGCTCTCGGAAATTGAGCCAGCCAGAATTG +CATGTGTCCTCATTGTTGTGTTCCTATTGCTGGTGGTGCTCATACCTGAGCCAGAAAAGC +AAAGATCTCCCCAGGACAACCAAATGGCAATCATCATCATGGTAGCAGTAGGTCTTCTGG +GCTTGATCACCGCCAATGAACTCGGATGGTTGGAGAGAACAAAGAGTGACCTAAGCCATC +TAATGGGAAGGAGAGAGGAGGGAGCAACCATAGGATTCTCAATGGACATTGACCTGCGGC +CAGCCTCAGCTTGGGCCATCTATGCTGCCTTGACAACTTTCATTACCCCAGCCGTCCAAC +ATGCAGTGACCACTTCATACAACAACTACTCCTTAATGGCGATGGCCACGCAAGCTGGAG +TGTTGTTTGGTATGGGCAAAGGGATGCCATTCTACGCATGGGACTTTGGAGTCCCGCTGC +TAATGATAGGTTGCTACTCACAATTAACACCCCTGACCCTAATAGTGGCCATCATTTTGC +TCGTGGCGCACTACATGTACTTGATCCCAGGGCTGCAGGCAGCAGCTGCGCGTGCTGCCC +AGAAGAGAACGGCAGCTGGCATCATGAAGAACCCTGTTGTGGATGGAATAGTGGTGACTG +ACATTGACACAATGACAATTGACCCCCAAGTGGAGAAAAAGATGGGACAGGTGCTACTCA +TAGCAGTAGCCGTCTCCAGCGCCATACTGTCGCGGACCGCCTGGGGGTGGGGGGAGGCTG +GGGCCCTGATCACAGCCGCAACTTCCACTTTGTGGGAAGGCTCTCCGAACAAGTACTGGA +ACTCCTCTACAGCCACTTCACTGTGTAACATTTTTAGGGGGAGTTACTTGGCTGGAGCTT +CTCTAATCTACACAGTAACAAGAAACGCTGGCTTGGTCAAGAGACGTGGGGGTGGAACAG +GAGAGACCCTGGGAGAGAAATGGAAGGCCCGCTTGAACCAGATGTCGGCCCTGGAGTTCT +ACTCCTACAAAAAGTCAGGCATCACCGAGGTGTGCAGAGAAGAGGCCCGCCGCGCCCTCA +AGGACGGTGTGGCAACGGGAGGCCATGCTGTGTCCCGAGGAAGTGCAAAGCTGAGATGGT +TGGTGGAGCGGGGATACCTGCAGCCCTATGGAAAGGTCATTGATCTTGGATGTGGCAGAG +GGGGCTGGAGTTACTACGCCGCCACCATCCGCAAAGTTCAAGAAGTGAAAGGATACACAA +AAGGAGGCCCTGGTCATGAAGAACCTGTGTTGGTGCAAAGCTATGGGTGGAACATAGTCC +GTCTCAAGAGTGGGGTGGACGTCTTTCATATGGCGGCTGAGCCGTGTGACACGTTGCTGT +GTGACATAGGTGAGTCATCATCTAGTCCTGAAGTGGAAGAAGCACGGACGCTCAGAGTCC +TCTCCATGGTGGGGGATTGGCTTGAAAAAAGACCAGGAGCCTTTTGTATAAAAGTGTTGT +GCCCATACACCAGCACTATGATGGAAACCTTGGAGCGGCTGCAGCGTAGGTATGGGGGAG +GACTGGTCAGAGTGCCACTCTCCCGCAACTCTACACATGAGATGTACTGGGTCTCTGGAG +CGAAAAGCAACACCATAAAAAGTGTGTCCACCACGAGCCAGCTCCTCTTGGGGCGCATGG +ACGGGCCTAGGAGGCCAGTGAAATATGAGGAGGATGTGAATCTCGGCTCTGGCACGCGGG +CTGTGGTAAGCTGCGCTGAAGCTCCCAACATGAAGATCATTGGTAACCGCATTGAAAGGA +TCCGCAGTGAGCACGCGGAAACGTGGTTCTTTGACGAGAACCACCCATATAGGACATGGG +CTTACCATGGAAGCTATGAGGCCCCTACACAAGGGTCAGCATCCTCTCTAGTAAACGGGG +TTGTCAGGCTCCTGTCAAAACCCTGGGATGTGGTGACTGGAGTCACAGGAATAGCCATGA +CCGACACCACACCGTATGGTCAGCAAAGAGTTTTCAAGGAAAAAGTGGACACTAGGGTGC +CAGACCCCCAAGAAGGCACTCGTCAGGTTATGAGCATGGTCTCTTCCTGGTTGTGGAAAG +AGCTAGGCAAACACAAACGGCCACGAGTCTGCACCAAAGAAGAGTTCATCAACAAGGTTC +GTAGCAATGCAGCATTAGGGGCAATATTTGAAGAGGAAAAAGAGTGGAAGACTGCAGTGG +AAGCTGTGAACGATCCAAGGTTCTGGGCTCTAGTGGACAAGGAAAGAGAGCACCACCTGA +GAGGAGAGTGCCAGAGTTGTGTGTACAACATGATGGGAAAAAGAGAAAAGAAACAAGGGG +AATTTGGAAAGGCCAAGGGCAGCCGCGCCATCTGGTATATGTGGCTAGGGGCTAGATTTC +TAGAGTTCGAAGCCCTTGGATTCTTGAACGAGGATCACTGGATGGGGAGAGAGAACTCAG +GAGGTGGTGTTGAAGGGCTGGGATTACAAAGACTCGGATATGTCCTAGAAGAGATGAGTC +GCATACCAGGAGGAAGGATGTATGCAGATGACACTGCTGGCTGGGATACCCGCATCAGCA +GGTTTGATCTAGAGAATGAAGCTCTAATCACCAACCAAATGGAGAAAGGGCACAGGGCCT +TGGCATTGGCCATAATCAAGTACACATACCAAAATAAAGTGGTAAAGGTCCTTAGACCAG +CTGAAAAAGGGAAAACAGTTATGGACATTATTTCGAGACAAGACCAAAGGGGGAGCGGAC +AAGTTGTCACTTACGCTCTTAACACATTTACCAACCTAGTGGTGCAACTCATTCGGAATA +TGGAGGCTGAGGAAGTTCTAGAGATGCAAGACTTGTGGCTGCTGCGGAGGTCAGAGAAAG +TGACCAACTGGTTGCAGAGCAACGGATGGGATAGGCTCAAACGAATGGCAGTCAGTGGAG +ATGATTGCGTTGTGAAGCCAATTGATGATAGGTTTGCACATGCCCTCAGGTTCTTGAATG +ATATGGGAAAAGTTAGGAAGGACACACAAGAGTGGAAACCCTCAACTGGATGGGACAACT +GGGAAGAAGTTCCGTTTTGCTCCCACCACTTCAACAAGCTCCATCTCAAGGACGGGAGGT +CCATTGTGGTTCCCTGCCGCCACCAAGATGAACTGATTGGCCGGGCCCGCGTCTCTCCAG +GGGCGGGATGGAGCATCCGGGAGACTGCTTGCCTAGCAAAATCATATGCGCAAATGTGGC +AGCTCCTTTATTTCCACAGAAGGGACCTCCGACTGATGGCCAATGCCATTTGTTCATCTG +TGCCAGTTGACTGGGTTCCAACTGGGAGAACTACCTGGTCAATCCATGGAAAGGGAGAAT +GGATGACCATTGAAGACATGCTTGTGGTGTGGAACAGAGTGTGGATTGAGGAGAACGACC +ACATGGAAGACAAGACCCCAGTTACGAAATGGACAGACATTCCCTATTTGGGAAAAAGGG +AAGACTTGTGGTGTGGATCTCTCATAGGGCACAGACCGCGCACCACCTGGGCTGAGAACA +TTAAAAACACAGTCAACATGGTGCGCAGGATCATAGGTGAGGAAGAAAAGTACATGGACT +ACCTATCCACCCAAGTTCGCTACTTGGGTGAAGAAGGGTCTACACCTGGAGTGCTGTAAG +CACCAATCTTAATGTTGTCAGGCCTGCTAGTCAGCCACAGCTTGGGGAAAGCTGTGCAGC +CTGTGACCCCCCCAGGAGAAGCTGGGAAACCAAGCCTATAGTCAGGCCGAGAACGCCATG +GCACGGAAGAAGCCATGCTGCCTGTGAGCCCCTCAGAGGACACTGAGTCAAAAAACCCCA +CGCGCTTGGAGGCGCAGGATGGGAAAAGAAGGTGGCGACCTTCCCCACCCTTCAATCTGG +GGCCTGAACTGGAGATCAGCTGTGGATCTCCAGAAGAGGGACTAGTGGTTAGAGGAGACC +CCCCGGAAAACGCAAAACAGCATATTGACGCTGGGAAAGACCAGAGACTCCATGAGTTTC +CACCACGCTGGCCGCCAGGCACAGATCGCCGAATAGCGGCGGCCGGTGTGGG-------- +-------- +>JAM_2016_WI-JM6-SER|Jamaica|2016-06-13 +---------------------------------------TTTGAAGCGAAAGCTAGCAAC +AGTATCAACAGGTTTTATTTTGGATTTGGAAACGAGAGTTTCTGGTCATGAAAAACCCAA +AAAAGAAATCCGGAGGATTCCGGATTGTCAATATGCTAAAACGCGGAGTAGCCCGTGTGA +GCCCCTTTGGGGGCTTGAAGAGGCTGCCAGCCGGACTTCTGCTGGGTCATGGGCCCATCA +GGATGGTCTTGGCGATTCTAGCCTTTTTGAGATTCACGGCAATCAAGCCATCACTGGGTC +TCATCAATAGATGGGGTTCAGTGGGGAAAAAAGAGGCTATGGAAATAATAAAGAAGTTCA +AGAAAGATCTGGCTGCCATGCTGAGAATAATCAATGCTAGGAAGGAGAAGAAGAGACGAG +GCGCAGATACTAGTGTCGGAATTGTTGGCCTCCTGCTGACCACAGCTATGGCAGCGGAGG +TCACTAGACGTGGGAGTGCATACTACATGTACTTGGACAGAAACGATGCTGGGGAGGCCA +TATCTTTTCCAACTACATTGGGGATGAATAAGTGTTATATACAGATCATGGATCTTGGAC +ACATGTGTGATGCCACCATGAGCTATGAATGCCCTATGCTGGATGAGGGGGTGGAACCAG +ATGACGTCGATTGTTGGTGCAACACGACGTCAACTTGGGTTGTGTACGGAACCTGCCATC +ACAAAAAAGGTGAAGCACGGAGATCTAGAAGAGCTGTGACGCTCCCCTCCCATTCCACTA +GGAAGCTGCAAACGCGGTCGCAAACCTGGTTGGAATCAAGAGAATACACAAAGCACTTGA +TTAGAGTCGAAAATTGGATATTCAGGAACCCTGGCTTCGCGTTAGCAGCAGCTGCCATCG +CTTGGCTTTTGGGAAGCTCAACGAGCCAAAAAGTCATATACTTGGTCATGATACTGCTGA +TTGCCCCGGCATACAGCATCAGGTGCATAGGAGTCAGCAATAGGGACTTTGTGGAAGGTA +TGTCAGGTGGGACTTGGGTTGATGTTGTCTTGGAACATGGAGGTTGTGTCACCGTAATGG +CACAGGACAAACCGACTGTCGACATAGAGCTGGTTACAACAAYAGTCAGCAACATGGCGG +AGGTAAGATCCTACTGCTATGAGGCATCAATATCAGACATGGCTTCGGACAGCCGCTGCC +CAACACAAGGTGAAGCCTACCTTGACAAGCAATCAGACACTCAATATGTCTGCAAAAGAA +CGTTAGTGGACAGAGGCTGGGGAAATGGATGTGGACTTTTTGGCAAASGGAGCCTGGTGA +CATGCGCTAAGTTTGCATGCTCCAAGAAAATGACCGGGAAGAGCATCCAGCCAGAGAATC +TGGAGTACCGGATAATGCTGTCAGTTCATGGCTCCCAGCACAGTGGGATGATCGTTAATG +ACACAGGACATGAAACTGATGAGAATAGAGCGAAKGTTGAGATAACGCCCAATTCACCAA +GAGCCGAAGCCACCCTGKGGGGTTTTGGAAGCCTAGGACTTGATTGTGAACCGAGGACAG +GCCTTGACTTTTCAGATTTGTATTACTTGACTATGAATAACAAGCACTGGTTKGTTCACA +AGGAGTGGTTCCACGACATTCCATTACCTTGGCACGCTGGGGCAGACACCGGAACTCCAC +ACTGGAACAACAAAGAAGCACTGGTAGAGTTCAAGGACGCACATGCCAAAAGGCAAACTG +TCGTGGTTCTAGGGAGTCAAGAAGGAGCAGTTCACACGGCCCTTGCTGGAGCTCTGGAKG +CTGAGATGGATGGTGCAAAGGGAAGGCTGTCCTCTGGCCACTTGAAATGTCGCCTGAAAA +TGGATAAACTTAGATTGAAGGGCGTGTCATACTCCTTGTGTACCGCAGCGTTCACATTCA +CCAAGATCCCGGCTGAAACACTGCACGGGACAGTCACAGTGGAGGTACAGTACGCAGGGA +CAGATGKACCTTGCAAGGTTCCAGCTCAGATGGCGGTGGACATGCAAACTCTGACCCCAG +TTGGGAGGTTGATAACCGCCAACCCCGTAATCACTGAAAGCACTGAGAACTCTAAGATGA +TGCTGGAACTTGATCCACCATTTGGGGACTCTTACATTGTCATAGKAGTCGGGGAGAAGA +AGATCACCCACCACTGKCACAGGAGTGGCAGCACCATTGGAAAAGCATTTGAAGCCACTG +TGAGAGGTGCCAAGAGAATGGCAGTCTTGGGAGACACAGCCTGGGACTTTGGATCAGTTG +GAGGCGCTCTCAACTCATTGGGCAAGGGCATCCATCAAATTTTTGGAGCAGCTTTCAAAT +CATTGTTTGGAGGAATGTCCTGGTTCTCACAAATCCTCATTGGAACKTTGCTGATGTGGT +TGGKTCTGAACACAAAGAATGGATCTATTTCCCTCATGTGCTTGGCCTTAGGGGGAGTGT +TGATCTTCTTATCCACAGCCGTCTCTGCTGATGTGGGGTGCTCGGTGGACTTCTCAAAGA +AGGAGACGAGATGCGGTACAGGGGTGTTCGTCTATAACGACGTTGAAGCCTGGAGGGACA +GGTACAAGTACCATCCTGACTCCCCCCGTAGATTGGCAGCAGCAGTCAAGCAAGCCTGGG +AAGATGGTATCTGCGGGATCTCCTCTGTTTCAAGAATGGAAAACATCATGTGGAGATCAG +TAGAAGGGGAGCTCAATGCAATCCTGGAAGAGAATGGAGTTCAACTGACGGTCGTTGTGG +GATCTKTAAAAAACCCCATGTGGAGAGGTCCACAGAGATTGCCCGTGCCTGTGAACGAGC +TGCCCCACGGCTGGAAGGCTTGGGGGAAATCGTACTTCGTTAGAGCAGCAAAGACAAATA +AYAGCTTTGTCGTGGATGGTGACACACTGAAGGAATGCCCACTCAAACATAGAGCATGGA +ACAGCTTTCTTGTGKAGGATCATGGGTTCGGGGTATTTCACACTAGTGTCTGGCTCAAGG +TTAGAGAAGATTATTCATTAGAKTGTGATCCAGCCGTTATTGGAACAGCTGTTAAGGGAA +AGGAGGCTGTACACAGTGATCTAGGCTACTGGATTGAGAGTGAGAAGAATGACACATGKA +GGCTGAAGAGGGCCCATCTGATCGAGATGAAAACATGTGAATGGCCAAAGTCCCACACAT +TGTGGACAGATGGAATAGAAGAGAGTGATCTGATCATACCCAAGTCTTTAGCTGGKCCAC +TCAGCCATCACAATACCAGAGAGGGCTACAGGACCCAAATGAAARGGCCATGGCACAGTG +AAGAGCTTGAAATTCGGTTTGAGGAATGCCCAGGCACTAAGGTCCACGTGKAGGAAACAT +GTGGAACAAGAGGACCATCTCTGAGATCAACCACTGCAAGCGGAAGGGTGATCGAGRAAT +GGTGCTGCAGGGAGTGCACAATGCCCCCACTGTCGTTCCGGGCTAAAGATGGCTGTTGGT +ATGGAATGGAGATAAGGCCCAGGAAAGAACCAGAAAGCAACTTAGTAAGGTCAGTGGTGA +CTGCAGGATCAACTGATCACATGGATCACTTCTCCCTTGGAGTGCTTGTGATTCTGCTCA +TGGTGCAGGAAGGGCTGAAGAAGAGAATGACCACAAAGATCATCATAAGCACATCAATGG +CAGTGCTGGTAGCTATGATCCTGGGAGGATTTTCAATGAGTGACCTGGCTAAGCTTGCAA +TTTTGATGKGTGCCACCTTCGCGGAAATGAACACTGGAGGAGATGTAGCTCATCTGGCGC +TGATAGCGGCATTCAAAGTCAGACCAGCGTTGCTGGTATCTTTCATCTTCAGAGCTAATT +GGACACCCCGTGAAAGCATGCTGCTGGCCTTGGCCTCGTGTCTTTTGCAAACTGCGATCT +CCGCCTTGGAAGGCGACCTGATGGTTCTCATCAATGGTTTTGCTTTGGCCTGGTTGGCAA +TACGAGCGATGGTTGTTCCACGCACTGATAACATCACCTTGGCAATCCTGGCTGCTCTGA +CACCACTGGCCCGGGGCACACTGCTTGTGGCGTGGAGAGCAGGCCTTGCTACTTGCGGGG +GGTTTATGCTCCTCTCTCTGAAGGGAAAAGGCAGTGTGAAGAAGAACTTACCATTTGTCA +TGGCCCTGGGACTAACCGCTGTGAGGCTGGTCGACCCCATCAACGTGGTGGGACTGCTGT +TGCTCACAAGGAGTGGKAAGCGGAGCTGGCCCCCTAGCGAAGTACTCACAGCTGTTGGCC +TGATATGCGCATTGGCTGGAGGGTTCGCCAAGGCAGATATAGAGATGGCCGGGCCCATGG +CCGCGGTCGGTCTGCTAATTGTCAGTTACGTGGTCTCAGGAAAGAGTGTGGACATGTACA +TTGAAAGAGCAGGTGACATCACATGGGAAAAAGATGCGGAAGTCACTGGAAACAGTCCCC +GGCTCGATGTGGCGCTAGATGAGAGTGGTGATTTCTCCCTGGTGGAGGATGACGGTCCYC +CCATGAGAGAGATCATACTCAAGGTGGTCCTGATGACCATCTGTGGCATGAACCCAATAG +CCATACCCTTTGCAGCTGGAGCGTGGTACGTATACGTGAAGACTGGAAAAAGGAGTGGTG +CTCTATGGGATGTGCCTGCTCCCAAGGAAGTAAAAAAGGGGGAGACCACAGATGGAGTGT +ACAGAGTAATGACTCGTAGACTGCTAGGTTCAACACAAGTTGGAGTGGGAGTTATGCAAG +AGGGGGTCTTTCACACCATGTGGCACGTCACAAAAGGATCCGCGCTGAGAAGCGGTGAAG +GGAGACTTGATCCATACTGGGGAGATGTCAAGCAGGATCTGGTGTCATACTGTGGTCCAT +GGAAGCTAGATGCCGCCTGGGACGGGCACAGCGAGGTGCAGCTCTTGSCCGTGSCCCCCG +GAGAGAGAGCKAGGAACATCCAGACTCTGCCCGGAATATTTAAGACAAAGGATGGGGNNN +NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN +NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN +NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN +NNNNNNAGAAGAAGCAGCTGACTGTCTTAGACTTGCATCCTGGAGCTGGGAAAACCAGGA +GAGTTCTTCCTGAAATAGTCCGTGAAGCTATAAAAACAAGACTCCGTACTGTGATCTTAG +CTCCAACCAGGGTTGTCGCTGCTGAAATGGAGGAAGCCCTTAGAGGGCTTCCAGTGCGTT +ATATGACAACAGCAGTCAATGTCACCCATTCTGGAACAGAAATCGTCGACTTAATGTGCC +ATGCCACCTTCACTTCACGTCTACTACAGCCAATCAGAGTCCCCAACTATAATCTGTATA +TTATGGATGAGGCCCACTTCACAGATCCCTCAAGTATAGCAGCAAGAGGATACATTTCAA +CAAGGGTTGAGATGGGCGAGGCGGCTGCCATCTTCATGACCGCCACGCCACCAGGAACCC +GTGACGCATTTCCGGACTCCAACTCACCAATTATGGACACCGAAGTGKAAKTCCCAGAGA +GAGCCTGGAGCTCAGGCTTTGATTGGGTGACGGATCATTCTGGAAAAACAGTTTGGTTTG +TTCCAAGCGTGAGGAACGGCAATGAGATCGCAGCTTGTCTGACAAAGGCTGGAAAACGGG +TCATACAGCTCAGCAGAAAGACTTTTGAGACAGAGTTCCAGAAAACAAAACATCAAGAGT +GGGACTTTGTCGTGACAACCGACATTTCAGAGATGGGCGCCAACTTCAAAGCTGACCGTG +TCATAGATTCCAGGAGATGCCTAAAGCCGGTCATACTTGATGGCGAGAGAGTCATTCTGG +CTGGACCCATGCCCGTCACACATGCCAGCGCTGCCCAGAGGAGGGGGCGCATAGGCAGGA +ATCCCAACAAACCTGGAGATGAGTATCTGTATGGAGGTGGGTGCGCAGAGACTGACGAAG +ACCATGCACACTGGCTTGAAGCAAGAATGCTCCTTGACAATATTTACCTCCAAGATGGCC +TCATAGCCTCGCTCTATCGACCTGAGGCCGACAAAGTAGCAGCCATTGAGGGAGAGTTCA +AGCTTAGGACGGAGCAAAGGAAGACCTTTGTGKAACTCATGAAAAGAGGAGATCTTCCTG +TTTGGCTGGCCTATCAGGTTGCATCTGCCGGAATAACTTACACAGATAGAAGATGGTGCT +TTGATGGCACGACCAACAACACCATAATGGAAGACAGTGTGCCGGCAGAGGTGTGGACCA +GACACGGAGAGAAAAGAGTGCTCAAACCGAGGTGGATGGACGCCAGAGTTTGTTCAGATC +ATGCGGCCCTGAAGTCATTCAAGGAGTTTGCCGCTGGGAAAAGAGGAGCGGCTTTTGGAG +TGATGGAAGCCCTGGGAACACTGCCAGGACACATGACAGAGAGATTCCAGGAAGCCATTG +ACAACCTCGCTGTGCTCATGCGGGCAGAGACTGGAAGCAGGCCTTACAAAGCCGCGGCGG +CCCAATTGCCGGAGACCCTAGAGACCATTATGCTTTTGGGGTTGCTGGGAACAGTCTCGC +TGGGAATCTTTTTCGTCTTGATGAGGAACAAGGGCATAGGGAAGATGGGCTTTGGAATGG +TGACTCTTGGGGCCAGCGCATGGCTCATGTGGCTCTCGGAAATTGAGCCAGCCAGAATTG +CATGTGTCCTCATTGTTGTGTTCCTATTGCTGGTGGTGCTCATACCTGAGCCAGAAAAGC +AAAGATCTCCCCAGGACAACCAAATGGCAATCATCATCATGGTAGCAGTAGGTCTTCTGG +GCTTGATCACCKCCAATGAACTCGGATGGTTGGAGAGAACAAAGAGTGACCTAAGCCATC +TAATGGGAAGGAGAGAGGAGGGAGCAACCATAGGATTCTCAATGGACATTGACCTGCGGC +CAGCCTCAGCTTGGGCCATCTATGCTGCCTTGACAACTTTCATTACCCCAGCCGTCCAAC +ATGCAGTGACCACTTCATACAACAACTACTCCTTAATGGCGATGGCCACGCAAGCTGGAG +TGTTGTTTGGTATGGGCAAAGGGATGCCATTCTACGCATGGGACTTTGGAGTCCCGCTGC +TAATGATAGGTTGCTACTCACAATTAACACCCCTGACYCTAATAGTGGCCATCATTTTGC +TCGTGGCGCACTACATGTACTTGATCCCAGGGCTGCAGGCAGCAGCTGCGCGTGCTGCCC +AGAAGAGAACGGCAGCTGGCATCATGAAGAACCCTGTTGTGGATGKAATAGTGGTGACTG +ACATTGACACAATGACAATTGACCCCCAAGTGGAGAAAAAGATGGGACAGGTGCTACTCA +TAGCAGTAGCCGTCTCCAGCGCCATACTGTCGCGGACCGCCTGGGGGTGGGGGGAGGCTG +GGKCCCTGATCACAGCCGCAACTTCCACTTTGTGKGAAGGCTCTCCGAACAAGTACTGGA +ACTCCTCTACAGCCACTTCACTGTGTAACWTTTTTAGGGGAAGTTACTTGGYTGGAGCTT +CTCTAATCTACACAGTAACAAGAAACGCTGGCTTGGTCAAGAGACGTGGGGGTGGAACAG +GAGAGACCCTGGGAGAGAAATKGAAGGCCCGCTTGAACCAGATGTCGGCCCTGGAGTTCT +ACTCCTACAAAAAGTCAGGCATCACCGAGGTGTGCAGAGAAGAGGCCCGCCGCGCCCTCA +AGGACGGTGTAGCAACGGGAGGCCATGCTGTGTCCCGAGGAAGTGCAAAGCTGAGATGGT +TGGTGGAGCGGGGATACCTGCAGCCCTATGGAAAGGTCATTGATCTTGGATGTGGCAGAG +GGGGCTGGAGTTACTACGCCGCCACCATCCGCAAAGTTCAAGAAGTGAAAGGATACACAA +AAGGAGGCCCTGGTCATGAAGAACCCGTGTTGGTGCAAAGCTATGGGTGGAACATAGTCC +GTCTCAAGAGTGGGGTGGACGTCTTTCATATGGCGGCTGAGCCGTGTGACACGTTGCTGT +GTGACATAGGTGAGTCATCATCTAGTCCTGAAGTGGAAGAAGCACGGAYGCTCAGAGTCC +TCTCCATGGTGGGGGATTGGCTTGAAAAAAGACCAGGAGCCTTTTGTATAAAAGTGTTGT +GCCCATACACCAGCACTATGATGGAAACCCTGGAKCGACTGCAGCGTAGGTATGGGGGAG +GACTGGTCAGAGTGCCACTCTCCCGCAACTCTACACATGAGATGTACTGGGTCTCTGGAG +CGAAAAGCAACACCATAAAAAGTGTGTCCACCACGAGCCAGCTCCTCTTGGGGCGCATGG +ACKGGCCTAGGAGGCCAGTGAAATATGAGGAGGATGTGAATCTCGGCTCTGGCACGCGGG +CTGTGGTAAGCTGCGCTGAAGCTCCCAACATGAAGATCATTGGTAACCGCATTGAAAGGA +TCCGCAGTGAGCACGCGGAAACGTGGTTCTTTGACGAGAACCACCCATATAGGACATGGG +CTTACCATGGAAGCTATGAGGCCCCCACACAAGGGTCAGCATCCTCTCTAGTAAACKGGG +TTGTCAAGCTCCTGTCAAAACCCTGGGATGTGGTGACTGGAGTCACAGGAATAGCCATGA +CCGACACCACACCGTATGGTCAGCAAAGAGTTTTCAAGGAAAAAGTGGACACTAGGGTGC +CAGACCCCCAAGAAGGCACTCGTCAKGTTATGAKCATGGTCTCTTCCTGGTTGTGGAAAG +AGCTAGGCAAACACAAACGGCCACGAGTCTGTACCAAAGAAGAGTTCATCAACAAGGTTC +GTAGCAATGCAGCATTAGBGGCAATATTTGAAGAGGAAAAAGAGTGGAAGACTGCAGTGG +AAGCTGTGAACGATCCAAGGTTCTGGGCTCTAGTGGACAAGGAAAGAGAGCACCACCTGA +GAGGAGAGTGCCAGAGTTGTGTGTACAACATGATGGGAAAAAGAGAAAAGAAACAAGGGG +AATTTGGAAAGGCCAAGGGCAGCCGCGCCATCTGGTATATGTGGCTAGGGGCTAGATTTC +TAGAGTTCGAAGCCCTTGGATTCTTGAACGAGGAYCACTGGATGGGGAGAGAGAACTCAG +GAGGTGGTGTTGAAGGGCTGGGATTACAAAGACTCGGATATGTCCTAGAAGAGATGAGTC +GCATACCAGGAGGAAGGATGTATGCAGATGACACTGCTGGCTGGGATACCCGCATCAGCA +GTTTTGATCTAGAGAATGAAGCTCTAATCACCAACCAAATGGAGAAAGGGCACAGGGCCT +TGGCATTGGCCATAATCAAGTACACATACCAAAACAAAGTGGTAAAGGTCCTTAGACCAG +CTGAAAAAGGGAAAACAGTTATGGACATTATTTCGAGACAAGACCAAAGGGGGAGCGGAC +AAGTTGTCACTTANGCTCTTAACACATTTACCAACCTAGTGGTGCAACTCATTCGGAATA +TGGAGGCTGAGGAAGTTCTAGAGATGCAAGACTTGTGGCTGCTGCGGAGGTCAGAGAAAG +TGACCAACTGGTTGCAGAGCAACGGATGGGATAGGCTCAAACGAATGGCAGTCAGTGGAG +ATGATTGCGTTGTGAAGCCAATTGATGATAGGTTTGCACATGCCCTCAGGTTCTTGAATG +ATATGGGAAAAGTTAGGAAGGACACACAAGAGTGKAAACCCTCAACTGGATGGGACAACT +GKGAAGAAGTTCCGTTTTGCTCCCACCACTTCAACAAGCTCCATCTCAAGKACGGKAGGT +CCATTGTGGTTCCCTGCCGCCACCAAGATGAACTGATTGGCCGGGCCCGCGTCTCTCCAG +GGGCGGGATGGAGCATCCGGGAGACTGCTTGCCTAGCAAAATCATATKCGCAAATGTGGC +AGCTCCTTTATTTCCACAGAAGGGACCTCYGACTGATGGCCAATGCCATTTGTTCATCTG +TGCCAGTTGACTGGGTTCCAACTGGGAGAACTACCTGGTCAATCCATGGAAAGGGAGAAT +GGATGACCACTGAAGACATGCTTGTGGTGTGGAACAGAGTGTGGATTGAGGAGAACGACC +ACATGGAAGACAAGACCCCAGTTACGAAATGGACAGACATTCCCTATTTGGGAAAAAGGG +AAGACTTGTGGTGTGGATCTCTCATAGGGCACAGACCGCGCACCACCTGGGCTGAGAACA +TTAAAAACACAGTCAACATGGTGCGCAGKATCATAGGTGAGGAAGAAAAGTACATGGACT +ACCTATCCACCCAAGTTCGCTACTTGGGTGAAGAAGGGTCTACACCTGGAGTGCTGTAAG +CACCAATCTTAATGTTGTCAGGCCTGCTAGTCAGCCACAGCTTGGGGAAAGCTGTGCAGC +CTGTGACCCCCCCAGGAGAAGCTGGGAAACCAAGCCTATAGTCAGGCCGAGAACGCCATG +GCACGGAAGAAGCCATGCTGCCTGTGAGCCCCTCAGAGGACACTGAGTC-AAAAACCCCA +CGCGCTTGGAGGCGCAGGATGGGAAAAGAAGGTGGCGACCTTCCCCACCCTTCAATCTGG +GGCCTGAACTGGAGATCAG----------------------------------------- +------------------------------------------------------------ +------------------------------------------------------------ +-------- diff --git a/notebooks/Data.ipynb b/notebooks/Data.ipynb new file mode 100644 index 0000000..5c849fc --- /dev/null +++ b/notebooks/Data.ipynb @@ -0,0 +1,874 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Open a CSV file using Pandas" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sepal_lengthsepal_widthpetal_lengthpetal_widthspecies
05.13.51.40.2se
14.93.01.40.2setosa
24.73.21.30.2setosa
34.63.11.50.2setosa
45.03.61.40.2setosa
55.43.91.70.4setosa
64.63.41.40.3setosa
75.03.41.50.2setosa
84.42.91.40.2setosa
94.93.11.50.1setosa
105.43.71.50.2setosa
114.83.41.60.2setosa
124.83.01.40.1setosa
134.33.01.10.1setosa
145.84.01.20.2setosa
155.74.41.50.4setosa
165.43.91.30.4setosa
175.13.51.40.3setosa
185.73.81.70.3setosa
195.13.81.50.3setosa
\n", + "
" + ], + "text/plain": [ + " sepal_length sepal_width petal_length petal_width species\n", + "0 5.1 3.5 1.4 0.2 se\n", + "1 4.9 3.0 1.4 0.2 setosa\n", + "2 4.7 3.2 1.3 0.2 setosa\n", + "3 4.6 3.1 1.5 0.2 setosa\n", + "4 5.0 3.6 1.4 0.2 setosa\n", + "5 5.4 3.9 1.7 0.4 setosa\n", + "6 4.6 3.4 1.4 0.3 setosa\n", + "7 5.0 3.4 1.5 0.2 setosa\n", + "8 4.4 2.9 1.4 0.2 setosa\n", + "9 4.9 3.1 1.5 0.1 setosa\n", + "10 5.4 3.7 1.5 0.2 setosa\n", + "11 4.8 3.4 1.6 0.2 setosa\n", + "12 4.8 3.0 1.4 0.1 setosa\n", + "13 4.3 3.0 1.1 0.1 setosa\n", + "14 5.8 4.0 1.2 0.2 setosa\n", + "15 5.7 4.4 1.5 0.4 setosa\n", + "16 5.4 3.9 1.3 0.4 setosa\n", + "17 5.1 3.5 1.4 0.3 setosa\n", + "18 5.7 3.8 1.7 0.3 setosa\n", + "19 5.1 3.8 1.5 0.3 setosa" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas\n", + "df = pandas.read_csv('../data/iris.csv')\n", + "df.head(20)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Read a GeoJSON file" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import json\n", + "\n", + "with open('../data/Museums_in_DC.geojson') as f:\n", + " s = json.loads(f.read())" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'type': 'FeatureCollection',\n", + " 'features': [{'type': 'Feature',\n", + " 'properties': {'OBJECTID': 1,\n", + " 'ADDRESS': '716 MONROE STREET NE',\n", + " 'NAME': 'AMERICAN POETRY MUSEUM',\n", + " 'ADDRESS_ID': 309744,\n", + " 'LEGALNAME': 'HERITAGE US',\n", + " 'ALTNAME': 'AMERICAN POETRY MUSEUM',\n", + " 'WEBURL': ' http://americanpoetrymuseum.org/'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-76.995003703568, 38.9328428790235]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 2,\n", + " 'ADDRESS': '719 6TH STREET NW',\n", + " 'NAME': 'GERMAN-AMERICAN HERITAGE MUSEUM',\n", + " 'ADDRESS_ID': 238949,\n", + " 'LEGALNAME': 'CORCORAN GALLERY OF ART',\n", + " 'ALTNAME': ' ',\n", + " 'WEBURL': 'http://gahmusa.org/'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-77.01958878310639, 38.89911061096782]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 3,\n", + " 'ADDRESS': '1307 NEW HAMPSHIRE AVENUE NW',\n", + " 'NAME': 'HEURICH HOUSE FOUNDATION',\n", + " 'ADDRESS_ID': 241060,\n", + " 'LEGALNAME': 'U.S. DEPARTMENT OF THE INTERIOR MUSEUM',\n", + " 'ALTNAME': 'HEURICH HOUSE FOUNDATION',\n", + " 'WEBURL': 'HTTP://HEURICHHOUSE.ORG'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-77.04460619923155, 38.908030206509885]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 4,\n", + " 'ADDRESS': '950 INDEPENDENCE AVENUE SW',\n", + " 'NAME': 'NATIONAL MUSEUM OF AFRICAN ART',\n", + " 'ADDRESS_ID': 293262,\n", + " 'LEGALNAME': 'BUILDING PRESERVATION FOUNDATION',\n", + " 'ALTNAME': 'NATIONAL MUSEUM OF AFRICAN ART',\n", + " 'WEBURL': 'HTTP://AFRICA.SI.EDU/'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-77.02550917725944, 38.88796214949963]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 5,\n", + " 'ADDRESS': '740 JACKSON PLACE NW',\n", + " 'NAME': 'THE WHITE HOUSE ENDOWMENT TRUST',\n", + " 'ADDRESS_ID': 218748,\n", + " 'LEGALNAME': 'NATIONAL BUILDING MUSEUM',\n", + " 'ALTNAME': 'THE WHITE HOUSE ENDOWMENT TRUST',\n", + " 'WEBURL': 'HTTP://WWW.WHITEHOUSEHISTORY.ORG'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-77.03820629325264, 38.899842529027275]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 6,\n", + " 'ADDRESS': '921 PENNSYLVANIA AVENUE SE',\n", + " 'NAME': 'OLD NAVAL HOSPITAL FOUNDATION',\n", + " 'ADDRESS_ID': 82564,\n", + " 'LEGALNAME': 'JEWISH WAR VETERANS NATIONAL MEMORIAL MUSEUM ARCHIVES AND LI',\n", + " 'ALTNAME': 'OLD NAVAL HOSPITAL FOUNDATION',\n", + " 'WEBURL': 'http://hillcenterdc.org/home/'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-76.99314290714912, 38.8829885933721]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 7,\n", + " 'ADDRESS': '2201 C STREET NW',\n", + " 'NAME': 'DIPLOMATIC ROOMS FOUNDATION',\n", + " 'ADDRESS_ID': 243360,\n", + " 'LEGALNAME': 'NATIONAL PLASTICS MUSEUM INC',\n", + " 'ALTNAME': 'DIPLOMATIC ROOMS FOUNDATION',\n", + " 'WEBURL': 'https://diplomaticrooms.state.gov/home.aspx'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-77.04831079505838, 38.894135140073566]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 8,\n", + " 'ADDRESS': '4400 MASSACHUSETTS AVENUE NW',\n", + " 'NAME': 'AMERICAN UNIVERSITY MUSEUM AT THE KATZEN ARTS CENTER',\n", + " 'ADDRESS_ID': 223994,\n", + " 'LEGALNAME': 'VERNISSAGE FOUNDATION',\n", + " 'ALTNAME': 'AMERICAN UNIVERSITY MUSEUM AT THE KATZEN ARTS CENTER',\n", + " 'WEBURL': 'HTTP://WWW.AMERICAN.EDU/CAS/MUSEUM/'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-77.08841712551974, 38.9390892139132]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 9,\n", + " 'ADDRESS': '2320 S STREET NW',\n", + " 'NAME': 'TEXTILE MUSEUM',\n", + " 'ADDRESS_ID': 243164,\n", + " 'LEGALNAME': 'SMITHSONIAN INSTITUTION, S. DILLON RIPLEY CENTER',\n", + " 'ALTNAME': 'TEXTILE MUSEUM',\n", + " 'WEBURL': 'HTTP://WWW.TEXTILEMUSEUM.ORG'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-77.0464284034822, 38.89880233850966]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 10,\n", + " 'ADDRESS': '1145 17TH STREET NW',\n", + " 'NAME': 'NATIONAL GEOGRAPHIC MUSEUM',\n", + " 'ADDRESS_ID': 290192,\n", + " 'LEGALNAME': 'CAPITOL HILL RESTORATION SOCIETY INC',\n", + " 'ALTNAME': ' ',\n", + " 'WEBURL': 'HTTP://WWW.NATIONALGEOGRAPHIC.COM'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-77.03815544194862, 38.90519711304962]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 11,\n", + " 'ADDRESS': '3501 NEW YORK AVENUE NE',\n", + " 'NAME': 'THE NATIONAL BONSAI & PENJING MUSEUM',\n", + " 'ADDRESS_ID': 293238,\n", + " 'LEGALNAME': 'NATIONAL BONSAI FOUNDATION',\n", + " 'ALTNAME': ' ',\n", + " 'WEBURL': 'https://www.bonsai-nbf.org/contact-us/'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-76.96989266812075, 38.91241055669072]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 12,\n", + " 'ADDRESS': '2020 O STREET NW',\n", + " 'NAME': 'O STREET MUSEUM',\n", + " 'ADDRESS_ID': 243057,\n", + " 'LEGALNAME': 'LEPIDOPTERISTS SOCIETY',\n", + " 'ALTNAME': ' ',\n", + " 'WEBURL': 'http://www.omuseum.org/museum/'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-77.04592748104784, 38.90839101941751]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 13,\n", + " 'ADDRESS': '2101 CONSTITUTION AVENUE NW',\n", + " 'NAME': 'NATIONAL ACADEMY OF SCIENCES',\n", + " 'ADDRESS_ID': 242716,\n", + " 'LEGALNAME': 'SMITHSONIAN INSTITUTION, NATURAL HISTORY MUSEUM',\n", + " 'ALTNAME': 'NATIONAL ACADEMY OF SCIENCES',\n", + " 'WEBURL': 'WWW.NATIONALACADEMIES.ORG/NAS/ARTS'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-77.0476448925699, 38.89296693766957]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 14,\n", + " 'ADDRESS': '2401 FOXHALL ROAD NW',\n", + " 'NAME': 'KREEGER MUSEUM',\n", + " 'ADDRESS_ID': 271251,\n", + " 'LEGALNAME': 'CONGRESSIONAL CEMETERY',\n", + " 'ALTNAME': 'KREEGER MUSEUM',\n", + " 'WEBURL': 'HTTP://WWW.KREEGERMUSEUM.ORG/'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-77.08878098790044, 38.92191197499568]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 15,\n", + " 'ADDRESS': '1250 NEW YORK AVENUE NW',\n", + " 'NAME': 'THE NATIONAL MUSEUM OF WOMEN IN THE ART',\n", + " 'ADDRESS_ID': 279010,\n", + " 'LEGALNAME': 'NATIONAL MUSEUM OF HEALTH AND MEDICINE',\n", + " 'ALTNAME': 'THE NATIONAL MUSEUM OF WOMEN IN THE ART',\n", + " 'WEBURL': 'HTTP://WWW.NMWA.ORG'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-77.029163689541, 38.90005647268176]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 16,\n", + " 'ADDRESS': '900 JEFFERSON DRIVE SW',\n", + " 'NAME': 'ARTS AND INDUSTRIES BUILDING',\n", + " 'ADDRESS_ID': 293260,\n", + " 'LEGALNAME': 'ANACOSTIA COMMUNITY MUSEUM',\n", + " 'ALTNAME': ' ',\n", + " 'WEBURL': 'http://www.si.edu/Museums/arts-and-industries-building'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-77.02446647929001, 38.888201004559114]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 17,\n", + " 'ADDRESS': '736 SICARD STREET SE',\n", + " 'NAME': 'NATIONAL MUSEUM OF UNITED STATES NAVY',\n", + " 'ADDRESS_ID': 311896,\n", + " 'LEGALNAME': 'BLACK SPORTS LEGENDS FOUNDATION',\n", + " 'ALTNAME': 'NATIONAL MUSEUM OF UNITED STATES NAVY',\n", + " 'WEBURL': 'http://www.history.navy.mil/museums/NationalMuseum/org8-1.htm'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-76.99526950368147, 38.87303084860059]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 18,\n", + " 'ADDRESS': '500 17TH STREET NW',\n", + " 'NAME': 'CORCORAN GALLERY OF ART',\n", + " 'ADDRESS_ID': 279802,\n", + " 'LEGALNAME': 'SMITHSONIAN INSTITUTION, NATIONAL ZOOLOGICAL PARK',\n", + " 'ALTNAME': 'CORCORAN GALLERY OF ART',\n", + " 'WEBURL': 'http://www.corcoran.org/'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-77.0397427304576, 38.895854463821884]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 19,\n", + " 'ADDRESS': '2017 I STREET NW',\n", + " 'NAME': 'THE ARTS CLUB OF WASHINGTON',\n", + " 'ADDRESS_ID': 285527,\n", + " 'LEGALNAME': 'SMITHSONIAN INSTITUTION, NATIONAL MUSEUM OF AFRICAN AMERICAN HISTORY AND CULTURE',\n", + " 'ALTNAME': 'THE ARTS CLUB OF WASHINGTON',\n", + " 'WEBURL': 'HTTP://WWW.ARTSCLUBOFWASHINGTON.ORG'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-77.04573426864144, 38.90157618582308]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 20,\n", + " 'ADDRESS': '701 3RD STREET NW',\n", + " 'NAME': 'LILLIAN AND ALBERT SMALL JEWISH MUSEUM',\n", + " 'ADDRESS_ID': 293253,\n", + " 'LEGALNAME': 'LILLIAN AND ALBERT SMALL JEWISH MUSEUM',\n", + " 'ALTNAME': ' ',\n", + " 'WEBURL': 'http://www.jhsgw.org/'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-77.01493675564363, 38.89857205791096]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 21,\n", + " 'ADDRESS': '320 A STREET NE',\n", + " 'NAME': 'FREDERICK DOUGLASS MUSEUM',\n", + " 'ADDRESS_ID': 38979,\n", + " 'LEGALNAME': 'COSMOS CLUB HISTORIC PRESERVATION FOUNDATION',\n", + " 'ALTNAME': ' ',\n", + " 'WEBURL': 'http://www3.nahc.org/fd/'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-77.00110470253333, 38.891131915241964]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 22,\n", + " 'ADDRESS': '1334 G STREET NW',\n", + " 'NAME': 'ARMENIAN GENOCIDE MUSEUM AND MEMORIAL',\n", + " 'ADDRESS_ID': 240658,\n", + " 'LEGALNAME': 'GERMAN-AMERICAN HERITAGE MUSEUM',\n", + " 'ALTNAME': 'ARMENIAN GENOCIDE MUSEUM AND MEMORIAL',\n", + " 'WEBURL': 'http://www.armeniangenocidemuseum.org/'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-77.03108432435003, 38.89804891426683]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 23,\n", + " 'ADDRESS': '1799 NEW YORK AVENUE NW',\n", + " 'NAME': 'OCTAGON MUSEUM',\n", + " 'ADDRESS_ID': 218490,\n", + " 'LEGALNAME': 'AMERICAN RED CROSS MUSEUM',\n", + " 'ALTNAME': ' ',\n", + " 'WEBURL': 'HTTP://WWW.THEOCTAGON.ORG'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-77.04141820048949, 38.89635375607101]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 24,\n", + " 'ADDRESS': '1901 FORT PLACE SE',\n", + " 'NAME': 'ANACOSTIA COMMUNITY MUSEUM',\n", + " 'ADDRESS_ID': 286524,\n", + " 'LEGALNAME': 'FAUNA & FLORA INTERNATIONAL INC',\n", + " 'ALTNAME': 'ANACOSTIA COMMUNITY MUSEUM',\n", + " 'WEBURL': 'HTTP://ANACOSTIA.SI.EDU'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-76.97678467186984, 38.8565826636904]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 25,\n", + " 'ADDRESS': '2312 CALIFORNIA STREET NW',\n", + " 'NAME': 'NATIONAL MUSEUM OF THE JEWISH PEOPLE',\n", + " 'ADDRESS_ID': 234961,\n", + " 'LEGALNAME': 'GREENSEED COMMUNITY GARDEN LAND TRUST',\n", + " 'ALTNAME': ' ',\n", + " 'WEBURL': 'http://www.nsideas.com/archive/nmjh/'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-77.05118108814123, 38.91537084189858]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 26,\n", + " 'ADDRESS': '430 17TH STREET NW',\n", + " 'NAME': 'AMERICAN RED CROSS MUSEUM',\n", + " 'ADDRESS_ID': 300987,\n", + " 'LEGALNAME': 'DOUBLE M MANAGEMENT',\n", + " 'ALTNAME': 'AMERICAN RED CROSS MUSEUM',\n", + " 'WEBURL': 'http://www.redcross.org/'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-77.04020705622152, 38.89482654014118]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 27,\n", + " 'ADDRESS': '1600 21ST STREET NW',\n", + " 'NAME': 'THE PHILLIPS COLLECTION',\n", + " 'ADDRESS_ID': 243333,\n", + " 'LEGALNAME': 'SMITHSONIAN INSTITUTION, RENWICK GALLERY',\n", + " 'ALTNAME': 'THE PHILLIPS COLLECTION',\n", + " 'WEBURL': 'HTTP://WWW.PHILLIPSCOLLECTION.ORG'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-77.04685454590388, 38.91150979086159]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 28,\n", + " 'ADDRESS': '800 F STREET NW',\n", + " 'NAME': 'INTERNATIONAL SPY MUSEUM',\n", + " 'ADDRESS_ID': 238378,\n", + " 'LEGALNAME': 'CONFEDERATE MEMORIAL HALL ASSOCIATION',\n", + " 'ALTNAME': 'INTERNATIONAL SPY MUSEUM',\n", + " 'WEBURL': 'HTTP://WWW.SPYMUSEUM.ORG/'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-77.02328618491306, 38.896986480912865]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 29,\n", + " 'ADDRESS': '100 RAOUL WALLENBERG PLACE SW',\n", + " 'NAME': 'UNITED STATES HOLOCAUST MEMORIAL MUSEUM',\n", + " 'ADDRESS_ID': 293186,\n", + " 'LEGALNAME': 'NATIONAL MUSIC CENTER AND MUSEUM FOUNDATION',\n", + " 'ALTNAME': 'UNITED STATES HOLOCAUST MEMORIAL MUSEUM',\n", + " 'WEBURL': 'HTTP://WWW.USHMM.ORG'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-77.03268853739414, 38.88668873773371]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 30,\n", + " 'ADDRESS': '801 K STREET NW',\n", + " 'NAME': 'HISTORICAL SOCIETY OF WASHINGTON DC',\n", + " 'ADDRESS_ID': 238956,\n", + " 'LEGALNAME': 'Historical Society of Washington, D.C',\n", + " 'ALTNAME': ' ',\n", + " 'WEBURL': 'http://www.dchistory.org/'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-77.02294505078932, 38.90262956584554]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 31,\n", + " 'ADDRESS': '1849 C STREET NW',\n", + " 'NAME': 'INTERIOR MUSEUM',\n", + " 'ADDRESS_ID': 293214,\n", + " 'LEGALNAME': 'VICE PRESIDENTS RESIDENCE FOUNDATION',\n", + " 'ALTNAME': 'INTERIOR MUSEUM',\n", + " 'WEBURL': 'HTTP://WWW.DOI.GOV/INTERIORMUSEUM'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-77.04260256434321, 38.89445283458921]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 32,\n", + " 'ADDRESS': '4155 LINNEAN AVENUE NW',\n", + " 'NAME': 'HILLWOOD MUSEUM & GARDENS',\n", + " 'ADDRESS_ID': 284839,\n", + " 'LEGALNAME': 'SMITHSONIAN INSTITUTION, NATIONAL GALLERY OF ART',\n", + " 'ALTNAME': 'HILLWOOD MUSEUM & GARDENS',\n", + " 'WEBURL': 'WWW.HILLWOODMUSEUM.ORG'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-77.0526196505072, 38.94364171194315]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 33,\n", + " 'ADDRESS': '1318 VERMONT AVENUE NW',\n", + " 'NAME': 'BETHUNE MEMORIAL MUSEUM',\n", + " 'ADDRESS_ID': 225385,\n", + " 'LEGALNAME': 'NATIONAL MUSEUM OF WOMEN IN THE ARTS INC',\n", + " 'ALTNAME': ' ',\n", + " 'WEBURL': 'http://www.nps.gov/mamc/index.htm'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-77.03086564182146, 38.90817580546652]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 34,\n", + " 'ADDRESS': '1500 MASSACHUSETTS AVENUE NW',\n", + " 'NAME': 'NATIONAL MUSEUM OF CATHOLIC ART AND LIBRARY',\n", + " 'ADDRESS_ID': 242324,\n", + " 'LEGALNAME': 'KREEGER MUSEUM',\n", + " 'ALTNAME': ' ',\n", + " 'WEBURL': 'http://nmcal.org/nmcah_exhibition_in_washington.html'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-77.03551120800971, 38.90651019329394]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 35,\n", + " 'ADDRESS': '1 MASSACHUSETTS AVENUE NW',\n", + " 'NAME': 'NATIONAL GUARD MEMORIAL MUSEUM',\n", + " 'ADDRESS_ID': 238009,\n", + " 'LEGALNAME': 'CARL SCHMITT FOUNDATION INC',\n", + " 'ALTNAME': ' ',\n", + " 'WEBURL': 'HTTP://WWW.NGEF.ORG'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-77.00956143652462, 38.89812580681995]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 36,\n", + " 'ADDRESS': '1811 R STREET NW',\n", + " 'NAME': 'NATIONAL MUSEUM OF AMERICAN JEWISH MILITARY HISTORY',\n", + " 'ADDRESS_ID': 243292,\n", + " 'LEGALNAME': 'CITY TAVERN PRESERVATION FOUNDATION',\n", + " 'ALTNAME': 'JEWISH WAR VETERANS NATIONAL MEMORIAL MUSEUM ARCHIVES AND LIBRARY',\n", + " 'WEBURL': 'http://www.nmajmh.org/'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-77.04211577477285, 38.91282059721026]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 37,\n", + " 'ADDRESS': '3900 HAREWOOD ROAD NE',\n", + " 'NAME': 'POPE JOHN PAUL II CULTURAL CENTER',\n", + " 'ADDRESS_ID': 288031,\n", + " 'LEGALNAME': 'AMERICAN POETRY MUSEUM',\n", + " 'ALTNAME': ' ',\n", + " 'WEBURL': 'HTTP://WWW.JP2CC.ORG'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-77.00466710351098, 38.93776654366721]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 38,\n", + " 'ADDRESS': '700 PENNSYLVANIA AVENUE NW',\n", + " 'NAME': 'NATIONAL ARCHIVES MUSEUM',\n", + " 'ADDRESS_ID': 293251,\n", + " 'LEGALNAME': 'PHILLIPS COLLECTION',\n", + " 'ALTNAME': 'NATIONAL ARCHIVES MUSEUM',\n", + " 'WEBURL': 'https://www.archives.gov/dc-metro/washington/'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-77.0228592459719, 38.89285370583677]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 39,\n", + " 'ADDRESS': '201 18TH STREET NW',\n", + " 'NAME': 'ART MUSEUM OF THE AMERICAS',\n", + " 'ADDRESS_ID': 294191,\n", + " 'LEGALNAME': 'Art Museum of the Americas',\n", + " 'ALTNAME': ' ',\n", + " 'WEBURL': 'http://www.museum.oas.org/'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-77.04147388756545, 38.892799844291474]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 40,\n", + " 'ADDRESS': '9 HILLYER COURT NW',\n", + " 'NAME': 'INTERNATIONAL ARTS & ARTISTS',\n", + " 'ADDRESS_ID': 279975,\n", + " 'LEGALNAME': 'THE INTERNATIONAL SPY MUSEUM',\n", + " 'ALTNAME': 'INTERNATIONAL ARTS & ARTISTS',\n", + " 'WEBURL': 'WWW.ARTSANDARTISTS.ORG'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-77.04730884101534, 38.91222144699389]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 41,\n", + " 'ADDRESS': '2 MASSACHUSETTS AVENUE NE',\n", + " 'NAME': 'NATIONAL POSTAL MUSEUM',\n", + " 'ADDRESS_ID': 293217,\n", + " 'LEGALNAME': 'BEAD SOCIETY OF GREATER WASHINGTON',\n", + " 'ALTNAME': 'NATIONAL POSTAL MUSEUM',\n", + " 'WEBURL': 'HTTP://POSTALMUSEUM.SI.EDU'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-77.00819124512859, 38.8981463599396]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 42,\n", + " 'ADDRESS': '1519 MONROE STREET NW',\n", + " 'NAME': 'POWHATAN MUSEUM',\n", + " 'ADDRESS_ID': 234557,\n", + " 'LEGALNAME': 'AMERICAN UNIVERSITY MUSEUM',\n", + " 'ALTNAME': ' ',\n", + " 'WEBURL': 'http://www.powhatanmuseum.com/'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-77.03550660261739, 38.93243814726252]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 43,\n", + " 'ADDRESS': '144 CONSTITUTION AVENUE NE',\n", + " 'NAME': 'SEWALL-BELMONT HOUSE AND MUSEUM',\n", + " 'ADDRESS_ID': 286201,\n", + " 'LEGALNAME': 'AMERICAN MUSEUM OF PEACE INC',\n", + " 'ALTNAME': ' ',\n", + " 'WEBURL': 'HTTP://WWW.SEWALLBELMONT.ORG'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-77.00375845550963, 38.89219466787653]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 44,\n", + " 'ADDRESS': '802 MASSACHUSETTS AVENUE NE',\n", + " 'NAME': 'SHOOK MUSEUM FOUNDATION',\n", + " 'ADDRESS_ID': 79669,\n", + " 'LEGALNAME': 'GREENPEACE FUND',\n", + " 'ALTNAME': ' ',\n", + " 'WEBURL': 'SHOOKMUSEUM.ORG'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-76.9944246526475, 38.891834530779185]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 45,\n", + " 'ADDRESS': '1400 CONSTITUTION AVENUE NW',\n", + " 'NAME': 'SMITHSONIAN INSTITUTION, NATIONAL MUSEUM OF NATURAL HISTORY',\n", + " 'ADDRESS_ID': 310702,\n", + " 'LEGALNAME': \"B'NAI B'RITH KLUTZNICK MUSEUM\",\n", + " 'ALTNAME': 'SMITHSONIAN INSTITUTION, NATIONAL MUSEUM OF NATURAL HISTORY',\n", + " 'WEBURL': 'http://www.mnh.si.edu/'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-77.02591603234607, 38.89121850995097]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 46,\n", + " 'ADDRESS': '500 HOWARD PLACE NW',\n", + " 'NAME': 'HOWARD UNIVERSITY MUSEUM',\n", + " 'ADDRESS_ID': 243398,\n", + " 'LEGALNAME': 'COLLECTONS STRIES AMRCN MSLIMS',\n", + " 'ALTNAME': ' ',\n", + " 'WEBURL': 'http://www.coas.howard.edu/msrc/museum.html'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-77.0196991986925, 38.922360224748935]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 47,\n", + " 'ADDRESS': '8TH STREET NW AND F ST NW',\n", + " 'NAME': 'NATIONAL PORTRAIT GALLERY',\n", + " 'ADDRESS_ID': 294248,\n", + " 'LEGALNAME': 'BOHEMIA ARTS',\n", + " 'ALTNAME': 'NATIONAL PORTRAIT GALLERY',\n", + " 'WEBURL': 'HTTP://WWW.NPG.SI.EDU'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-77.02295571583119, 38.89815890118559]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 48,\n", + " 'ADDRESS': '14TH STREET NW AND CONSTITUTION AVENUE NW',\n", + " 'NAME': 'NATIONAL MUSEUM OF AFRICAN AMERICAN HISTORY AND CULTURE',\n", + " 'ADDRESS_ID': 903110,\n", + " 'LEGALNAME': 'AMERICANS FOR BATTLEFIELD PRESERVATION',\n", + " 'ALTNAME': 'NATIONAL MUSEUM OF AFRICAN AMERICAN HISTORY AND CULTURE',\n", + " 'WEBURL': 'HTTP://WWW.NMAAHC.SI.EDU/'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-77.03271597832732, 38.89119983415094]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 49,\n", + " 'ADDRESS': '4TH STREET SW AND INDEPENDENCE AVENUE SW',\n", + " 'NAME': 'NATIONAL MUSEUM OF AMERICAN INDIAN',\n", + " 'ADDRESS_ID': 294429,\n", + " 'LEGALNAME': 'BLAIR HOUSE RESTORATION FUND',\n", + " 'ALTNAME': ' ',\n", + " 'WEBURL': 'WWW.NMAI.SI.EDU'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-77.01672595283219, 38.88826561652]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 50,\n", + " 'ADDRESS': '6TH STREET SW AND INDEPENDENCE AVENUE SW',\n", + " 'NAME': 'NATIONAL AIR AND SPACE MUSEUM',\n", + " 'ADDRESS_ID': 301565,\n", + " 'LEGALNAME': 'BETHUNE MEMORIAL MUSEUM',\n", + " 'ALTNAME': 'NATIONAL AIR AND SPACE MUSEUM',\n", + " 'WEBURL': 'HTTP://WWW.NASM.SI.EDU/'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-77.01979999825605, 38.888161175521944]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 51,\n", + " 'ADDRESS': '7THB STREET AND INDEPENDENCE AVENUE SW',\n", + " 'NAME': 'HIRSHHORN MUSEUM AND SCULPTURE GARDEN',\n", + " 'ADDRESS_ID': 294428,\n", + " 'LEGALNAME': 'D.C. OFFICE OF PUBLIC RECORDS AND ARCHIVES',\n", + " 'ALTNAME': 'HIRSHHORN MUSEUM AND SCULPTURE GARDEN',\n", + " 'WEBURL': 'HTTP://HIRSHHORN.SI.EDU/'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-77.02294902891254, 38.88843565656003]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 52,\n", + " 'ADDRESS': 'MADISON DRIVE NW AND 12TH STREET NW',\n", + " 'NAME': 'SMITHSONIAN INSTITUTION, NATIONAL MUSEUM OF AMERICAN HISTORY',\n", + " 'ADDRESS_ID': 293200,\n", + " 'LEGALNAME': None,\n", + " 'ALTNAME': 'SMITHSONIAN INSTITUTION, NATIONAL MUSEUM OF AMERICAN HISTORY',\n", + " 'WEBURL': 'HTTP://AMERICANHISTORY.SI.EDU'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-77.03005156534492, 38.89123181993075]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 53,\n", + " 'ADDRESS': '4TH STREET NW AND MADISON DRIVE NW',\n", + " 'NAME': 'NATIONAL GALLERY OF ART - EAST BUILDING',\n", + " 'ADDRESS_ID': 293209,\n", + " 'LEGALNAME': None,\n", + " 'ALTNAME': None,\n", + " 'WEBURL': 'http://www.nga.gov/content/ngaweb/visit/maps-and-information/east-building.html'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-77.01668919569053, 38.89125721273486]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 54,\n", + " 'ADDRESS': '4TH STREET NW AND MADISON DRIVE NW',\n", + " 'NAME': 'NATIONAL GALLERY OF ART - WEST BUILDING',\n", + " 'ADDRESS_ID': 293249,\n", + " 'LEGALNAME': None,\n", + " 'ALTNAME': None,\n", + " 'WEBURL': 'http://www.nga.gov/content/ngaweb/visit/maps-and-information/west-building.html'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-77.01989150273015, 38.891313914429645]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 55,\n", + " 'ADDRESS': '1000 JEFFERSON DRIVE SW',\n", + " 'NAME': 'SMITHSONIAN INSTITUTION - CASTLE',\n", + " 'ADDRESS_ID': 293187,\n", + " 'LEGALNAME': None,\n", + " 'ALTNAME': None,\n", + " 'WEBURL': 'http://www.si.edu/Museums/smithsonian-institution-building'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-77.02597189316775, 38.88879577572046]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 56,\n", + " 'ADDRESS': '1050 INDEPENDENCE AVENUE SW',\n", + " 'NAME': 'SACKLER GALLERY',\n", + " 'ADDRESS_ID': 293191,\n", + " 'LEGALNAME': 'ARTHUR M. SACKLER GALLERY',\n", + " 'ALTNAME': None,\n", + " 'WEBURL': 'http://www.asia.si.edu/'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-77.02645343758842, 38.88796502751886]}},\n", + " {'type': 'Feature',\n", + " 'properties': {'OBJECTID': 57,\n", + " 'ADDRESS': 'JEFFERSON DRIVE SW AND 12TH STREET SW',\n", + " 'NAME': 'FREER GALLERY',\n", + " 'ADDRESS_ID': 294417,\n", + " 'LEGALNAME': 'FREER GALLERY OF ART',\n", + " 'ALTNAME': None,\n", + " 'WEBURL': 'http://www.asia.si.edu/'},\n", + " 'geometry': {'type': 'Point',\n", + " 'coordinates': [-77.02736845485786, 38.8882746680144]}}]}" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s" + ] + } + ], + "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.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/notebooks/Fasta.ipynb b/notebooks/Fasta.ipynb new file mode 100644 index 0000000..ccb7c7f --- /dev/null +++ b/notebooks/Fasta.ipynb @@ -0,0 +1,65 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from IPython.display import display\n", + "class Fasta:\n", + " def __init__(self, data):\n", + " self.data = data\n", + " def _ipython_display_(self):\n", + " bundle = {\n", + " 'application/vnd.fasta.fasta': self.data,\n", + " 'text/plain': data\n", + " }\n", + " display(bundle, raw=True)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "with open('../data/zika_assembled_genomes.fasta') as f:\n", + " data = f.read()\n", + "Fasta(data)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "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.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/notebooks/Lorenz.ipynb b/notebooks/Lorenz.ipynb new file mode 100644 index 0000000..ee83699 --- /dev/null +++ b/notebooks/Lorenz.ipynb @@ -0,0 +1,233 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# The Lorenz Differential Equations" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Before we start, we import some preliminary libraries. We will also import (below) the accompanying `lorenz.py` file, which contains the actual solver and plotting routine." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "from ipywidgets import interactive, fixed" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We explore the Lorenz system of differential equations:\n", + "\n", + "$$\n", + "\\begin{aligned}\n", + "\\dot{x} & = \\sigma(y-x) \\\\\n", + "\\dot{y} & = \\rho x - y - xz \\\\\n", + "\\dot{z} & = -\\beta z + xy\n", + "\\end{aligned}\n", + "$$\n", + "\n", + "Let's change (\\\\(\\sigma\\\\), \\\\(\\beta\\\\), \\\\(\\rho\\\\)) with ipywidgets and examine the trajectories." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "c117838837384853ac94223a50ae967d", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "interactive(children=(FloatSlider(value=10.0, description='sigma', max=50.0), FloatSlider(value=2.666666666666…" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from lorenz import solve_lorenz\n", + "w=interactive(solve_lorenz,sigma=(0.0,50.0),rho=(0.0,50.0))\n", + "w" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For the default set of parameters, we see the trajectories swirling around two points, called attractors. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The object returned by `interactive` is a `Widget` object and it has attributes that contain the current result and arguments:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "t, x_t = w.result" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'sigma': 25.3, 'beta': 2.6666666666666665, 'rho': 28.0}" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "w.kwargs" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "After interacting with the system, we can take the result and perform further computations. In this case, we compute the average positions in \\\\(x\\\\), \\\\(y\\\\) and \\\\(z\\\\)." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "xyz_avg = x_t.mean(axis=1)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(30, 3)" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "xyz_avg.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Creating histograms of the average positions (across different trajectories) show that, on average, the trajectories swirl about the attractors." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "from matplotlib import pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAW4AAAEKCAYAAAAyx7/DAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAEH1JREFUeJzt3XuQZGV9xvHv4y4oIkhKRqMs60ipRAW5OBAt4g3UcDGoKZOAN7xUTXkjUGVKF62kKpZJiEYClpZmg6CWeAGExIAaSRQTUwLuchNYSRRRlossRgJC4gr+8kef1WGZmT6zTE/vu/v9VHXtdPfb5zwzO/30mfec052qQpLUjoeNO4AkaWEsbklqjMUtSY2xuCWpMRa3JDXG4pakxljcktQYi1uSGmNxS4ssyV8lOXHImMuSPGOpMmnbYnFrSSS5OMlPkzx83FlGKckE8Drg7za7/eYk+8+46W+A9y5lNm07LG6NXJJJ4LlAAUePYPnLF3uZD8HrgS9V1f9uuiHJ7sBjgXUzxn0ReGGSxy9tPG0LLG4thdcBlwCfAI7bdGOSVUnOnTkwyWlJPtR9/YQkX0iyIckPkvzxjHE3JnlXkquBe5Is75b3/SR3J7kuyStmjD8wyRXdfeck+XyS9824f851bS7J+5OcP+P6B5L8a5IdgCOAb8y478nATQyeaz9J8pMky6vq/4C1wEsW+sOUqCovXkZ6Ab4HvBV4FvAL4HHd7U8E7gV27a4vA24Fns2g6NYCfwbsCOwF3AD8bjf2RuBKYE9gp+62PwCe0D32j4B7gMd3j/8hcAKwA/D7wEbgfd3j5l3XLN/PY4A7gf2BNwPfAR7d3bcBOGiz8W8DPj/Lcj4EnDLu/x8v7V3c4tZIJfkdBgV9dlWtBb4PvAqgqn4IXA68vBt+KHBvVV0CHARMVNV7q2pjVd0A/D1wzIzFf6iqbqpuWqKqzqmqW6rql1X1eeC/gIMZvBAs78b/oqrOAy6bsZw+6/qVqvoJcCrwKeAk4Miq+p/u7t2Auzd7yH4MXmQ2d3c3XloQi1ujdhzw1aq6o7v+GWZMl3TXj+2+flV3HQZl/4Qkd266AO8GHjfjsTfNXFGS1yW5csb4fYDdGWyF31xVNcdj+6xrc1cA+wInVdXMZf0U2GWzsfsDV82yjF0YbLlLC7I17dTRNibJTsAfAsuS3Nbd/HBgtyT7VdVVwDnAB5OsAF4BPKcbdxPwg6p6yjyr+FURJ3kig63kw4BvVdX9Sa4EwmD6ZY8kmVHeezLY+u+7rpnf177AR4FPAm/k1y82AFcDTwW+3Y19GIMXkNm2uJ8GfLrPOqWZ3OLWKL0cuB94OoOtzv0ZlNW/M9hhSVVtAC4GzmRQnpuOvLgMuKvbAblTkmVJ9kly0Bzr2plBkW8ASPIGBoUJ8K0ux9u7nZgvYzCFsknvdSXZA/gnBnPbbwX2TfKCGUO+BDx/xvWdussDnmvdYZHPAi6a4/uR5mRxa5SOA86sqh9V1W2bLsCHgVfPOIzvM8CLmLHlWlX3A7/HoOx/ANwBnA48erYVVdV1wAcZlPSPGUxj/Ed330YGOyTfxGBq4jXABcDPF7KuJLsyKOZTquqLVXUv8AHgL2YM+xRwZPfXBlV1D/Ax4Lok62eMOxq4uKpuGfIzlB4kD5z2k7YPSS4FPlZVZ45g2X8J3F5Vpw5Z/5uq6prFXr+2fRa3tgtJng9cz2Br+tUMtoL3qqpbxxpM2gLunNT2Ym/gbOBRDHZKvtLSVqvc4pakxrhzUpIaM5Kpkt13370mJydHsWhJ2iatXbv2jqqa6DN2JMU9OTnJmjVrRrFoSdomJflh37FOlUhSYyxuSWqMxS1JjbG4JakxFrckNcbilqTGDC3uJHt3b06/6XJXkhOXIpwk6cGGHsddVdczeLtLkiwDbgbOn/dBkqSRWehUyWHA97vPCpQkjcFCz5w8BvjsbHckmQamAVauXPkQYy29yVUXjm3dN5581NjWLW2LxvV8Xqrncu8t7iQ7MvjUjnNmu7+qVlfVVFVNTUz0Ot1ekrQFFjJVcgRweVX9eFRhJEnDLaS4j2WOaRJJ0tLpVdxJHgm8GDhvtHEkScP02jnZfZr1Y0acRZLUg2dOSlJjLG5JaozFLUmNsbglqTEWtyQ1xuKWpMZY3JLUGItbkhpjcUtSYyxuSWqMxS1JjbG4JakxFrckNcbilqTGWNyS1BiLW5IaY3FLUmMsbklqjMUtSY2xuCWpMX0/5X23JOcm+W6SdUmeM+pgkqTZ9fqUd+A04CtV9cokOwKPHGEmSdI8hhZ3kl2B5wGvB6iqjcDG0caSJM2lz1TJXsAG4MwkVyQ5PcnOmw9KMp1kTZI1GzZsWPSgkqSBPsW9HDgQ+GhVHQDcA6zafFBVra6qqaqampiYWOSYkqRN+hT3emB9VV3aXT+XQZFLksZgaHFX1W3ATUn27m46DLhupKkkSXPqe1TJ8cBZ3RElNwBvGF0kSdJ8ehV3VV0JTI04iySpB8+clKTGWNyS1BiLW5IaY3FLUmMsbklqjMUtSY2xuCWpMRa3JDXG4pakxljcktQYi1uSGmNxS1JjLG5JaozFLUmNsbglqTEWtyQ1xuKWpMZY3JLUGItbkhpjcUtSYyxuSWpMr095T3IjcDdwP3BfVfmJ75I0Jr2Ku/PCqrpjZEkkSb04VSJJjelb3AV8NcnaJNOzDUgynWRNkjUbNmxYvISSpAfoW9yHVNWBwBHA25I8b/MBVbW6qqaqampiYmJRQ0qSfq1XcVfVLd2/twPnAwePMpQkaW5DizvJzkl22fQ18BLgmlEHkyTNrs9RJY8Dzk+yafxnquorI00lSZrT0OKuqhuA/ZYgiySpBw8HlKTGWNyS1BiLW5IaY3FLUmMsbklqjMUtSY2xuCWpMRa3JDXG4pakxljcktQYi1uSGmNxS1JjLG5JaozFLUmNsbglqTEWtyQ1xuKWpMZY3JLUGItbkhpjcUtSY3oXd5JlSa5IcsEoA0mS5reQLe4TgHWjCiJJ6qdXcSdZARwFnD7aOJKkYZb3HHcq8E5gl7kGJJkGpgFWrlz50JNpmza56sKxrPfGk48ay3qlxTR0izvJS4Hbq2rtfOOqanVVTVXV1MTExKIFlCQ9UJ+pkkOAo5PcCHwOODTJp0eaSpI0p6HFXVUnVdWKqpoEjgG+VlWvGXkySdKsPI5bkhrTd+ckAFV1MXDxSJJIknpxi1uSGmNxS1JjLG5JaozFLUmNsbglqTEWtyQ1xuKWpMZY3JLUGItbkhpjcUtSYyxuSWqMxS1JjbG4JakxFrckNcbilqTGWNyS1BiLW5IaY3FLUmMsbklqjMUtSY2xuCWpMUOLO8kjklyW5Kok1yb586UIJkma3fIeY34OHFpVP0uyA/DNJF+uqktGnE2SNIuhxV1VBfysu7pDd6lRhpIkza3PFjdJlgFrgScDH6mqS2cZMw1MA6xcuXKLA02uunCLHytp6+FzeXR67Zysqvuran9gBXBwkn1mGbO6qqaqampiYmKxc0qSOgs6qqSq7gQuBg4fSRpJ0lB9jiqZSLJb9/VOwIuA7446mCRpdn3muB8PfLKb534YcHZVXTDaWJKkufQ5quRq4IAlyCJJ6sEzJyWpMRa3JDXG4pakxljcktQYi1uSGmNxS1JjLG5JaozFLUmNsbglqTEWtyQ1xuKWpMZY3JLUGItbkhpjcUtSYyxuSWqMxS1JjbG4JakxFrckNcbilqTGWNyS1JihxZ1kzyRfT7IuybVJTliKYJKk2Q39lHfgPuAdVXV5kl2AtUkuqqrrRpxNkjSLoVvcVXVrVV3efX03sA7YY9TBJEmzW9Acd5JJ4ADg0lGEkSQN12eqBIAkjwK+AJxYVXfNcv80MA2wcuXKRQu4PZhcdeG4I0hqSK8t7iQ7MCjts6rqvNnGVNXqqpqqqqmJiYnFzChJmqHPUSUBPg6sq6pTRh9JkjSfPlvchwCvBQ5NcmV3OXLEuSRJcxg6x11V3wSyBFkkST145qQkNcbilqTGWNyS1BiLW5IaY3FLUmMsbklqjMUtSY2xuCWpMRa3JDXG4pakxljcktQYi1uSGmNxS1JjLG5JaozFLUmNsbglqTEWtyQ1xuKWpMZY3JLUGItbkhpjcUtSY4YWd5Izktye5JqlCCRJml+fLe5PAIePOIckqaehxV1V/wb89xJkkST1sHyxFpRkGpgGWLly5WItVlpUk6suHHeEJXfjyUeNO4IW2aLtnKyq1VU1VVVTExMTi7VYSdJmPKpEkhpjcUtSY/ocDvhZ4FvA3knWJ3nT6GNJkuYydOdkVR27FEEkSf04VSJJjbG4JakxFrckNcbilqTGWNyS1BiLW5IaY3FLUmMsbklqjMUtSY2xuCWpMRa3JDXG4pakxljcktQYi1uSGmNxS1JjLG5JaozFLUmNsbglqTEWtyQ1xuKWpMZY3JLUmF7FneTwJNcn+V6SVaMOJUma29DiTrIM+AhwBPB04NgkTx91MEnS7PpscR8MfK+qbqiqjcDngJeNNpYkaS7Le4zZA7hpxvX1wG9vPijJNDDdXf1ZkusferxFtztwx7hDbCGzj0fz2fPX446xRZr8uXc/6y3N/sS+A/sUd2a5rR50Q9VqYHXfFY9DkjVVNTXuHFvC7ONh9vEw+/z6TJWsB/accX0FcMto4kiShulT3N8GnpLkSUl2BI4BvjjaWJKkuQydKqmq+5K8HfhnYBlwRlVdO/Jko7FVT+UMYfbxMPt4mH0eqXrQdLUkaSvmmZOS1BiLW5Ias10Wd5Lju1P4r03y/nHnWagkf5Kkkuw+7ix9JflAku8muTrJ+Ul2G3em+bT8Ng9J9kzy9STrut/xE8adaSGSLEtyRZILxp1loZLsluTc7nd9XZLnjGI9211xJ3khgzM/n1lVzwD+ZsyRFiTJnsCLgR+NO8sCXQTsU1XPBP4TOGnMeea0DbzNw33AO6rqacCzgbc1lv8EYN24Q2yh04CvVNVvAfsxou9juytu4C3AyVX1c4Cqun3MeRbqb4F3MstJUFuzqvpqVd3XXb2EwfkAW6um3+ahqm6tqsu7r+9mUB57jDdVP0lWAEcBp487y0Il2RV4HvBxgKraWFV3jmJd22NxPxV4bpJLk3wjyUHjDtRXkqOBm6vqqnFneYjeCHx53CHmMdvbPDRRfJtLMgkcAFw63iS9ncpgw+SX4w6yBfYCNgBndlM9pyfZeRQr6nPKe3OS/Avwm7Pc9R4G3/NvMPgT8iDg7CR71VZyXOSQ7O8GXrK0ifqbL3tV/WM35j0M/pQ/aymzLVCvt3nY2iV5FPAF4MSqumvceYZJ8lLg9qpam+QF486zBZYDBwLHV9WlSU4DVgF/OooVbXOq6kVz3ZfkLcB5XVFfluSXDN4UZsNS5ZvPXNmT7As8CbgqCQymGi5PcnBV3baEEec0388dIMlxwEuBw7aWF8o5NP82D0l2YFDaZ1XVeePO09MhwNFJjgQeAeya5NNV9Zox5+prPbC+qjb9dXMug+JedNvjVMk/AIcCJHkqsCMNvAtZVX2nqh5bVZNVNcngl+TAraW0h0lyOPAu4OiqunfceYZo+m0eMnhl/ziwrqpOGXeevqrqpKpa0f1+HwN8raHSpnsu3pRk7+6mw4DrRrGubXKLe4gzgDOSXANsBI7byrf+thUfBh4OXNT9xXBJVb15vJFmtw28zcMhwGuB7yS5srvt3VX1pTFm2l4cD5zVveDfALxhFCvxlHdJasz2OFUiSU2zuCWpMRa3JDXG4pakxljcktQYi1uSGmNxS1Jj/h9SWeb4Qy3j+gAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.hist(xyz_avg[:,0])\n", + "plt.title('Average $x(t)$');" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.hist(xyz_avg[:,1])\n", + "plt.title('Average $y(t)$');" + ] + } + ], + "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.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/notebooks/bqplot demo.ipynb b/notebooks/bqplot demo.ipynb new file mode 100644 index 0000000..84fbb04 --- /dev/null +++ b/notebooks/bqplot demo.ipynb @@ -0,0 +1,188 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import bqplot.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "size = 100\n", + "scale = 100.\n", + "np.random.seed(0)\n", + "x_data = np.arange(size)\n", + "y_data = np.cumsum(np.random.randn(size) * scale)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/bussonniermatthias/anaconda/envs/scipy18jlab/lib/python3.6/site-packages/bqplot/pyplot.py:603: FutureWarning: Conversion of the second argument of issubdtype from `str` to `str` is deprecated. In future, it will be treated as `np.str_ == np.dtype(str).type`.\n", + " issubdtype(dtype, Scale.scale_types[key].dtype)\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "21f2d6c2a3c14d5296cc8c8391d6124a", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Figure(axes=[Axis(scale=LinearScale()), Axis(orientation='vertical', scale=LinearScale())], fig_margin={'top':…" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig = plt.figure(title='First Example')\n", + "plt.plot(y_data)\n", + "fig" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "dates = np.arange('2005-02', '2005-03', dtype='datetime64[D]')\n", + "size = len(dates)\n", + "prices = scale + 5 * np.cumsum(np.random.randn(size))" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "import ipyvolume.pylab as p3\n", + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "8dcdd5d482f14e5987931fd81b090ab6", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "VBox(children=(Figure(camera_center=[0.0, 0.0, 0.0], height=500, matrix_projection=[0.0, 0.0, 0.0, 0.0, 0.0, 0…" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "3496c5ad11f84073b93997326848a292", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Mesh(texture=None, triangles=array([[ 0, 40, 41],\n", + " [ 0, 41, 1],\n", + " [ 1, 41, 42],\n", + "…" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "p3.examples.klein_bottle()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/bussonniermatthias/anaconda/envs/scipy18jlab/lib/python3.6/site-packages/bqplot/pyplot.py:603: FutureWarning: Conversion of the second argument of issubdtype from `str` to `str` is deprecated. In future, it will be treated as `np.str_ == np.dtype(str).type`.\n", + " issubdtype(dtype, Scale.scale_types[key].dtype)\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "ec940529bf8d411db95690aa0f7fa4cf", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Figure(axes=[Axis(label='Date', scale=DateScale(), tick_format='%m/%d'), Axis(label='Price', orientation='vert…" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig = plt.figure(title='Changing Styles', background_style={'fill': 'lightgreen'},\n", + " title_style={'font-size': '20px','fill': 'DarkOrange'})\n", + "axes_options = {'x': {'label': 'Date', 'tick_format': '%m/%d'},\n", + " 'y': {'label': 'Price', 'tick_format': '0.0f'}}\n", + "plt.plot(dates, prices, 'b', axes_options=axes_options) # third argument is the marker string\n", + "fig" + ] + }, + { + "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.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/notebooks/lorenz.py b/notebooks/lorenz.py new file mode 100644 index 0000000..c83aab2 --- /dev/null +++ b/notebooks/lorenz.py @@ -0,0 +1,46 @@ +from matplotlib import pyplot as plt +from mpl_toolkits.mplot3d import Axes3D +import numpy as np +from scipy import integrate + +def solve_lorenz(sigma=10.0, beta=8./3, rho=28.0): + """Plot a solution to the Lorenz differential equations.""" + + max_time = 4.0 + N = 30 + + fig = plt.figure() + ax = fig.add_axes([0, 0, 1, 1], projection='3d') + ax.axis('off') + + # prepare the axes limits + ax.set_xlim((-25, 25)) + ax.set_ylim((-35, 35)) + ax.set_zlim((5, 55)) + + def lorenz_deriv(x_y_z, t0, sigma=sigma, beta=beta, rho=rho): + """Compute the time-derivative of a Lorenz system.""" + x, y, z = x_y_z + return [sigma * (y - x), x * (rho - z) - y, x * y - beta * z] + + # Choose random starting points, uniformly distributed from -15 to 15 + np.random.seed(1) + x0 = -15 + 30 * np.random.random((N, 3)) + + # Solve for the trajectories + t = np.linspace(0, max_time, int(250*max_time)) + x_t = np.asarray([integrate.odeint(lorenz_deriv, x0i, t) + for x0i in x0]) + + # choose a different color for each trajectory + colors = plt.cm.viridis(np.linspace(0, 1, N)) + + for i in range(N): + x, y, z = x_t[i,:,:].T + lines = ax.plot(x, y, z, '-', c=colors[i]) + plt.setp(lines, linewidth=2) + angle = 104 + ax.view_init(30, angle) + plt.show() + + return t, x_t \ No newline at end of file From d6c9c06c97b13b90c040399816a5bba7d6f77142 Mon Sep 17 00:00:00 2001 From: Matthias Bussonnier Date: Mon, 18 Jun 2018 14:55:04 +0200 Subject: [PATCH 011/105] install pip --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index ff53310..2b61a37 100644 --- a/readme.md +++ b/readme.md @@ -23,7 +23,7 @@ our best to help you, but you may have to solve any difficulties on your own. 2. Create a conda environment: ``` -$ conda create -c conda-forge -n scipy18jlab notebook jupyterlab pandas nodejs bqplot ipyvolume pythreejs --yes +$ conda create -c conda-forge -n scipy18jlab notebook jupyterlab pandas nodejs bqplot ipyvolume pythreejs pip --yes $ conda activate scipy18jlab From 3766801d0d3f3613de31c8989e22a117983ebe14 Mon Sep 17 00:00:00 2001 From: Jason Grout Date: Mon, 18 Jun 2018 11:32:07 -0700 Subject: [PATCH 012/105] More readme updates. --- readme.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/readme.md b/readme.md index 12c8e6d..4034e9a 100644 --- a/readme.md +++ b/readme.md @@ -4,21 +4,21 @@ This repository contain material and instructions to follow the "Getting started # Installation -We'd like attendees to read the following section and install the required -software ahead of time. We may ask you to update versions of the software more -closely to the tutorial date. +Please read the following section and install the required software ahead of +time. We may ask you to update versions of the software more closely to the +tutorial date. Please do not rely on cloud hosting to follow this tutorial, as the network connection may be unreliable. If possible, come to the tutorial with a computer where you have administrative privileges. -We'll assume you are using an Anaconda Python distribution (such as Anaconda or -miniconda). If you choose to work with a different Python distribution, we'll do +We'll assume you are using a recent Anaconda Python distribution (such as Anaconda or +Miniconda). If you choose to work with a different Python distribution, we'll do our best to help you, but you may have to solve any difficulties on your own. ## Software installation -1. Install either the full [anaconda distribution](https://www.continuum.io/downloads) (very extensive, but large) or [miniconda](https://conda.io/miniconda.html) (much smaller, only essential packages). +1. Install either the full [anaconda distribution](https://www.anaconda.com/download/) (very large, includes lots of conda packages by default) or [miniconda](https://conda.io/miniconda.html) (much smaller, with only essential packages by default, but any conda package can be installed). 2. Create a conda environment: From 268cd88c3d218b577da49aa84c66723fe28bb97a Mon Sep 17 00:00:00 2001 From: Matthias Bussonnier Date: Mon, 18 Jun 2018 23:17:20 +0200 Subject: [PATCH 013/105] pin python, notebook, and install geojson --- readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/readme.md b/readme.md index 2b61a37..af37714 100644 --- a/readme.md +++ b/readme.md @@ -23,12 +23,12 @@ our best to help you, but you may have to solve any difficulties on your own. 2. Create a conda environment: ``` -$ conda create -c conda-forge -n scipy18jlab notebook jupyterlab pandas nodejs bqplot ipyvolume pythreejs pip --yes +$ conda create -c conda-forge -n scipy18jlab notebook=5.5 jupyterlab pandas nodejs bqplot ipyvolume pythreejs pip python=3.6 --yes $ conda activate scipy18jlab # to use widgets -$ jupyter labextension install @jupyter-widgets/jupyterlab-manager jupyter-threejs ipyvolume bqplot +$ jupyter labextension install @jupyter-widgets/jupyterlab-manager jupyter-threejs ipyvolume bqplot @jupyterlab/geojson-extension ``` If you open multiple terminal windows make sure to activate the environment in each of them. From a9ffd5daf9de8546558c34798b530e3c6ce67423 Mon Sep 17 00:00:00 2001 From: Matthias Bussonnier Date: Mon, 18 Jun 2018 23:22:16 +0200 Subject: [PATCH 014/105] more extensions and pin versions --- readme.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/readme.md b/readme.md index c137c41..ab0382e 100644 --- a/readme.md +++ b/readme.md @@ -18,17 +18,21 @@ our best to help you, but you may have to solve any difficulties on your own. ## Software installation -1. Install either the full [anaconda distribution](https://www.anaconda.com/download/) (very large, includes lots of conda packages by default) or [miniconda](https://conda.io/miniconda.html) (much smaller, with only essential packages by default, but any conda package can be installed). +1. Install either the full [anaconda + distribution](https://www.anaconda.com/download/) (very large, includes lots + of conda packages by default) or + [miniconda](https://conda.io/miniconda.html) (much smaller, with only + essential packages by default, but any conda package can be installed). 2. Create a conda environment: ``` -$ conda create -c conda-forge -n scipy18jlab notebook=5.5 jupyterlab pandas nodejs bqplot ipyvolume pythreejs pip python=3.6 --yes +$ conda create -c conda-forge -n scipy18jlab notebook=5.5 jupyterlab pandas=0.33.1 nodejs=9.11 bqplot ipyvolume pythreejs pip python=3.6 --yes $ conda activate scipy18jlab # to use widgets -$ jupyter labextension install @jupyter-widgets/jupyterlab-manager jupyter-threejs ipyvolume bqplot @jupyterlab/geojson-extension +$ jupyter labextension install @jupyter-widgets/jupyterlab-manager jupyter-threejs ipyvolume bqplot @jupyterlab/geojson-extension @jupyterlab/fasta-extension ``` If you open multiple terminal windows make sure to activate the environment in each of them. From a34f2f9db63522e808b33b81df0b69c8438b58f7 Mon Sep 17 00:00:00 2001 From: Matthias Bussonnier Date: Mon, 18 Jun 2018 23:32:17 +0200 Subject: [PATCH 015/105] updates + cookie cutter --- Exercise-1/Exercise1.md | 2 +- outline.md | 6 +++--- readme.md | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Exercise-1/Exercise1.md b/Exercise-1/Exercise1.md index 9b6c542..a9fe359 100644 --- a/Exercise-1/Exercise1.md +++ b/Exercise-1/Exercise1.md @@ -1,4 +1,4 @@ -# Exercises 2 +# Exercises 1 Remove all the sticky notes from your screen :-) and attempt the following. These are _guidelines_, feel free to ere on the side of workflow and diff --git a/outline.md b/outline.md index e2c8450..7fe4231 100644 --- a/outline.md +++ b/outline.md @@ -96,11 +96,11 @@ Write one good thing on the green sticky note, one bad on the red one. ## Customizing JupyterLab -### 2:25-2:50 (35min) +### 2:25-2:50 (35min, Jason) 1. Changing editor settings 2. Changing theme - 3. Json config system overvie + 3. Json config system overview 4. Changing keyboard shortcuts 5. Exercise 3 (10 min) 1. change a keyboard shortcut @@ -109,7 +109,7 @@ Write one good thing on the green sticky note, one bad on the red one. 2. add a keyboard shortcut (restart and run all) 3. change an editor setting -## 2:50-3:15 (25min) - Workflows around Widgets +## 2:50-3:15 (25min) - Workflows around Widgets (Jason) 1. Introduction to widgets and libraries like bqplot, ipyvolume, pythreejs, etc. 2. Mirroring widget output diff --git a/readme.md b/readme.md index ab0382e..81089a3 100644 --- a/readme.md +++ b/readme.md @@ -27,7 +27,7 @@ our best to help you, but you may have to solve any difficulties on your own. 2. Create a conda environment: ``` -$ conda create -c conda-forge -n scipy18jlab notebook=5.5 jupyterlab pandas=0.33.1 nodejs=9.11 bqplot ipyvolume pythreejs pip python=3.6 --yes +$ conda create -c conda-forge -n scipy18jlab notebook=5.5 jupyterlab pandas=0.33.1 nodejs=9.11 bqplot ipyvolume pythreejs pip cookiecutter=1.6 python=3.6 --yes $ conda activate scipy18jlab From 885af631c92c0d14e82c0cbda523bac2e2428531 Mon Sep 17 00:00:00 2001 From: The Gitter Badger Date: Mon, 18 Jun 2018 21:37:06 +0000 Subject: [PATCH 016/105] Add Gitter badge --- readme.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/readme.md b/readme.md index 81089a3..35b2c32 100644 --- a/readme.md +++ b/readme.md @@ -1,5 +1,7 @@ # SciPy 2018 JupyterLab tutorial. +[![Join the chat at https://gitter.im/jupyterlab/scipy2018-jupyterLab-tutorial](https://badges.gitter.im/jupyterlab/scipy2018-jupyterLab-tutorial.svg)](https://gitter.im/jupyterlab/scipy2018-jupyterLab-tutorial?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) + This repository contain material and instructions to follow the "Getting started with JupyterLab" tutorial during SciPy 2018. # Installation From 1c76e43490722b5525ab586f50aa5d53f6ad2c56 Mon Sep 17 00:00:00 2001 From: Matthias Bussonnier Date: Mon, 18 Jun 2018 23:39:01 +0200 Subject: [PATCH 017/105] gitter --- readme.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/readme.md b/readme.md index 35b2c32..6fd35fb 100644 --- a/readme.md +++ b/readme.md @@ -39,6 +39,8 @@ $ jupyter labextension install @jupyter-widgets/jupyterlab-manager jupyter-three If you open multiple terminal windows make sure to activate the environment in each of them. +Join the [gitter channel]((https://badges.gitter.im/jupyterlab/scipy2018-jupyterLab-tutorial.svg)](https://gitter.im/jupyterlab/scipy2018-jupyterLab-tutorial?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) for updateson install instructions or if you have any questions. + ## Tutorial materials From b10e7b0d6e0219922a0312ecbe5804b7843eb897 Mon Sep 17 00:00:00 2001 From: Jason Grout Date: Mon, 18 Jun 2018 15:07:19 -0700 Subject: [PATCH 018/105] Remove gitter, since the tutorial will already have a slack channel set up. --- readme.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/readme.md b/readme.md index 6fd35fb..74659b5 100644 --- a/readme.md +++ b/readme.md @@ -1,7 +1,5 @@ # SciPy 2018 JupyterLab tutorial. -[![Join the chat at https://gitter.im/jupyterlab/scipy2018-jupyterLab-tutorial](https://badges.gitter.im/jupyterlab/scipy2018-jupyterLab-tutorial.svg)](https://gitter.im/jupyterlab/scipy2018-jupyterLab-tutorial?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) - This repository contain material and instructions to follow the "Getting started with JupyterLab" tutorial during SciPy 2018. # Installation @@ -39,9 +37,6 @@ $ jupyter labextension install @jupyter-widgets/jupyterlab-manager jupyter-three If you open multiple terminal windows make sure to activate the environment in each of them. -Join the [gitter channel]((https://badges.gitter.im/jupyterlab/scipy2018-jupyterLab-tutorial.svg)](https://gitter.im/jupyterlab/scipy2018-jupyterLab-tutorial?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) for updateson install instructions or if you have any questions. - - ## Tutorial materials To get the tutorial materials, clone this repository. **Please plan to update the materials shortly before the tutorial.** From 1181c600d44f57d097d92a68ff6a3d831c050992 Mon Sep 17 00:00:00 2001 From: Jason Grout Date: Mon, 18 Jun 2018 15:20:30 -0700 Subject: [PATCH 019/105] Tweak install instructions. --- readme.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/readme.md b/readme.md index 74659b5..d64b17c 100644 --- a/readme.md +++ b/readme.md @@ -27,12 +27,14 @@ our best to help you, but you may have to solve any difficulties on your own. 2. Create a conda environment: ``` -$ conda create -c conda-forge -n scipy18jlab notebook=5.5 jupyterlab pandas=0.33.1 nodejs=9.11 bqplot ipyvolume pythreejs pip cookiecutter=1.6 python=3.6 --yes +# Create the conda environment with specific packages +conda create -n scipy18jlab -c conda-forge --yes python=3.6 pip cookiecutter=1.6 notebook=5.5 pandas=0.23 nodejs=9.11 jupyterlab bqplot ipyvolume pythreejs -$ conda activate scipy18jlab +# Activate the conda environment +conda activate scipy18jlab -# to use widgets -$ jupyter labextension install @jupyter-widgets/jupyterlab-manager jupyter-threejs ipyvolume bqplot @jupyterlab/geojson-extension @jupyterlab/fasta-extension +# Install extra JupyterLab extensions +jupyter labextension install @jupyter-widgets/jupyterlab-manager jupyter-threejs ipyvolume bqplot @jupyterlab/geojson-extension @jupyterlab/fasta-extension ``` If you open multiple terminal windows make sure to activate the environment in each of them. From 430384354a4d0857e54fc92e1acfe13e0245afc4 Mon Sep 17 00:00:00 2001 From: Jason Grout Date: Mon, 18 Jun 2018 16:28:10 -0700 Subject: [PATCH 020/105] Add slack channel --- readme.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/readme.md b/readme.md index d64b17c..33ca6c1 100644 --- a/readme.md +++ b/readme.md @@ -2,6 +2,8 @@ This repository contain material and instructions to follow the "Getting started with JupyterLab" tutorial during SciPy 2018. +During the tutorial, feel free to get on the `jupyterlab` channel of scipy2018.slack.com for help and updates. + # Installation Please read the following section and install the required software ahead of From 0f25dcc0f371f584acfd625dfa463df735f0434f Mon Sep 17 00:00:00 2001 From: Jason Grout Date: Mon, 18 Jun 2018 16:28:40 -0700 Subject: [PATCH 021/105] Update readme.md --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 33ca6c1..afaf146 100644 --- a/readme.md +++ b/readme.md @@ -2,7 +2,7 @@ This repository contain material and instructions to follow the "Getting started with JupyterLab" tutorial during SciPy 2018. -During the tutorial, feel free to get on the `jupyterlab` channel of scipy2018.slack.com for help and updates. +During the tutorial, feel free to get on the `jupyterlab` channel of https://scipy2018.slack.com/ for help and updates. # Installation From bf3d41b5fe3b278a34e4867f1bfd2a3ac1c0dceb Mon Sep 17 00:00:00 2001 From: "J. Forde" Date: Fri, 22 Jun 2018 13:50:11 -0700 Subject: [PATCH 022/105] adding environment.yml and updating readme install instructions --- environment.yml | 124 ++++++++++++++++++++++++++++++++++++++++++++++++ readme.md | 38 ++++++++------- 2 files changed, 146 insertions(+), 16 deletions(-) create mode 100644 environment.yml diff --git a/environment.yml b/environment.yml new file mode 100644 index 0000000..da69f8c --- /dev/null +++ b/environment.yml @@ -0,0 +1,124 @@ +name: scipy18jlab +channels: + - conda-forge + - defaults +dependencies: + - appnope=0.1.0=py36_0 + - arrow=0.12.1=py36_2 + - asn1crypto=0.24.0=py36_0 + - backcall=0.1.0=py_0 + - binaryornot=0.4.4=py36_0 + - bleach=2.1.3=py_0 + - bqplot=0.10.1=py36_0 + - ca-certificates=2018.4.16=0 + - certifi=2018.4.16=py36_0 + - cffi=1.11.5=py36_0 + - chardet=3.0.4=py36_0 + - clangdev=6.0.0=default_0 + - click=6.7=py_1 + - cloudpickle=0.5.3=py_0 + - cookiecutter=1.6.0=py36_0 + - cryptography=2.2.1=py36_0 + - cycler=0.10.0=py36_0 + - dask-core=0.18.1=py_0 + - decorator=4.3.0=py_0 + - entrypoints=0.2.3=py36_1 + - freetype=2.8.1=0 + - future=0.16.0=py36_0 + - html5lib=1.0.1=py_0 + - icu=58.2=0 + - idna=2.7=py36_0 + - imageio=2.3.0=py36_0 + - ipydatawidgets=3.1.0=py_1 + - ipykernel=4.8.2=py36_0 + - ipyscales=0.2.2=py_0 + - ipython=6.4.0=py36_0 + - ipython_genutils=0.2.0=py36_0 + - ipyvolume=0.4.5=py36_0 + - ipywebrtc=0.3.0=py36_0 + - ipywidgets=7.2.1=py36_1 + - jedi=0.12.0=py36_0 + - jinja2=2.10=py36_0 + - jinja2-time=0.2.0=py36_1 + - jpeg=9b=2 + - jsonschema=2.6.0=py36_1 + - jupyter_client=5.2.3=py36_0 + - jupyter_core=4.4.0=py_0 + - jupyterlab=0.32.1=py36_0 + - jupyterlab_launcher=0.10.5=py36_0 + - kiwisolver=1.0.1=py36_1 + - libcxx=6.0.0=0 + - libffi=3.2.1=3 + - libiconv=1.15=h470a237_1 + - libpng=1.6.34=0 + - libsodium=1.0.16=0 + - libtiff=4.0.9=0 + - libxml2=2.9.8=0 + - llvm-meta=6.0.0=0 + - llvmdev=6.0.0=default_3 + - markupsafe=1.0=py36_0 + - matplotlib=2.2.2=py36_1 + - mistune=0.8.3=py36_1 + - nbconvert=5.3.1=py_1 + - nbformat=4.4.0=py36_0 + - ncurses=5.9=10 + - networkx=2.1=py36_0 + - nodejs=9.11.1=0 + - notebook=5.5.0=py36_0 + - olefile=0.45.1=py36_0 + - openssl=1.0.2o=0 + - pandas=0.23.1=py36_0 + - pandoc=2.2.1=hde52d81_0 + - pandocfilters=1.4.2=py36_0 + - parso=0.2.1=py_0 + - pexpect=4.6.0=py36_0 + - pickleshare=0.7.4=py36_0 + - pillow=5.1.0=py36_0 + - poyo=0.4.1=py36_0 + - prompt_toolkit=1.0.15=py36_0 + - ptyprocess=0.5.2=py36_0 + - pycparser=2.18=py36_0 + - pygments=2.2.0=py36_0 + - pyopenssl=18.0.0=py36_0 + - pyparsing=2.2.0=py36_0 + - pysocks=1.6.8=py36_1 + - python=3.6.5=1 + - python-dateutil=2.7.3=py_0 + - pythreejs=1.1.0=py36_2 + - pytz=2018.4=py_0 + - pywavelets=0.5.2=py36_1 + - pyzmq=17.0.0=py36_4 + - readline=7.0=0 + - requests=2.19.1=py36_0 + - scikit-image=0.14.0=py36hfc679d8_1 + - send2trash=1.5.0=py_0 + - setuptools=39.2.0=py36_0 + - simplegeneric=0.8.1=py36_0 + - six=1.11.0=py36_1 + - sqlite=3.20.1=2 + - terminado=0.8.1=py36_0 + - testpath=0.3.1=py36_0 + - tk=8.6.7=0 + - toolz=0.9.0=py_0 + - tornado=5.0.2=py36_0 + - traitlets=4.3.2=py36_0 + - traittypes=0.2.1=py36_0 + - urllib3=1.22=py36_0 + - wcwidth=0.1.7=py36_0 + - webencodings=0.5.1=py36_0 + - wheel=0.31.0=py36_0 + - whichcraft=0.4.1=py36_0 + - widgetsnbextension=3.2.1=py36_0 + - xz=5.2.3=0 + - zeromq=4.2.5=1 + - zlib=1.2.11=h470a237_3 + - intel-openmp=2018.0.3=0 + - libgfortran=3.0.1=h93005f0_2 + - libopenblas=0.2.20=hdc02c5d_7 + - mkl=2018.0.3=1 + - numpy=1.14.3=py36he6379a5_2 + - numpy-base=1.14.3=py36h7ef55bc_1 + - pip=10.0.1=py36_0 + - scipy=1.1.0=py36hcaad992_0 + - pip: + - dask==0.18.1 diff --git a/readme.md b/readme.md index afaf146..6ca4d5f 100644 --- a/readme.md +++ b/readme.md @@ -26,33 +26,39 @@ our best to help you, but you may have to solve any difficulties on your own. [miniconda](https://conda.io/miniconda.html) (much smaller, with only essential packages by default, but any conda package can be installed). -2. Create a conda environment: +2. To get the tutorial materials, clone this repository. **Please plan to update the materials shortly before the tutorial.** ``` -# Create the conda environment with specific packages -conda create -n scipy18jlab -c conda-forge --yes python=3.6 pip cookiecutter=1.6 notebook=5.5 pandas=0.23 nodejs=9.11 jupyterlab bqplot ipyvolume pythreejs - -# Activate the conda environment -conda activate scipy18jlab +git clone https://github.com/jupyterlab/scipy2018-jupyterLab-tutorial +``` -# Install extra JupyterLab extensions -jupyter labextension install @jupyter-widgets/jupyterlab-manager jupyter-threejs ipyvolume bqplot @jupyterlab/geojson-extension @jupyterlab/fasta-extension +To update the materials: +``` +$ cd scipy2018-jupyterLab-tutorial +$ git pull ``` -If you open multiple terminal windows make sure to activate the environment in each of them. +Feel free to open an issue or send a pull request to update these materials if things are unclear. -## Tutorial materials +3. Set up your environment: -To get the tutorial materials, clone this repository. **Please plan to update the materials shortly before the tutorial.** +Create a conda environment ``` -git clone https://github.com/jupyterlab/scipy2018-jupyterLab-tutorial +cd scipy2018-jupyterLab-tutorial +conda env create -f environment.yml ``` -To update the materials: +Activate the conda environment + ``` -$ cd scipy2018-jupyterLab-tutorial -$ git pull +conda activate scipy18jlab ``` -Feel free to open an issue or send a pull request to update these materials if things are unclear. +Install extra JupyterLab extensions + +``` +jupyter labextension install @jupyter-widgets/jupyterlab-manager jupyter-threejs ipyvolume bqplot @jupyterlab/geojson-extension @jupyterlab/fasta-extension +``` + +If you open multiple terminal windows make sure to activate the environment in each of them. From ef144819060599fb6eea9e8d90cf57fc44d59b71 Mon Sep 17 00:00:00 2001 From: J Forde Date: Fri, 22 Jun 2018 13:52:30 -0700 Subject: [PATCH 023/105] Update readme.md --- readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/readme.md b/readme.md index 6ca4d5f..cd3fb29 100644 --- a/readme.md +++ b/readme.md @@ -34,8 +34,8 @@ git clone https://github.com/jupyterlab/scipy2018-jupyterLab-tutorial To update the materials: ``` -$ cd scipy2018-jupyterLab-tutorial -$ git pull +cd scipy2018-jupyterLab-tutorial +git pull ``` Feel free to open an issue or send a pull request to update these materials if things are unclear. From 0786130e6edaa74ca6b7f92b00780e22e9d8528e Mon Sep 17 00:00:00 2001 From: Jason Grout Date: Wed, 27 Jun 2018 08:25:30 -0700 Subject: [PATCH 024/105] more refinement --- Exercise-1/Exercise1.md | 59 +++++++++++++++++++--------------------- Exercise-2/Exercide-2.md | 23 ++++++++++------ outline.md | 45 ++++++++++++++++-------------- readme.md | 4 +-- 4 files changed, 68 insertions(+), 63 deletions(-) diff --git a/Exercise-1/Exercise1.md b/Exercise-1/Exercise1.md index a9fe359..723c77e 100644 --- a/Exercise-1/Exercise1.md +++ b/Exercise-1/Exercise1.md @@ -1,50 +1,47 @@ # Exercises 1 Remove all the sticky notes from your screen :-) and attempt the following. -These are _guidelines_, feel free to ere on the side of workflow and -options that suits _you_ if you find them best. +These are _guidelines_, feel free to err on the side of workflow and +options that suits _you_ if you find them best. -Keep in mind, if something is not intuitive, or not in the place you expected it, write -it down (for example on the red sticky note), and give it to us at the break. +Keep in mind, if something is not intuitive, or not in the place you expected +it, write it down (for example on the red sticky note), and give it to us at the +break. -## 1. View this file as rendered markdown. +## View this file as rendered markdown. -You should be able to view this file as a rendered markdown. +Right-click on the file to open it as rendered markdown. -## 2. Arrange the edit and view side by side +## Layout -Or bellow each other, to still be able to follow instructions -while completing the rest of the tasks. +Create a new notebook. -Did you manage that ? -YOUR ANSWER HERE +Arrange the notebook and rendered markdown side-by-side. Then arrange them, one on top and one on bottom. Then arrange them in a single panel with two tabs. Then split them out again to side-by-side. -See how the view live updates. +## Notebook operations -### 3. Create a new Python 3 notebook - - -- Change the first cell to markdown, and write some markdown with +- Change the first cell to markdown, and write some markdown with - Bold - - italic - - Math (inilne and formulas) - - Code (triple backtick fences ` ``` `, and indented 4 spaces) + - italic + - [Math](https://math.meta.stackexchange.com/questions/5020/mathjax-basic-tutorial-and-quick-reference) (inlne and formulas): `$x^2$`, `$$\frac{-b \pm \sqrt(b^2-4ac})}{2a}$$` + - Code (triple backtick fences ` ``` `, or indented 4 spaces) - Create a code cell and evaluate it, printing "Hello SciPy" - - Describe the difference between the Ctrl-Enter, Shift-Enter, and Alt-Enter shortcuts + - Describe the difference between the `Ctrl-Enter`, `Shift-Enter`, and `Alt-Enter` shortcuts. See the Run menu. - try importing `pandas` - - use pandas? to get the help on the pandas library. + - evaluate `pandas?` to get the help on the pandas library. - try `pandas.D` to get tab completion on the pandas library. Note that completions can take a few second the first time the library get inspected to get result. - Complete to `pandas.DataFrame(` place the cursor after the open bracket and press `Shift-Tab` to get quick help. - To always see the info about the current function you can open the inspector via the command palette. - Use the command palette the find the Keyboard shortcut to open the inspector. - Change the inspector layout to be side-by-side with the notebook. - - Type a command to see the help pop up. - - TODO: use panda’s `read_csv` to load `'demo/data/iris.csv'` into a dataframe, display this dataframe - - Move a cell by dragging - - Find how to collapse and expand an input and output - - Find how to enable output scrolling in a cell that has lots of output - - Try “Create new view for output” in the context menu of an output. Modify and execute the cell again to see the mirrored output update (will learn more in section 2) -- Learn the various Keyboard shortcuts. - - How to open command palette -- TODO : CSV viewing -- TODO : Json/GeoJson. \ No newline at end of file + - Type `pandas.read_csv(` to see the help pop up. + - TODO: use panda’s `read_csv` to load `'../demo/data/iris.csv'` into a dataframe, display this dataframe + + +# More advanced notebooks + +- Move a cell by dragging +- Use the View menu, or click the blue bar, to collapse and expand an input and an output. +- Use the context menu to enable scrolling in a cell that has lots of output. +- Try “Create new view for output” in the context menu of an output. Modify and execute the cell again to see the mirrored output update (will learn more in section 2) +- Learn the various keyboard shortcuts through the menu and the command palette. diff --git a/Exercise-2/Exercide-2.md b/Exercise-2/Exercide-2.md index f17c988..f169d4d 100644 --- a/Exercise-2/Exercide-2.md +++ b/Exercise-2/Exercide-2.md @@ -17,18 +17,23 @@ it down (for example on the red sticky note), and give it to us at the break. - Do “New View into File” from the tab context menu. - Scroll down to the bottom of the notebook in one frame, and drag a cell from the top of the file to the bottom by dragging between the two windows. -- Try arranging different layout, and refresh the page. Get a feeling of which layout element persist across refresh - - TODO :arranging things side-by-side. Come up with specific layouts they have to get - - Try to find information about "single-document mode" - +## Files + consoles - binding multiple documents to the same kernel (Section II) - New Console for Notebook - - R-Markdown workflow. + - R-Markdown workflow. - live editing demo - Python code file + console workflow - Open in classic notebook, modify, save and reopen in Lab. - Try creating new document/notebook/terminal/console - - -- Look in the help menu how to open same notebook in classic notebook - \ No newline at end of file +- Try arranging different layout, and refresh the page. Get a feeling of which layout element persist across refresh + - TODO :arranging things side-by-side. Come up with specific layouts they have to get + - Try to find information about "single-document mode" + + + + +- TODO : CSV viewing +- TODO : Json/GeoJson. + + +- Look in the help menu how to open same notebook in classic notebook diff --git a/outline.md b/outline.md index 7fe4231..9629fb7 100644 --- a/outline.md +++ b/outline.md @@ -1,42 +1,46 @@ +# Outline + +**These notes are for the presenters.** + For the last two years the Jupyter team has been working on the new Jupyter frontend: JupyterLab. While JupyterLab does of course allow the use of Jupyter Notebooks, it goes beyond the classic Jupyter Notebook by providing a flexible and extensible web application with a set of reusable components. Users can arrange multiple notebooks, text editors, terminals, output areas, and custom components using tabs and collapsible sidebars. These components are carefully designed to enable the user to use them together or separately (for example, a user can send code from a file to a console with a keystroke, or can pop out an output from a notebook to work with it alone). JupyterLab is based on a flexible application plugin system provided by PhosphorJS that makes it easy to customize existing components or extend it with new components. For example, users can install or write third-party plugins to view custom file formats, such as GeoJSON, interact with external services, such as Dask or Apache Spark, or display their data in effective and useful ways, such as interactive maps, tables, or plots. In this tutorial we’ll walk users thought the best way to make use of JupyterLab, how to transition from the “classic” Jupyter Notebook frontend to JupyterLab, and how to make the best use of the new powerful features of JupyterLab. - -You (should) be provided with red and green sticky notes. If you have any question and concern or need help, stick the red sticky note visible on back of your laptop's screen. A helper will come see you, or the speaker will take time to get questions. + +You (should) be provided with red and green sticky notes. If you have any question and concern or need help, stick the red sticky note visible on back of your laptop's screen. A helper will come see you, or the speaker will take time to get questions. If all is fine, or we're too slow for you, stick the green sticky note to the -back of your laptop screen. +back of your laptop screen. At each break, write a thing you understood of liked on the green sticky note, a thing you did not like or found hard on the red one. When exiting the room, stick them to the door frame. Make sure to get new sticky notes for the next section. -This ca serve as a quick read through summary of what we talked about (with +This can serve as a quick read through summary of what we talked about (with links) and a rough timeline if you want to follow up on the video later. -## Overview of JupyterLab, +## Overview of JupyterLab -### 0-0:10 (10 min) - introduction +### 0-0:10 (10 min) - introduction Today this tutorial will be presented to you by Jason Grout, and Matthias -Bussonnier, two long standing member of the Jupyter Project. We have a number -of helpers in the Room. In person attendees should have been giver red/green -sticky notes. +Bussonnier, two long standing members of the Jupyter Project. We have a number +of helpers in the room. Attendees should have been given red/green +sticky notes. -By now you should have installed jupyterlab following the instructions in the readme. -If you are not using Conda, we’ll be here to help you but will not make your case a priority. +By now you should have installed JupyterLab following the instructions in the readme. +For this tutorial, we are standardizing on a conda-based python distribution (miniconda or Anaconda). We may not be able to help with installation issues if you are using a different python distribution. -Keep in mind that JupyterLab is (still) in beta and that first time impression +JupyterLab is in beta and that first time impression are critical to usability of JupyterLab. We will show you what can be done, but can still improve the usability quite a bit. When trying to do any task in the exercise try to think first: - How would I do that - Then try to do the task. - - Note what was intuitive, and what surprised you. + - Note what was intuitive, and what surprised you. - Tell it to us (via post it or issues) - Feel free to interrupt with questions and clarification @@ -49,9 +53,10 @@ exercise try to think first: - Can you get Lab and notebook at the same time: YES - No difference in file format; Notebooks files are the same ### JASON? 0:25-0:45 (20 min): Tour of The User Interface - - if it does not work, hop on binder. + - if it does not work, hop on binder if it works - Point to documentation, follow the naming conventions, maybe follow that outline - various existing default panel, and layout, file browser, support of multiple file types, multiple file viewers for single file + - dragging ui - Command palette - Important shortcuts - Can follow the outline in the pydata seattle talk or scipy 2017 lightning talk (see https://github.com/jupyterlab/jupyterlab-demo/tree/master/narrative) @@ -64,31 +69,31 @@ Look into the Exercise 1 folder, and follow the instruction in `Exercise-1.md` Write one good thing on the green sticky note, one bad on the red one. -### 1:15-1:20 (5 min) : Q.A. 5 min . +### 1:15-1:20 (5 min) : Q.A. 5 min ## Workflows around executing code -### 1:20-1:30 (10 min): Minor Notebook UI interface difference +### 1:20-1:30 (10 min): Minor Notebook UI interface difference - review from Exercise 1 1. How to author markdown and equations 2. Dragging ui 2. Collapsible cells - 3. drag cells + 3. drag cells, inside notebook and between views of files. 4. javascript rendering restrictions 5. creating new view of outputs ### 1:30-1:55 (20 min): Attaching kernels to multiple documents - 1. R-markdown like workflow + 1. Executing code in a markdown file using an attached console. 2. Developing libraries with notebook and Python files attached to same kernel ### 1:55-2:10 (10 min) Exercise 2 - binding multiple documents to the same kernel - New Console for Notebook - - R-Markdown workflow. + - Markdown file + console workflow - Python code file + console workflow - - Open in classic notebook, modify, save and reopen in Lab. + - Open a notebook in classic notebook, modify, save and reopen in Lab. ### 2:10-2:25 (15min) break 10 min + sticky notes + Q.A 5min diff --git a/readme.md b/readme.md index cd3fb29..e77b9c8 100644 --- a/readme.md +++ b/readme.md @@ -14,9 +14,7 @@ Please do not rely on cloud hosting to follow this tutorial, as the network connection may be unreliable. If possible, come to the tutorial with a computer where you have administrative privileges. -We'll assume you are using a recent Anaconda Python distribution (such as Anaconda or -Miniconda). If you choose to work with a different Python distribution, we'll do -our best to help you, but you may have to solve any difficulties on your own. +For this tutorial, we are standardizing on a conda-based python distribution (miniconda or Anaconda). We may not be able to help with installation issues if you are using a different python distribution. ## Software installation From c704197aae1b9a7e5ad2f4abe6dae91e6901021d Mon Sep 17 00:00:00 2001 From: Jason Grout Date: Wed, 27 Jun 2018 09:01:50 -0700 Subject: [PATCH 025/105] More work on outline/examples --- Exercise-1/Exercise1.md | 2 +- outline.md | 36 +++++++++++++++++++++--------------- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/Exercise-1/Exercise1.md b/Exercise-1/Exercise1.md index 723c77e..712d2ca 100644 --- a/Exercise-1/Exercise1.md +++ b/Exercise-1/Exercise1.md @@ -35,7 +35,7 @@ Arrange the notebook and rendered markdown side-by-side. Then arrange them, one - Use the command palette the find the Keyboard shortcut to open the inspector. - Change the inspector layout to be side-by-side with the notebook. - Type `pandas.read_csv(` to see the help pop up. - - TODO: use panda’s `read_csv` to load `'../demo/data/iris.csv'` into a dataframe, display this dataframe + - (TODO: do the answer key) use panda’s `read_csv` to load `'../demo/data/iris.csv'` into a dataframe, display this dataframe # More advanced notebooks diff --git a/outline.md b/outline.md index 9629fb7..6db1101 100644 --- a/outline.md +++ b/outline.md @@ -47,12 +47,12 @@ exercise try to think first: - There will likely be a binder available, but do not rely on the conference wifi. -### MATTHIAS 0:10-0:25 (15min) - Standard slides covering background of notebook and JupyterLab. These are from the jupyterlab-demo repo +### JASON 0:10-0:25 (15min) - Standard slides covering background of notebook and JupyterLab. These are from the jupyterlab-demo repo - Respond to FAQ: - Why JupyterLab ? - Can you get Lab and notebook at the same time: YES - No difference in file format; Notebooks files are the same -### JASON? 0:25-0:45 (20 min): Tour of The User Interface +### JASON 0:25-0:45 (20 min): Tour of The User Interface - if it does not work, hop on binder if it works - Point to documentation, follow the naming conventions, maybe follow that outline - various existing default panel, and layout, file browser, support of multiple file types, multiple file viewers for single file @@ -61,7 +61,7 @@ exercise try to think first: - Important shortcuts - Can follow the outline in the pydata seattle talk or scipy 2017 lightning talk (see https://github.com/jupyterlab/jupyterlab-demo/tree/master/narrative) -### 0:45-1:05 (20 min): Exercise 1 (and help installation issues if needed): +### MATTHIAS 0:45-1:05 (20 min): Exercise 1 (and help installation issues if needed): Look into the Exercise 1 folder, and follow the instruction in `Exercise-1.md` @@ -73,21 +73,26 @@ Write one good thing on the green sticky note, one bad on the red one. ## Workflows around executing code -### 1:20-1:30 (10 min): Minor Notebook UI interface difference - review from Exercise 1 +### MATTHIAS 1:20-1:30 (10 min): Minor Notebook UI interface difference - review from Exercise 1 - 1. How to author markdown and equations - 2. Dragging ui - 2. Collapsible cells - 3. drag cells, inside notebook and between views of files. - 4. javascript rendering restrictions - 5. creating new view of outputs + 1. Arranging tabs through dragging + 2. How to author markdown and equations + 3. Collapsible cells + 4. drag cells, inside notebook and between views of files. + 3. Enable scrolling on outputs + 6. creating new view of outputs + 5. javascript rendering restrictions -### 1:30-1:55 (20 min): Attaching kernels to multiple documents +### MATTHIAS 1:30-1:45 (15 min): Attaching kernels to multiple documents 1. Executing code in a markdown file using an attached console. 2. Developing libraries with notebook and Python files attached to same kernel + 3. Reloading modules? + 4. Create terminal, work with terminal next to code file and console. Maybe using ipython in terminal. + 5. Attaching a code console to the same kernel as a notebook. -### 1:55-2:10 (10 min) Exercise 2 + +### MATTHIAS 1:55-2:15 (10 min) Exercise 2 - binding multiple documents to the same kernel - New Console for Notebook @@ -101,13 +106,14 @@ Write one good thing on the green sticky note, one bad on the red one. ## Customizing JupyterLab -### 2:25-2:50 (35min, Jason) +### MATTHIAS 2:25-2:50 (20min) 1. Changing editor settings 2. Changing theme 3. Json config system overview 4. Changing keyboard shortcuts - 5. Exercise 3 (10 min) + +### Exercise 3 (15 min) 1. change a keyboard shortcut 1. Assign existing shortcut to new action. 2. Assign new Keyboard shortcut to an existing action. @@ -142,7 +148,7 @@ Write one good thing on the green sticky note, one bad on the red one. - Exercise 4: - Modifying and installing theme plugin - and/or - - Modifying and installing mimetype plugin + - Modifying and installing mimetype plugin. Certificate of accomplishment plugin? - Point to cookie Cutter. ## Mention JupyterLab in a multiuser environment: point to jupyterlab docs ## Mention sprints! From 700fc9d0b3edd7df78753546170116c125768c04 Mon Sep 17 00:00:00 2001 From: Matthias Bussonnier Date: Thu, 28 Jun 2018 19:23:03 +0200 Subject: [PATCH 026/105] extension --- outline.md | 51 +++++--- scipy_cert/.gitignore | 4 + scipy_cert/README.md | 31 +++++ scipy_cert/package-lock.json | 226 +++++++++++++++++++++++++++++++++++ scipy_cert/package.json | 37 ++++++ scipy_cert/src/index.ts | 101 ++++++++++++++++ scipy_cert/style/index.css | 91 ++++++++++++++ scipy_cert/tsconfig.json | 15 +++ 8 files changed, 541 insertions(+), 15 deletions(-) create mode 100644 scipy_cert/.gitignore create mode 100644 scipy_cert/README.md create mode 100644 scipy_cert/package-lock.json create mode 100644 scipy_cert/package.json create mode 100644 scipy_cert/src/index.ts create mode 100644 scipy_cert/style/index.css create mode 100644 scipy_cert/tsconfig.json diff --git a/outline.md b/outline.md index 6db1101..52fb2a1 100644 --- a/outline.md +++ b/outline.md @@ -2,14 +2,33 @@ **These notes are for the presenters.** -For the last two years the Jupyter team has been working on the new Jupyter frontend: JupyterLab. While JupyterLab does of course allow the use of Jupyter Notebooks, it goes beyond the classic Jupyter Notebook by providing a flexible and extensible web application with a set of reusable components. Users can arrange multiple notebooks, text editors, terminals, output areas, and custom components using tabs and collapsible sidebars. These components are carefully designed to enable the user to use them together or separately (for example, a user can send code from a file to a console with a keystroke, or can pop out an output from a notebook to work with it alone). - -JupyterLab is based on a flexible application plugin system provided by PhosphorJS that makes it easy to customize existing components or extend it with new components. For example, users can install or write third-party plugins to view custom file formats, such as GeoJSON, interact with external services, such as Dask or Apache Spark, or display their data in effective and useful ways, such as interactive maps, tables, or plots. - -In this tutorial we’ll walk users thought the best way to make use of JupyterLab, how to transition from the “classic” Jupyter Notebook frontend to JupyterLab, and how to make the best use of the new powerful features of JupyterLab. - - -You (should) be provided with red and green sticky notes. If you have any question and concern or need help, stick the red sticky note visible on back of your laptop's screen. A helper will come see you, or the speaker will take time to get questions. +For the last two years the Jupyter team has been working on the new Jupyter +frontend: JupyterLab. While JupyterLab does of course allow the use of Jupyter +Notebooks, it goes beyond the classic Jupyter Notebook by providing a flexible +and extensible web application with a set of reusable components. Users can +arrange multiple notebooks, text editors, terminals, output areas, and custom +components using tabs and collapsible sidebars. These components are carefully +designed to enable the user to use them together or separately (for example, a +user can send code from a file to a console with a keystroke, or can pop out an +output from a notebook to work with it alone). + +JupyterLab is based on a flexible application plugin system provided by +PhosphorJS that makes it easy to customize existing components or extend it +with new components. For example, users can install or write third-party +plugins to view custom file formats, such as GeoJSON, interact with external +services, such as Dask or Apache Spark, or display their data in effective and +useful ways, such as interactive maps, tables, or plots. + +In this tutorial we’ll walk users thought the best way to make use of +JupyterLab, how to transition from the “classic” Jupyter Notebook frontend to +JupyterLab, and how to make the best use of the new powerful features of +JupyterLab. + + +You (should) be provided with red and green sticky notes. If you have any +question and concern or need help, stick the red sticky note visible on back of +your laptop's screen. A helper will come see you, or the speaker will take time +to get questions. If all is fine, or we're too slow for you, stick the green sticky note to the back of your laptop screen. @@ -31,8 +50,10 @@ Bussonnier, two long standing members of the Jupyter Project. We have a number of helpers in the room. Attendees should have been given red/green sticky notes. -By now you should have installed JupyterLab following the instructions in the readme. -For this tutorial, we are standardizing on a conda-based python distribution (miniconda or Anaconda). We may not be able to help with installation issues if you are using a different python distribution. +By now you should have installed JupyterLab following the instructions in the +readme. For this tutorial, we are standardizing on a conda-based python +distribution (miniconda or Anaconda). We may not be able to help with +installation issues if you are using a different python distribution. JupyterLab is in beta and that first time impression are critical to usability of JupyterLab. We will show you what can be done, but @@ -45,7 +66,8 @@ exercise try to think first: - Feel free to interrupt with questions and clarification - - There will likely be a binder available, but do not rely on the conference wifi. + - There will likely be a binder available, but do not rely on the conference + wifi. ### JASON 0:10-0:25 (15min) - Standard slides covering background of notebook and JupyterLab. These are from the jupyterlab-demo repo - Respond to FAQ: @@ -92,7 +114,7 @@ Write one good thing on the green sticky note, one bad on the red one. 5. Attaching a code console to the same kernel as a notebook. -### MATTHIAS 1:55-2:15 (10 min) Exercise 2 +### MATTHIAS 1:45-2:10 (15 min) Exercise 2 - binding multiple documents to the same kernel - New Console for Notebook @@ -103,17 +125,16 @@ Write one good thing on the green sticky note, one bad on the red one. ### 2:10-2:25 (15min) break 10 min + sticky notes + Q.A 5min - ## Customizing JupyterLab -### MATTHIAS 2:25-2:50 (20min) +### MATTHIAS 2:25-2:35 (5min) 1. Changing editor settings 2. Changing theme 3. Json config system overview 4. Changing keyboard shortcuts -### Exercise 3 (15 min) +### Exercise 3 2:35-2:50 (15 min) 1. change a keyboard shortcut 1. Assign existing shortcut to new action. 2. Assign new Keyboard shortcut to an existing action. diff --git a/scipy_cert/.gitignore b/scipy_cert/.gitignore new file mode 100644 index 0000000..7c5d9c6 --- /dev/null +++ b/scipy_cert/.gitignore @@ -0,0 +1,4 @@ +*.bundle.* +lib/ +node_modules/ +*.egg-info/ diff --git a/scipy_cert/README.md b/scipy_cert/README.md new file mode 100644 index 0000000..dae12b1 --- /dev/null +++ b/scipy_cert/README.md @@ -0,0 +1,31 @@ +# scipy_cert + +SciPy cert ext + + +## Prerequisites + +* JupyterLab + +## Installation + +```bash +jupyter labextension install scipy_cert +``` + +## Development + +For a development install (requires npm version 4 or later), do the following in the repository directory: + +```bash +npm install +jupyter labextension link . +``` + +To rebuild the package and the JupyterLab app: + +```bash +npm run build +jupyter lab build +``` + diff --git a/scipy_cert/package-lock.json b/scipy_cert/package-lock.json new file mode 100644 index 0000000..55d6ed0 --- /dev/null +++ b/scipy_cert/package-lock.json @@ -0,0 +1,226 @@ +{ + "name": "scipy_cert", + "version": "0.1.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@jupyterlab/rendermime-interfaces": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@jupyterlab/rendermime-interfaces/-/rendermime-interfaces-1.0.10.tgz", + "integrity": "sha512-qApoEHdWmPtyBrvqQras478Nprgyw6Gk7PHT9c5W8lS4eJdNJKsi3zovkeRkUbcFdd2VBgDj/2fzxFMu6DnMUw==", + "requires": { + "@phosphor/coreutils": "1.3.0", + "@phosphor/widgets": "1.5.0" + } + }, + "@phosphor/algorithm": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@phosphor/algorithm/-/algorithm-1.1.2.tgz", + "integrity": "sha1-/R3pEEyafzTpKGRYbd8ufy53eeg=" + }, + "@phosphor/collections": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@phosphor/collections/-/collections-1.1.2.tgz", + "integrity": "sha1-xMC4uREpkF+zap8kPy273kYtq40=", + "requires": { + "@phosphor/algorithm": "1.1.2" + } + }, + "@phosphor/commands": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@phosphor/commands/-/commands-1.4.0.tgz", + "integrity": "sha1-fiNqTAFdrzepWG/eKRiMPawgFi8=", + "requires": { + "@phosphor/algorithm": "1.1.2", + "@phosphor/coreutils": "1.3.0", + "@phosphor/disposable": "1.1.2", + "@phosphor/domutils": "1.1.2", + "@phosphor/keyboard": "1.1.2", + "@phosphor/signaling": "1.2.2" + } + }, + "@phosphor/coreutils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@phosphor/coreutils/-/coreutils-1.3.0.tgz", + "integrity": "sha1-YyktOBwBLFqw0Blug87YKbfgSkI=" + }, + "@phosphor/disposable": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@phosphor/disposable/-/disposable-1.1.2.tgz", + "integrity": "sha1-oZLdai5sadXQnTns8zTauTd4Bg4=", + "requires": { + "@phosphor/algorithm": "1.1.2" + } + }, + "@phosphor/domutils": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@phosphor/domutils/-/domutils-1.1.2.tgz", + "integrity": "sha1-4u/rBS85jEK5O4npurJq8VzABRQ=" + }, + "@phosphor/dragdrop": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@phosphor/dragdrop/-/dragdrop-1.3.0.tgz", + "integrity": "sha1-fOatOdbKIW1ipW94EE0Cp3rmcwc=", + "requires": { + "@phosphor/coreutils": "1.3.0", + "@phosphor/disposable": "1.1.2" + } + }, + "@phosphor/keyboard": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@phosphor/keyboard/-/keyboard-1.1.2.tgz", + "integrity": "sha1-PjIjRFF2QkCpjhSANNWoeXQi3R8=" + }, + "@phosphor/messaging": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@phosphor/messaging/-/messaging-1.2.2.tgz", + "integrity": "sha1-fYlt3TeXuUo0dwje0T2leD23XBQ=", + "requires": { + "@phosphor/algorithm": "1.1.2", + "@phosphor/collections": "1.1.2" + } + }, + "@phosphor/properties": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@phosphor/properties/-/properties-1.1.2.tgz", + "integrity": "sha1-eMx37/RSg52gIlXeSOgUlGzAmig=" + }, + "@phosphor/signaling": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@phosphor/signaling/-/signaling-1.2.2.tgz", + "integrity": "sha1-P8+Xyojji/s1f+j+a/dRM0elFKk=", + "requires": { + "@phosphor/algorithm": "1.1.2" + } + }, + "@phosphor/virtualdom": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@phosphor/virtualdom/-/virtualdom-1.1.2.tgz", + "integrity": "sha1-zlXIbu8x5dDiax3JbqMr1oRFj0E=", + "requires": { + "@phosphor/algorithm": "1.1.2" + } + }, + "@phosphor/widgets": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@phosphor/widgets/-/widgets-1.5.0.tgz", + "integrity": "sha1-X5mOhvX9542KpE19wUdobKZhaB4=", + "requires": { + "@phosphor/algorithm": "1.1.2", + "@phosphor/commands": "1.4.0", + "@phosphor/coreutils": "1.3.0", + "@phosphor/disposable": "1.1.2", + "@phosphor/domutils": "1.1.2", + "@phosphor/dragdrop": "1.3.0", + "@phosphor/keyboard": "1.1.2", + "@phosphor/messaging": "1.2.2", + "@phosphor/properties": "1.1.2", + "@phosphor/signaling": "1.2.2", + "@phosphor/virtualdom": "1.1.2" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.11" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dev": true, + "requires": { + "glob": "7.1.2" + } + }, + "typescript": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.4.2.tgz", + "integrity": "sha1-+DlfhdRZJ2BnyYiqQYN6j4KHCEQ=", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + } + } +} diff --git a/scipy_cert/package.json b/scipy_cert/package.json new file mode 100644 index 0000000..12acc86 --- /dev/null +++ b/scipy_cert/package.json @@ -0,0 +1,37 @@ +{ + "name": "scipy_cert", + "version": "0.1.0", + "description": "A JupyterLab extension for rendering cert", + "author": "matthias bussonnier ", + "main": "lib/index.js", + "keywords": [ + "jupyter", + "jupyterlab", + "jupyterlab-extension" + ], + "files": [ + "lib/**/*.{d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}", + "style/**/*.{css,eot,gif,html,jpg,json,png,svg,woff2,ttf}", + "style/*.css" + ], + "jupyterlab": { + "mimeExtension": true + }, + "scripts": { + "build": "tsc", + "prepare": "npm run build", + "watch": "tcs -w", + "extension:install": "jupyter labextension install scipy_cert", + "extension:uninstall": "jupyter labextension uninstall scipy_cert", + "extension:enable": "jupyter labextension enable scipy_cert", + "extension:disable": "jupyter labextension disable scipy_cert" + }, + "dependencies": { + "@jupyterlab/rendermime-interfaces": "^1.0.0", + "@phosphor/widgets": "^1.5.0" + }, + "devDependencies": { + "rimraf": "^2.6.2", + "typescript": "~2.4.0" + } +} diff --git a/scipy_cert/src/index.ts b/scipy_cert/src/index.ts new file mode 100644 index 0000000..4397c21 --- /dev/null +++ b/scipy_cert/src/index.ts @@ -0,0 +1,101 @@ +import { + IRenderMime +} from '@jupyterlab/rendermime-interfaces'; + +import { + JSONObject +} from '@phosphor/coreutils'; + +import { + Widget +} from '@phosphor/widgets'; + +import '../style/index.css'; + + +/** + * The default mime type for the extension. + */ +const MIME_TYPE = 'application/cert'; + +/** + * The class name added to the extension. + */ +const CLASS_NAME = 'jp-OutputWidgetcert'; + + +/** + * A widget for rendering cert. + */ +export +class OutputWidget extends Widget implements IRenderMime.IRenderer { + /** + * Construct a new output widget. + */ + constructor(options: IRenderMime.IRendererOptions) { + super(); + this._mimeType = options.mimeType; + this.addClass(CLASS_NAME); + } + + /** + * Render cert into this widget's node. + */ + renderModel(model: IRenderMime.IMimeModel): Promise { + let mod = model.data[this._mimeType] as JSONObject; + let given = mod['given']; + let ev = mod['event']; + + this.node.innerHTML = ` +
+
+
Certificate
+
${given}
+
For mastery of JupyterLab
+
${ev}
+
+
+
+
+
+` + + //JSON.stringify(model.data[this._mimeType]); + return Promise.resolve(void 0); + } + + private _mimeType: string; +} + + +/** + * A mime renderer factory for cert data. + */ +export +const rendererFactory: IRenderMime.IRendererFactory = { + safe: true, + mimeTypes: [MIME_TYPE], + createRenderer: options => new OutputWidget(options) +}; + +console.log('CERT EXt') +const extension: IRenderMime.IExtension = { + id: 'scipy_cert:plugin', + rendererFactory, + rank: 0, + dataType: 'json', + fileTypes: [{ + name: 'jsoncert', + mimeTypes: [MIME_TYPE], + extensions: ['.json', '.cert.json'], + }], + documentWidgetFactoryOptions: { + name: 'CertViewer', + primaryFileType: 'jsoncert', + fileTypes: ['jsoncert', 'json'], + defaultFor: ['jsoncert'] + } +}; + +export default extension; + diff --git a/scipy_cert/style/index.css b/scipy_cert/style/index.css new file mode 100644 index 0000000..aefbda6 --- /dev/null +++ b/scipy_cert/style/index.css @@ -0,0 +1,91 @@ + +.cert{ + background-color: #07618B; + width: 350px;height: 250px; + margin-left: 35%;margin-top: 10%; + position: relative; + border-radius: 20px 20px 20px 20px; + -webkit-box-shadow: 0px 5px 10px 0px; + -moz-box-shadow: 0px 5px 10px 0px; + box-shadow: 0px 5px 10px 0px; +} + +.paper{ + position: absolute; + width: 300px; + height: 200px; + background: #E0E0E0; + left: 25px; + top: 25px; + border-radius: 5px 5px 5px 5px; +} + +.cert .medal { + background: #C9992E; + width: 20px; + height: 20px; + top: 30px; + left: 30px; + position: absolute; + padding: 10px 10px 10px 10px; + font-size: 2em; + border-radius: 50%; + z-index:30; +} + +.ribbon1 { + width: 15px; + height: 40px; + background-color: #9bdbf6; + position: absolute; + top: 50px; + left: 35px; + z-index: 1; + -webkit-transform: rotate(30deg); + border-right: 1px solid white; + } +.ribbon2 { + width: 15px; + height: 40px; + background-color: #9bdbf6; + position: absolute; + top: 50px; + left: 50px; + z-index: 1; + -webkit-transform: rotate(150deg); + border-right: 1px solid white; + } + +.title { + background:#E0E0E0; + font-weight: bold; + text-align: center; + margin-top: 20px; + height: 30px; + z-index:999; +} + +.textX { + z-index: 200; + text-align: center; + padding: 0px; + text-align: center; + margin-top: 20px; + } + +.text2 { + background-color: #E0E0E0; + z-index: 200; + padding: 0px 200px; + text-align: center; + margin-left: 50px; + } + +.text3 { + background-color: #B3B3B3; + z-index: 200; + padding: 0px 200px; + text-align: center; + margin-left: 50px; + } + diff --git a/scipy_cert/tsconfig.json b/scipy_cert/tsconfig.json new file mode 100644 index 0000000..3077d87 --- /dev/null +++ b/scipy_cert/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "declaration": true, + "noImplicitAny": true, + "noEmitOnError": true, + "noUnusedLocals": true, + "module": "commonjs", + "moduleResolution": "node", + "target": "ES5", + "outDir": "./lib", + "lib": ["ES5", "ES2015.Promise", "DOM"], + "types": [] + }, + "include": ["src/*"] +} From 62e93d02988a8658bc0048ee4f9d1886dcdc8055 Mon Sep 17 00:00:00 2001 From: Matthias Bussonnier Date: Sun, 1 Jul 2018 12:29:13 +0200 Subject: [PATCH 027/105] unpin/remove unix only deps --- Exercise-1/A Notebook has No Name - .ipynb | 614 ------------- Exercise-1/Exercise-1-notebook.ipynb | 989 +++++++++++++++++++++ Exercise-1/Exercise1.md | 6 +- Exercise-2/Notebook A.ipynb | 48 + Exercise-2/Notebook B.ipynb | 59 ++ Exercise-2/Report.md | 42 + Exercise-2/lib.py | 16 + environment.yml | 16 - outline.md | 18 +- readme.md | 30 +- 10 files changed, 1195 insertions(+), 643 deletions(-) delete mode 100644 Exercise-1/A Notebook has No Name - .ipynb create mode 100644 Exercise-1/Exercise-1-notebook.ipynb create mode 100644 Exercise-2/Notebook A.ipynb create mode 100644 Exercise-2/Notebook B.ipynb create mode 100644 Exercise-2/Report.md create mode 100644 Exercise-2/lib.py diff --git a/Exercise-1/A Notebook has No Name - .ipynb b/Exercise-1/A Notebook has No Name - .ipynb deleted file mode 100644 index ecd51bf..0000000 --- a/Exercise-1/A Notebook has No Name - .ipynb +++ /dev/null @@ -1,614 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This is a markdown cell with **bold** _italic_ inline $math$, and formulas:\n", - "\n", - "$$\\pi \\simeq 3$$" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Hello SciPy\n" - ] - } - ], - "source": [ - "print(\"Hello SciPy\")" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.DataFrame()" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0 : 0\n", - "1 : 1\n", - "2 : 4\n", - "3 : 9\n", - "4 : 16\n", - "5 : 25\n", - "6 : 36\n", - "7 : 49\n", - "8 : 64\n", - "9 : 81\n", - "10 : 100\n", - "11 : 121\n", - "12 : 144\n", - "13 : 169\n", - "14 : 196\n", - "15 : 225\n", - "16 : 256\n", - "17 : 289\n", - "18 : 324\n", - "19 : 361\n", - "20 : 400\n", - "21 : 441\n", - "22 : 484\n", - "23 : 529\n", - "24 : 576\n", - "25 : 625\n", - "26 : 676\n", - "27 : 729\n", - "28 : 784\n", - "29 : 841\n", - "30 : 900\n", - "31 : 961\n", - "32 : 1024\n", - "33 : 1089\n", - "34 : 1156\n", - "35 : 1225\n", - "36 : 1296\n", - "37 : 1369\n", - "38 : 1444\n", - "39 : 1521\n", - "40 : 1600\n", - "41 : 1681\n", - "42 : 1764\n", - "43 : 1849\n", - "44 : 1936\n", - "45 : 2025\n", - "46 : 2116\n", - "47 : 2209\n", - "48 : 2304\n", - "49 : 2401\n", - "50 : 2500\n", - "51 : 2601\n", - "52 : 2704\n", - "53 : 2809\n", - "54 : 2916\n", - "55 : 3025\n", - "56 : 3136\n", - "57 : 3249\n", - "58 : 3364\n", - "59 : 3481\n", - "60 : 3600\n", - "61 : 3721\n", - "62 : 3844\n", - "63 : 3969\n", - "64 : 4096\n", - "65 : 4225\n", - "66 : 4356\n", - "67 : 4489\n", - "68 : 4624\n", - "69 : 4761\n", - "70 : 4900\n", - "71 : 5041\n", - "72 : 5184\n", - "73 : 5329\n", - "74 : 5476\n", - "75 : 5625\n", - "76 : 5776\n", - "77 : 5929\n", - "78 : 6084\n", - "79 : 6241\n", - "80 : 6400\n", - "81 : 6561\n", - "82 : 6724\n", - "83 : 6889\n", - "84 : 7056\n", - "85 : 7225\n", - "86 : 7396\n", - "87 : 7569\n", - "88 : 7744\n", - "89 : 7921\n", - "90 : 8100\n", - "91 : 8281\n", - "92 : 8464\n", - "93 : 8649\n", - "94 : 8836\n", - "95 : 9025\n", - "96 : 9216\n", - "97 : 9409\n", - "98 : 9604\n", - "99 : 9801\n", - "100 : 10000\n", - "101 : 10201\n", - "102 : 10404\n", - "103 : 10609\n", - "104 : 10816\n", - "105 : 11025\n", - "106 : 11236\n", - "107 : 11449\n", - "108 : 11664\n", - "109 : 11881\n", - "110 : 12100\n", - "111 : 12321\n", - "112 : 12544\n", - "113 : 12769\n", - "114 : 12996\n", - "115 : 13225\n", - "116 : 13456\n", - "117 : 13689\n", - "118 : 13924\n", - "119 : 14161\n", - "120 : 14400\n", - "121 : 14641\n", - "122 : 14884\n", - "123 : 15129\n", - "124 : 15376\n", - "125 : 15625\n", - "126 : 15876\n", - "127 : 16129\n", - "128 : 16384\n", - "129 : 16641\n", - "130 : 16900\n", - "131 : 17161\n", - "132 : 17424\n", - "133 : 17689\n", - "134 : 17956\n", - "135 : 18225\n", - "136 : 18496\n", - "137 : 18769\n", - "138 : 19044\n", - "139 : 19321\n", - "140 : 19600\n", - "141 : 19881\n", - "142 : 20164\n", - "143 : 20449\n", - "144 : 20736\n", - "145 : 21025\n", - "146 : 21316\n", - "147 : 21609\n", - "148 : 21904\n", - "149 : 22201\n", - "150 : 22500\n", - "151 : 22801\n", - "152 : 23104\n", - "153 : 23409\n", - "154 : 23716\n", - "155 : 24025\n", - "156 : 24336\n", - "157 : 24649\n", - "158 : 24964\n", - "159 : 25281\n", - "160 : 25600\n", - "161 : 25921\n", - "162 : 26244\n", - "163 : 26569\n", - "164 : 26896\n", - "165 : 27225\n", - "166 : 27556\n", - "167 : 27889\n", - "168 : 28224\n", - "169 : 28561\n", - "170 : 28900\n", - "171 : 29241\n", - "172 : 29584\n", - "173 : 29929\n", - "174 : 30276\n", - "175 : 30625\n", - "176 : 30976\n", - "177 : 31329\n", - "178 : 31684\n", - "179 : 32041\n", - "180 : 32400\n", - "181 : 32761\n", - "182 : 33124\n", - "183 : 33489\n", - "184 : 33856\n", - "185 : 34225\n", - "186 : 34596\n", - "187 : 34969\n", - "188 : 35344\n", - "189 : 35721\n", - "190 : 36100\n", - "191 : 36481\n", - "192 : 36864\n", - "193 : 37249\n", - "194 : 37636\n", - "195 : 38025\n", - "196 : 38416\n", - "197 : 38809\n", - "198 : 39204\n", - "199 : 39601\n", - "200 : 40000\n", - "201 : 40401\n", - "202 : 40804\n", - "203 : 41209\n", - "204 : 41616\n", - "205 : 42025\n", - "206 : 42436\n", - "207 : 42849\n", - "208 : 43264\n", - "209 : 43681\n", - "210 : 44100\n", - "211 : 44521\n", - "212 : 44944\n", - "213 : 45369\n", - "214 : 45796\n", - "215 : 46225\n", - "216 : 46656\n", - "217 : 47089\n", - "218 : 47524\n", - "219 : 47961\n", - "220 : 48400\n", - "221 : 48841\n", - "222 : 49284\n", - "223 : 49729\n", - "224 : 50176\n", - "225 : 50625\n", - "226 : 51076\n", - "227 : 51529\n", - "228 : 51984\n", - "229 : 52441\n", - "230 : 52900\n", - "231 : 53361\n", - "232 : 53824\n", - "233 : 54289\n", - "234 : 54756\n", - "235 : 55225\n", - "236 : 55696\n", - "237 : 56169\n", - "238 : 56644\n", - "239 : 57121\n", - "240 : 57600\n", - "241 : 58081\n", - "242 : 58564\n", - "243 : 59049\n", - "244 : 59536\n", - "245 : 60025\n", - "246 : 60516\n", - "247 : 61009\n", - "248 : 61504\n", - "249 : 62001\n", - "250 : 62500\n", - "251 : 63001\n", - "252 : 63504\n", - "253 : 64009\n", - "254 : 64516\n", - "255 : 65025\n", - "256 : 65536\n", - "257 : 66049\n", - "258 : 66564\n", - "259 : 67081\n", - "260 : 67600\n", - "261 : 68121\n", - "262 : 68644\n", - "263 : 69169\n", - "264 : 69696\n", - "265 : 70225\n", - "266 : 70756\n", - "267 : 71289\n", - "268 : 71824\n", - "269 : 72361\n", - "270 : 72900\n", - "271 : 73441\n", - "272 : 73984\n", - "273 : 74529\n", - "274 : 75076\n", - "275 : 75625\n", - "276 : 76176\n", - "277 : 76729\n", - "278 : 77284\n", - "279 : 77841\n", - "280 : 78400\n", - "281 : 78961\n", - "282 : 79524\n", - "283 : 80089\n", - "284 : 80656\n", - "285 : 81225\n", - "286 : 81796\n", - "287 : 82369\n", - "288 : 82944\n", - "289 : 83521\n", - "290 : 84100\n", - "291 : 84681\n", - "292 : 85264\n", - "293 : 85849\n", - "294 : 86436\n", - "295 : 87025\n", - "296 : 87616\n", - "297 : 88209\n", - "298 : 88804\n", - "299 : 89401\n", - "300 : 90000\n", - "301 : 90601\n", - "302 : 91204\n", - "303 : 91809\n", - "304 : 92416\n", - "305 : 93025\n", - "306 : 93636\n", - "307 : 94249\n", - "308 : 94864\n", - "309 : 95481\n", - "310 : 96100\n", - "311 : 96721\n", - "312 : 97344\n", - "313 : 97969\n", - "314 : 98596\n", - "315 : 99225\n", - "316 : 99856\n", - "317 : 100489\n", - "318 : 101124\n", - "319 : 101761\n", - "320 : 102400\n", - "321 : 103041\n", - "322 : 103684\n", - "323 : 104329\n", - "324 : 104976\n", - "325 : 105625\n", - "326 : 106276\n", - "327 : 106929\n", - "328 : 107584\n", - "329 : 108241\n", - "330 : 108900\n", - "331 : 109561\n", - "332 : 110224\n", - "333 : 110889\n", - "334 : 111556\n", - "335 : 112225\n", - "336 : 112896\n", - "337 : 113569\n", - "338 : 114244\n", - "339 : 114921\n", - "340 : 115600\n", - "341 : 116281\n", - "342 : 116964\n", - "343 : 117649\n", - "344 : 118336\n", - "345 : 119025\n", - "346 : 119716\n", - "347 : 120409\n", - "348 : 121104\n", - "349 : 121801\n", - "350 : 122500\n", - "351 : 123201\n", - "352 : 123904\n", - "353 : 124609\n", - "354 : 125316\n", - "355 : 126025\n", - "356 : 126736\n", - "357 : 127449\n", - "358 : 128164\n", - "359 : 128881\n", - "360 : 129600\n", - "361 : 130321\n", - "362 : 131044\n", - "363 : 131769\n", - "364 : 132496\n", - "365 : 133225\n", - "366 : 133956\n", - "367 : 134689\n", - "368 : 135424\n", - "369 : 136161\n", - "370 : 136900\n", - "371 : 137641\n", - "372 : 138384\n", - "373 : 139129\n", - "374 : 139876\n", - "375 : 140625\n", - "376 : 141376\n", - "377 : 142129\n", - "378 : 142884\n", - "379 : 143641\n", - "380 : 144400\n", - "381 : 145161\n", - "382 : 145924\n", - "383 : 146689\n", - "384 : 147456\n", - "385 : 148225\n", - "386 : 148996\n", - "387 : 149769\n", - "388 : 150544\n", - "389 : 151321\n", - "390 : 152100\n", - "391 : 152881\n", - "392 : 153664\n", - "393 : 154449\n", - "394 : 155236\n", - "395 : 156025\n", - "396 : 156816\n", - "397 : 157609\n", - "398 : 158404\n", - "399 : 159201\n", - "400 : 160000\n", - "401 : 160801\n", - "402 : 161604\n", - "403 : 162409\n", - "404 : 163216\n", - "405 : 164025\n", - "406 : 164836\n", - "407 : 165649\n", - "408 : 166464\n", - "409 : 167281\n", - "410 : 168100\n", - "411 : 168921\n", - "412 : 169744\n", - "413 : 170569\n", - "414 : 171396\n", - "415 : 172225\n", - "416 : 173056\n", - "417 : 173889\n", - "418 : 174724\n", - "419 : 175561\n", - "420 : 176400\n", - "421 : 177241\n", - "422 : 178084\n", - "423 : 178929\n", - "424 : 179776\n", - "425 : 180625\n", - "426 : 181476\n", - "427 : 182329\n", - "428 : 183184\n", - "429 : 184041\n", - "430 : 184900\n", - "431 : 185761\n", - "432 : 186624\n", - "433 : 187489\n", - "434 : 188356\n", - "435 : 189225\n", - "436 : 190096\n", - "437 : 190969\n", - "438 : 191844\n", - "439 : 192721\n", - "440 : 193600\n", - "441 : 194481\n", - "442 : 195364\n", - "443 : 196249\n", - "444 : 197136\n", - "445 : 198025\n", - "446 : 198916\n", - "447 : 199809\n", - "448 : 200704\n", - "449 : 201601\n", - "450 : 202500\n", - "451 : 203401\n", - "452 : 204304\n", - "453 : 205209\n", - "454 : 206116\n", - "455 : 207025\n", - "456 : 207936\n", - "457 : 208849\n", - "458 : 209764\n", - "459 : 210681\n", - "460 : 211600\n", - "461 : 212521\n", - "462 : 213444\n", - "463 : 214369\n", - "464 : 215296\n", - "465 : 216225\n", - "466 : 217156\n", - "467 : 218089\n", - "468 : 219024\n", - "469 : 219961\n", - "470 : 220900\n", - "471 : 221841\n", - "472 : 222784\n", - "473 : 223729\n", - "474 : 224676\n", - "475 : 225625\n", - "476 : 226576\n", - "477 : 227529\n", - "478 : 228484\n", - "479 : 229441\n", - "480 : 230400\n", - "481 : 231361\n", - "482 : 232324\n", - "483 : 233289\n", - "484 : 234256\n", - "485 : 235225\n", - "486 : 236196\n", - "487 : 237169\n", - "488 : 238144\n", - "489 : 239121\n", - "490 : 240100\n", - "491 : 241081\n", - "492 : 242064\n", - "493 : 243049\n", - "494 : 244036\n", - "495 : 245025\n", - "496 : 246016\n", - "497 : 247009\n", - "498 : 248004\n", - "499 : 249001\n" - ] - } - ], - "source": [ - "for i in range(500):\n", - " print(i,\":\",i**2)\n", - " " - ] - }, - { - "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.5" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/Exercise-1/Exercise-1-notebook.ipynb b/Exercise-1/Exercise-1-notebook.ipynb new file mode 100644 index 0000000..18dd0b0 --- /dev/null +++ b/Exercise-1/Exercise-1-notebook.ipynb @@ -0,0 +1,989 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Exercise 1 notebook\n", + "\n", + "This has just solution, or if you just want tosee the finisehed homework.\n", + "\n", + "This is a markdown cell with **bold** _italic_ inline $math$, and formulas:\n", + "\n", + "$$f(x) = a.x^2+b.x+c$$\n", + "\n", + "$$x_\\pm = \\frac{-b \\pm \\sqrt(b^2-4ac)}{2a}$$\n", + "\n", + "Tribple backticks with llanguage\n", + "\n", + "```python\n", + "# I can write some code:\n", + "from IPython.display import Math\n", + "Math('\\Delta = b^2-4ac')\n", + "```\n", + "\n", + "Indented 4 spaces:\n", + "\n", + " # I can write some code:\n", + " from IPython.display import Math\n", + " Math('\\Delta = b^2-4ac')\n", + "\n", + "\n", + "Try to get a feel of the editor (select and press TAB...)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$$\\Delta = b^2-4ac$$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from IPython.display import Math\n", + "Math('\\Delta = b^2-4ac')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's carry on with the exercise. To be efficient we'll lear to use the keyboard shortcuts. " + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Hello SciPy\n" + ] + } + ], + "source": [ + "print(\"Hello SciPy\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You will notice that `Ctrl-Enter` execute a cell in place (and keep it selected), while `Shift-Enter` execute and select next. Finally, `Alt-Enter` execute and insert below." + ] + }, + { + "cell_type": "code", + "execution_count": 90, + "metadata": {}, + "outputs": [], + "source": [ + "def fibgen():\n", + " a,b = 1,1\n", + " for i in range(100):\n", + " yield i, a\n", + " a,b = b, a+b\n", + "fib = fibgen()" + ] + }, + { + "cell_type": "code", + "execution_count": 107, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(16, 1597)" + ] + }, + "execution_count": 107, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# crl-enter to iter through this.\n", + "next(fib)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## kernel's related functionalities." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd" + ] + }, + { + "cell_type": "code", + "execution_count": 109, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[0;31mType:\u001b[0m module\n", + "\u001b[0;31mString form:\u001b[0m \n", + "\u001b[0;31mFile:\u001b[0m ~/anaconda/envs/scipy18jlab/lib/python3.6/site-packages/pandas/__init__.py\n", + "\u001b[0;31mDocstring:\u001b[0m \n", + "pandas - a powerful data analysis and manipulation library for Python\n", + "=====================================================================\n", + "\n", + "**pandas** is a Python package providing fast, flexible, and expressive data\n", + "structures designed to make working with \"relational\" or \"labeled\" data both\n", + "easy and intuitive. It aims to be the fundamental high-level building block for\n", + "doing practical, **real world** data analysis in Python. Additionally, it has\n", + "the broader goal of becoming **the most powerful and flexible open source data\n", + "analysis / manipulation tool available in any language**. It is already well on\n", + "its way toward this goal.\n", + "\n", + "Main Features\n", + "-------------\n", + "Here are just a few of the things that pandas does well:\n", + "\n", + " - Easy handling of missing data in floating point as well as non-floating\n", + " point data.\n", + " - Size mutability: columns can be inserted and deleted from DataFrame and\n", + " higher dimensional objects\n", + " - Automatic and explicit data alignment: objects can be explicitly aligned\n", + " to a set of labels, or the user can simply ignore the labels and let\n", + " `Series`, `DataFrame`, etc. automatically align the data for you in\n", + " computations.\n", + " - Powerful, flexible group by functionality to perform split-apply-combine\n", + " operations on data sets, for both aggregating and transforming data.\n", + " - Make it easy to convert ragged, differently-indexed data in other Python\n", + " and NumPy data structures into DataFrame objects.\n", + " - Intelligent label-based slicing, fancy indexing, and subsetting of large\n", + " data sets.\n", + " - Intuitive merging and joining data sets.\n", + " - Flexible reshaping and pivoting of data sets.\n", + " - Hierarchical labeling of axes (possible to have multiple labels per tick).\n", + " - Robust IO tools for loading data from flat files (CSV and delimited),\n", + " Excel files, databases, and saving/loading data from the ultrafast HDF5\n", + " format.\n", + " - Time series-specific functionality: date range generation and frequency\n", + " conversion, moving window statistics, moving window linear regressions,\n", + " date shifting and lagging, etc.\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pd?" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# tab\n", + "pd.D" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#Shift-tab\n", + "pd.DataFrame(" + ] + }, + { + "cell_type": "code", + "execution_count": 111, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1024px-Hubble_Interacting_Galaxy_AM_0500-620_(2008-04-24).jpg\n", + "Dockerfile\n", + "Museums_in_DC.geojson\n", + "README.md\n", + "bar.vl.json\n", + "iris.csv\n", + "japan_meterological_agency_201707211555.json\n", + "zika_assembled_genomes.fasta\n" + ] + } + ], + "source": [ + "!ls ../data/" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [], + "source": [ + "# open inspector\n", + "df = pd.read_csv('../data/iris.csv')" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": {}, + "outputs": [], + "source": [ + "#import IPython\n", + "#ip = get_ipython()\n", + "#ip.Completer.use_jedi = False" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "metadata": {}, + "outputs": [], + "source": [ + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sepal_lengthsepal_widthpetal_lengthpetal_widthspecies
05.13.51.40.2se
14.93.01.40.2setosa
24.73.21.30.2setosa
34.63.11.50.2setosa
45.03.61.40.2setosa
\n", + "
" + ], + "text/plain": [ + " sepal_length sepal_width petal_length petal_width species\n", + "0 5.1 3.5 1.4 0.2 se\n", + "1 4.9 3.0 1.4 0.2 setosa\n", + "2 4.7 3.2 1.3 0.2 setosa\n", + "3 4.6 3.1 1.5 0.2 setosa\n", + "4 5.0 3.6 1.4 0.2 setosa" + ] + }, + "execution_count": 56, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "ax2 = df.plot.scatter(x='sepal_length',\n", + " y='sepal_width')" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0 : 0\n", + "1 : 1\n", + "2 : 4\n", + "3 : 9\n", + "4 : 16\n", + "5 : 25\n", + "6 : 36\n", + "7 : 49\n", + "8 : 64\n", + "9 : 81\n", + "10 : 100\n", + "11 : 121\n", + "12 : 144\n", + "13 : 169\n", + "14 : 196\n", + "15 : 225\n", + "16 : 256\n", + "17 : 289\n", + "18 : 324\n", + "19 : 361\n", + "20 : 400\n", + "21 : 441\n", + "22 : 484\n", + "23 : 529\n", + "24 : 576\n", + "25 : 625\n", + "26 : 676\n", + "27 : 729\n", + "28 : 784\n", + "29 : 841\n", + "30 : 900\n", + "31 : 961\n", + "32 : 1024\n", + "33 : 1089\n", + "34 : 1156\n", + "35 : 1225\n", + "36 : 1296\n", + "37 : 1369\n", + "38 : 1444\n", + "39 : 1521\n", + "40 : 1600\n", + "41 : 1681\n", + "42 : 1764\n", + "43 : 1849\n", + "44 : 1936\n", + "45 : 2025\n", + "46 : 2116\n", + "47 : 2209\n", + "48 : 2304\n", + "49 : 2401\n", + "50 : 2500\n", + "51 : 2601\n", + "52 : 2704\n", + "53 : 2809\n", + "54 : 2916\n", + "55 : 3025\n", + "56 : 3136\n", + "57 : 3249\n", + "58 : 3364\n", + "59 : 3481\n", + "60 : 3600\n", + "61 : 3721\n", + "62 : 3844\n", + "63 : 3969\n", + "64 : 4096\n", + "65 : 4225\n", + "66 : 4356\n", + "67 : 4489\n", + "68 : 4624\n", + "69 : 4761\n", + "70 : 4900\n", + "71 : 5041\n", + "72 : 5184\n", + "73 : 5329\n", + "74 : 5476\n", + "75 : 5625\n", + "76 : 5776\n", + "77 : 5929\n", + "78 : 6084\n", + "79 : 6241\n", + "80 : 6400\n", + "81 : 6561\n", + "82 : 6724\n", + "83 : 6889\n", + "84 : 7056\n", + "85 : 7225\n", + "86 : 7396\n", + "87 : 7569\n", + "88 : 7744\n", + "89 : 7921\n", + "90 : 8100\n", + "91 : 8281\n", + "92 : 8464\n", + "93 : 8649\n", + "94 : 8836\n", + "95 : 9025\n", + "96 : 9216\n", + "97 : 9409\n", + "98 : 9604\n", + "99 : 9801\n", + "100 : 10000\n", + "101 : 10201\n", + "102 : 10404\n", + "103 : 10609\n", + "104 : 10816\n", + "105 : 11025\n", + "106 : 11236\n", + "107 : 11449\n", + "108 : 11664\n", + "109 : 11881\n", + "110 : 12100\n", + "111 : 12321\n", + "112 : 12544\n", + "113 : 12769\n", + "114 : 12996\n", + "115 : 13225\n", + "116 : 13456\n", + "117 : 13689\n", + "118 : 13924\n", + "119 : 14161\n", + "120 : 14400\n", + "121 : 14641\n", + "122 : 14884\n", + "123 : 15129\n", + "124 : 15376\n", + "125 : 15625\n", + "126 : 15876\n", + "127 : 16129\n", + "128 : 16384\n", + "129 : 16641\n", + "130 : 16900\n", + "131 : 17161\n", + "132 : 17424\n", + "133 : 17689\n", + "134 : 17956\n", + "135 : 18225\n", + "136 : 18496\n", + "137 : 18769\n", + "138 : 19044\n", + "139 : 19321\n", + "140 : 19600\n", + "141 : 19881\n", + "142 : 20164\n", + "143 : 20449\n", + "144 : 20736\n", + "145 : 21025\n", + "146 : 21316\n", + "147 : 21609\n", + "148 : 21904\n", + "149 : 22201\n", + "150 : 22500\n", + "151 : 22801\n", + "152 : 23104\n", + "153 : 23409\n", + "154 : 23716\n", + "155 : 24025\n", + "156 : 24336\n", + "157 : 24649\n", + "158 : 24964\n", + "159 : 25281\n", + "160 : 25600\n", + "161 : 25921\n", + "162 : 26244\n", + "163 : 26569\n", + "164 : 26896\n", + "165 : 27225\n", + "166 : 27556\n", + "167 : 27889\n", + "168 : 28224\n", + "169 : 28561\n", + "170 : 28900\n", + "171 : 29241\n", + "172 : 29584\n", + "173 : 29929\n", + "174 : 30276\n", + "175 : 30625\n", + "176 : 30976\n", + "177 : 31329\n", + "178 : 31684\n", + "179 : 32041\n", + "180 : 32400\n", + "181 : 32761\n", + "182 : 33124\n", + "183 : 33489\n", + "184 : 33856\n", + "185 : 34225\n", + "186 : 34596\n", + "187 : 34969\n", + "188 : 35344\n", + "189 : 35721\n", + "190 : 36100\n", + "191 : 36481\n", + "192 : 36864\n", + "193 : 37249\n", + "194 : 37636\n", + "195 : 38025\n", + "196 : 38416\n", + "197 : 38809\n", + "198 : 39204\n", + "199 : 39601\n", + "200 : 40000\n", + "201 : 40401\n", + "202 : 40804\n", + "203 : 41209\n", + "204 : 41616\n", + "205 : 42025\n", + "206 : 42436\n", + "207 : 42849\n", + "208 : 43264\n", + "209 : 43681\n", + "210 : 44100\n", + "211 : 44521\n", + "212 : 44944\n", + "213 : 45369\n", + "214 : 45796\n", + "215 : 46225\n", + "216 : 46656\n", + "217 : 47089\n", + "218 : 47524\n", + "219 : 47961\n", + "220 : 48400\n", + "221 : 48841\n", + "222 : 49284\n", + "223 : 49729\n", + "224 : 50176\n", + "225 : 50625\n", + "226 : 51076\n", + "227 : 51529\n", + "228 : 51984\n", + "229 : 52441\n", + "230 : 52900\n", + "231 : 53361\n", + "232 : 53824\n", + "233 : 54289\n", + "234 : 54756\n", + "235 : 55225\n", + "236 : 55696\n", + "237 : 56169\n", + "238 : 56644\n", + "239 : 57121\n", + "240 : 57600\n", + "241 : 58081\n", + "242 : 58564\n", + "243 : 59049\n", + "244 : 59536\n", + "245 : 60025\n", + "246 : 60516\n", + "247 : 61009\n", + "248 : 61504\n", + "249 : 62001\n", + "250 : 62500\n", + "251 : 63001\n", + "252 : 63504\n", + "253 : 64009\n", + "254 : 64516\n", + "255 : 65025\n", + "256 : 65536\n", + "257 : 66049\n", + "258 : 66564\n", + "259 : 67081\n", + "260 : 67600\n", + "261 : 68121\n", + "262 : 68644\n", + "263 : 69169\n", + "264 : 69696\n", + "265 : 70225\n", + "266 : 70756\n", + "267 : 71289\n", + "268 : 71824\n", + "269 : 72361\n", + "270 : 72900\n", + "271 : 73441\n", + "272 : 73984\n", + "273 : 74529\n", + "274 : 75076\n", + "275 : 75625\n", + "276 : 76176\n", + "277 : 76729\n", + "278 : 77284\n", + "279 : 77841\n", + "280 : 78400\n", + "281 : 78961\n", + "282 : 79524\n", + "283 : 80089\n", + "284 : 80656\n", + "285 : 81225\n", + "286 : 81796\n", + "287 : 82369\n", + "288 : 82944\n", + "289 : 83521\n", + "290 : 84100\n", + "291 : 84681\n", + "292 : 85264\n", + "293 : 85849\n", + "294 : 86436\n", + "295 : 87025\n", + "296 : 87616\n", + "297 : 88209\n", + "298 : 88804\n", + "299 : 89401\n", + "300 : 90000\n", + "301 : 90601\n", + "302 : 91204\n", + "303 : 91809\n", + "304 : 92416\n", + "305 : 93025\n", + "306 : 93636\n", + "307 : 94249\n", + "308 : 94864\n", + "309 : 95481\n", + "310 : 96100\n", + "311 : 96721\n", + "312 : 97344\n", + "313 : 97969\n", + "314 : 98596\n", + "315 : 99225\n", + "316 : 99856\n", + "317 : 100489\n", + "318 : 101124\n", + "319 : 101761\n", + "320 : 102400\n", + "321 : 103041\n", + "322 : 103684\n", + "323 : 104329\n", + "324 : 104976\n", + "325 : 105625\n", + "326 : 106276\n", + "327 : 106929\n", + "328 : 107584\n", + "329 : 108241\n", + "330 : 108900\n", + "331 : 109561\n", + "332 : 110224\n", + "333 : 110889\n", + "334 : 111556\n", + "335 : 112225\n", + "336 : 112896\n", + "337 : 113569\n", + "338 : 114244\n", + "339 : 114921\n", + "340 : 115600\n", + "341 : 116281\n", + "342 : 116964\n", + "343 : 117649\n", + "344 : 118336\n", + "345 : 119025\n", + "346 : 119716\n", + "347 : 120409\n", + "348 : 121104\n", + "349 : 121801\n", + "350 : 122500\n", + "351 : 123201\n", + "352 : 123904\n", + "353 : 124609\n", + "354 : 125316\n", + "355 : 126025\n", + "356 : 126736\n", + "357 : 127449\n", + "358 : 128164\n", + "359 : 128881\n", + "360 : 129600\n", + "361 : 130321\n", + "362 : 131044\n", + "363 : 131769\n", + "364 : 132496\n", + "365 : 133225\n", + "366 : 133956\n", + "367 : 134689\n", + "368 : 135424\n", + "369 : 136161\n", + "370 : 136900\n", + "371 : 137641\n", + "372 : 138384\n", + "373 : 139129\n", + "374 : 139876\n", + "375 : 140625\n", + "376 : 141376\n", + "377 : 142129\n", + "378 : 142884\n", + "379 : 143641\n", + "380 : 144400\n", + "381 : 145161\n", + "382 : 145924\n", + "383 : 146689\n", + "384 : 147456\n", + "385 : 148225\n", + "386 : 148996\n", + "387 : 149769\n", + "388 : 150544\n", + "389 : 151321\n", + "390 : 152100\n", + "391 : 152881\n", + "392 : 153664\n", + "393 : 154449\n", + "394 : 155236\n", + "395 : 156025\n", + "396 : 156816\n", + "397 : 157609\n", + "398 : 158404\n", + "399 : 159201\n", + "400 : 160000\n", + "401 : 160801\n", + "402 : 161604\n", + "403 : 162409\n", + "404 : 163216\n", + "405 : 164025\n", + "406 : 164836\n", + "407 : 165649\n", + "408 : 166464\n", + "409 : 167281\n", + "410 : 168100\n", + "411 : 168921\n", + "412 : 169744\n", + "413 : 170569\n", + "414 : 171396\n", + "415 : 172225\n", + "416 : 173056\n", + "417 : 173889\n", + "418 : 174724\n", + "419 : 175561\n", + "420 : 176400\n", + "421 : 177241\n", + "422 : 178084\n", + "423 : 178929\n", + "424 : 179776\n", + "425 : 180625\n", + "426 : 181476\n", + "427 : 182329\n", + "428 : 183184\n", + "429 : 184041\n", + "430 : 184900\n", + "431 : 185761\n", + "432 : 186624\n", + "433 : 187489\n", + "434 : 188356\n", + "435 : 189225\n", + "436 : 190096\n", + "437 : 190969\n", + "438 : 191844\n", + "439 : 192721\n", + "440 : 193600\n", + "441 : 194481\n", + "442 : 195364\n", + "443 : 196249\n", + "444 : 197136\n", + "445 : 198025\n", + "446 : 198916\n", + "447 : 199809\n", + "448 : 200704\n", + "449 : 201601\n", + "450 : 202500\n", + "451 : 203401\n", + "452 : 204304\n", + "453 : 205209\n", + "454 : 206116\n", + "455 : 207025\n", + "456 : 207936\n", + "457 : 208849\n", + "458 : 209764\n", + "459 : 210681\n", + "460 : 211600\n", + "461 : 212521\n", + "462 : 213444\n", + "463 : 214369\n", + "464 : 215296\n", + "465 : 216225\n", + "466 : 217156\n", + "467 : 218089\n", + "468 : 219024\n", + "469 : 219961\n", + "470 : 220900\n", + "471 : 221841\n", + "472 : 222784\n", + "473 : 223729\n", + "474 : 224676\n", + "475 : 225625\n", + "476 : 226576\n", + "477 : 227529\n", + "478 : 228484\n", + "479 : 229441\n", + "480 : 230400\n", + "481 : 231361\n", + "482 : 232324\n", + "483 : 233289\n", + "484 : 234256\n", + "485 : 235225\n", + "486 : 236196\n", + "487 : 237169\n", + "488 : 238144\n", + "489 : 239121\n", + "490 : 240100\n", + "491 : 241081\n", + "492 : 242064\n", + "493 : 243049\n", + "494 : 244036\n", + "495 : 245025\n", + "496 : 246016\n", + "497 : 247009\n", + "498 : 248004\n", + "499 : 249001\n" + ] + } + ], + "source": [ + "for i in range(500):\n", + " print(i,\":\",i**2)" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [ + { + "data": { + "application/javascript": [ + "alert(\"Hello SciPy\")" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from IPython.display import Javascript\n", + "Javascript('alert(\"Hello SciPy\")')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "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.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Exercise-1/Exercise1.md b/Exercise-1/Exercise1.md index 712d2ca..837a15a 100644 --- a/Exercise-1/Exercise1.md +++ b/Exercise-1/Exercise1.md @@ -23,7 +23,7 @@ Arrange the notebook and rendered markdown side-by-side. Then arrange them, one - Change the first cell to markdown, and write some markdown with - Bold - italic - - [Math](https://math.meta.stackexchange.com/questions/5020/mathjax-basic-tutorial-and-quick-reference) (inlne and formulas): `$x^2$`, `$$\frac{-b \pm \sqrt(b^2-4ac})}{2a}$$` + - [Math](https://math.meta.stackexchange.com/questions/5020/mathjax-basic-tutorial-and-quick-reference) (inlne and formulas): `$f(x) = a.x^2+b.x+c$`, `$$x_\pm = \frac{-b \pm \sqrt(b^2-4ac)}{2a}$$` - Code (triple backtick fences ` ``` `, or indented 4 spaces) - Create a code cell and evaluate it, printing "Hello SciPy" - Describe the difference between the `Ctrl-Enter`, `Shift-Enter`, and `Alt-Enter` shortcuts. See the Run menu. @@ -35,7 +35,9 @@ Arrange the notebook and rendered markdown side-by-side. Then arrange them, one - Use the command palette the find the Keyboard shortcut to open the inspector. - Change the inspector layout to be side-by-side with the notebook. - Type `pandas.read_csv(` to see the help pop up. - - (TODO: do the answer key) use panda’s `read_csv` to load `'../demo/data/iris.csv'` into a dataframe, display this dataframe + - Use panda’s `read_csv` to load `'../demo/data/iris.csv'` into a dataframe, display this dataframe + - use `%matpltolib inline` to allow inline graphs, + - make a scatter plot of `sepal_length` vs `sepal_width`. # More advanced notebooks diff --git a/Exercise-2/Notebook A.ipynb b/Exercise-2/Notebook A.ipynb new file mode 100644 index 0000000..eebb452 --- /dev/null +++ b/Exercise-2/Notebook A.ipynb @@ -0,0 +1,48 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Notebook A" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "a=3" + ] + }, + { + "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.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Exercise-2/Notebook B.ipynb b/Exercise-2/Notebook B.ipynb new file mode 100644 index 0000000..4810434 --- /dev/null +++ b/Exercise-2/Notebook B.ipynb @@ -0,0 +1,59 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Notebook B" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a" + ] + }, + { + "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.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Exercise-2/Report.md b/Exercise-2/Report.md new file mode 100644 index 0000000..376d96c --- /dev/null +++ b/Exercise-2/Report.md @@ -0,0 +1,42 @@ +## Attached markdown document to a console. + + +Rightclick somewhere on this document and click `"Create console for editor"`. +You will be prompted to select a kernel (new or existing). + +Now that this is done, the current or _fenced block_, _selection_ or _line_ will be sent to the console and executed. + +# Iris dataset + +Let's learn some Pandas. First import `pandas`, it is common to alias to the shorter name `pd`. + +``` +import pandas as pd +``` + +Pandas provides some nice utilities function to load csv datasets: + +``` +df = pd.read_csv('../data/iris.csv') +``` + +enable inline plotting with `%matplotlib` magic function: + +``` +%matplotlib inline +``` + +``` +df.plot.scatter('sepal_width', 'sepal_length') +``` + +# Categorical +``` +%load_ext autoreload +from lib import categorify +``` + +``` +categorify(df, 'species') +df.plot.scatter('sepal_width', 'sepal_length', c='species', colormap='viridis') +``` \ No newline at end of file diff --git a/Exercise-2/lib.py b/Exercise-2/lib.py new file mode 100644 index 0000000..50fa04b --- /dev/null +++ b/Exercise-2/lib.py @@ -0,0 +1,16 @@ +from pandas import Categorical + +def categorify(df, keys): + if isinstance(keys, str): + keys = (keys, ) + + for key in keys: + + #df[key] = Categorical(df[key]) + + cat_map = {cat:i for i,cat in enumerate(set(df[key]))} + df[key] = df[key].apply(lambda x:cat_map[x]) + + + + diff --git a/environment.yml b/environment.yml index da69f8c..1478545 100644 --- a/environment.yml +++ b/environment.yml @@ -3,7 +3,6 @@ channels: - conda-forge - defaults dependencies: - - appnope=0.1.0=py36_0 - arrow=0.12.1=py36_2 - asn1crypto=0.24.0=py36_0 - backcall=0.1.0=py_0 @@ -23,10 +22,8 @@ dependencies: - dask-core=0.18.1=py_0 - decorator=4.3.0=py_0 - entrypoints=0.2.3=py36_1 - - freetype=2.8.1=0 - future=0.16.0=py36_0 - html5lib=1.0.1=py_0 - - icu=58.2=0 - idna=2.7=py36_0 - imageio=2.3.0=py36_0 - ipydatawidgets=3.1.0=py_1 @@ -47,26 +44,18 @@ dependencies: - jupyterlab=0.32.1=py36_0 - jupyterlab_launcher=0.10.5=py36_0 - kiwisolver=1.0.1=py36_1 - - libcxx=6.0.0=0 - - libffi=3.2.1=3 - - libiconv=1.15=h470a237_1 - libpng=1.6.34=0 - - libsodium=1.0.16=0 - libtiff=4.0.9=0 - - libxml2=2.9.8=0 - llvm-meta=6.0.0=0 - llvmdev=6.0.0=default_3 - markupsafe=1.0=py36_0 - matplotlib=2.2.2=py36_1 - mistune=0.8.3=py36_1 - - nbconvert=5.3.1=py_1 - nbformat=4.4.0=py36_0 - - ncurses=5.9=10 - networkx=2.1=py36_0 - nodejs=9.11.1=0 - notebook=5.5.0=py36_0 - olefile=0.45.1=py36_0 - - openssl=1.0.2o=0 - pandas=0.23.1=py36_0 - pandoc=2.2.1=hde52d81_0 - pandocfilters=1.4.2=py36_0 @@ -76,7 +65,6 @@ dependencies: - pillow=5.1.0=py36_0 - poyo=0.4.1=py36_0 - prompt_toolkit=1.0.15=py36_0 - - ptyprocess=0.5.2=py36_0 - pycparser=2.18=py36_0 - pygments=2.2.0=py36_0 - pyopenssl=18.0.0=py36_0 @@ -95,10 +83,8 @@ dependencies: - setuptools=39.2.0=py36_0 - simplegeneric=0.8.1=py36_0 - six=1.11.0=py36_1 - - sqlite=3.20.1=2 - terminado=0.8.1=py36_0 - testpath=0.3.1=py36_0 - - tk=8.6.7=0 - toolz=0.9.0=py_0 - tornado=5.0.2=py36_0 - traitlets=4.3.2=py36_0 @@ -111,9 +97,7 @@ dependencies: - widgetsnbextension=3.2.1=py36_0 - xz=5.2.3=0 - zeromq=4.2.5=1 - - zlib=1.2.11=h470a237_3 - intel-openmp=2018.0.3=0 - - libgfortran=3.0.1=h93005f0_2 - libopenblas=0.2.20=hdc02c5d_7 - mkl=2018.0.3=1 - numpy=1.14.3=py36he6379a5_2 diff --git a/outline.md b/outline.md index 52fb2a1..746a1bd 100644 --- a/outline.md +++ b/outline.md @@ -59,14 +59,14 @@ JupyterLab is in beta and that first time impression are critical to usability of JupyterLab. We will show you what can be done, but can still improve the usability quite a bit. When trying to do any task in the exercise try to think first: - - How would I do that - - Then try to do the task. +- How would I do that +- Then try to do the task. - Note what was intuitive, and what surprised you. - Tell it to us (via post it or issues) - - Feel free to interrupt with questions and clarification +- Feel free to interrupt with questions and clarification - - There will likely be a binder available, but do not rely on the conference +- There will likely be a binder available, but do not rely on the conference wifi. ### JASON 0:10-0:25 (15min) - Standard slides covering background of notebook and JupyterLab. These are from the jupyterlab-demo repo @@ -75,7 +75,7 @@ exercise try to think first: - Can you get Lab and notebook at the same time: YES - No difference in file format; Notebooks files are the same ### JASON 0:25-0:45 (20 min): Tour of The User Interface - - if it does not work, hop on binder if it works +- if it does not work, hop on binder if it works - Point to documentation, follow the naming conventions, maybe follow that outline - various existing default panel, and layout, file browser, support of multiple file types, multiple file viewers for single file - dragging ui @@ -101,9 +101,9 @@ Write one good thing on the green sticky note, one bad on the red one. 2. How to author markdown and equations 3. Collapsible cells 4. drag cells, inside notebook and between views of files. - 3. Enable scrolling on outputs + 5. Enable scrolling on outputs 6. creating new view of outputs - 5. javascript rendering restrictions + 7. javascript rendering restrictions ### MATTHIAS 1:30-1:45 (15 min): Attaching kernels to multiple documents @@ -116,7 +116,7 @@ Write one good thing on the green sticky note, one bad on the red one. ### MATTHIAS 1:45-2:10 (15 min) Exercise 2 - - binding multiple documents to the same kernel +- binding multiple documents to the same kernel - New Console for Notebook - Markdown file + console workflow - Python code file + console workflow @@ -140,7 +140,7 @@ Write one good thing on the green sticky note, one bad on the red one. 2. Assign new Keyboard shortcut to an existing action. 2. add a keyboard shortcut (restart and run all) 3. change an editor setting - + ## 2:50-3:15 (25min) - Workflows around Widgets (Jason) 1. Introduction to widgets and libraries like bqplot, ipyvolume, pythreejs, etc. diff --git a/readme.md b/readme.md index e77b9c8..ae0b6c4 100644 --- a/readme.md +++ b/readme.md @@ -47,7 +47,7 @@ cd scipy2018-jupyterLab-tutorial conda env create -f environment.yml ``` -Activate the conda environment +Activate the conda environment created previously (the name fo the environement was defined in the `environment.yml` used above) ``` conda activate scipy18jlab @@ -59,4 +59,30 @@ Install extra JupyterLab extensions jupyter labextension install @jupyter-widgets/jupyterlab-manager jupyter-threejs ipyvolume bqplot @jupyterlab/geojson-extension @jupyterlab/fasta-extension ``` -If you open multiple terminal windows make sure to activate the environment in each of them. +If you open multiple terminal windows make sure to activate the environment in each of them. Your terminal prompt should be preceded by the name of the curent environement, like so for example: + + + +``` +(scipy18jlab) ~/scipy2018-jupyterLab-tutorial $ +``` + + + +## Starting JupyterLab: + +enter the following command in a new terminal windows, leave the window, if you close the window jupyterlab will exit. + +``` +$ jupyter lab +``` + +## Removing environement environment + +You can delete the previously created env by using the following in a terminal prompt. + +``` +conda env remove --name scipy18jlab --yes +``` + +This will **not** delete any data, but only the conda environement named `scipy18jlab` . \ No newline at end of file From 85a2379e1e522ebb6513b66f7b0fa7c53e053927 Mon Sep 17 00:00:00 2001 From: Matthias Bussonnier Date: Mon, 2 Jul 2018 12:14:42 +0200 Subject: [PATCH 028/105] remove more packages --- environment.yml | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/environment.yml b/environment.yml index 1478545..caeb4e2 100644 --- a/environment.yml +++ b/environment.yml @@ -57,16 +57,14 @@ dependencies: - notebook=5.5.0=py36_0 - olefile=0.45.1=py36_0 - pandas=0.23.1=py36_0 - - pandoc=2.2.1=hde52d81_0 - - pandocfilters=1.4.2=py36_0 - parso=0.2.1=py_0 - pexpect=4.6.0=py36_0 - pickleshare=0.7.4=py36_0 - pillow=5.1.0=py36_0 - poyo=0.4.1=py36_0 - prompt_toolkit=1.0.15=py36_0 - - pycparser=2.18=py36_0 - pygments=2.2.0=py36_0 + - pycparser=2.18=py36_0 - pyopenssl=18.0.0=py36_0 - pyparsing=2.2.0=py36_0 - pysocks=1.6.8=py36_1 @@ -91,18 +89,13 @@ dependencies: - traittypes=0.2.1=py36_0 - urllib3=1.22=py36_0 - wcwidth=0.1.7=py36_0 - - webencodings=0.5.1=py36_0 - wheel=0.31.0=py36_0 - whichcraft=0.4.1=py36_0 - widgetsnbextension=3.2.1=py36_0 - xz=5.2.3=0 - zeromq=4.2.5=1 - - intel-openmp=2018.0.3=0 - - libopenblas=0.2.20=hdc02c5d_7 - - mkl=2018.0.3=1 - - numpy=1.14.3=py36he6379a5_2 - - numpy-base=1.14.3=py36h7ef55bc_1 + - numpy=1.14.3 - pip=10.0.1=py36_0 - - scipy=1.1.0=py36hcaad992_0 + - scipy=1.1.0 - pip: - dask==0.18.1 From a1d5fd7887eff9b80ae097a8325ab9456d75eb94 Mon Sep 17 00:00:00 2001 From: Matthias Bussonnier Date: Tue, 3 Jul 2018 08:35:17 +0200 Subject: [PATCH 029/105] remove more --- environment.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/environment.yml b/environment.yml index caeb4e2..ce5a5a6 100644 --- a/environment.yml +++ b/environment.yml @@ -45,7 +45,6 @@ dependencies: - jupyterlab_launcher=0.10.5=py36_0 - kiwisolver=1.0.1=py36_1 - libpng=1.6.34=0 - - libtiff=4.0.9=0 - llvm-meta=6.0.0=0 - llvmdev=6.0.0=default_3 - markupsafe=1.0=py36_0 @@ -74,7 +73,6 @@ dependencies: - pytz=2018.4=py_0 - pywavelets=0.5.2=py36_1 - pyzmq=17.0.0=py36_4 - - readline=7.0=0 - requests=2.19.1=py36_0 - scikit-image=0.14.0=py36hfc679d8_1 - send2trash=1.5.0=py_0 From a0cab2237687955504c6e31b4439e9aa9b390a83 Mon Sep 17 00:00:00 2001 From: Matthias Bussonnier Date: Wed, 4 Jul 2018 14:19:37 -0700 Subject: [PATCH 030/105] simplify environment --- environment.yml | 154 +++++++++++++++++++----------------------------- 1 file changed, 62 insertions(+), 92 deletions(-) diff --git a/environment.yml b/environment.yml index ce5a5a6..bf9cdf7 100644 --- a/environment.yml +++ b/environment.yml @@ -3,97 +3,67 @@ channels: - conda-forge - defaults dependencies: - - arrow=0.12.1=py36_2 - - asn1crypto=0.24.0=py36_0 - - backcall=0.1.0=py_0 - - binaryornot=0.4.4=py36_0 - - bleach=2.1.3=py_0 - - bqplot=0.10.1=py36_0 - - ca-certificates=2018.4.16=0 - - certifi=2018.4.16=py36_0 - - cffi=1.11.5=py36_0 - - chardet=3.0.4=py36_0 - - clangdev=6.0.0=default_0 - - click=6.7=py_1 - - cloudpickle=0.5.3=py_0 - - cookiecutter=1.6.0=py36_0 - - cryptography=2.2.1=py36_0 - - cycler=0.10.0=py36_0 - - dask-core=0.18.1=py_0 - - decorator=4.3.0=py_0 - - entrypoints=0.2.3=py36_1 - - future=0.16.0=py36_0 - - html5lib=1.0.1=py_0 - - idna=2.7=py36_0 - - imageio=2.3.0=py36_0 - - ipydatawidgets=3.1.0=py_1 - - ipykernel=4.8.2=py36_0 - - ipyscales=0.2.2=py_0 - - ipython=6.4.0=py36_0 - - ipython_genutils=0.2.0=py36_0 - - ipyvolume=0.4.5=py36_0 - - ipywebrtc=0.3.0=py36_0 - - ipywidgets=7.2.1=py36_1 - - jedi=0.12.0=py36_0 - - jinja2=2.10=py36_0 - - jinja2-time=0.2.0=py36_1 - - jpeg=9b=2 - - jsonschema=2.6.0=py36_1 - - jupyter_client=5.2.3=py36_0 - - jupyter_core=4.4.0=py_0 - - jupyterlab=0.32.1=py36_0 - - jupyterlab_launcher=0.10.5=py36_0 - - kiwisolver=1.0.1=py36_1 - - libpng=1.6.34=0 - - llvm-meta=6.0.0=0 - - llvmdev=6.0.0=default_3 - - markupsafe=1.0=py36_0 - - matplotlib=2.2.2=py36_1 - - mistune=0.8.3=py36_1 - - nbformat=4.4.0=py36_0 - - networkx=2.1=py36_0 - - nodejs=9.11.1=0 - - notebook=5.5.0=py36_0 - - olefile=0.45.1=py36_0 - - pandas=0.23.1=py36_0 - - parso=0.2.1=py_0 - - pexpect=4.6.0=py36_0 - - pickleshare=0.7.4=py36_0 - - pillow=5.1.0=py36_0 - - poyo=0.4.1=py36_0 - - prompt_toolkit=1.0.15=py36_0 - - pygments=2.2.0=py36_0 - - pycparser=2.18=py36_0 - - pyopenssl=18.0.0=py36_0 - - pyparsing=2.2.0=py36_0 - - pysocks=1.6.8=py36_1 - - python=3.6.5=1 - - python-dateutil=2.7.3=py_0 - - pythreejs=1.1.0=py36_2 - - pytz=2018.4=py_0 - - pywavelets=0.5.2=py36_1 - - pyzmq=17.0.0=py36_4 - - requests=2.19.1=py36_0 - - scikit-image=0.14.0=py36hfc679d8_1 - - send2trash=1.5.0=py_0 - - setuptools=39.2.0=py36_0 - - simplegeneric=0.8.1=py36_0 - - six=1.11.0=py36_1 - - terminado=0.8.1=py36_0 - - testpath=0.3.1=py36_0 - - toolz=0.9.0=py_0 - - tornado=5.0.2=py36_0 - - traitlets=4.3.2=py36_0 - - traittypes=0.2.1=py36_0 - - urllib3=1.22=py36_0 - - wcwidth=0.1.7=py36_0 - - wheel=0.31.0=py36_0 - - whichcraft=0.4.1=py36_0 - - widgetsnbextension=3.2.1=py36_0 - - xz=5.2.3=0 - - zeromq=4.2.5=1 - - numpy=1.14.3 - - pip=10.0.1=py36_0 - - scipy=1.1.0 + - arrow + - bqplot + - cookiecutter + - dask-core + - dask + - decorator + - entrypoints + - future + - ipydatawidgets + - ipykernel + - ipyscales + - ipython + - ipython_genutils + - ipyvolume + - ipywebrtc + - ipywidgets + - jedi + - jinja2 + - jinja2-time + - jpeg + - jsonschema + - jupyter_client + - jupyter_core + - jupyterlab + - jupyterlab_launcher + - libpng + - llvm-meta + - llvmdev + - matplotlib + - nbformat + - networkx + - nodejs + - notebook + - pandas + - pexpect + - pickleshare + - pillow + - poyo + - prompt_toolkit + - pygments + - python=3.6.5 + - python-dateutil + - pythreejs + - pytz + - pywavelets + - pyzmq + - requests + - scikit-image + - setuptools + - terminado + - testpath + - toolz + - tornado + - traitlets + - traittypes + - urllib3 + - wheel + - whichcraft + - widgetsnbextension + - xz + - pip + - scipy - pip: - dask==0.18.1 From fd63604aa05fd2369937943ab99334681312fe17 Mon Sep 17 00:00:00 2001 From: Matthias Bussonnier Date: Thu, 5 Jul 2018 15:26:32 -0700 Subject: [PATCH 031/105] remove more --- environment.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/environment.yml b/environment.yml index bf9cdf7..0af6cc2 100644 --- a/environment.yml +++ b/environment.yml @@ -29,8 +29,6 @@ dependencies: - jupyterlab - jupyterlab_launcher - libpng - - llvm-meta - - llvmdev - matplotlib - nbformat - networkx From 17067b02f3f8fdd06d0b2178a1dacdbe9aa769b6 Mon Sep 17 00:00:00 2001 From: Matthias Bussonnier Date: Fri, 6 Jul 2018 11:13:35 -0700 Subject: [PATCH 032/105] some fixes in ex1 --- Exercise-1/Exercise1.md | 4 ++-- environment.yml | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Exercise-1/Exercise1.md b/Exercise-1/Exercise1.md index 837a15a..42d0bfd 100644 --- a/Exercise-1/Exercise1.md +++ b/Exercise-1/Exercise1.md @@ -24,7 +24,7 @@ Arrange the notebook and rendered markdown side-by-side. Then arrange them, one - Bold - italic - [Math](https://math.meta.stackexchange.com/questions/5020/mathjax-basic-tutorial-and-quick-reference) (inlne and formulas): `$f(x) = a.x^2+b.x+c$`, `$$x_\pm = \frac{-b \pm \sqrt(b^2-4ac)}{2a}$$` - - Code (triple backtick fences ` ``` `, or indented 4 spaces) + - Code (triple backtick fences ` ``` `, or indented 4 spaces) - Create a code cell and evaluate it, printing "Hello SciPy" - Describe the difference between the `Ctrl-Enter`, `Shift-Enter`, and `Alt-Enter` shortcuts. See the Run menu. - try importing `pandas` @@ -35,7 +35,7 @@ Arrange the notebook and rendered markdown side-by-side. Then arrange them, one - Use the command palette the find the Keyboard shortcut to open the inspector. - Change the inspector layout to be side-by-side with the notebook. - Type `pandas.read_csv(` to see the help pop up. - - Use panda’s `read_csv` to load `'../demo/data/iris.csv'` into a dataframe, display this dataframe + - Use panda’s `read_csv` to load `'../data/iris.csv'` into a dataframe, display this dataframe - use `%matpltolib inline` to allow inline graphs, - make a scatter plot of `sepal_length` vs `sepal_width`. diff --git a/environment.yml b/environment.yml index 0af6cc2..dfe26f5 100644 --- a/environment.yml +++ b/environment.yml @@ -65,3 +65,4 @@ dependencies: - scipy - pip: - dask==0.18.1 + - jedi>=0.12.1 From 5fda9b41aaff0ded470c1b7b2b4f9051f843c394 Mon Sep 17 00:00:00 2001 From: Matthias Bussonnier Date: Fri, 6 Jul 2018 16:47:17 -0700 Subject: [PATCH 033/105] Ex 3 --- Exercise-1/Exercise1.md | 1 + Exercise-2/Exercide-2.md | 12 +--- Exercise-2/Report.md | 8 ++- Exercise-2/lib.py | 8 +-- Exercise-3/A Notebook has No Name - .ipynb | 74 ++++++++++++++++++++++ Exercise-3/Exercise-3.md | 20 ++++++ Exercise-3/example.json | 16 +++++ 7 files changed, 118 insertions(+), 21 deletions(-) create mode 100644 Exercise-3/A Notebook has No Name - .ipynb create mode 100644 Exercise-3/Exercise-3.md create mode 100644 Exercise-3/example.json diff --git a/Exercise-1/Exercise1.md b/Exercise-1/Exercise1.md index 42d0bfd..f64be99 100644 --- a/Exercise-1/Exercise1.md +++ b/Exercise-1/Exercise1.md @@ -36,6 +36,7 @@ Arrange the notebook and rendered markdown side-by-side. Then arrange them, one - Change the inspector layout to be side-by-side with the notebook. - Type `pandas.read_csv(` to see the help pop up. - Use panda’s `read_csv` to load `'../data/iris.csv'` into a dataframe, display this dataframe + - open `'../data/iris.csv'` as a standalone CSV file. - use `%matpltolib inline` to allow inline graphs, - make a scatter plot of `sepal_length` vs `sepal_width`. diff --git a/Exercise-2/Exercide-2.md b/Exercise-2/Exercide-2.md index f169d4d..917d821 100644 --- a/Exercise-2/Exercide-2.md +++ b/Exercise-2/Exercide-2.md @@ -7,18 +7,8 @@ options that suits _you_ if you find them best. Keep in mind, if something is not intuitive, or not in the place you expected it, write it down (for example on the red sticky note), and give it to us at the break. - -- Create a new python notebook and put it side by side with the first one. - - Copy a cell by dragging a cell from the first notebook to this notebook. - - TODO: get several notebooks/python/data files opens next to each other to prepare next session - - TODO open the demo/data/iris.csv and other data files in separate windows. - -- TODO: Open a long notebook. - - Do “New View into File” from the tab context menu. - - Scroll down to the bottom of the notebook in one frame, and drag a cell from the top of the file to the bottom by dragging between the two windows. - ## Files + consoles -- binding multiple documents to the same kernel (Section II) +- binding multiple documents to the same kernel - New Console for Notebook - R-Markdown workflow. - live editing demo - Python code file + console workflow diff --git a/Exercise-2/Report.md b/Exercise-2/Report.md index 376d96c..03b827d 100644 --- a/Exercise-2/Report.md +++ b/Exercise-2/Report.md @@ -32,11 +32,13 @@ df.plot.scatter('sepal_width', 'sepal_length') # Categorical ``` -%load_ext autoreload -from lib import categorify +%load_ext autoreload +%autoreload 1 +%aimport lib ``` ``` -categorify(df, 'species') +df = pd.read_csv('../data/iris.csv') +lib.categorify(df, 'species') df.plot.scatter('sepal_width', 'sepal_length', c='species', colormap='viridis') ``` \ No newline at end of file diff --git a/Exercise-2/lib.py b/Exercise-2/lib.py index 50fa04b..c2922b8 100644 --- a/Exercise-2/lib.py +++ b/Exercise-2/lib.py @@ -5,12 +5,6 @@ def categorify(df, keys): keys = (keys, ) for key in keys: - #df[key] = Categorical(df[key]) - cat_map = {cat:i for i,cat in enumerate(set(df[key]))} - df[key] = df[key].apply(lambda x:cat_map[x]) - - - - + df[key] = df[key].apply(lambda x:cat_map[x]) \ No newline at end of file diff --git a/Exercise-3/A Notebook has No Name - .ipynb b/Exercise-3/A Notebook has No Name - .ipynb new file mode 100644 index 0000000..d6001b4 --- /dev/null +++ b/Exercise-3/A Notebook has No Name - .ipynb @@ -0,0 +1,74 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import random" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.4779019652509018" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "random.random()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.5551398517377166" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "random.random()" + ] + } + ], + "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.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Exercise-3/Exercise-3.md b/Exercise-3/Exercise-3.md new file mode 100644 index 0000000..b3fd310 --- /dev/null +++ b/Exercise-3/Exercise-3.md @@ -0,0 +1,20 @@ +# Exercises 1 + +Remove all the sticky notes from your screen :-) and attempt the following. +These are _guidelines_, feel free to err on the side of workflow and +options that suits _you_ if you find them best. + +Keep in mind, if something is not intuitive, or not in the place you expected +it, write it down (for example on the red sticky note), and give it to us at the +break. + + +## Assign existing shortcut to new action + +In the notebook, the cells outputs can be collapsed or expanded, the name of the command to do so are `notebook:hide-cell-outputs` and `notebook:show-cell-outputs`. + +You can, for example bind the keys `-` (minus) and `+` (plus), to show/hide the cells. On QWERTY keyboards `+` will be availlable by using `Shift +`. + +Try to bind an existing keyboard shortcut to ` notebook:run-all-cells` + +Configure your editor to not automatically close brackets. \ No newline at end of file diff --git a/Exercise-3/example.json b/Exercise-3/example.json new file mode 100644 index 0000000..51bda07 --- /dev/null +++ b/Exercise-3/example.json @@ -0,0 +1,16 @@ +{ + "notebook:run-all":{ + "keys":[ + "-" + ], + "command":"notebook:hide-cell-outputs", + "selector":".jp-Notebook:focus" + }, + "notebook:show-cell-outputs-2":{ + "keys":[ + "Shift =" + ], + "command":"notebook:show-cell-outputs", + "selector":".jp-Notebook:focus" + } +} \ No newline at end of file From 5a3c504131c546df1a4300541f208d816813ea86 Mon Sep 17 00:00:00 2001 From: Matthias Bussonnier Date: Fri, 6 Jul 2018 16:50:26 -0700 Subject: [PATCH 034/105] remove test notebook --- Exercise-3/A Notebook has No Name - .ipynb | 74 ---------------------- 1 file changed, 74 deletions(-) delete mode 100644 Exercise-3/A Notebook has No Name - .ipynb diff --git a/Exercise-3/A Notebook has No Name - .ipynb b/Exercise-3/A Notebook has No Name - .ipynb deleted file mode 100644 index d6001b4..0000000 --- a/Exercise-3/A Notebook has No Name - .ipynb +++ /dev/null @@ -1,74 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import random" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0.4779019652509018" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "random.random()" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0.5551398517377166" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "random.random()" - ] - } - ], - "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.5" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} From 1cf458dd607da6c1dabcf555ab750291da13f368 Mon Sep 17 00:00:00 2001 From: Jason Grout Date: Fri, 6 Jul 2018 23:44:44 -0700 Subject: [PATCH 035/105] Tweak ex 1 --- Exercise-1/Exercise1.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Exercise-1/Exercise1.md b/Exercise-1/Exercise1.md index f64be99..c65d2f4 100644 --- a/Exercise-1/Exercise1.md +++ b/Exercise-1/Exercise1.md @@ -10,7 +10,7 @@ break. ## View this file as rendered markdown. -Right-click on the file to open it as rendered markdown. +Right-click on the `Exercise1.md` file to open it as rendered markdown. ## Layout @@ -26,15 +26,15 @@ Arrange the notebook and rendered markdown side-by-side. Then arrange them, one - [Math](https://math.meta.stackexchange.com/questions/5020/mathjax-basic-tutorial-and-quick-reference) (inlne and formulas): `$f(x) = a.x^2+b.x+c$`, `$$x_\pm = \frac{-b \pm \sqrt(b^2-4ac)}{2a}$$` - Code (triple backtick fences ` ``` `, or indented 4 spaces) - Create a code cell and evaluate it, printing "Hello SciPy" - - Describe the difference between the `Ctrl-Enter`, `Shift-Enter`, and `Alt-Enter` shortcuts. See the Run menu. + - Experiment with the run shortcuts `Ctrl-Enter`, `Shift-Enter`, and `Alt-Enter` and note the differences between them (see the Run menu for help). - try importing `pandas` - evaluate `pandas?` to get the help on the pandas library. - try `pandas.D` to get tab completion on the pandas library. Note that completions can take a few second the first time the library get inspected to get result. - Complete to `pandas.DataFrame(` place the cursor after the open bracket and press `Shift-Tab` to get quick help. - To always see the info about the current function you can open the inspector via the command palette. - Use the command palette the find the Keyboard shortcut to open the inspector. - - Change the inspector layout to be side-by-side with the notebook. - - Type `pandas.read_csv(` to see the help pop up. + - Move the inspector tab somewhere so that you can see both it and the notebook. + - Type `pandas.read_csv(` to see the inspector display function help. - Use panda’s `read_csv` to load `'../data/iris.csv'` into a dataframe, display this dataframe - open `'../data/iris.csv'` as a standalone CSV file. - use `%matpltolib inline` to allow inline graphs, From d3f25536ee68196f3c42b28f3372d87db143ea9b Mon Sep 17 00:00:00 2001 From: Jason Grout Date: Fri, 6 Jul 2018 23:47:55 -0700 Subject: [PATCH 036/105] Only use conda-forge channel --- environment.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/environment.yml b/environment.yml index dfe26f5..a3e4e1c 100644 --- a/environment.yml +++ b/environment.yml @@ -1,7 +1,6 @@ name: scipy18jlab channels: - conda-forge - - defaults dependencies: - arrow - bqplot From 74f4b1ef8f5ef538bdcd7063277043f72ae7024d Mon Sep 17 00:00:00 2001 From: Jason Grout Date: Sat, 7 Jul 2018 00:05:16 -0700 Subject: [PATCH 037/105] Fix grammar, change repo name to lowercase, and add note about creating the environment manually. --- readme.md | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/readme.md b/readme.md index ae0b6c4..5c75c2c 100644 --- a/readme.md +++ b/readme.md @@ -14,7 +14,9 @@ Please do not rely on cloud hosting to follow this tutorial, as the network connection may be unreliable. If possible, come to the tutorial with a computer where you have administrative privileges. -For this tutorial, we are standardizing on a conda-based python distribution (miniconda or Anaconda). We may not be able to help with installation issues if you are using a different python distribution. +For this tutorial, we are standardizing on a conda-based python distribution +(miniconda or Anaconda). We may not be able to help with installation issues if +you are using a different python distribution. ## Software installation @@ -27,12 +29,12 @@ For this tutorial, we are standardizing on a conda-based python distribution (mi 2. To get the tutorial materials, clone this repository. **Please plan to update the materials shortly before the tutorial.** ``` -git clone https://github.com/jupyterlab/scipy2018-jupyterLab-tutorial +git clone https://github.com/jupyterlab/scipy2018-jupyterlab-tutorial ``` To update the materials: ``` -cd scipy2018-jupyterLab-tutorial +cd scipy2018-jupyterlab-tutorial git pull ``` @@ -43,11 +45,13 @@ Feel free to open an issue or send a pull request to update these materials if t Create a conda environment ``` -cd scipy2018-jupyterLab-tutorial +cd scipy2018-jupyterlab-tutorial conda env create -f environment.yml ``` -Activate the conda environment created previously (the name fo the environement was defined in the `environment.yml` used above) +(You could instead create the environment manually with `conda create -n scipy18jlab -c conda-forge --yes python=3.6 pip cookiecutter=1.6 notebook=5.5 pandas=0.23 nodejs=9.11 jupyterlab bqplot ipyvolume pythreejs`) + +Activate the conda environment created previously (the name of the environement was defined in the `environment.yml` used above) ``` conda activate scipy18jlab @@ -59,30 +63,27 @@ Install extra JupyterLab extensions jupyter labextension install @jupyter-widgets/jupyterlab-manager jupyter-threejs ipyvolume bqplot @jupyterlab/geojson-extension @jupyterlab/fasta-extension ``` -If you open multiple terminal windows make sure to activate the environment in each of them. Your terminal prompt should be preceded by the name of the curent environement, like so for example: - - +If you open multiple terminal windows make sure to activate the environment in each of them. Your terminal prompt should be preceded by the name of the current environment, for example: ``` -(scipy18jlab) ~/scipy2018-jupyterLab-tutorial $ +(scipy18jlab) ~/scipy2018-jupyterlab-tutorial $ ``` - ## Starting JupyterLab: -enter the following command in a new terminal windows, leave the window, if you close the window jupyterlab will exit. +Enter the following command in a new terminal window to start JupyterLab. ``` $ jupyter lab ``` -## Removing environement environment +## Removing environment -You can delete the previously created env by using the following in a terminal prompt. +You can delete the previously created environment by using the following in a terminal prompt. ``` conda env remove --name scipy18jlab --yes ``` -This will **not** delete any data, but only the conda environement named `scipy18jlab` . \ No newline at end of file +This will **not** delete any data, but only the conda environement named `scipy18jlab` . From d69a1c87be50b1953c8cefdee862f714a7d33c79 Mon Sep 17 00:00:00 2001 From: Jason Grout Date: Sat, 7 Jul 2018 00:22:44 -0700 Subject: [PATCH 038/105] Add command line for environment.yml --- environment.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/environment.yml b/environment.yml index a3e4e1c..da3ecea 100644 --- a/environment.yml +++ b/environment.yml @@ -1,3 +1,4 @@ +# conda create -n scipy18jlab -c conda-forge --override-channels --yes python=3.6 pip cookiecutter=1.6 notebook=5.5 pandas=0.23 nodejs=9.11 jupyterlab bqplot ipyvolume pythreejs name: scipy18jlab channels: - conda-forge From 014ff6d6cda5a7b213ad221294f8a4ad5acc17b7 Mon Sep 17 00:00:00 2001 From: Jason Grout Date: Sat, 7 Jul 2018 08:45:26 -0700 Subject: [PATCH 039/105] Switch back to command-line environment creation, with an optional environment.yml. Since we removed most of the version numbers, there is little use in specifying all of the packages. --- environment.yml | 68 +++++-------------------------------------------- readme.md | 11 ++++---- 2 files changed, 12 insertions(+), 67 deletions(-) diff --git a/environment.yml b/environment.yml index da3ecea..5459c6d 100644 --- a/environment.yml +++ b/environment.yml @@ -1,68 +1,14 @@ -# conda create -n scipy18jlab -c conda-forge --override-channels --yes python=3.6 pip cookiecutter=1.6 notebook=5.5 pandas=0.23 nodejs=9.11 jupyterlab bqplot ipyvolume pythreejs name: scipy18jlab channels: - conda-forge dependencies: - - arrow + - python=3.6 + - pip + - cookiecutter=1.6 + - notebook=5.5 + - pandas=0.23 + - nodejs=9.11 + - jupyterlab - bqplot - - cookiecutter - - dask-core - - dask - - decorator - - entrypoints - - future - - ipydatawidgets - - ipykernel - - ipyscales - - ipython - - ipython_genutils - ipyvolume - - ipywebrtc - - ipywidgets - - jedi - - jinja2 - - jinja2-time - - jpeg - - jsonschema - - jupyter_client - - jupyter_core - - jupyterlab - - jupyterlab_launcher - - libpng - - matplotlib - - nbformat - - networkx - - nodejs - - notebook - - pandas - - pexpect - - pickleshare - - pillow - - poyo - - prompt_toolkit - - pygments - - python=3.6.5 - - python-dateutil - pythreejs - - pytz - - pywavelets - - pyzmq - - requests - - scikit-image - - setuptools - - terminado - - testpath - - toolz - - tornado - - traitlets - - traittypes - - urllib3 - - wheel - - whichcraft - - widgetsnbextension - - xz - - pip - - scipy - - pip: - - dask==0.18.1 - - jedi>=0.12.1 diff --git a/readme.md b/readme.md index 5c75c2c..5df3c77 100644 --- a/readme.md +++ b/readme.md @@ -40,18 +40,17 @@ git pull Feel free to open an issue or send a pull request to update these materials if things are unclear. -3. Set up your environment: +3. Set up your environment. -Create a conda environment +Create a conda environment: ``` -cd scipy2018-jupyterlab-tutorial -conda env create -f environment.yml +conda create -n scipy18jlab -c conda-forge --override-channels --yes python=3.6 pip cookiecutter=1.6 notebook=5.5 pandas=0.23 nodejs=9.11 jupyterlab bqplot ipyvolume pythreejs ``` -(You could instead create the environment manually with `conda create -n scipy18jlab -c conda-forge --yes python=3.6 pip cookiecutter=1.6 notebook=5.5 pandas=0.23 nodejs=9.11 jupyterlab bqplot ipyvolume pythreejs`) +(You could instead create the environment from the supplied environment.yml file with `conda env create -f scipy2018-jupyterlab-tutorial/environment.yml`) -Activate the conda environment created previously (the name of the environement was defined in the `environment.yml` used above) +Activate the conda environment ``` conda activate scipy18jlab From 7b5e443e5a03e9050ef518d9386da0938cb846fd Mon Sep 17 00:00:00 2001 From: Jason Grout Date: Sat, 7 Jul 2018 08:54:19 -0700 Subject: [PATCH 040/105] Tweak readme a bit more. --- readme.md | 47 +++++++++++++++++++++++------------------------ 1 file changed, 23 insertions(+), 24 deletions(-) diff --git a/readme.md b/readme.md index 5df3c77..0f20132 100644 --- a/readme.md +++ b/readme.md @@ -28,42 +28,41 @@ you are using a different python distribution. 2. To get the tutorial materials, clone this repository. **Please plan to update the materials shortly before the tutorial.** -``` -git clone https://github.com/jupyterlab/scipy2018-jupyterlab-tutorial -``` + ``` + git clone https://github.com/jupyterlab/scipy2018-jupyterlab-tutorial + ``` -To update the materials: -``` -cd scipy2018-jupyterlab-tutorial -git pull -``` + To update the materials: + ``` + cd scipy2018-jupyterlab-tutorial + git pull + ``` -Feel free to open an issue or send a pull request to update these materials if things are unclear. + Feel free to open an issue or send a pull request to update these materials if things are unclear. 3. Set up your environment. -Create a conda environment: + Create a conda environment: -``` -conda create -n scipy18jlab -c conda-forge --override-channels --yes python=3.6 pip cookiecutter=1.6 notebook=5.5 pandas=0.23 nodejs=9.11 jupyterlab bqplot ipyvolume pythreejs -``` + ``` + conda create -n scipy18jlab -c conda-forge --override-channels --yes python=3.6 pip cookiecutter=1.6 notebook=5.5 pandas=0.23 nodejs=9.11 jupyterlab bqplot ipyvolume pythreejs + ``` -(You could instead create the environment from the supplied environment.yml file with `conda env create -f scipy2018-jupyterlab-tutorial/environment.yml`) + (You could instead create the environment from the supplied environment file with `conda env create -f scipy2018-jupyterlab-tutorial/environment.yml`) -Activate the conda environment + Activate the conda environment: -``` -conda activate scipy18jlab -``` + ``` + conda activate scipy18jlab + ``` -Install extra JupyterLab extensions + Install extra JupyterLab extensions: -``` -jupyter labextension install @jupyter-widgets/jupyterlab-manager jupyter-threejs ipyvolume bqplot @jupyterlab/geojson-extension @jupyterlab/fasta-extension -``` + ``` + jupyter labextension install @jupyter-widgets/jupyterlab-manager jupyter-threejs ipyvolume bqplot @jupyterlab/geojson-extension @jupyterlab/fasta-extension + ``` If you open multiple terminal windows make sure to activate the environment in each of them. Your terminal prompt should be preceded by the name of the current environment, for example: - ``` (scipy18jlab) ~/scipy2018-jupyterlab-tutorial $ ``` @@ -79,7 +78,7 @@ $ jupyter lab ## Removing environment -You can delete the previously created environment by using the following in a terminal prompt. +You can delete the environment by using the following in a terminal prompt. ``` conda env remove --name scipy18jlab --yes From df5181ed5176526e00a3eee4e0580bb4cd8c5e20 Mon Sep 17 00:00:00 2001 From: Jason Grout Date: Sat, 7 Jul 2018 09:28:48 -0700 Subject: [PATCH 041/105] Update readme.md --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 0f20132..ce4e1a9 100644 --- a/readme.md +++ b/readme.md @@ -68,7 +68,7 @@ If you open multiple terminal windows make sure to activate the environment in e ``` -## Starting JupyterLab: +## Starting JupyterLab Enter the following command in a new terminal window to start JupyterLab. From cb9ddd2903b662911cd46e2fb677356ba4e8b82e Mon Sep 17 00:00:00 2001 From: Jason Grout Date: Sat, 7 Jul 2018 11:37:33 -0700 Subject: [PATCH 042/105] Rename file. --- Exercise-2/{Exercide-2.md => Exercise-2.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Exercise-2/{Exercide-2.md => Exercise-2.md} (100%) diff --git a/Exercise-2/Exercide-2.md b/Exercise-2/Exercise-2.md similarity index 100% rename from Exercise-2/Exercide-2.md rename to Exercise-2/Exercise-2.md From 380119fd2991571c00250917dab8045c4517356b Mon Sep 17 00:00:00 2001 From: Jason Grout Date: Sat, 7 Jul 2018 11:52:03 -0700 Subject: [PATCH 043/105] Delete trailing space. --- Exercise-3/Exercise-3.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Exercise-3/Exercise-3.md b/Exercise-3/Exercise-3.md index b3fd310..dc088af 100644 --- a/Exercise-3/Exercise-3.md +++ b/Exercise-3/Exercise-3.md @@ -11,7 +11,7 @@ break. ## Assign existing shortcut to new action -In the notebook, the cells outputs can be collapsed or expanded, the name of the command to do so are `notebook:hide-cell-outputs` and `notebook:show-cell-outputs`. +In the notebook, the cells outputs can be collapsed or expanded, the name of the command to do so are `notebook:hide-cell-outputs` and `notebook:show-cell-outputs`. You can, for example bind the keys `-` (minus) and `+` (plus), to show/hide the cells. On QWERTY keyboards `+` will be availlable by using `Shift +`. From d046deec08b3ff37fddc104f6e196c56d14e5506 Mon Sep 17 00:00:00 2001 From: Jason Grout Date: Sat, 7 Jul 2018 11:55:30 -0700 Subject: [PATCH 044/105] Update certificate extension. --- scipy_cert/README.md | 5 ++--- scipy_cert/package-lock.json | 6 +++--- scipy_cert/package.json | 2 +- scipy_cert/scipy2018.cert.json | 1 + scipy_cert/src/index.ts | 2 +- scipy_cert/tsconfig.json | 10 +++++----- 6 files changed, 13 insertions(+), 13 deletions(-) create mode 100644 scipy_cert/scipy2018.cert.json diff --git a/scipy_cert/README.md b/scipy_cert/README.md index dae12b1..435b0f6 100644 --- a/scipy_cert/README.md +++ b/scipy_cert/README.md @@ -1,6 +1,6 @@ -# scipy_cert +# Scipy Certificate -SciPy cert ext +SciPy Certificate extension ## Prerequisites @@ -28,4 +28,3 @@ To rebuild the package and the JupyterLab app: npm run build jupyter lab build ``` - diff --git a/scipy_cert/package-lock.json b/scipy_cert/package-lock.json index 55d6ed0..3065a30 100644 --- a/scipy_cert/package-lock.json +++ b/scipy_cert/package-lock.json @@ -211,9 +211,9 @@ } }, "typescript": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.4.2.tgz", - "integrity": "sha1-+DlfhdRZJ2BnyYiqQYN6j4KHCEQ=", + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", + "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==", "dev": true }, "wrappy": { diff --git a/scipy_cert/package.json b/scipy_cert/package.json index 12acc86..82cb83b 100644 --- a/scipy_cert/package.json +++ b/scipy_cert/package.json @@ -32,6 +32,6 @@ }, "devDependencies": { "rimraf": "^2.6.2", - "typescript": "~2.4.0" + "typescript": "~2.9.2" } } diff --git a/scipy_cert/scipy2018.cert.json b/scipy_cert/scipy2018.cert.json new file mode 100644 index 0000000..133c9d5 --- /dev/null +++ b/scipy_cert/scipy2018.cert.json @@ -0,0 +1 @@ +{"given": "My Name", "event": "Scipy 2018"} \ No newline at end of file diff --git a/scipy_cert/src/index.ts b/scipy_cert/src/index.ts index 4397c21..f8c9e1a 100644 --- a/scipy_cert/src/index.ts +++ b/scipy_cert/src/index.ts @@ -16,7 +16,7 @@ import '../style/index.css'; /** * The default mime type for the extension. */ -const MIME_TYPE = 'application/cert'; +const MIME_TYPE = 'application/vnd.scipy2018.certificate'; /** * The class name added to the extension. diff --git a/scipy_cert/tsconfig.json b/scipy_cert/tsconfig.json index 3077d87..fa3c1c1 100644 --- a/scipy_cert/tsconfig.json +++ b/scipy_cert/tsconfig.json @@ -1,14 +1,14 @@ { "compilerOptions": { "declaration": true, - "noImplicitAny": true, - "noEmitOnError": true, - "noUnusedLocals": true, + "lib": ["es2015", "dom"], "module": "commonjs", "moduleResolution": "node", - "target": "ES5", + "noEmitOnError": true, + "noUnusedLocals": true, "outDir": "./lib", - "lib": ["ES5", "ES2015.Promise", "DOM"], + "strict": true, + "target": "es2015", "types": [] }, "include": ["src/*"] From 621f9d438c6414d37b2337edbc1ded29f346d943 Mon Sep 17 00:00:00 2001 From: Jason Grout Date: Sat, 7 Jul 2018 13:18:22 -0700 Subject: [PATCH 045/105] Add optional packages and node memory troubleshooting --- readme.md | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/readme.md b/readme.md index ce4e1a9..719fdee 100644 --- a/readme.md +++ b/readme.md @@ -85,3 +85,37 @@ conda env remove --name scipy18jlab --yes ``` This will **not** delete any data, but only the conda environement named `scipy18jlab` . + +# Optional packages + +We are demonstrating a few packages not installed in the above lists. These are +optional, and not required for the exercises in this tutorial. + +To install these, first activate the tutorial environment: + +``` +conda activate scipy18jlab +``` + +Then install the python packages: +``` +conda install ipyleaflet +pip install sidecar +``` + +and install the JupyterLab extensions: +``` +jupyter labextension install jupyterlab-toc jupyter-leaflet @jupyter-widgets/jupyterlab-sidecar +``` + +# Troubleshooting + +If you experience an out-of-memory error, you can increase the memory available: +``` +NODE_OPTIONS=--max_old_space_size=4096 jupyter lab build +``` +or +``` +NODE_OPTIONS=--max_old_space_size=4096 jupyter labextension install ... +``` +This increases the available memory for the build process to 4Gb. From 0a62fc2b92c2fbfc69cfd0ffa006ecea4f76ca43 Mon Sep 17 00:00:00 2001 From: Matthias Bussonnier Date: Sat, 7 Jul 2018 13:31:08 -0700 Subject: [PATCH 046/105] more info --- scipy_cert/README.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/scipy_cert/README.md b/scipy_cert/README.md index 435b0f6..a416c02 100644 --- a/scipy_cert/README.md +++ b/scipy_cert/README.md @@ -28,3 +28,15 @@ To rebuild the package and the JupyterLab app: npm run build jupyter lab build ``` + +## Example file. + +The extension renders file with `.json` or `.cert.json` extension, that have the `given` and `event` field. +Example: + +``` +{ + "given": "John Hunter", + "event": "SciPy 2012" +} +``` From eb7c484fd6dca754cb367287d298367a3464694f Mon Sep 17 00:00:00 2001 From: Matthias Bussonnier Date: Mon, 9 Jul 2018 10:46:04 -0500 Subject: [PATCH 047/105] add setup.sh --- setup.sh | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100755 setup.sh diff --git a/setup.sh b/setup.sh new file mode 100755 index 0000000..88af59f --- /dev/null +++ b/setup.sh @@ -0,0 +1,7 @@ +conda env create -f environment.yml + +source activate scipy18jlab + +NODE_OPTIONS=--max_old_space_size=4096 jupyter labextension install @jupyter-widgets/jupyterlab-manager jupyter-threejs ipyvolume bqplot @jupyterlab/geojson-extension @jupyterlab/fasta-extension + +NODE_OPTIONS=--max_old_space_size=4096 jupyter labextension install jupyterlab-toc jupyter-leaflet @jupyter-widgets/jupyterlab-sidecar From f944b71714fff000ec951eb55390eb2c68348c82 Mon Sep 17 00:00:00 2001 From: Jason Grout Date: Mon, 9 Jul 2018 10:51:00 -0700 Subject: [PATCH 048/105] =?UTF-8?q?conda=20activate=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- setup.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/setup.sh b/setup.sh index 88af59f..8abf095 100755 --- a/setup.sh +++ b/setup.sh @@ -1,7 +1,8 @@ conda env create -f environment.yml -source activate scipy18jlab +conda activate scipy18jlab NODE_OPTIONS=--max_old_space_size=4096 jupyter labextension install @jupyter-widgets/jupyterlab-manager jupyter-threejs ipyvolume bqplot @jupyterlab/geojson-extension @jupyterlab/fasta-extension +# Optional extensions NODE_OPTIONS=--max_old_space_size=4096 jupyter labextension install jupyterlab-toc jupyter-leaflet @jupyter-widgets/jupyterlab-sidecar From 922873a95705791c782a16fa78dd7b3f43f132cb Mon Sep 17 00:00:00 2001 From: Jason Grout Date: Mon, 9 Jul 2018 10:51:08 -0700 Subject: [PATCH 049/105] typo --- outline.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/outline.md b/outline.md index 746a1bd..1567329 100644 --- a/outline.md +++ b/outline.md @@ -156,7 +156,7 @@ Write one good thing on the green sticky note, one bad on the red one. 1. Extending JupyterLab – scratching the surface - everything is plugin - installing a plugin, example - - rendere : https://github.com/jupyterlab/jupyter-renderers + - renderer : https://github.com/jupyterlab/jupyter-renderers - Plotly could be a fun one (https://github.com/plotly/jupyterlab-chart-editor) - high-level walkthrough of what happens when a plugin is installed/enabled - requires npm From 9f75536bc5ba085a069f9d31ca055374bd07613b Mon Sep 17 00:00:00 2001 From: Matthias Bussonnier Date: Mon, 9 Jul 2018 14:04:06 -0500 Subject: [PATCH 050/105] change for absolute time --- outline.md | 41 ++++++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/outline.md b/outline.md index 746a1bd..817dc8d 100644 --- a/outline.md +++ b/outline.md @@ -43,7 +43,7 @@ links) and a rough timeline if you want to follow up on the video later. ## Overview of JupyterLab -### 0-0:10 (10 min) - introduction +### 8-8:10 (10 min) - introduction Today this tutorial will be presented to you by Jason Grout, and Matthias Bussonnier, two long standing members of the Jupyter Project. We have a number @@ -69,12 +69,15 @@ exercise try to think first: - There will likely be a binder available, but do not rely on the conference wifi. -### JASON 0:10-0:25 (15min) - Standard slides covering background of notebook and JupyterLab. These are from the jupyterlab-demo repo - - Respond to FAQ: - - Why JupyterLab ? - - Can you get Lab and notebook at the same time: YES - - No difference in file format; Notebooks files are the same -### JASON 0:25-0:45 (20 min): Tour of The User Interface +### JASON 8:10-8:25 (15min) - Standard slides covering background of notebook and JupyterLab. These are from the jupyterlab-demo repo + +- Respond to FAQ: + - Why JupyterLab ? + - Can you get Lab and notebook at the same time: YES + - No difference in file format; Notebooks files are the same + +### JASON 8:25-8:45 (20 min): Tour of The User Interface + - if it does not work, hop on binder if it works - Point to documentation, follow the naming conventions, maybe follow that outline - various existing default panel, and layout, file browser, support of multiple file types, multiple file viewers for single file @@ -83,19 +86,19 @@ exercise try to think first: - Important shortcuts - Can follow the outline in the pydata seattle talk or scipy 2017 lightning talk (see https://github.com/jupyterlab/jupyterlab-demo/tree/master/narrative) -### MATTHIAS 0:45-1:05 (20 min): Exercise 1 (and help installation issues if needed): +### MATTHIAS 8:45-9:05 (20 min): Exercise 1 (and help installation issues if needed): Look into the Exercise 1 folder, and follow the instruction in `Exercise-1.md` -### 1:05-1:15 (10 min): break 10min + sticky notes +### 9:05-9:15 (10 min): break 10min + sticky notes Write one good thing on the green sticky note, one bad on the red one. -### 1:15-1:20 (5 min) : Q.A. 5 min +### 9:15-9:20 (5 min) : Q.A. 5 min ## Workflows around executing code -### MATTHIAS 1:20-1:30 (10 min): Minor Notebook UI interface difference - review from Exercise 1 +### MATTHIAS 9:20-9:30 (10 min): Minor Notebook UI interface difference - review from Exercise 1 1. Arranging tabs through dragging 2. How to author markdown and equations @@ -105,7 +108,7 @@ Write one good thing on the green sticky note, one bad on the red one. 6. creating new view of outputs 7. javascript rendering restrictions -### MATTHIAS 1:30-1:45 (15 min): Attaching kernels to multiple documents +### MATTHIAS 9:30-9:45 (15 min): Attaching kernels to multiple documents 1. Executing code in a markdown file using an attached console. 2. Developing libraries with notebook and Python files attached to same kernel @@ -114,7 +117,7 @@ Write one good thing on the green sticky note, one bad on the red one. 5. Attaching a code console to the same kernel as a notebook. -### MATTHIAS 1:45-2:10 (15 min) Exercise 2 +### MATTHIAS 9:45-10:10 (15 min) Exercise 2 - binding multiple documents to the same kernel - New Console for Notebook @@ -122,26 +125,26 @@ Write one good thing on the green sticky note, one bad on the red one. - Python code file + console workflow - Open a notebook in classic notebook, modify, save and reopen in Lab. -### 2:10-2:25 (15min) break 10 min + sticky notes + Q.A 5min +### 10:10-10:25 (15min) break 10 min + sticky notes + Q.A 5min ## Customizing JupyterLab -### MATTHIAS 2:25-2:35 (5min) +### MATTHIAS 10:25-10:35 (5min) 1. Changing editor settings 2. Changing theme 3. Json config system overview 4. Changing keyboard shortcuts -### Exercise 3 2:35-2:50 (15 min) +### Exercise 3 10:35-10:50 (15 min) 1. change a keyboard shortcut 1. Assign existing shortcut to new action. 2. Assign new Keyboard shortcut to an existing action. 2. add a keyboard shortcut (restart and run all) 3. change an editor setting -## 2:50-3:15 (25min) - Workflows around Widgets (Jason) +## 10:50-11:15 (25min) - Workflows around Widgets (Jason) 1. Introduction to widgets and libraries like bqplot, ipyvolume, pythreejs, etc. 2. Mirroring widget output @@ -151,7 +154,7 @@ Write one good thing on the green sticky note, one bad on the red one. 3. Simple slider + Graph 4. bqplot graph controlling another graph -## Going further (3:15-3:50, 35 min) : +## Going further (11:15-11:50, 35 min) : 1. Extending JupyterLab – scratching the surface - everything is plugin @@ -173,4 +176,4 @@ Write one good thing on the green sticky note, one bad on the red one. - Point to cookie Cutter. ## Mention JupyterLab in a multiuser environment: point to jupyterlab docs ## Mention sprints! -## 3:50-4:00 QA, Question +## 11:50-12:00 QA, Question From 08c64599c5cc92eadc13486f087b36858c21e28d Mon Sep 17 00:00:00 2001 From: Jason Grout Date: Mon, 9 Jul 2018 15:12:33 -0700 Subject: [PATCH 051/105] Ex 5 --- Exercise-3/Exercise-3.md | 2 +- Exercise-5/Exercise-5.md | 12 ++++++++++++ outline.md | 2 +- 3 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 Exercise-5/Exercise-5.md diff --git a/Exercise-3/Exercise-3.md b/Exercise-3/Exercise-3.md index dc088af..b85d6ea 100644 --- a/Exercise-3/Exercise-3.md +++ b/Exercise-3/Exercise-3.md @@ -1,4 +1,4 @@ -# Exercises 1 +# Exercises 3 Remove all the sticky notes from your screen :-) and attempt the following. These are _guidelines_, feel free to err on the side of workflow and diff --git a/Exercise-5/Exercise-5.md b/Exercise-5/Exercise-5.md new file mode 100644 index 0000000..3780dd3 --- /dev/null +++ b/Exercise-5/Exercise-5.md @@ -0,0 +1,12 @@ +# Exercise 5: Extensions + +Remove all the sticky notes from your screen :-) and attempt the following. +These are _guidelines_, feel free to ere on the side of workflow and +options that suits _you_ if you find them best. + +Keep in mind, if something is not intuitive, or not in the place you expected it, write +it down (for example on the red sticky note), and give it to us at the break. + +## Creating a new blank extension + +We will be using the cookie-cutter project to generate a basic extension. \ No newline at end of file diff --git a/outline.md b/outline.md index 1567329..17d51da 100644 --- a/outline.md +++ b/outline.md @@ -166,7 +166,7 @@ Write one good thing on the green sticky note, one bad on the red one. - getting started bootstrapping custom plugin - Walkthrough of theme plugin - Walkthrough of simple mimetype rendering plugin - - Exercise 4: + - Exercise 5: - Modifying and installing theme plugin - and/or - Modifying and installing mimetype plugin. Certificate of accomplishment plugin? From 4ca6779b3c341d4b665038d963f6c060979916a6 Mon Sep 17 00:00:00 2001 From: Jason Grout Date: Tue, 10 Jul 2018 01:41:22 -0500 Subject: [PATCH 052/105] Add exercise 5, building your own extension. --- .gitignore | 5 + Exercise-5/Exercise-5.md | 190 ++++++++++++++++++++++++++++++++- Exercise-5/scipy2018.cert.json | 1 + 3 files changed, 195 insertions(+), 1 deletion(-) create mode 100644 .gitignore create mode 100644 Exercise-5/scipy2018.cert.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..39a3ac9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +node_modules/ +lib/ +.ipynb_checkpoints/ +__pycache__/ +my_certificate_viewer/ diff --git a/Exercise-5/Exercise-5.md b/Exercise-5/Exercise-5.md index 3780dd3..770cd2b 100644 --- a/Exercise-5/Exercise-5.md +++ b/Exercise-5/Exercise-5.md @@ -9,4 +9,192 @@ it down (for example on the red sticky note), and give it to us at the break. ## Creating a new blank extension -We will be using the cookie-cutter project to generate a basic extension. \ No newline at end of file +We will be using the cookie-cutter project to generate a basic extension. This will generate a basic extension that reads data from a `.cert.json` JSON file and displays it nicely in JupyterLab. + +Open a terminal and run: + +``` +cookiecutter https://github.com/jupyterlab/mimerender-cookiecutter-ts +``` + +At the prompts, enter the following: +``` +author_name []: +author_email []: +extension_name [myextension]: my_certificate_viewer +viewer_name [My Viewer]: Certificate Viewer +mimetype [application/vnd.my_organization.my_type]: application/vnd.scipy2018.certificate +mimetype_name [my_type]: certificate +file_extension [.my_type]: .cert.json +Select data_format: +1 - string +2 - json +Choose from 1, 2 [1]: 2 +``` + +## Install the extension + +In the terminal, install your new extension + +``` +conda activate scipy18jlab +jupyter labextension install ./my_certificate_viewer +``` + +You can check what extensions are installed with: + +``` +jupyter labextension list +``` + +Refresh your browser to pick up the new extension javascript. + +Test it out by opening the `scipy2018.cert.json` file. Right-clicking on the file should show your viewer in the 'Open with' menu, and double-clicking should open and display the file in a blank tab. + +Right-click on the `scipy2018.cert.json` file and open it in the editor to change the name to your name and the event to "Scipy 2018". Notice that the extension-rendered tab updates in real-time. + +## Customize the display + +In order to develop our extension and have our changes appear automatically, we'll link the extension rather than just installing it. Run the following in your terminal that has the scipy18jlab environment active: + +``` +jupyter labextension link ./my_certificate_viewer +``` + +Now customize the display. Open the `my_certificate_viewer/src/index.ts` TypeScript file. Edit the `renderModel` function to replace the line that sets the `this.node.textContent` line with a bit fancier HTML: + +```javascript + this.node.innerHTML = ` +
+
+
Certificate
+
${data.given}
+
For mastery of JupyterLab
+
${data.event}
+
+
+
+
+
+` +``` + +Now rebuild JupyterLab to incorporate these changes by running the following in your terminal: + +``` +jupyter lab build +``` + +Open the `scipy2018.cert.json` file again to see that things look a bit better. + +## Style the display + +Finally, let's style this certificate to look really nice. Add the following to +the `my_certificate_viewer/style/index.css` file: + +```css +.mimerenderer-certificate .cert{ + background-color: #07618B; + width: 350px;height: 250px; + margin-left: 35%;margin-top: 10%; + position: relative; + border-radius: 20px 20px 20px 20px; + -webkit-box-shadow: 0px 5px 10px 0px; + -moz-box-shadow: 0px 5px 10px 0px; + box-shadow: 0px 5px 10px 0px; +} + +.mimerenderer-certificate .paper{ + position: absolute; + width: 300px; + height: 200px; + background: #E0E0E0; + left: 25px; + top: 25px; + border-radius: 5px 5px 5px 5px; +} + +.mimerenderer-certificate .cert .medal { + background: #C9992E; + width: 20px; + height: 20px; + top: 30px; + left: 30px; + position: absolute; + padding: 10px 10px 10px 10px; + font-size: 2em; + border-radius: 50%; + z-index:30; +} + +.mimerenderer-certificate .ribbon1 { + width: 15px; + height: 40px; + background-color: #9bdbf6; + position: absolute; + top: 50px; + left: 35px; + z-index: 1; + -webkit-transform: rotate(30deg); + border-right: 1px solid white; + } + +.mimerenderer-certificate .ribbon2 { + width: 15px; + height: 40px; + background-color: #9bdbf6; + position: absolute; + top: 50px; + left: 50px; + z-index: 1; + -webkit-transform: rotate(150deg); + border-right: 1px solid white; + } + +.mimerenderer-certificate .title { + background:#E0E0E0; + font-weight: bold; + text-align: center; + margin-top: 20px; + height: 30px; + z-index:999; +} + +.mimerenderer-certificate .textX { + z-index: 200; + text-align: center; + padding: 0px; + text-align: center; + margin-top: 20px; + } + +.mimerenderer-certificate .text2 { + background-color: #E0E0E0; + z-index: 200; + padding: 0px 200px; + text-align: center; + margin-left: 50px; + } + +.mimerenderer-certificate .text3 { + background-color: #B3B3B3; + z-index: 200; + padding: 0px 200px; + text-align: center; + margin-left: 50px; + } + ``` + + Rebuild JupyterLab and open the certificate again to see these changes. + +## Install plugin + +Congratulations! You can now install the extension again to wrap things up. + + ``` +jupyter labextension install ./my_certificate_viewer +``` + +## More information + +For more information about writing extensions, especially more substantial ones, see the [XKCD extension tutorial](http://jupyterlab.readthedocs.io/en/stable/developer/xkcd_extension_tutorial.html) in the JupyterLab documentation.jupyt \ No newline at end of file diff --git a/Exercise-5/scipy2018.cert.json b/Exercise-5/scipy2018.cert.json new file mode 100644 index 0000000..d424716 --- /dev/null +++ b/Exercise-5/scipy2018.cert.json @@ -0,0 +1 @@ +{"given": "My Name", "event": "Event"} \ No newline at end of file From bc85b7756976e168045f2afdf77c7511d27fd428 Mon Sep 17 00:00:00 2001 From: Jason Grout Date: Tue, 10 Jul 2018 03:09:18 -0500 Subject: [PATCH 053/105] ipyleaflet and sidecar installation in script --- setup.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/setup.sh b/setup.sh index 8abf095..338665c 100755 --- a/setup.sh +++ b/setup.sh @@ -5,4 +5,7 @@ conda activate scipy18jlab NODE_OPTIONS=--max_old_space_size=4096 jupyter labextension install @jupyter-widgets/jupyterlab-manager jupyter-threejs ipyvolume bqplot @jupyterlab/geojson-extension @jupyterlab/fasta-extension # Optional extensions + +conda install -c conda-forge --override-channels --yes ipyleaflet +pip install sidecar NODE_OPTIONS=--max_old_space_size=4096 jupyter labextension install jupyterlab-toc jupyter-leaflet @jupyter-widgets/jupyterlab-sidecar From 38c55b4bd2536bd3f8618f13b4ed58ea19e8db1f Mon Sep 17 00:00:00 2001 From: Jason Grout Date: Tue, 10 Jul 2018 03:10:19 -0500 Subject: [PATCH 054/105] Update outline. --- outline.md | 43 ++++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/outline.md b/outline.md index 5adf700..7e418e8 100644 --- a/outline.md +++ b/outline.md @@ -69,7 +69,9 @@ exercise try to think first: - There will likely be a binder available, but do not rely on the conference wifi. -### JASON 8:10-8:25 (15min) - Standard slides covering background of notebook and JupyterLab. These are from the jupyterlab-demo repo +### JASON 8:10-8:25 (15min) + + - Standard slides covering background of notebook and JupyterLab. These are from the jupyterlab-demo repo - Respond to FAQ: - Why JupyterLab ? @@ -154,26 +156,25 @@ Write one good thing on the green sticky note, one bad on the red one. 3. Simple slider + Graph 4. bqplot graph controlling another graph -## Going further (11:15-11:50, 35 min) : - - 1. Extending JupyterLab – scratching the surface - - everything is plugin - - installing a plugin, example - - renderer : https://github.com/jupyterlab/jupyter-renderers - - Plotly could be a fun one (https://github.com/plotly/jupyterlab-chart-editor) - - high-level walkthrough of what happens when a plugin is installed/enabled - - requires npm - - recompiling js - - --core-mode - - enabling/disabling extensions - - getting started bootstrapping custom plugin - - Walkthrough of theme plugin - - Walkthrough of simple mimetype rendering plugin - - Exercise 5: - - Modifying and installing theme plugin - - and/or - - Modifying and installing mimetype plugin. Certificate of accomplishment plugin? - - Point to cookie Cutter. +## Plugins + +## Extensions (11:15-11:50, 35 min) : + +1. Everything is an extension - show the package.json +2. Installing/listing/enabling/disabling plugins. `jupyter lab build` +3. `--core-mode` +4. Exercise 5 - writing your own extension + +## What's new + +JupyterLab 0.33 prerelease out: +- Workspaces +- Extension manager +- Console show outputs +- Open in new browser tab +- Many, many upgrades + + ## Mention JupyterLab in a multiuser environment: point to jupyterlab docs ## Mention sprints! ## 11:50-12:00 QA, Question From 8512ce0e4df90ce70f4906e27c6dffaf6166eade Mon Sep 17 00:00:00 2001 From: Jason Grout Date: Tue, 10 Jul 2018 03:10:38 -0500 Subject: [PATCH 055/105] Move csv/geojson viewing to later. --- Exercise-2/Exercise-2.md | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/Exercise-2/Exercise-2.md b/Exercise-2/Exercise-2.md index 917d821..3daaf16 100644 --- a/Exercise-2/Exercise-2.md +++ b/Exercise-2/Exercise-2.md @@ -19,11 +19,5 @@ it down (for example on the red sticky note), and give it to us at the break. - TODO :arranging things side-by-side. Come up with specific layouts they have to get - Try to find information about "single-document mode" - - - -- TODO : CSV viewing -- TODO : Json/GeoJson. - - - Look in the help menu how to open same notebook in classic notebook + \ No newline at end of file From 3066be360e32d799b149d2dc11224d1854ec38be Mon Sep 17 00:00:00 2001 From: Jason Grout Date: Tue, 10 Jul 2018 03:36:38 -0500 Subject: [PATCH 056/105] Add notebook example to ex 5 --- Exercise-5/Certificate.ipynb | 62 ++++++++++++++++++++++++++++++++++++ Exercise-5/Exercise-5.md | 7 +++- 2 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 Exercise-5/Certificate.ipynb diff --git a/Exercise-5/Certificate.ipynb b/Exercise-5/Certificate.ipynb new file mode 100644 index 0000000..bc4fbf6 --- /dev/null +++ b/Exercise-5/Certificate.ipynb @@ -0,0 +1,62 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "class Certificate:\n", + " def __init__(self, data):\n", + " self.data = data\n", + " def _repr_mimebundle_(self, include, exclude, **kwargs):\n", + " data = {\n", + " 'application/vnd.jupyterlab.certificate': self.data,\n", + " 'text/plain': 'Certificate for JupyterLab given to %s at %s'%(self.data['given'], self.data['event'])\n", + " }\n", + " if include:\n", + " data = {k:v for (k,v) in data.items() if k in include}\n", + " if exclude:\n", + " data = {k:v for (k,v) in data.items() if k not in exclude}\n", + " return data\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "Certificate({'given': 'My Name', 'event': 'My Event'})" + ] + }, + { + "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.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Exercise-5/Exercise-5.md b/Exercise-5/Exercise-5.md index 770cd2b..0e72d31 100644 --- a/Exercise-5/Exercise-5.md +++ b/Exercise-5/Exercise-5.md @@ -23,7 +23,7 @@ author_name []: author_email []: extension_name [myextension]: my_certificate_viewer viewer_name [My Viewer]: Certificate Viewer -mimetype [application/vnd.my_organization.my_type]: application/vnd.scipy2018.certificate +mimetype [application/vnd.my_organization.my_type]: application/vnd.jupyterlab.certificate mimetype_name [my_type]: certificate file_extension [.my_type]: .cert.json Select data_format: @@ -195,6 +195,11 @@ Congratulations! You can now install the extension again to wrap things up. jupyter labextension install ./my_certificate_viewer ``` +## Notebook + +A mimerender extension is used to render both files and rich outputs in +notebooks. Open the `Certificate.ipynb` notebook and run it. + ## More information For more information about writing extensions, especially more substantial ones, see the [XKCD extension tutorial](http://jupyterlab.readthedocs.io/en/stable/developer/xkcd_extension_tutorial.html) in the JupyterLab documentation.jupyt \ No newline at end of file From 7d091fa07f3b6e64907d25b785611256ee9734f9 Mon Sep 17 00:00:00 2001 From: Jason Grout Date: Tue, 10 Jul 2018 03:37:05 -0500 Subject: [PATCH 057/105] Tweak ex 2 instructions. --- Exercise-2/Exercise-2.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/Exercise-2/Exercise-2.md b/Exercise-2/Exercise-2.md index 3daaf16..227922f 100644 --- a/Exercise-2/Exercise-2.md +++ b/Exercise-2/Exercise-2.md @@ -9,15 +9,13 @@ it down (for example on the red sticky note), and give it to us at the break. ## Files + consoles - binding multiple documents to the same kernel - - New Console for Notebook - - R-Markdown workflow. - live editing demo + - Notebook + console workflow + - Markdown + console workflow - Python code file + console workflow - Open in classic notebook, modify, save and reopen in Lab. - Try creating new document/notebook/terminal/console - Try arranging different layout, and refresh the page. Get a feeling of which layout element persist across refresh - - TODO :arranging things side-by-side. Come up with specific layouts they have to get - Try to find information about "single-document mode" - Look in the help menu how to open same notebook in classic notebook - \ No newline at end of file From e1d42aaf40bdc8b46a490c0f1c51aea9a479f4d5 Mon Sep 17 00:00:00 2001 From: Jason Grout Date: Tue, 10 Jul 2018 03:37:17 -0500 Subject: [PATCH 058/105] Fix typos in ex2 report --- Exercise-2/Report.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Exercise-2/Report.md b/Exercise-2/Report.md index 03b827d..178ad79 100644 --- a/Exercise-2/Report.md +++ b/Exercise-2/Report.md @@ -1,10 +1,10 @@ ## Attached markdown document to a console. -Rightclick somewhere on this document and click `"Create console for editor"`. +Right-click somewhere on this document and click `"Create console for editor"`. You will be prompted to select a kernel (new or existing). -Now that this is done, the current or _fenced block_, _selection_ or _line_ will be sent to the console and executed. +Now that this is done, the current or _fenced block_, _selection_ or _line_ will be sent to the console and executed. # Iris dataset From 8d83478c6587f82ffbea492bc2e97d73ce89ec5f Mon Sep 17 00:00:00 2001 From: Jason Grout Date: Tue, 10 Jul 2018 03:37:28 -0500 Subject: [PATCH 059/105] Tweak outline. --- outline.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/outline.md b/outline.md index 7e418e8..67aa3c0 100644 --- a/outline.md +++ b/outline.md @@ -70,8 +70,7 @@ exercise try to think first: wifi. ### JASON 8:10-8:25 (15min) - - - Standard slides covering background of notebook and JupyterLab. These are from the jupyterlab-demo repo + - Introduction to JupyterLab (slides) - Respond to FAQ: - Why JupyterLab ? @@ -174,6 +173,11 @@ JupyterLab 0.33 prerelease out: - Open in new browser tab - Many, many upgrades +Extensions in the works: +- Keyboard shortcut editor +- Status bar +- Real-time collaboration + ## Mention JupyterLab in a multiuser environment: point to jupyterlab docs ## Mention sprints! From d8f00a2eabc4552d9cad25ee54aa0dfafcd4d82b Mon Sep 17 00:00:00 2001 From: Jason Grout Date: Tue, 10 Jul 2018 05:25:22 -0500 Subject: [PATCH 060/105] ex5 -> ex4 --- {Exercise-5 => Exercise-4}/Certificate.ipynb | 0 Exercise-5/Exercise-5.md => Exercise-4/Exercise-4.md | 0 {Exercise-5 => Exercise-4}/scipy2018.cert.json | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename {Exercise-5 => Exercise-4}/Certificate.ipynb (100%) rename Exercise-5/Exercise-5.md => Exercise-4/Exercise-4.md (100%) rename {Exercise-5 => Exercise-4}/scipy2018.cert.json (100%) diff --git a/Exercise-5/Certificate.ipynb b/Exercise-4/Certificate.ipynb similarity index 100% rename from Exercise-5/Certificate.ipynb rename to Exercise-4/Certificate.ipynb diff --git a/Exercise-5/Exercise-5.md b/Exercise-4/Exercise-4.md similarity index 100% rename from Exercise-5/Exercise-5.md rename to Exercise-4/Exercise-4.md diff --git a/Exercise-5/scipy2018.cert.json b/Exercise-4/scipy2018.cert.json similarity index 100% rename from Exercise-5/scipy2018.cert.json rename to Exercise-4/scipy2018.cert.json From 0dab038b6dfb936e505d6f4c9608acb0790347df Mon Sep 17 00:00:00 2001 From: Jason Grout Date: Tue, 10 Jul 2018 05:25:31 -0500 Subject: [PATCH 061/105] Reword ex 2 --- Exercise-2/Exercise-2.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/Exercise-2/Exercise-2.md b/Exercise-2/Exercise-2.md index 227922f..13bd29c 100644 --- a/Exercise-2/Exercise-2.md +++ b/Exercise-2/Exercise-2.md @@ -7,15 +7,17 @@ options that suits _you_ if you find them best. Keep in mind, if something is not intuitive, or not in the place you expected it, write it down (for example on the red sticky note), and give it to us at the break. -## Files + consoles -- binding multiple documents to the same kernel +## Running things + + +- Binding multiple documents to the same kernel - Notebook + console workflow - Markdown + console workflow - Python code file + console workflow - - Open in classic notebook, modify, save and reopen in Lab. + - Open notebook in classic notebook, modify, save and reopen in Lab (hint: look in Help menu) - Try creating new document/notebook/terminal/console + - Open two notebooks with the same kernel + - Go to the Running tab to shut down all kernels - Try arranging different layout, and refresh the page. Get a feeling of which layout element persist across refresh - - Try to find information about "single-document mode" - -- Look in the help menu how to open same notebook in classic notebook +- Try to find information about "single-document mode" From 0b09003eac9f8b8b83bc940f6114c787c2e6d7a8 Mon Sep 17 00:00:00 2001 From: Jason Grout Date: Tue, 10 Jul 2018 05:26:04 -0500 Subject: [PATCH 062/105] Simplify outline --- outline.md | 34 ++++++++-------------------------- 1 file changed, 8 insertions(+), 26 deletions(-) diff --git a/outline.md b/outline.md index 67aa3c0..c5a9d8a 100644 --- a/outline.md +++ b/outline.md @@ -78,14 +78,7 @@ exercise try to think first: - No difference in file format; Notebooks files are the same ### JASON 8:25-8:45 (20 min): Tour of The User Interface - -- if it does not work, hop on binder if it works - - Point to documentation, follow the naming conventions, maybe follow that outline - - various existing default panel, and layout, file browser, support of multiple file types, multiple file viewers for single file - - dragging ui - - Command palette - - Important shortcuts - - Can follow the outline in the pydata seattle talk or scipy 2017 lightning talk (see https://github.com/jupyterlab/jupyterlab-demo/tree/master/narrative) + - Following outline from https://github.com/jupyterlab/jupyterlab-demo/tree/master/narrative or https://gist.github.com/jasongrout/3039b5909734b1abf4544a8df68a8ace ### MATTHIAS 8:45-9:05 (20 min): Exercise 1 (and help installation issues if needed): @@ -107,7 +100,7 @@ Write one good thing on the green sticky note, one bad on the red one. 4. drag cells, inside notebook and between views of files. 5. Enable scrolling on outputs 6. creating new view of outputs - 7. javascript rendering restrictions + 7. javascript rendering restrictions (removed in the next beta) ### MATTHIAS 9:30-9:45 (15 min): Attaching kernels to multiple documents @@ -131,7 +124,7 @@ Write one good thing on the green sticky note, one bad on the red one. ## Customizing JupyterLab -### MATTHIAS 10:25-10:35 (5min) +### MATTHIAS 10:25-10:35 (10min) 1. Changing editor settings 2. Changing theme @@ -143,34 +136,23 @@ Write one good thing on the green sticky note, one bad on the red one. 1. Assign existing shortcut to new action. 2. Assign new Keyboard shortcut to an existing action. 2. add a keyboard shortcut (restart and run all) - 3. change an editor setting - -## 10:50-11:15 (25min) - Workflows around Widgets (Jason) - - 1. Introduction to widgets and libraries like bqplot, ipyvolume, pythreejs, etc. - 2. Mirroring widget output - 3. Exercise 4: - 1. Making sure widgets works: - 2. Interact - 3. Simple slider + Graph - 4. bqplot graph controlling another graph - -## Plugins + 3. change an editor setting -## Extensions (11:15-11:50, 35 min) : +## Extensions (10:50-11:30, 35 min) 1. Everything is an extension - show the package.json 2. Installing/listing/enabling/disabling plugins. `jupyter lab build` 3. `--core-mode` 4. Exercise 5 - writing your own extension -## What's new +## What's new (11:30-11:40) JupyterLab 0.33 prerelease out: - Workspaces - Extension manager - Console show outputs - Open in new browser tab +- Longer tabs - Many, many upgrades Extensions in the works: @@ -181,4 +163,4 @@ Extensions in the works: ## Mention JupyterLab in a multiuser environment: point to jupyterlab docs ## Mention sprints! -## 11:50-12:00 QA, Question +## 11:40-12:00 QA, Question From 7adc48786e2c383fe6d08b62cc07ee383168de81 Mon Sep 17 00:00:00 2001 From: Jason Grout Date: Tue, 10 Jul 2018 05:28:15 -0500 Subject: [PATCH 063/105] Add ipympl and drawio --- readme.md | 4 ++-- setup.sh | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/readme.md b/readme.md index 719fdee..21c1873 100644 --- a/readme.md +++ b/readme.md @@ -99,13 +99,13 @@ conda activate scipy18jlab Then install the python packages: ``` -conda install ipyleaflet +conda install -c conda-forge --override-channels --yes ipyleaflet ipympl pip install sidecar ``` and install the JupyterLab extensions: ``` -jupyter labextension install jupyterlab-toc jupyter-leaflet @jupyter-widgets/jupyterlab-sidecar +jupyter labextension install jupyterlab-toc jupyter-leaflet @jupyter-widgets/jupyterlab-sidecar jupyterlab-drawio ``` # Troubleshooting diff --git a/setup.sh b/setup.sh index 338665c..8c68bd4 100755 --- a/setup.sh +++ b/setup.sh @@ -6,6 +6,6 @@ NODE_OPTIONS=--max_old_space_size=4096 jupyter labextension install @jupyter-wid # Optional extensions -conda install -c conda-forge --override-channels --yes ipyleaflet +conda install -c conda-forge --override-channels --yes ipyleaflet ipympl pip install sidecar -NODE_OPTIONS=--max_old_space_size=4096 jupyter labextension install jupyterlab-toc jupyter-leaflet @jupyter-widgets/jupyterlab-sidecar +NODE_OPTIONS=--max_old_space_size=4096 jupyter labextension install jupyterlab-toc jupyter-leaflet @jupyter-widgets/jupyterlab-sidecar jupyterlab-drawio From 155fe2e44335faba487d89ec9c191b194ed36936 Mon Sep 17 00:00:00 2001 From: Jason Grout Date: Tue, 10 Jul 2018 05:29:52 -0500 Subject: [PATCH 064/105] typo --- Exercise-4/Exercise-4.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Exercise-4/Exercise-4.md b/Exercise-4/Exercise-4.md index 0e72d31..6aa4826 100644 --- a/Exercise-4/Exercise-4.md +++ b/Exercise-4/Exercise-4.md @@ -202,4 +202,4 @@ notebooks. Open the `Certificate.ipynb` notebook and run it. ## More information -For more information about writing extensions, especially more substantial ones, see the [XKCD extension tutorial](http://jupyterlab.readthedocs.io/en/stable/developer/xkcd_extension_tutorial.html) in the JupyterLab documentation.jupyt \ No newline at end of file +For more information about writing extensions, especially more substantial ones, see the [XKCD extension tutorial](http://jupyterlab.readthedocs.io/en/stable/developer/xkcd_extension_tutorial.html) in the JupyterLab documentation. \ No newline at end of file From fa69ba83b41b9f701d7f16e805f0a6ecd6ce5d15 Mon Sep 17 00:00:00 2001 From: Jason Grout Date: Tue, 10 Jul 2018 05:32:03 -0500 Subject: [PATCH 065/105] Fix iris line. --- data/iris.csv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/iris.csv b/data/iris.csv index 43ff582..6464198 100644 --- a/data/iris.csv +++ b/data/iris.csv @@ -1,5 +1,5 @@ sepal_length,sepal_width,petal_length,petal_width,species -5.1,3.5,1.4,0.2,se +5.1,3.5,1.4,0.2,setosa 4.9,3,1.4,0.2,setosa 4.7,3.2,1.3,0.2,setosa 4.6,3.1,1.5,0.2,setosa From 845ab4e4e464721e385c6a0d20c2679e1f0a69fc Mon Sep 17 00:00:00 2001 From: Matthias Bussonnier Date: Tue, 17 Jul 2018 09:24:19 -0700 Subject: [PATCH 066/105] remove ipyvolume that was not found on windows --- environment.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/environment.yml b/environment.yml index 5459c6d..bac679e 100644 --- a/environment.yml +++ b/environment.yml @@ -10,5 +10,4 @@ dependencies: - nodejs=9.11 - jupyterlab - bqplot - - ipyvolume - pythreejs From 78253c08027486b30604913780d273fcd61c981e Mon Sep 17 00:00:00 2001 From: Matthias Bussonnier Date: Mon, 22 Apr 2019 08:09:04 -0700 Subject: [PATCH 067/105] update outline --- outline.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/outline.md b/outline.md index c5a9d8a..c054353 100644 --- a/outline.md +++ b/outline.md @@ -69,7 +69,7 @@ exercise try to think first: - There will likely be a binder available, but do not rely on the conference wifi. -### JASON 8:10-8:25 (15min) +### 9:10 (+15min) - Introduction to JupyterLab (slides) - Respond to FAQ: @@ -77,22 +77,22 @@ exercise try to think first: - Can you get Lab and notebook at the same time: YES - No difference in file format; Notebooks files are the same -### JASON 8:25-8:45 (20 min): Tour of The User Interface +### 9:25-9:45 (20 min): Tour of The User Interface - Following outline from https://github.com/jupyterlab/jupyterlab-demo/tree/master/narrative or https://gist.github.com/jasongrout/3039b5909734b1abf4544a8df68a8ace -### MATTHIAS 8:45-9:05 (20 min): Exercise 1 (and help installation issues if needed): +### 9:45-10:05 (20 min): Exercise 1 (and help installation issues if needed): Look into the Exercise 1 folder, and follow the instruction in `Exercise-1.md` -### 9:05-9:15 (10 min): break 10min + sticky notes +### 10:05-10:15 (10 min): break 10min + sticky notes Write one good thing on the green sticky note, one bad on the red one. -### 9:15-9:20 (5 min) : Q.A. 5 min +### 10:15-10:20 (5 min) : Q.A. 5 min ## Workflows around executing code -### MATTHIAS 9:20-9:30 (10 min): Minor Notebook UI interface difference - review from Exercise 1 +### 10:20-10:30 (10 min): Minor Notebook UI interface difference - review from Exercise 1 1. Arranging tabs through dragging 2. How to author markdown and equations @@ -102,7 +102,7 @@ Write one good thing on the green sticky note, one bad on the red one. 6. creating new view of outputs 7. javascript rendering restrictions (removed in the next beta) -### MATTHIAS 9:30-9:45 (15 min): Attaching kernels to multiple documents +### 10:30-10:45 (15 min): Attaching kernels to multiple documents 1. Executing code in a markdown file using an attached console. 2. Developing libraries with notebook and Python files attached to same kernel @@ -111,7 +111,7 @@ Write one good thing on the green sticky note, one bad on the red one. 5. Attaching a code console to the same kernel as a notebook. -### MATTHIAS 9:45-10:10 (15 min) Exercise 2 +### 10:45-11:10 (15 min) Exercise 2 - binding multiple documents to the same kernel - New Console for Notebook @@ -119,26 +119,26 @@ Write one good thing on the green sticky note, one bad on the red one. - Python code file + console workflow - Open a notebook in classic notebook, modify, save and reopen in Lab. -### 10:10-10:25 (15min) break 10 min + sticky notes + Q.A 5min +### 11:10-11:25 (15min) break 10 min + sticky notes + Q.A 5min ## Customizing JupyterLab -### MATTHIAS 10:25-10:35 (10min) +### 11:25-11:35 (10min) 1. Changing editor settings 2. Changing theme 3. Json config system overview 4. Changing keyboard shortcuts -### Exercise 3 10:35-10:50 (15 min) +### Exercise 3 11:35-11:50 (15 min) 1. change a keyboard shortcut 1. Assign existing shortcut to new action. 2. Assign new Keyboard shortcut to an existing action. 2. add a keyboard shortcut (restart and run all) 3. change an editor setting -## Extensions (10:50-11:30, 35 min) +## Extensions (11:50-11:30, 35 min) 1. Everything is an extension - show the package.json 2. Installing/listing/enabling/disabling plugins. `jupyter lab build` From 1f92082f1c278219130e565e90e7acf94f1cb17b Mon Sep 17 00:00:00 2001 From: Matthias Bussonnier Date: Mon, 22 Apr 2019 09:31:42 -0700 Subject: [PATCH 068/105] a few more updates --- environment.yml | 6 +++--- readme.md | 18 +++++++++--------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/environment.yml b/environment.yml index bac679e..afd1eb6 100644 --- a/environment.yml +++ b/environment.yml @@ -2,11 +2,11 @@ name: scipy18jlab channels: - conda-forge dependencies: - - python=3.6 + - python=3.7 - pip - cookiecutter=1.6 - - notebook=5.5 - - pandas=0.23 + - notebook=5.7 + - pandas=0.24 - nodejs=9.11 - jupyterlab - bqplot diff --git a/readme.md b/readme.md index 21c1873..1b918e7 100644 --- a/readme.md +++ b/readme.md @@ -29,12 +29,12 @@ you are using a different python distribution. 2. To get the tutorial materials, clone this repository. **Please plan to update the materials shortly before the tutorial.** ``` - git clone https://github.com/jupyterlab/scipy2018-jupyterlab-tutorial + git clone https://github.com/ipython/ipython-in-depth ``` To update the materials: ``` - cd scipy2018-jupyterlab-tutorial + cd ipython-in-depth git pull ``` @@ -45,15 +45,15 @@ you are using a different python distribution. Create a conda environment: ``` - conda create -n scipy18jlab -c conda-forge --override-channels --yes python=3.6 pip cookiecutter=1.6 notebook=5.5 pandas=0.23 nodejs=9.11 jupyterlab bqplot ipyvolume pythreejs + conda create -n pycon2019 -c conda-forge --override-channels --yes python=3.7 pip cookiecutter=1.6 'notebook=5.7' pandas=0.24 nodejs=9.11 jupyterlab bqplot ipyvolume pythreejs ``` - (You could instead create the environment from the supplied environment file with `conda env create -f scipy2018-jupyterlab-tutorial/environment.yml`) + (You could instead create the environment from the supplied environment file with `conda env create -f pycon2019-jupyterlab-tutorial/environment.yml`) Activate the conda environment: ``` - conda activate scipy18jlab + conda activate pycon2019 ``` Install extra JupyterLab extensions: @@ -64,7 +64,7 @@ you are using a different python distribution. If you open multiple terminal windows make sure to activate the environment in each of them. Your terminal prompt should be preceded by the name of the current environment, for example: ``` -(scipy18jlab) ~/scipy2018-jupyterlab-tutorial $ +(pycon2019) ~/ipython-in-depth $ ``` @@ -81,10 +81,10 @@ $ jupyter lab You can delete the environment by using the following in a terminal prompt. ``` -conda env remove --name scipy18jlab --yes +conda env remove --name pycon2019 --yes ``` -This will **not** delete any data, but only the conda environement named `scipy18jlab` . +This will **not** delete any data, but only the conda environement named `pycon2019` . # Optional packages @@ -94,7 +94,7 @@ optional, and not required for the exercises in this tutorial. To install these, first activate the tutorial environment: ``` -conda activate scipy18jlab +conda activate pycon2019 ``` Then install the python packages: From 8820ed217e8bcb93777b1cd48779f04d12b998f6 Mon Sep 17 00:00:00 2001 From: Matthias Bussonnier Date: Mon, 22 Apr 2019 15:20:13 -0700 Subject: [PATCH 069/105] update --- ...ebook.ipynb => Exercise-1-solutions.ipynb} | 93 ++-- Exercise-1/Exercise1.md | 4 +- Exercise-2/Exercise-2.md | 10 +- Exercise-2/Notebook A.ipynb | 6 +- Exercise-2/Notebook B.ipynb | 8 +- Exercise-2/Report.md | 11 +- Exercise-2/lib.py | 11 +- Exercise-3/Autoawait in IPython.ipynb | 507 ++++++++++++++++++ Exercise-3/Exercise-3.md | 20 - Exercise-4/Exercise-4.md | 205 +------ {Exercise-3 => Exercise-4}/example.json | 0 {Exercise-4 => Exercise-5}/Certificate.ipynb | 0 Exercise-5/Exercise-5.md | 205 +++++++ .../scipy2018.cert.json | 0 environment.yml | 4 +- outline.md | 25 +- readme.md | 4 +- 17 files changed, 817 insertions(+), 296 deletions(-) rename Exercise-1/{Exercise-1-notebook.ipynb => Exercise-1-solutions.ipynb} (64%) create mode 100644 Exercise-3/Autoawait in IPython.ipynb delete mode 100644 Exercise-3/Exercise-3.md rename {Exercise-3 => Exercise-4}/example.json (100%) rename {Exercise-4 => Exercise-5}/Certificate.ipynb (100%) create mode 100644 Exercise-5/Exercise-5.md rename {Exercise-4 => Exercise-5}/scipy2018.cert.json (100%) diff --git a/Exercise-1/Exercise-1-notebook.ipynb b/Exercise-1/Exercise-1-solutions.ipynb similarity index 64% rename from Exercise-1/Exercise-1-notebook.ipynb rename to Exercise-1/Exercise-1-solutions.ipynb index 18dd0b0..db5fb85 100644 --- a/Exercise-1/Exercise-1-notebook.ipynb +++ b/Exercise-1/Exercise-1-solutions.ipynb @@ -34,19 +34,19 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/latex": [ - "$$\\Delta = b^2-4ac$$" + "$\\displaystyle \\Delta = b^2-4ac$" ], "text/plain": [ "" ] }, - "execution_count": 2, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -65,19 +65,19 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Hello SciPy\n" + "Hello PyCon\n" ] } ], "source": [ - "print(\"Hello SciPy\")" + "print(\"Hello PyCon\")" ] }, { @@ -89,7 +89,7 @@ }, { "cell_type": "code", - "execution_count": 90, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -103,16 +103,16 @@ }, { "cell_type": "code", - "execution_count": 107, + "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "(16, 1597)" + "(0, 1)" ] }, - "execution_count": 107, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -131,7 +131,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -140,15 +140,15 @@ }, { "cell_type": "code", - "execution_count": 109, + "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\u001b[0;31mType:\u001b[0m module\n", - "\u001b[0;31mString form:\u001b[0m \n", - "\u001b[0;31mFile:\u001b[0m ~/anaconda/envs/scipy18jlab/lib/python3.6/site-packages/pandas/__init__.py\n", + "\u001b[0;31mString form:\u001b[0m \n", + "\u001b[0;31mFile:\u001b[0m ~/anaconda3/envs/pycon2019/lib/python3.7/site-packages/pandas/__init__.py\n", "\u001b[0;31mDocstring:\u001b[0m \n", "pandas - a powerful data analysis and manipulation library for Python\n", "=====================================================================\n", @@ -200,16 +200,16 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "pandas.core.frame.DataFrame" ] }, - "execution_count": 5, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -231,7 +231,7 @@ }, { "cell_type": "code", - "execution_count": 111, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -255,7 +255,7 @@ }, { "cell_type": "code", - "execution_count": 51, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ @@ -276,16 +276,7 @@ }, { "cell_type": "code", - "execution_count": 55, - "metadata": {}, - "outputs": [], - "source": [ - "%matplotlib inline" - ] - }, - { - "cell_type": "code", - "execution_count": 56, + "execution_count": 12, "metadata": {}, "outputs": [ { @@ -323,7 +314,7 @@ " 3.5\n", " 1.4\n", " 0.2\n", - " se\n", + " setosa\n", " \n", " \n", " 1\n", @@ -363,14 +354,14 @@ ], "text/plain": [ " sepal_length sepal_width petal_length petal_width species\n", - "0 5.1 3.5 1.4 0.2 se\n", + "0 5.1 3.5 1.4 0.2 setosa\n", "1 4.9 3.0 1.4 0.2 setosa\n", "2 4.7 3.2 1.3 0.2 setosa\n", "3 4.6 3.1 1.5 0.2 setosa\n", "4 5.0 3.6 1.4 0.2 setosa" ] }, - "execution_count": 56, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } @@ -381,17 +372,28 @@ }, { "cell_type": "code", - "execution_count": 57, + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": 15, "metadata": {}, "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] }, - "metadata": {}, + "metadata": { + "needs_background": "light" + }, "output_type": "display_data" } ], @@ -402,7 +404,7 @@ }, { "cell_type": "code", - "execution_count": 58, + "execution_count": 16, "metadata": {}, "outputs": [], "source": [ @@ -411,7 +413,7 @@ }, { "cell_type": "code", - "execution_count": 60, + "execution_count": 17, "metadata": {}, "outputs": [ { @@ -928,35 +930,28 @@ }, { "cell_type": "code", - "execution_count": 64, + "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "application/javascript": [ - "alert(\"Hello SciPy\")" + "alert(\"Hello PyCon\")" ], "text/plain": [ "" ] }, - "execution_count": 64, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import Javascript\n", - "Javascript('alert(\"Hello SciPy\")')" + "Javascript('alert(\"Hello PyCon\")')" ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, { "cell_type": "code", "execution_count": null, @@ -981,7 +976,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.5" + "version": "3.7.3" } }, "nbformat": 4, diff --git a/Exercise-1/Exercise1.md b/Exercise-1/Exercise1.md index c65d2f4..50dacd9 100644 --- a/Exercise-1/Exercise1.md +++ b/Exercise-1/Exercise1.md @@ -10,7 +10,7 @@ break. ## View this file as rendered markdown. -Right-click on the `Exercise1.md` file to open it as rendered markdown. +Right-click on the `Exercise1.md` file and open it as rendered markdown. ## Layout @@ -25,7 +25,7 @@ Arrange the notebook and rendered markdown side-by-side. Then arrange them, one - italic - [Math](https://math.meta.stackexchange.com/questions/5020/mathjax-basic-tutorial-and-quick-reference) (inlne and formulas): `$f(x) = a.x^2+b.x+c$`, `$$x_\pm = \frac{-b \pm \sqrt(b^2-4ac)}{2a}$$` - Code (triple backtick fences ` ``` `, or indented 4 spaces) -- Create a code cell and evaluate it, printing "Hello SciPy" +- Create a code cell and evaluate it, printing "Hello PyCon" - Experiment with the run shortcuts `Ctrl-Enter`, `Shift-Enter`, and `Alt-Enter` and note the differences between them (see the Run menu for help). - try importing `pandas` - evaluate `pandas?` to get the help on the pandas library. diff --git a/Exercise-2/Exercise-2.md b/Exercise-2/Exercise-2.md index 13bd29c..eb4abf9 100644 --- a/Exercise-2/Exercise-2.md +++ b/Exercise-2/Exercise-2.md @@ -12,11 +12,11 @@ it down (for example on the red sticky note), and give it to us at the break. - Binding multiple documents to the same kernel - Notebook + console workflow - - Markdown + console workflow - - Python code file + console workflow - - Open notebook in classic notebook, modify, save and reopen in Lab (hint: look in Help menu) - - Try creating new document/notebook/terminal/console - - Open two notebooks with the same kernel + - Open Notebook A and B, + - change notebook B kernel to be the same as "Notebook A" + - See how state is shared. + - Markdown + console workflow; Python code file + console workflow + - Open "report.md" and follow instructions. - Go to the Running tab to shut down all kernels - Try arranging different layout, and refresh the page. Get a feeling of which layout element persist across refresh diff --git a/Exercise-2/Notebook A.ipynb b/Exercise-2/Notebook A.ipynb index eebb452..2d76402 100644 --- a/Exercise-2/Notebook A.ipynb +++ b/Exercise-2/Notebook A.ipynb @@ -9,11 +9,11 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ - "a=3" + "a=5" ] }, { @@ -40,7 +40,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.5" + "version": "3.7.3" } }, "nbformat": 4, diff --git a/Exercise-2/Notebook B.ipynb b/Exercise-2/Notebook B.ipynb index 4810434..f4481ad 100644 --- a/Exercise-2/Notebook B.ipynb +++ b/Exercise-2/Notebook B.ipynb @@ -9,16 +9,16 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "3" + "5" ] }, - "execution_count": 6, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -51,7 +51,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.5" + "version": "3.7.3" } }, "nbformat": 4, diff --git a/Exercise-2/Report.md b/Exercise-2/Report.md index 178ad79..86f3ea4 100644 --- a/Exercise-2/Report.md +++ b/Exercise-2/Report.md @@ -4,7 +4,10 @@ Right-click somewhere on this document and click `"Create console for editor"`. You will be prompted to select a kernel (new or existing). -Now that this is done, the current or _fenced block_, _selection_ or _line_ will be sent to the console and executed. +Now that this is done, the current _fenced block_, _selection_ or _line_ will be sent to the console and executed. + +Try to put your cursor in the following fenced blocks and pressed `shift-enter`. +You shoudl see the code bing sent to the console and executed. # Iris dataset @@ -31,6 +34,12 @@ df.plot.scatter('sepal_width', 'sepal_length') ``` # Categorical + +We now want to plot each `species` in a different color. +As any proper software developer, we want to track reusable code in a separate `.py` file we can import. Open `lib.py` which give us some tools to change one pandas dataframe colum to categories. + +Usually Python modules can't be updated without restarting the kernel and re-doing computations from scratch. When using the IPython kernel, in a limited number of case, code can be reloaded. + ``` %load_ext autoreload %autoreload 1 diff --git a/Exercise-2/lib.py b/Exercise-2/lib.py index c2922b8..b76b7ea 100644 --- a/Exercise-2/lib.py +++ b/Exercise-2/lib.py @@ -1,3 +1,6 @@ +""" +Some tools to change a pandas datafrae colum to categories. +""" from pandas import Categorical def categorify(df, keys): @@ -5,6 +8,8 @@ def categorify(df, keys): keys = (keys, ) for key in keys: - #df[key] = Categorical(df[key]) - cat_map = {cat:i for i,cat in enumerate(set(df[key]))} - df[key] = df[key].apply(lambda x:cat_map[x]) \ No newline at end of file + ## Attempt 1 to make the column a categorical column + df[key] = Categorical(df[key]) + ## Attempt 2 + # cat_map = {cat:i for i,cat in enumerate(set(df[key]))} + # df[key] = df[key].apply(lambda x:cat_map[x]) \ No newline at end of file diff --git a/Exercise-3/Autoawait in IPython.ipynb b/Exercise-3/Autoawait in IPython.ipynb new file mode 100644 index 0000000..13b5733 --- /dev/null +++ b/Exercise-3/Autoawait in IPython.ipynb @@ -0,0 +1,507 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# IPython advance features: " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A quick primer on `async`/`await`. Async and await are relatively new features in Python which allow **concurent** programming. They won't make your code magically faster, but may make your code easier to read, maintain and reason about. \n", + "You will likely hear the terms event-loop, coroutines and many other ones, they will make sens in time. \n", + "\n", + "The key thing to remember is that \n", + " - async-functions can call both sync and async functions.\n", + " - sync functions can only call sync. \n", + " - You _must_ always `await `\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Event loop\n", + "\n", + "It's like the \"One ring\", there shoudl be only one. IPython (and Jupyter) usually already run one.\n", + "\n", + "### Bad news\n", + "If you need to run any code that need to create and manage an event-loop, consult the docs. \n", + "Typically you can't run a tornado app inside jupyter.\n", + "\n", + "### Good news\n", + "\n", + "If you don't know/don't care, all is already setup for you. \n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "## Example" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's deactivate enventloop integration and try what is (usually invalid Python)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "%autoawait False" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "from asyncio import sleep" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# does not sleep, need to be awaited\n", + "sleep(5)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "ename": "SyntaxError", + "evalue": "'await' outside function (, line 1)", + "output_type": "error", + "traceback": [ + "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m1\u001b[0m\n\u001b[0;31m await sleep(5)\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m 'await' outside function\n" + ] + } + ], + "source": [ + "await sleep(5)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "ename": "SyntaxError", + "evalue": "'await' outside async function (, line 2)", + "output_type": "error", + "traceback": [ + "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m2\u001b[0m\n\u001b[0;31m await sleep(5)\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m 'await' outside async function\n" + ] + } + ], + "source": [ + "def f():\n", + " await sleep(5)\n", + "f()" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "async def f():\n", + " print('before...')\n", + " await sleep(5)\n", + " print('after')\n", + "### does not call f\n", + "f()" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "ename": "SyntaxError", + "evalue": "'await' outside function (, line 1)", + "output_type": "error", + "traceback": [ + "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m1\u001b[0m\n\u001b[0;31m await f()\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m 'await' outside function\n" + ] + } + ], + "source": [ + "await f()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "... back to step beginning. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Autoawait" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Autoawait will _attempt_ to detect async code and run it for you. There are of course limitations (bug report welcome)" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [], + "source": [ + "%autoawait True" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "before\n", + "after\n" + ] + } + ], + "source": [ + "print('before')\n", + "await sleep(5)\n", + "print('after')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Top level await is now valid syntax. " + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "tpl = 'https://anapioficeandfire.com/api/characters/{}'" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + ".x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x['The Daughter of the Dusk']\n", + "['Hodor']\n", + "['Lamprey']\n", + "['The Merling Queen']\n", + "['Old Crackbones']\n", + "['The Poetess']\n", + "['Porridge']\n", + "['Quickfinger']\n", + "[\"the Sailor's Wife\"]\n", + "['The Veiled Lady']\n", + "['The waif']\n", + "['Balon the Brave', 'Balon the Blessed', 'Balon the Twice Crowned', 'Balon the Widowmaker', 'The Kraken King']\n", + "['']\n", + "['']\n", + "['The High Sparrow']\n", + "['The Little Queen', 'The Little Rose', 'Maid Margaery']\n", + "['']\n", + "['']\n", + "['']\n", + "['']\n", + "['']\n", + "['']\n", + "['']\n", + "['']\n", + "['']\n", + "['']\n", + "['The Lion of Lannister', 'The Old Lion', 'The Great Lion of the Rock']\n", + "['']\n", + "['']\n", + "['']\n", + "['']\n", + "['']\n", + "['Addam of Hull']\n", + "['The Bastard of Cornfield']\n", + "['']\n", + "['Jinglebell']\n", + "['Aegon Bloodborn']\n", + "['Aegon the Conqueror', 'Aegon the Dragon', 'Aegon the Dragonlord']\n", + "['Aegon the Elder', 'Aegon the Usurper']\n", + "['Aegon the Younger', 'Aegon the Dragonbane', 'Aegon the Unlucky', 'The Broken King']\n", + "['Aegon the Unworthy']\n", + "['Young Griff']\n", + "['']\n", + "['']\n", + "['']\n", + "['Aegon the Unlikely', 'Aegon the Fortunate', 'The Prince Who Was An Eggg']\n", + "['Bittersteel']\n", + "['']\n", + "['']\n", + "CPU times: user 1.29 s, sys: 81.2 ms, total: 1.37 s\n", + "Wall time: 3.79 s\n" + ] + } + ], + "source": [ + "%%time\n", + "\n", + "results = []\n", + "for i in range(1,50):\n", + " import requests\n", + " print('.', end='')\n", + " r = requests.get(tpl.format(i)).json()['aliases']\n", + " print('x', end='')\n", + " results.append(r)\n", + " \n", + "for r in results:\n", + " print(r)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# moving to asynchronous" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "import aiohttp" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['Lord Snow', \"Ned Stark's Bastard\", 'The Snow of Winterfell', 'The Crow-Come-Over', \"The 998th Lord Commander of the Night's Watch\", 'The Bastard of Winterfell', 'The Black Bastard of the Wall', 'Lord Crow']\n" + ] + } + ], + "source": [ + "async with aiohttp.ClientSession() as session:\n", + " response = await session.get(tpl.format(583))\n", + " json = await response.json()\n", + " print(json['aliases'])" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [], + "source": [ + "async def get_char(i, session):\n", + " print('.', end='')\n", + " response = await session.get(tpl.format(i))\n", + " json = await response.json()\n", + " print('x', end='')\n", + " return json['aliases']" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + ".x['Dany', 'Daenerys Stormborn', 'The Unburnt', 'Mother of Dragons', 'Mother', 'Mhysa', 'The Silver Queen', 'Silver Lady', 'Dragonmother', 'The Dragon Queen', \"The Mad King's daughter\"]\n" + ] + } + ], + "source": [ + "async with aiohttp.ClientSession() as s:\n", + " print(await get_char(1303, s))" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [], + "source": [ + "tasks = []" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + ".................................................xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx['The Daughter of the Dusk']\n", + "['Hodor']\n", + "['Lamprey']\n", + "['The Merling Queen']\n", + "['Old Crackbones']\n", + "['The Poetess']\n", + "['Porridge']\n", + "['Quickfinger']\n", + "[\"the Sailor's Wife\"]\n", + "['The Veiled Lady']\n", + "['The waif']\n", + "['Balon the Brave', 'Balon the Blessed', 'Balon the Twice Crowned', 'Balon the Widowmaker', 'The Kraken King']\n", + "['']\n", + "['']\n", + "['The High Sparrow']\n", + "['The Little Queen', 'The Little Rose', 'Maid Margaery']\n", + "['']\n", + "['']\n", + "['']\n", + "['']\n", + "['']\n", + "['']\n", + "['']\n", + "['']\n", + "['']\n", + "['']\n", + "['The Lion of Lannister', 'The Old Lion', 'The Great Lion of the Rock']\n", + "['']\n", + "['']\n", + "['']\n", + "['']\n", + "['']\n", + "['Addam of Hull']\n", + "['The Bastard of Cornfield']\n", + "['']\n", + "['Jinglebell']\n", + "['Aegon Bloodborn']\n", + "['Aegon the Conqueror', 'Aegon the Dragon', 'Aegon the Dragonlord']\n", + "['Aegon the Elder', 'Aegon the Usurper']\n", + "['Aegon the Younger', 'Aegon the Dragonbane', 'Aegon the Unlucky', 'The Broken King']\n", + "['Aegon the Unworthy']\n", + "['Young Griff']\n", + "['']\n", + "['']\n", + "['']\n", + "['Aegon the Unlikely', 'Aegon the Fortunate', 'The Prince Who Was An Eggg']\n", + "['Bittersteel']\n", + "['']\n", + "['']\n" + ] + } + ], + "source": [ + "import asyncio\n", + "async with aiohttp.ClientSession() as session:\n", + " # start \n", + " for i in range(1,50):\n", + " task = asyncio.ensure_future(get_char(i, session))\n", + " tasks.append(task)\n", + " results = await asyncio.gather(*tasks)\n", + " for r in results:\n", + " print(r)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "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.7.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Exercise-3/Exercise-3.md b/Exercise-3/Exercise-3.md deleted file mode 100644 index b85d6ea..0000000 --- a/Exercise-3/Exercise-3.md +++ /dev/null @@ -1,20 +0,0 @@ -# Exercises 3 - -Remove all the sticky notes from your screen :-) and attempt the following. -These are _guidelines_, feel free to err on the side of workflow and -options that suits _you_ if you find them best. - -Keep in mind, if something is not intuitive, or not in the place you expected -it, write it down (for example on the red sticky note), and give it to us at the -break. - - -## Assign existing shortcut to new action - -In the notebook, the cells outputs can be collapsed or expanded, the name of the command to do so are `notebook:hide-cell-outputs` and `notebook:show-cell-outputs`. - -You can, for example bind the keys `-` (minus) and `+` (plus), to show/hide the cells. On QWERTY keyboards `+` will be availlable by using `Shift +`. - -Try to bind an existing keyboard shortcut to ` notebook:run-all-cells` - -Configure your editor to not automatically close brackets. \ No newline at end of file diff --git a/Exercise-4/Exercise-4.md b/Exercise-4/Exercise-4.md index 6aa4826..b85d6ea 100644 --- a/Exercise-4/Exercise-4.md +++ b/Exercise-4/Exercise-4.md @@ -1,205 +1,20 @@ -# Exercise 5: Extensions +# Exercises 3 Remove all the sticky notes from your screen :-) and attempt the following. -These are _guidelines_, feel free to ere on the side of workflow and +These are _guidelines_, feel free to err on the side of workflow and options that suits _you_ if you find them best. -Keep in mind, if something is not intuitive, or not in the place you expected it, write -it down (for example on the red sticky note), and give it to us at the break. +Keep in mind, if something is not intuitive, or not in the place you expected +it, write it down (for example on the red sticky note), and give it to us at the +break. -## Creating a new blank extension -We will be using the cookie-cutter project to generate a basic extension. This will generate a basic extension that reads data from a `.cert.json` JSON file and displays it nicely in JupyterLab. +## Assign existing shortcut to new action -Open a terminal and run: +In the notebook, the cells outputs can be collapsed or expanded, the name of the command to do so are `notebook:hide-cell-outputs` and `notebook:show-cell-outputs`. -``` -cookiecutter https://github.com/jupyterlab/mimerender-cookiecutter-ts -``` +You can, for example bind the keys `-` (minus) and `+` (plus), to show/hide the cells. On QWERTY keyboards `+` will be availlable by using `Shift +`. -At the prompts, enter the following: -``` -author_name []: -author_email []: -extension_name [myextension]: my_certificate_viewer -viewer_name [My Viewer]: Certificate Viewer -mimetype [application/vnd.my_organization.my_type]: application/vnd.jupyterlab.certificate -mimetype_name [my_type]: certificate -file_extension [.my_type]: .cert.json -Select data_format: -1 - string -2 - json -Choose from 1, 2 [1]: 2 -``` +Try to bind an existing keyboard shortcut to ` notebook:run-all-cells` -## Install the extension - -In the terminal, install your new extension - -``` -conda activate scipy18jlab -jupyter labextension install ./my_certificate_viewer -``` - -You can check what extensions are installed with: - -``` -jupyter labextension list -``` - -Refresh your browser to pick up the new extension javascript. - -Test it out by opening the `scipy2018.cert.json` file. Right-clicking on the file should show your viewer in the 'Open with' menu, and double-clicking should open and display the file in a blank tab. - -Right-click on the `scipy2018.cert.json` file and open it in the editor to change the name to your name and the event to "Scipy 2018". Notice that the extension-rendered tab updates in real-time. - -## Customize the display - -In order to develop our extension and have our changes appear automatically, we'll link the extension rather than just installing it. Run the following in your terminal that has the scipy18jlab environment active: - -``` -jupyter labextension link ./my_certificate_viewer -``` - -Now customize the display. Open the `my_certificate_viewer/src/index.ts` TypeScript file. Edit the `renderModel` function to replace the line that sets the `this.node.textContent` line with a bit fancier HTML: - -```javascript - this.node.innerHTML = ` -
-
-
Certificate
-
${data.given}
-
For mastery of JupyterLab
-
${data.event}
-
-
-
-
-
-` -``` - -Now rebuild JupyterLab to incorporate these changes by running the following in your terminal: - -``` -jupyter lab build -``` - -Open the `scipy2018.cert.json` file again to see that things look a bit better. - -## Style the display - -Finally, let's style this certificate to look really nice. Add the following to -the `my_certificate_viewer/style/index.css` file: - -```css -.mimerenderer-certificate .cert{ - background-color: #07618B; - width: 350px;height: 250px; - margin-left: 35%;margin-top: 10%; - position: relative; - border-radius: 20px 20px 20px 20px; - -webkit-box-shadow: 0px 5px 10px 0px; - -moz-box-shadow: 0px 5px 10px 0px; - box-shadow: 0px 5px 10px 0px; -} - -.mimerenderer-certificate .paper{ - position: absolute; - width: 300px; - height: 200px; - background: #E0E0E0; - left: 25px; - top: 25px; - border-radius: 5px 5px 5px 5px; -} - -.mimerenderer-certificate .cert .medal { - background: #C9992E; - width: 20px; - height: 20px; - top: 30px; - left: 30px; - position: absolute; - padding: 10px 10px 10px 10px; - font-size: 2em; - border-radius: 50%; - z-index:30; -} - -.mimerenderer-certificate .ribbon1 { - width: 15px; - height: 40px; - background-color: #9bdbf6; - position: absolute; - top: 50px; - left: 35px; - z-index: 1; - -webkit-transform: rotate(30deg); - border-right: 1px solid white; - } - -.mimerenderer-certificate .ribbon2 { - width: 15px; - height: 40px; - background-color: #9bdbf6; - position: absolute; - top: 50px; - left: 50px; - z-index: 1; - -webkit-transform: rotate(150deg); - border-right: 1px solid white; - } - -.mimerenderer-certificate .title { - background:#E0E0E0; - font-weight: bold; - text-align: center; - margin-top: 20px; - height: 30px; - z-index:999; -} - -.mimerenderer-certificate .textX { - z-index: 200; - text-align: center; - padding: 0px; - text-align: center; - margin-top: 20px; - } - -.mimerenderer-certificate .text2 { - background-color: #E0E0E0; - z-index: 200; - padding: 0px 200px; - text-align: center; - margin-left: 50px; - } - -.mimerenderer-certificate .text3 { - background-color: #B3B3B3; - z-index: 200; - padding: 0px 200px; - text-align: center; - margin-left: 50px; - } - ``` - - Rebuild JupyterLab and open the certificate again to see these changes. - -## Install plugin - -Congratulations! You can now install the extension again to wrap things up. - - ``` -jupyter labextension install ./my_certificate_viewer -``` - -## Notebook - -A mimerender extension is used to render both files and rich outputs in -notebooks. Open the `Certificate.ipynb` notebook and run it. - -## More information - -For more information about writing extensions, especially more substantial ones, see the [XKCD extension tutorial](http://jupyterlab.readthedocs.io/en/stable/developer/xkcd_extension_tutorial.html) in the JupyterLab documentation. \ No newline at end of file +Configure your editor to not automatically close brackets. \ No newline at end of file diff --git a/Exercise-3/example.json b/Exercise-4/example.json similarity index 100% rename from Exercise-3/example.json rename to Exercise-4/example.json diff --git a/Exercise-4/Certificate.ipynb b/Exercise-5/Certificate.ipynb similarity index 100% rename from Exercise-4/Certificate.ipynb rename to Exercise-5/Certificate.ipynb diff --git a/Exercise-5/Exercise-5.md b/Exercise-5/Exercise-5.md new file mode 100644 index 0000000..6aa4826 --- /dev/null +++ b/Exercise-5/Exercise-5.md @@ -0,0 +1,205 @@ +# Exercise 5: Extensions + +Remove all the sticky notes from your screen :-) and attempt the following. +These are _guidelines_, feel free to ere on the side of workflow and +options that suits _you_ if you find them best. + +Keep in mind, if something is not intuitive, or not in the place you expected it, write +it down (for example on the red sticky note), and give it to us at the break. + +## Creating a new blank extension + +We will be using the cookie-cutter project to generate a basic extension. This will generate a basic extension that reads data from a `.cert.json` JSON file and displays it nicely in JupyterLab. + +Open a terminal and run: + +``` +cookiecutter https://github.com/jupyterlab/mimerender-cookiecutter-ts +``` + +At the prompts, enter the following: +``` +author_name []: +author_email []: +extension_name [myextension]: my_certificate_viewer +viewer_name [My Viewer]: Certificate Viewer +mimetype [application/vnd.my_organization.my_type]: application/vnd.jupyterlab.certificate +mimetype_name [my_type]: certificate +file_extension [.my_type]: .cert.json +Select data_format: +1 - string +2 - json +Choose from 1, 2 [1]: 2 +``` + +## Install the extension + +In the terminal, install your new extension + +``` +conda activate scipy18jlab +jupyter labextension install ./my_certificate_viewer +``` + +You can check what extensions are installed with: + +``` +jupyter labextension list +``` + +Refresh your browser to pick up the new extension javascript. + +Test it out by opening the `scipy2018.cert.json` file. Right-clicking on the file should show your viewer in the 'Open with' menu, and double-clicking should open and display the file in a blank tab. + +Right-click on the `scipy2018.cert.json` file and open it in the editor to change the name to your name and the event to "Scipy 2018". Notice that the extension-rendered tab updates in real-time. + +## Customize the display + +In order to develop our extension and have our changes appear automatically, we'll link the extension rather than just installing it. Run the following in your terminal that has the scipy18jlab environment active: + +``` +jupyter labextension link ./my_certificate_viewer +``` + +Now customize the display. Open the `my_certificate_viewer/src/index.ts` TypeScript file. Edit the `renderModel` function to replace the line that sets the `this.node.textContent` line with a bit fancier HTML: + +```javascript + this.node.innerHTML = ` +
+
+
Certificate
+
${data.given}
+
For mastery of JupyterLab
+
${data.event}
+
+
+
+
+
+` +``` + +Now rebuild JupyterLab to incorporate these changes by running the following in your terminal: + +``` +jupyter lab build +``` + +Open the `scipy2018.cert.json` file again to see that things look a bit better. + +## Style the display + +Finally, let's style this certificate to look really nice. Add the following to +the `my_certificate_viewer/style/index.css` file: + +```css +.mimerenderer-certificate .cert{ + background-color: #07618B; + width: 350px;height: 250px; + margin-left: 35%;margin-top: 10%; + position: relative; + border-radius: 20px 20px 20px 20px; + -webkit-box-shadow: 0px 5px 10px 0px; + -moz-box-shadow: 0px 5px 10px 0px; + box-shadow: 0px 5px 10px 0px; +} + +.mimerenderer-certificate .paper{ + position: absolute; + width: 300px; + height: 200px; + background: #E0E0E0; + left: 25px; + top: 25px; + border-radius: 5px 5px 5px 5px; +} + +.mimerenderer-certificate .cert .medal { + background: #C9992E; + width: 20px; + height: 20px; + top: 30px; + left: 30px; + position: absolute; + padding: 10px 10px 10px 10px; + font-size: 2em; + border-radius: 50%; + z-index:30; +} + +.mimerenderer-certificate .ribbon1 { + width: 15px; + height: 40px; + background-color: #9bdbf6; + position: absolute; + top: 50px; + left: 35px; + z-index: 1; + -webkit-transform: rotate(30deg); + border-right: 1px solid white; + } + +.mimerenderer-certificate .ribbon2 { + width: 15px; + height: 40px; + background-color: #9bdbf6; + position: absolute; + top: 50px; + left: 50px; + z-index: 1; + -webkit-transform: rotate(150deg); + border-right: 1px solid white; + } + +.mimerenderer-certificate .title { + background:#E0E0E0; + font-weight: bold; + text-align: center; + margin-top: 20px; + height: 30px; + z-index:999; +} + +.mimerenderer-certificate .textX { + z-index: 200; + text-align: center; + padding: 0px; + text-align: center; + margin-top: 20px; + } + +.mimerenderer-certificate .text2 { + background-color: #E0E0E0; + z-index: 200; + padding: 0px 200px; + text-align: center; + margin-left: 50px; + } + +.mimerenderer-certificate .text3 { + background-color: #B3B3B3; + z-index: 200; + padding: 0px 200px; + text-align: center; + margin-left: 50px; + } + ``` + + Rebuild JupyterLab and open the certificate again to see these changes. + +## Install plugin + +Congratulations! You can now install the extension again to wrap things up. + + ``` +jupyter labextension install ./my_certificate_viewer +``` + +## Notebook + +A mimerender extension is used to render both files and rich outputs in +notebooks. Open the `Certificate.ipynb` notebook and run it. + +## More information + +For more information about writing extensions, especially more substantial ones, see the [XKCD extension tutorial](http://jupyterlab.readthedocs.io/en/stable/developer/xkcd_extension_tutorial.html) in the JupyterLab documentation. \ No newline at end of file diff --git a/Exercise-4/scipy2018.cert.json b/Exercise-5/scipy2018.cert.json similarity index 100% rename from Exercise-4/scipy2018.cert.json rename to Exercise-5/scipy2018.cert.json diff --git a/environment.yml b/environment.yml index afd1eb6..bf23349 100644 --- a/environment.yml +++ b/environment.yml @@ -1,8 +1,10 @@ -name: scipy18jlab +name: pycon2019 channels: - conda-forge dependencies: - python=3.7 + - aiohttp + - trio - pip - cookiecutter=1.6 - notebook=5.7 diff --git a/outline.md b/outline.md index c054353..c66ee28 100644 --- a/outline.md +++ b/outline.md @@ -45,7 +45,7 @@ links) and a rough timeline if you want to follow up on the video later. ### 8-8:10 (10 min) - introduction -Today this tutorial will be presented to you by Jason Grout, and Matthias +Today this tutorial will be presented to you by Matthias Bussonnier, two long standing members of the Jupyter Project. We have a number of helpers in the room. Attendees should have been given red/green sticky notes. @@ -55,8 +55,8 @@ readme. For this tutorial, we are standardizing on a conda-based python distribution (miniconda or Anaconda). We may not be able to help with installation issues if you are using a different python distribution. -JupyterLab is in beta and that first time impression -are critical to usability of JupyterLab. We will show you what can be done, but +JupyterLab is close to be release as a 1.0, only a few changges are expected +between now and final release. We will show you what can be done, but can still improve the usability quite a bit. When trying to do any task in the exercise try to think first: - How would I do that @@ -102,7 +102,17 @@ Write one good thing on the green sticky note, one bad on the red one. 6. creating new view of outputs 7. javascript rendering restrictions (removed in the next beta) -### 10:30-10:45 (15 min): Attaching kernels to multiple documents + +### 10:30-10:55 (15 min) Exercise 2 + +- binding multiple documents to the same kernel + - New Console for Notebook + - Markdown file + console workflow + - Python code file + console workflow + - Open a notebook in classic notebook, modify, save and reopen in Lab. + + +### 10:55-11:00 (15 min): Attaching kernels to multiple documents 1. Executing code in a markdown file using an attached console. 2. Developing libraries with notebook and Python files attached to same kernel @@ -111,13 +121,6 @@ Write one good thing on the green sticky note, one bad on the red one. 5. Attaching a code console to the same kernel as a notebook. -### 10:45-11:10 (15 min) Exercise 2 - -- binding multiple documents to the same kernel - - New Console for Notebook - - Markdown file + console workflow - - Python code file + console workflow - - Open a notebook in classic notebook, modify, save and reopen in Lab. ### 11:10-11:25 (15min) break 10 min + sticky notes + Q.A 5min diff --git a/readme.md b/readme.md index 1b918e7..cb2a1eb 100644 --- a/readme.md +++ b/readme.md @@ -45,7 +45,7 @@ you are using a different python distribution. Create a conda environment: ``` - conda create -n pycon2019 -c conda-forge --override-channels --yes python=3.7 pip cookiecutter=1.6 'notebook=5.7' pandas=0.24 nodejs=9.11 jupyterlab bqplot ipyvolume pythreejs + conda create -n pycon2019 -c conda-forge --override-channels --yes python=3.7 pip cookiecutter=1.6 'notebook=5.7' pandas=0.24 nodejs=9.11 jupyterlab bqplot ipyvolume pythreejs aoihttp ``` (You could instead create the environment from the supplied environment file with `conda env create -f pycon2019-jupyterlab-tutorial/environment.yml`) @@ -100,7 +100,7 @@ conda activate pycon2019 Then install the python packages: ``` conda install -c conda-forge --override-channels --yes ipyleaflet ipympl -pip install sidecar +pip install sidecar ``` and install the JupyterLab extensions: From 8537e0f1bbffec5f85ee6c52b7e307a1df5b93b0 Mon Sep 17 00:00:00 2001 From: Dan Coates Date: Sun, 28 Apr 2019 12:13:25 -0400 Subject: [PATCH 070/105] Correct readme.md typo in `conda create` command MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit aoihttp ➡️ aiohttp --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index cb2a1eb..e2d504c 100644 --- a/readme.md +++ b/readme.md @@ -45,7 +45,7 @@ you are using a different python distribution. Create a conda environment: ``` - conda create -n pycon2019 -c conda-forge --override-channels --yes python=3.7 pip cookiecutter=1.6 'notebook=5.7' pandas=0.24 nodejs=9.11 jupyterlab bqplot ipyvolume pythreejs aoihttp + conda create -n pycon2019 -c conda-forge --override-channels --yes python=3.7 pip cookiecutter=1.6 'notebook=5.7' pandas=0.24 nodejs=9.11 jupyterlab bqplot ipyvolume pythreejs aiohttp ``` (You could instead create the environment from the supplied environment file with `conda env create -f pycon2019-jupyterlab-tutorial/environment.yml`) From 2ab8f54913df0eec2fc9bfa4ff791899bd829380 Mon Sep 17 00:00:00 2001 From: Matthias Bussonnier Date: Sun, 28 Apr 2019 09:26:28 -0700 Subject: [PATCH 071/105] Async --- Exercise-3/Autoawait in IPython.ipynb | 211 ++++++++++++++++++++++---- 1 file changed, 181 insertions(+), 30 deletions(-) diff --git a/Exercise-3/Autoawait in IPython.ipynb b/Exercise-3/Autoawait in IPython.ipynb index 13b5733..8c2e901 100644 --- a/Exercise-3/Autoawait in IPython.ipynb +++ b/Exercise-3/Autoawait in IPython.ipynb @@ -38,25 +38,18 @@ "\n" ] }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [], - "source": [ - "## Example" - ] - }, { "cell_type": "markdown", "metadata": {}, "source": [ + "## Example\n", + "\n", "Let's deactivate enventloop integration and try what is (usually invalid Python)" ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -65,7 +58,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -74,16 +67,16 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 13, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -95,15 +88,15 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 5, "metadata": {}, "outputs": [ { "ename": "SyntaxError", - "evalue": "'await' outside function (, line 1)", + "evalue": "'await' outside function (, line 1)", "output_type": "error", "traceback": [ - "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m1\u001b[0m\n\u001b[0;31m await sleep(5)\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m 'await' outside function\n" + "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m1\u001b[0m\n\u001b[0;31m await sleep(5)\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m 'await' outside function\n" ] } ], @@ -113,15 +106,15 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 6, "metadata": {}, "outputs": [ { "ename": "SyntaxError", - "evalue": "'await' outside async function (, line 2)", + "evalue": "'await' outside async function (, line 2)", "output_type": "error", "traceback": [ - "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m2\u001b[0m\n\u001b[0;31m await sleep(5)\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m 'await' outside async function\n" + "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m2\u001b[0m\n\u001b[0;31m await sleep(5)\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m 'await' outside async function\n" ] } ], @@ -133,16 +126,16 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 17, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -158,15 +151,15 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 8, "metadata": {}, "outputs": [ { "ename": "SyntaxError", - "evalue": "'await' outside function (, line 1)", + "evalue": "'await' outside function (, line 1)", "output_type": "error", "traceback": [ - "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m1\u001b[0m\n\u001b[0;31m await f()\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m 'await' outside function\n" + "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m1\u001b[0m\n\u001b[0;31m await f()\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m 'await' outside function\n" ] } ], @@ -197,13 +190,20 @@ }, { "cell_type": "code", - "execution_count": 62, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "%autoawait True" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You will note that any line that start with `%` is invalid Python and are IPython specific syntax. THos are call magics (line-magics with a single `%` sign, cell magics with a double `%%` sign)" + ] + }, { "cell_type": "code", "execution_count": 63, @@ -322,7 +322,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# moving to asynchronous" + "# Moving to asynchronous" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Nothing is perfect; if you get RuntimeErrors with asyncio, you may need to restart your kernel. " ] }, { @@ -468,12 +475,156 @@ " print(r)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Advance Autoavait usage, Exercise" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Find the documentation for autoawait, and try to make it work with another asynchronous library. For exampe try to ply with [`trio`](https://trio.readthedocs.io/en/latest/), using `trio.sleep` and `trio.open_nursery` to get several concurent task running, pritning different message regularly and at random intervals. What happen if you use `time.sleep()` instead of `trio.sleep()` ? What hapen if you use `asyncio.sleep()` ?" + ] + }, { "cell_type": "code", - "execution_count": null, + "execution_count": 27, "metadata": {}, "outputs": [], - "source": [] + "source": [ + "import trio" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [], + "source": [ + "async def every(n, message):\n", + " for i in range(30):\n", + " await trio.sleep(n)\n", + " print(message)" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [], + "source": [ + "%autoawait trio" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Plic\n", + "Ploc\n", + "Plic\n", + "Plic\n", + "Ploc\n", + "Plic\n", + "Plic\n", + "Ploc\n", + "Plic\n", + "Plic\n", + "Ploc\n", + "Plic\n", + "Plic\n", + "Ploc\n", + "Plic\n", + "Plic\n", + "Ploc\n", + "Plic\n", + "Plic\n", + "Ploc\n", + "Plic\n", + "Plic\n", + "Ploc\n", + "Plic\n", + "Plic\n", + "Ploc\n", + "Plic\n", + "Plic\n", + "Ploc\n", + "Plic\n", + "Plic\n", + "Ploc\n", + "Plic\n", + "Plic\n", + "Ploc\n", + "Plic\n", + "Plic\n", + "Ploc\n", + "Plic\n", + "Plic\n", + "Ploc\n", + "Plic\n", + "Plic\n", + "Ploc\n", + "Plic\n", + "Plic\n", + "Ploc\n", + "Plic\n", + "Plic\n", + "Ploc\n", + "Plic\n", + "Plic\n", + "Ploc\n", + "Plic\n", + "Plic\n", + "Ploc\n", + "Plic\n", + "Plic\n", + "Ploc\n", + "Plic\n", + "Plic\n", + "Ploc\n", + "Plic\n", + "Plic\n", + "Ploc\n", + "Plic\n", + "Plic\n", + "Ploc\n", + "Plic\n", + "Plic\n", + "Ploc\n", + "Plic\n", + "Plic\n", + "Ploc\n", + "Plic\n" + ] + }, + { + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36masync-def-wrapper\u001b[0;34m()\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/anaconda3/envs/pycon2019/lib/python3.7/site-packages/trio/_core/_run.py\u001b[0m in \u001b[0;36m__aexit__\u001b[0;34m(self, etype, exc, tb)\u001b[0m\n\u001b[1;32m 504\u001b[0m \u001b[0mold_context\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcombined_error_from_nursery\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__context__\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 505\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 506\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mcombined_error_from_nursery\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 507\u001b[0m \u001b[0;32mfinally\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 508\u001b[0m \u001b[0m_\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0m_\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msys\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexc_info\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/anaconda3/envs/pycon2019/lib/python3.7/site-packages/trio/_core/_run.py\u001b[0m in \u001b[0;36mraise_cancel\u001b[0;34m()\u001b[0m\n\u001b[1;32m 749\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mraise_cancel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 750\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_runner\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mki_pending\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mFalse\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 751\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mKeyboardInterrupt\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 752\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 753\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_attempt_abort\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mraise_cancel\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mKeyboardInterrupt\u001b[0m: " + ] + } + ], + "source": [ + "async with trio.open_nursery() as nursery:\n", + " nursery.start_soon(every, 1, 'Plic')\n", + " nursery.start_soon(every, 2, 'Ploc')\n", + " " + ] }, { "cell_type": "code", From cd99c329903acc600c3018dbee46f2a38db03603 Mon Sep 17 00:00:00 2001 From: Matthias Bussonnier Date: Sun, 28 Apr 2019 09:39:16 -0700 Subject: [PATCH 072/105] more scipy occurences --- readme.md | 6 ++---- setup.sh | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/readme.md b/readme.md index cb2a1eb..ed58259 100644 --- a/readme.md +++ b/readme.md @@ -1,8 +1,6 @@ -# SciPy 2018 JupyterLab tutorial. +# PyCon 2019 Jupyter tutorial. -This repository contain material and instructions to follow the "Getting started with JupyterLab" tutorial during SciPy 2018. - -During the tutorial, feel free to get on the `jupyterlab` channel of https://scipy2018.slack.com/ for help and updates. +This repository contain material and instructions to follow the "IPython and Jupyter in Depth: High productivity, interactive Python" tutorial during PyCon 2019. # Installation diff --git a/setup.sh b/setup.sh index 8c68bd4..331e763 100755 --- a/setup.sh +++ b/setup.sh @@ -1,6 +1,6 @@ conda env create -f environment.yml -conda activate scipy18jlab +conda activate pycon2019 NODE_OPTIONS=--max_old_space_size=4096 jupyter labextension install @jupyter-widgets/jupyterlab-manager jupyter-threejs ipyvolume bqplot @jupyterlab/geojson-extension @jupyterlab/fasta-extension From 7d4f592b9c766b04761d851f8221736c19948761 Mon Sep 17 00:00:00 2001 From: Matthias Bussonnier Date: Sun, 28 Apr 2019 09:44:02 -0700 Subject: [PATCH 073/105] bringin PyCon outline --- outline.md | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/outline.md b/outline.md index c66ee28..347061c 100644 --- a/outline.md +++ b/outline.md @@ -1,3 +1,83 @@ +## Instruction and what to install (+15min ~ 0:15) + +Quick instruction on how to get instructions and install required packages, get data... Fallback on online hosting for users if can't get to work on laptop. +(We'll continue installation during next section) + +## Jupyter & IPython, overview of Ecosystem and new features (+25 min ~ 0:40) + +- What are the different pieces, how to get help after the tutorial. + - Jupyter + - JupyterHub + - Notebook interfaces. + - Kernels + - Extensions (difference between kernel, front-endand server extension, we'll only explore IPython kernel extension later in the tutorial) + - Binder +- Moving toward Python 3 only, already he case for many pieces +- Difference between notebook and JupyterLab +- Overview what's New in JupyterLab, what's the difference with Classic Notebook. + - Complete compatibility. You can install both at the same time. + - Same file format, same protocol... +- Online hosted platforms + - Azure, Coclac, Colab, ... +- Other frontends + - Nteract Vs Code, Atom, +- Whats new in Python, and how IPython/Jupyter make best use of it (will detail in later sections) + + +## IPython: Interactivity beyond Python (+35min ~ 1:15) + +- Beyond Python: + - magic commands, shell access, object introspection. + - integration with top-level async code in Python 3.6+ + - superhelp `?` / `??` + - system command `!` + - Tab completion +- Tools for typical development tasks: timing, profiling, debugging. + +We will leave 1 to 2 minutes hands-on for simple subjects like object +introspection and variable caching. + +## Back to the terminal(s) (+15min ~ 1:30) + +- Demo and discussion of the last added features of the command line interpreter. +- `IPython.embed`: a useful 'microscope' into your own scripts. +- Customizing IPython with profiles. + +We'll leave 5-10 minutes at the end of this section for user to play +with multiple features of IPython. + +## Notebook/JupyterLab a tour of the GUI (+40min ~ 2:10) + +- Couple of exercise to get user acclimated to JupyterLab and notebook Interfaces, keyboard shortcut. +- Plan a couple of advance written exercises showing-off advance features for user already familiar with new interface. +- Basic concepts: the server, the dashboard, your notebooks. +- A notebook as a rich document: text, code, results and multimedia. +- Sharing your notebooks: [nbviewer](http://nbviewer.ipython.org), MyBinder.org +- Converting notebooks to other formats for sharing, blogging and publication. + +We'll interleave this presentation with few minutes breaks and try to ask user to achieve a specific state before showing them how to achieve it. + +## JupyterLab, IPython exercises (+50min ~3:00) + +In this section we'll have user customize their own code to make full use of the Jupyter and IPython capabilities. + + - The IPython display protocol: `__repr__` for more than just text. + - make full use of the display protocol to get a visualisation. + - Discuss and work with widgets. + - How widgets can bring interactivity to visualisation and analysis. +- Create an IPython extension, and register magics. + - This should show the basic of cross-language integration. + - Make use of magic to run a cross language analysis. + + + +## Conclusion + +Further resource and conclusion (if time permit) + + +--------------- + # Outline **These notes are for the presenters.** From 820fd98b1cd35dabc8c2e7c6a1ffd0edb01fdc01 Mon Sep 17 00:00:00 2001 From: Matthias Bussonnier Date: Sun, 28 Apr 2019 09:44:51 -0700 Subject: [PATCH 074/105] move things --- .../Exercise-1}/Exercise-1-solutions.ipynb | 0 {Exercise-1 => jupyterlab-exercises/Exercise-1}/Exercise1.md | 0 {Exercise-2 => jupyterlab-exercises/Exercise-2}/Exercise-2.md | 0 {Exercise-2 => jupyterlab-exercises/Exercise-2}/Notebook A.ipynb | 0 {Exercise-2 => jupyterlab-exercises/Exercise-2}/Notebook B.ipynb | 0 {Exercise-2 => jupyterlab-exercises/Exercise-2}/Report.md | 0 {Exercise-2 => jupyterlab-exercises/Exercise-2}/lib.py | 0 .../Exercise-3}/Autoawait in IPython.ipynb | 0 {Exercise-4 => jupyterlab-exercises/Exercise-4}/Exercise-4.md | 0 {Exercise-4 => jupyterlab-exercises/Exercise-4}/example.json | 0 {Exercise-5 => jupyterlab-exercises/Exercise-5}/Certificate.ipynb | 0 {Exercise-5 => jupyterlab-exercises/Exercise-5}/Exercise-5.md | 0 .../Exercise-5}/scipy2018.cert.json | 0 13 files changed, 0 insertions(+), 0 deletions(-) rename {Exercise-1 => jupyterlab-exercises/Exercise-1}/Exercise-1-solutions.ipynb (100%) rename {Exercise-1 => jupyterlab-exercises/Exercise-1}/Exercise1.md (100%) rename {Exercise-2 => jupyterlab-exercises/Exercise-2}/Exercise-2.md (100%) rename {Exercise-2 => jupyterlab-exercises/Exercise-2}/Notebook A.ipynb (100%) rename {Exercise-2 => jupyterlab-exercises/Exercise-2}/Notebook B.ipynb (100%) rename {Exercise-2 => jupyterlab-exercises/Exercise-2}/Report.md (100%) rename {Exercise-2 => jupyterlab-exercises/Exercise-2}/lib.py (100%) rename {Exercise-3 => jupyterlab-exercises/Exercise-3}/Autoawait in IPython.ipynb (100%) rename {Exercise-4 => jupyterlab-exercises/Exercise-4}/Exercise-4.md (100%) rename {Exercise-4 => jupyterlab-exercises/Exercise-4}/example.json (100%) rename {Exercise-5 => jupyterlab-exercises/Exercise-5}/Certificate.ipynb (100%) rename {Exercise-5 => jupyterlab-exercises/Exercise-5}/Exercise-5.md (100%) rename {Exercise-5 => jupyterlab-exercises/Exercise-5}/scipy2018.cert.json (100%) diff --git a/Exercise-1/Exercise-1-solutions.ipynb b/jupyterlab-exercises/Exercise-1/Exercise-1-solutions.ipynb similarity index 100% rename from Exercise-1/Exercise-1-solutions.ipynb rename to jupyterlab-exercises/Exercise-1/Exercise-1-solutions.ipynb diff --git a/Exercise-1/Exercise1.md b/jupyterlab-exercises/Exercise-1/Exercise1.md similarity index 100% rename from Exercise-1/Exercise1.md rename to jupyterlab-exercises/Exercise-1/Exercise1.md diff --git a/Exercise-2/Exercise-2.md b/jupyterlab-exercises/Exercise-2/Exercise-2.md similarity index 100% rename from Exercise-2/Exercise-2.md rename to jupyterlab-exercises/Exercise-2/Exercise-2.md diff --git a/Exercise-2/Notebook A.ipynb b/jupyterlab-exercises/Exercise-2/Notebook A.ipynb similarity index 100% rename from Exercise-2/Notebook A.ipynb rename to jupyterlab-exercises/Exercise-2/Notebook A.ipynb diff --git a/Exercise-2/Notebook B.ipynb b/jupyterlab-exercises/Exercise-2/Notebook B.ipynb similarity index 100% rename from Exercise-2/Notebook B.ipynb rename to jupyterlab-exercises/Exercise-2/Notebook B.ipynb diff --git a/Exercise-2/Report.md b/jupyterlab-exercises/Exercise-2/Report.md similarity index 100% rename from Exercise-2/Report.md rename to jupyterlab-exercises/Exercise-2/Report.md diff --git a/Exercise-2/lib.py b/jupyterlab-exercises/Exercise-2/lib.py similarity index 100% rename from Exercise-2/lib.py rename to jupyterlab-exercises/Exercise-2/lib.py diff --git a/Exercise-3/Autoawait in IPython.ipynb b/jupyterlab-exercises/Exercise-3/Autoawait in IPython.ipynb similarity index 100% rename from Exercise-3/Autoawait in IPython.ipynb rename to jupyterlab-exercises/Exercise-3/Autoawait in IPython.ipynb diff --git a/Exercise-4/Exercise-4.md b/jupyterlab-exercises/Exercise-4/Exercise-4.md similarity index 100% rename from Exercise-4/Exercise-4.md rename to jupyterlab-exercises/Exercise-4/Exercise-4.md diff --git a/Exercise-4/example.json b/jupyterlab-exercises/Exercise-4/example.json similarity index 100% rename from Exercise-4/example.json rename to jupyterlab-exercises/Exercise-4/example.json diff --git a/Exercise-5/Certificate.ipynb b/jupyterlab-exercises/Exercise-5/Certificate.ipynb similarity index 100% rename from Exercise-5/Certificate.ipynb rename to jupyterlab-exercises/Exercise-5/Certificate.ipynb diff --git a/Exercise-5/Exercise-5.md b/jupyterlab-exercises/Exercise-5/Exercise-5.md similarity index 100% rename from Exercise-5/Exercise-5.md rename to jupyterlab-exercises/Exercise-5/Exercise-5.md diff --git a/Exercise-5/scipy2018.cert.json b/jupyterlab-exercises/Exercise-5/scipy2018.cert.json similarity index 100% rename from Exercise-5/scipy2018.cert.json rename to jupyterlab-exercises/Exercise-5/scipy2018.cert.json From e6366dc0f56b5c75b429ff46e47a28976b4e3fc0 Mon Sep 17 00:00:00 2001 From: Matthias Bussonnier Date: Sun, 28 Apr 2019 10:25:04 -0700 Subject: [PATCH 075/105] updates soem instructions --- ...Autoawait in IPython.ipynb => 2 - Autoawait in IPython.ipynb | 0 environment.yml | 2 ++ readme.md | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) rename jupyterlab-exercises/Exercise-3/Autoawait in IPython.ipynb => 2 - Autoawait in IPython.ipynb (100%) diff --git a/jupyterlab-exercises/Exercise-3/Autoawait in IPython.ipynb b/2 - Autoawait in IPython.ipynb similarity index 100% rename from jupyterlab-exercises/Exercise-3/Autoawait in IPython.ipynb rename to 2 - Autoawait in IPython.ipynb diff --git a/environment.yml b/environment.yml index bf23349..ef48c02 100644 --- a/environment.yml +++ b/environment.yml @@ -13,3 +13,5 @@ dependencies: - jupyterlab - bqplot - pythreejs + - line_profiler + - matplotlib diff --git a/readme.md b/readme.md index 7f02b73..d678d17 100644 --- a/readme.md +++ b/readme.md @@ -43,7 +43,7 @@ you are using a different python distribution. Create a conda environment: ``` - conda create -n pycon2019 -c conda-forge --override-channels --yes python=3.7 pip cookiecutter=1.6 'notebook=5.7' pandas=0.24 nodejs=9.11 jupyterlab bqplot ipyvolume pythreejs aiohttp + conda create -n pycon2019 -c conda-forge --override-channels --yes python=3.7 pip cookiecutter=1.6 'notebook=5.7' pandas=0.24 nodejs=9.11 jupyterlab bqplot ipyvolume pythreejs aiohttp line_profiler matplotlib ``` (You could instead create the environment from the supplied environment file with `conda env create -f pycon2019-jupyterlab-tutorial/environment.yml`) From c66c0c3763a58befea388b042309a5f14f63385e Mon Sep 17 00:00:00 2001 From: Matthias Bussonnier Date: Sun, 28 Apr 2019 10:57:31 -0700 Subject: [PATCH 076/105] demo terminal --- 2 - Autoawait in IPython.ipynb | 371 ++++----------------------------- 3-back-to-terminal.md | 13 ++ demo_autoreload.py | 12 ++ 3 files changed, 69 insertions(+), 327 deletions(-) create mode 100644 3-back-to-terminal.md create mode 100644 demo_autoreload.py diff --git a/2 - Autoawait in IPython.ipynb b/2 - Autoawait in IPython.ipynb index 8c2e901..8eb7d79 100644 --- a/2 - Autoawait in IPython.ipynb +++ b/2 - Autoawait in IPython.ipynb @@ -49,7 +49,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -58,7 +58,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -67,20 +67,9 @@ }, { "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "# does not sleep, need to be awaited\n", "sleep(5)" @@ -88,36 +77,18 @@ }, { "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "ename": "SyntaxError", - "evalue": "'await' outside function (, line 1)", - "output_type": "error", - "traceback": [ - "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m1\u001b[0m\n\u001b[0;31m await sleep(5)\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m 'await' outside function\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "await sleep(5)" ] }, { "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "ename": "SyntaxError", - "evalue": "'await' outside async function (, line 2)", - "output_type": "error", - "traceback": [ - "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m2\u001b[0m\n\u001b[0;31m await sleep(5)\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m 'await' outside async function\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "def f():\n", " await sleep(5)\n", @@ -126,20 +97,9 @@ }, { "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "async def f():\n", " print('before...')\n", @@ -151,18 +111,9 @@ }, { "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "ename": "SyntaxError", - "evalue": "'await' outside function (, line 1)", - "output_type": "error", - "traceback": [ - "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m1\u001b[0m\n\u001b[0;31m await f()\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m 'await' outside function\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "await f()" ] @@ -190,7 +141,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -206,18 +157,9 @@ }, { "cell_type": "code", - "execution_count": 63, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "before\n", - "after\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "print('before')\n", "await sleep(5)\n", @@ -233,7 +175,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -242,67 +184,9 @@ }, { "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - ".x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x['The Daughter of the Dusk']\n", - "['Hodor']\n", - "['Lamprey']\n", - "['The Merling Queen']\n", - "['Old Crackbones']\n", - "['The Poetess']\n", - "['Porridge']\n", - "['Quickfinger']\n", - "[\"the Sailor's Wife\"]\n", - "['The Veiled Lady']\n", - "['The waif']\n", - "['Balon the Brave', 'Balon the Blessed', 'Balon the Twice Crowned', 'Balon the Widowmaker', 'The Kraken King']\n", - "['']\n", - "['']\n", - "['The High Sparrow']\n", - "['The Little Queen', 'The Little Rose', 'Maid Margaery']\n", - "['']\n", - "['']\n", - "['']\n", - "['']\n", - "['']\n", - "['']\n", - "['']\n", - "['']\n", - "['']\n", - "['']\n", - "['The Lion of Lannister', 'The Old Lion', 'The Great Lion of the Rock']\n", - "['']\n", - "['']\n", - "['']\n", - "['']\n", - "['']\n", - "['Addam of Hull']\n", - "['The Bastard of Cornfield']\n", - "['']\n", - "['Jinglebell']\n", - "['Aegon Bloodborn']\n", - "['Aegon the Conqueror', 'Aegon the Dragon', 'Aegon the Dragonlord']\n", - "['Aegon the Elder', 'Aegon the Usurper']\n", - "['Aegon the Younger', 'Aegon the Dragonbane', 'Aegon the Unlucky', 'The Broken King']\n", - "['Aegon the Unworthy']\n", - "['Young Griff']\n", - "['']\n", - "['']\n", - "['']\n", - "['Aegon the Unlikely', 'Aegon the Fortunate', 'The Prince Who Was An Eggg']\n", - "['Bittersteel']\n", - "['']\n", - "['']\n", - "CPU times: user 1.29 s, sys: 81.2 ms, total: 1.37 s\n", - "Wall time: 3.79 s\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "%%time\n", "\n", @@ -329,12 +213,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Nothing is perfect; if you get RuntimeErrors with asyncio, you may need to restart your kernel. " + "Nothing is perfect; if you get RuntimeErrors with asyncio, you may need to restart your kernel. More during my colleagues aiohttp tutorial this Afternoon" ] }, { "cell_type": "code", - "execution_count": 17, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -343,17 +227,9 @@ }, { "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "['Lord Snow', \"Ned Stark's Bastard\", 'The Snow of Winterfell', 'The Crow-Come-Over', \"The 998th Lord Commander of the Night's Watch\", 'The Bastard of Winterfell', 'The Black Bastard of the Wall', 'Lord Crow']\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "async with aiohttp.ClientSession() as session:\n", " response = await session.get(tpl.format(583))\n", @@ -363,7 +239,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -377,17 +253,9 @@ }, { "cell_type": "code", - "execution_count": 35, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - ".x['Dany', 'Daenerys Stormborn', 'The Unburnt', 'Mother of Dragons', 'Mother', 'Mhysa', 'The Silver Queen', 'Silver Lady', 'Dragonmother', 'The Dragon Queen', \"The Mad King's daughter\"]\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "async with aiohttp.ClientSession() as s:\n", " print(await get_char(1303, s))" @@ -395,7 +263,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -404,65 +272,9 @@ }, { "cell_type": "code", - "execution_count": 37, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - ".................................................xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx['The Daughter of the Dusk']\n", - "['Hodor']\n", - "['Lamprey']\n", - "['The Merling Queen']\n", - "['Old Crackbones']\n", - "['The Poetess']\n", - "['Porridge']\n", - "['Quickfinger']\n", - "[\"the Sailor's Wife\"]\n", - "['The Veiled Lady']\n", - "['The waif']\n", - "['Balon the Brave', 'Balon the Blessed', 'Balon the Twice Crowned', 'Balon the Widowmaker', 'The Kraken King']\n", - "['']\n", - "['']\n", - "['The High Sparrow']\n", - "['The Little Queen', 'The Little Rose', 'Maid Margaery']\n", - "['']\n", - "['']\n", - "['']\n", - "['']\n", - "['']\n", - "['']\n", - "['']\n", - "['']\n", - "['']\n", - "['']\n", - "['The Lion of Lannister', 'The Old Lion', 'The Great Lion of the Rock']\n", - "['']\n", - "['']\n", - "['']\n", - "['']\n", - "['']\n", - "['Addam of Hull']\n", - "['The Bastard of Cornfield']\n", - "['']\n", - "['Jinglebell']\n", - "['Aegon Bloodborn']\n", - "['Aegon the Conqueror', 'Aegon the Dragon', 'Aegon the Dragonlord']\n", - "['Aegon the Elder', 'Aegon the Usurper']\n", - "['Aegon the Younger', 'Aegon the Dragonbane', 'Aegon the Unlucky', 'The Broken King']\n", - "['Aegon the Unworthy']\n", - "['Young Griff']\n", - "['']\n", - "['']\n", - "['']\n", - "['Aegon the Unlikely', 'Aegon the Fortunate', 'The Prince Who Was An Eggg']\n", - "['Bittersteel']\n", - "['']\n", - "['']\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "import asyncio\n", "async with aiohttp.ClientSession() as session:\n", @@ -491,7 +303,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -500,7 +312,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -512,7 +324,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -521,104 +333,9 @@ }, { "cell_type": "code", - "execution_count": 33, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Plic\n", - "Ploc\n", - "Plic\n", - "Plic\n", - "Ploc\n", - "Plic\n", - "Plic\n", - "Ploc\n", - "Plic\n", - "Plic\n", - "Ploc\n", - "Plic\n", - "Plic\n", - "Ploc\n", - "Plic\n", - "Plic\n", - "Ploc\n", - "Plic\n", - "Plic\n", - "Ploc\n", - "Plic\n", - "Plic\n", - "Ploc\n", - "Plic\n", - "Plic\n", - "Ploc\n", - "Plic\n", - "Plic\n", - "Ploc\n", - "Plic\n", - "Plic\n", - "Ploc\n", - "Plic\n", - "Plic\n", - "Ploc\n", - "Plic\n", - "Plic\n", - "Ploc\n", - "Plic\n", - "Plic\n", - "Ploc\n", - "Plic\n", - "Plic\n", - "Ploc\n", - "Plic\n", - "Plic\n", - "Ploc\n", - "Plic\n", - "Plic\n", - "Ploc\n", - "Plic\n", - "Plic\n", - "Ploc\n", - "Plic\n", - "Plic\n", - "Ploc\n", - "Plic\n", - "Plic\n", - "Ploc\n", - "Plic\n", - "Plic\n", - "Ploc\n", - "Plic\n", - "Plic\n", - "Ploc\n", - "Plic\n", - "Plic\n", - "Ploc\n", - "Plic\n", - "Plic\n", - "Ploc\n", - "Plic\n", - "Plic\n", - "Ploc\n", - "Plic\n" - ] - }, - { - "ename": "KeyboardInterrupt", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36masync-def-wrapper\u001b[0;34m()\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/anaconda3/envs/pycon2019/lib/python3.7/site-packages/trio/_core/_run.py\u001b[0m in \u001b[0;36m__aexit__\u001b[0;34m(self, etype, exc, tb)\u001b[0m\n\u001b[1;32m 504\u001b[0m \u001b[0mold_context\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcombined_error_from_nursery\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__context__\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 505\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 506\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mcombined_error_from_nursery\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 507\u001b[0m \u001b[0;32mfinally\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 508\u001b[0m \u001b[0m_\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0m_\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msys\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexc_info\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/anaconda3/envs/pycon2019/lib/python3.7/site-packages/trio/_core/_run.py\u001b[0m in \u001b[0;36mraise_cancel\u001b[0;34m()\u001b[0m\n\u001b[1;32m 749\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mraise_cancel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 750\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_runner\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mki_pending\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mFalse\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 751\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mKeyboardInterrupt\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 752\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 753\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_attempt_abort\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mraise_cancel\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mKeyboardInterrupt\u001b[0m: " - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "async with trio.open_nursery() as nursery:\n", " nursery.start_soon(every, 1, 'Plic')\n", diff --git a/3-back-to-terminal.md b/3-back-to-terminal.md new file mode 100644 index 0000000..a05a994 --- /dev/null +++ b/3-back-to-terminal.md @@ -0,0 +1,13 @@ +# Back to terminal + +You can run the following either in Jupyter/JupyterLab web-based terminal or +using your preferred terminal emulator. The syntax and capabilities will +slightly depends on your platform. + +## Prompt toolkit. + +IPython interface is base on `prompt_toolkit` since version 5.0. + - Multiline editting + - Inference of when to execute vs a new line. + - Tab completion + - edit and subprocesses diff --git a/demo_autoreload.py b/demo_autoreload.py new file mode 100644 index 0000000..88df7b4 --- /dev/null +++ b/demo_autoreload.py @@ -0,0 +1,12 @@ +class MyClass: + + def __init__(self, a=10): + self.a = a + + def square(self): + print('compute square') + return self.a*2 + + # def cube(self): + # print('compute cube') + # return self.a*self.a*self.a From 582e9b3c33e2903aa4dd56954d8283a9bd61bce5 Mon Sep 17 00:00:00 2001 From: Matthias Bussonnier Date: Sun, 28 Apr 2019 12:02:39 -0700 Subject: [PATCH 077/105] remove scipy cert --- scipy_cert/.gitignore | 4 - scipy_cert/README.md | 42 ------ scipy_cert/package-lock.json | 226 --------------------------------- scipy_cert/package.json | 37 ------ scipy_cert/scipy2018.cert.json | 1 - scipy_cert/src/index.ts | 101 --------------- scipy_cert/style/index.css | 91 ------------- scipy_cert/tsconfig.json | 15 --- 8 files changed, 517 deletions(-) delete mode 100644 scipy_cert/.gitignore delete mode 100644 scipy_cert/README.md delete mode 100644 scipy_cert/package-lock.json delete mode 100644 scipy_cert/package.json delete mode 100644 scipy_cert/scipy2018.cert.json delete mode 100644 scipy_cert/src/index.ts delete mode 100644 scipy_cert/style/index.css delete mode 100644 scipy_cert/tsconfig.json diff --git a/scipy_cert/.gitignore b/scipy_cert/.gitignore deleted file mode 100644 index 7c5d9c6..0000000 --- a/scipy_cert/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -*.bundle.* -lib/ -node_modules/ -*.egg-info/ diff --git a/scipy_cert/README.md b/scipy_cert/README.md deleted file mode 100644 index a416c02..0000000 --- a/scipy_cert/README.md +++ /dev/null @@ -1,42 +0,0 @@ -# Scipy Certificate - -SciPy Certificate extension - - -## Prerequisites - -* JupyterLab - -## Installation - -```bash -jupyter labextension install scipy_cert -``` - -## Development - -For a development install (requires npm version 4 or later), do the following in the repository directory: - -```bash -npm install -jupyter labextension link . -``` - -To rebuild the package and the JupyterLab app: - -```bash -npm run build -jupyter lab build -``` - -## Example file. - -The extension renders file with `.json` or `.cert.json` extension, that have the `given` and `event` field. -Example: - -``` -{ - "given": "John Hunter", - "event": "SciPy 2012" -} -``` diff --git a/scipy_cert/package-lock.json b/scipy_cert/package-lock.json deleted file mode 100644 index 3065a30..0000000 --- a/scipy_cert/package-lock.json +++ /dev/null @@ -1,226 +0,0 @@ -{ - "name": "scipy_cert", - "version": "0.1.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@jupyterlab/rendermime-interfaces": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/@jupyterlab/rendermime-interfaces/-/rendermime-interfaces-1.0.10.tgz", - "integrity": "sha512-qApoEHdWmPtyBrvqQras478Nprgyw6Gk7PHT9c5W8lS4eJdNJKsi3zovkeRkUbcFdd2VBgDj/2fzxFMu6DnMUw==", - "requires": { - "@phosphor/coreutils": "1.3.0", - "@phosphor/widgets": "1.5.0" - } - }, - "@phosphor/algorithm": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@phosphor/algorithm/-/algorithm-1.1.2.tgz", - "integrity": "sha1-/R3pEEyafzTpKGRYbd8ufy53eeg=" - }, - "@phosphor/collections": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@phosphor/collections/-/collections-1.1.2.tgz", - "integrity": "sha1-xMC4uREpkF+zap8kPy273kYtq40=", - "requires": { - "@phosphor/algorithm": "1.1.2" - } - }, - "@phosphor/commands": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@phosphor/commands/-/commands-1.4.0.tgz", - "integrity": "sha1-fiNqTAFdrzepWG/eKRiMPawgFi8=", - "requires": { - "@phosphor/algorithm": "1.1.2", - "@phosphor/coreutils": "1.3.0", - "@phosphor/disposable": "1.1.2", - "@phosphor/domutils": "1.1.2", - "@phosphor/keyboard": "1.1.2", - "@phosphor/signaling": "1.2.2" - } - }, - "@phosphor/coreutils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@phosphor/coreutils/-/coreutils-1.3.0.tgz", - "integrity": "sha1-YyktOBwBLFqw0Blug87YKbfgSkI=" - }, - "@phosphor/disposable": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@phosphor/disposable/-/disposable-1.1.2.tgz", - "integrity": "sha1-oZLdai5sadXQnTns8zTauTd4Bg4=", - "requires": { - "@phosphor/algorithm": "1.1.2" - } - }, - "@phosphor/domutils": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@phosphor/domutils/-/domutils-1.1.2.tgz", - "integrity": "sha1-4u/rBS85jEK5O4npurJq8VzABRQ=" - }, - "@phosphor/dragdrop": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@phosphor/dragdrop/-/dragdrop-1.3.0.tgz", - "integrity": "sha1-fOatOdbKIW1ipW94EE0Cp3rmcwc=", - "requires": { - "@phosphor/coreutils": "1.3.0", - "@phosphor/disposable": "1.1.2" - } - }, - "@phosphor/keyboard": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@phosphor/keyboard/-/keyboard-1.1.2.tgz", - "integrity": "sha1-PjIjRFF2QkCpjhSANNWoeXQi3R8=" - }, - "@phosphor/messaging": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@phosphor/messaging/-/messaging-1.2.2.tgz", - "integrity": "sha1-fYlt3TeXuUo0dwje0T2leD23XBQ=", - "requires": { - "@phosphor/algorithm": "1.1.2", - "@phosphor/collections": "1.1.2" - } - }, - "@phosphor/properties": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@phosphor/properties/-/properties-1.1.2.tgz", - "integrity": "sha1-eMx37/RSg52gIlXeSOgUlGzAmig=" - }, - "@phosphor/signaling": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@phosphor/signaling/-/signaling-1.2.2.tgz", - "integrity": "sha1-P8+Xyojji/s1f+j+a/dRM0elFKk=", - "requires": { - "@phosphor/algorithm": "1.1.2" - } - }, - "@phosphor/virtualdom": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@phosphor/virtualdom/-/virtualdom-1.1.2.tgz", - "integrity": "sha1-zlXIbu8x5dDiax3JbqMr1oRFj0E=", - "requires": { - "@phosphor/algorithm": "1.1.2" - } - }, - "@phosphor/widgets": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@phosphor/widgets/-/widgets-1.5.0.tgz", - "integrity": "sha1-X5mOhvX9542KpE19wUdobKZhaB4=", - "requires": { - "@phosphor/algorithm": "1.1.2", - "@phosphor/commands": "1.4.0", - "@phosphor/coreutils": "1.3.0", - "@phosphor/disposable": "1.1.2", - "@phosphor/domutils": "1.1.2", - "@phosphor/dragdrop": "1.3.0", - "@phosphor/keyboard": "1.1.2", - "@phosphor/messaging": "1.2.2", - "@phosphor/properties": "1.1.2", - "@phosphor/signaling": "1.2.2", - "@phosphor/virtualdom": "1.1.2" - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "1.0.0", - "concat-map": "0.0.1" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "1.1.11" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1.0.2" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "dev": true, - "requires": { - "glob": "7.1.2" - } - }, - "typescript": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", - "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==", - "dev": true - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - } - } -} diff --git a/scipy_cert/package.json b/scipy_cert/package.json deleted file mode 100644 index 82cb83b..0000000 --- a/scipy_cert/package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "scipy_cert", - "version": "0.1.0", - "description": "A JupyterLab extension for rendering cert", - "author": "matthias bussonnier ", - "main": "lib/index.js", - "keywords": [ - "jupyter", - "jupyterlab", - "jupyterlab-extension" - ], - "files": [ - "lib/**/*.{d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}", - "style/**/*.{css,eot,gif,html,jpg,json,png,svg,woff2,ttf}", - "style/*.css" - ], - "jupyterlab": { - "mimeExtension": true - }, - "scripts": { - "build": "tsc", - "prepare": "npm run build", - "watch": "tcs -w", - "extension:install": "jupyter labextension install scipy_cert", - "extension:uninstall": "jupyter labextension uninstall scipy_cert", - "extension:enable": "jupyter labextension enable scipy_cert", - "extension:disable": "jupyter labextension disable scipy_cert" - }, - "dependencies": { - "@jupyterlab/rendermime-interfaces": "^1.0.0", - "@phosphor/widgets": "^1.5.0" - }, - "devDependencies": { - "rimraf": "^2.6.2", - "typescript": "~2.9.2" - } -} diff --git a/scipy_cert/scipy2018.cert.json b/scipy_cert/scipy2018.cert.json deleted file mode 100644 index 133c9d5..0000000 --- a/scipy_cert/scipy2018.cert.json +++ /dev/null @@ -1 +0,0 @@ -{"given": "My Name", "event": "Scipy 2018"} \ No newline at end of file diff --git a/scipy_cert/src/index.ts b/scipy_cert/src/index.ts deleted file mode 100644 index f8c9e1a..0000000 --- a/scipy_cert/src/index.ts +++ /dev/null @@ -1,101 +0,0 @@ -import { - IRenderMime -} from '@jupyterlab/rendermime-interfaces'; - -import { - JSONObject -} from '@phosphor/coreutils'; - -import { - Widget -} from '@phosphor/widgets'; - -import '../style/index.css'; - - -/** - * The default mime type for the extension. - */ -const MIME_TYPE = 'application/vnd.scipy2018.certificate'; - -/** - * The class name added to the extension. - */ -const CLASS_NAME = 'jp-OutputWidgetcert'; - - -/** - * A widget for rendering cert. - */ -export -class OutputWidget extends Widget implements IRenderMime.IRenderer { - /** - * Construct a new output widget. - */ - constructor(options: IRenderMime.IRendererOptions) { - super(); - this._mimeType = options.mimeType; - this.addClass(CLASS_NAME); - } - - /** - * Render cert into this widget's node. - */ - renderModel(model: IRenderMime.IMimeModel): Promise { - let mod = model.data[this._mimeType] as JSONObject; - let given = mod['given']; - let ev = mod['event']; - - this.node.innerHTML = ` -
-
-
Certificate
-
${given}
-
For mastery of JupyterLab
-
${ev}
-
-
-
-
-
-` - - //JSON.stringify(model.data[this._mimeType]); - return Promise.resolve(void 0); - } - - private _mimeType: string; -} - - -/** - * A mime renderer factory for cert data. - */ -export -const rendererFactory: IRenderMime.IRendererFactory = { - safe: true, - mimeTypes: [MIME_TYPE], - createRenderer: options => new OutputWidget(options) -}; - -console.log('CERT EXt') -const extension: IRenderMime.IExtension = { - id: 'scipy_cert:plugin', - rendererFactory, - rank: 0, - dataType: 'json', - fileTypes: [{ - name: 'jsoncert', - mimeTypes: [MIME_TYPE], - extensions: ['.json', '.cert.json'], - }], - documentWidgetFactoryOptions: { - name: 'CertViewer', - primaryFileType: 'jsoncert', - fileTypes: ['jsoncert', 'json'], - defaultFor: ['jsoncert'] - } -}; - -export default extension; - diff --git a/scipy_cert/style/index.css b/scipy_cert/style/index.css deleted file mode 100644 index aefbda6..0000000 --- a/scipy_cert/style/index.css +++ /dev/null @@ -1,91 +0,0 @@ - -.cert{ - background-color: #07618B; - width: 350px;height: 250px; - margin-left: 35%;margin-top: 10%; - position: relative; - border-radius: 20px 20px 20px 20px; - -webkit-box-shadow: 0px 5px 10px 0px; - -moz-box-shadow: 0px 5px 10px 0px; - box-shadow: 0px 5px 10px 0px; -} - -.paper{ - position: absolute; - width: 300px; - height: 200px; - background: #E0E0E0; - left: 25px; - top: 25px; - border-radius: 5px 5px 5px 5px; -} - -.cert .medal { - background: #C9992E; - width: 20px; - height: 20px; - top: 30px; - left: 30px; - position: absolute; - padding: 10px 10px 10px 10px; - font-size: 2em; - border-radius: 50%; - z-index:30; -} - -.ribbon1 { - width: 15px; - height: 40px; - background-color: #9bdbf6; - position: absolute; - top: 50px; - left: 35px; - z-index: 1; - -webkit-transform: rotate(30deg); - border-right: 1px solid white; - } -.ribbon2 { - width: 15px; - height: 40px; - background-color: #9bdbf6; - position: absolute; - top: 50px; - left: 50px; - z-index: 1; - -webkit-transform: rotate(150deg); - border-right: 1px solid white; - } - -.title { - background:#E0E0E0; - font-weight: bold; - text-align: center; - margin-top: 20px; - height: 30px; - z-index:999; -} - -.textX { - z-index: 200; - text-align: center; - padding: 0px; - text-align: center; - margin-top: 20px; - } - -.text2 { - background-color: #E0E0E0; - z-index: 200; - padding: 0px 200px; - text-align: center; - margin-left: 50px; - } - -.text3 { - background-color: #B3B3B3; - z-index: 200; - padding: 0px 200px; - text-align: center; - margin-left: 50px; - } - diff --git a/scipy_cert/tsconfig.json b/scipy_cert/tsconfig.json deleted file mode 100644 index fa3c1c1..0000000 --- a/scipy_cert/tsconfig.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "compilerOptions": { - "declaration": true, - "lib": ["es2015", "dom"], - "module": "commonjs", - "moduleResolution": "node", - "noEmitOnError": true, - "noUnusedLocals": true, - "outDir": "./lib", - "strict": true, - "target": "es2015", - "types": [] - }, - "include": ["src/*"] -} From 9e92e78ee873e4e3faaea36ab19ec1588c5e4498 Mon Sep 17 00:00:00 2001 From: Matthias Bussonnier Date: Sun, 28 Apr 2019 12:04:37 -0700 Subject: [PATCH 078/105] jupyterlab intro --- .../Exercise-1 => 4-JupyterLab-UI}/Exercise-1-solutions.ipynb | 0 {jupyterlab-exercises/Exercise-1 => 4-JupyterLab-UI}/Exercise1.md | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename {jupyterlab-exercises/Exercise-1 => 4-JupyterLab-UI}/Exercise-1-solutions.ipynb (100%) rename {jupyterlab-exercises/Exercise-1 => 4-JupyterLab-UI}/Exercise1.md (100%) diff --git a/jupyterlab-exercises/Exercise-1/Exercise-1-solutions.ipynb b/4-JupyterLab-UI/Exercise-1-solutions.ipynb similarity index 100% rename from jupyterlab-exercises/Exercise-1/Exercise-1-solutions.ipynb rename to 4-JupyterLab-UI/Exercise-1-solutions.ipynb diff --git a/jupyterlab-exercises/Exercise-1/Exercise1.md b/4-JupyterLab-UI/Exercise1.md similarity index 100% rename from jupyterlab-exercises/Exercise-1/Exercise1.md rename to 4-JupyterLab-UI/Exercise1.md From 27d7d7ff56e08fdbea25a779cf6bfbb104d50f90 Mon Sep 17 00:00:00 2001 From: Matthias Bussonnier Date: Sun, 28 Apr 2019 12:05:10 -0700 Subject: [PATCH 079/105] remove jlab custom ext --- .../Exercise-5/Certificate.ipynb | 62 ------ jupyterlab-exercises/Exercise-5/Exercise-5.md | 205 ------------------ .../Exercise-5/scipy2018.cert.json | 1 - 3 files changed, 268 deletions(-) delete mode 100644 jupyterlab-exercises/Exercise-5/Certificate.ipynb delete mode 100644 jupyterlab-exercises/Exercise-5/Exercise-5.md delete mode 100644 jupyterlab-exercises/Exercise-5/scipy2018.cert.json diff --git a/jupyterlab-exercises/Exercise-5/Certificate.ipynb b/jupyterlab-exercises/Exercise-5/Certificate.ipynb deleted file mode 100644 index bc4fbf6..0000000 --- a/jupyterlab-exercises/Exercise-5/Certificate.ipynb +++ /dev/null @@ -1,62 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "class Certificate:\n", - " def __init__(self, data):\n", - " self.data = data\n", - " def _repr_mimebundle_(self, include, exclude, **kwargs):\n", - " data = {\n", - " 'application/vnd.jupyterlab.certificate': self.data,\n", - " 'text/plain': 'Certificate for JupyterLab given to %s at %s'%(self.data['given'], self.data['event'])\n", - " }\n", - " if include:\n", - " data = {k:v for (k,v) in data.items() if k in include}\n", - " if exclude:\n", - " data = {k:v for (k,v) in data.items() if k not in exclude}\n", - " return data\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "Certificate({'given': 'My Name', 'event': 'My Event'})" - ] - }, - { - "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.5" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/jupyterlab-exercises/Exercise-5/Exercise-5.md b/jupyterlab-exercises/Exercise-5/Exercise-5.md deleted file mode 100644 index 6aa4826..0000000 --- a/jupyterlab-exercises/Exercise-5/Exercise-5.md +++ /dev/null @@ -1,205 +0,0 @@ -# Exercise 5: Extensions - -Remove all the sticky notes from your screen :-) and attempt the following. -These are _guidelines_, feel free to ere on the side of workflow and -options that suits _you_ if you find them best. - -Keep in mind, if something is not intuitive, or not in the place you expected it, write -it down (for example on the red sticky note), and give it to us at the break. - -## Creating a new blank extension - -We will be using the cookie-cutter project to generate a basic extension. This will generate a basic extension that reads data from a `.cert.json` JSON file and displays it nicely in JupyterLab. - -Open a terminal and run: - -``` -cookiecutter https://github.com/jupyterlab/mimerender-cookiecutter-ts -``` - -At the prompts, enter the following: -``` -author_name []: -author_email []: -extension_name [myextension]: my_certificate_viewer -viewer_name [My Viewer]: Certificate Viewer -mimetype [application/vnd.my_organization.my_type]: application/vnd.jupyterlab.certificate -mimetype_name [my_type]: certificate -file_extension [.my_type]: .cert.json -Select data_format: -1 - string -2 - json -Choose from 1, 2 [1]: 2 -``` - -## Install the extension - -In the terminal, install your new extension - -``` -conda activate scipy18jlab -jupyter labextension install ./my_certificate_viewer -``` - -You can check what extensions are installed with: - -``` -jupyter labextension list -``` - -Refresh your browser to pick up the new extension javascript. - -Test it out by opening the `scipy2018.cert.json` file. Right-clicking on the file should show your viewer in the 'Open with' menu, and double-clicking should open and display the file in a blank tab. - -Right-click on the `scipy2018.cert.json` file and open it in the editor to change the name to your name and the event to "Scipy 2018". Notice that the extension-rendered tab updates in real-time. - -## Customize the display - -In order to develop our extension and have our changes appear automatically, we'll link the extension rather than just installing it. Run the following in your terminal that has the scipy18jlab environment active: - -``` -jupyter labextension link ./my_certificate_viewer -``` - -Now customize the display. Open the `my_certificate_viewer/src/index.ts` TypeScript file. Edit the `renderModel` function to replace the line that sets the `this.node.textContent` line with a bit fancier HTML: - -```javascript - this.node.innerHTML = ` -
-
-
Certificate
-
${data.given}
-
For mastery of JupyterLab
-
${data.event}
-
-
-
-
-
-` -``` - -Now rebuild JupyterLab to incorporate these changes by running the following in your terminal: - -``` -jupyter lab build -``` - -Open the `scipy2018.cert.json` file again to see that things look a bit better. - -## Style the display - -Finally, let's style this certificate to look really nice. Add the following to -the `my_certificate_viewer/style/index.css` file: - -```css -.mimerenderer-certificate .cert{ - background-color: #07618B; - width: 350px;height: 250px; - margin-left: 35%;margin-top: 10%; - position: relative; - border-radius: 20px 20px 20px 20px; - -webkit-box-shadow: 0px 5px 10px 0px; - -moz-box-shadow: 0px 5px 10px 0px; - box-shadow: 0px 5px 10px 0px; -} - -.mimerenderer-certificate .paper{ - position: absolute; - width: 300px; - height: 200px; - background: #E0E0E0; - left: 25px; - top: 25px; - border-radius: 5px 5px 5px 5px; -} - -.mimerenderer-certificate .cert .medal { - background: #C9992E; - width: 20px; - height: 20px; - top: 30px; - left: 30px; - position: absolute; - padding: 10px 10px 10px 10px; - font-size: 2em; - border-radius: 50%; - z-index:30; -} - -.mimerenderer-certificate .ribbon1 { - width: 15px; - height: 40px; - background-color: #9bdbf6; - position: absolute; - top: 50px; - left: 35px; - z-index: 1; - -webkit-transform: rotate(30deg); - border-right: 1px solid white; - } - -.mimerenderer-certificate .ribbon2 { - width: 15px; - height: 40px; - background-color: #9bdbf6; - position: absolute; - top: 50px; - left: 50px; - z-index: 1; - -webkit-transform: rotate(150deg); - border-right: 1px solid white; - } - -.mimerenderer-certificate .title { - background:#E0E0E0; - font-weight: bold; - text-align: center; - margin-top: 20px; - height: 30px; - z-index:999; -} - -.mimerenderer-certificate .textX { - z-index: 200; - text-align: center; - padding: 0px; - text-align: center; - margin-top: 20px; - } - -.mimerenderer-certificate .text2 { - background-color: #E0E0E0; - z-index: 200; - padding: 0px 200px; - text-align: center; - margin-left: 50px; - } - -.mimerenderer-certificate .text3 { - background-color: #B3B3B3; - z-index: 200; - padding: 0px 200px; - text-align: center; - margin-left: 50px; - } - ``` - - Rebuild JupyterLab and open the certificate again to see these changes. - -## Install plugin - -Congratulations! You can now install the extension again to wrap things up. - - ``` -jupyter labextension install ./my_certificate_viewer -``` - -## Notebook - -A mimerender extension is used to render both files and rich outputs in -notebooks. Open the `Certificate.ipynb` notebook and run it. - -## More information - -For more information about writing extensions, especially more substantial ones, see the [XKCD extension tutorial](http://jupyterlab.readthedocs.io/en/stable/developer/xkcd_extension_tutorial.html) in the JupyterLab documentation. \ No newline at end of file diff --git a/jupyterlab-exercises/Exercise-5/scipy2018.cert.json b/jupyterlab-exercises/Exercise-5/scipy2018.cert.json deleted file mode 100644 index d424716..0000000 --- a/jupyterlab-exercises/Exercise-5/scipy2018.cert.json +++ /dev/null @@ -1 +0,0 @@ -{"given": "My Name", "event": "Event"} \ No newline at end of file From a848ec70684b11ab38fd765a4e3c5c726cfa72d8 Mon Sep 17 00:00:00 2001 From: Matthias Bussonnier Date: Sun, 28 Apr 2019 13:33:05 -0700 Subject: [PATCH 080/105] uclear notebooks and instapp rpy2 --- environment.yml | 1 + .../Exercise-2/Exercise-2.md | 0 .../Exercise-2/Notebook A.ipynb | 0 .../Exercise-2/Notebook B.ipynb | 0 .../Exercise-2/Report.md | 0 .../Exercise-2/lib.py | 0 .../Exercise-4/Exercise-4.md | 0 .../Exercise-4/example.json | 0 notebooks/Data.ipynb | 822 +----------------- notebooks/Fasta.ipynb | 13 +- notebooks/Lorenz.ipynb | 12 +- notebooks/bqplot demo.ipynb | 33 +- readme.md | 2 +- 13 files changed, 31 insertions(+), 852 deletions(-) rename {jupyterlab-exercises => extra_exercises}/Exercise-2/Exercise-2.md (100%) rename {jupyterlab-exercises => extra_exercises}/Exercise-2/Notebook A.ipynb (100%) rename {jupyterlab-exercises => extra_exercises}/Exercise-2/Notebook B.ipynb (100%) rename {jupyterlab-exercises => extra_exercises}/Exercise-2/Report.md (100%) rename {jupyterlab-exercises => extra_exercises}/Exercise-2/lib.py (100%) rename {jupyterlab-exercises => extra_exercises}/Exercise-4/Exercise-4.md (100%) rename {jupyterlab-exercises => extra_exercises}/Exercise-4/example.json (100%) diff --git a/environment.yml b/environment.yml index ef48c02..09e8e6c 100644 --- a/environment.yml +++ b/environment.yml @@ -15,3 +15,4 @@ dependencies: - pythreejs - line_profiler - matplotlib + - rpy2 diff --git a/jupyterlab-exercises/Exercise-2/Exercise-2.md b/extra_exercises/Exercise-2/Exercise-2.md similarity index 100% rename from jupyterlab-exercises/Exercise-2/Exercise-2.md rename to extra_exercises/Exercise-2/Exercise-2.md diff --git a/jupyterlab-exercises/Exercise-2/Notebook A.ipynb b/extra_exercises/Exercise-2/Notebook A.ipynb similarity index 100% rename from jupyterlab-exercises/Exercise-2/Notebook A.ipynb rename to extra_exercises/Exercise-2/Notebook A.ipynb diff --git a/jupyterlab-exercises/Exercise-2/Notebook B.ipynb b/extra_exercises/Exercise-2/Notebook B.ipynb similarity index 100% rename from jupyterlab-exercises/Exercise-2/Notebook B.ipynb rename to extra_exercises/Exercise-2/Notebook B.ipynb diff --git a/jupyterlab-exercises/Exercise-2/Report.md b/extra_exercises/Exercise-2/Report.md similarity index 100% rename from jupyterlab-exercises/Exercise-2/Report.md rename to extra_exercises/Exercise-2/Report.md diff --git a/jupyterlab-exercises/Exercise-2/lib.py b/extra_exercises/Exercise-2/lib.py similarity index 100% rename from jupyterlab-exercises/Exercise-2/lib.py rename to extra_exercises/Exercise-2/lib.py diff --git a/jupyterlab-exercises/Exercise-4/Exercise-4.md b/extra_exercises/Exercise-4/Exercise-4.md similarity index 100% rename from jupyterlab-exercises/Exercise-4/Exercise-4.md rename to extra_exercises/Exercise-4/Exercise-4.md diff --git a/jupyterlab-exercises/Exercise-4/example.json b/extra_exercises/Exercise-4/example.json similarity index 100% rename from jupyterlab-exercises/Exercise-4/example.json rename to extra_exercises/Exercise-4/example.json diff --git a/notebooks/Data.ipynb b/notebooks/Data.ipynb index 5c849fc..ce10148 100644 --- a/notebooks/Data.ipynb +++ b/notebooks/Data.ipynb @@ -9,231 +9,9 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
sepal_lengthsepal_widthpetal_lengthpetal_widthspecies
05.13.51.40.2se
14.93.01.40.2setosa
24.73.21.30.2setosa
34.63.11.50.2setosa
45.03.61.40.2setosa
55.43.91.70.4setosa
64.63.41.40.3setosa
75.03.41.50.2setosa
84.42.91.40.2setosa
94.93.11.50.1setosa
105.43.71.50.2setosa
114.83.41.60.2setosa
124.83.01.40.1setosa
134.33.01.10.1setosa
145.84.01.20.2setosa
155.74.41.50.4setosa
165.43.91.30.4setosa
175.13.51.40.3setosa
185.73.81.70.3setosa
195.13.81.50.3setosa
\n", - "
" - ], - "text/plain": [ - " sepal_length sepal_width petal_length petal_width species\n", - "0 5.1 3.5 1.4 0.2 se\n", - "1 4.9 3.0 1.4 0.2 setosa\n", - "2 4.7 3.2 1.3 0.2 setosa\n", - "3 4.6 3.1 1.5 0.2 setosa\n", - "4 5.0 3.6 1.4 0.2 setosa\n", - "5 5.4 3.9 1.7 0.4 setosa\n", - "6 4.6 3.4 1.4 0.3 setosa\n", - "7 5.0 3.4 1.5 0.2 setosa\n", - "8 4.4 2.9 1.4 0.2 setosa\n", - "9 4.9 3.1 1.5 0.1 setosa\n", - "10 5.4 3.7 1.5 0.2 setosa\n", - "11 4.8 3.4 1.6 0.2 setosa\n", - "12 4.8 3.0 1.4 0.1 setosa\n", - "13 4.3 3.0 1.1 0.1 setosa\n", - "14 5.8 4.0 1.2 0.2 setosa\n", - "15 5.7 4.4 1.5 0.4 setosa\n", - "16 5.4 3.9 1.3 0.4 setosa\n", - "17 5.1 3.5 1.4 0.3 setosa\n", - "18 5.7 3.8 1.7 0.3 setosa\n", - "19 5.1 3.8 1.5 0.3 setosa" - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "import pandas\n", "df = pandas.read_csv('../data/iris.csv')\n", @@ -249,7 +27,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -261,593 +39,19 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'type': 'FeatureCollection',\n", - " 'features': [{'type': 'Feature',\n", - " 'properties': {'OBJECTID': 1,\n", - " 'ADDRESS': '716 MONROE STREET NE',\n", - " 'NAME': 'AMERICAN POETRY MUSEUM',\n", - " 'ADDRESS_ID': 309744,\n", - " 'LEGALNAME': 'HERITAGE US',\n", - " 'ALTNAME': 'AMERICAN POETRY MUSEUM',\n", - " 'WEBURL': ' http://americanpoetrymuseum.org/'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-76.995003703568, 38.9328428790235]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 2,\n", - " 'ADDRESS': '719 6TH STREET NW',\n", - " 'NAME': 'GERMAN-AMERICAN HERITAGE MUSEUM',\n", - " 'ADDRESS_ID': 238949,\n", - " 'LEGALNAME': 'CORCORAN GALLERY OF ART',\n", - " 'ALTNAME': ' ',\n", - " 'WEBURL': 'http://gahmusa.org/'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-77.01958878310639, 38.89911061096782]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 3,\n", - " 'ADDRESS': '1307 NEW HAMPSHIRE AVENUE NW',\n", - " 'NAME': 'HEURICH HOUSE FOUNDATION',\n", - " 'ADDRESS_ID': 241060,\n", - " 'LEGALNAME': 'U.S. DEPARTMENT OF THE INTERIOR MUSEUM',\n", - " 'ALTNAME': 'HEURICH HOUSE FOUNDATION',\n", - " 'WEBURL': 'HTTP://HEURICHHOUSE.ORG'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-77.04460619923155, 38.908030206509885]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 4,\n", - " 'ADDRESS': '950 INDEPENDENCE AVENUE SW',\n", - " 'NAME': 'NATIONAL MUSEUM OF AFRICAN ART',\n", - " 'ADDRESS_ID': 293262,\n", - " 'LEGALNAME': 'BUILDING PRESERVATION FOUNDATION',\n", - " 'ALTNAME': 'NATIONAL MUSEUM OF AFRICAN ART',\n", - " 'WEBURL': 'HTTP://AFRICA.SI.EDU/'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-77.02550917725944, 38.88796214949963]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 5,\n", - " 'ADDRESS': '740 JACKSON PLACE NW',\n", - " 'NAME': 'THE WHITE HOUSE ENDOWMENT TRUST',\n", - " 'ADDRESS_ID': 218748,\n", - " 'LEGALNAME': 'NATIONAL BUILDING MUSEUM',\n", - " 'ALTNAME': 'THE WHITE HOUSE ENDOWMENT TRUST',\n", - " 'WEBURL': 'HTTP://WWW.WHITEHOUSEHISTORY.ORG'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-77.03820629325264, 38.899842529027275]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 6,\n", - " 'ADDRESS': '921 PENNSYLVANIA AVENUE SE',\n", - " 'NAME': 'OLD NAVAL HOSPITAL FOUNDATION',\n", - " 'ADDRESS_ID': 82564,\n", - " 'LEGALNAME': 'JEWISH WAR VETERANS NATIONAL MEMORIAL MUSEUM ARCHIVES AND LI',\n", - " 'ALTNAME': 'OLD NAVAL HOSPITAL FOUNDATION',\n", - " 'WEBURL': 'http://hillcenterdc.org/home/'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-76.99314290714912, 38.8829885933721]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 7,\n", - " 'ADDRESS': '2201 C STREET NW',\n", - " 'NAME': 'DIPLOMATIC ROOMS FOUNDATION',\n", - " 'ADDRESS_ID': 243360,\n", - " 'LEGALNAME': 'NATIONAL PLASTICS MUSEUM INC',\n", - " 'ALTNAME': 'DIPLOMATIC ROOMS FOUNDATION',\n", - " 'WEBURL': 'https://diplomaticrooms.state.gov/home.aspx'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-77.04831079505838, 38.894135140073566]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 8,\n", - " 'ADDRESS': '4400 MASSACHUSETTS AVENUE NW',\n", - " 'NAME': 'AMERICAN UNIVERSITY MUSEUM AT THE KATZEN ARTS CENTER',\n", - " 'ADDRESS_ID': 223994,\n", - " 'LEGALNAME': 'VERNISSAGE FOUNDATION',\n", - " 'ALTNAME': 'AMERICAN UNIVERSITY MUSEUM AT THE KATZEN ARTS CENTER',\n", - " 'WEBURL': 'HTTP://WWW.AMERICAN.EDU/CAS/MUSEUM/'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-77.08841712551974, 38.9390892139132]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 9,\n", - " 'ADDRESS': '2320 S STREET NW',\n", - " 'NAME': 'TEXTILE MUSEUM',\n", - " 'ADDRESS_ID': 243164,\n", - " 'LEGALNAME': 'SMITHSONIAN INSTITUTION, S. DILLON RIPLEY CENTER',\n", - " 'ALTNAME': 'TEXTILE MUSEUM',\n", - " 'WEBURL': 'HTTP://WWW.TEXTILEMUSEUM.ORG'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-77.0464284034822, 38.89880233850966]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 10,\n", - " 'ADDRESS': '1145 17TH STREET NW',\n", - " 'NAME': 'NATIONAL GEOGRAPHIC MUSEUM',\n", - " 'ADDRESS_ID': 290192,\n", - " 'LEGALNAME': 'CAPITOL HILL RESTORATION SOCIETY INC',\n", - " 'ALTNAME': ' ',\n", - " 'WEBURL': 'HTTP://WWW.NATIONALGEOGRAPHIC.COM'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-77.03815544194862, 38.90519711304962]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 11,\n", - " 'ADDRESS': '3501 NEW YORK AVENUE NE',\n", - " 'NAME': 'THE NATIONAL BONSAI & PENJING MUSEUM',\n", - " 'ADDRESS_ID': 293238,\n", - " 'LEGALNAME': 'NATIONAL BONSAI FOUNDATION',\n", - " 'ALTNAME': ' ',\n", - " 'WEBURL': 'https://www.bonsai-nbf.org/contact-us/'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-76.96989266812075, 38.91241055669072]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 12,\n", - " 'ADDRESS': '2020 O STREET NW',\n", - " 'NAME': 'O STREET MUSEUM',\n", - " 'ADDRESS_ID': 243057,\n", - " 'LEGALNAME': 'LEPIDOPTERISTS SOCIETY',\n", - " 'ALTNAME': ' ',\n", - " 'WEBURL': 'http://www.omuseum.org/museum/'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-77.04592748104784, 38.90839101941751]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 13,\n", - " 'ADDRESS': '2101 CONSTITUTION AVENUE NW',\n", - " 'NAME': 'NATIONAL ACADEMY OF SCIENCES',\n", - " 'ADDRESS_ID': 242716,\n", - " 'LEGALNAME': 'SMITHSONIAN INSTITUTION, NATURAL HISTORY MUSEUM',\n", - " 'ALTNAME': 'NATIONAL ACADEMY OF SCIENCES',\n", - " 'WEBURL': 'WWW.NATIONALACADEMIES.ORG/NAS/ARTS'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-77.0476448925699, 38.89296693766957]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 14,\n", - " 'ADDRESS': '2401 FOXHALL ROAD NW',\n", - " 'NAME': 'KREEGER MUSEUM',\n", - " 'ADDRESS_ID': 271251,\n", - " 'LEGALNAME': 'CONGRESSIONAL CEMETERY',\n", - " 'ALTNAME': 'KREEGER MUSEUM',\n", - " 'WEBURL': 'HTTP://WWW.KREEGERMUSEUM.ORG/'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-77.08878098790044, 38.92191197499568]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 15,\n", - " 'ADDRESS': '1250 NEW YORK AVENUE NW',\n", - " 'NAME': 'THE NATIONAL MUSEUM OF WOMEN IN THE ART',\n", - " 'ADDRESS_ID': 279010,\n", - " 'LEGALNAME': 'NATIONAL MUSEUM OF HEALTH AND MEDICINE',\n", - " 'ALTNAME': 'THE NATIONAL MUSEUM OF WOMEN IN THE ART',\n", - " 'WEBURL': 'HTTP://WWW.NMWA.ORG'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-77.029163689541, 38.90005647268176]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 16,\n", - " 'ADDRESS': '900 JEFFERSON DRIVE SW',\n", - " 'NAME': 'ARTS AND INDUSTRIES BUILDING',\n", - " 'ADDRESS_ID': 293260,\n", - " 'LEGALNAME': 'ANACOSTIA COMMUNITY MUSEUM',\n", - " 'ALTNAME': ' ',\n", - " 'WEBURL': 'http://www.si.edu/Museums/arts-and-industries-building'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-77.02446647929001, 38.888201004559114]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 17,\n", - " 'ADDRESS': '736 SICARD STREET SE',\n", - " 'NAME': 'NATIONAL MUSEUM OF UNITED STATES NAVY',\n", - " 'ADDRESS_ID': 311896,\n", - " 'LEGALNAME': 'BLACK SPORTS LEGENDS FOUNDATION',\n", - " 'ALTNAME': 'NATIONAL MUSEUM OF UNITED STATES NAVY',\n", - " 'WEBURL': 'http://www.history.navy.mil/museums/NationalMuseum/org8-1.htm'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-76.99526950368147, 38.87303084860059]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 18,\n", - " 'ADDRESS': '500 17TH STREET NW',\n", - " 'NAME': 'CORCORAN GALLERY OF ART',\n", - " 'ADDRESS_ID': 279802,\n", - " 'LEGALNAME': 'SMITHSONIAN INSTITUTION, NATIONAL ZOOLOGICAL PARK',\n", - " 'ALTNAME': 'CORCORAN GALLERY OF ART',\n", - " 'WEBURL': 'http://www.corcoran.org/'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-77.0397427304576, 38.895854463821884]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 19,\n", - " 'ADDRESS': '2017 I STREET NW',\n", - " 'NAME': 'THE ARTS CLUB OF WASHINGTON',\n", - " 'ADDRESS_ID': 285527,\n", - " 'LEGALNAME': 'SMITHSONIAN INSTITUTION, NATIONAL MUSEUM OF AFRICAN AMERICAN HISTORY AND CULTURE',\n", - " 'ALTNAME': 'THE ARTS CLUB OF WASHINGTON',\n", - " 'WEBURL': 'HTTP://WWW.ARTSCLUBOFWASHINGTON.ORG'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-77.04573426864144, 38.90157618582308]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 20,\n", - " 'ADDRESS': '701 3RD STREET NW',\n", - " 'NAME': 'LILLIAN AND ALBERT SMALL JEWISH MUSEUM',\n", - " 'ADDRESS_ID': 293253,\n", - " 'LEGALNAME': 'LILLIAN AND ALBERT SMALL JEWISH MUSEUM',\n", - " 'ALTNAME': ' ',\n", - " 'WEBURL': 'http://www.jhsgw.org/'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-77.01493675564363, 38.89857205791096]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 21,\n", - " 'ADDRESS': '320 A STREET NE',\n", - " 'NAME': 'FREDERICK DOUGLASS MUSEUM',\n", - " 'ADDRESS_ID': 38979,\n", - " 'LEGALNAME': 'COSMOS CLUB HISTORIC PRESERVATION FOUNDATION',\n", - " 'ALTNAME': ' ',\n", - " 'WEBURL': 'http://www3.nahc.org/fd/'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-77.00110470253333, 38.891131915241964]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 22,\n", - " 'ADDRESS': '1334 G STREET NW',\n", - " 'NAME': 'ARMENIAN GENOCIDE MUSEUM AND MEMORIAL',\n", - " 'ADDRESS_ID': 240658,\n", - " 'LEGALNAME': 'GERMAN-AMERICAN HERITAGE MUSEUM',\n", - " 'ALTNAME': 'ARMENIAN GENOCIDE MUSEUM AND MEMORIAL',\n", - " 'WEBURL': 'http://www.armeniangenocidemuseum.org/'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-77.03108432435003, 38.89804891426683]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 23,\n", - " 'ADDRESS': '1799 NEW YORK AVENUE NW',\n", - " 'NAME': 'OCTAGON MUSEUM',\n", - " 'ADDRESS_ID': 218490,\n", - " 'LEGALNAME': 'AMERICAN RED CROSS MUSEUM',\n", - " 'ALTNAME': ' ',\n", - " 'WEBURL': 'HTTP://WWW.THEOCTAGON.ORG'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-77.04141820048949, 38.89635375607101]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 24,\n", - " 'ADDRESS': '1901 FORT PLACE SE',\n", - " 'NAME': 'ANACOSTIA COMMUNITY MUSEUM',\n", - " 'ADDRESS_ID': 286524,\n", - " 'LEGALNAME': 'FAUNA & FLORA INTERNATIONAL INC',\n", - " 'ALTNAME': 'ANACOSTIA COMMUNITY MUSEUM',\n", - " 'WEBURL': 'HTTP://ANACOSTIA.SI.EDU'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-76.97678467186984, 38.8565826636904]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 25,\n", - " 'ADDRESS': '2312 CALIFORNIA STREET NW',\n", - " 'NAME': 'NATIONAL MUSEUM OF THE JEWISH PEOPLE',\n", - " 'ADDRESS_ID': 234961,\n", - " 'LEGALNAME': 'GREENSEED COMMUNITY GARDEN LAND TRUST',\n", - " 'ALTNAME': ' ',\n", - " 'WEBURL': 'http://www.nsideas.com/archive/nmjh/'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-77.05118108814123, 38.91537084189858]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 26,\n", - " 'ADDRESS': '430 17TH STREET NW',\n", - " 'NAME': 'AMERICAN RED CROSS MUSEUM',\n", - " 'ADDRESS_ID': 300987,\n", - " 'LEGALNAME': 'DOUBLE M MANAGEMENT',\n", - " 'ALTNAME': 'AMERICAN RED CROSS MUSEUM',\n", - " 'WEBURL': 'http://www.redcross.org/'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-77.04020705622152, 38.89482654014118]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 27,\n", - " 'ADDRESS': '1600 21ST STREET NW',\n", - " 'NAME': 'THE PHILLIPS COLLECTION',\n", - " 'ADDRESS_ID': 243333,\n", - " 'LEGALNAME': 'SMITHSONIAN INSTITUTION, RENWICK GALLERY',\n", - " 'ALTNAME': 'THE PHILLIPS COLLECTION',\n", - " 'WEBURL': 'HTTP://WWW.PHILLIPSCOLLECTION.ORG'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-77.04685454590388, 38.91150979086159]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 28,\n", - " 'ADDRESS': '800 F STREET NW',\n", - " 'NAME': 'INTERNATIONAL SPY MUSEUM',\n", - " 'ADDRESS_ID': 238378,\n", - " 'LEGALNAME': 'CONFEDERATE MEMORIAL HALL ASSOCIATION',\n", - " 'ALTNAME': 'INTERNATIONAL SPY MUSEUM',\n", - " 'WEBURL': 'HTTP://WWW.SPYMUSEUM.ORG/'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-77.02328618491306, 38.896986480912865]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 29,\n", - " 'ADDRESS': '100 RAOUL WALLENBERG PLACE SW',\n", - " 'NAME': 'UNITED STATES HOLOCAUST MEMORIAL MUSEUM',\n", - " 'ADDRESS_ID': 293186,\n", - " 'LEGALNAME': 'NATIONAL MUSIC CENTER AND MUSEUM FOUNDATION',\n", - " 'ALTNAME': 'UNITED STATES HOLOCAUST MEMORIAL MUSEUM',\n", - " 'WEBURL': 'HTTP://WWW.USHMM.ORG'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-77.03268853739414, 38.88668873773371]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 30,\n", - " 'ADDRESS': '801 K STREET NW',\n", - " 'NAME': 'HISTORICAL SOCIETY OF WASHINGTON DC',\n", - " 'ADDRESS_ID': 238956,\n", - " 'LEGALNAME': 'Historical Society of Washington, D.C',\n", - " 'ALTNAME': ' ',\n", - " 'WEBURL': 'http://www.dchistory.org/'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-77.02294505078932, 38.90262956584554]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 31,\n", - " 'ADDRESS': '1849 C STREET NW',\n", - " 'NAME': 'INTERIOR MUSEUM',\n", - " 'ADDRESS_ID': 293214,\n", - " 'LEGALNAME': 'VICE PRESIDENTS RESIDENCE FOUNDATION',\n", - " 'ALTNAME': 'INTERIOR MUSEUM',\n", - " 'WEBURL': 'HTTP://WWW.DOI.GOV/INTERIORMUSEUM'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-77.04260256434321, 38.89445283458921]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 32,\n", - " 'ADDRESS': '4155 LINNEAN AVENUE NW',\n", - " 'NAME': 'HILLWOOD MUSEUM & GARDENS',\n", - " 'ADDRESS_ID': 284839,\n", - " 'LEGALNAME': 'SMITHSONIAN INSTITUTION, NATIONAL GALLERY OF ART',\n", - " 'ALTNAME': 'HILLWOOD MUSEUM & GARDENS',\n", - " 'WEBURL': 'WWW.HILLWOODMUSEUM.ORG'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-77.0526196505072, 38.94364171194315]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 33,\n", - " 'ADDRESS': '1318 VERMONT AVENUE NW',\n", - " 'NAME': 'BETHUNE MEMORIAL MUSEUM',\n", - " 'ADDRESS_ID': 225385,\n", - " 'LEGALNAME': 'NATIONAL MUSEUM OF WOMEN IN THE ARTS INC',\n", - " 'ALTNAME': ' ',\n", - " 'WEBURL': 'http://www.nps.gov/mamc/index.htm'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-77.03086564182146, 38.90817580546652]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 34,\n", - " 'ADDRESS': '1500 MASSACHUSETTS AVENUE NW',\n", - " 'NAME': 'NATIONAL MUSEUM OF CATHOLIC ART AND LIBRARY',\n", - " 'ADDRESS_ID': 242324,\n", - " 'LEGALNAME': 'KREEGER MUSEUM',\n", - " 'ALTNAME': ' ',\n", - " 'WEBURL': 'http://nmcal.org/nmcah_exhibition_in_washington.html'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-77.03551120800971, 38.90651019329394]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 35,\n", - " 'ADDRESS': '1 MASSACHUSETTS AVENUE NW',\n", - " 'NAME': 'NATIONAL GUARD MEMORIAL MUSEUM',\n", - " 'ADDRESS_ID': 238009,\n", - " 'LEGALNAME': 'CARL SCHMITT FOUNDATION INC',\n", - " 'ALTNAME': ' ',\n", - " 'WEBURL': 'HTTP://WWW.NGEF.ORG'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-77.00956143652462, 38.89812580681995]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 36,\n", - " 'ADDRESS': '1811 R STREET NW',\n", - " 'NAME': 'NATIONAL MUSEUM OF AMERICAN JEWISH MILITARY HISTORY',\n", - " 'ADDRESS_ID': 243292,\n", - " 'LEGALNAME': 'CITY TAVERN PRESERVATION FOUNDATION',\n", - " 'ALTNAME': 'JEWISH WAR VETERANS NATIONAL MEMORIAL MUSEUM ARCHIVES AND LIBRARY',\n", - " 'WEBURL': 'http://www.nmajmh.org/'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-77.04211577477285, 38.91282059721026]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 37,\n", - " 'ADDRESS': '3900 HAREWOOD ROAD NE',\n", - " 'NAME': 'POPE JOHN PAUL II CULTURAL CENTER',\n", - " 'ADDRESS_ID': 288031,\n", - " 'LEGALNAME': 'AMERICAN POETRY MUSEUM',\n", - " 'ALTNAME': ' ',\n", - " 'WEBURL': 'HTTP://WWW.JP2CC.ORG'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-77.00466710351098, 38.93776654366721]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 38,\n", - " 'ADDRESS': '700 PENNSYLVANIA AVENUE NW',\n", - " 'NAME': 'NATIONAL ARCHIVES MUSEUM',\n", - " 'ADDRESS_ID': 293251,\n", - " 'LEGALNAME': 'PHILLIPS COLLECTION',\n", - " 'ALTNAME': 'NATIONAL ARCHIVES MUSEUM',\n", - " 'WEBURL': 'https://www.archives.gov/dc-metro/washington/'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-77.0228592459719, 38.89285370583677]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 39,\n", - " 'ADDRESS': '201 18TH STREET NW',\n", - " 'NAME': 'ART MUSEUM OF THE AMERICAS',\n", - " 'ADDRESS_ID': 294191,\n", - " 'LEGALNAME': 'Art Museum of the Americas',\n", - " 'ALTNAME': ' ',\n", - " 'WEBURL': 'http://www.museum.oas.org/'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-77.04147388756545, 38.892799844291474]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 40,\n", - " 'ADDRESS': '9 HILLYER COURT NW',\n", - " 'NAME': 'INTERNATIONAL ARTS & ARTISTS',\n", - " 'ADDRESS_ID': 279975,\n", - " 'LEGALNAME': 'THE INTERNATIONAL SPY MUSEUM',\n", - " 'ALTNAME': 'INTERNATIONAL ARTS & ARTISTS',\n", - " 'WEBURL': 'WWW.ARTSANDARTISTS.ORG'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-77.04730884101534, 38.91222144699389]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 41,\n", - " 'ADDRESS': '2 MASSACHUSETTS AVENUE NE',\n", - " 'NAME': 'NATIONAL POSTAL MUSEUM',\n", - " 'ADDRESS_ID': 293217,\n", - " 'LEGALNAME': 'BEAD SOCIETY OF GREATER WASHINGTON',\n", - " 'ALTNAME': 'NATIONAL POSTAL MUSEUM',\n", - " 'WEBURL': 'HTTP://POSTALMUSEUM.SI.EDU'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-77.00819124512859, 38.8981463599396]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 42,\n", - " 'ADDRESS': '1519 MONROE STREET NW',\n", - " 'NAME': 'POWHATAN MUSEUM',\n", - " 'ADDRESS_ID': 234557,\n", - " 'LEGALNAME': 'AMERICAN UNIVERSITY MUSEUM',\n", - " 'ALTNAME': ' ',\n", - " 'WEBURL': 'http://www.powhatanmuseum.com/'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-77.03550660261739, 38.93243814726252]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 43,\n", - " 'ADDRESS': '144 CONSTITUTION AVENUE NE',\n", - " 'NAME': 'SEWALL-BELMONT HOUSE AND MUSEUM',\n", - " 'ADDRESS_ID': 286201,\n", - " 'LEGALNAME': 'AMERICAN MUSEUM OF PEACE INC',\n", - " 'ALTNAME': ' ',\n", - " 'WEBURL': 'HTTP://WWW.SEWALLBELMONT.ORG'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-77.00375845550963, 38.89219466787653]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 44,\n", - " 'ADDRESS': '802 MASSACHUSETTS AVENUE NE',\n", - " 'NAME': 'SHOOK MUSEUM FOUNDATION',\n", - " 'ADDRESS_ID': 79669,\n", - " 'LEGALNAME': 'GREENPEACE FUND',\n", - " 'ALTNAME': ' ',\n", - " 'WEBURL': 'SHOOKMUSEUM.ORG'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-76.9944246526475, 38.891834530779185]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 45,\n", - " 'ADDRESS': '1400 CONSTITUTION AVENUE NW',\n", - " 'NAME': 'SMITHSONIAN INSTITUTION, NATIONAL MUSEUM OF NATURAL HISTORY',\n", - " 'ADDRESS_ID': 310702,\n", - " 'LEGALNAME': \"B'NAI B'RITH KLUTZNICK MUSEUM\",\n", - " 'ALTNAME': 'SMITHSONIAN INSTITUTION, NATIONAL MUSEUM OF NATURAL HISTORY',\n", - " 'WEBURL': 'http://www.mnh.si.edu/'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-77.02591603234607, 38.89121850995097]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 46,\n", - " 'ADDRESS': '500 HOWARD PLACE NW',\n", - " 'NAME': 'HOWARD UNIVERSITY MUSEUM',\n", - " 'ADDRESS_ID': 243398,\n", - " 'LEGALNAME': 'COLLECTONS STRIES AMRCN MSLIMS',\n", - " 'ALTNAME': ' ',\n", - " 'WEBURL': 'http://www.coas.howard.edu/msrc/museum.html'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-77.0196991986925, 38.922360224748935]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 47,\n", - " 'ADDRESS': '8TH STREET NW AND F ST NW',\n", - " 'NAME': 'NATIONAL PORTRAIT GALLERY',\n", - " 'ADDRESS_ID': 294248,\n", - " 'LEGALNAME': 'BOHEMIA ARTS',\n", - " 'ALTNAME': 'NATIONAL PORTRAIT GALLERY',\n", - " 'WEBURL': 'HTTP://WWW.NPG.SI.EDU'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-77.02295571583119, 38.89815890118559]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 48,\n", - " 'ADDRESS': '14TH STREET NW AND CONSTITUTION AVENUE NW',\n", - " 'NAME': 'NATIONAL MUSEUM OF AFRICAN AMERICAN HISTORY AND CULTURE',\n", - " 'ADDRESS_ID': 903110,\n", - " 'LEGALNAME': 'AMERICANS FOR BATTLEFIELD PRESERVATION',\n", - " 'ALTNAME': 'NATIONAL MUSEUM OF AFRICAN AMERICAN HISTORY AND CULTURE',\n", - " 'WEBURL': 'HTTP://WWW.NMAAHC.SI.EDU/'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-77.03271597832732, 38.89119983415094]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 49,\n", - " 'ADDRESS': '4TH STREET SW AND INDEPENDENCE AVENUE SW',\n", - " 'NAME': 'NATIONAL MUSEUM OF AMERICAN INDIAN',\n", - " 'ADDRESS_ID': 294429,\n", - " 'LEGALNAME': 'BLAIR HOUSE RESTORATION FUND',\n", - " 'ALTNAME': ' ',\n", - " 'WEBURL': 'WWW.NMAI.SI.EDU'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-77.01672595283219, 38.88826561652]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 50,\n", - " 'ADDRESS': '6TH STREET SW AND INDEPENDENCE AVENUE SW',\n", - " 'NAME': 'NATIONAL AIR AND SPACE MUSEUM',\n", - " 'ADDRESS_ID': 301565,\n", - " 'LEGALNAME': 'BETHUNE MEMORIAL MUSEUM',\n", - " 'ALTNAME': 'NATIONAL AIR AND SPACE MUSEUM',\n", - " 'WEBURL': 'HTTP://WWW.NASM.SI.EDU/'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-77.01979999825605, 38.888161175521944]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 51,\n", - " 'ADDRESS': '7THB STREET AND INDEPENDENCE AVENUE SW',\n", - " 'NAME': 'HIRSHHORN MUSEUM AND SCULPTURE GARDEN',\n", - " 'ADDRESS_ID': 294428,\n", - " 'LEGALNAME': 'D.C. OFFICE OF PUBLIC RECORDS AND ARCHIVES',\n", - " 'ALTNAME': 'HIRSHHORN MUSEUM AND SCULPTURE GARDEN',\n", - " 'WEBURL': 'HTTP://HIRSHHORN.SI.EDU/'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-77.02294902891254, 38.88843565656003]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 52,\n", - " 'ADDRESS': 'MADISON DRIVE NW AND 12TH STREET NW',\n", - " 'NAME': 'SMITHSONIAN INSTITUTION, NATIONAL MUSEUM OF AMERICAN HISTORY',\n", - " 'ADDRESS_ID': 293200,\n", - " 'LEGALNAME': None,\n", - " 'ALTNAME': 'SMITHSONIAN INSTITUTION, NATIONAL MUSEUM OF AMERICAN HISTORY',\n", - " 'WEBURL': 'HTTP://AMERICANHISTORY.SI.EDU'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-77.03005156534492, 38.89123181993075]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 53,\n", - " 'ADDRESS': '4TH STREET NW AND MADISON DRIVE NW',\n", - " 'NAME': 'NATIONAL GALLERY OF ART - EAST BUILDING',\n", - " 'ADDRESS_ID': 293209,\n", - " 'LEGALNAME': None,\n", - " 'ALTNAME': None,\n", - " 'WEBURL': 'http://www.nga.gov/content/ngaweb/visit/maps-and-information/east-building.html'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-77.01668919569053, 38.89125721273486]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 54,\n", - " 'ADDRESS': '4TH STREET NW AND MADISON DRIVE NW',\n", - " 'NAME': 'NATIONAL GALLERY OF ART - WEST BUILDING',\n", - " 'ADDRESS_ID': 293249,\n", - " 'LEGALNAME': None,\n", - " 'ALTNAME': None,\n", - " 'WEBURL': 'http://www.nga.gov/content/ngaweb/visit/maps-and-information/west-building.html'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-77.01989150273015, 38.891313914429645]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 55,\n", - " 'ADDRESS': '1000 JEFFERSON DRIVE SW',\n", - " 'NAME': 'SMITHSONIAN INSTITUTION - CASTLE',\n", - " 'ADDRESS_ID': 293187,\n", - " 'LEGALNAME': None,\n", - " 'ALTNAME': None,\n", - " 'WEBURL': 'http://www.si.edu/Museums/smithsonian-institution-building'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-77.02597189316775, 38.88879577572046]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 56,\n", - " 'ADDRESS': '1050 INDEPENDENCE AVENUE SW',\n", - " 'NAME': 'SACKLER GALLERY',\n", - " 'ADDRESS_ID': 293191,\n", - " 'LEGALNAME': 'ARTHUR M. SACKLER GALLERY',\n", - " 'ALTNAME': None,\n", - " 'WEBURL': 'http://www.asia.si.edu/'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-77.02645343758842, 38.88796502751886]}},\n", - " {'type': 'Feature',\n", - " 'properties': {'OBJECTID': 57,\n", - " 'ADDRESS': 'JEFFERSON DRIVE SW AND 12TH STREET SW',\n", - " 'NAME': 'FREER GALLERY',\n", - " 'ADDRESS_ID': 294417,\n", - " 'LEGALNAME': 'FREER GALLERY OF ART',\n", - " 'ALTNAME': None,\n", - " 'WEBURL': 'http://www.asia.si.edu/'},\n", - " 'geometry': {'type': 'Point',\n", - " 'coordinates': [-77.02736845485786, 38.8882746680144]}}]}" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "s" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { @@ -866,7 +70,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.5" + "version": "3.7.3" } }, "nbformat": 4, diff --git a/notebooks/Fasta.ipynb b/notebooks/Fasta.ipynb index ccb7c7f..dead4ca 100644 --- a/notebooks/Fasta.ipynb +++ b/notebooks/Fasta.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": { "collapsed": true }, @@ -30,15 +30,6 @@ " data = f.read()\n", "Fasta(data)" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] } ], "metadata": { @@ -57,7 +48,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.5" + "version": "3.7.3" } }, "nbformat": 4, diff --git a/notebooks/Lorenz.ipynb b/notebooks/Lorenz.ipynb index ee83699..8d21613 100644 --- a/notebooks/Lorenz.ipynb +++ b/notebooks/Lorenz.ipynb @@ -49,7 +49,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c117838837384853ac94223a50ae967d", + "model_id": "acd69dff8aca4639a53fc6a8fdd60c28", "version_major": 2, "version_minor": 0 }, @@ -100,7 +100,7 @@ { "data": { "text/plain": [ - "{'sigma': 25.3, 'beta': 2.6666666666666665, 'rho': 28.0}" + "{'sigma': 10.0, 'beta': 2.6666666666666665, 'rho': 28.0}" ] }, "execution_count": 4, @@ -173,12 +173,14 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] }, - "metadata": {}, + "metadata": { + "needs_background": "light" + }, "output_type": "display_data" } ], @@ -225,7 +227,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.5" + "version": "3.7.3" } }, "nbformat": 4, diff --git a/notebooks/bqplot demo.ipynb b/notebooks/bqplot demo.ipynb index 84fbb04..691b620 100644 --- a/notebooks/bqplot demo.ipynb +++ b/notebooks/bqplot demo.ipynb @@ -28,18 +28,10 @@ "execution_count": 3, "metadata": {}, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/bussonniermatthias/anaconda/envs/scipy18jlab/lib/python3.6/site-packages/bqplot/pyplot.py:603: FutureWarning: Conversion of the second argument of issubdtype from `str` to `str` is deprecated. In future, it will be treated as `np.str_ == np.dtype(str).type`.\n", - " issubdtype(dtype, Scale.scale_types[key].dtype)\n" - ] - }, { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "21f2d6c2a3c14d5296cc8c8391d6124a", + "model_id": "b717fbce96834c8b8ede5f815b586d89", "version_major": 2, "version_minor": 0 }, @@ -86,12 +78,12 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "8dcdd5d482f14e5987931fd81b090ab6", + "model_id": "fbbb39ea4fc1475db8bb1a1cd431668f", "version_major": 2, "version_minor": 0 }, "text/plain": [ - "VBox(children=(Figure(camera_center=[0.0, 0.0, 0.0], height=500, matrix_projection=[0.0, 0.0, 0.0, 0.0, 0.0, 0…" + "VBox(children=(Figure(camera=PerspectiveCamera(fov=46.0, position=(0.0, 0.0, 2.0), quaternion=(0.0, 0.0, 0.0, …" ] }, "metadata": {}, @@ -100,15 +92,12 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "3496c5ad11f84073b93997326848a292", + "model_id": "5f0a0975932947caa4505132891f6982", "version_major": 2, "version_minor": 0 }, "text/plain": [ - "Mesh(texture=None, triangles=array([[ 0, 40, 41],\n", - " [ 0, 41, 1],\n", - " [ 1, 41, 42],\n", - "…" + "Mesh(line_material=ShaderMaterial(), material=ShaderMaterial(side='DoubleSide'), texture=None, triangles=array…" ] }, "metadata": {}, @@ -124,18 +113,10 @@ "execution_count": 7, "metadata": {}, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/bussonniermatthias/anaconda/envs/scipy18jlab/lib/python3.6/site-packages/bqplot/pyplot.py:603: FutureWarning: Conversion of the second argument of issubdtype from `str` to `str` is deprecated. In future, it will be treated as `np.str_ == np.dtype(str).type`.\n", - " issubdtype(dtype, Scale.scale_types[key].dtype)\n" - ] - }, { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "ec940529bf8d411db95690aa0f7fa4cf", + "model_id": "9a26f3cb1b984e7fb1a3f106e5247d22", "version_major": 2, "version_minor": 0 }, @@ -180,7 +161,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.5" + "version": "3.7.3" } }, "nbformat": 4, diff --git a/readme.md b/readme.md index d678d17..ef5ba10 100644 --- a/readme.md +++ b/readme.md @@ -43,7 +43,7 @@ you are using a different python distribution. Create a conda environment: ``` - conda create -n pycon2019 -c conda-forge --override-channels --yes python=3.7 pip cookiecutter=1.6 'notebook=5.7' pandas=0.24 nodejs=9.11 jupyterlab bqplot ipyvolume pythreejs aiohttp line_profiler matplotlib + conda create -n pycon2019 -c conda-forge --override-channels --yes python=3.7 pip cookiecutter=1.6 'notebook=5.7' pandas=0.24 nodejs=9.11 jupyterlab bqplot ipyvolume pythreejs aiohttp line_profiler matplotlib rpy2 ``` (You could instead create the environment from the supplied environment file with `conda env create -f pycon2019-jupyterlab-tutorial/environment.yml`) From dcebcb1839151e7d2b5011c6c11ac68ae99f915d Mon Sep 17 00:00:00 2001 From: Matthias Bussonnier Date: Sun, 28 Apr 2019 13:34:39 -0700 Subject: [PATCH 081/105] dont forget to install simplegenerics --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index ef5ba10..7f31aac 100644 --- a/readme.md +++ b/readme.md @@ -43,7 +43,7 @@ you are using a different python distribution. Create a conda environment: ``` - conda create -n pycon2019 -c conda-forge --override-channels --yes python=3.7 pip cookiecutter=1.6 'notebook=5.7' pandas=0.24 nodejs=9.11 jupyterlab bqplot ipyvolume pythreejs aiohttp line_profiler matplotlib rpy2 + conda create -n pycon2019 -c conda-forge --override-channels --yes python=3.7 pip cookiecutter=1.6 'notebook=5.7' pandas=0.24 nodejs=9.11 jupyterlab bqplot ipyvolume pythreejs aiohttp line_profiler matplotlib rpy2 simplegenerics ``` (You could instead create the environment from the supplied environment file with `conda env create -f pycon2019-jupyterlab-tutorial/environment.yml`) From 0704a497de6bce332ec43a6fa975d45f298fe451 Mon Sep 17 00:00:00 2001 From: Matthias Bussonnier Date: Sun, 28 Apr 2019 13:39:05 -0700 Subject: [PATCH 082/105] track beyond plain --- 1 - Beyond Plain Python.ipynb | 839 ++++++++++++++++++++++++++++++++++ 1 file changed, 839 insertions(+) create mode 100644 1 - Beyond Plain Python.ipynb diff --git a/1 - Beyond Plain Python.ipynb b/1 - Beyond Plain Python.ipynb new file mode 100644 index 0000000..c2dbd5e --- /dev/null +++ b/1 - Beyond Plain Python.ipynb @@ -0,0 +1,839 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# IPython: beyond plain Python" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "When executing code in IPython, all valid Python syntax works as-is, but IPython provides a number of features designed to make the interactive experience more fluid and efficient." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## First things first: running code, getting help" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the notebook, to run a cell of code, hit `Shift-Enter`. This executes the cell and puts the cursor in the next cell below, or makes a new one if you are at the end. Alternately, you can use:\n", + " \n", + "- `Alt-Enter` to force the creation of a new cell unconditionally (useful when inserting new content in the middle of an existing notebook).\n", + "- `Control-Enter` executes the cell and keeps the cursor in the same cell, useful for quick experimentation of snippets that you don't need to keep permanently." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(\"Hi\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "Getting help:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "?" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "Typing `object_name?` will print all sorts of details about any object, including docstrings, function definition lines (for call arguments) and constructor details for classes." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import collections\n", + "collections.namedtuple?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "collections.Counter??" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "*int*?" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "An IPython quick reference card:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%quickref" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Tab completion" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Tab completion, especially for attributes, is a convenient way to explore the structure of any object you’re dealing with. Simply type `object_name.` to view the object’s attributes. Besides Python objects and keywords, tab completion also works on file and directory names." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "collections." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## The interactive workflow: input, output, history" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "2+10" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "_+10" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "You can suppress the storage and rendering of output if you append `;` to the last cell (this comes in handy when plotting with matplotlib, for example):" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "10+20;" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "_" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "The output is stored in `_N` and `Out[N]` variables:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "_10 == Out[10]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Previous inputs are available, too:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "slideshow": { + "slide_type": "-" + } + }, + "outputs": [], + "source": [ + "In[11]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "_i" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%history -n 1-5" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "**Exercise**\n", + "\n", + "Use `%history?` to have a look at `%history`'s magic documentation, and write the last 10 lines of history to a file named `log.py`." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Accessing the underlying operating system" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!pwd" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "files = !ls notebooks\n", + "print(\"files in notebooks directory:\")\n", + "print(files)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!echo $files" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!echo {files[0].upper()}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that all this is available even in multiline blocks:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "for i,f in enumerate(files):\n", + " if f.endswith('ipynb'):\n", + " !echo {\"%02d\" % i} - \"{os.path.splitext(f)[0]}\"\n", + " else:\n", + " print('--')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Beyond Python: magic functions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The IPyhton 'magic' functions are a set of commands, invoked by prepending one or two `%` signs to their name, that live in a namespace separate from your normal Python variables and provide a more command-like interface. They take flags with `--` and arguments without quotes, parentheses or commas. The motivation behind this system is two-fold:\n", + " \n", + "- To provide an orthogonal namespace for controlling IPython itself and exposing other system-oriented functionality.\n", + "\n", + "- To expose a calling mode that requires minimal verbosity and typing while working interactively. Thus the inspiration taken from the classic Unix shell style for commands." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%magic" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Line vs cell magics:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%timeit list(range(1000))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%%timeit\n", + "list(range(10))\n", + "list(range(100))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Line magics can be used even inside code blocks:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "for i in range(1, 5):\n", + " size = i*100\n", + " print('size:', size, end=' ')\n", + " %timeit list(range(size))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Magics can do anything they want with their input, so it doesn't have to be valid Python:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%%bash\n", + "echo \"My shell is:\" $SHELL\n", + "echo \"My disk usage is:\"\n", + "df -h" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Another interesting cell magic: create any file you want locally from the notebook:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%%writefile test.txt\n", + "This is a test file!\n", + "It can contain anything I want...\n", + "\n", + "And more..." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!cat test.txt" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's see what other magics are currently defined in the system:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%lsmagic" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def to_optimize(N):\n", + " total = [0,0]\n", + " ta = 0\n", + " tb = 0\n", + " for i in range(N):\n", + " for j in range(N):\n", + " a = i**2\n", + " b = j*2\n", + " total[0] += a\n", + " total[1] += b\n", + " return total" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%timeit to_optimize(1_000)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%prun to_optimize(1_000)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%load_ext line_profiler" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%lprun -f to_optimize to_optimize(1_000)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Running normal Python code: execution and errors" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Not only can you input normal Python code, you can even paste straight from a Python or IPython shell session:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + ">>> # Fibonacci series:\n", + "... # the sum of two elements defines the next\n", + "... a, b = 0, 1\n", + ">>> while b < 10:\n", + "... print(b)\n", + "... a, b = b, a+b" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "In [1]: for i in range(10):\n", + " ...: print(i, end=' ')\n", + " ...: " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And when your code produces errors, you can control how they are displayed with the `%xmode` magic:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%%writefile mod.py\n", + "\n", + "def f(x):\n", + " return 1.0/(x-1)\n", + "\n", + "def g(y):\n", + " return f(y+1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now let's call the function `g` with an argument that would produce an error:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import mod\n", + "mod.g(0)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%xmode plain\n", + "mod.g(0)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%xmode verbose\n", + "mod.g(0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The default `%xmode` is \"context\", which shows additional context but not all local variables. Let's restore that one for the rest of our session." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%xmode context" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Running code in other languages with special `%%` magics" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%%perl\n", + "@months = (\"July\", \"August\", \"September\");\n", + "print $months[0];" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%%ruby\n", + "name = \"world\"\n", + "puts \"Hello #{name.capitalize}!\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Raw Input in the notebook" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Since 1.0 the IPython notebook web application support `raw_input` which for example allow us to invoke the `%debug` magic in the notebook:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "mod.g(0)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%debug" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Don't foget to exit your debugging session. Raw input can of course be use to ask for user input:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "enjoy = input('Are you enjoying this tutorial? ')\n", + "print('enjoy is:', enjoy)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Plotting in the notebook" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This magic configures matplotlib to render its figures inline:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "x = np.linspace(0, 2*np.pi, 300)\n", + "y = np.sin(x**2)\n", + "plt.plot(x, y)\n", + "plt.title(\"A little chirp\")\n", + "fig = plt.gcf() # let's keep the figure object around for later..." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Ventures into widgets" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from ipywidgets import interact, interact_manual\n", + "\n", + "@interact(color=['C0','C1', 'C2'], f={'sine': np.sin, 'cos': np.cos})\n", + "def myplot(f, λ=2.0, color='C0'):\n", + " x = np.linspace(0, 2*np.pi, 300)\n", + " y = f(λ*x**2)\n", + " plt.plot(x, y, c=color)\n", + " plt.title(f\"A little chirp (λ={λ})\")\n", + " " + ] + }, + { + "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.7.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From 397577fcae19c1d6bed239de072eaed07410f5f5 Mon Sep 17 00:00:00 2001 From: Matthias Bussonnier Date: Sun, 28 Apr 2019 13:59:15 -0700 Subject: [PATCH 083/105] typoes --- 2 - Autoawait in IPython.ipynb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/2 - Autoawait in IPython.ipynb b/2 - Autoawait in IPython.ipynb index 8eb7d79..3014bd1 100644 --- a/2 - Autoawait in IPython.ipynb +++ b/2 - Autoawait in IPython.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# IPython advance features: " + "# Async and Await Primer" ] }, { @@ -291,7 +291,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Advance Autoavait usage, Exercise" + "## Advance Autoawait usage, Exercise" ] }, { From e117b1fe819b1711ac6a340d552564730bd10900 Mon Sep 17 00:00:00 2001 From: Matthias Bussonnier Date: Sun, 28 Apr 2019 14:00:23 -0700 Subject: [PATCH 084/105] print before after --- 2 - Autoawait in IPython.ipynb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/2 - Autoawait in IPython.ipynb b/2 - Autoawait in IPython.ipynb index 3014bd1..fb0c670 100644 --- a/2 - Autoawait in IPython.ipynb +++ b/2 - Autoawait in IPython.ipynb @@ -72,7 +72,9 @@ "outputs": [], "source": [ "# does not sleep, need to be awaited\n", - "sleep(5)" + "print('before sleep')\n", + "sleep(5)\n", + "print('after sleep')" ] }, { From 2e03db4635a1fbda1afc01bbbb49647eff9602d4 Mon Sep 17 00:00:00 2001 From: Matthias Bussonnier Date: Sun, 28 Apr 2019 14:05:42 -0700 Subject: [PATCH 085/105] typoes and install trio --- 2 - Autoawait in IPython.ipynb | 2 +- readme.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/2 - Autoawait in IPython.ipynb b/2 - Autoawait in IPython.ipynb index fb0c670..6a29c79 100644 --- a/2 - Autoawait in IPython.ipynb +++ b/2 - Autoawait in IPython.ipynb @@ -154,7 +154,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "You will note that any line that start with `%` is invalid Python and are IPython specific syntax. THos are call magics (line-magics with a single `%` sign, cell magics with a double `%%` sign)" + "You will note that any line that start with `%` is invalid Python and are IPython specific syntax. Those are call magics (line-magics with a single `%` sign, cell magics with a double `%%` sign)" ] }, { diff --git a/readme.md b/readme.md index 7f31aac..2a3a895 100644 --- a/readme.md +++ b/readme.md @@ -43,7 +43,7 @@ you are using a different python distribution. Create a conda environment: ``` - conda create -n pycon2019 -c conda-forge --override-channels --yes python=3.7 pip cookiecutter=1.6 'notebook=5.7' pandas=0.24 nodejs=9.11 jupyterlab bqplot ipyvolume pythreejs aiohttp line_profiler matplotlib rpy2 simplegenerics + conda create -n pycon2019 -c conda-forge --override-channels --yes python=3.7 pip cookiecutter=1.6 'notebook=5.7' pandas=0.24 nodejs=9.11 jupyterlab bqplot ipyvolume pythreejs aiohttp line_profiler matplotlib rpy2 simplegenerics trio ``` (You could instead create the environment from the supplied environment file with `conda env create -f pycon2019-jupyterlab-tutorial/environment.yml`) From f5e48f5545019b8f2ddbb60741861422b11b3ba2 Mon Sep 17 00:00:00 2001 From: Matthias Bussonnier Date: Sun, 28 Apr 2019 14:10:18 -0700 Subject: [PATCH 086/105] install cython --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 2a3a895..1cb1880 100644 --- a/readme.md +++ b/readme.md @@ -43,7 +43,7 @@ you are using a different python distribution. Create a conda environment: ``` - conda create -n pycon2019 -c conda-forge --override-channels --yes python=3.7 pip cookiecutter=1.6 'notebook=5.7' pandas=0.24 nodejs=9.11 jupyterlab bqplot ipyvolume pythreejs aiohttp line_profiler matplotlib rpy2 simplegenerics trio + conda create -n pycon2019 -c conda-forge --override-channels --yes python=3.7 pip cookiecutter=1.6 'notebook=5.7' pandas=0.24 nodejs=9.11 jupyterlab bqplot ipyvolume pythreejs aiohttp line_profiler matplotlib rpy2 simplegenerics trio cython ``` (You could instead create the environment from the supplied environment file with `conda env create -f pycon2019-jupyterlab-tutorial/environment.yml`) From cebfeadbca225c1652a20e6a211b25a418ae3df8 Mon Sep 17 00:00:00 2001 From: Matthias Bussonnier Date: Sun, 28 Apr 2019 14:21:17 -0700 Subject: [PATCH 087/105] add 4 a dn 5 --- 4 - Rich Output.ipynb | 992 +++++++++++++++++++++++++++ 5 - Cross-Language-Integration.ipynb | 466 +++++++++++++ 2 files changed, 1458 insertions(+) create mode 100644 4 - Rich Output.ipynb create mode 100644 5 - Cross-Language-Integration.ipynb diff --git a/4 - Rich Output.ipynb b/4 - Rich Output.ipynb new file mode 100644 index 0000000..9f43eca --- /dev/null +++ b/4 - Rich Output.ipynb @@ -0,0 +1,992 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Rich Output" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In Python, objects can declare their textual representation using the `__repr__` method. IPython expands on this idea and allows objects to declare other, rich representations including:\n", + "\n", + "* HTML\n", + "* JSON\n", + "* PNG\n", + "* JPEG\n", + "* SVG\n", + "* LaTeX\n", + "\n", + "A single object can declare some or all of these representations; all are handled by IPython's *display system*. This Notebook shows how you can use this display system to incorporate a broad range of content into your Notebooks." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Basic display imports" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `display` function is a general purpose tool for displaying different representations of objects. Think of it as `print` for these rich representations." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# display is injected in default namespace, but it's a good idea to be explicit.\n", + "from IPython.display import display" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A few points:\n", + "\n", + "* Calling `display` on an object will send **all** possible representations to the Notebook.\n", + "* These representations are stored in the Notebook document.\n", + "* In general the Notebook will use the richest available representation.\n", + "\n", + "If you want to display a particular representation, there are specific functions for that:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "from IPython.display import (\n", + " display_pretty, display_html, display_jpeg,\n", + " display_png, display_json, display_latex, display_svg\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Images" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To work with images (JPEG, PNG) use the `Image` class." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "from IPython.display import Image" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "i = Image(filename='images/ipython_logo.png')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Returning an `Image` object from an expression will automatically display it:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "i" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Or you can pass an object with a rich representation to `display`:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display(i)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "An image can also be displayed from raw data or a URL." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Image(url='http://python.org/images/python-logo.gif')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "SVG images are also supported out of the box." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + " \n", + " \n", + " \n", + " image/svg+xml\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from IPython.display import SVG\n", + "SVG(filename='./images/python_logo.svg')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Embedded vs non-embedded Images" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "By default, image data is embedded in the notebook document so that the images can be viewed offline. However it is also possible to tell the `Image` class to only store a *link* to the image. Let's see how this works using a webcam at Berkeley." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "from IPython.display import Image\n", + "img_url = 'http://www.lawrencehallofscience.org/static/scienceview/scienceview.berkeley.edu/html/view/view_assets/images/newview.jpg'\n", + "\n", + "# by default Image data are embedded\n", + "Embed = Image(img_url)\n", + "\n", + "# if kwarg `url` is given, the embedding is assumed to be false\n", + "SoftLinked = Image(url=img_url)\n", + "\n", + "# In each case, embed can be specified explicitly with the `embed` kwarg\n", + "# ForceEmbed = Image(url=img_url, embed=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here is the embedded version. Note that this image was pulled from the webcam when this code cell was originally run and stored in the Notebook. Unless we rerun this cell, this is not todays image." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/jpeg": "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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/hB/5odHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+PHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyI+PHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj48cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4YXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iPjx4YXA6UmF0aW5nPjA8L3hhcDpSYXRpbmc+IDwvcmRmOkRlc2NyaXB0aW9uPjwvcmRmOlJERj48L3g6eG1wbWV0YT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg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\n", + "text/plain": [ + "" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Embed" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here is today's image from same webcam at Berkeley, (refreshed every minutes, if you reload the notebook), visible only with an active internet connection, that should be different from the previous one. Notebooks saved with this kind of image will be smaller and always reflect the current version of the source, but the image won't display offline." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "SoftLinked" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Of course, if you re-run this Notebook, the two images will be the same again." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## HTML" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Python objects can declare HTML representations that will be displayed in the Notebook. If you have some HTML you want to display, simply use the `HTML` class." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "from IPython.display import HTML" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s = \"\"\"\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
Header 1Header 2
row 1, cell 1row 1, cell 2
row 2, cell 1row 2, cell 2
\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "h = HTML(s)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
Header 1Header 2
row 1, cell 1row 1, cell 2
row 2, cell 1row 2, cell 2
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display(h)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can also use the `%%html` cell magic to accomplish the same thing." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
Header 1Header 2
row 1, cell 1row 1, cell 2
row 2, cell 1row 2, cell 2
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%%html\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
Header 1Header 2
row 1, cell 1row 1, cell 2
row 2, cell 1row 2, cell 2
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## LaTeX" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The IPython display system also has builtin support for the display of mathematical expressions typeset in LaTeX, which is rendered in the browser using [MathJax](http://mathjax.org)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can pass raw LaTeX test as a string to the `Math` object:" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle F(k) = \\int_{-\\infty}^{\\infty} f(x) e^{2\\pi i k} dx$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from IPython.display import Math\n", + "Math(r'F(k) = \\int_{-\\infty}^{\\infty} f(x) e^{2\\pi i k} dx')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With the `Latex` class, you have to include the delimiters yourself. This allows you to use other LaTeX modes such as `eqnarray`:" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/latex": [ + "\\begin{eqnarray}\n", + "\\nabla \\times \\vec{\\mathbf{B}} -\\, \\frac1c\\, \\frac{\\partial\\vec{\\mathbf{E}}}{\\partial t} & = \\frac{4\\pi}{c}\\vec{\\mathbf{j}} \\\\\n", + "\\nabla \\cdot \\vec{\\mathbf{E}} & = 4 \\pi \\rho \\\\\n", + "\\nabla \\times \\vec{\\mathbf{E}}\\, +\\, \\frac1c\\, \\frac{\\partial\\vec{\\mathbf{B}}}{\\partial t} & = \\vec{\\mathbf{0}} \\\\\n", + "\\nabla \\cdot \\vec{\\mathbf{B}} & = 0 \n", + "\\end{eqnarray}" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from IPython.display import Latex\n", + "Latex(r\"\"\"\\begin{eqnarray}\n", + "\\nabla \\times \\vec{\\mathbf{B}} -\\, \\frac1c\\, \\frac{\\partial\\vec{\\mathbf{E}}}{\\partial t} & = \\frac{4\\pi}{c}\\vec{\\mathbf{j}} \\\\\n", + "\\nabla \\cdot \\vec{\\mathbf{E}} & = 4 \\pi \\rho \\\\\n", + "\\nabla \\times \\vec{\\mathbf{E}}\\, +\\, \\frac1c\\, \\frac{\\partial\\vec{\\mathbf{B}}}{\\partial t} & = \\vec{\\mathbf{0}} \\\\\n", + "\\nabla \\cdot \\vec{\\mathbf{B}} & = 0 \n", + "\\end{eqnarray}\"\"\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Or you can enter LaTeX directly with the `%%latex` cell magic:" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/latex": [ + "\\begin{align}\n", + "\\nabla \\times \\vec{\\mathbf{B}} -\\, \\frac1c\\, \\frac{\\partial\\vec{\\mathbf{E}}}{\\partial t} & = \\frac{4\\pi}{c}\\vec{\\mathbf{j}} \\\\\n", + "\\nabla \\cdot \\vec{\\mathbf{E}} & = 4 \\pi \\rho \\\\\n", + "\\nabla \\times \\vec{\\mathbf{E}}\\, +\\, \\frac1c\\, \\frac{\\partial\\vec{\\mathbf{B}}}{\\partial t} & = \\vec{\\mathbf{0}} \\\\\n", + "\\nabla \\cdot \\vec{\\mathbf{B}} & = 0\n", + "\\end{align}\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%%latex\n", + "\\begin{align}\n", + "\\nabla \\times \\vec{\\mathbf{B}} -\\, \\frac1c\\, \\frac{\\partial\\vec{\\mathbf{E}}}{\\partial t} & = \\frac{4\\pi}{c}\\vec{\\mathbf{j}} \\\\\n", + "\\nabla \\cdot \\vec{\\mathbf{E}} & = 4 \\pi \\rho \\\\\n", + "\\nabla \\times \\vec{\\mathbf{E}}\\, +\\, \\frac1c\\, \\frac{\\partial\\vec{\\mathbf{B}}}{\\partial t} & = \\vec{\\mathbf{0}} \\\\\n", + "\\nabla \\cdot \\vec{\\mathbf{B}} & = 0\n", + "\\end{align}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Audio" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "IPython makes it easy to work with sounds interactively. The `Audio` display class allows you to create an audio control that is embedded in the Notebook. The interface is analogous to the interface of the `Image` display class. All audio formats supported by the browser can be used. Note that no single format is presently supported in all browsers." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from IPython.display import Audio\n", + "Audio(url=\"http://www.nch.com.au/acm/8k16bitpcm.wav\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A NumPy array can be auralized automatically. The `Audio` class normalizes and encodes the data and embeds the resulting audio in the Notebook.\n", + "\n", + "For instance, when two sine waves with almost the same frequency are superimposed a phenomena known as [beats](https://en.wikipedia.org/wiki/Beat_%28acoustics%29) occur. This can be auralised as follows:" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import numpy as np\n", + "max_time = 3\n", + "f1 = 220.0\n", + "f2 = 224.0\n", + "rate = 8000\n", + "L = 3\n", + "times = np.linspace(0,L,rate*L)\n", + "signal = np.sin(2*np.pi*f1*times) + np.sin(2*np.pi*f2*times)\n", + "\n", + "Audio(data=signal, rate=rate)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Video" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "More exotic objects can also be displayed, as long as their representation supports the IPython display protocol. For example, videos hosted externally on YouTube are easy to load:" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/jpeg": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAUDBAkJBwcHCAkJCAgHBwcHBwgICQgHBwcHBwcHBwcHBwcHChAOBwgPCQcHDiEODx0REx8fBwsiGBYSGBASExIBBQUFCAcIDwkJDxQUEA0UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFP/AABEIAWgB4AMBIgACEQEDEQH/xAAdAAABBAMBAQAAAAAAAAAAAAAABAUGBwEDCAIJ/8QAYBAAAQIDAwUHDA0ICQMCBgMAAgADAQQSBRMiBhEhMkIHFCMxQVJiFTNRU1RhcoKSotHwCBhDY3GBkZOUobLS1BYkNFWDwcLTFyVEc6Oxw+HiZLPyhKQmNUVWdPFG1eP/xAAbAQABBQEBAAAAAAAAAAAAAAAAAQIDBAUGB//EADoRAAIBAgQDBgUEAQMDBQAAAAABAgMRBBIhURMxQQVhcYGRoRQisdHwMkJS4cEGI/EVU2IWJDNDkv/aAAwDAQACEQMRAD8A4yQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgDKFf9qexRt1iXfmnZyyLuXZceczPz2ehpuLhU1SMIRjSKpNyx3Rq1Y0jVmhVnIRjSdOHTTyw4/hTnBpZnyGRqRk7JjYhP8AZ+S7r8BJtxnMXSc/lp7l9zGdOFQuyvxm9/JTE03ZE7pySvYgqFYLe5NPRjmv5P5x/wDkJysLcOtKbnZaQam7OF2bccbZvHZoW6mwi4VRDKxjxDyQipHCS1sMsyrELo6HsO8ou7bF+kz/AOAWfadZRd22L9Jn/wAAkysj4kdznBC6P9pzlF3bYv0mf/AI9pzlF3bYv0mf/AIysOLHc5wQukPab5R922L9Jn/wCx7TnKLu2xfpM/8AgEmVhxY7nOCF0dD2HOUXdti/SZ/8As+05yi7tsX6TP8A4BGVhxI7nOCF0f7TjKLu2xfpM/8AgFn2m+Ufdti/SZ/8AjKw4sdzm9C6Q9pvlH3bYv0mf/AI9pvlH3bYv0mf/AIysOLHc5vQukPab5R922L9Jn/wCPab5R922L9Jn/wCMrDix3Ob0LpD2m+Ufdti/SZ/8Aj2m2Ufdli/SZ/8AizDiR3Ob0LpD2m2Ufdli/SZ/wDAI9pvlH3bYv0mf/AIsw4kdzm9C6Q9pvlH3bYv0mf/AACx7TfKPuyxfpM/+ARZhxI7nOCF0h7TfKPu2xfpM/8AgEe03yj7tsX6TP8A4BFg4kdzm9C6Q9pvlH3bYv0mf/AI9pvlH3bYv0mf/AIsHFjuc3oXR/tN8o+7LF+kz/4BHtOcou7bF+kz/wCASC547nOCF0f7TnKLu2xfpM/+AR7TnKLu2xfpM/8AgEBnjuc4IXR/tOcou7bF+kz/AOAWPadZRd22L9Jn/wAAgM8dznFC6O9p1lF3bYv0mf8AwCPadZRd22L9Jn/wCS4nEjuc4oXR3tOsou7bF+kz/wCAWPad5Rd22L9Jn/wCLoXPHc5yQuj4ew5yi7tsX6TP/gF69ptlH3bYv0mf/AJ+VjeNDc5uQuj/AGm+Ufdti/SZ/wDALzD2HeUXdti/SZ/8AjKxeJHc5xQuivagZQ92WP8AP2h//XrHtQsoe67H+fn/AMAmZ1uOzI53RmXRHtQcoe67I+fn/wAAtjfsPcoi/tljfSZ/8AhST5MTMjnPMjMuj/ab5R5qt+WL9Jn/AMAkntSbfvha35Y8CLVjvmepz82rePGi6DMjntYXRhew+yh7ssb6TP8A4BZH2H2UPdti/SZ/8AhSTV0GZHOSF0QfsRMoIf2yxvpE/wDgEN+xEygIat+WN9In/wAAk4kdxxzusroF72JmUA603ZHz8/8AgVo9qrbvdVk/Pzv4JNdaC5scot8ihEK/faqW93XZPz87+CR7VO3u67I+fnfwST4il/IXJLYoNCvz2qlvd12R8/O/glrj7Fi3O67K+fnfwSPiKf8AIMktjrjd2nrjJi1nNUnJa4HZ6+4LNNXfgRQXBhNeEWq7g68IjhGbYHaIYYDDorqT2WmXl4y/YjXWpYpZyZOsan5lwi/NmWx0lQ3piXFCJQhyLmMB8IiHh6muvjVqz8p2wChrtdnOr+Mi4QjF89X68jOwHzOUvBehoZAgIXgIGjc1Th+gTpeF/ZH+9HQpbZWUnuDrZMzHaTKm86TRFhdH4IqOjGkSeqbAXsJPCN9Zc30ZtrjlHu/m41sMBERZMRACxDLzZX0g50pK0W9LGfkhGKo2NVVJRVuhL3MobuqoSaIRqpMaS8klq3Abadm8trJInCIWZh1webq0/XUo/CZJoRYexMlhGVtIiu//AEVrM56e9nip77HSypGUyllp0idZFvE/KzFLjjDZasyy+3hm5XPoiUNMIaY507PJ6Segkp35I7mQtrU4JCJDQUCxDEaSEhLaEh44L3CY6MPqVnLIxXKK6mmC9Lbvrow9fiWIzPQD1+JGSQZobmteVu3z0IevxLzGY6EPk/2S5ZCZo7muCM62b4hzB9fFXmL48wfJL7qTJIM8dzzGKF6vh5o+SXoRB0eZDyY/dS8OQmdAsRRfQ5kPJii/HmQ8mKXhyDNEysrG+IcyH1o3xDmQ+tJw5C547/noZRmWN8N8yCN8BzIfV6UcOWwZ47mULyT49iHr8axfD2B9fjRwpCOaPawvN8PYh6/Gi+HsQ9fjScGQnER6RnWu/HsQ9fGWb8eb5w/fRwpC8VHtGbDVyDhLorzft83zh9KaJi0SCZKMNXDo4xIadpOhhpTdhs8RCNrjvFeV6lZkHRwwGvaCr7C8RmB5vnf7qPgzvYfKrFJO+hlC8b5Hmj8v+6xvkeb5yX4eY34iBsisLXvkeb5yzvkeb5xI+GmL8RA9rK175Hm+cSN8jzfOJNeFqCrEQNi1o3wPN+16Fi+Hm/a9CT4WoL8REUNr3mSYZkeb9r0L1vvo/a9CsqDSsVnJN3NpQSWshHCve+uj9r0LyMwPN+16Ekqcm7oljNJGvfLnN81Yi+56it2+uj9r0I310ftehMdOfd6EinHvMMmRLLWsS8i+PN/7noXoXh5v/c9CjlQk7ch0aiFGyo9OtVPVU1Fs04SqHEJfFFPcZro/a9C0CQiVV3i/aehQ1MPN2sSwqxVzazjERPX2qVi4p2kRfHtf2vQvJTHR+16EyVF3vyfcSRn06CSdw1c4liUHgxW0zHtf2vQvIuiI03f2vQqrpyTehYzJ21ENoji8VNdOJPT7olrAXnehJoxb7UXnehU6tGbLNOaQjgKzSlNYcwvO9CIvN9rLzvQoeBIlzoRnBJ3IJeb7fMLzvQtDjzfay870JVRkJnR8/LRmHX3X3CF0HZtwnnL0ifn5kiKonnCGGaWaCOOMdGeIwgtUqdVI4iIeHEWcL7dX9tkC90aLji12c61MtUDSLZjfU3Mo6RHM2i8Wq5Mi3GEW5cYYqY5oL2JtELl7VQ05TegPCvTtNIs2a23mFgAp0x05+Vb9WpKpJyk7tlSEVFWQsbPWfEqRLCU7KN3jDnRtOzi0tl2YwgtrQ3bZODwTTms9JDv2y3v7+SLEwXZzZsy0i26Dl5G8N26beJ6VpbtFttzV33KasyPfgtskdRE+FVY603ZnBvj/APm2Y5rd/NBMQ4QNWm2LhMtELWtVvcr+znhEaiIpKZ0t6KtAxT1IvE1cuMuDLm3w7DsuROMsiWFyblB1t77Jsx4uPkTPakpeiUyDjTwiN25MSjZMvti4Qi45Oyw5ojSFWkYaao50rslt1humJC6YuCUs0y5whOODS3OyBFheE4jQTfw580U7m7Bex0d7HrdFnn7WlLJBtu4fEt8iEzfssEw244+5LN+5tFARjmz6IlDjhoXTsBXOvsNMmwArRtaYw3dNmsVNss1OELb826Nz+wH4yXSd5L8/zi9KuynGnaJmVacqjzaCbMvOZKolL9s84kfm3bPPJJx4kXwsu4SZvX1gsw9fXMleaX7ZDylmhjtnnJePEPhZ93qI4j6+sFin19YJbdsds89Fyxz/ADkceIfCz7vURU+vrBFHrT/wS64Y5/no3uxz/PRx4i/CS7vUQwb9fWCxd+vrBOG92uf56N7tds8+COOhPhJfjG+79fWCxEPXD6E470a5/wBY+hY3o12zzx9CXjxD4SX4xuiPr6wWM3r6wTlvRrtnnj6Ebza7ZHyx9CXjxE+El+MbIwQnLeTXPj5cEbxb58fKH0JfiIifCS/GNuf1qWIxL1//AGnIpJvnx8ofQqx3Qcv2papiSKs9UnY4qf7sf3xTo1YsZLCzQ95VZTtyYkNVb1Orst9JzT9XKnDJ51wpKWcdLhXGRccq98qcHDnw6CHQqh3PrNcte0hF4uAZ4eZjHabEsLdRcpno+CpdAws9vnx8qCZx1fUklhW1aPmxrq6Xr8qZsp5mkW/+PjYuNS7qeHPj5Q+hRzLuUAZaqB59YNJDrENUPs8XSU9CvBzSK2Iws4QcrDDI2ni1qSUkZtcDDhioiI9ehzemI8Y99VPCbISWrKm3CGznxxCRNiPilTiFXMTGFry59CDDqV7Ll1RcZeF0dr76xH19a00bnVojPWc2/E8xDdtuD0rpuovjO8ipJvIef9lZ8K8Wk2T1MNKMmktBDH19a1j19caXRkun9lYhJ9NP40dxvBnsIs3r6mjN6+ppbvL31G8vfEcaO4cGewi9fXGiHr61pZvL337KN5dNHGhuLwp7CP19cazm9fU0s3l779lEZH31Jxo7iqlPYRevrjWM3rh++lkZL337KxvH331+VJxY7jlCWzEmb1w/fWM3rh9KWRkumsby6aXixHZZbMSwh64fSiEPXD6Uq3l76s7y99+ymOpEcoy2Ym9dn0rzD11fSle8vffsrEJH337KR1IjlGWzE+b1w/fXmI+D5vpSuEl779lEZH33zRTHUiPUZbMREPrh9K8RD1wpdvL33zRRGR9980VG3EkSlsxscaH1pWgmPWkU7lI+++aK8FZ/vvmioJRi/wARNFy7xnJn1pH0LUbPR80fQnqNm+++aK8FZvvvmioJQj+WJVKQyGz0fNH7i0uMFzfNH7ifY2YPbfNbXgrLHtvmioXTiSKUj5xS0RaJ0iFxhpxoSfiTlVqTIEVINVe4XplxQ05hTk0DQvNsu0tPMsOPOi11iy5IRvHGmuV2dOBUxcLivE0S7jbZb7pI2mLx5t17E7aE71ts6e1CZaPBQzJmIz4kVT7jUlKOFtE/Pv3ruLvQ0KzFXHsd5RkXSbq4I7RcGfmSEsUlZMp1lurjEyp/yW9pkZkpRwm6Xp+ZfeliAt7PylmsD19yYb0uaufFCOdNL8KnJtsCpGZm5ayxLmyzA1P09HDpTsMd83jjOArRfbseQ95syW/SXR5oxgPH8KfCNwbPAuYW5sTJ0eEuZsWxbtNgWyu7x9kdE/KRjojHNGOZea2r1tsyYumx3yTXCTMk64Xu0kTGOWIqc8WzjCEIklQONtsTtotN4Rps6yQ97ZK7qbp01G92ObFOORVvStlZR2ezPMNTwE2EtaYPU3MZmdpvHHW4wgLkGqhhGBaIYo6IwzqWjT+a7Iqk/lsjtL2P2Tu9MmrJadCh6badtB6EAEaXJ1zfNJQ0xqEXGx8VTxqWAqPfBItVvZ+JUW3u0WuF0P5MWtwQGGGVcpIo4RIadFGHRDlWGN221RuqsmrWwNGP6G7iOO3xYRhzVZnTUm3ePXqu/wDoyVWWl0+n+L9fEvRqXAqPfAieqGzT3uksNsAVHTCJ6ocnxceJUYzu4WmNFWTVrYGjD9DdxOR1Y6uEe8sS27haQ3VWTlrYGjAvzN/S5Hl1dXDxJrpR3j6oOLHTR/lu/wAS9QlwjT0gI9UNXR0ekshLN6O+FeqOqqIDd0tAaP8A4ctbAwQfocz1wuXU1cPEsy+7tOQEKsnLY4OXi3+gzOJyNOnU1cPEk4Md4+qBVVs/yxekJdv/AA7zUHi+8sRZb/wr3UHV+8qNDd6mhp/+HrXws3f6FM9cw6dTV7y1/wBPk3o/+HrW0S5N/oMz1zRp63q6OJHBjvH1QcVbP3L1iy3zvc7zUHi+8iLTenFxNwc1B1Y5/QqHju+TH/2/av6Pc/oM3rc7rer3lshu+P8A6htT9HFv9Bm9bsx4HSPeS8GO69UHE7vr9y9CabhV0Qg7qDqx/wD0g2QxdEIHqDqxVHR3fnYiX9Q2riZg3pk5rW7JcDq95Zc3fzpP+o7UhUyLQ/mc2WKGt7jiHFxI4Md4+qDiePv39/gXc40EK6i63CBlg2YrDrQDXpHAIRLBsnqqkXfZAFEXP6ltTGzAB/M5vWhylwOrpQ5u/iV6XUa0xraANMnN60OdwOKGnQlVGO8fVDXUfS/v39/gXc6yA154jwdFWDn6qHGRhXnIcEQgWDn6qpV/d/CN7/VFpDWAQGqTm9BBn1uBxLxMeyEajf8A9VWlCsQp/NJnQQc7g0KjHePqu7+xHVetr9d+/wDoux1kRr0jgiMCwc/VXk2hhXnpwGIRw9s1eVUlM+yHYK+/qy0IXt1TnlpnQQfssSV2Tu6Nzz7ss1Z820b+YhdfaeZYYFhsnHHnnHAhCkYDVmhpjTm5UKjHu9V3f2DqSd7X6259/wDQ9bsuWG8WTlZcvzhzO1UI03dQ8K4OnWECph33I81UaLxOFiqLzvBW/Kq1ynJ12ZKohqIW6tamrWLpRqKMe+UV5sK3paz5uWmZpp14WnLwWmGnHqnm6SbvLsIwEYceaPHEYJsoxjLKtN+hdTap32OhtzWwRkZAKxEZh90d81CVQmQjds8fEECzfCRKSE+PNHrt1qlrfKqYf9kLIxvfzGe0zDTo8A/oEc1UdTW0cS8lu/2fG9zy04OeZF0apZ8cO1saymjRpvnb1RlzqV+l/Tx/oucZnVwjiMmtrWH40yZYzAlIOFSI0udLWbKkuXsEqsd9kJZo1ZmJrDNi6PAO6uGrk40htXd8st9h6WFqZqffjTEmnBERdERqLRyRpjmUtOnRjJS057kTliZK2oucfxeMkFuxqYcbLabIWyHnDiES87NFJ25qokrGBOCQjiLmFtDqlT0ocasYp3p3LGFWWpYk24bbFLDjBUkRcINVWs3VVqxhsOKwwtqq7pbb4QXKeue51VVY+iS57yfypbsgSnZgSNlh9tt4Q1rt6pmoR8NtnykrlvZA2UJNcE+ItzLzmIfcnKvOxFo+tUcPSw7h89r68/Mdjp4tVf8Aa/S7bF7BbhFd0tN8ILhD1z3PW5dbCtY5Q1XdLQ8I2Tg4nMQjrcut3lRkPZCWUJNYH43T7xavuLl5q1bWLi+tamvZA2UNwRNv8E4/zetO3lPjYuLR8KscDCd3r+dxUVXH/iReo5SVU0tDwjJPDiLrY63LrYuJeIZUc1ocTN+OIsTY01cutiHQqIlvZA2UO9qgf4In2y1esuVU06cRaujRqx0xWmT3fLKEmKhdG7v23NXEy5Vd+EUMOhHw+E7vUON2ht7Ivwcqx7UOJjfI4nMTOHF4UKh0LB5WNjUV2GFgZnWcxMF7oPO+BUBLbvVlDvaoHSuWX2HNXEy51unTizUjn4tWK0yu7xZQ72qbd4GWflntXE2VN3TpxZqR40nAwncPVbH7eyOg3ssGxvODb4NkXyxOdYL3Qed8C8vZYtjeVAHAttuuYnC4BzVeHnfAueGN3SyhFgTbdKmSdknut4mypuSHTi1dK0tbudlUs1i4X9XFJP6uKmm5cH4KS4+ck+HwncOjWx+30OiX8t2hvKmwpZuycKpzC25quDzh/wAl4mMumm7ytpsbkm73E5wYvdbc4sQR7PIubR3a7MIaTFzhLOKSepJvEQ9acFYf3abLMSrFzhrMGUepp6831t0dOrreUmSo4TuJI1cd1X0Ojnd0BobytoRuXhZeqcc4MnOtlxYhLsrDm6A0N5U0I3TwsPY3ODcc63Vo1Y85c2Tm7HZpi/rZ35BlhzV6+yWF7j1dZeZ3djs93fdVQ75lpYdYcMyx7px6sUx0cKSRq43qvodIuborQ1VMCN29cPVE5wbxdbEtGqXOWv8ApJY7QI8NcFwjmF/ZbLRhz8kVzlaO7BZru/cRDvlmW5uGZY1i49WKTTu6zZ7gzIj7vcODiHg32dYuPlSSoYboSRq4t819O46V/pKYw8APXrjrjg0v9pLRhz9leA3TWCu+AHhHCYHhHOvjrMlowl2I8q5vnN1ez3N9kOG/cYfbxCV2+zrEWnVisT26rZp75IKhvX2JtrEPBvN9c5dWPZTXQwy5DlVxWx0aO6iwV3Sx1xwmRqccHhm9ZstGEv8ANao7q0thLe3XCIW8bmJxvWb4sJQ7C5zm91Gzyv6CIaptmbZqu+DcHrglp5VpnN06zyvaSpqmxm2aqcJe6DhjypkqFAkjWxHVHR39Lcthplqryq74RzEQ9cHiwlBeIbrsthplqrwSJvhHMVOsPFrQ7C5pjukyOsJUkMzft6uGrrjfGvH9I0iOqXW3yeb1dUtZvjTHRoknFr7HSkd2KWw0y1VQkQ8I5iEdbk1odha/6ZZbuSqoah4RzEI61OjWh2FzVDdDkRu6S62+Tg4h625rN8a1jugyI3dJdbccIcQ9bc2eNM4NLuHcWtt+anShbtEt3Js3g8IWJvnDo+paj3amO5NmrrhYh5w6FzW3l9Jjd4utk5TiHE25srWGXUmN3iqpvBpqHrbmz8SjdGn3flh/FqbHR7u7iwJfoNWGqq8LV+RaXd3ZruEdUS65skucY5bynB7VIkJYm8Ql8fIkkcupTDrYRJstXVJMdGmPVSoRewAGZmZes64M0k5SNLQi0QtSzDY82LhEUeypBIUk4TparltTb5dJuzJQiHxYHTFR+xTIZtsaq4i8w4+LNO9JZlkqqSPiLT6xTzZEfzJgtopTKV7xiFsavkUlFXlqTT5Da5AgZY5CZs6btJ0vfZ+ptnxqSFSJ8hYFpsMAyko2wJj1wb6WZceFtws9yRxceKJQhVxQzwhBIrWkqr1seN96w5Aei0Mo3MufxLzbExVLTb44r+1nG2ekzKShCVPRViHyN32I56jMOV8yTkoMuDDQyjXADTwLDhN0k/ijmqCBaDLPmiUY8cVLtyjc6K0Ht/vPiEuy82RPOlw869hfEWmy0sy8cMYuFpjDPCHHGKY8hMm23am3zEHRJngiwi28Tks404/V16ptwswcUKY8cVa8m24+L5CJBS8IjTTU1d3jbko5ToIW+DIC5RfzcicoykrtjJSUeRae+rS1uq5/OCswm7S2bXc+cH0KsOpr/bCWYWdM9sJGR7kWdbFoRnbS/W7nlD6FnqhaX63Pyh9Cq3qdM9sJY6nzPOJDg9xM0di1OqNp/rlzyh9C9QtW1f1uXlD6FVELPmecSIyEz2wkcPvFzR2LWK1rX/XJeUPoXiFr2v8ArkvKH0Kq4yMzziWN5TPOJGR7iZo7Fq9WbZ/W5eUPoWyFs2z+ty830Kpoycz2wljekzzySZHuF47Ftjblt/rcvN9C9Rt23P1r/wBv0Kot6zPbHEb3mee4kyPcdnjsW9C37e/Wf/b9Cz+UVvfrP/t+hVDczfbCWINTfPcRw5boXMi3/wAobe/WQ+S36FiOUtvfrAS8Vv0Jg3Ksh3J4Xpu0H3wlWyuWWmTFl+ZfpG84QoRu2hqHVhnjEuxCOee5P7nrDbxCUtvtrpzL02/SRYW3HCi22wHZi3CMcObPxqCpWjTbTlyJYUpT1S077DD+U2UHdw0lq4W9npZsX7ky5ZZUTxSQy03M74emyrERpEWZTVEqR1idMSLPHZbHnK77Xyek32G2p1oSab4NtoSJlhunVFkW4Qi2WYacMdOnjVSbqe5++0+5aMu5fS7xCRAWF6SbwtjUPE5KjhGqGaMIZoRhypaGIhJ3v4LcZVoONtPPYrYYCDZOEQiDY1ERFSI+EXrrKypWNvWY0Esw+w0yY75aoFtxt0XaSIxdKEIuadEc+mFObsJBuX2CMzOlNmNUlZjl2xVqzNojrOU8RAxV5TkO1qzcobLanpRyReImoEROS0wPXJGZ2XR5zJcRBxRhpVuFDNHM3q/oV6lZKWVLRfUgkcqsoO7Gvm21rjlXlB3Y1822qzylsO0pObdlJonBdaKnQREDglquBHbAoaYR/fCKbaZvnuecopU5J2uSRlCSul7ItyOVFvd1sfNMrMcpre7rY+aZVQwhN9sc85ZDfnbD8okmSe475NvYtWcswWrEhah1E8VrRlniEuCbZIAG8u+IRvjHOXJA4ckFrskROoSw0jUJDrCQqUbnsjvnJIJeaxQfnJxpzs3bjQjV4UMMYd8YKBZMzxN61JusOOMPc1wmeDIvBMKT/aLQUnOGTrYz8mSWdbnuXfflJ2ZKXIQebqcZIhFwbzg3MQloII8In6OUtvdtlPmGUxWobZzouDUIvtiJVaw1VMl8l5xqv7yc2nHMOHWLZwrMySzNGlmi4p/4uW3+UtvdtlPmGfQsRykt7tsp8wz6FU++Z7th+csb4nu2Oecl4T39xLx29i2fyjt7tkn8wz91H5RW5zpP5hn0Kp4TM92w/KJG+57nuecjhS39wzQ29i1/ygt3/ofmGfQsdXrc5sj9Gl/Qqq35PdsPzkb8nu2H5yOE9/cdmht7FqRtu2+ZI/RmPQtZWzbPa7P+iMehVfvye7YfnLEZue7YfnJODLf3DNDb2LP6r2z2qz/okt6EFa9s9os/6JLfcVYb8tDnueUS9DO2h2xzzkcJiZ4/iLK6r2v2izfoct9xEbWtfuazfoct9xVtCetDtjnnLPVC0O2H5yOCxc8fxFkdVbX7ms36HLYvMWYWvau1KWWX/o5b7irbqlaHPNZ6pWh2wkcFiZ1+IsqFtWp3DZn0OW+4s9WrU7hsr6HLfcVZxtO0O2EvG/7Q7Y55yOA+4dnj+ItCNs2n+r7K+hy33ERtm0/1fZX0OW+4qx6pWl2wvOWeqlpc8vOSfDeAZ4/iLN6s2p+r7K+hy33EdWbS/V9lfQ5f7irHqlaXbHPOR1TtLtheck4HgGeP4izSte1P1fZX0OW+4jqvaX6vsr6Gx9xVj1TtLtheciFp2l2wvOSfD+AcVfiLLjbFpfq+y/obH3F5jbNpfq+zPobH3FWxWnaXbCWorStLthecj4fwDir8RZRW5aX6vsr6Ix9xait20+4bL+iMfcVauWhaXbCWg560u2Ek+H8B3FX4iq3ZUqm2DAWYPUkxZ8uWIi2SnXR0jCEMUc+nN2E55OzAm7KSgjwV5aco27qi7vmUK8ux2Qg4I5k3ybRFSTFQuz5OMSVWs1JD+kzbhFprPFij31sI6DZflxzwbc3pZbRbQs/pM653o4tKji8ruTNXJJLQquHtq9yYe/aOMuSTn1CmK0mbppjPqtHb7Y5vezIYEPfjUI+MpJkyFTdmCWIh6huOeK9ad2P2UgGWvG7LEu5hmXOkU7NzM655klnV2UVKJEtH6j/ZNnED1JC2TxMtsTInSQ79sySknGXB5wFB4gj4StnJGwLuUbIhKp4RcKrWuxG7lqunBi7GPgwUdyFydKbn6jqoG8feLouOSA+Ue9CGHeFyOyrp3uPNSVKmXREbVyIdSuijqV0VL97iiMuKg4jEykQ6ldFYjZfRUuuRWYS4o4gZSH9S+ivMbL6KmG9xWIywo4jDKRCNl9FeY2X0VMN7CvO9hScQMpD42V0UdS+iphvYVjeoo4jFykO6l9FEbL6KmEZYViMqKOIwykPjZfRQFk1EIiNREVIjziLCI/KpkxZ5OFSDZGXNASIvJFPVg5OvhMsOOsGANuC4RGNNNIkQ9/jpSqcmJohjbYcYabboumWHm5YidK5bKZeIRvLwYRjTGLmbRxxKEIdlS3Jq03d+z43glJM3MsxSTZXs2zedUXeDxtlA7tuk46LuOZbYWG2W+W3eGamahfB7VIXNZsR2RzUwz9GHYQ1ZktKSlxLtty8uyOqPBttt1VEREUfCjEijpqzxisyrFuV2aVOpFRyrmSB6abMRE6TEsRCQi4OHVwl2FFMsJ10apRkxJ206mJYSbq3oyLYjNzbg7TLQUlCEeMnWh051Hcqd0GTk7p4nb1q8u3jZEZlljVGp1xmPB6w6I6Y8iW5I3rt9ak03dPT4t3DBa0pZzeKUYLmunUT5996ENhWMFh807vkvyxWxdV04d75DxY1mNSkozJS40MsNi22OsXSccL3QyiRFGPLEoxW0l6E1kxXR6SWnMweTEGUFitWiwMsdIzDWGReLyt6ul2ouSPJFVPNWMTbhNmNJNkQkPNIVak9agtODtENLlPOL3Nv5Rqj3m++o2+1W4Th4icIiIucRFURLNxNVJ26ov4em0rkK6m9FZ6mdFTDeorG9RVbiFjKPeQZiNkFLVUmFoX5dFt0INCXlhm+EoKtsoZPelp+9To7OrfjeEPlBeD8Ij2VKRmylH23P7O+y5KPDzScK8Zc8KDgiXixTdlfKDMyF4GF5srwS7W4JVD8hj8nwq3h67cvC1vDqQ1aKS8b+pHZ6PWy5pF5w1D9YpRCz6icIR90c84rz/USCMxesC7q6rhDzSEuEH4o1Q8VSvJkRcaxa1Lf2Sb/0c/jJMbpUzLqgwy/27PoxkhZnRWY2Z0VMN7CjeoqpxGT5SH9S+ijqX0VMN7Cs71FHEYZSHdS+iiNl9FTLewrMJUUvEDKQzqV0UQsroqZQlRWd6ijiCZSG9SuijqV0VM97CswlRRxGGUhnUnoo6ldFTPewrO9hRxWLlIZ1J6KxCyeippvYUQlhScVhlRDOpPRWepHRUz3sKzCXFHEYZUQuFkdFZhY/RU03uKN7ijiMMpDOo/RWeo3RUzuBWYMCjiMMpC42N0UdRuippvcURYFHEYZUQuNjdFaysboqbxYXkmEcRhlRBisXorUdidFTk2VpJlJnYZUcftcLSTWArSLeUp/01ly2F53o1Ulp+FYnI3jdTI077EpSSHuay5bC/M9EnIiWn4VtYG96zg3+XUyQ94sxj9LmejnxafhWyYZv7tuXwdUXN4SnvFkyWF17o1xEoxilSJrjlkq7dywzZapOvzrI82SseUdYlPFOafbhDvqTZNWTez7FnANbrIyzJDsi3KSRSDxFTpoKZm5v4pZzvZ2+xmhIRcAeBK4uA2up0k9dyDXhTVoUx74sFHigrZ3BMlCYZmbYmCrmLSLgSLZkm3CuyHm3p3jvwOCrbeWBE9Sw8n7JblGRZAcWG8PacKmmoujDihBOS8wQqg0zCCysQijOgAjBYzL01CpwWxxG5VdjUIkVI1FTVGHInCFiP80B8J1v+GMVJChOavFEU68IO0nYbcy8xTtCwZnkAS+BwVresWaEc5MHm6NLn/bjFK8PUXT6DViab6jYsZl6jBYzqBlhAvMYL0iMEgHjMsRXuKwMMQ7I1DUXNHaLDp+RFxxKMkpg2mamizXhVFm2hHCPJq62bwk8xnSLWbb8K7pLym4wTQFsYrvfco7SIiIvXYuC3sjUMR5O8ljU4Ze5yx+A6XoUc6sov5WPjC61RvN4S2SHwSL+KEU1TlltuiTbzrrrRCQuMOjLOMuCXbBJvk4/FgnK9LaYHxXf9kz5XW4UowN1LVzcy4MtINE7hcmXBIhJz3lsBJ0o8gtx5Sgo05Tdh+kFcrUNzyzyygf3reDJMNyzlrStLYyj8+LgzMlLUtwhxUi+YcUOBhtlBWSZpDYdnjKSzbAkTp4nH3j65MzLxXj8y50zcIi70M0OKEEoIlswgoRUV/yzLq1JVJZpeXgbM61zs4LTZOFs6o84i1R+P6oZ48i9QJRa2prfL12PWm9bpbJF43FDvDGO0nSq8ONxkKWd2NLBE64UyeInKqfB2i+Okc3eEUpWIQWVlttu5oaIxmWIozrykFPM1Li6240eq5hq5pbJD8Ef3pss0Sqclz1iqEv7xvCXilCmPyp2LVTXMPcIy5tlwZf37Gr5behWaLy/Ns9fBkU/m+Xfl4og9oy5MTb8sWo9U814WEXh+Ops/GLsqR5CP1DTzhL/AE3PveUjdGkKmWZ9oaiZIXB6Q834wJwfG+BNeQc0N5h1bwaS5wkRCPywebUmK5JbfToJQ69/1RYCxCCxnQqRMZzIzIzozoAysrzCKygD2sQWILMEAZzIhBZRFAGFlEFnMgAzIjBZghAGMyzCC9ITgPKMy9ZkJoBBCIQWUAYRmWViCAMEvBL2S8IA1GtRreUEoZsl9zVaKnnFwY+dmToxcuSGyko82cZSbd7TdFdDMiUhKF3NZMtinZ3okeLTy1J3kWhIieFshF5hltloMLzFluOXMlJMc2bnDHW5BqipcO5FaouOCbDYsOE3LYZlngbLluEuG+W9fc0Rjm0QKOdL2tz60toGyNwheeodEeEK8J4WyKHBiLDbEqEYcQuPR0RipYVIR5tFl4eo+UX6DTZsmTg3lIm0RE2NFQtvEyJMOExzZcIVS4dG/LWchFTprK20hERAWhEREREQpEREaRER2RhDRCHJSlNiZLPhLMC8I1ttjf0EJCLxcI4LYjqtQiVMNGaEGxT5LWIp3UjJX5lWpCcJWehuyHyjfmXCZmmxEhGoSHVKnWFTDMmGw7MunbzokKf4QVZvUAzKsrdy0nN8uty4CLTbhNiRDURUlTUrOOCrnqVU4XScL7SdTt1Ed+hVm7ValrzLEo8Dbogw6QlMS4uNttvODU2JPDoE4w0whnVWuZR24PCb5nubWJvFq9IVfW6hkVaU2LJST5DLiI38vU4IvOVFduE23ngRQq44wzpgsTcQyqdaGMpC7h2SfNmHhcJD9yuqEmk4Xt11SRBxIq6qWv001KrPL/KC7ESnJ7Dq4nlrby4ygxM7+tKrmC4/VzdnSr3mdxzLwmrnfIU005t9VDT8yobO7heVguVTGInKmxO/LCQiRaxQhHiEowjDmqVU6nST8mvuMz0/3JLy/osSTystJhiWljapdYlmG3yeqJ4nhZbvCcItNWepb/y0tLmNeSnAZR11uWKaIjmBlpZl8yIiJxxlhtknCItJZ4jn06cScGLEHmqpVUFJ23J4OVlc9ZEZSPzLzjMw2Ild3gkO10VMEwWLZd08LnRIU/xVWT1JTySrq38t5kX3G5VoaGyIajxERDtKw3FXsbKqcIucRfaRC3UHckWR75T0tfTTbd6LzjeEdkaSH6iT+3YjXax8lNuSEtdskPvlXlCP3VJ2YqniNJuxapO8RGNktCNWqIjUREVIiI4iIi2RhDTn5IJFkdZt6RW4dQg+JMWS0dXB2drOTpCWkXZkxEodgG2YbUVstRnqhNjYoFwN23N20Y+52cThCzIVbLs042Qx7DbT0dqCnVpM1M0js6ojhEadURHZGENEIfAtPs/DvK5vyMvH4vLNQXn9hhNxeIRWsorXMvi22RFs+UXNEelGOiCtEYkt+0KG7kddwdnWESw4eaRRww8aPImyVapHpFiLwvuwhoh4K0BU48Lx7REQ83CNOHow1YeDGPKlsVQq1MzLlOGVWPDh0jUWziVb2nl3M3xDLsDQJUiR1ERU7SsOdhwLn92X2VAmLJTYW6j2JRy4nu0Nl5Sk+ReUpTl4261dOt0l0SHopG1YuHVTlYFnXTxFzhpSzcegK5IIqN5RVNlUPOFwfCb/ANiKCkqZ8pGuDEuap8IlKTg+qK+IbilJdGLpGmZlnGdlxupvoi5rD4p1Q+RVrYrZy07My20IvOMCXgkQj4rjeb4CHvKYZIT9LjzG0zS6PSYe65T8FOf9nFJN0GVuJuUtERwC4Iv09pIhF75IUn+zj3klSLyWfNElOSzXXJijIzKcpy8E2rk2xEqdkhLmqSqO5MWddOEXRJv5twh/hUjgqrZKa5h0WxJwtURIi8EVXc9uhv3hCxLCQCWEiIqiU7t2H5s6PObp8pQiUsbop8bdRGaIZfTncw+USlGReUpTl4JtXTrdNQ6wkJc0k3s2GnbJuzbp5wucKJuPQFckEIrD7tIk4WqIkReKvA6y9vSDr7LzLLZGRNkOHVGrnEWgfjimJX5CvQrqd3Q374hYlhIBLCREVS8/0gTncjflEphZ+Q8nLYp9+s9qXlCGkei5MlDF4kPjipHk6MpeU2bJtCY6zpDfEz0nH389z8WbPyQRKtSi7c3stX9ixTwdWazWst3p/Yl3P5WetBi+flHJIasJPCQi8PbGmyxEHfjCEPhUpfyWpw75bq5pjT9mMV4mLYuhLh710uuO4qR6LNWn4Sjp+BRObykFsipxeEq88ZBK0Y3fXXRehepdmX1nLTpZav16EgfsUh91aIvCIfOzKLz0nbgkVzIsTAbN1NskRD4LkQj9SWyWVlWti8X+JPMpa4uKBY2UXrHQnl2VBrRv6kDmpq3m8RWM/SPNG885uMU/5OOTMywLjso7KnzHQIS8LFDV+FS1ueIdUvJSpq2HO2F4xVfaUvx9J84teGpWl2XPpJehGoSp9rJNWUduydni2VoPkyLjgt8E2UyTdW08LfWx+DPmU+ja7nO80fQtbs/VrNtl4TTZfagpIY+guab/ADxI32VWfVfnkRKUlHZxu/sqZs+dY1ar1xshLtbl3AxEu9HMk01ZVuBqyMs9/czjZF/jQD/NONhy7cnajjku0DLVotlfg0Istk+wNTTtI6K4hUMY8sM3YU3GfFaeGVLEQzxRlYunVw88jl4aEHs6z5wmRcfk3WT2g4N7ySYMoEPxr27KGOs2Y+EBehTgZwVtGaHnKR4JPcrrET7ivIsGXWm3HS2QEcReMWaA/DGMFusfJ6eIqpoW5cNloCvnqffHNRv4IQJWAL485a3i5qfTwkIv5tRlStUfLQa5CyRDEIjVztYvKLT8icRgtbDpVLaYYldWjslZdxWktL9e8p61Gn7l2iZpdpK6K6G7Etm8Eo5yHkjmzaEz2FlCIPuSkw+68643KTbJG0wwyLcyyRONN3JkRUPCQ4454Qpz6UyZR5btCRDUI061Wz4XNVQyFttO20MwD9XBv4B5ovjTi8olxOHhmTTO/wATJxnFx35dx0nM2y2JVYSEtYS8nWTpIwEmxcDEBapfwl0oKjjyjG+FknBrIaqdYqecXN+NTnIzKGghbIsDhUlzfCHpQVjDtw0fUh7QoceKa5r8sWMAaq2xFAw1V7zLQRzbPEUwWdIG65S0NRYvBHFrEWyKkJQWnJCcBu+Ei90xU4rvwuapaKhm+d2RHVlJR+Vajk3YDAsk3MAMxVTVAqhESHFwZDGER+FO1j5pUaWBNsNai/dIfOOKVQmpZzVKqkcQhhLwuWC1xnW29UnCHmk3reMMMy2PiaMY5PYxpUa0p5+u44jbx6v8RelIpsGZg2zerjFrEI37ojV0hz5ih3l5mJhjCQXlRa3B6v1LUU81rcJV0gpH/JRxxFDnHR+Ys6VZ6SdyK5QZLE0RPMjW1rEGs43+9wO+m6WDCrFmXcNVQgKiFsXRPVNbQjeQHVFzVKnox4/GVXE0oWcovXqvEu4SvOXyyXmIhHVW3MjMiKzjRNZqOiH2lIzTBDnFhEaiIuaKAFYWmxLCN+6DV4XB11DVSOLkzbQpRamVUoxLOPgbcweFtiXacEnpmZeK7Ylmxz56jcIRz8kM8eRVJldbgzL77Aa0oTNXRvRcEW6edCkYx77mbkUas1m/cmXSGoZazpmZs7W4R+WJt4pkadJZ4NkEM2nNVGGtBRxoSq11Hppf87yac1Sw7l11sdX5E2EUiyIukLs3Oi5N2jMDqvzpE3VR/wBO2A3Qw5rGjlT+Q7KQhN3rEpNhi4Nt4qcPBvNDsltRgWgY8UBhyxS+BYatktWK6OGmhycpZ/mI3bkpQV4OqX2lD7Yn2yebZN0WmhIqjIqaiHrhDzs2pDvkUdmCmmXU8LUk5ipMsIl2sRxOOfFDi75QXO+UVo3rxFqgOFseaI6vjd9ZfaddUlZc2bvZVF1lmlyRZ7Fryz75My5Viy2Or1sRqpGkktVe7lHXpsua20PlERfwqwIxWfTk5RTZfqwUZWRrmutueCSY2AT3NdbLwU0swTyMXsBhW1oFhjVW2CSXMEe0ktVupkkrXh0cNKs4SVqsfH66EOIjem/D6EHJwmH2psfcSpdHnMPEIuVdETpj8DhKX2xJDMyjjGth4PpCQ1N/KBUx8GKSS+Sk3M4mpZw2nKhIypZbcbLCVLjkYVaKtMM/1KV5NZGTgMMtzDjAmzeM1XhOXjIlwJFSGEuXN75GHItLGKMJXutmrryKeEm5RtZ7rT1ITkNMk4wTZ9dlnnGHKtqkRJtzxgLP8NXYUiTrIbm7rc69MjMtC0+2IuNXTxFeCVTbglohoqch8DkOxBPY5E/9SPzRffWPJRT0aNG7fR+hBLUhwJJulW8KsmZyBvBp3zT+yL76S/0dODqzLReEDg/ZjFGm6C/cyJsN4VtaFSV3IubEcF274BYvJchBMs7JOMOXbokBiOISSTg1ZhGSehqhBMOXuV5yjm8mtVgRFwR7cWJyrnFn+v4E+uTYsNuPliuGycEec57mPl0x8VUvlG8cy/djidfdpq6ThVEX2oqGvO0Mq5v6Gl2fSzTzvkicZJyTtoCM7NP73kNbCX5zM06wsNcYjGOi8KGbjzZ1KLUynaaaGWlRFmXb1Wh2i7Y4XG4ceUizxVZzlpXHBiQlSItjsjSI04aoppbnJt8iEGH3ae1MPvVeDdtxqVZQk1livHd/0a943zSfhfkiWZRZT0jVUok7bxE4WKr1wp6sLIK2Z4ScGRcZDDdnaAjLNudIW3I16PgipxkXuNu3hFaEzwRarNntk2V5znpt9uGCENkIQzx49GiNilg+V9CCpjkr5VcrCw8oTcJwqsQlT0Rp1lYFkW8NI85TaW3GLGabKrfJmRETju+SbKotoWmIC2PxQTFa25Y1eVSFoE171NtXg+K7LUl8UYfGo8Rh1F2bXqTUMWpq9n6GyWtkipxJxC0U32dkBONj11h4venafNehCPyxXufsaeaGp2WdpHaCl4RHwmYxVTgPYfxo7jp1VHawrU7bjY7Sh85O6yYLStAuciNC4kqticTeULd+xi1XCLyW3E9S9ujSOLZVKSlqcI44WyN2PhFrfJDR4ycpW2qdUl1nY+H4dJ36s5LtivxKqt0RcbdsDzkpatTpKqpS2uknFm2ekthQRjOTLLbtBa7Vn3SZ4IqSqHydoVBpW2uknSUtYuDoIaiKnFiHEknBWCM3cnVgvEQjUVRbSVW5abUs2RGYjzRURtm2W5NsnK8RbKrqdtB+0HdYqSLCqdOGd3fImnLIrLmanZKRdebem5SWeNukqzb1qe2DxOD3izqv7e3IpRxxx+zZwpQicJy6dbEmG6iIqW3GsxthDkhHPoT4NtNERDV42yXjLezMt6wuLiYynT0u0eiONOo81k3uUxljk3aVmzIzZti6yVIjMM1OMFThpcLjbLwlY25Y47POMMABCbrjbTeYquEcKkSHRyVZ/FU2kbSLVKkgppICESEh2hIS0EKecibWk7Pn25tqUaA2qipGptvhBISIRHQJZiLNHMrVGvG6zojqUZpSyHQ8rklJi22F3VQAjnrc00jAatbl41sjknJ9rL5xz7yRZK5byk8TQNVC66ESEC6I1ENUOx31KlpJ31RzM6WV2ktSPxyRlOafzhKgPZEZJMWZOylpy5zLYvEzeiDudoSYdbbqeb4yAge49OaI99dPqo/ZF2CxOMSO+AMrtxykgcJkhjGiI4h0FDOOemKs4VRlO01pZ+ybXuipillinH+S93ZkLtjfMjY9qTbBUOtyV426JNuUk24JapaeLswVJw3ScqRkGLTvRdlZl4pZp0QZcInxK7Jkmx0iefRpVjZYzTo2Ha1TjhCMo83iKr3RtVzuU5ZyxWbJWKLbs1Ni4/MsNA0JUz4vk8y4NTnCCLZFHkjnbhoVSvRoVmnOKb3fMkpRlG6TPeUe6VlLIkTc7SyQkLZVNtkIuEN5dk43GMBPNpzZ86ZJPdutUXKidbMfJ84Yqd2jlZKPvT8zdG61LTrxTpOyIuXIvSFy229ebQvDnzaY5tMFGSy2spxsnbughG7J0bPbuyfekLiknBzC2Vbdff44cUVX+DoLkreFyVZnzFOVG63as45LSgk5Lk8TDdIjS4V8Q0kRd+BZ+TQussnsiWilpcjfO+dYF0oDd7QjUUKhzxhCoYZ1zLG2m563LOsm6MZgrUYceF1tseBZG8HhGYxxQAadHJy8i7KlZduVZiZlqgNbhdgYUwEeaEOKAw+uMVbpUIwp3S1b8Xp3kU/1W6Ja9BgdyGYGGeL5wgPOFqn7K8OZDNd0uDVHNDOLcdMdUfhTyTlf5y/hagQ72l+MiLYcMdp6PIHFDjjp4lssxGJQfe1/cw4xZGP+bkeUvih33OCS1Gxld6L/AI7yMx3P2+6T8gfSqi3eG5axZC8CaF55wiEWaRHEOrVScaRr0xhm4gJWxlxlUQ38pJFAXGm65ya1m5Frs9hyYjxQDliUOSEVxNl1azczPuCBEUpJOOUkRXjj77jmIiL3QyOkYeDDkipPh2oqUuvTrbciWIjObhDpzfS+w0szZNMO3tRPz9246e02yLhERFzarynPyVRjyKdWJNt75st46RacbclCw4RF9kmNXiphUPkwUNtezyFhwj688NTnvdI4WR5ohDR341R5U5WCQzNnCyOu2NQ871hFT5eHaS5/lgb4l4s6U3DMoL+zSs2ZwTFjlvSYAiqcfw8C/i00k3TDsZxzKcSzt1eNngARJ0ei2OJzxYceb4VzLknlIbDspbw030g43JWsJYRelHOBGbKnaCqrPp1S7KuTdPypYblRNlwXqqXL0CEhddIeDESHQQQ1owz82HZU9WrGMM76amPTw0+Pw11/PYim6hlAUy8TIFSPN5rY6rfHrcse+XeUBelMOt5v+68xtAiIiKmoiqKqr0rRPTpU7Pr4S5LEYjjTcmdrh6Co01CJNdy5gRbmyHadZHyWyL+JTTOq+3NXHSlniCoqny2cOFtv4lKr6ZpKrDtYxHV/hWxh8FUnTUlysZWJxMI1Gmxym48GXgprZWqYmn9UqaejSSRjMuc5SPBTRGsRBkjYjhW2EVGI2g+O1hWI2s7zucmPCTHqrElK2MsOOELYCRmRUiADURc75Iac6hxWy/zlJdza3vz0iemRl6WiFmrDeOOOCNNWbNohyRzZ01UZQeZ9BXJSVkWzLvELbbeEhbERGoaqREaR762766DfkpNCdIvdGj8LW81BTDnamy8Fwh/cs2pVlJt3LcKaStYURn/ew85eCtQh9zb85JTmXNqW8lwUndnS7kL5xv0qPMx6ihU5bTna2/O9KTuW6/s0D4o/xJI7P/8ARu/ON+laDtH/AKNzxnW/SlU5BkQsja0yWsZeLh+yo9lPArxtwsVQ63gknQJ9zZkxHwnavspPlK/MlIP0i0BC3eCAiREV3iw1bWariVik5SdiOcUkV7l/Oi1IE3tOuNiPgt8IX8KgOQFjzc5PuONCNIjci6XW2BLr7znNEQ0aNMYlmgnHK6Wnp7ezANOXpTNLZGDjLbYk2RPOPOFCEBaEBqiXJAezGCm+TMu2xLdS5ByhlnhJ2dMcT7hazzg8ZVRqgLUOKGaHJGKsLDuU05cki1RrqNHLHm3r4DrYUZOUIZaUabdeLCUwbbbky+W0444UMzIdgYZhhD65SU8/qk+I94Sep/w4QFQeatBiUbIZXCRdcdOm+e8ItkejDRBMZZW06xjSq+Iuv0vy6F6ik1qvuWW685svt1eC99peGppzbdEvBJz+LMq5HLBsvdBSyVypa7a35Qqg83QtpIm7k+I84vBFembWEucXRMavtJskbUqbvKaR5xDTV4KI203VSNPiqBp9SS7H8Jxv/wAcK3s2iQ6qjwPVaq3tuEhTlHkxrpp80OFr2fJzg/nDdJl7szwb3jF7oPeKEVAbf3IL/wDRbQERqqIDapcLo3gxiI/DmUzB7nClLT4irNLHTg7tJ+JXq4SMlZNrwKJt/crtlrC1LXzQ1Ukw4LmHWqpz1EUfg0xUFtSz7SlKt8SkyxTiqJpymnnEWbCOfsrrcLSp2vKTizaok3SWLo632lt0O3I8pRsYlbsV84s48k5+bG7qaPhMTeGoiHnCI4uLvJzkre5xYl1RNRlHNeWYP9mPg6wwgmSbyQsZ8rw5FqummoKm+jq8RfDm49Kvw7boPmUJ9i1lyKHZtnpeUVKdAyluKXO1jUI7VWzSrlyb3NbLk3nX2midi+3d0TVL7bLdVRC2LkM1RYc8ePMMIdlYtTcvsh8iLelyZbUsbjH+HniH1LT48Jx0Ml0pwlquRR9mWsVpPE885qlha5qmEvLi3duCVNOJOc9uJAL19JTzjXQmGheH5xmIl8sE025kPbjY0tAxNB7w+IufNvwCNXehnUbu1ZDlKKd2U2OQVsnhMm2h5oXnozLZDcttQiGh+jm1X5EXijCEPkXQWT2Tbrgi9MEbAFSQhiviq5wl1n49PwKWyUq01hZHFziIiLyijnXG1sXb9TOxw+Fk9UrIpDJTcXtWkSmLT3uG0IsXzxD4LhwgPxqwh3KWLsRCcnr3tp70cHpcCLIf5/KppFwR1iWh58i1FnrGyvol6L7GtCjpa79X9xx3LMhWpF3fJTLky9dk22LrYtXNWsQC3GMCjEdGfPHR2NKsuKpJx6cEqmnCGnyS8VODeUM24N2+TrRD7rLuk2XjCWcS+OC1KfaFOWklb6GViOzqn6ovN46Mse2H5mAUyzUDMsIxMoCDfZM8+tm5Bhxx5YQ0qHbpFnvnZpE+ZHBomyzG01jKOcS6xGN3m0Rzx7ObvqOz01atNUpaNZcdE3F1n4r5gHIfLCEFF7TtzKMm3G55imVpKp5icZm2ah1artkSHPHs5lfhjIRWZJNLnZ6v/Jk/9Nq1KihJtNtJX5J37lqRrLmQdGwbWLZ3o4WqQ7QrmfcttJuUtqSm3nBZCWJ9ys6qby4eFkcMIx0mQ/WulztU3G3mHhbmGHhJt5p2q7cbLZKmMI/JFQW2rBsNsqSsZjENVQPzbe1Tq3+tn9dCwafbVF3jK9/C/wDk6qt/pXFU9Vla8TRP5UWM/LTcsE2wDU7Oyk7Mi6L3COEJFMiQjCFQQiLYcfFnjxcaSFo5PtuE2BSggTjDoiDTzjN63KXdTjdFJZnKtEYZs5DHiXtyybDEaupQ+DvmZ/nYviRJSthiQkNjMVdNybcpqGrFw2b/AMVKu1KPRy9P7K//AKexW0fUe9wt1qdy/hOtVGywMxM1UlUVLdI3bVNWnFCnjXYcCiR38xAii3ilpUIEVEeISOnC4/Grj1R5OKJR5hyBt9uzXCn7Ps9hp2m7olJZsnnBIiEqiOMIkPLpipmO7hafLZs59DAvsvLWoY6FSCyp7d5hdodnVcPWyTa6Oy1X/JfclKlEr97rtOAIaQYGPGIc448pfJoTHlfPzRmUjJCTVQ1TM8YFcyzW1RVoeejDihD49EFXLG6xaBS1/ci0UYFgfYIHBpKnEIny8fwKD7oW7hOHIuWeJjKzEyIw320N3cNVcM42JZ6jEBKMO/mVmhNOd379DPxFN8PLG6v6vz6Gv2QmVwWfIDY9nlGBPEV4USqffdc64++5xuHCBfKcIbKpjIWxbzhzHgZYsPv03tF0gagWaHfLopmnbXftu2qWiIicLXPFcSw4nHnOc7HEUe+58CtwJFtphuWaGlpoRFsdqked0oxqjGPZUs6maV2MoUOHBL18SG263hLxqVE8nZwpadu8VDhVDzadoVPbWYUJtiUISvB1hxD/ABKWLzLKK/ldywbDlXd/iMuLZszrJNvifWRZwuOOueBAc/w5ocqzlDPtkTbEuNMrLDcsD0R1nCp0VFGqMY9JPWS2T02NliOpNzbbZP1VcBLFwjcoPNOMKTj2KhhyL1I7nLrmu+IeCFX71i46rKp8keSNPCU4Qed8yLNGtc+WFWMxuZiOtNn4rbY/azrB5BywvMt1OO1PNiQmWEhqxDwebjh2IqjTw0pyUV1LtTEwinJ9BPuYSpFZwuU60y/5pCP8Kl29qR1RIafCqHaH4sKdbOshphttplsWmhwiADhESKrajnLTyxzxS0ZTyeivRcNhVSpRg+isedYrG8SrKa6sir8ptCPNpp2qf4ofWkD7LnMHnc7xsP8AkpwUnrYdbWH+IeaSSPyQ7Q4udzud43eU0qEX1Gwxb2IQ8JFs0+vnLzBqnXEi8EiH90VMIyI83zaavB6Sy3Z7fSEebTV/4qB4dX5llYtpciGb1JzEGHo7SG5JwXmyIS642WrrUkPNUufsOoqhLDi9aUnOQIcVRDzcKhqYZW1JqeMfQnzkk2WyKb5qyx2SMPBcIfsxTzLRwj4I/ZWuYguAq3UmjsKbuiJzUi6OpMvji7a56UgdhNj/AGuZ+cq/cpTNj/Em2ZbTMxJYjrsxOd1v+V/stUJic7rf8r/ZO77S0wbTkwNcnvktZ90v2hJ5C2pmRbEmhB0Hi4QnRIiG7wjSWeFI4vlKCTyQYknt20RYmRbMuCJkbxrFixFwjZDCMRdhAihnhDiLNHRFafZ1uJrsZ3aF+E7dxpy2yodnhlpIfzfgymZ90RvG2WGyu7wqYxwx5BjGGeJDDTBQy3MommG7lngmG8Q4sThbTzxe6Ox7PFDihmgoxlhlK0F8LT9N44T0yJYSJwXHBabEe1AzdwhDkjedlQNiDtpE5WZS8uItkOGlx9tyqlxurYw62ZWMTNuVo+Zo4ClGFKKfl/klRZSb8md7NHrdcLEV2POpHa7ytKSydsbqW2yci6c7rOTpzLzbhYaSISZjCkewEIQhD/Ot7DmpOz5YW2hbap1jw3jhc5wuMij2Yr1M5aOuCNy0+YuUk2YtPC24JEQiTbxQgJQjFtyEI5/c49hVYuSuoq73tcsVoRupSlZdFe3uTuz8mLKHWYbeL34nnC848yfZJqRYxMyks0XOBpkSHwSzZ/rVaZKQnpx+4acYB4usszT5MuP61QsuURbE4cdBRhGPJnzRU8ayGtsOvMMBhqH85bcq8Ehgq3wlafJEz7QoR5yWg5PkLpVE5V41K3MMMDtColNPTMthmmHWS6Y4fnBziXxRWyXtNvnKtUoThpJNFmnXjNXi013ExGbbHCK3hN1KMSr485LBmR5ygcB6qIeiml5F9MpTQ0rAzfSTMo/PckANrDkyTY6qQSs7SlcJgS1ktgU1yNAWuW0l9nzhOOMt7ThCP3vqqTXNNBraq35LPDfkVQ8C3h/vHMOH4IVKbC0OLWjHv9iHGVlTpSl3FgC8twupnbmRpXsZpds4WOFzXHepYim0Zoectzb1XSp1ky+XUco5tBkcf5xLSb9SYZG0b/EA0iWHWqvMOFzDCFOeHHDTpz8WfMnZuJCK8+q08smjvqNVVIpiivo+Uk71rttlSRUrU9NEPg9JI32Rf5vRTErcyzF68hVG3W6sOJbjeadpqqAugVP2oRUVtyUNgbwBKIjrEIkVPkwUcjlSI64mHSIXB84oQgpVDYbNt9CzgkWh1X3R+bL7ST2tIuEw42My2V5hGsSaqLZEirjBVuOX7WqLol4JCWJS3IS29+PONjiFtsXC1S1ipxCWilSxTejIp1XTWdc1qM72RtoN1FvYiEsVQELgl5MVH7SkHRKl1ohLZqEV0FNvld0jtDSq7tqyxdfJgG26SIaqR2h6XGPxLlu1KkcPVyQT6d+r6Iuf+q66irxi/wA8SsX7AnncTEs5RqiQj5RDowlyZuwk8jYk42+LbzZCRDhEi2iLWpLNARV7vWPLMS2JoahEdWrWH41XtiyDb9o3l3hFyrFiw6ojiS43FQw0Ixf6rXfd3Eb/ANSVbq0FdvcrXdYsyc6izO9xKspmXb4E+Ewk4Rakc/1wVF71tcdqcGn3x/0rvSzbHFubcbBsRBwbykRERqpIdXNiTmdhDzQ8Ztv0L0b/AEzhVXwalPR3a5HD9u9tzliXKcdWly9D58F1Zpprnaf7x+n/ADWpuxbScbdfIXyFlup0zvCu29oiqjhFfQ87Dau8TDRF2bpv0Krd0NoXJkbNYaEJWWcZdtIxbEW3pkaX5SzKhhiphdvlD+4hyxXQPs+nCLk5ctkZUO1HVkoxj6vkVruQZKdT5IXHR/O5sRceq1m29ZtnwtqPfLNyKYOQWyJLxEVmN3NEaLSlqlnI7J4ZmbF4xqaYcGkC1XpnWZZLoDTeR7wwhtJ1ckycJtkRxOU3YltVc7mjmqjGPYGMU9WLaTUtwbTd60yJNtnVSThFiffxQ1jPi7EBGCjrVckbLmOpwzSuS9tsWxp1toiLWIixERdKMdKIOqPu5UN7TTg+M2X74JKeVDXa3fJb++ssvEpOawpPYhXtpSzfNvXPm2XCUUmMpw2W3fN9Kcdyy2b22hG7pHekyQkRbXB7ObsVK5g4/wC7HxRTx0rUZ22ZaIyI4VkZRLYQXoWy5peSux4rOD4YgjLLVGT85PASDpe5l42H7S2DZTpbIj4RJvxMV1JI0Z9ExgjIrEJNSYbELaMYeUS3DYQ7ThF4NI+lNeNgupKsLUfQiO9PWla3WC83EpuFkMDslH4SL+FJpuymqS1x8EvvZ0342L0VyVYRrVjVJR4MfBH7KxMLc3L0cCJEQt4RItYqedStMxBcHiVarJd7O5w7vTi+5DbNJvmE4TcE3vqEmED0FphBb3lqCCcgF0iKcH8nymcRuMAF3eN8KTb4kJU8IJQpEdbFpjCmEOKMYJHZ4qCzmWVlWplHJWA1JyNoTrMyQvHMNiLsvvS+cmRbvG8z9IiRURjEY6cMcy0cHWlRleKuUcZh1Whlbtrc05W+x6Gedv65YRKqql9wSIsRdcZYhhjFNdvexvmycbKStMRFtltql5wqhFvVESZbzkObkjy8WiOaFh5SZMPk5cNWXMhLsFwHU996zm6XBEi4OQmggWOrRGEOXsxTTaVgE5ci9Zts1Ms3I3UzaokQjtPXMxCL58lZZ4xV6WNzfqitSrTw1SFss3py0K0tj2NtruNtCM9J1s0jiOZIXxxVOPVBHhYR5sIQjDsRhpdrC3I8opRgpTfMmcq4VTgXrzgtlqk8y26zmE48sIZs9MM8YRhAoSZyzzbYeYCxraMHibcKsbedKpvtbouRNsY8sBjCEeVN8kUzLPC8Fg2qJDViOTykmR1aetunEC+NMjXUXeMWn3MmlTqSVpyTXehljuZW42X9kwlUJC68O1UPucadmPHGMOzyq4Nz237TalikrbBqZBsRuJhp0imfBevAGGeHI5nzx4ow5Y19PZXzg6tlzjXhZP2m59pR60MtLS2SnJfwcmpn/UZimcWael/MV0YTWq9C7LSnqqmwATDZvRpqHZqbGMYKIZRZIPzjfAMMS508HMNC8NPi54C58kVHMhrRtKemWXxm54JSQISnwes9yW3+4WJmWaJ1kYt54jnjRnhAc+mEYwz2LG1nSKomnfCunKfBEShqpuKxtZQ+fW/Syt56Fzs7s2lmvHS3W71fqVwzuWW4I/8AzKUHpOtU/Ze/clQ7n1uCP6dZpl0hmG/3qcu2qfaz+bL0JIdoPkWFsyLog56FiyxH/ivc6BYTeT9iGOZCW93ZZA9IimS81uEUss7Ia2R67PWUXgNz5fahBTmzpV9wanRIObVrF4uz8aWQkukmPEpftX55kscLHrJ+32K4nck7ebISYKzXh2hvZlkvFFxvN9cVIcjbAtArx60gaaYbpFsZd0nHH3tampwIQZaGGmMYZ4xqzQzaYqXy7tO0RJWM43q4qubspaWIgndxXd47+RDWw7dsr8Rnm7ElSHSZNEQ4YAV4XhFeYR+DjSCz8m5Nhxxw3X3atkibbEcWHE3DOXYUoOXBzEQ/Hq/7Jht6wHDGqXcHawFhq8FwdHywUkcRKMk4NJ76XGuhTmnGotPYWtuSgjSI6vOcIi8oopwkqT600NI7dNQj+0cUGycYcYvHJpqp0SpbF0ahGnWcEdVwo8kdOaHwp4jbxaxYR2atXxR2U6WMrW+aUn3Xt7iLAUFrCMfHmSWYeARxY49imkPK4y+LMmt+dqGnCIjqgOER8X96idsZRjslV4Kjc7lcI7SgnWqSjlb02LEaEIvMlruasknCa13RKkSGgRHFSVWsLY8UCLjip41ag04lUVkPlUWttbVOy5zo4viUuaew+KlxtJJqxn9m1XlaZJ5i12tUkkdnW9kqfBUbcLpLS9M04qlTymoqtuRLpO2acNReEnAraHnVfDi+0qptDKNtgSIyHDrYhHDzkpyYtF20mSfkWH5kBcuSJlojpcur278K7xfAp6eFqVH8sW/BEdTFQirzaXi7EoyjGz36hmJSWdItsmmxcHwXm4QIfiijc2yWGUfmX5RyqXcuOCdbJ5xmkiJwReHW0EOaMc0eznUetyWmZa6KdYflL0eC3wF0JdGriE+hGNWbTmU/3L6nJJ8hxBfCJauyIlql6VYeHq0rZk1flcrVcTSqQbi01ydmT2IjrEmyVl2BInamyIiLFUnWZhUJKATj2Ih1aSLzSXPdsV+BOMsidt+j3G9n4COJUtbWJPPNi7hqGnwkzWfZzDDxYhEatokzRnCGmgiq5y8yrhEQ1VFi8qpc/VrxxE1UlBXTT5t3XRGguyMvOX3J/YzIuzIUlrFd1a2sLhd7mqSO2E5VhMKe/UJfvUUyKLGJf9a0Pm0l/wBxTLLmyimrOmWG+u0XjH961jCHx8XjL1XsLEzeHg9Fmeuy7zje1cFT4srq7S897DHb0q+xLuvA0UwQiRCMvS654V25EYFmhnLNn00RhyqnslpQjlJ+x3TvZ1p+ZnW3TIapl9xwimyLnE5ULkIckHhhxDBWVuJWm/vLeU1WLrEaxB3rgtuEVTRwjtA4Lgx8KCrzdilnLMtyUn2cLTzgt54YaXqSOU8VxsX2Y5+0B2V0l5LNCa1Wviv+Hc5uMKeZOD0btr0fNfSxDnYdGnndEtqpbGg871pUhyukwMmrRl/0edqcLmsv6xD8eKObsiSaJaUvXBbpIhGknBHWcEipbYEtknI1Qz8kBcjyKhOk4y+nffkatOspQu9N+63O43Wq+TbDjw9em27tv3iULCTnRN2nNDot59pbZMaWxHoj9lPmVshQziuyOqpw6SGpzojm60MBEYQ5IDBRIrVEcJFSPO5vk6UmPwUqcY7vV/ncOwGMjWu1yWiFrwrzKi2JVOtk6PNFwmfOGEU3v2o1suCXm/aWWrQbLaHxSWU6MkaamiaWbPWIPXrLfPpb8J7zSu1Mci8oLB3223KSO95hy8ETJgSKmmohvqyiOeA/GqfKbHnCtmTtqC1aMs9stuebSVSdRpSc1zI6svkfgdStT7FPN/Z0/ZzreM+xzx8bg/tQgolZsyJstuDqkNSWQiuijhlbm/M5meJkn+lEobIS4iEvBIVug2ojAVtGJbJF5X+6bLDf+RGsTf8AayVULF2o1eO8hu+WXpzLEXpvZfdH4RYMfObz/WonRa/cvUmjVzftfoSIgSd0FHH37U9ymZYi5sxJ4fGJiYhH6kzT1r5SgXBS1izY1d02jIF/iQMfrUbnk6r1J40XPkn5okc9DhnPXWEUhfiqZyP3Q565JyYIXTJ+ZvKxqpIZlwSG80RphTmUg/pL7bLD4jlPmlBcpiaydST72dTRw0owiu5E1mU3TEVFHN0+U22nx8G7L98E3v7p8iRUi2/4wtj/ABqHixJeFIljq8tQUJe3SZTtbv8Ah+lJ/wCktrZaPxiFPjViJwpbFpSMFMpXJmzWHBmRlpFmaHhN8XEs2/eENLjl+MKqo1Fnjn01RVEyW6AblQg0IYSpIsX+y6LsRsYy0s5FtusmGSciICOMmmyLVh2Vr4B5k7dxmY9OFrvfkeGnhIRICEhLVIcQls6ygG7RkuM5LNzbWGakKqSqubyWcIb5snOIc0aThn7/AGVY86ztD433khKKsVaS2DDV9VJHMU5Kzw00iwV3qkUzLCXjVPDVnWG7PnmyHg5QS4PCU43iEsWESfzEObj0wzLpd8RIaSGr12SUXtbJ4iquKqem62XmuSh/5qpLD21SNN4tT0aRT0HREiv3JmULEQixaD93T0bmLuHP2cyf8jnyaeGdOetA2m3CFtl6beJhx0hqbIqYjegMCEqYwzRiQ5+xGRvZIuaxiJ86smG2xHnETbAUjCHLGK1FaEtKEIyoibrAk2ydPBMCRVFvZstUoxIoxdLFGPFTDQpkqcYZpO22mtyGFPiVLRjdddvMk7M+6VJzRuhEh4MCLh8XujlUeCHsQjDPHsQXhx8j1XyHw8Wr0h9Cru0rVdIicIqiLWqWqRtch1j85Y9apd6LTv1fmdBShGK1evdy8ifPnMhi66PZAqvN40hG3Dqu6SEulUJeSSYmreLDwicmbeEqRMRPwqSVSXgWVIdmZ4iw1eStrT5eEkzNqtU0iIj4I0r0NoBskomSq9tBxbMfBW0YDzk3xmR8LwV7gfN8lNIZDjDor0D/ADhTfB9zaHwVtF/ooTsJZMXkbZDSQ1DzY4k3z9hSzokPCBUOwX3s6zvhAPYujtKaniJXsRVacYxciOzW5y0QkO+3BAsXWxvOiVWfNT8MPSotNbkLbrxXNoGV2VLl602LbZdrvBPEfezRzcuZT/KO0zFsWWCpemSIRPtY+7PeLDi75QSeVmBlmRZDVHxiItoiLjIox0xj2SU9TGJStZFChCrUTlm06HPFmTDbFNZCNRbItj7nVrCHvmbTGHKpK5lK0Ijwg+UosO4NaTrpOv2k6RuFiIR/h4hHvQTrKbgb401Wg6dOKkxqHyVPVoZpayK2HqxhHvFTuUbfPEfCIR+0vck40644TzjptEwQtjJTLLTjbtXBuFvmXcbcCnRmzw1uVWBkpku/Ki227LWfNCO3GUuH/nGzjAi+GCs+w5aTGARNoW83G3SJD9mC18JhMJG0s92ujSt7sy8b2jitYqFk+qf2WhwK/khb1pkLwtPvMkRE0RC22yDYkQiRFngGrpzwXau4ZZnU/J6UlDlpaVelHQmXQlX3H70nCFp99xx3Od7EDhnzxjDihDRCCe/ycau35dve1y4Tt1n42wccvAG7JuIFSWzHOMYDmjDNGMEWdk5vZpwRflzrlnWCokJGVccqHBFx2VzR0RzFmhCEI0rey4VRfD0bft3JKy8znJYvFVH/ALi0V7Jb8tbvX0HPK3KSzWGyZtAmKC1mZghMXNnrRwjefFBRIrKkZabbKz2hZl50GptiDROtt8KEBOAs5qePTmzwzVKFZTbn1oTcyUybsiJEVWtNl5OBSnI2ynGrll823XWaWyoMiERvKhEW3MQjCHFnzLPx86UKLjGV79L6eJo4CFeVROasvzQnxDhJQTK2zqbx8dUi4QeaRfw8qm8/MtsNE87hAdYtbaUenbVlnGyIMdWsOsLg80hLMvP+1oQlFKTXn/g7jsl1YSc4RbXJ7EMaIRb8La6X3kqB6psfBGmmqrDzS+FLWpeVIhztvhiqogVQ4fj1VvYgw05UDZdE3Swt+CPpXMU6UFq5LmdHUqrpF3JDkqxRLDrVb5YeLnCREOH5FaCqiyrVBwnGGsRi225tEJFeDrEUOzpz5laYuQ5SHyl6b2U4PDRUHdI4DtFTVeTmrNkJysb3raTE7DQDuF3wY0tu/JC6P9nHspv3aclhtOyHmR0ORbpbOGEm3M4uSzols0TAt6eSBmpnlJZwzTBNZwqziQxLVhslVm05ogRQUI3SbVnLIsJ6ZahITJy0uV6EzMHLXoDh4KkMbtFMc0Yjpho5F0tGrmya/Mnaz6rp9jl8RQcJSaXyvW+z/wCSodz15xyzHpSbwO0uOCBFSW+5QqXm2qtoj4vCLsKyNzrIAn5cZmYMmgIqm7qmqYw0OO1GOFrYHswGMdtQ3IWTG1ZmWtR0TlmptlonZchwsPDU3OuSxcZC5GoBOOaPDOx4xXRkkbV2MG6RAREREdAiIwpGAw5IQhoTMRNxfyck3Z8/yxPh1GV1N2bSbXL8uMjeRUjSNTd5TynGr/ZeY5GWZ2hv6krygtCkaAjrccYciiL5lrYy8FSUadaqrubRVxWNo0JZYRTH8skrMHYAfjD0LX+S9nckRh819xRSZEtqtJYR8PWqq2vB49VXFgZ2/Wyku1FL9iXr/RNhyUkY8R/WHoWz8j5bZdcH4Ih91QsZgecQ+St7U17674pJrwVXpP2F/wCqQXOHu0Sr8i2uSZe+UPurIZJYiG/fhDNx8HSXi8aZ5OaEvdHfKUgsmdzFiMih0lVrU60Fzv5ItUMZRm1eNvNmv8kuxMOfGI/uWxvJkh93KPiqRNlnhngvaoOvPrb0X2NlUIc1f1ZHYZPF236o+lHUM+cMflH9ykSE3ivZeiHcFbv1I2Vju9H5UlnZF1ttx0h0NtuOFi7WJF/CpcoPun2zdMRkGjrnbQZmG2JeFNV0AZ5mYLmtAGjPHlMYcafS+eSVkQ13woOV37HMdkBSMyPNnZvzn3HP4l4ntVbZMuEm9b9LeHF4pfxJPOrmMbG1aa739TpMLLNRi+5fQYZ7WTG7VUXhJ9m4YkxTEcReEqaJjxE0ploaqTRSqS1k9AyVWOOqI4iIhEfCIqV0nlBlednlJNzDDVDz0lLOGDrnAlMuNsNkIk3C8Gshhyac3ZXPGQ8veWjIN7JTLBeS82X8Iq6N3P8A+WlMjrNNXw/3ko+My2XxXeddX2NQTptvq/oct21UfFjHufuWe8VPlU+dSmO2rUunaRYE8NVRGLeLm9binKTmBflm3R1X2m3R/aNi4P8ACmLKsRpadLV1eb66w/WtahBOVpGHVqNQzRNNuZTCwTdEobwuNC5UNyI4hEiHFGFWarNn7IxWLEypF+8qlHWrtpx4arkhcJvWbwxjTo05482Kj2VLIuyDRiQDcOONERCTuHXb1Yw5HeymHJqauHL4HGjNsXKRFpwbypshu6s+YRjVy6FNKhFL19vuJTrSlyN2XOVLjpMs3e9xEanGq7ypwiKmohgPFAeLNoqUOnbYbbEiqUeti2yaFy9LHU5VzhKqmmnjq7yqvLC0H3XxZpMSKmlohIXCItURb4yLNpzZs65HEKVaq7Lr+I9FwqjQoxjfkue+5d2Tcg/ab7LIHvdl6ot8U3mFsSIrloYwvDjdlCEIxGGcdMVrt7JObbcLerouhVSN6Vy5Ts1UwiJFHj0RWdzGDsjLSF6TYuskLxCThYSvLy5IW4RhxaI8nGp1az0oM2/MsiPCEV2dI1UltVc6PF4qt1qFClQzSXze9/sZdLF4mvinCDWVd2nMjGSORLpCTloTZMFssy9LjlPOcec0Dn5owj34qQnkoIj+bzlXReGn/EZ/fBR2etM6ipLCS8ylquDtLAm22dPBJLUl1nWa+2XCt4eeBC42Q+Lp+WEE7FIt7QqIy9tnzkoK2T52zUoJJliNiUNg02hyYbqwkoyxME5iIudhS+XDxkzKxkhwC0SMqcQiO1zqV6bmiq2qVqZiPqKzGYpq6KR2ESFZPimq17d3s224Tbhi8+LVIU1COKpynaGFPFDjqgvLs1hqTdMTL94xcG0AU8MLouE4QkQ4madFWtDTyqSjHUqY2VoJPqzdCdI518u0i2wPRw3jn1kMPFSsj5yZrCKq+c7Y+85/iF+6mCXOviI07XOVarG7LFCCjBI5yDdknv1Mf/uf5a9huzzn6mP/ANz/AC1Zchuev63VRwtYv7X51T0f3J7DIh3annfFbe/mLqZUEuUff+jj4Yim+creRUIbr9oclhvl4s3/AC1tHdctL9QzPkTf8lW0W58dNW/n6cWK7c2db3TkS6U3G98s3xWo6FREOJoiwjhq6/qxTHBLVxt5v7EsJ05uyl7FNjurWoX/APH5r5qb/lLYG6ba5auTs4XgtTv8hWa/uTuSM2Lkvbc208yQuNm0wOEtbVKYzF2M0dEYaIq3bNCcJllvfzRvCy2446UmXD1UlULLc6IslHsQjGGdW4UqKjefs39irVq2llhr7HKsd0i1/wD7cnvmJ3+Qum9zQhOzLOfMTamHJZh16XOqplxxu8cbEXM0cMSKGaMIRVTW9uCSm+Z2ddtWZdJ55x4gGWbFsSfcIibbqms+iJcqsiwCabbFiXfxsMt4SISIRG7bIip2oRpzw5KoLI7Ym6FNTorMr66vReDRqdlxp15OE5Wl0RJd0GNVmOc0ibUDsZ6FNPNVhTbQTksTBlTXTeRCmoDHws+iKhkzk81LNk4MyZ01YboScKnoiWce/GMIZlzeNoPG0VKHQ7DszFUcPSdGo7SctNH1Eb83S54y2HM1Cmx6DhU0hUeLCWGkdkqkSrUzUOdgYBVixUlT8i5qeET0TXPdG7khJXTWn+B2yQe/P3B50s4PhVUiOt4S5/yn3aGnX3pKaG0LPOSmXRF2QfbInqeBJtwX28zY4RLRy511BZNlSwjvkCofdG7qeLrZc2kc0OPl5dCqe2fY4We5NvPm+6RvuuOF1sRqcKrV2dJL0v8A01gZTpuCasktb9dvQ85/1RjKMasZO+1mtupAcit22zbPmymTftefqYcYFmbdYuRvHGSJ4bpnPXC5zQ7xRSDdL3WLItkW23RmWWhfbcIRpJwmxLhGxLNCmqGirkU/H2NVnkWF8vKFbg9jTZtVJOu+KQkS6hdlTUr516/0cs+0qFuXsNNleyJspgREZaZpbFtsREmxFttsaW2xG7wjCCf5b2V9lh/Y5n51sftNqCZb7gJSzhb0qdDWGscShxbkFoOVUShEPOUdWnXo2i27dLWa+g+nTw2I+dWv5p/Ut+0/ZVWa5/Y5vxX2fuJpj7Juzaqt5znzrP3FTtqbl840VJsUF0kla3NXy2afOTY42svlTt6fYV9k4f8AU1fzLq9s5Zvck586x/E2gvZN2XVVGTni/asfy1ULO5Q/zvML0pV/Q4+Q1Xoj4TZelWYVcTJ6S+hDPB4VLVfUtaHsn7M5LPni/byw/wCmvY+yos8f/pk5H/1Mt/LVSBuJTZarrZeC08X/AG86WyPse7XfquWjcp7DEyI+U5CEPrU3/u9/oV5YXBdf8lsNey1kR/8ApE19LY/kraPsvZL9TTH0tr+Sq4nfYs5QtSzk2bTAg3SRAL9Uzd7Tl03AoZh5dOflzaIqNjuIWoWqLRYRLrmy4NQkOjF8SbGjiKmq18Gn9GLOlhKektPG6L9lvZmywwzdR3fpjf8AJSqHszpb9TO/TG/5K53LcOtscQsCXgmJfu6S1FuN22P9kLD69hMeArdYP88yeGJopWjUXqjov25DRatkF8c4P8LKwfswObZMPpUf4WlzY7uV2yOtJueLi/cl0vuZWoI/oh1eKP2syY8HV/g/RjuPS/7i9UdAB7MFyoarJCiqF5mm4107VFTWar4dC27lmVc1aE3amVU712dHeUk0OJuWkmSvCbZq2YnTp443cY8q51HISevm2yYcGohHVqpqKmol1KzZLcnIMSTWEGGW2sPg4iw6NMao54/vV3s/CyzNzjbxRR7SrRyKKle/fexBAP8AOZ8RqL85qGrmkyyWrx99aZ0S5q9uwu52dEcOJkuliZEcXkrzNTbnOXDdqLLiZp/yZ2fZ7vhoNbIYptMc1HhC8Ik/zkyWKoRLxUxTDeIuli/8Vn6FsTFBK5KOJJDW2UjiT4issfcwhVa0hTsuC5zsLd44Xg6B4+RX3lxJg/ZrjZ6mcgL+7fAmyXNmTFqb0fYmaqaXKS8bWHwShUPjKebj27r1SetKUtWWagTc7dSjUuNPBANPCi+UYuHnHPnz7XIuq7MxEKdH5tzlO1sPUnXUorS3+S1NxO0L/J6zSIqjYZKUd519JOFLOVfG2Sebea/NnPey+8P8Q/UovM7odiWazSQlJNE5UVDAttE88VRFwccxGUaoxSMd2TJ18rgZsiJ/g6BbISIi2R062Hk5q0Fi6efMn1uZTwtRxccrFbcb1ibbIRLgwfETFshwEQOFSWeGiB5+LZgoW1Nti5TS1ip1WmcJeRyLWe6tknZ8y63ezwuiLss4JDOzLdJ03g0uPlDZHNHNnhyLaWV2Sm9hnSm7SBl14mxK9tMqnMVQ0tmUdklb+NpPW5Xhg6sdMoo3QrOYd3pPiw0RutC44dA3l9qEREOmqtooZ+yUeJNm5/GWG1KXWmBfmWnZZt0hEpm8Jupqlws5Dni3Toj7onWQykydtJkZKUnLQdFgrylorWZd/OXCpFx4YQJ4YnVmGOfNpTPa+T1lC/UE9NsvM0vUvT1oi43SWEibdxCOfRnzZu+oasoK1RX8babbbF6jCrKPDk/uJ5xtwXXBEmqW3MPXiGnWGodOHNSk09N0DjISqxVDUI4dbC5pSGalZEnidat6gnCIqQtJwWxqxUiJBGke8tGU9mXjFz1TaddKm5OdtCom29YrgXAGGKBDnjphxLExcqdaMle2t1+WNzs7Ph5pvazNmTj7c5Nk0V6LLN2UyYDUQtk5TSJDngJ5qo54w2U47o7EtZTjpOu0tDUQ4ScKnZppjGrRTHjz4tKNz+zGhbJjfbjREVThSFoSkyJEWG8cbcYIhHk49HFBS/KvJGTtJuWGYnJkrhoWaxuLx2kRbvHidlSqPMI6tMOXNnjFWMLhcI6WSco33638+hHjO0cSq+aCeXlbmrb+JU+RuXEnaFQy7hCbes06N25T2wR0wIe/COjlU2kHaiqSMNw2yheF9menGnWyqbMCkhIS6P5pD/dKMpbEnGn2Rs1rfA08JfTMoxVT7o22OL4YRhCCzsf2ZThHNTnF9yepq9ndsObyVItd7WnmPMthW8JlRyXG2Rpqs0Sj0Z6UL7UYLde2qOtZD5dEJmSL/WgsXgz290bPxVPckMJ6lanZ4dbzVG3Zi1f1HPF4LkoX2XkkfmLU/UdpeQyX2XkfDz2D4qnuSGZm+akjU8NQ/s+d66FF5yftf9R2l803/MTKVp2qPXbEtMKdoWKsPimpadCa/ayljKsZpWZK7DtOkbsRIyvnBKnVwuFtEnSZn+cLlPm1f5qqGrWtMH3LiyLTdaeK8wyjhE2Raw0jn5dKmVkWPlE+N4FlTYCWzNXMsXzbzkC+pJLC1OeVlqljKeXmXYe5zN1cFMsANO0D7hdLEJw416Pc8tCkvz5rPs8A/rbPu/ZU2yRt8J6UamYREXcTMy1UNTE20VD7URjpHMYlGGfjhEY8qe4RXUuGV5XzXM4TNB6pfUqccg57WKeappbLrD9VJYXP7RyR+pPljZMTjVIb7a1SAob2dprEuaT+bSOnvqbOMbUM8cXFm2T1xh/mgALsR7GfNyhql8cNCWVOEkEJuL0j+epXc/kLOOuk4c62RE5iLejlNJDwRU74wwhHRFLpHI6ZFhuubqJunEDDjbjYjhJseHjhhxw+NWBCFQ+F8q8tR7MOPWw7UOP5Uxwi1YlTSd7c/H7lfzWRj5jcjM0CRcIdxeE4QlU3iJzCGbscvKm4LFGWdcIWwrcIRJ0W7snBGouELNizx08cVaTw/JxeD2Ipkm5lzFQAkJFqlrCW1raKeVZfauEhVo2cnHwV7mj2diHSrXUU9N7EQGcuL1woQzU4fC2frTNF5twb4hqpqwEJDSRVVYs0OKrj051LX2TOoTaEsWIaRIVpiyI4d7DSOLV5xLkaWGq0abhTnq90+XkdDiK0KkL5Xm3urWIQLjjjzjm9qRqp1hxa1JD5ujpL3+cxKoZYIDSPuu1tYVNTYpxDLeLTh8lepd12qoGKSGktUVlw7Ad7yn6J/csUO0HSpqKi9O9cyNykiThCNJYcWGrxsXrqq4GGhpHCOqPGI81RuXmX3aRJq6EtYtYvm+L4lIZY4xwlhMdaGyUOcHRj9XEu+7HwMMNSeSTfK91YwO08dLEyjnha1+t+Zuuh5o+SK8PS4EJDERzFraFuWMy2MzMlpMaJnJyUPXaq8Y/SkwZISI8TX+I799SDMvOZScepa2Z+pDwYLlFehELT3PrLfKp+Tbdj0if/AIXIJOG5xYw6tnsf4pfacipvEV4JtGdvmHzR5ESlskLNbw7xlB5pXQkJfOZ6S73yJzl7Hlm9SWYDwWmx+zBOpNbK1U062IedtD4XOHvo59X6icR9TU2AjxCI+CIj9leJsYkOGrD0ksu+wtcYjDjIflgnqViGp8ysNkjNnAtFRDyw2f8AyTXa2TjWJ2XAcxVXjY7O0UWxHkz6afkUgdZEtUvJxfZXhsRa1jzR6RCPmqxCtkeaGj23KUqWaOSeq+ngRSXkg2RSiEoPNTraQNEVYFp2oQxCXS6Mf80ljDwfX4ldjXclcoOgoOw3lIDqpPM2aOt683/JO8fX1zLRNGpYVZX5kdSnG2qInP2WI4h04hLZ8ri1uSKQTm0OItoatUS7XTzY4k+Wg95vr6+DBNDg4Sq5tVX2fkWpSba1KdtdCEDk4M5MvCLl06LeEqahIRIhEXB71WiPSSS09z60BqoFp4ei5dkXiuQUjyQc/rFyocV24JFzsTZVdnSrFCC4Dt+nH4lu3NI9A7FrSWHSvyZzraGRlpDrSh9Ki7cHzYqOWjYU4JU72f8AILyV1Q6KapxoatlYfDibHHZyy/Y853M/82S9StizlX6M6PhDSui55oUxTifGnATjMrzJuyivN7TrXBTLZNkJFipqHhBIdLZjERjCMOUexngqf/KTqJb86W9t8b0dcYONVyThAVIvnTCMBMgoz9mI5+VXZlZbIy0y28Q1kLeER2sSglv5MTM489vhoWXbacGfEqcLbYjdtjT34LpqVOl8LGPXV+pgzlUeJlJ/pdl5o9MbqspbT7MhMShS4uOCQnGZKm9bEibHg2qtMdGiEfjVuZCbndmOky9NThS7ouXjNLrk3KXglSP56UYBXGGmkoD8eaObnqeyGKxn5afImpq5cqGVK8En8JDhphhzceeObVT1YWVtL9/ZEyUqbhUuSRERaxERCTJZ7wc+nRnhi4oRVeGWCva/53lipGTdoy+xfltexSk5t9+bG15oSmXCdwy0oTfCc2mMKod/lS2PsaxGy5ay4WnWEs+4+JuylNROVYSFp/DmvOOEVF9zzdhcaJls/wA0IiEnAjwlnPatRCx7gUey1EYQjppjxK+Mn90KWdbHfFMufOA79gvHbhU0fQOEPhjxqeNWM9Fb0SZXnxYfq9ehQmWG5vPZNWXOuSk4JBO3DR3L87ZpsOM1E2+0+JkInGqmNUOIc0IjnjnhO5dlaUu7cZRNb9CbvGnJqeJufZFikiKq0GzJ5kRDRmjoxcmddqSk5KTrbl0bE011twQJt5vwXA00/BFMc5udWQ5V+YygVVVUMMjrDSWrDWxK0sRKNkna3QrcKlO7lzfXwKTnNwOwLTYbm7Km5yRamWrxoWXd+SJtuDhuxfheNQ5NEY5uwtmUvsdxnLgnbQuN6SwywlLiJNk23TieIgqEsOnRmV75NZLMWfKMSUkNEvLN3bIRqKkaic1ijGJaSLlVU+yRyfnDkCfkN8g6w8245cuOUuMDURcGMcRQO7LN0eXMqtavnkk473dtf787lqhCaTyyvtf80GXIfcAKz3nX5e0hmL9gWCvasIi5eVCTLcI1RitJexrEiIhnnxqKrRaFojrfEqNsjdPtmWmRIpt2Yuy1HXHBc8rQQrorc13XJyeFt+YaaZleDbEXb6/mXKqXXG5nQ02AwqjmKEYx7KqThq3G3g9GTRqyWk4+a1QyOexxdHVtCcp6Nqzo/aBOk1uITLtm9Td+GIYfzjfT7k/TfX12UyTdVEY7PF8ivSTeF1sXAKofslzSHZJbCa/8lC5N/tXv9ywmtypbV3LJuZknJI54Wbxm4F5knt8tDSI3jbxBr5h0x5ao9lOFg7nLstLMShWgR3DLbIm62Tjzt2Os44TkLw48uhWVACWIBV0lXd+VvYkuiFDkQ73Z/gf/AOi9jkW7tTmHosYvOcUyg2X/AB/5LEY+L4X3k3Xb2FuiMs5Ftbb8yfjC3/2wSqVyTk28V1WXOeIn/Ncjm+pPsYIoJKnLp7aA2hO1LNtjSAiI80BpHyRXq7FbaVpdqqpESLnEJCJDh1qS1kqhOTGuokcabsGR5TdtPTNmWhZ9Ey2245/WskwV+23duVDeZy0Dn4lBnslrQb/+ryZDzmrZbcxeCLkIj8ipe8WYOLcr4pVHdwjfe7+9jOw+DdKKi53S7l/Zc8vZlqVUjbghzf60IfJ4bMnlizrcEamspxAxxN/1yQlUOIdZyMOPs6FQEX1mD/hKtGo1+1e/3LUqMH/wvsdMWTlrl5hEbYknf/yJyyDLxiI4KS2ZlfugmQiE5Y7pFq/nNkfwvrkKEwswmVNCtTj+qmn5y/w0Q1MNJ/pkl5HarOVW6HiEnbDiQ6wxmrNgXmzCYbQ3WssGHyYecsa9b1hvWSHxXG5jMS5K32XfWIzChxbp1o5VTUXveX0cmPw1GVOV5yutkre51y3uyZVco2GX7TF5s0lDe7VlPytWH5b38MwuPN8L2M0XJUsp4GXRr0/s0eJD8Z2Qxu429tNZP/PvD/rRS1rdttvlayf+lv8A31xPvhet8pvwEv5ez+4qqw29zuqyN2O23XBbFvJ8SIqajm3xESLnFXhU+aykylOnNHJcj2aZqbLZ2V82AmSEqhIs/ZS123HzGk33SHmxMtn41qYP/YjlaT73f6XM7F0XVd4Sy+9/M+kMLbys5mTfxTM8swtzKnajk0HwzE8X7182oWu72xz5wvSsRtZ3nueUXpV74mH8I+/3KXwlb+Z9KAtPKwuXJqHjz5f5GtJ2llhyfk3/AO/j/rL5vwtl3trvzjnpR1af7a75bnpR8TD+Eff7iPB1f5fnofRSZtHLWmoTycH9nOl/rpjnrdy17uyeD/00z/qOxXA0bZf7a78456VrO0nC4zc8ovSnfFUv+2vdf5G/BVn+/wBrncU7beXWzatgw8FgR/7kc6Zpie3QD1LasrxAlB/gzrjIp8+cXlIhPFzi8pROvSb/APjXq/uTxwlRL9Sv4HX0xZ26KXFbcr4jsu3/AKeZa5uxt0Okarea8WZlhLzWVyRC03e2OfOF6UdVHe2O/OF6U+Negv8A6l6v7kcsHWf71/8Ak6hdyYy6cL84tknRLZG0xb8WkYD8iWZMZKZRSzwvmLr5CWuMy3M+UROasVyj1Sc7YflF95bAtd0dV10f2jnpT1iqSf6Pd/cY8BWtbNH0/s+l+SFqOPsi3MNExMU4hOkbynWIdOJSCEu5sj9n0r5YjbL+tfu4dXhHMPg6VuhlFM90zPzrv30541dF/krf9Jl/Je59SIslzSTdPFrYh8YhH7UV8yPykm+6Zn593761OW0+Ws++XwuH95Cx9ugkux5S/cj6MWq5rUkOHDrN4ulx/F8iQuu0tbNVJYah9PKvnidrOlrOu/OOeleY2o72135xz0qzHtqSVsvuN/6Av5+39ncATt26TgOCBiOEhcbxCVOtp+WEU+M5XuiPXGC8IR/hOC4C6ouc8/KJZhaDnPPyi9Kwu0M2JqZ9Fp4m7gsPHDwy3ud+wy0Mar3exjs0kTf8ZJHMZbD2tr53/ZcHxtFztrnll6V56ouc8/KL0rP+Dlv+epczI7Zn8sS2W2vnCL9yYJ/KhwtUWh8ov3rkbqi521zyi9KOqTnbD8ovvJywkl1DNE6lsazDtC02ydxBSI6tIiNRVd5XlP5MsPkwRDiZbFtuntY6q+d8bafwwv3cOrwrnpXpvKCaHVmX4ftnfvrQozlCOVq5Sr4bPK8ZWO0N1fc8cp33KiTxCI0h2shw1U83MRR+Fc1ZS5MONuDesFLuiWuIONkJYtUh08XKoL+UU33XM/PvffRC35nF+cv4tbhHI/aKKdKpdfp9ySjTcNJSv5Fh2Na83LE2T7Q2hLtiQ0YW51seDpK8zZnKbsYQzw2VKbIy4k2nL6SnjlHRux3pPC41SJOFeNtvDn0RwQjGHJn4sypArZf5X3PLJI5iaiesVXhYi8pVnSzPX2LGZLk/J8jvyzssSkRYctSR3vNXgtsWgDrbcsV43URC6xGkms1Og4aYdmMc6VH7IiUFwm7uWKmrFv5ilynaGrN9a4fd3SbZNttp20H3mmW7tpt4r0GwpEaREtGq2MPgFI/yxmdoZY/DlmS/co+HXv8Ar025kTVFrWOvcd6y3sgJQixSwkPvU3LufvTtK7tUietLP+LdkPlVr54FlU7TTcyv0ZsfsohlW/2uX+a/5J9q6/d7f2M4dH+L9TvLKW1slLS/TbNqItZ3exNvD0r5mECL5U02DIZNyZDvWengZEiJuXmBJ5gbzWEam6xGPHmzxzLieGWD/a5f5r/mtjeXEyPuUtHwmi++iXxElZy9h64a39T6LWNugWHLNk2D9NRXhYHiJxykRqqKHYEUrLdYsbt5l4LRL5xwy9me0yf0f/mt/wDSNN8dzI/RR+8ktX/l7DMlPZ+p9ET3XrI7afzRLU5uvWR2x3wrsvQvnr/SXPbLcmPgybP8S9R3TrQ5snDwZOXTXCs+vsOSp959Bi3YLKp1nCLpDSX+Sx/TFZVVIuc6oiKn7UF8/wAd1a0+dLfQ5bD4OFaz3U7X7eA+DLSw6v7NN4VXcX/b2Z9Aw3W7LqLhP8QaSSab3Y5ERwCJR2RvP4tC4JDdWtnuoPo0p/L41gd1a2aqt+Qq4v0aU+zc5kcKrv8AnoFobHc09u1MDqMV9HEReLd50w2ju1Th1b1kXS8Bhwqf2hQzfWuPC3Ybe/WBj4LUoP2WMK0zO6tbjg0naD9PRu2/OZAYpHRqvr7/AND0obDeNl2byzTnkgiFlWb3YfkB95RStFatcKX8voHGj/El/UezO7nPmw9KxCxbO7uLyW/SolBxZvIo4cv5fQONDYl/USze7i8lv0o6i2b3cXktffUQvIovIo4ctxePDYmHUOze7i8lr76Oolmd3F5LX31D7yKLyKOHLf6Bx4bEw6iWb3cXktffXiNiWf3d5rf31EryKL6KOHPf6C8eGxK42LZ/dnmt/fXnqNI92ea399Ra9is3xI4c9/oHHhsS4LCs8v7dT+zD76x1Bs/u75QD76iN9FF7FGSf8vZCOtDYl0bAke7h8lv76HMn5PDTPDTtRiIa3giaiN9FF9FGSW/sg40NiX/k7J/rAPmx/mLBZOSf6wb8kfvqI3xIvooyS39kHGhsS2GTcp3c35I/fRDJuV7ua8n/AJqJ3xIviRknv7BxobErjk1Ld3N+SP315PJuW2ZxsvF/5qLXxLF8SMk9/YONDYljWTLBU/njQ1dmnV6WPD8CweTLA/2xr18dRS+JF8SMk9w40NiURyba7rb8n/mvQZLtkJFvtqkfBHza86it8SL4kZJ7hxqexJ/yaa5JsPJ/5ry5k42P9pb9fjUaviRfElyT39heNT2JF1Ab7pb8n/dBZPt90t+T/uo7fEi+ijJPcONT2JB1ADt4eT/ujqAHbw8kkwX5Ig+SbknuHGp7EjmclybprdbGoah6Q85aOoI9tDzkyRmCRvgkZJ7hxqew8xsD31vzkRsD31vzkzb4JG+CS5J7hxKew89QffQ85eY2F76HnJnhMEs75JJknuHFpfxHbqL74HnLx1FLnh53oTXvglnfBJ2We4jq09h06il2wPO+6iNilzw870Js3ySN8kjLPcXiU9hwjY5c4fO9C1P2aQ8ZD8VXoSPfJI3ySFGe411Kex7jL9LzS9CIsdL6i9C13xIv4p1pEeaJ6uekPnehFz0h870LxfRRfRS6iXiernpD53oWbrvj6/EvO+CRvgkfMF4nuDHSFZjLdIV43wSzCZLspLSFzRPW9+kKIS3SHyl530SN8ki0hc0DZvXpD5SzvXwfKXmE85yRXjfJJtpDs1M270j0flRvQu98q1b5JG+iRaYZoG2MmXqQo3mXrFa99n2UQnD5yW0gzUu8TIQhSFYEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCAP/2Q==\n", + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from IPython.display import YouTubeVideo\n", + "YouTubeVideo('sjfsUzECqK0')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Using the nascent video capabilities of modern browsers, you may also be able to display local\n", + "videos. At the moment this doesn't work very well in all browsers, so it may or may not work for you;\n", + "we will continue testing this and looking for ways to make it more robust. \n", + "\n", + "The following cell loads a local file called `animation.m4v`, encodes the raw video as base64 for http\n", + "transport, and uses the HTML5 video tag to load it. On Chrome 15 it works correctly, displaying a control bar at the bottom with a play/pause button and a location slider." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "