From 552ec6a36899c896dd200a515dc18aadc31fdaae Mon Sep 17 00:00:00 2001 From: Greg Werner Date: Mon, 24 Aug 2020 13:09:13 -0400 Subject: [PATCH] feat: Consolidate role-base images (#21) - Creates illumidesk/base-notebook image with repo2docker - Updates illumidesk/illumidesk-notebook image so that's its compatible with the standard jupyter/docker-stacks images - Adds nbgrader extensions using before-notebook start hook --- .flake8 | 3 +- .travis.yml | 5 +- Makefile | 16 +- README.md | 53 +- base-notebook/Dockerfile | 123 -- base-notebook/Manifest.toml | 1439 +++++++++++++++++ base-notebook/Project.toml | 27 + base-notebook/apt.txt | 52 + base-notebook/environment.yml | 52 +- base-notebook/install.jl | 36 - base-notebook/jupyter_notebook_config.py | 7 - base-notebook/jupyter_notebook_config_base.py | 74 - base-notebook/postBuild | 64 + base-notebook/requirements.txt | 18 - base-notebook/runtime.txt | 1 + dev-requirements.txt | 2 +- grader-notebook/Dockerfile | 21 - illumidesk-notebook/Dockerfile | 128 ++ illumidesk-notebook/enable_extensions.sh | 29 + .../global_nbgrader_config.py | 0 .../jupyter_notebook_config.py | 11 + illumidesk-notebook/requirements.txt | 6 + illumidesk-notebook/start.sh | 147 ++ .../test/test_languages.py | 4 +- img/docker_stacks_v2.png | Bin 0 -> 95585 bytes img/grader_images.png | Bin 45826 -> 0 bytes img/workspace_images.png | Bin 56197 -> 0 bytes instructor-notebook/Dockerfile | 22 - learner-notebook/Dockerfile | 18 - rstudio/Dockerfile | 40 - rstudio/jupyter_notebook_config.py | 7 - rstudio/rserver.conf | 3 - rstudio/test/test_rstudio.py | 33 - theia/Dockerfile | 87 - theia/jupyter_notebook_config.py | 7 - theia/package.json | 47 - theia/requirements.txt | 5 - theia/run_theia.sh | 7 - theia/test/test_theia.py | 33 - vscode/Dockerfile | 29 - vscode/jupyter_notebook_config.py | 7 - vscode/requirements.txt | 1 - vscode/test/test_vscode.py | 34 - 43 files changed, 1980 insertions(+), 718 deletions(-) delete mode 100644 base-notebook/Dockerfile create mode 100644 base-notebook/Manifest.toml create mode 100644 base-notebook/Project.toml create mode 100644 base-notebook/apt.txt delete mode 100644 base-notebook/install.jl delete mode 100644 base-notebook/jupyter_notebook_config.py delete mode 100644 base-notebook/jupyter_notebook_config_base.py create mode 100644 base-notebook/postBuild delete mode 100644 base-notebook/requirements.txt create mode 100644 base-notebook/runtime.txt delete mode 100644 grader-notebook/Dockerfile create mode 100644 illumidesk-notebook/Dockerfile create mode 100644 illumidesk-notebook/enable_extensions.sh rename {base-notebook => illumidesk-notebook}/global_nbgrader_config.py (100%) create mode 100644 illumidesk-notebook/jupyter_notebook_config.py create mode 100644 illumidesk-notebook/requirements.txt create mode 100644 illumidesk-notebook/start.sh rename {base-notebook => illumidesk-notebook}/test/test_languages.py (88%) create mode 100644 img/docker_stacks_v2.png delete mode 100644 img/grader_images.png delete mode 100644 img/workspace_images.png delete mode 100644 instructor-notebook/Dockerfile delete mode 100644 learner-notebook/Dockerfile delete mode 100644 rstudio/Dockerfile delete mode 100644 rstudio/jupyter_notebook_config.py delete mode 100644 rstudio/rserver.conf delete mode 100644 rstudio/test/test_rstudio.py delete mode 100644 theia/Dockerfile delete mode 100644 theia/jupyter_notebook_config.py delete mode 100644 theia/package.json delete mode 100644 theia/requirements.txt delete mode 100644 theia/run_theia.sh delete mode 100644 theia/test/test_theia.py delete mode 100644 vscode/Dockerfile delete mode 100644 vscode/jupyter_notebook_config.py delete mode 100644 vscode/requirements.txt delete mode 100644 vscode/test/test_vscode.py diff --git a/.flake8 b/.flake8 index c2297ce..7419d9d 100644 --- a/.flake8 +++ b/.flake8 @@ -4,6 +4,7 @@ # # F403: import * # F811: redefinition of unused `name` from line `N` +# F821: undefined name # F841: local variable assigned but never used # E402: module level import not at top of file # I100: your import statements are in the wrong order. @@ -17,7 +18,7 @@ # W293: line break before binary operator # W293: blank line contains whitespace select = E,F,W,C -ignore = F403, F811, F841, E231, E402, I100, I101, D400, E501, E501, E503, E731, W293, W503 +ignore = F403, F811, F821, F841, E231, E402, I100, I101, D400, E501, E501, E503, E731, W293, W503 extend-ignore = E203 max-complexity = 15 # https://docs.djangoproject.com/en/dev/internals/contributing/writing-code/coding-style/ diff --git a/.travis.yml b/.travis.yml index bb9cfe3..a3efac3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,7 +2,7 @@ dist: bionic language: python python: - - 3.7 + - 3.8 sudo: required services: - docker @@ -15,7 +15,8 @@ jobs: - pip install -r dev-requirements.txt script: - set -e - - make build-all + - travis_wait 60 make build/base-notebook + - travis_wait 60 make build/illumidesk-notebook - pytest -vv stages: diff --git a/Makefile b/Makefile index 408ce5a..d38975f 100644 --- a/Makefile +++ b/Makefile @@ -13,20 +13,10 @@ PYTHON=${VENV_BIN}/python3 # Need to list the images in build dependency order ALL_STACKS:=base-notebook \ - learner-notebook \ - instructor-notebook \ - grader-notebook \ - rstudio \ - theia \ - vscode + illumidesk-notebook ALL_IMAGES:=$(ALL_STACKS) -ALL_TEST_IMAGES:=base-notebook \ - rstudio \ - theia \ - vscode - # Linter HADOLINT="${HOME}/hadolint" @@ -42,9 +32,9 @@ help: build/%: DARGS?= build/%: TAG?= build/%: ## build the latest image for a stack - docker build $(DARGS) --rm --force-rm -t $(OWNER)/$(notdir $@):$(TAG) ./$(notdir $@) + jupyter-repo2docker --no-run --user-id 1000 --user-name jovyan --image-name $(OWNER)/$(notdir $@):$(TAG) ./$(notdir $@) . @echo -n "Built image size: " - @docker images $(OWNER)/$(notdir $@):latest --format "{{.Size}}" + @docker images $(OWNER)/$(notdir $@):$(TAG) --format "{{.Size}}" build-all: $(foreach I,$(ALL_IMAGES), build/$(I)) ## build all stacks diff --git a/README.md b/README.md index e51e873..fef9b18 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ make build-all Running the image standalone is helpful for testing: ```bash -docker run -p 8888:8888 illumidesk/base-notebook:latest +docker run -p 8888:8888 illumidesk/illumidesk-notebook:latest ``` > Refer to [docker's documentation](https://docs.docker.com/engine/reference/run/) for additional `docker run ...` options. @@ -34,11 +34,7 @@ docker run -p 8888:8888 illumidesk/base-notebook:latest | --- | --- | | illumidesk/base-notebook | [![Docker Image](https://img.shields.io/docker/automated/illumidesk/base-notebook)](https://img.shields.io/docker/automated/illumidesk/base-notebook?label=base-notebook) | | illumidesk/grader-notebook | [![Docker Image](https://img.shields.io/docker/automated/illumidesk/grader-notebook)](https://hub.docker.com/repository/docker/illumidesk/base-notebook?label=grader-notebook) | -| illumidesk/instructor-notebook | [![Docker Image](https://img.shields.io/docker/automated/illumidesk/instructor-notebook)](https://hub.docker.com/repository/docker/illumidesk/instructor-notebook?label=instructor-notebook) | -| illumidesk/learner-notebook | [![Docker Image](https://img.shields.io/docker/automated/illumidesk/learner-notebook)](https://hub.docker.com/repository/docker/illumidesk/learner-notebook?label=learner-notebook) | -| illumidesk/rstudio | [![Docker Image](https://img.shields.io/docker/automated/illumidesk/rstudio)](https://hub.docker.com/repository/docker/illumidesk/rstudio?label=rstudio) | -| illumidesk/theia | [![Docker Image](https://img.shields.io/docker/automated/illumidesk/theia)](https://hub.docker.com/repository/docker/illumidesk/theia?label=theia) | -| illumidesk/vscode | [![Docker Image](https://img.shields.io/docker/automated/illumidesk/vscode)](https://hub.docker.com/repository/docker/illumidesk/vscode?label=vscode) | +| illumidesk/illumidesk-notebook | [![Docker Image](https://img.shields.io/docker/automated/illumidesk/instructor-notebook)](https://hub.docker.com/repository/docker/illumidesk/illumidesk-notebook?label=illumidesk-notebook) | ### Images prepared for Learning Tools Interoperability (LTI) Roles @@ -54,7 +50,7 @@ docker run -p 8888:8888 illumidesk/base-notebook:latest The IllumiDesk docker layers for grader images are illustrated below: -![Jupyter notebook grader images](/img/grader_images.png) +![Jupyter notebook grader images](/img/docker_stacks_v2.png) ### Additional Workspace Types @@ -64,41 +60,30 @@ The IllumiDesk docker layers for grader images are illustrated below: The IllumiDesk docker layers for workspace types are illustrated below: -![Jupyter notebook workspace images](/img/workspace_images.png) +![Jupyter notebook workspace images](/img/docker_stacks_v2.png) ## Build Mechanism -1. Build and tag the base image or all images at once: +1. Build and tag the base image or all images at once. Use the `TAG` argument to add your custom tag. The `TAG` argument defaults to `latest` if not specified: ```bash - make build/base-image TAG=mytag + make build/base-notebook TAG=mytag ``` -or +The base image uses the standard `repo2docker` convention to set dependencies. [Refer to this project's documentaiton](https://repo2docker.readthedocs.io/en/latest/) for additional configuration options. -```bash - make build-all TAG=mytag -``` - - -2. Use the base image from step 1 above as: - a) A base image and add additional layers to said image to create your own custom image +2. (Optional) Use the base image from step 1 above as a base image for an image compatible with the illumidesk stack. ``` -FROM illumidesk/base-notebook:latest - -RUN ... -``` +FROM jupyter/minimal-notebook:latest AS base -or - - b) A source image for files necessary to use image with the [IllumiDesk](https://github.com/IllumiDesk/illumidesk) stack. - -``` -FROM illumidesk/base-notebook:latest AS base +FROM illumidesk/base-notebook:latest -FROM acme/image:tag +ENV NB_USER=jovyan +ENV NB_UID=1000 +ENV NB_GID="${NB_GID}" +ENV HOME="/home/${NB_USER}" COPY --from=base /usr/local/bin/start* /usr/local/bin/ COPY --from=base /usr/local/bin/fix-permissions /usr/local/bin/ @@ -107,7 +92,7 @@ COPY --from=base /etc/jupyter/jupyter_notebook_config.py /etc/jupyter/ RUN ... ``` -3. Push images to DockerHub +2. Push images to DockerHub ```bash docker push organization/custom-image @@ -118,13 +103,7 @@ docker push organization/custom-image Tests start the docker container(s), runs commands by emulating the `docker exec ...` command, and asserts the outputs. You can run tests on one image or all images. Use the `TAG` key to specify a docker image tag to test (TAG defaults to `latest`): ```bash -make test/base-notebook TAG=mytag -``` - -or (using default `latest` tag): - -```bash -make test-all +pytest -v ``` ## References diff --git a/base-notebook/Dockerfile b/base-notebook/Dockerfile deleted file mode 100644 index 926cc65..0000000 --- a/base-notebook/Dockerfile +++ /dev/null @@ -1,123 +0,0 @@ -ARG BASE_IMAGE=jupyter/datascience-notebook:acb539921413 -FROM $BASE_IMAGE - -ARG JHUB_HASH_COMMIT=f3c3225124f1c5d9acb2503ec4d9c35a140f6a78 - -ENV JHUB_CONFIG=$JHUB_CONFIG -ENV JHUB_HASH_COMMIT=$JHUB_HASH_COMMIT -ENV JUPYTER_ENABLE_LAB=no -ENV RESTARTABLE=yes - -USER root - -## install o/s level deps -RUN apt-get update \ - && apt-get install -y \ - at-spi2-core \ - default-jre \ - ffmpeg \ - gdebi-core \ - gnupg \ - libclang-dev \ - libapparmor1 \ - libgl1-mesa-glx \ - libgtk-3-dev \ - libqt5widgets5 \ - libxrender1 \ - libxext6 \ - libxt6 \ - nano \ - openjdk-11-jdk-headless \ - psmisc \ - xauth \ - xvfb \ - && apt-get clean \ - && rm -rf /var/lib/apt/lists/* - -# ensure we have conda>=4.8.3 -# https://docs.conda.io/projects/conda/en/latest/release-notes.html#bug-fixes -RUN conda update -n base conda -y \ - && fix-permissions "${CONDA_DIR}" - -WORKDIR /tmp - -## Install additional kernels -# install java kernel -RUN git clone https://github.com/frankfliu/IJava.git -WORKDIR /tmp/IJava -RUN ./gradlew installKernel -# cleanup -WORKDIR /tmp -RUN rm -rf IJava/ \ - && rm -rf ~/.gradle \ - && fix-permissions "${HOME}" \ - && fix-permissions "${CONDA_DIR}" - -# install julia packages -COPY install.jl /tmp/install.jl -RUN julia /tmp/install.jl \ - && fix-permissions "${JULIA_PKGDIR}" \ - && fix-permissions "${HOME}" \ - && rm /tmp/install.jl - -# install r packages -COPY environment.yml /tmp/environment.yml -RUN conda env update --name base --file /tmp/environment.yml --prune \ - && conda clean --all -f -y \ - && fix-permissions "${CONDA_DIR}" \ - && fix-permissions "${HOME}" \ - && rm /tmp/environment.yml \ - && conda clean --all -f -y - -# install python packages -COPY requirements.txt /tmp/requirements.txt -RUN python3 -m pip install --no-cache -r /tmp/requirements.txt \ - && rm /tmp/requirements.txt \ - && fix-permissions "${CONDA_DIR}" \ - && fix-permissions "${HOME}" \ - && conda clean --all -f -y - -# Update JupyterHub version, so that its consistent with JupyterHub -RUN git clone https://github.com/jupyterhub/jupyterhub -WORKDIR /tmp/jupyterhub -RUN git checkout -b build "${JHUB_HASH_COMMIT}" \ - && python3 -m pip install . -WORKDIR /tmp -RUN rm -Rf jupyterhub - -# enable classic notebook extensions -# https://jupyter-contrib-nbextensions.readthedocs.io/en/latest/install.html -RUN jupyter contrib nbextension install --sys-prefix - -# nbgrader -# Install global extensions, and disable them globally. We will re-enable -# specific ones for different role-based images -RUN jupyter nbextension install --symlink --sys-prefix --py nbgrader --overwrite \ - && jupyter nbextension disable --sys-prefix --py nbgrader \ - && jupyter serverextension disable --sys-prefix --py nbgrader - -# Everybody gets the validate extension -RUN jupyter nbextension enable --sys-prefix validate_assignment/main --section=notebook && \ - jupyter serverextension enable --sys-prefix nbgrader.server_extensions.validate_assignment - -# Install the jupyter-server-proxy extension and ensure we build -# any additional lab extensions -RUN jupyter serverextension enable --sys-prefix --py jupyter_server_proxy \ - && jupyter labextension install @jupyterlab/server-proxy \ - && jupyter lab build - -# Copy configs -COPY jupyter_notebook_config_base.py jupyter_notebook_config.py global_nbgrader_config.py /etc/jupyter/ - -# create globally available exchange directory and fix permissions as root -RUN mkdir -p /srv/nbgrader/exchange \ - && fix-permissions /srv/nbgrader/exchange \ - && fix-permissions /etc/jupyter \ - && fix-permissions "${HOME}" \ - && fix-permissions "${CONDA_DIR}" - -# set container to run with $NB_UID and ensure we land in home directory -USER "${NB_UID}" - -# users start in their home root directory -WORKDIR "${HOME}" diff --git a/base-notebook/Manifest.toml b/base-notebook/Manifest.toml new file mode 100644 index 0000000..079f8e5 --- /dev/null +++ b/base-notebook/Manifest.toml @@ -0,0 +1,1439 @@ +# This file is machine-generated - editing it directly is not advised + +[[ATK_jll]] +deps = ["Glib_jll", "Libdl", "Pkg"] +git-tree-sha1 = "7129d58ed99d42032cefe21bcd14171a878143d2" +uuid = "7b86fcea-f67b-53e1-809c-8f1719c154e8" +version = "2.34.1+2" + +[[AbstractFFTs]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "051c95d6836228d120f5f4b984dd5aba1624f716" +uuid = "621f4979-c628-5d54-868e-fcf4e3e8185c" +version = "0.5.0" + +[[Adapt]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "0fac443759fa829ed8066db6cf1077d888bb6573" +uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" +version = "2.0.2" + +[[AssetRegistry]] +deps = ["Distributed", "JSON", "Pidfile", "SHA", "Test"] +git-tree-sha1 = "b25e88db7944f98789130d7b503276bc34bc098e" +uuid = "bf4720bc-e11a-5d0c-854e-bdca1663c893" +version = "0.1.0" + +[[AxisAlgorithms]] +deps = ["LinearAlgebra", "Random", "SparseArrays", "WoodburyMatrices"] +git-tree-sha1 = "a4d07a1c313392a77042855df46c5f534076fab9" +uuid = "13072b0f-2c55-5437-9ae7-d433b7a33950" +version = "1.0.0" + +[[AxisArrays]] +deps = ["Dates", "IntervalSets", "IterTools", "RangeArrays"] +git-tree-sha1 = "f31f50712cbdf40ee8287f0443b57503e34122ef" +uuid = "39de3d68-74b9-583c-8d2d-e117c070f3a9" +version = "0.4.3" + +[[Base64]] +uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" + +[[BinDeps]] +deps = ["Libdl", "Pkg", "SHA", "URIParser", "Unicode"] +git-tree-sha1 = "46cf2c1668ad07aba5a9d331bdeea994a1f13856" +uuid = "9e28174c-4ba2-5203-b857-d8d62c4213ee" +version = "1.0.1" + +[[Blink]] +deps = ["Base64", "BinDeps", "Distributed", "JSExpr", "JSON", "Lazy", "Logging", "MacroTools", "Mustache", "Mux", "Reexport", "Sockets", "WebIO", "WebSockets"] +git-tree-sha1 = "434893c1f9e9ce59be3f114641e99ef84c4d8f1a" +uuid = "ad839575-38b3-5650-b840-f874b8c74a25" +version = "0.12.3" + +[[Blosc]] +deps = ["Blosc_jll"] +git-tree-sha1 = "84cf7d0f8fd46ca6f1b3e0305b4b4a37afe50fd6" +uuid = "a74b3585-a348-5f62-a45c-50e91977d574" +version = "0.7.0" + +[[Blosc_jll]] +deps = ["Libdl", "Lz4_jll", "Pkg", "Zlib_jll", "Zstd_jll"] +git-tree-sha1 = "aa9ef39b54a168c3df1b2911e7797e4feee50fbe" +uuid = "0b7ba130-8d10-5ba8-a3d6-c5182647fed9" +version = "1.14.3+1" + +[[Bzip2_jll]] +deps = ["Libdl", "Pkg"] +git-tree-sha1 = "5ccb0770e3d1c185a52e6d36e3ffb830639ed3d2" +uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0" +version = "1.0.6+3" + +[[CSV]] +deps = ["CategoricalArrays", "DataFrames", "Dates", "Mmap", "Parsers", "PooledArrays", "SentinelArrays", "Tables", "Unicode"] +git-tree-sha1 = "a390152e6850405a48ca51bd7ca33d11a21d6230" +uuid = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b" +version = "0.7.7" + +[[Cairo]] +deps = ["Cairo_jll", "Colors", "Glib_jll", "Graphics", "Libdl", "Pango_jll"] +git-tree-sha1 = "e4c0b40e9c8fb659837d8dc8cf538bbbc831a061" +uuid = "159f3aea-2a34-519c-b102-8c37f9878175" +version = "1.0.4" + +[[Cairo_jll]] +deps = ["Bzip2_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "LZO_jll", "Libdl", "Pixman_jll", "Pkg", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"] +git-tree-sha1 = "d296f5e975306844de3e57118c3cf4a7cf2a8762" +uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a" +version = "1.16.0+4" + +[[CatIndices]] +deps = ["CustomUnitRanges", "OffsetArrays"] +git-tree-sha1 = "0c91e4fcda51bbd881c5d49ef784460750abcac0" +uuid = "aafaddc9-749c-510e-ac4f-586e18779b91" +version = "0.2.1" + +[[CategoricalArrays]] +deps = ["DataAPI", "Future", "JSON", "Missings", "Printf", "Statistics", "Unicode"] +git-tree-sha1 = "a6c17353ee38ddab30e73dcfaa1107752de724ec" +uuid = "324d7699-5711-5eae-9e2f-1d82baa6b597" +version = "0.8.1" + +[[ColorSchemes]] +deps = ["ColorTypes", "Colors", "FixedPointNumbers", "Random", "StaticArrays"] +git-tree-sha1 = "7a15e3690529fd1042f0ab954dff7445b1efc8a5" +uuid = "35d6a980-a343-548e-a6ea-1d62b119f2f4" +version = "3.9.0" + +[[ColorTypes]] +deps = ["FixedPointNumbers", "Random"] +git-tree-sha1 = "efec1b9e082d98d24c99f243abafb4653fb960d6" +uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" +version = "0.10.7" + +[[ColorVectorSpace]] +deps = ["ColorTypes", "Colors", "FixedPointNumbers", "LinearAlgebra", "SpecialFunctions", "Statistics", "StatsBase"] +git-tree-sha1 = "bd0c0c81a39923bc03f9c3b61d89ad816e741002" +uuid = "c3611d14-8923-5661-9e6a-0046d554d3a4" +version = "0.8.5" + +[[Colors]] +deps = ["ColorTypes", "FixedPointNumbers", "InteractiveUtils", "Reexport"] +git-tree-sha1 = "5639e44833cfcf78c6a73fbceb4da75611d312cd" +uuid = "5ae59095-9a9b-59fe-a467-6f913c188581" +version = "0.12.3" + +[[Compat]] +deps = ["Base64", "Dates", "DelimitedFiles", "Distributed", "InteractiveUtils", "LibGit2", "Libdl", "LinearAlgebra", "Markdown", "Mmap", "Pkg", "Printf", "REPL", "Random", "SHA", "Serialization", "SharedArrays", "Sockets", "SparseArrays", "Statistics", "Test", "UUIDs", "Unicode"] +git-tree-sha1 = "a6a8197ae253f2c1a22b2ae17c2dfaf5812c03aa" +uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" +version = "3.13.0" + +[[CompilerSupportLibraries_jll]] +deps = ["Libdl", "Pkg"] +git-tree-sha1 = "7c4f882c41faa72118841185afc58a2eb00ef612" +uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" +version = "0.3.3+0" + +[[ComputationalResources]] +git-tree-sha1 = "52cb3ec90e8a8bea0e62e275ba577ad0f74821f7" +uuid = "ed09eef8-17a6-5b46-8889-db040fac31e3" +version = "0.3.2" + +[[Conda]] +deps = ["JSON", "VersionParsing"] +git-tree-sha1 = "7a58bb32ce5d85f8bf7559aa7c2842f9aecf52fc" +uuid = "8f4d0f93-b110-5947-807f-2305c1781a2d" +version = "1.4.1" + +[[Contour]] +deps = ["StaticArrays"] +git-tree-sha1 = "81685fee51fc5168898e3cbd8b0f01506cd9148e" +uuid = "d38c429a-6771-53c6-b99e-75d170b6e991" +version = "0.5.4" + +[[CoordinateTransformations]] +deps = ["LinearAlgebra", "StaticArrays"] +git-tree-sha1 = "c230b1d94db9fdd073168830437e64b9db627fcb" +uuid = "150eb455-5306-5404-9cee-2592286d6298" +version = "0.6.0" + +[[Crayons]] +git-tree-sha1 = "c437a9c2114c7ba19322712e58942b383ffbd6c0" +uuid = "a8cc5b0e-0ffa-5ad4-8c14-923d3ee1735f" +version = "4.0.3" + +[[CustomUnitRanges]] +git-tree-sha1 = "0d42a23be3acfb3c58569b28ed3ab8bd67af5ced" +uuid = "dc8bdbbb-1ca9-579f-8c36-e416f6a65cce" +version = "1.0.0" + +[[DataAPI]] +git-tree-sha1 = "176e23402d80e7743fc26c19c681bfb11246af32" +uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" +version = "1.3.0" + +[[DataFrames]] +deps = ["CategoricalArrays", "Compat", "DataAPI", "Future", "InvertedIndices", "IteratorInterfaceExtensions", "Missings", "PooledArrays", "Printf", "REPL", "Reexport", "SortingAlgorithms", "Statistics", "TableTraits", "Tables", "Unicode"] +git-tree-sha1 = "7721fa8c42ccb8f1ea7f99f6c2e94686892dd3b7" +uuid = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" +version = "0.21.5" + +[[DataStructures]] +deps = ["InteractiveUtils", "OrderedCollections"] +git-tree-sha1 = "88d48e133e6d3dd68183309877eac74393daa7eb" +uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" +version = "0.17.20" + +[[DataValueInterfaces]] +git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6" +uuid = "e2d170a0-9d28-54be-80f0-106bbe20a464" +version = "1.0.0" + +[[Dates]] +deps = ["Printf"] +uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" + +[[Dbus_jll]] +deps = ["Expat_jll", "Libdl", "Pkg"] +git-tree-sha1 = "72ff4d947383cc009e02d322f14c7653f7ab4b21" +uuid = "ee1fde0b-3d02-5ea6-8484-8dfef6360eab" +version = "1.12.16+0" + +[[DelimitedFiles]] +deps = ["Mmap"] +uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab" + +[[Distances]] +deps = ["LinearAlgebra", "Statistics"] +git-tree-sha1 = "23717536c81b63e250f682b0e0933769eecd1411" +uuid = "b4f34e82-e78d-54a5-968a-f98e89d6e8f7" +version = "0.8.2" + +[[Distributed]] +deps = ["Random", "Serialization", "Sockets"] +uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" + +[[Distributions]] +deps = ["LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "SpecialFunctions", "Statistics", "StatsBase", "StatsFuns"] +git-tree-sha1 = "56a158bc0abe4af5d4027af2275fde484261ca6d" +uuid = "31c24e10-a181-5473-b8eb-7969acd0382f" +version = "0.19.2" + +[[DocStringExtensions]] +deps = ["LibGit2", "Markdown", "Pkg", "Test"] +git-tree-sha1 = "c5714d9bcdba66389612dc4c47ed827c64112997" +uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" +version = "0.8.2" + +[[EllipsisNotation]] +git-tree-sha1 = "65dad386e877850e6fce4fc77f60fe75a468ce9d" +uuid = "da5c29d0-fa7d-589e-88eb-ea29b0a81949" +version = "0.4.0" + +[[Expat_jll]] +deps = ["Libdl", "Pkg"] +git-tree-sha1 = "def36fdc72dc7a9953673cf5492588ef3d79139c" +uuid = "2e619515-83b5-522b-bb60-26c02a35a201" +version = "2.2.7+3" + +[[FFMPEG]] +deps = ["FFMPEG_jll"] +git-tree-sha1 = "c82bef6fc01e30d500f588cd01d29bdd44f1924e" +uuid = "c87230d0-a227-11e9-1b43-d7ebe4e7570a" +version = "0.3.0" + +[[FFMPEG_jll]] +deps = ["Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "LAME_jll", "LibVPX_jll", "Libdl", "Ogg_jll", "OpenSSL_jll", "Opus_jll", "Pkg", "Zlib_jll", "libass_jll", "libfdk_aac_jll", "libvorbis_jll", "x264_jll", "x265_jll"] +git-tree-sha1 = "1af4493ff9a069e26a538d6f113816b237d3cc37" +uuid = "b22a6f82-2f65-5046-a5b2-351ab43fb4e5" +version = "4.3.1+1" + +[[FFTViews]] +deps = ["CustomUnitRanges", "FFTW"] +git-tree-sha1 = "70a0cfd9b1c86b0209e38fbfe6d8231fd606eeaf" +uuid = "4f61f5a4-77b1-5117-aa51-3ab5ef4ef0cd" +version = "0.3.1" + +[[FFTW]] +deps = ["AbstractFFTs", "FFTW_jll", "IntelOpenMP_jll", "Libdl", "LinearAlgebra", "MKL_jll", "Reexport"] +git-tree-sha1 = "14536c95939aadcee44014728a459d2fe3ca9acf" +uuid = "7a1cc6ca-52ef-59f5-83cd-3a7055c09341" +version = "1.2.2" + +[[FFTW_jll]] +deps = ["Libdl", "Pkg"] +git-tree-sha1 = "6c975cd606128d45d1df432fb812d6eb10fee00b" +uuid = "f5851436-0d7a-5f13-b9de-f02708fd171a" +version = "3.3.9+5" + +[[FileIO]] +deps = ["Pkg"] +git-tree-sha1 = "f354b2087a3b01c1d7152c19f45886c8a036fa5e" +uuid = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" +version = "1.4.0" + +[[FileWatching]] +uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" + +[[FixedPointNumbers]] +deps = ["Statistics"] +git-tree-sha1 = "335bfdceacc84c5cdf16aadc768aa5ddfc5383cc" +uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93" +version = "0.8.4" + +[[Fontconfig_jll]] +deps = ["Bzip2_jll", "Expat_jll", "FreeType2_jll", "Libdl", "Libuuid_jll", "Pkg", "Zlib_jll"] +git-tree-sha1 = "73267a13eabf7506cbc205358139e399a365ab4a" +uuid = "a3f928ae-7b40-5064-980b-68af3947d34b" +version = "2.13.1+12" + +[[Formatting]] +deps = ["Printf"] +git-tree-sha1 = "a0c901c29c0e7c763342751c0a94211d56c0de5c" +uuid = "59287772-0a20-5a39-b81b-1366585eb4c0" +version = "0.4.1" + +[[FreeType2_jll]] +deps = ["Bzip2_jll", "Libdl", "Pkg", "Zlib_jll"] +git-tree-sha1 = "158698cb8b27eccc7a0de16b73ca7912e164d88b" +uuid = "d7e528f0-a631-5988-bf34-fe36492bcfd7" +version = "2.10.1+3" + +[[FriBidi_jll]] +deps = ["Libdl", "Pkg"] +git-tree-sha1 = "94e98e5597e745d9fb3094d89c7b0b754204c9dd" +uuid = "559328eb-81f9-559d-9380-de523a88c83c" +version = "1.0.5+4" + +[[FunctionalCollections]] +deps = ["Test"] +git-tree-sha1 = "04cb9cfaa6ba5311973994fe3496ddec19b6292a" +uuid = "de31a74c-ac4f-5751-b3fd-e18cd04993ca" +version = "0.5.0" + +[[Future]] +deps = ["Random"] +uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820" + +[[GMP_jll]] +deps = ["Libdl", "Pkg"] +git-tree-sha1 = "4dd9301d3a027c05ec403e756ee7a60e3c367e5d" +uuid = "781609d7-10c4-51f6-84f2-b8444358ff6d" +version = "6.1.2+5" + +[[GR]] +deps = ["Base64", "DelimitedFiles", "HTTP", "JSON", "LinearAlgebra", "Printf", "Random", "Serialization", "Sockets", "Test", "UUIDs"] +git-tree-sha1 = "e26c513329675092535de20cc4bb9c579c8f85a0" +uuid = "28b8d3ca-fb5f-59d9-8090-bfdbd6d07a71" +version = "0.51.0" + +[[GTK3_jll]] +deps = ["ATK_jll", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "FriBidi_jll", "Glib_jll", "Graphene_jll", "HarfBuzz_jll", "Libdl", "Libepoxy_jll", "Pango_jll", "Pkg", "Wayland_jll", "Xorg_libX11_jll", "Xorg_libXcomposite_jll", "Xorg_libXcursor_jll", "Xorg_libXdamage_jll", "Xorg_libXext_jll", "Xorg_libXfixes_jll", "Xorg_libXi_jll", "Xorg_libXinerama_jll", "Xorg_libXrandr_jll", "Xorg_libXrender_jll", "adwaita_icon_theme_jll", "at_spi2_atk_jll", "gdk_pixbuf_jll", "iso_codes_jll", "xkbcommon_jll"] +git-tree-sha1 = "2dfd1e3be1bcc8ec24378eb4b1e3e698396c46f6" +uuid = "77ec8976-b24b-556a-a1bf-49a033a670a6" +version = "3.24.11+2" + +[[GeometryBasics]] +deps = ["IterTools", "LinearAlgebra", "StaticArrays", "StructArrays", "Tables"] +git-tree-sha1 = "119f32f9c2b497b49cd3f7f513b358b82660294c" +uuid = "5c1252a2-5f33-56bf-86c9-59e7332b4326" +version = "0.2.15" + +[[GeometryTypes]] +deps = ["ColorTypes", "FixedPointNumbers", "LinearAlgebra", "StaticArrays"] +git-tree-sha1 = "34bfa994967e893ab2f17b864eec221b3521ba4d" +uuid = "4d00f742-c7ba-57c2-abde-4428a4b178cb" +version = "0.8.3" + +[[Gettext_jll]] +deps = ["Libdl", "Libiconv_jll", "Pkg", "XML2_jll"] +git-tree-sha1 = "731622006369631e1d0c180a61d2dd5fe9e4dfd4" +uuid = "78b55507-aeef-58d4-861c-77aaff3498b1" +version = "0.20.1+4" + +[[Glib_jll]] +deps = ["Gettext_jll", "Libdl", "Libffi_jll", "Libiconv_jll", "Libmount_jll", "PCRE_jll", "Pkg", "Zlib_jll"] +git-tree-sha1 = "09ea3797c586eedbb383eb8f1c950a12923f1541" +uuid = "7746bdde-850d-59dc-9ae8-88ece973131d" +version = "2.59.0+2" + +[[Graphene_jll]] +deps = ["Glib_jll", "Libdl", "Pkg"] +git-tree-sha1 = "9d0b534de52582b7f1f044d622b858915dc6b126" +uuid = "75302f13-0b7e-5bab-a6d1-23fa92e4c2ea" +version = "1.10.0+2" + +[[Graphics]] +deps = ["Colors", "LinearAlgebra", "NaNMath"] +git-tree-sha1 = "45d684ead5b65c043ad46bd5be750d61c39d7ef8" +uuid = "a2bd30eb-e257-5431-a919-1863eab51364" +version = "1.0.2" + +[[Graphite2_jll]] +deps = ["Libdl", "Pkg"] +git-tree-sha1 = "6fad1258f2c9eacb86e8726d38c2ad6549f9d91e" +uuid = "3b182d85-2403-5c21-9c21-1e1f0cc25472" +version = "1.3.13+1" + +[[Gtk]] +deps = ["Cairo", "Cairo_jll", "Dates", "GTK3_jll", "Glib_jll", "Graphics", "Libdl", "Pkg", "Reexport", "Serialization", "Test", "Xorg_xkeyboard_config_jll", "adwaita_icon_theme_jll", "gdk_pixbuf_jll", "hicolor_icon_theme_jll"] +git-tree-sha1 = "117a09d72b0b46a0a5720c760dd0859cd7639dfc" +uuid = "4c0ca9eb-093a-5379-98c5-f87ac0bbbf44" +version = "1.1.4" + +[[GtkReactive]] +deps = ["Cairo", "Colors", "Dates", "FixedPointNumbers", "Graphics", "Gtk", "IntervalSets", "Reactive", "Reexport", "RoundingIntegers"] +git-tree-sha1 = "585379917127918a66f0eedf950623b3d670f857" +uuid = "27996c0f-39cd-5cc1-a27a-05f136f946b6" +version = "1.0.3" + +[[HDF5]] +deps = ["Blosc", "HDF5_jll", "Libdl", "Mmap", "Random"] +git-tree-sha1 = "7048678fa1970aaf867f3e99b90f3e85a9847124" +uuid = "f67ccb44-e63f-5c2f-98bd-6dc0ccc4ba2f" +version = "0.13.2" + +[[HDF5_jll]] +deps = ["Libdl", "Pkg", "Zlib_jll"] +git-tree-sha1 = "85bd2e586a10ae0eab856125bf5245e0d36384a7" +uuid = "0234f1f7-429e-5d53-9886-15a909be8d59" +version = "1.10.5+5" + +[[HTTP]] +deps = ["Base64", "Dates", "IniFile", "MbedTLS", "Sockets"] +git-tree-sha1 = "2ac03263ce44be4222342bca1c51c36ce7566161" +uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3" +version = "0.8.17" + +[[HarfBuzz_jll]] +deps = ["Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "Gettext_jll", "Glib_jll", "Graphite2_jll", "Libdl", "Libffi_jll", "Pkg"] +git-tree-sha1 = "7a206ed46082e986179586a4ed60cbc740313ea6" +uuid = "2e76f6c2-a576-52d4-95c1-20adfe4de566" +version = "2.6.1+5" + +[[Hiccup]] +deps = ["MacroTools", "Test"] +git-tree-sha1 = "6187bb2d5fcbb2007c39e7ac53308b0d371124bd" +uuid = "9fb69e20-1954-56bb-a84f-559cc56a8ff7" +version = "0.2.2" + +[[IJulia]] +deps = ["Base64", "Conda", "Dates", "InteractiveUtils", "JSON", "Markdown", "MbedTLS", "Pkg", "Printf", "REPL", "Random", "SoftGlobalScope", "Test", "UUIDs", "ZMQ"] +git-tree-sha1 = "ce336ee8224143d053bf053680bf9182adfd8638" +uuid = "7073ff75-c697-5162-941a-fcdaad2a7d2a" +version = "1.21.2" + +[[IdentityRanges]] +deps = ["OffsetArrays"] +git-tree-sha1 = "be8fcd695c4da16a1d6d0cd213cb88090a150e3b" +uuid = "bbac6d45-d8f3-5730-bfe4-7a449cd117ca" +version = "0.3.1" + +[[ImageAxes]] +deps = ["AxisArrays", "ImageCore", "MappedArrays", "Reexport", "SimpleTraits"] +git-tree-sha1 = "c0aca8db7e9fddda18c9cebff5d147b0e799d676" +uuid = "2803e5a7-5153-5ecf-9a86-9b4c37f5f5ac" +version = "0.6.4" + +[[ImageContrastAdjustment]] +deps = ["ColorVectorSpace", "ImageCore", "ImageTransformations", "MappedArrays", "Parameters"] +git-tree-sha1 = "d22d89e03c8f617e0ae31886ca60e291b548cf59" +uuid = "f332f351-ec65-5f6a-b3d1-319c6670881a" +version = "0.3.5" + +[[ImageCore]] +deps = ["Colors", "FixedPointNumbers", "Graphics", "MappedArrays", "MosaicViews", "OffsetArrays", "PaddedViews", "Reexport", "Requires"] +git-tree-sha1 = "a652c05f8f374861580d420b420fddf3e2e84312" +uuid = "a09fc81d-aa75-5fe9-8630-4744c3626534" +version = "0.8.14" + +[[ImageDistances]] +deps = ["ColorVectorSpace", "Distances", "ImageCore", "LinearAlgebra", "MappedArrays", "Statistics"] +git-tree-sha1 = "cf9b02b9f5e33c768c223de6d8f7d1b6d0cf4136" +uuid = "51556ac3-7006-55f5-8cb3-34580c88182d" +version = "0.2.7" + +[[ImageFeatures]] +deps = ["Distributions", "Images", "Random", "SparseArrays"] +git-tree-sha1 = "8f118598659e5f1d830df2460ea8b0a9f6241c4d" +uuid = "92ff4b2b-8094-53d3-b29d-97f740f06cef" +version = "0.4.2" + +[[ImageFiltering]] +deps = ["CatIndices", "ColorVectorSpace", "ComputationalResources", "DataStructures", "FFTViews", "FFTW", "ImageCore", "ImageMetadata", "LinearAlgebra", "MappedArrays", "OffsetArrays", "Requires", "StaticArrays", "Statistics", "TiledIteration"] +git-tree-sha1 = "0ba209ea8f3f1c4b2f9f3ba6b9f4355098d6ddfe" +uuid = "6a3955dd-da59-5b1f-98d4-e7296123deb5" +version = "0.6.14" + +[[ImageInTerminal]] +deps = ["Crayons", "ImageCore", "ImageTransformations"] +git-tree-sha1 = "116288afd91ca57a400ee111c4d13872aed8d697" +uuid = "d8c32880-2388-543b-8c61-d9f865259254" +version = "0.4.4" + +[[ImageMetadata]] +deps = ["AxisArrays", "ColorVectorSpace", "ImageAxes", "ImageCore", "IndirectArrays"] +git-tree-sha1 = "5c2c78dc11343d83320e790379e0f58de3aa1b7e" +uuid = "bc367c6b-8a6b-528e-b4bd-a4b897500b49" +version = "0.9.1" + +[[ImageMorphology]] +deps = ["ColorVectorSpace", "ImageCore", "LinearAlgebra", "TiledIteration"] +git-tree-sha1 = "64ce92e15cc7750e8b4aa7500f80add029288cb2" +uuid = "787d08f9-d448-5407-9aad-5290dd7ab264" +version = "0.2.8" + +[[ImageQualityIndexes]] +deps = ["ColorVectorSpace", "ImageCore", "ImageDistances", "ImageFiltering", "MappedArrays", "Statistics"] +git-tree-sha1 = "3af30042a8fe85612a6a106cb20ca2fa1eb67bd6" +uuid = "2996bd0c-7a13-11e9-2da2-2f5ce47296a9" +version = "0.1.4" + +[[ImageShow]] +deps = ["Base64", "FileIO", "ImageCore", "Requires"] +git-tree-sha1 = "c9df184bc7c2e665f971079174aabb7d18f1845f" +uuid = "4e3cecfd-b093-5904-9786-8bbb286a6a31" +version = "0.2.3" + +[[ImageTransformations]] +deps = ["AxisAlgorithms", "ColorVectorSpace", "CoordinateTransformations", "IdentityRanges", "ImageCore", "Interpolations", "OffsetArrays", "Rotations", "StaticArrays"] +git-tree-sha1 = "ac8bdd1920078ac047e441aa19135702ecab3d0c" +uuid = "02fcd773-0e25-5acc-982a-7f6622650795" +version = "0.8.5" + +[[ImageView]] +deps = ["AxisArrays", "Cairo", "Graphics", "Gtk", "GtkReactive", "Images", "MappedArrays", "RoundingIntegers", "StatsBase"] +git-tree-sha1 = "dc8447f9742c2051eafbb6ceb4d61bac44807dee" +uuid = "86fae568-95e7-573e-a6b2-d8a6b900c9ef" +version = "0.10.9" + +[[Images]] +deps = ["AxisArrays", "Base64", "ColorVectorSpace", "FileIO", "Graphics", "ImageAxes", "ImageContrastAdjustment", "ImageCore", "ImageDistances", "ImageFiltering", "ImageMetadata", "ImageMorphology", "ImageQualityIndexes", "ImageShow", "ImageTransformations", "IndirectArrays", "MappedArrays", "OffsetArrays", "Random", "Reexport", "SparseArrays", "StaticArrays", "Statistics", "StatsBase", "TiledIteration"] +git-tree-sha1 = "e070bf8f53739d9754cf51a8373a4319fbc7b696" +uuid = "916415d5-f1e6-5110-898d-aaa5f9f070e0" +version = "0.22.4" + +[[IndirectArrays]] +git-tree-sha1 = "c2a145a145dc03a7620af1444e0264ef907bd44f" +uuid = "9b13fd28-a010-5f03-acff-a1bbcff69959" +version = "0.5.1" + +[[IniFile]] +deps = ["Test"] +git-tree-sha1 = "098e4d2c533924c921f9f9847274f2ad89e018b8" +uuid = "83e8ac13-25f8-5344-8a64-a9f2b223428f" +version = "0.5.0" + +[[IntelOpenMP_jll]] +deps = ["Libdl", "Pkg"] +git-tree-sha1 = "fb8e1c7a5594ba56f9011310790e03b5384998d6" +uuid = "1d5cc7b8-4909-519e-a0f8-d0f5ad9712d0" +version = "2018.0.3+0" + +[[InteractiveUtils]] +deps = ["Markdown"] +uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" + +[[Interpolations]] +deps = ["AxisAlgorithms", "LinearAlgebra", "OffsetArrays", "Random", "Ratios", "SharedArrays", "SparseArrays", "StaticArrays", "WoodburyMatrices"] +git-tree-sha1 = "2b7d4e9be8b74f03115e64cf36ed2f48ae83d946" +uuid = "a98d9a8b-a2ab-59e6-89dd-64a1c18fca59" +version = "0.12.10" + +[[IntervalSets]] +deps = ["Dates", "EllipsisNotation", "Statistics"] +git-tree-sha1 = "3b1cef135bc532b3c3401b309e1b8a2a2ba26af5" +uuid = "8197267c-284f-5f27-9208-e0e47529a953" +version = "0.5.1" + +[[InvertedIndices]] +deps = ["Test"] +git-tree-sha1 = "15732c475062348b0165684ffe28e85ea8396afc" +uuid = "41ab1584-1d38-5bbf-9106-f11c6c58b48f" +version = "1.0.0" + +[[IterTools]] +git-tree-sha1 = "05110a2ab1fc5f932622ffea2a003221f4782c18" +uuid = "c8e1da08-722c-5040-9ed9-7db0dc04731e" +version = "1.3.0" + +[[IteratorInterfaceExtensions]] +git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856" +uuid = "82899510-4779-5014-852e-03e436cf321d" +version = "1.0.0" + +[[JSExpr]] +deps = ["JSON", "MacroTools", "Observables", "WebIO"] +git-tree-sha1 = "829f37792c9a63904a95c3c579e3b5847b40802a" +uuid = "97c1335a-c9c5-57fe-bc5d-ec35cebe8660" +version = "0.5.2" + +[[JSON]] +deps = ["Dates", "Mmap", "Parsers", "Unicode"] +git-tree-sha1 = "b34d7cef7b337321e97d22242c3c2b91f476748e" +uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" +version = "0.21.0" + +[[JpegTurbo_jll]] +deps = ["Libdl", "Pkg"] +git-tree-sha1 = "a53414ab7217ae6cc34e41c453339e17a873d169" +uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8" +version = "2.0.1+1" + +[[LAME_jll]] +deps = ["Libdl", "Pkg"] +git-tree-sha1 = "a7999edc634307964d5651265ebf7c2e14b4ef91" +uuid = "c1c5ebd0-6772-5130-a774-d5fcae4a789d" +version = "3.100.0+2" + +[[LZO_jll]] +deps = ["Libdl", "Pkg"] +git-tree-sha1 = "71119990371c93f027bee80547ee908ddfe7c5ca" +uuid = "dd4b983a-f0e5-5f8d-a1b7-129d4a5fb1ac" +version = "2.10.0+1" + +[[LaTeXStrings]] +git-tree-sha1 = "de44b395389b84fd681394d4e8d39ef14e3a2ea8" +uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" +version = "1.1.0" + +[[Latexify]] +deps = ["Formatting", "InteractiveUtils", "LaTeXStrings", "MacroTools", "Markdown", "Printf", "Requires"] +git-tree-sha1 = "98ad8b71986d665e95f92249571cf93a3387b233" +repo-rev = "master" +repo-url = "https://github.com/korsbo/Latexify.jl" +uuid = "23fbe1c1-3f47-55db-b15f-69d7ec21a316" +version = "0.13.5" + +[[Lazy]] +deps = ["MacroTools"] +git-tree-sha1 = "0bd934e15f5df97414aa81abf74ba8a2d5042964" +uuid = "50d2b5c4-7a5e-59d5-8109-a42b560f39c0" +version = "0.15.0" + +[[LibGit2]] +deps = ["Printf"] +uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" + +[[LibVPX_jll]] +deps = ["Libdl", "Pkg"] +git-tree-sha1 = "e02378f5707d0f94af22b99e4aba798e20368f6e" +uuid = "dd192d2f-8180-539f-9fb4-cc70b1dcf69a" +version = "1.9.0+0" + +[[Libdl]] +uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" + +[[Libepoxy_jll]] +deps = ["Libdl", "Libglvnd_jll", "Pkg", "Xorg_libX11_jll"] +git-tree-sha1 = "2edab6849416951df6866b939c149b07bb001f37" +uuid = "42c93a91-0102-5b3f-8f9d-e41de60ac950" +version = "1.5.4+0" + +[[Libffi_jll]] +deps = ["Libdl", "Pkg"] +git-tree-sha1 = "68b165c609961207baa3174e03d6d56e7a37124c" +uuid = "e9f186c6-92d2-5b65-8a66-fee21dc1b490" +version = "3.2.1+1" + +[[Libgcrypt_jll]] +deps = ["Libdl", "Libgpg_error_jll", "Pkg"] +git-tree-sha1 = "7efb7f5e75a0f7323cce366d3e44a2d225c5617a" +uuid = "d4300ac3-e22c-5743-9152-c294e39db1e4" +version = "1.8.5+1" + +[[Libglvnd_jll]] +deps = ["Libdl", "Pkg", "Xorg_libX11_jll", "Xorg_libXext_jll"] +git-tree-sha1 = "30a990af9ce535bcba54d1f23f071a7e714f861e" +uuid = "7e76a0d4-f3c7-5321-8279-8d96eeed0f29" +version = "1.3.0+1" + +[[Libgpg_error_jll]] +deps = ["Libdl", "Pkg"] +git-tree-sha1 = "334284a62d6b8592099d28b78c76aefc266c03a2" +uuid = "7add5ba3-2f88-524e-9cd5-f83b8a55f7b8" +version = "1.36.0+1" + +[[Libiconv_jll]] +deps = ["Libdl", "Pkg"] +git-tree-sha1 = "c9d4035d7481bcdff2babf5a55525a818ef8ed8f" +uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531" +version = "1.16.0+5" + +[[Libmount_jll]] +deps = ["Libdl", "Pkg"] +git-tree-sha1 = "621a6d7d527fd8e4812ca1154567bfdb81a3c517" +uuid = "4b2f31a3-9ecc-558c-b454-b3730dcb73e9" +version = "2.34.0+1" + +[[Libtiff_jll]] +deps = ["JpegTurbo_jll", "Libdl", "Pkg", "Zlib_jll", "Zstd_jll"] +git-tree-sha1 = "1fe8c3608dfe7bdec81d018de1cc66e959016e8c" +uuid = "89763e89-9b03-5906-acba-b20f662cd828" +version = "4.1.0+0" + +[[Libuuid_jll]] +deps = ["Libdl", "Pkg"] +git-tree-sha1 = "7ae7eee3a9fe811b656347700c17fc9620ef4ecf" +uuid = "38a345b3-de98-5d2b-a5d3-14cd9215e700" +version = "2.34.0+4" + +[[LinearAlgebra]] +deps = ["Libdl"] +uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" + +[[Logging]] +uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" + +[[Lz4_jll]] +deps = ["Libdl", "Pkg"] +git-tree-sha1 = "51b1db0732bbdcfabb60e36095cc3ed9c0016932" +uuid = "5ced341a-0733-55b8-9ab6-a4889d929147" +version = "1.9.2+2" + +[[MKL_jll]] +deps = ["IntelOpenMP_jll", "Libdl", "Pkg"] +git-tree-sha1 = "0ce9a7fa68c70cf83c49d05d2c04d91b47404b08" +uuid = "856f044c-d86e-5d09-b602-aeab76dc8ba7" +version = "2020.1.216+0" + +[[MPC_jll]] +deps = ["GMP_jll", "Libdl", "MPFR_jll", "Pkg"] +git-tree-sha1 = "583d9bc863ad491571369212b9a8047219a0015d" +uuid = "2ce0c516-f11f-5db3-98ad-e0e1048fbd70" +version = "1.1.0+0" + +[[MPFR_jll]] +deps = ["GMP_jll", "Libdl", "Pkg"] +git-tree-sha1 = "584d55157951b8e029a1dafa70ee639d24e25644" +uuid = "3a97d323-0669-5f0c-9066-3539efd106a3" +version = "4.0.2+2" + +[[MacroTools]] +deps = ["Markdown", "Random"] +git-tree-sha1 = "f7d2e3f654af75f01ec49be82c231c382214223a" +uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" +version = "0.5.5" + +[[MappedArrays]] +git-tree-sha1 = "e2a02fe7ee86a10c707ff1756ab1650b40b140bb" +uuid = "dbb5928d-eab1-5f90-85c2-b9b0edb7c900" +version = "0.2.2" + +[[Markdown]] +deps = ["Base64"] +uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" + +[[MbedTLS]] +deps = ["Dates", "MbedTLS_jll", "Random", "Sockets"] +git-tree-sha1 = "426a6978b03a97ceb7ead77775a1da066343ec6e" +uuid = "739be429-bea8-5141-9913-cc70e7f3736d" +version = "1.0.2" + +[[MbedTLS_jll]] +deps = ["Libdl", "Pkg"] +git-tree-sha1 = "a0cb0d489819fa7ea5f9fa84c7e7eba19d8073af" +uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" +version = "2.16.6+1" + +[[Measures]] +git-tree-sha1 = "e498ddeee6f9fdb4551ce855a46f54dbd900245f" +uuid = "442fdcdd-2543-5da2-b0f3-8c86c306513e" +version = "0.3.1" + +[[Missings]] +deps = ["DataAPI"] +git-tree-sha1 = "de0a5ce9e5289f27df672ffabef4d1e5861247d5" +uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28" +version = "0.4.3" + +[[Mmap]] +uuid = "a63ad114-7e13-5084-954f-fe012c677804" + +[[MosaicViews]] +deps = ["OffsetArrays", "PaddedViews"] +git-tree-sha1 = "b483b88403ac0ac01667778cbb29462b111b1deb" +uuid = "e94cdb99-869f-56ef-bcf0-1ae2bcbe0389" +version = "0.2.2" + +[[Mustache]] +deps = ["Printf", "Tables"] +git-tree-sha1 = "fcfc8266461f2905534aa00c0fc59b8751b1026e" +uuid = "ffc61752-8dc7-55ee-8c37-f3e9cdd09e70" +version = "1.0.3" + +[[Mux]] +deps = ["AssetRegistry", "Base64", "HTTP", "Hiccup", "Lazy", "Pkg", "Sockets", "Test", "WebSockets"] +git-tree-sha1 = "5b41f03d63400c290bab4e1a49fb9ac36de1084a" +uuid = "a975b10e-0019-58db-a62f-e48ff68538c9" +version = "0.7.0" + +[[NaNMath]] +git-tree-sha1 = "c84c576296d0e2fbb3fc134d3e09086b3ea617cd" +uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" +version = "0.3.4" + +[[Observables]] +git-tree-sha1 = "11832878355305984235a2e90d0e3737383c634c" +uuid = "510215fc-4207-5dde-b226-833fc4488ee2" +version = "0.3.1" + +[[OffsetArrays]] +git-tree-sha1 = "2066e16af994955287f2e03ba1d9e890eb43b0dd" +uuid = "6fe1bfb0-de20-5000-8ca7-80f57d26f881" +version = "1.1.2" + +[[Ogg_jll]] +deps = ["Libdl", "Pkg"] +git-tree-sha1 = "4c3275cda1ba99d1244d0b82a9d0ca871c3cf66b" +uuid = "e7412a2a-1a6e-54c0-be00-318e2571c051" +version = "1.3.4+1" + +[[OpenSSL_jll]] +deps = ["Libdl", "Pkg"] +git-tree-sha1 = "997359379418d233767f926ea0c43f0e731735c0" +uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" +version = "1.1.1+5" + +[[OpenSpecFun_jll]] +deps = ["CompilerSupportLibraries_jll", "Libdl", "Pkg"] +git-tree-sha1 = "d51c416559217d974a1113522d5919235ae67a87" +uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" +version = "0.5.3+3" + +[[Opus_jll]] +deps = ["Libdl", "Pkg"] +git-tree-sha1 = "cc90a125aa70dbb069adbda2b913b02cf2c5f6fe" +uuid = "91d4177d-7536-5919-b921-800302f37372" +version = "1.3.1+2" + +[[OrderedCollections]] +git-tree-sha1 = "293b70ac1780f9584c89268a6e2a560d938a7065" +uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" +version = "1.3.0" + +[[PCRE_jll]] +deps = ["Libdl", "Pkg"] +git-tree-sha1 = "2c860a32ae9c421b52b654448bd31a31f437449a" +uuid = "2f80f16e-611a-54ab-bc61-aa92de5b98fc" +version = "8.42.0+2" + +[[PDMats]] +deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse", "Test"] +git-tree-sha1 = "b3405086eb6a974eba1958923d46bc0e1c2d2d63" +uuid = "90014a1f-27ba-587c-ab20-58faa44d9150" +version = "0.10.0" + +[[PaddedViews]] +deps = ["OffsetArrays"] +git-tree-sha1 = "100195a79b577d5747db98bf1732c3686285fa1e" +uuid = "5432bcbf-9aad-5242-b902-cca2824c8663" +version = "0.5.5" + +[[Pango_jll]] +deps = ["Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "FriBidi_jll", "Glib_jll", "HarfBuzz_jll", "Libdl", "Pkg"] +git-tree-sha1 = "cd19789f20bde5d45e96a7e937db9a6a024412e6" +uuid = "36c8627f-9965-5494-a995-c6b170f724f3" +version = "1.42.4+8" + +[[Parameters]] +deps = ["OrderedCollections", "UnPack"] +git-tree-sha1 = "38b2e970043613c187bd56a995fe2e551821eb4a" +uuid = "d96e819e-fc66-5662-9728-84c9c7592b0a" +version = "0.12.1" + +[[Parsers]] +deps = ["Dates", "Test"] +git-tree-sha1 = "10134f2ee0b1978ae7752c41306e131a684e1f06" +uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" +version = "1.0.7" + +[[Pidfile]] +deps = ["FileWatching", "Test"] +git-tree-sha1 = "1be8660b2064893cd2dae4bd004b589278e4440d" +uuid = "fa939f87-e72e-5be4-a000-7fc836dbe307" +version = "1.2.0" + +[[Pixman_jll]] +deps = ["Libdl", "Pkg"] +git-tree-sha1 = "ae66367153a89ecb2a5c7acc2df4ba082b729b6a" +uuid = "30392449-352a-5448-841d-b1acce4e97dc" +version = "0.38.4+2" + +[[Pkg]] +deps = ["Dates", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "UUIDs"] +uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" + +[[PlotThemes]] +deps = ["PlotUtils", "Requires", "Statistics"] +git-tree-sha1 = "c6f5ea535551b3b16835134697f0c65d06c94b91" +uuid = "ccf2f8ad-2431-5c83-bf29-c5338b663b6a" +version = "2.0.0" + +[[PlotUtils]] +deps = ["ColorSchemes", "Colors", "Dates", "Printf", "Random", "Reexport", "Statistics"] +git-tree-sha1 = "e18e0e51ff07bf92bb7e06dcb9c082a4e125e20c" +uuid = "995b91a9-d308-5afd-9ec6-746e21dbc043" +version = "1.0.5" + +[[Plotly]] +deps = ["Base64", "DelimitedFiles", "HTTP", "JSON", "PlotlyJS", "Reexport"] +git-tree-sha1 = "7634def3aea4a58d8f13687e9c72b2c1bfaa61ce" +uuid = "58dd65bb-95f3-509e-9936-c39a10fdeae7" +version = "0.3.0" + +[[PlotlyBase]] +deps = ["Dates", "DelimitedFiles", "DocStringExtensions", "JSON", "LaTeXStrings", "Logging", "Requires", "Statistics", "UUIDs"] +git-tree-sha1 = "c50438d8affbd77ebcb46f46e276cc66cabc61bd" +uuid = "a03496cd-edff-5a9b-9e67-9cda94a718b5" +version = "0.3.1" + +[[PlotlyJS]] +deps = ["Blink", "Compat", "DelimitedFiles", "JSExpr", "JSON", "Markdown", "Pkg", "PlotlyBase", "REPL", "Reexport", "Requires", "WebIO"] +git-tree-sha1 = "086db02717bb2d65e5d8788b038919e9aec5a965" +uuid = "f0f68f2c-4968-5e81-91da-67840de0976a" +version = "0.13.1" + +[[Plots]] +deps = ["Base64", "Contour", "Dates", "FFMPEG", "FixedPointNumbers", "GR", "GeometryBasics", "GeometryTypes", "JSON", "LinearAlgebra", "Measures", "NaNMath", "PlotThemes", "PlotUtils", "Printf", "REPL", "Random", "RecipesBase", "RecipesPipeline", "Reexport", "Requires", "Showoff", "SparseArrays", "Statistics", "StatsBase", "UUIDs"] +git-tree-sha1 = "0ca3e823caba835d5283fc9112266a4f20f3f713" +uuid = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" +version = "1.5.8" + +[[PooledArrays]] +deps = ["DataAPI"] +git-tree-sha1 = "b1333d4eced1826e15adbdf01a4ecaccca9d353c" +uuid = "2dfb63ee-cc39-5dd5-95bd-886bf059d720" +version = "0.5.3" + +[[Printf]] +deps = ["Unicode"] +uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" + +[[ProgressBars]] +deps = ["Printf"] +git-tree-sha1 = "fec529e15cccf342087de2ccda1b0b9064cbbb53" +uuid = "49802e3a-d2f1-5c88-81d8-b72133a6f568" +version = "0.7.1" + +[[PyCall]] +deps = ["Conda", "Dates", "Libdl", "LinearAlgebra", "MacroTools", "Serialization", "VersionParsing"] +git-tree-sha1 = "3a3fdb9000d35958c9ba2323ca7c4958901f115d" +uuid = "438e738f-606a-5dbb-bf0a-cddfbfd45ab0" +version = "1.91.4" + +[[PyPlot]] +deps = ["Colors", "LaTeXStrings", "PyCall", "Sockets", "Test", "VersionParsing"] +git-tree-sha1 = "67dde2482fe1a72ef62ed93f8c239f947638e5a2" +uuid = "d330b81b-6aea-500a-939a-2ce795aea3ee" +version = "2.9.0" + +[[QuadGK]] +deps = ["DataStructures", "LinearAlgebra"] +git-tree-sha1 = "0ab8a09d4478ebeb99a706ecbf8634a65077ccdc" +uuid = "1fd47b50-473d-5c70-9696-f719f8f3bcdc" +version = "2.4.0" + +[[REPL]] +deps = ["InteractiveUtils", "Markdown", "Sockets"] +uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" + +[[Random]] +deps = ["Serialization"] +uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" + +[[RangeArrays]] +git-tree-sha1 = "b9039e93773ddcfc828f12aadf7115b4b4d225f5" +uuid = "b3c3ace0-ae52-54e7-9d0b-2c1406fd6b9d" +version = "0.3.2" + +[[Ratios]] +git-tree-sha1 = "37d210f612d70f3f7d57d488cb3b6eff56ad4e41" +uuid = "c84ed2f1-dad5-54f0-aa8e-dbefe2724439" +version = "0.4.0" + +[[Reactive]] +deps = ["DataStructures", "Distributed", "Test"] +git-tree-sha1 = "5862d915387ebb954016f50a88e34f79a9e5fcd2" +uuid = "a223df75-4e93-5b7c-acf9-bdd599c0f4de" +version = "0.8.3" + +[[RecipesBase]] +git-tree-sha1 = "58de8f7e33b7fda6ee39eff65169cd1e19d0c107" +uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" +version = "1.0.2" + +[[RecipesPipeline]] +deps = ["Dates", "PlotUtils", "RecipesBase"] +git-tree-sha1 = "d2a58b8291d1c0abae6a91489973f8a92bf5c04a" +uuid = "01d81517-befc-4cb6-b9ec-a95719d0359c" +version = "0.1.11" + +[[Reexport]] +deps = ["Pkg"] +git-tree-sha1 = "7b1d07f411bc8ddb7977ec7f377b97b158514fe0" +uuid = "189a3867-3050-52da-a836-e630ba90ab69" +version = "0.2.0" + +[[Requires]] +deps = ["UUIDs"] +git-tree-sha1 = "d37400976e98018ee840e0ca4f9d20baa231dc6b" +uuid = "ae029012-a4dd-5104-9daa-d747884805df" +version = "1.0.1" + +[[Rmath]] +deps = ["Random", "Rmath_jll"] +git-tree-sha1 = "86c5647b565873641538d8f812c04e4c9dbeb370" +uuid = "79098fc4-a85e-5d69-aa6a-4863f24498fa" +version = "0.6.1" + +[[Rmath_jll]] +deps = ["Libdl", "Pkg"] +git-tree-sha1 = "d76185aa1f421306dec73c057aa384bad74188f0" +uuid = "f50d1b31-88e8-58de-be2c-1cc44531875f" +version = "0.2.2+1" + +[[Roots]] +deps = ["Printf"] +git-tree-sha1 = "069e68c2173b4e4d0c37ffb3268d37f168ad719c" +uuid = "f2b01f46-fcfa-551c-844a-d8ac1e96c665" +version = "1.0.4" + +[[Rotations]] +deps = ["LinearAlgebra", "StaticArrays", "Statistics"] +git-tree-sha1 = "445b72242dbdecba9bfc42034daafdd901bbf6a9" +uuid = "6038ab10-8711-5258-84ad-4b1120ba62dc" +version = "1.0.1" + +[[RoundingIntegers]] +deps = ["Test"] +git-tree-sha1 = "293ba0ab32218b9ffd596040224228def84f8da0" +uuid = "d5f540fe-1c90-5db3-b776-2e2f362d9394" +version = "0.2.0" + +[[SHA]] +uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" + +[[SentinelArrays]] +deps = ["Dates", "Random"] +git-tree-sha1 = "7871163033b83a0d08bb601af56488c6f642a113" +uuid = "91c51154-3ec4-41a3-a24f-3f23e20d615c" +version = "1.2.10" + +[[Serialization]] +uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" + +[[SharedArrays]] +deps = ["Distributed", "Mmap", "Random", "Serialization"] +uuid = "1a1011a3-84de-559e-8e89-a11a2f7dc383" + +[[Showoff]] +deps = ["Dates"] +git-tree-sha1 = "e032c9df551fb23c9f98ae1064de074111b7bc39" +uuid = "992d4aef-0814-514b-bc4d-f2e9a6c4116f" +version = "0.3.1" + +[[SimpleTraits]] +deps = ["InteractiveUtils", "MacroTools"] +git-tree-sha1 = "2ee666b24ab8be6a922f9d6c11a86e1a703a7dda" +uuid = "699a6c99-e7fa-54fc-8d76-47d257e15c1d" +version = "0.9.2" + +[[Sockets]] +uuid = "6462fe0b-24de-5631-8697-dd941f90decc" + +[[SoftGlobalScope]] +deps = ["Test"] +git-tree-sha1 = "012661b70364840fcd380912d878d96f7bf95ff3" +uuid = "b85f4697-e234-5449-a836-ec8e2f98b302" +version = "1.0.10" + +[[SortingAlgorithms]] +deps = ["DataStructures", "Random", "Test"] +git-tree-sha1 = "03f5898c9959f8115e30bc7226ada7d0df554ddd" +uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" +version = "0.3.1" + +[[SparseArrays]] +deps = ["LinearAlgebra", "Random"] +uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + +[[SpecialFunctions]] +deps = ["OpenSpecFun_jll"] +git-tree-sha1 = "d8d8b8a9f4119829410ecd706da4cc8594a1e020" +uuid = "276daf66-3868-5448-9aa4-cd146d93841b" +version = "0.10.3" + +[[StaticArrays]] +deps = ["LinearAlgebra", "Random", "Statistics"] +git-tree-sha1 = "016d1e1a00fabc556473b07161da3d39726ded35" +uuid = "90137ffa-7385-5640-81b9-e52037218182" +version = "0.12.4" + +[[Statistics]] +deps = ["LinearAlgebra", "SparseArrays"] +uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" + +[[StatsBase]] +deps = ["DataAPI", "DataStructures", "LinearAlgebra", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics"] +git-tree-sha1 = "a6102b1f364befdb05746f386b67c6b7e3262c45" +uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" +version = "0.33.0" + +[[StatsFuns]] +deps = ["Rmath", "SpecialFunctions"] +git-tree-sha1 = "04a5a8e6ab87966b43f247920eab053fd5fdc925" +uuid = "4c63d2b9-4356-54db-8cca-17b64c39e42c" +version = "0.9.5" + +[[StringDistances]] +deps = ["Distances"] +git-tree-sha1 = "b0ea34b18ba9da7abc79acabda8a473cd63c1254" +uuid = "88034a9c-02f8-509d-84a9-84ec65e18404" +version = "0.8.0" + +[[StructArrays]] +deps = ["Adapt", "DataAPI", "Tables"] +git-tree-sha1 = "8099ed9fb90b6e754d6ba8c6ed8670f010eadca0" +uuid = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" +version = "0.4.4" + +[[SuiteSparse]] +deps = ["Libdl", "LinearAlgebra", "Serialization", "SparseArrays"] +uuid = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9" + +[[SymEngine]] +deps = ["Compat", "Libdl", "LinearAlgebra", "RecipesBase", "SpecialFunctions", "SymEngine_jll"] +git-tree-sha1 = "459d6784180f5b428621eca9f1c1227c67f1e9ac" +uuid = "123dc426-2d89-5057-bbad-38513e3affd8" +version = "0.8.2" + +[[SymEngine_jll]] +deps = ["GMP_jll", "Libdl", "MPC_jll", "MPFR_jll", "Pkg"] +git-tree-sha1 = "4dacada8e05ac49eb768219f8d02bc6b608627fb" +uuid = "3428059b-622b-5399-b16f-d347a77089a4" +version = "0.6.0+1" + +[[TableTraits]] +deps = ["IteratorInterfaceExtensions"] +git-tree-sha1 = "b1ad568ba658d8cbb3b892ed5380a6f3e781a81e" +uuid = "3783bdb8-4a98-5b6b-af9a-565f29a5fe9c" +version = "1.0.0" + +[[Tables]] +deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "LinearAlgebra", "TableTraits", "Test"] +git-tree-sha1 = "b7f762e9820b7fab47544c36f26f54ac59cf8abf" +uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" +version = "1.0.5" + +[[Test]] +deps = ["Distributed", "InteractiveUtils", "Logging", "Random"] +uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" + +[[TestImages]] +deps = ["AxisArrays", "ColorTypes", "FileIO", "Pkg", "StringDistances"] +git-tree-sha1 = "31367bfceb3a3874f5e0ba2c144e6b862b3557d8" +uuid = "5e47fb64-e119-507b-a336-dd2b206d9990" +version = "1.2.1" + +[[TiledIteration]] +deps = ["OffsetArrays"] +git-tree-sha1 = "98693daea9bb49aba71eaad6b168b152d2310358" +uuid = "06e1c1a7-607b-532d-9fad-de7d9aa2abac" +version = "0.2.4" + +[[URIParser]] +deps = ["Unicode"] +git-tree-sha1 = "53a9f49546b8d2dd2e688d216421d050c9a31d0d" +uuid = "30578b45-9adc-5946-b283-645ec420af67" +version = "0.4.1" + +[[UUIDs]] +deps = ["Random", "SHA"] +uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" + +[[UnPack]] +git-tree-sha1 = "d4bfa022cd30df012700cf380af2141961bb3bfb" +uuid = "3a884ed6-31ef-47d7-9d2a-63182c4928ed" +version = "1.0.1" + +[[Unicode]] +uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" + +[[VMLS]] +deps = ["DelimitedFiles", "LinearAlgebra", "SparseArrays"] +git-tree-sha1 = "ac6446e72fa0793596e80b9126d1437f66dc0b38" +repo-rev = "master" +repo-url = "https://github.com/VMLS-book/VMLS.jl" +uuid = "44dac47c-a70e-11e8-3cff-fbf5f1f7c554" +version = "0.3.0" + +[[VersionParsing]] +git-tree-sha1 = "80229be1f670524750d905f8fc8148e5a8c4537f" +uuid = "81def892-9a0e-5fdd-b105-ffc91e053289" +version = "1.2.0" + +[[Wayland_jll]] +deps = ["Expat_jll", "Libdl", "Libffi_jll", "Pkg", "XML2_jll"] +git-tree-sha1 = "77e7b942a796bc9530f089099e3caeef6cc123f9" +uuid = "a2964d1f-97da-50d4-b82a-358c7fce9d89" +version = "1.17.0+1" + +[[Wayland_protocols_jll]] +deps = ["Libdl", "Pkg", "Wayland_jll"] +git-tree-sha1 = "d53533e9cbc71f1274b20f4af76c4f13e6e4a8a0" +uuid = "2381bf8a-dfd0-557d-9999-79630e7b1b91" +version = "1.18.0+1" + +[[WebIO]] +deps = ["AssetRegistry", "Base64", "Distributed", "FunctionalCollections", "JSON", "Logging", "Observables", "Pkg", "Random", "Requires", "Sockets", "UUIDs", "WebSockets", "Widgets"] +git-tree-sha1 = "add6b526464ab77e9decef9d2dafa46c54af6617" +uuid = "0f1e0344-ec1d-5b48-a673-e5cf874b6c29" +version = "0.8.14" + +[[WebSockets]] +deps = ["Base64", "Dates", "Distributed", "HTTP", "Logging", "Random", "Sockets", "Test"] +git-tree-sha1 = "13f763d38c7a05688938808b49cb29b18b60c8c8" +uuid = "104b5d7c-a370-577a-8038-80a2059c5097" +version = "1.5.2" + +[[Widgets]] +deps = ["Colors", "Dates", "Observables", "OrderedCollections"] +git-tree-sha1 = "fc0feda91b3fef7fe6948ee09bb628f882b49ca4" +uuid = "cc8bc4a8-27d6-5769-a93b-9d913e69aa62" +version = "0.6.2" + +[[WoodburyMatrices]] +deps = ["LinearAlgebra", "SparseArrays"] +git-tree-sha1 = "28ffe06d28b1ba8fdb2f36ec7bb079fac81bac0d" +uuid = "efce3f68-66dc-5838-9240-27a6d6f5f9b6" +version = "0.5.2" + +[[XML2_jll]] +deps = ["Libdl", "Libiconv_jll", "Pkg", "Zlib_jll"] +git-tree-sha1 = "432d91f45e950f2f2bda5c0f4e2b938c14493af9" +uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a" +version = "2.9.10+1" + +[[XSLT_jll]] +deps = ["Libdl", "Libgcrypt_jll", "Pkg", "XML2_jll"] +git-tree-sha1 = "c287bbc08773474ab1d12849eb46b961a325e149" +uuid = "aed1982a-8fda-507f-9586-7b0439959a61" +version = "1.1.33+2" + +[[Xorg_libX11_jll]] +deps = ["Libdl", "Pkg", "Xorg_libxcb_jll", "Xorg_xtrans_jll"] +git-tree-sha1 = "bbfb646a5a86dc636041c8ee945799b69d37fdba" +uuid = "4f6342f7-b3d2-589e-9d20-edeb45f2b2bc" +version = "1.6.9+2" + +[[Xorg_libXau_jll]] +deps = ["Libdl", "Pkg"] +git-tree-sha1 = "711f2bbdbb0e90b90a71c5ccf835137e2def539a" +uuid = "0c0b7dd1-d40b-584c-a123-a41640f87eec" +version = "1.0.9+2" + +[[Xorg_libXcomposite_jll]] +deps = ["Libdl", "Pkg", "Xorg_libXfixes_jll"] +git-tree-sha1 = "7a065122204c78aaca491750ea1bffb862406659" +uuid = "3c9796d7-64a0-5134-86ad-79f8eb684845" +version = "0.4.5+2" + +[[Xorg_libXcursor_jll]] +deps = ["Libdl", "Pkg", "Xorg_libXfixes_jll", "Xorg_libXrender_jll"] +git-tree-sha1 = "fd1f86fcb0295a6741409086723d9e7d8f222599" +uuid = "935fb764-8cf2-53bf-bb30-45bb1f8bf724" +version = "1.2.0+2" + +[[Xorg_libXdamage_jll]] +deps = ["Libdl", "Pkg", "Xorg_libXfixes_jll"] +git-tree-sha1 = "33b57d58899f4d288c51bdf7c2e21318e09ae9eb" +uuid = "0aeada51-83db-5f97-b67e-184615cfc6f6" +version = "1.1.5+2" + +[[Xorg_libXdmcp_jll]] +deps = ["Libdl", "Pkg"] +git-tree-sha1 = "1ffd7bc9c9d8bba6652516f3402ee1ef5f4cac70" +uuid = "a3789734-cfe1-5b06-b2d0-1dd0d9d62d05" +version = "1.1.3+2" + +[[Xorg_libXext_jll]] +deps = ["Libdl", "Pkg", "Xorg_libX11_jll"] +git-tree-sha1 = "079acccb5437761d93c483f2edb5fc3ed21ea7db" +uuid = "1082639a-0dae-5f34-9b06-72781eeb8cb3" +version = "1.3.4+2" + +[[Xorg_libXfixes_jll]] +deps = ["Libdl", "Pkg", "Xorg_libX11_jll"] +git-tree-sha1 = "2bc6823df6ccd55927bf8441d3d79db2f5874c2a" +uuid = "d091e8ba-531a-589c-9de9-94069b037ed8" +version = "5.0.3+2" + +[[Xorg_libXi_jll]] +deps = ["Libdl", "Pkg", "Xorg_libXext_jll", "Xorg_libXfixes_jll"] +git-tree-sha1 = "dedd853f81c1099ada169fb6f9c2b50764c48f06" +uuid = "a51aa0fd-4e3c-5386-b890-e753decda492" +version = "1.7.10+2" + +[[Xorg_libXinerama_jll]] +deps = ["Libdl", "Pkg", "Xorg_libXext_jll"] +git-tree-sha1 = "79f0b3350e62d02a710a7dacfbbc0878aed09d58" +uuid = "d1454406-59df-5ea1-beac-c340f2130bc3" +version = "1.1.4+2" + +[[Xorg_libXrandr_jll]] +deps = ["Libdl", "Pkg", "Xorg_libXext_jll", "Xorg_libXrender_jll"] +git-tree-sha1 = "206e6ab109a2b607e3076eb2cb9b3fa239c467f1" +uuid = "ec84b674-ba8e-5d96-8ba1-2a689ba10484" +version = "1.5.2+2" + +[[Xorg_libXrender_jll]] +deps = ["Libdl", "Pkg", "Xorg_libX11_jll"] +git-tree-sha1 = "d5492a36d33359cf93ad573ea5e235cd71728649" +uuid = "ea2f1a96-1ddc-540d-b46f-429655e07cfa" +version = "0.9.10+2" + +[[Xorg_libXtst_jll]] +deps = ["Libdl", "Pkg", "Xorg_libXext_jll", "Xorg_libXfixes_jll", "Xorg_libXi_jll"] +git-tree-sha1 = "ed089739fdf73f830961972257355cda2fc7a954" +uuid = "b6f176f1-7aea-5357-ad67-1d3e565ea1c6" +version = "1.2.3+2" + +[[Xorg_libpthread_stubs_jll]] +deps = ["Libdl", "Pkg"] +git-tree-sha1 = "ec1e2973e4e624069be95f806dbd7e225fee26c6" +uuid = "14d82f49-176c-5ed1-bb49-ad3f5cbd8c74" +version = "0.1.0+1" + +[[Xorg_libxcb_jll]] +deps = ["Libdl", "Pkg", "XSLT_jll", "Xorg_libXau_jll", "Xorg_libXdmcp_jll", "Xorg_libpthread_stubs_jll"] +git-tree-sha1 = "c1efb50fb6a8c40c45451611fbf93feabe5f9611" +uuid = "c7cfdc94-dc32-55de-ac96-5a1b8d977c5b" +version = "1.13.0+2" + +[[Xorg_libxkbfile_jll]] +deps = ["Libdl", "Pkg", "Xorg_libX11_jll"] +git-tree-sha1 = "aa352c02f58b930b654aee7cce4900e358369174" +uuid = "cc61e674-0454-545c-8b26-ed2c68acab7a" +version = "1.1.0+2" + +[[Xorg_xkbcomp_jll]] +deps = ["Libdl", "Pkg", "Xorg_libxkbfile_jll"] +git-tree-sha1 = "c197888ea15879ecd257ba142a3078248540fbda" +uuid = "35661453-b289-5fab-8a00-3d9160c6a3a4" +version = "1.4.2+2" + +[[Xorg_xkeyboard_config_jll]] +deps = ["Libdl", "Pkg", "Xorg_xkbcomp_jll"] +git-tree-sha1 = "416f9257ada9365f53766394af77134bf594e1a2" +uuid = "33bec58e-1273-512f-9401-5d533626f822" +version = "2.27.0+1" + +[[Xorg_xtrans_jll]] +deps = ["Libdl", "Pkg"] +git-tree-sha1 = "b6e7d70f5fc9e3fde505539194c8caaab3c40ebf" +uuid = "c5fb5394-a638-5e4d-96e5-b29de1b5cf10" +version = "1.4.0+1" + +[[ZMQ]] +deps = ["FileWatching", "Sockets", "ZeroMQ_jll"] +git-tree-sha1 = "fc68e8a3719166950a0f3e390a14c7302c48f8de" +uuid = "c2297ded-f4af-51ae-bb23-16f91089e4e1" +version = "1.2.1" + +[[ZeroMQ_jll]] +deps = ["Libdl", "Pkg"] +git-tree-sha1 = "733352667c60ce39dfd3017db9b798b288c87417" +uuid = "8f1865be-045e-5c20-9c9f-bfbfb0764568" +version = "4.3.2+4" + +[[Zlib_jll]] +deps = ["Libdl", "Pkg"] +git-tree-sha1 = "d5bba6485811931e4b8958e2d7ca3738273ac468" +uuid = "83775a58-1f1d-513f-b197-d71354ab007a" +version = "1.2.11+15" + +[[Zstd_jll]] +deps = ["Libdl", "Pkg"] +git-tree-sha1 = "b25b0fb10176c42e9a5a20e1f40d570ac0288d4e" +uuid = "3161d3a3-bdf6-5164-811a-617609db77b4" +version = "1.4.5+0" + +[[adwaita_icon_theme_jll]] +deps = ["Libdl", "Pkg", "hicolor_icon_theme_jll"] +git-tree-sha1 = "245d4d5884e54d171c9683e1d30213358ddeb648" +uuid = "b437f822-2cd6-5e08-a15c-8bac984d38ee" +version = "3.33.92+3" + +[[at_spi2_atk_jll]] +deps = ["ATK_jll", "Libdl", "Pkg", "XML2_jll", "Xorg_libX11_jll", "at_spi2_core_jll"] +git-tree-sha1 = "b8222202b3ab2b67dc88195673a9201a015e703e" +uuid = "de012916-1e3f-58c2-8f29-df3ef51d412d" +version = "2.34.1+1" + +[[at_spi2_core_jll]] +deps = ["Dbus_jll", "Glib_jll", "Libdl", "Pkg", "Xorg_libXtst_jll"] +git-tree-sha1 = "af2eae0aedd158cacc727de18e577f21ebbed9eb" +uuid = "0fc3237b-ac94-5853-b45c-d43d59a06200" +version = "2.34.0+1" + +[[gdk_pixbuf_jll]] +deps = ["Glib_jll", "JpegTurbo_jll", "Libdl", "Libtiff_jll", "Pkg", "Xorg_libX11_jll", "libpng_jll"] +git-tree-sha1 = "566ebf4b2c9efd81b35eb914c325026831077f39" +uuid = "da03df04-f53b-5353-a52f-6a8b0620ced0" +version = "2.38.2+6" + +[[hicolor_icon_theme_jll]] +deps = ["Libdl", "Pkg"] +git-tree-sha1 = "4f8addaf9ca8492b0ba3f289587c983ba395dd60" +uuid = "059c91fe-1bad-52ad-bddd-f7b78713c282" +version = "0.17.0+1" + +[[iso_codes_jll]] +deps = ["Libdl", "Pkg"] +git-tree-sha1 = "46515ba7486a978a3f6418ce060a3407ed837e1e" +uuid = "bf975903-5238-5d20-8243-bc370bc1e7e5" +version = "4.3.0+1" + +[[libass_jll]] +deps = ["Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "Libdl", "Pkg", "Zlib_jll"] +git-tree-sha1 = "f02d0db58888592e98c5f4953cef620ce9274eee" +uuid = "0ac62f75-1d6f-5e53-bd7c-93b484bb37c0" +version = "0.14.0+3" + +[[libfdk_aac_jll]] +deps = ["Libdl", "Pkg"] +git-tree-sha1 = "e17b4513993b4413d31cffd1b36a63625ebbc3d3" +uuid = "f638f0a6-7fb0-5443-88ba-1cc74229b280" +version = "0.1.6+3" + +[[libpng_jll]] +deps = ["Libdl", "Pkg", "Zlib_jll"] +git-tree-sha1 = "594cb058723c13941cf463fd09e5859499594f50" +uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f" +version = "1.6.37+3" + +[[libvorbis_jll]] +deps = ["Libdl", "Ogg_jll", "Pkg"] +git-tree-sha1 = "8014e1c1033009edcfe820ec25877a9f1862ba4c" +uuid = "f27f6e37-5d2b-51aa-960f-b287f2bc3b7a" +version = "1.3.6+5" + +[[x264_jll]] +deps = ["Libdl", "Pkg"] +git-tree-sha1 = "e496625b900df1b02ab0e02fad316b77446616ef" +uuid = "1270edf5-f2f9-52d2-97e9-ab00b5d0237a" +version = "2020.7.14+1" + +[[x265_jll]] +deps = ["Libdl", "Pkg"] +git-tree-sha1 = "ac7d44fa1639a780d0ae79ca1a5a7f4181131825" +uuid = "dfaa095f-4041-5dcd-9319-2fabd8486b76" +version = "3.0.0+2" + +[[xkbcommon_jll]] +deps = ["Libdl", "Pkg", "Wayland_jll", "Wayland_protocols_jll", "Xorg_libxcb_jll", "Xorg_xkeyboard_config_jll"] +git-tree-sha1 = "cbed604f26643b998f29b74b2a2f73298cb07606" +uuid = "d8fb68d0-12a3-5cfd-a85a-d49703b185fd" +version = "0.9.1+1" diff --git a/base-notebook/Project.toml b/base-notebook/Project.toml new file mode 100644 index 0000000..c97e395 --- /dev/null +++ b/base-notebook/Project.toml @@ -0,0 +1,27 @@ +[deps] +CSV = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b" +Colors = "5ae59095-9a9b-59fe-a467-6f913c188581" +DelimitedFiles = "8bb1440f-4735-579b-a4ab-409b98df4dab" +Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f" +FileIO = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" +GR = "28b8d3ca-fb5f-59d9-8090-bfdbd6d07a71" +GtkReactive = "27996c0f-39cd-5cc1-a27a-05f136f946b6" +HDF5 = "f67ccb44-e63f-5c2f-98bd-6dc0ccc4ba2f" +IJulia = "7073ff75-c697-5162-941a-fcdaad2a7d2a" +ImageFeatures = "92ff4b2b-8094-53d3-b29d-97f740f06cef" +ImageFiltering = "6a3955dd-da59-5b1f-98d4-e7296123deb5" +ImageInTerminal = "d8c32880-2388-543b-8c61-d9f865259254" +ImageView = "86fae568-95e7-573e-a6b2-d8a6b900c9ef" +Images = "916415d5-f1e6-5110-898d-aaa5f9f070e0" +Latexify = "23fbe1c1-3f47-55db-b15f-69d7ec21a316" +LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" +Plotly = "58dd65bb-95f3-509e-9936-c39a10fdeae7" +Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" +ProgressBars = "49802e3a-d2f1-5c88-81d8-b72133a6f568" +PyPlot = "d330b81b-6aea-500a-939a-2ce795aea3ee" +Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" +Roots = "f2b01f46-fcfa-551c-844a-d8ac1e96c665" +Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" +SymEngine = "123dc426-2d89-5057-bbad-38513e3affd8" +TestImages = "5e47fb64-e119-507b-a336-dd2b206d9990" +VMLS = "44dac47c-a70e-11e8-3cff-fbf5f1f7c554" diff --git a/base-notebook/apt.txt b/base-notebook/apt.txt new file mode 100644 index 0000000..8dcfe0d --- /dev/null +++ b/base-notebook/apt.txt @@ -0,0 +1,52 @@ +at-spi2-core +build-essential +bzip2 +ca-certificates +ca-certificates-java +curl +default-jre +dvipng +emacs-nox +ffmpeg +fonts-dejavu +fonts-liberation +gcc +gdebi-core +gfortran +git +gnupg +inkscape +jed +jq +libclang-dev +libapparmor1 +libxext-dev +libgl1-mesa-glx +libgtk-3-dev +libqt5widgets5 +libpq-dev +libsm6 +libxrender1 +libxext6 +libxt6 +locales +lmodern +netcat +nano +openjdk-11-jdk-headless +psmisc +python-dev +run-one +sudo +texlive-fonts-recommended +texlive-plain-generic +texlive-xetex +tzdata +unixodbc +unixodbc-dev +unzip +vim +vim-tiny +wget +xauth +xvfb diff --git a/base-notebook/environment.yml b/base-notebook/environment.yml index 73fd719..904e3c6 100644 --- a/base-notebook/environment.yml +++ b/base-notebook/environment.yml @@ -1,6 +1,52 @@ +channels: + - defaults + - conda-forge dependencies: - - plotly=4.9.* - - plotly-orca=1.3.* + # for julia GMT package + - gmt=6.1.* + # servers/proxies + - psycopg2=2.8.* + # r packages + - r-base=3.6.* + - r-caret=6.* + - r-crayon=1.3* + - r-devtools=2.3* + - r-forecast=8.12* + - r-hexbin=1.28* + - r-htmltools=0.4* + - r-htmlwidgets=1.5* + - r-nycflights13=1.0* + - r-randomforest=4.6* + - r-rcurl=1.98* + - r-rmarkdown=2.2* - r-rodbc=1.3* + - r-rsqlite=2.2* + - r-shiny=1.4* + - r-tidyverse=1.3* - r-tidymodels=0.1* - - unixodbc=2.3.* + # kernels + - xeus-cling=0.9.* + # process manager + - tini=0.18.0 + # python/pip packages + - pip + - pip: + - autopep8==1.5.3 + - chart-studio==1.1 + - dash==1.12 + - flake8==3.8.3 + - fredapi==0.4.2 + - jupyter-contrib-nbextensions==0.5 + - jupyter-dash==0.3.0 + - jupyterhub==1.1.0 + - matplotlib==3.3.0 + - nbgitpuller==0.8.0 + - nbresuse==0.3.* + - otter-grader==1.0.0.b9 + - plotly==4.9.0 + - plotly-charts==0.5 + - plotly-geo==1.0 + - python-language-server==0.33.3 + - tensorflow==2.2.0 + - yellowbrick==1.1 + - xgboost==1.1.1 diff --git a/base-notebook/install.jl b/base-notebook/install.jl deleted file mode 100644 index 07d7d3e..0000000 --- a/base-notebook/install.jl +++ /dev/null @@ -1,36 +0,0 @@ -# This mechanism allows us to import a package list. -# Source: https://discourse.julialang.org/t/building-a-dockerfile-with-packages/37272/2 - -using Pkg -pkg"add Colors" -pkg"add CSV" -pkg"add CSVFiles" -pkg"add DataFrames" -pkg"add DelimitedFiles" -pkg"add GMT" -pkg"add GR" -pkg"add IJulia" -pkg"add ImageView" -pkg"add ImageInTerminal" -pkg"add FileIO" -pkg"add ImageFiltering" -pkg"add Images" -pkg"add ImageFeatures" -pkg"add Interact" -pkg"add LaTeXStrings" -pkg"add LinearAlgebra" -pkg"add Plots" -pkg"add PyPlot" -pkg"add Random" -pkg"add GtkReactive" -pkg"add Roots" -pkg"add SymEngine" -pkg"add Statistics" -pkg"add TestImages" -pkg"add Plotly" -pkg"add Distributions" -pkg"add ProgressBars" -pkg"add https://github.com/VMLS-book/VMLS.jl" -pkg"add https://github.com/korsbo/Latexify.jl" -pkg"add WebIO" -pkg"precompile" diff --git a/base-notebook/jupyter_notebook_config.py b/base-notebook/jupyter_notebook_config.py deleted file mode 100644 index 98e6a44..0000000 --- a/base-notebook/jupyter_notebook_config.py +++ /dev/null @@ -1,7 +0,0 @@ -c = get_config() - - -# load base config -load_subconfig('/etc/jupyter/jupyter_notebook_config_base.py') - -c.NotebookApp.default_url = '/tree' diff --git a/base-notebook/jupyter_notebook_config_base.py b/base-notebook/jupyter_notebook_config_base.py deleted file mode 100644 index 8bee5d5..0000000 --- a/base-notebook/jupyter_notebook_config_base.py +++ /dev/null @@ -1,74 +0,0 @@ -from jupyter_core.paths import jupyter_data_dir -import subprocess -import os -import errno -import stat - - -c = get_config() - - -c.NotebookApp.iopub_data_rate_limit = 1.0e10 -c.NotebookApp.ip = '0.0.0.0' -c.NotebookApp.port = 8888 -c.NotebookApp.open_browser = False -c.NotebookApp.tornado_settings = {"headers": {"Content-Security-Policy": "frame-ancestors 'self' *"}} -c.NotebookApp.allow_root = True -c.NotebookApp.allow_origin = '*' -c.NotebookApp.token = '' - -# https://github.com/jupyter/notebook/issues/3130 -c.FileContentsManager.delete_to_trash = False - -# Generate a self-signed certificate -if 'GEN_CERT' in os.environ: - dir_name = jupyter_data_dir() - pem_file = os.path.join(dir_name, 'notebook.pem') - try: - os.makedirs(dir_name) - except OSError as exc: # Python >2.5 - if exc.errno == errno.EEXIST and os.path.isdir(dir_name): - pass - else: - raise - - # Generate an openssl.cnf file to set the distinguished name - cnf_file = os.path.join(os.getenv('CONDA_DIR', '/usr/lib'), 'ssl', 'openssl.cnf') - if not os.path.isfile(cnf_file): - with open(cnf_file, 'w') as fh: - fh.write( - '''\ -[req] -distinguished_name = req_distinguished_name -[req_distinguished_name] -''' - ) - - # Generate a certificate if one doesn't exist on disk - subprocess.check_call( - [ - 'openssl', - 'req', - '-new', - '-newkey', - 'rsa:2048', - '-days', - '365', - '-nodes', - '-x509', - '-subj', - '/C=XX/ST=XX/L=XX/O=generated/CN=generated', - '-keyout', - pem_file, - '-out', - pem_file, - ] - ) - # Restrict access to the file - os.chmod(pem_file, stat.S_IRUSR | stat.S_IWUSR) - c.NotebookApp.certfile = pem_file - -# Change default umask for all subprocesses of the notebook server if set in -# the environment -if 'NB_UMASK' in os.environ: - os.umask(int(os.environ['NB_UMASK'], 8)) diff --git a/base-notebook/postBuild b/base-notebook/postBuild new file mode 100644 index 0000000..1b22372 --- /dev/null +++ b/base-notebook/postBuild @@ -0,0 +1,64 @@ +#!/bin/bash + +install_java_kernel () { + cd /tmp + git clone https://github.com/frankfliu/IJava.git + cd /tmp/IJava + ./gradlew installKernel + cd /tmp + rm -rf IJava/ + rm -rf ~/.gradle + fix-permissions "${HOME}" + fix-permissions "${CONDA_DIR}" +} + +enable_classicextensions () { + cd "/home/${NB_USER}" + # community extensions + jupyter contrib nbextension install --sys-prefix + # widgets + jupyter nbextension enable --py widgetsnbextension --sys-prefix +} + +install_labextensions () { + # Add jupyterlab extensions + jupyter labextension install @jupyter-widgets/jupyterlab-manager@^2.0.0 + jupyter labextension install @bokeh/jupyter_bokeh@^2.0.0 + jupyter labextension install jupyter-matplotlib@^0.7.2 +} + +install_jupyter_server_proxy () { + jupyter serverextension enable --sys-prefix --py jupyter_server_proxy + jupyter labextension install @jupyterlab/server-proxy@^2.1.1 + jupyter lab build -y + jupyter lab clean -y + npm cache clean --force + rm -rf "${HOME}/.cache/yarn" + rm -rf "${HOME}/.node-gyp" + fix-permissions "${CONDA_DIR}" + fix-permissions "${HOME}" +} + +cleanup () { + # clean lab extensions and npm files + jupyter lab clean -y + npm cache clean --force + # delete items explicitly since we don't want to delete hidden files/folders + # such as the .jupyter or .local folders + rm -rf "/home/${NB_USER}/.cache/yarn" + rm -rf "/home/${NB_USER}/.node-gyp" + rm -rf "/home/${NB_USER}/apt.txt" + rm -rf "/home/${NB_USER}/npm*" + rm -rf "/home/${NB_USER}/environment.yml*" + rm -rf "/home/${NB_USER}/Manifest.toml*" + rm -rf "/home/${NB_USER}/postBuild*" + rm -rf "/home/${NB_USER}/Project.toml*" + conda clean --all -y +} + +main () { + enable_classicextensions + install_labextensions + install_jupyter_server_proxy + cleanup +} diff --git a/base-notebook/requirements.txt b/base-notebook/requirements.txt deleted file mode 100644 index 785d638..0000000 --- a/base-notebook/requirements.txt +++ /dev/null @@ -1,18 +0,0 @@ -# Add any additional pip/conda packages here. Included packages -# are those listed in jupyter/docker-stacks/datascience-notebook - -chart-studio==1.1 -dash==1.12 -ipywidgets==7.5 -fredapi==0.4.2 -https://github.com/IllumiDesk/nbgrader/archive/v0.6.3.zip -jupyter-contrib-nbextensions==0.5 -jupyter-dash==0.2.1.post1 -jupyter_server_proxy==1.5.0 -nbgitpuller==0.8.0 -plotly==4.7.1 -plotly-charts==0.5 -plotly-geo==1.0 -psycopg2-binary==2.8.5 -yellowbrick==1.1 -widgetsnbextension diff --git a/base-notebook/runtime.txt b/base-notebook/runtime.txt new file mode 100644 index 0000000..1124509 --- /dev/null +++ b/base-notebook/runtime.txt @@ -0,0 +1 @@ +python-3.8.5 \ No newline at end of file diff --git a/dev-requirements.txt b/dev-requirements.txt index e004e47..e3f2232 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -1,7 +1,7 @@ black==19.10b0 docker==4.2.2 flake8==3.8.3 -jupyter-repo2docker==0.11.0 +git+https://github.com/jupyterhub/repo2docker.git@fc74bef9a866da58b4af2e35a4684e393fd9fae0 pytest==5.4.3 recommonmark==0.5.0 requests==2.24.0 diff --git a/grader-notebook/Dockerfile b/grader-notebook/Dockerfile deleted file mode 100644 index 43e5546..0000000 --- a/grader-notebook/Dockerfile +++ /dev/null @@ -1,21 +0,0 @@ -ARG BASE_IMAGE=illumidesk/base-notebook:latest -FROM $BASE_IMAGE - -ARG USER_ROLE=Grader -ARG NB_UID=10001 - -USER root - -RUN jupyter nbextension enable --sys-prefix create_assignment/main \ - && jupyter nbextension enable --sys-prefix formgrader/main --section=tree \ - && jupyter serverextension enable --sys-prefix nbgrader.server_extensions.formgrader - -# fix permissions as root -RUN fix-permissions \ - && fix-permissions "${HOME}" \ - && fix-permissions "${CONDA_DIR}" - -# ensure we start user sessions with nb_user/nb_uid -USER "${NB_UID}" - -WORKDIR "${HOME}" diff --git a/illumidesk-notebook/Dockerfile b/illumidesk-notebook/Dockerfile new file mode 100644 index 0000000..2328af3 --- /dev/null +++ b/illumidesk-notebook/Dockerfile @@ -0,0 +1,128 @@ +FROM jupyter/base-notebook:b2562c469cdd AS base + +FROM illumidesk/base-notebook:latest + +# add group id since its not included by repo2docker but we need it +# to run fix-permissions +ENV NB_USER=jovyan +ENV NB_UID=1000 +ENV NB_GID=100 +ENV HOME="/home/${NB_USER}" + +USER root + +# first config location checked by jupyter --paths +RUN mkdir -p /etc/jupyter + +# copy files from base image +# start* includes: start-notebook.sh, start-singleuser.sh, and start.sh +COPY --from=base /usr/local/bin/start-notebook.sh /usr/local/bin/ +COPY --from=base /usr/local/bin/start-singleuser.sh /usr/local/bin/ +COPY --from=base /usr/local/bin/fix-permissions /usr/local/bin/ + +# adds the -f flag when adding the jovyan group +COPY start.sh /usr/local/bin/ + +# copy upstream config and rename it to base config. custom config loads base config +# with additional settings +COPY --from=base /etc/jupyter/jupyter_notebook_config.py /etc/jupyter/jupyter_notebook_config_base.py + +# update permissions +RUN chmod a+rx /usr/local/bin/fix-permissions +RUN chmod +rx /usr/local/bin/start* + +# start.sh has the option of running scripts as hooks +# https://jupyter-docker-stacks.readthedocs.io/en/latest/using/common.html#startup-hooks +RUN mkdir -p /usr/local/bin/start-notebook.d \ + && mkdir -p /usr/local/bin/before-notebook.d + +COPY enable_extensions.sh /usr/local/bin/before-notebook.d/ +RUN chmod a+rx /usr/local/bin/before-notebook.d/enable_extensions.sh + +# copy configs, we use our own to provide a base jhub config and an additional +# default config that loads/appends from the base config. this is usefule in case +# we need to add other images that default to other paths, etc. +RUN mkdir -p /etc/jupyter +COPY jupyter_notebook_config.py /etc/jupyter/ +COPY global_nbgrader_config.py /etc/jupyter/nbgrader_config.py + +RUN curl -fsSL https://code-server.dev/install.sh | sh + +# reinstall everything in the requirements.txt file but ignore terminado to avoid disutils error +# https://github.com/pypa/pip/issues/5247 +COPY requirements.txt /tmp/requirements.txt +RUN python3 -m pip install --no-cache --force -r /tmp/requirements.txt --ignore-installed \ + terminado \ + && fix-permissions "${CONDA_DIR}" \ + && fix-permissions "${HOME}" + +RUN jupyter serverextension enable --sys-prefix --py jupyter_server_proxy \ + && jupyter labextension install @jupyterlab/server-proxy@^2.1.1 \ + && jupyter lab build -y \ + && jupyter lab clean -y \ + && npm cache clean --force \ + && rm -rf "${HOME}/.cache/yarn" \ + && rm -rf "${HOME}/.node-gyp" \ + && fix-permissions "${CONDA_DIR}" \ + && fix-permissions "${HOME}" + +# Install facets which does not have a pip or conda package at the moment +WORKDIR /tmp +RUN git clone https://github.com/PAIR-code/facets.git \ + && jupyter nbextension install facets/facets-dist/ --sys-prefix \ + && rm -rf "/tmp/facets*" \ + && rm -Rf "tmp/yarn-*" \ + && rm -Rf "tmp/hsper*" \ + && rm -Rf "tmp/v8-*" \ + && rm -Rf "tmp/npm-*" \ + && rm -Rf "tmp/scijava-*" \ + && fix-permissions "${CONDA_DIR}" \ + && fix-permissions "${HOME}" + +# Import matplotlib the first time to build the font cache. +ENV XDG_CACHE_HOME="${HOME}/.cache/" + +RUN MPLBACKEND=Agg python -c "import matplotlib.pyplot" && \ + fix-permissions "${HOME}" + +# fix permissions for configs, conda, and home as root +RUN fix-permissions /etc/jupyter/ \ + && fix-permissions "${CONDA_DIR}" \ + && fix-permissions "${HOME}" + +RUN pip uninstall nbextensions_configurator \ + && python3 -m pip install https://github.com/IllumiDesk/nbgrader/archive/v0.6.3.zip + +# create symlink to jupyterhub-singleuser to handle run/spawn when setting user to root(0) +RUN ln -s "${CONDA_DIR}/envs/notebook/bin/jupyter" /usr/local/bin/ \ + && ln -s "${CONDA_DIR}/envs/notebook/bin/jupyterhub-singleuser" /usr/local/bin/ + +USER "${NB_UID}" + +# install nbgrader and then disable all extensions by default +RUN jupyter nbextension install --symlink --sys-prefix --py nbgrader --overwrite \ + && jupyter nbextension disable --sys-prefix --py nbgrader \ + && jupyter serverextension disable --sys-prefix --py nbgrader + +# everyone gets the nbgrader validate extension +RUN jupyter nbextension enable --sys-prefix validate_assignment/main --section=notebook \ + && jupyter serverextension enable --sys-prefix nbgrader.server_extensions.validate_assignment + +# the rsession-proxy is duplicated, so uninstall the original version from repo2docker +RUN pip uninstall -y jupyter-rsession-proxy + +# re install nbresuse +RUN conda install -c conda-forge nbresuse=0.3.* + +WORKDIR "${HOME}" + +EXPOSE 8888 + +# Configure containe startup, as the standard repo2docker-based +# image uses the repo2docker entrypoint. establishes consistency with +# jupyter/docker-stacks images +ENTRYPOINT ["tini", "-g", "--"] + +# allows for local docker-run commands. will run start-singleuser if +# spawned with jupyterhub +CMD ["start-notebook.sh"] diff --git a/illumidesk-notebook/enable_extensions.sh b/illumidesk-notebook/enable_extensions.sh new file mode 100644 index 0000000..6f65296 --- /dev/null +++ b/illumidesk-notebook/enable_extensions.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +enable_julia_webio_extension() ( + julia -e "using WebIO; WebIO.install_jupyter_nbextension()" +) + +install_instructor_extensions() ( + jupyter serverextension enable --sys-prefix nbgrader.server_extensions.assignment_list + jupyter serverextension enable --sys-prefix nbgrader.server_extensions.course_list + jupyter nbextension enable --sys-prefix course_list/main --section=tree + jupyter nbextension enable --sys-prefix assignment_list/main --section=tree +) + +install_student_extensions() ( + jupyter serverextension enable --sys-prefix nbgrader.server_extensions.assignment_list + jupyter nbextension enable --sys-prefix assignment_list/main --section=tree +) + +enable_julia_webio_extension + +if [[ "${USER_ROLE}" == "Instructor" ]] || [[ "${USER_ROLE}" == "TeachingAssistant" ]]; then + echo "Enabling nbgrader extensions for Instructor or TeachingAssistant role" + install_instructor_extensions +fi + +if [[ "${USER_ROLE}" == "Student" ]] || [[ "${USER_ROLE}" == "Learner" ]]; then + echo "Enabling nbgrader extensions for Student/Learner role" + install_student_extensions +fi diff --git a/base-notebook/global_nbgrader_config.py b/illumidesk-notebook/global_nbgrader_config.py similarity index 100% rename from base-notebook/global_nbgrader_config.py rename to illumidesk-notebook/global_nbgrader_config.py diff --git a/illumidesk-notebook/jupyter_notebook_config.py b/illumidesk-notebook/jupyter_notebook_config.py new file mode 100644 index 0000000..a52be08 --- /dev/null +++ b/illumidesk-notebook/jupyter_notebook_config.py @@ -0,0 +1,11 @@ +c = get_config() + + +# load base config +load_subconfig('/etc/jupyter/jupyter_notebook_config_base.py') + +c.NotebookApp.tornado_settings = {"headers": {"Content-Security-Policy": "frame-ancestors 'self' *"}} +c.NotebookApp.allow_root = True +c.NotebookApp.allow_origin = '*' +c.NotebookApp.token = '' +c.NotebookApp.default_url = '/tree' diff --git a/illumidesk-notebook/requirements.txt b/illumidesk-notebook/requirements.txt new file mode 100644 index 0000000..a812f4a --- /dev/null +++ b/illumidesk-notebook/requirements.txt @@ -0,0 +1,6 @@ +https://github.com/jgwerner/jupyter-shiny-proxy/archive/v1.2.0.zip +https://github.com/IllumiDesk/illumidesk-rsession-proxy/archive/v0.1.1.zip +https://github.com/IllumiDesk/illumidesk-vscode-proxy/archive/v0.1.2.zip +https://github.com/IllumiDesk/nbgrader/archive/v0.6.3.zip +jupyter-server-proxy==1.5.0 +jupyterlab==2.2.4 diff --git a/illumidesk-notebook/start.sh b/illumidesk-notebook/start.sh new file mode 100644 index 0000000..766530b --- /dev/null +++ b/illumidesk-notebook/start.sh @@ -0,0 +1,147 @@ +#!/bin/bash +# Copyright (c) Jupyter Development Team. +# Distributed under the terms of the Modified BSD License. + +set -e + +# Exec the specified command or fall back on bash +if [ $# -eq 0 ]; then + cmd=( "bash" ) +else + cmd=( "$@" ) +fi + +run-hooks () { + # Source scripts or run executable files in a directory + if [[ ! -d "$1" ]] ; then + return + fi + echo "$0: running hooks in $1" + for f in "$1/"*; do + case "$f" in + *.sh) + echo "$0: running $f" + source "$f" + ;; + *) + if [[ -x "$f" ]] ; then + echo "$0: running $f" + "$f" + else + echo "$0: ignoring $f" + fi + ;; + esac + done + echo "$0: done running hooks in $1" +} + +run-hooks /usr/local/bin/start-notebook.d + +# Handle special flags if we're root +if [ $(id -u) == 0 ] ; then + + # Only attempt to change the jovyan username if it exists + if id jovyan &> /dev/null ; then + echo "Set username to: $NB_USER" + usermod -d /home/$NB_USER -l $NB_USER jovyan + fi + + # Handle case where provisioned storage does not have the correct permissions by default + # Ex: default NFS/EFS (no auto-uid/gid) + if [[ "$CHOWN_HOME" == "1" || "$CHOWN_HOME" == 'yes' ]]; then + echo "Changing ownership of /home/$NB_USER to $NB_UID:$NB_GID with options '${CHOWN_HOME_OPTS}'" + chown $CHOWN_HOME_OPTS $NB_UID:$NB_GID /home/$NB_USER + fi + if [ ! -z "$CHOWN_EXTRA" ]; then + for extra_dir in $(echo $CHOWN_EXTRA | tr ',' ' '); do + echo "Changing ownership of ${extra_dir} to $NB_UID:$NB_GID with options '${CHOWN_EXTRA_OPTS}'" + chown $CHOWN_EXTRA_OPTS $NB_UID:$NB_GID $extra_dir + done + fi + + # handle home and working directory if the username changed + if [[ "$NB_USER" != "jovyan" ]]; then + # changing username, make sure homedir exists + # (it could be mounted, and we shouldn't create it if it already exists) + if [[ ! -e "/home/$NB_USER" ]]; then + echo "Relocating home dir to /home/$NB_USER" + mv /home/jovyan "/home/$NB_USER" || ln -s /home/jovyan "/home/$NB_USER" + fi + # if workdir is in /home/jovyan, cd to /home/$NB_USER + if [[ "$PWD/" == "/home/jovyan/"* ]]; then + newcwd="/home/$NB_USER/${PWD:13}" + echo "Setting CWD to $newcwd" + cd "$newcwd" + fi + fi + + # Change UID:GID of NB_USER to NB_UID:NB_GID if it does not match + if [ "$NB_UID" != $(id -u $NB_USER) ] || [ "$NB_GID" != $(id -g $NB_USER) ]; then + echo "Set user $NB_USER UID:GID to: $NB_UID:$NB_GID" + if [ "$NB_GID" != $(id -g $NB_USER) ]; then + groupadd -f -g $NB_GID -o ${NB_GROUP:-${NB_USER}} + fi + userdel $NB_USER + useradd --home /home/$NB_USER -u $NB_UID -g $NB_GID -G 100 -l $NB_USER + fi + + # Enable sudo if requested + if [[ "$GRANT_SUDO" == "1" || "$GRANT_SUDO" == 'yes' ]]; then + echo "Granting $NB_USER sudo access and appending $CONDA_DIR/bin to sudo PATH" + echo "$NB_USER ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/notebook + fi + + # Add $CONDA_DIR/bin to sudo secure_path + sed -r "s#Defaults\s+secure_path\s*=\s*\"?([^\"]+)\"?#Defaults secure_path=\"\1:$CONDA_DIR/bin\"#" /etc/sudoers | grep secure_path > /etc/sudoers.d/path + + # Exec the command as NB_USER with the PATH and the rest of + # the environment preserved + run-hooks /usr/local/bin/before-notebook.d + echo "Executing the command: ${cmd[@]}" + exec sudo -E -H -u $NB_USER PATH=$PATH XDG_CACHE_HOME=/home/$NB_USER/.cache PYTHONPATH=${PYTHONPATH:-} "${cmd[@]}" +else + if [[ "$NB_UID" == "$(id -u jovyan 2>/dev/null)" && "$NB_GID" == "$(id -g jovyan 2>/dev/null)" ]]; then + # User is not attempting to override user/group via environment + # variables, but they could still have overridden the uid/gid that + # container runs as. Check that the user has an entry in the passwd + # file and if not add an entry. + STATUS=0 && whoami &> /dev/null || STATUS=$? && true + if [[ "$STATUS" != "0" ]]; then + if [[ -w /etc/passwd ]]; then + echo "Adding passwd file entry for $(id -u)" + cat /etc/passwd | sed -e "s/^jovyan:/nayvoj:/" > /tmp/passwd + echo "jovyan:x:$(id -u):$(id -g):,,,:/home/jovyan:/bin/bash" >> /tmp/passwd + cat /tmp/passwd > /etc/passwd + rm /tmp/passwd + else + echo 'Container must be run with group "root" to update passwd file' + fi + fi + + # Warn if the user isn't going to be able to write files to $HOME. + if [[ ! -w /home/jovyan ]]; then + echo 'Container must be run with group "users" to update files' + fi + else + # Warn if looks like user want to override uid/gid but hasn't + # run the container as root. + if [[ ! -z "$NB_UID" && "$NB_UID" != "$(id -u)" ]]; then + echo 'Container must be run as root to set $NB_UID' + fi + if [[ ! -z "$NB_GID" && "$NB_GID" != "$(id -g)" ]]; then + echo 'Container must be run as root to set $NB_GID' + fi + fi + + # Warn if looks like user want to run in sudo mode but hasn't run + # the container as root. + if [[ "$GRANT_SUDO" == "1" || "$GRANT_SUDO" == 'yes' ]]; then + echo 'Container must be run as root to grant sudo permissions' + fi + + # Execute the command + run-hooks /usr/local/bin/before-notebook.d + echo "Executing the command: ${cmd[@]}" + exec "${cmd[@]}" +fi \ No newline at end of file diff --git a/base-notebook/test/test_languages.py b/illumidesk-notebook/test/test_languages.py similarity index 88% rename from base-notebook/test/test_languages.py rename to illumidesk-notebook/test/test_languages.py index ab63984..26a4e01 100644 --- a/base-notebook/test/test_languages.py +++ b/illumidesk-notebook/test/test_languages.py @@ -13,7 +13,7 @@ 'language,version_output', [ ('java', ['openjdk', '11.0.8', '2020-07-14\nOpenJDK',],), - ('julia', ['julia', 'version', '1.4.1\n']), + ('julia', ['julia', 'version', '1.5.0\n']), ('python', ['Python', '3.8.5\n']), ('R', ['R', 'version', '3.6.3',],), ], @@ -24,7 +24,7 @@ def test_languages(language, version_output): """ LOGGER.info(f'Test that language {language} is correctly installed ...') client = docker.from_env() - output = client.containers.run('illumidesk/base-notebook', f'{language} --version') + output = client.containers.run('illumidesk/base-notebook:latest', f'{language} --version') output_decoded = output.decode('utf-8').split(' ') assert output_decoded[0:3] == version_output LOGGER.info(f'Output from command: {output_decoded[0:3]}') diff --git a/img/docker_stacks_v2.png b/img/docker_stacks_v2.png new file mode 100644 index 0000000000000000000000000000000000000000..7a9c3b48182134b8745f9d038078dcff3e65cbc6 GIT binary patch literal 95585 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

~QF|dIZmn1HlzWdy))!M!^DzgV%5bTh- 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 Ki#u~Q@jn4CVSy6> literal 0 HcmV?d00001 diff --git a/img/grader_images.png b/img/grader_images.png deleted file mode 100644 index 3dc883b1a7cbf7d67f7fb3c0316325d157295214..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45826 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 diff --git a/img/workspace_images.png b/img/workspace_images.png deleted file mode 100644 index 0a7bbb7a3d7050a8f012fecd457a38d4643b9677..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56197 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

o&C< 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

bEx`Eo7cDsRKtw(_*Q)Zghyu~s!uMz`{qs^)r4 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

7>OLhIDw~^j7i+?kLWU1xwfZX3(pkM)n% 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 Hu0mjfBft|& diff --git a/instructor-notebook/Dockerfile b/instructor-notebook/Dockerfile deleted file mode 100644 index 1daa364..0000000 --- a/instructor-notebook/Dockerfile +++ /dev/null @@ -1,22 +0,0 @@ -ARG BASE_IMAGE=illumidesk/base-notebook:latest -FROM $BASE_IMAGE - -ARG USER_ROLE=Instructor - -USER root - -# enable nbgrader instructor extensions (assignment/course list) -RUN jupyter serverextension enable --sys-prefix nbgrader.server_extensions.assignment_list \ - && jupyter serverextension enable --sys-prefix nbgrader.server_extensions.course_list \ - && jupyter serverextension enable --sys-prefix nbgrader.server_extensions.course_list \ - && jupyter nbextension enable --sys-prefix course_list/main --section=tree \ - && jupyter nbextension enable --sys-prefix assignment_list/main --section=tree - -# fix permissions as root -RUN fix-permissions \ - && fix-permissions "${HOME}" \ - && fix-permissions "${CONDA_DIR}" - -USER "${NB_UID}" - -WORKDIR "${HOME}" diff --git a/learner-notebook/Dockerfile b/learner-notebook/Dockerfile deleted file mode 100644 index 014ca3f..0000000 --- a/learner-notebook/Dockerfile +++ /dev/null @@ -1,18 +0,0 @@ -ARG BASE_IMAGE=illumidesk/base-notebook:latest -FROM $BASE_IMAGE - -ARG USER_ROLE=Learner - -USER root - -RUN jupyter serverextension enable --sys-prefix nbgrader.server_extensions.assignment_list \ - && jupyter nbextension enable --sys-prefix assignment_list/main --section=tree - -# fix permissions as root -RUN fix-permissions \ - && fix-permissions "${HOME}" \ - && fix-permissions "${CONDA_DIR}" - -USER "${NB_UID}" - -WORKDIR "${HOME}" diff --git a/rstudio/Dockerfile b/rstudio/Dockerfile deleted file mode 100644 index b91fb67..0000000 --- a/rstudio/Dockerfile +++ /dev/null @@ -1,40 +0,0 @@ -FROM illumidesk/base-notebook:latest AS base - -FROM illumidesk/r-conda:latest - -ENV NB_USER=jovyan -ENV NB_UID=1000 -ENV NB_GID=100 -ENV HOME="/home/${NB_USER}" - -USER root - -RUN mkdir -p /etc/jupyter - -# copy files from base image -COPY --from=base /usr/local/bin/start* /usr/local/bin/ -COPY --from=base /usr/local/bin/fix-permissions /usr/local/bin/ -COPY --from=base /etc/jupyter/jupyter_notebook_config.py /etc/jupyter/ - -# update permissions -RUN chmod a+rx /usr/local/bin/fix-permissions -RUN chmod +rx /usr/local/bin/start* -RUN chmod +rx /etc/jupyter/jupyter_notebook_config.py - -# copy rstudio configuration -COPY rserver.conf /etc/rstudio/rserver.conf - -# copy jupyter notebook config -COPY jupyter_notebook_config.py /etc/jupyter/jupyter_notebook_config.py - -# Fix permissions on /etc/jupyter and /etc/rstudio as root -RUN fix-permissions /etc/jupyter/ \ - && fix-permissions /etc/rstudio/ \ - && fix-permissions "${HOME}" - -# Build lab extensions that may have been included -RUN jupyter lab build - -USER "${NB_UID}" - -WORKDIR "${HOME}" diff --git a/rstudio/jupyter_notebook_config.py b/rstudio/jupyter_notebook_config.py deleted file mode 100644 index a027259..0000000 --- a/rstudio/jupyter_notebook_config.py +++ /dev/null @@ -1,7 +0,0 @@ -c = get_config() - - -# load base config -load_subconfig('/etc/jupyter/jupyter_notebook_config_base.py') - -c.NotebookApp.default_url = '/rstudio' diff --git a/rstudio/rserver.conf b/rstudio/rserver.conf deleted file mode 100644 index 4f07625..0000000 --- a/rstudio/rserver.conf +++ /dev/null @@ -1,3 +0,0 @@ -auth-none=1 -rsession-which-r=/opt/conda/bin/R -auth-minimum-user-id=0 diff --git a/rstudio/test/test_rstudio.py b/rstudio/test/test_rstudio.py deleted file mode 100644 index 283be2d..0000000 --- a/rstudio/test/test_rstudio.py +++ /dev/null @@ -1,33 +0,0 @@ -import docker -from docker.errors import ContainerError - -import logging - -import pytest - - -LOGGER = logging.getLogger(__name__) - - -@pytest.mark.parametrize( - 'cmd,version_output', [('rstudio-server', ['1.2.5001\n',],),], -) -def test_cmd(cmd, version_output): - """Ensures that rstudio is found in the PATH and that it returns the correct - version. Other tests verify the correct versions for npm and node. - """ - LOGGER.info(f'Test that rstudio {cmd} is correctly installed ...') - client = docker.from_env() - output = client.containers.run('illumidesk/rstudio', f'{cmd} version') - output_decoded = output.decode('utf-8').split(' ') - assert output_decoded[0:3] == version_output - LOGGER.info(f'Output from command: {output_decoded[0:3]}') - - -def test_invalid_cmd(): - """Ensure that an invalid command returns a docker.errors.ContainerError - """ - with pytest.raises(ContainerError): - LOGGER.info('Test an invalid command ...') - client = docker.from_env() - client.containers.run('illumidesk/rstudio', 'foo --version') diff --git a/theia/Dockerfile b/theia/Dockerfile deleted file mode 100644 index 445cd18..0000000 --- a/theia/Dockerfile +++ /dev/null @@ -1,87 +0,0 @@ -FROM ubuntu:18.04 AS builder - -# install development tools -# hadolint ignore=DL4006 -RUN apt-get update \ - && apt-get install -y \ - curl \ - sudo \ - build-essential \ - jq \ - vim \ - && curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash - \ - && apt-get install -y \ - nodejs \ - && npm install -g yarn - -# add theia installation file -COPY package.json run_theia.sh /theia-app/ -RUN chmod +x /theia-app/run_theia.sh - -# build theia -WORKDIR /theia-app -RUN yarn \ - && NODE_OPTIONS="--max_old_space_size=4096" yarn theia build \ - && yarn autoclean --init \ - && echo *.ts >> .yarnclean \ - && echo *.ts.map >> .yarnclean \ - && echo *.spec.* >> .yarnclean \ - && yarn autoclean --force \ - && yarn cache clean - -# create debian package -RUN npm run build-deb - -# transfer debian package to a new clean image and install theia -FROM illumidesk/base-notebook:latest - -ENV NODE_OPTIONS="--max_old_space_size=4096" -ENV NODE_VERSION=10.21.0 -ENV NVM_VERSION=0.35.3 -ENV NVM_DIR=/usr/local/nvm -ENV NODE_PATH="${NVM_DIR}/v${NODE_VERSION}/lib/node_modules" -ENV NODE_LIB_PATH="${NVM_DIR}/v${NODE_VERSION}/lib" -ENV PATH="${NVM_DIR}/versions/node/v${NODE_VERSION}/bin:${PATH}" -ENV PATH="${NVM_DIR}/v${NODE_VERSION}/lib/node_modules/.bin:${PATH}" -ENV THEIA_DEFAULT_PLUGINS=local-dir:plugins - -USER root - -WORKDIR /tmp - -COPY --from=builder /theia-app/illumidesk-theia_0.1.0_all.deb /tmp/ -RUN curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash - \ - && apt-get install -y /tmp/illumidesk-theia_0.1.0_all.deb \ - && rm /tmp/illumidesk-theia_0.1.0_all.deb - -## NVM -# https://stackoverflow.com/questions/25899912/how-to-install-nvm-in-docker -# Set debconf to run non-interactively -RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections - -# Install nvm with node and npm -RUN mkdir -p "${NVM_DIR}" \ - && curl "https://raw.githubusercontent.com/creationix/nvm/v${NVM_VERSION}/install.sh" | sudo -E bash \ - && . "${NVM_DIR}/nvm.sh" \ - && nvm install "${NODE_VERSION}" \ - && nvm alias default "${NODE_VERSION}" \ - && nvm use default - -COPY requirements.txt /tmp/requirements.txt -RUN python3 -m pip install -r /tmp/requirements.txt \ - && rm /tmp/requirements.txt - -# Build lab extensions that may have been included -RUN jupyter lab build - -# copy jupyter notebook config -COPY jupyter_notebook_config.py /etc/jupyter/jupyter_notebook_config.py - -# fix conda, /etc/jupyter and home directory permissions as root -RUN fix-permissions /etc/jupyter \ - && fix-permissions "${CONDA_DIR}" \ - && fix-permissions "${HOME}" - -USER "${NB_UID}" - -WORKDIR "${HOME}" diff --git a/theia/jupyter_notebook_config.py b/theia/jupyter_notebook_config.py deleted file mode 100644 index d59c298..0000000 --- a/theia/jupyter_notebook_config.py +++ /dev/null @@ -1,7 +0,0 @@ -c = get_config() - - -# load base config -load_subconfig('/etc/jupyter/jupyter_notebook_config_base.py') - -c.NotebookApp.default_url = '/theia' diff --git a/theia/package.json b/theia/package.json deleted file mode 100644 index 98686b7..0000000 --- a/theia/package.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "illumidesk-theia", - "version": "0.1.0", - "license": "EPL-2.0", - "description": "IllumiDesk Theia IDE", - "engines": { - "node": "10.x" - }, - "dependencies": { - "@theia/callhierarchy": "1.4.0", - "@theia/file-search": "1.4.0", - "@theia/json": "1.3.0", - "@theia/markers": "1.4.0", - "@theia/messages": "1.4.0", - "@theia/mini-browser": "1.4.0", - "@theia/navigator": "1.4.0", - "@theia/outline-view": "1.4.0", - "@theia/preferences": "1.4.0", - "@theia/preview": "1.4.0", - "@theia/search-in-workspace": "1.4.0", - "@theia/terminal": "1.4.0", - "typescript": "3.9.7" - }, - "devDependencies": { - "@theia/cli": "1.4.0" - }, - "resolutions": { - "vscode-json-languageserver": "1.2.3", - "vscode-languageserver-protocol": "3.15.3", - "vscode-languageserver-types": "3.15.1", - "**/vscode-json-languageserver/**/vscode-languageserver": "6.1.1", - "**/moment": "2.27.0" - }, - "scripts": { - "prebuild-deb": "npm install -g node-deb", - "build-deb": "node-deb -- ." - }, - "node_deb": { - "init": "none", - "dependencies": "nodejs (>= 10.0.0)", - "install_strategy": "copy", - "executable_name": "theia", - "entrypoints": { - "cli": "run_theia.sh" - } - } -} diff --git a/theia/requirements.txt b/theia/requirements.txt deleted file mode 100644 index 0aa9a88..0000000 --- a/theia/requirements.txt +++ /dev/null @@ -1,5 +0,0 @@ -autopep8==1.5.3 -flake8==3.8.3 -illumidesk-theia-proxy==0.1.5 -jupyter-server-proxy==1.5.0 -python-language-server==0.33.3 diff --git a/theia/run_theia.sh b/theia/run_theia.sh deleted file mode 100644 index ac883b4..0000000 --- a/theia/run_theia.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash - -args=( $@ ) -SCRIPT=$(readlink -f "$0") -SCRIPTPATH=$(dirname "$SCRIPT") -\cd $SCRIPTPATH -node src-gen/backend/main.js ${args[*]} \ No newline at end of file diff --git a/theia/test/test_theia.py b/theia/test/test_theia.py deleted file mode 100644 index ca5a026..0000000 --- a/theia/test/test_theia.py +++ /dev/null @@ -1,33 +0,0 @@ -import docker -from docker.errors import ContainerError - -import logging - -import pytest - - -LOGGER = logging.getLogger(__name__) - - -@pytest.mark.parametrize( - 'cmd,version_output', [('theia', ['1.4.0\n',],), ('npm', ['6.14.4\n']), ('node', ['v10.21.0\n'])], -) -def test_cmd(cmd, version_output): - """Ensures that theia is found in the PATH and that it returns the correct - version. Other tests verify the correct versions for npm and node. - """ - LOGGER.info(f'Test that theia {cmd} is correctly installed ...') - client = docker.from_env() - output = client.containers.run('illumidesk/theia', f'{cmd} --version') - output_decoded = output.decode('utf-8').split(' ') - assert output_decoded[0:3] == version_output - LOGGER.info(f'Output from command: {output_decoded[0:3]}') - - -def test_invalid_cmd(): - """Ensure that an invalid command returns a docker.errors.ContainerError - """ - with pytest.raises(ContainerError): - LOGGER.info('Test an invalid command ...') - client = docker.from_env() - client.containers.run('illumidesk/theia', 'foo --version') diff --git a/vscode/Dockerfile b/vscode/Dockerfile deleted file mode 100644 index 412edcb..0000000 --- a/vscode/Dockerfile +++ /dev/null @@ -1,29 +0,0 @@ -ARG BASE_IMAGE=illumidesk/base-notebook:latest -FROM $BASE_IMAGE - -USER root - -WORKDIR /tmp - -RUN curl -fsSL https://code-server.dev/install.sh | sh - -COPY requirements.txt /tmp/requirements.txt -RUN python3 -m pip install -r /tmp/requirements.txt \ - && rm /tmp/requirements.txt - -# Build lab extensions that may have been included -RUN jupyter lab build - -# copy jupyter notebook config -COPY jupyter_notebook_config.py /etc/jupyter/jupyter_notebook_config.py - -# fix conda, /etc/jupyter and home directory permissions as root -RUN fix-permissions /etc/jupyter \ - && fix-permissions "${CONDA_DIR}" \ - && fix-permissions "${HOME}" - -EXPOSE 8080 - -USER "${NB_UID}" - -WORKDIR "${HOME}" diff --git a/vscode/jupyter_notebook_config.py b/vscode/jupyter_notebook_config.py deleted file mode 100644 index 9c63cae..0000000 --- a/vscode/jupyter_notebook_config.py +++ /dev/null @@ -1,7 +0,0 @@ -c = get_config() - - -# load base config -load_subconfig('/etc/jupyter/jupyter_notebook_config_base.py') - -c.NotebookApp.default_url = '/vscode' diff --git a/vscode/requirements.txt b/vscode/requirements.txt deleted file mode 100644 index 9e14ee9..0000000 --- a/vscode/requirements.txt +++ /dev/null @@ -1 +0,0 @@ -jupyter-vscode-proxy==0.1 diff --git a/vscode/test/test_vscode.py b/vscode/test/test_vscode.py deleted file mode 100644 index 241efcb..0000000 --- a/vscode/test/test_vscode.py +++ /dev/null @@ -1,34 +0,0 @@ -import docker -from docker.errors import ContainerError - -import logging - -import pytest - - -LOGGER = logging.getLogger(__name__) - - -@pytest.mark.parametrize( - 'cmd,version_output', [('code-server', '3.4.1 48f7c2724827e526eeaa6c2c151c520f48a61259',),], -) -def test_cmd(cmd, version_output): - """Ensures that coder bin is found in the PATH and that it returns the correct - version. Other tests verify the correct versions for npm and node. - """ - LOGGER.info(f'Test that vscode {cmd} is correctly installed ...') - client = docker.from_env() - output = client.containers.run('illumidesk/vscode', f'{cmd} --version') - output_decoded = output.decode('utf-8').split(' ') - output_decoded = output.decode('utf-8').split('\n') - LOGGER.info(f'Output from command: {output_decoded[2]}') - assert output_decoded[2] == version_output - - -def test_invalid_command(): - """Ensure that an invalid command returns a docker.errors.ContainerError - """ - with pytest.raises(ContainerError): - LOGGER.info('Test an invalid command ...') - client = docker.from_env() - client.containers.run('illumidesk/vscode', 'foo --version')