diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index aa641cd9..1fbbd26e 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -16,6 +16,7 @@ RUN mkdir /opt/spack-environment \ && echo ' - ipopt@3.12.10+coinhsl~mumps+metis' \ && echo ' - coinhsl@2019.05.21+blas' \ && echo ' - py-jupyterlab' \ +&& echo ' - py-ipyparallel' \ && echo ' concretizer:' \ && echo ' unify: true' \ && echo ' reuse: true' \ @@ -28,6 +29,8 @@ RUN mkdir /opt/spack-environment \ && echo ' - openmpi' \ && echo ' zlib-api:' \ && echo ' - zlib' \ +&& echo ' zlib-ng:' \ +&& echo ' buildable: false' \ && echo ' config:' \ && echo ' install_tree: /opt/software' \ && echo ' view: /opt/views/view') > /opt/spack-environment/spack.yaml @@ -35,8 +38,23 @@ RUN mkdir /opt/spack-environment \ # This is manual, and required to build Ipopt COPY coinhsl-archive-2019.05.21.tar.gz /opt/spack-environment/coinhsl-archive-2019.05.21.tar.gz +# Find external packages +RUN cd /opt/spack-environment && spack env activate . && spack external find --all --exclude python + # Do this separate of install to cache keys... -RUN spack mirror add develop https://binaries.spack.io/develop && spack buildcache keys --install --trust +RUN cd /opt/spack-environment && spack env activate . && spack mirror add develop https://binaries.spack.io/develop && spack buildcache keys --install --trust && spack concretize -f && spack mirror create -a + +# Install Ipopt w/ CoinHSL (and other deps) in stages to cache builds +RUN cd /opt/spack-environment && spack env activate . && spack install --fail-fast ipopt + +# Install PETSc +RUN cd /opt/spack-environment && spack env activate . && spack install --fail-fast petsc + +# Install py-jupyterlab +RUN cd /opt/spack-environment && spack env activate . && spack install --fail-fast py-jupyterlab + +# Install py-ipyparallel +RUN cd /opt/spack-environment && spack env activate . && spack install --fail-fast py-ipyparallel # Install the software, remove unnecessary deps RUN cd /opt/spack-environment && spack env activate . && spack install --fail-fast && spack gc -y @@ -72,7 +90,7 @@ RUN { \ RUN apt-get -yqq update && apt-get -yqq upgrade \ - && apt-get -yqq install gfortran \ + && apt-get -yqq install gfortran npm postgresql \ && rm -rf /var/lib/apt/lists/* ENTRYPOINT [ "/entrypoint.sh" ] CMD [ "/bin/bash" ] @@ -83,6 +101,25 @@ RUN echo "source /entrypoint.sh" >> /home/vscode/.bashrc # Install the Jupyter kernel RUN . /entrypoint.sh && \ python3 -m ipykernel install \ - --name py311-exago\ - --display-name ExaGO \ + --name py311-exago \ + --display-name "ExaGO" \ --prefix= + +# Install the mpi4py Jupyter kernel +RUN . /entrypoint.sh && \ + python3 -m ipykernel install \ + --name py311-mpi4py-exago \ + --display-name "ExaGO w/ MPI" \ + --prefix= + +# Make modifications that are necessary to run mpi4py in kernelspec +RUN sed -i 's/\"\/opt\/views\/view\/bin\/python3\"/\"mpiexec\", \"-n\", \"1\", \"\/opt\/views\/view\/bin\/python3\"/g' /usr/local/share/jupyter/kernels/py311-mpi4py-exago/kernel.json + +# Configure user for container +USER vscode + +# Install nvm +RUN mkdir -p /home/vscode/nvm && cd /home/vscode/nvm && curl -O https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh +RUN chown vscode /home/vscode/nvm/install.sh && chmod +x /home/vscode/nvm/install.sh + +# Install NodeJS version 16.13.0 with nvm diff --git a/.devcontainer/create_dockerfile_devcontainer.sh b/.devcontainer/create_dockerfile_devcontainer.sh new file mode 100755 index 00000000..2be7ddc9 --- /dev/null +++ b/.devcontainer/create_dockerfile_devcontainer.sh @@ -0,0 +1,137 @@ +#!/bin/bash +# Generates Dockerfile for use as Devcontainer... + +# Only necessary for HTTPS operations on PNNL VPN +# export HTTPS_PROXY=http://proxy01.pnl.gov:3128 && +# export https_proxy=http://proxy01.pnl.gov:3128 && + +# Get CoinHSL tarball if not present +if [ ! -f "./coinhsl-archive-2019.05.21.tar.gz" ]; then + echo "No coinhsl-archive-2019.05.21.tar.gz found - make sure to get your own license and copy it to this directory" + echo "Note that the tarball must be named coinhsl-archive-2019.05.21.tar.gz" + exit 1 +fi + +# Add read/execute permissions to CoinHSL tarball +chmod +rx ./coinhsl-archive-2019.05.21.tar.gz && + +# If "-f" flag passed, force rebuild +if [ "$1" == "-f" ]; then + echo "Forcing rebuild" && + rm -rf ~/.spack && + rm -rf ./spack && + rm -rf ./spack-env +fi + +# or no ./spack dir, force a rebuild +if [ ! -d "./tpl/spack/share" ]; then + echo "No spack submodule directory found, downloading spack" + git submodule update --init --recursive +fi + +export SPACK_PYTHON=$(which python3) && +# Setup spack +source ./tpl/spack/share/spack/setup-env.sh && + +# Create heredoc for spack.yaml with environment +cat > $(pwd)/spack.yaml < ./.devcontainer/Dockerfile + +# THIS ONLY WORKS ON MAC!!! - maybe get gsed wit brew working... +# Add Docker command before "# Install" that copies CoinHSL into image +sed -i "" "s|# Install the software|# This is manual, and required to build Ipopt\nCOPY coinhsl-archive-2019.05.21.tar.gz /opt/spack-environment/coinhsl-archive-2019.05.21.tar.gz\n\n# Install the software|" ./.devcontainer/Dockerfile + +# Find external packages +sed -i "" "s|# Install the software|# Find external packages\nRUN cd /opt/spack-environment \&\& spack env activate . \&\& spack external find --all --exclude python\n\n# Install the software|" ./.devcontainer/Dockerfile + +# Also trusts the build cache and create source mirror +sed -i "" "s|# Install the software|# Do this separate of install to cache keys...\nRUN cd /opt/spack-environment \&\& spack env activate . \&\& spack mirror add develop https://binaries.spack.io/develop \&\& spack buildcache keys --install --trust \&\& spack concretize -f \&\& spack mirror create -a\n\n# Install the software|" ./.devcontainer/Dockerfile + +# Install Ipopt and packages in separate stages to cache builds +sed -i "" "s|# Install the software|# Install Ipopt w/ CoinHSL (and other deps) in stages to cache builds\nRUN cd /opt/spack-environment \&\& spack env activate . \&\& spack install --fail-fast ipopt\n\n# Install the software|" ./.devcontainer/Dockerfile +sed -i "" "s|# Install the software|# Install PETSc \nRUN cd /opt/spack-environment \&\& spack env activate . \&\& spack install --fail-fast petsc\n\n# Install the software|" ./.devcontainer/Dockerfile +sed -i "" "s|# Install the software|# Install py-jupyterlab\nRUN cd /opt/spack-environment \&\& spack env activate . \&\& spack install --fail-fast py-jupyterlab\n\n# Install the software|" ./.devcontainer/Dockerfile +sed -i "" "s|# Install the software|# Install py-ipyparallel\nRUN cd /opt/spack-environment \&\& spack env activate . \&\& spack install --fail-fast py-ipyparallel\n\n# Install the software|" ./.devcontainer/Dockerfile + +# Configure environment for VSCode User in devcontainer +echo "# Make sure devcontainer user gets spack packages" >> ./.devcontainer/Dockerfile +echo "RUN echo \"source /entrypoint.sh\" >> /home/vscode/.bashrc" >> ./.devcontainer/Dockerfile + +# Finally install the Jupyter kernel +echo "" >> ./.devcontainer/Dockerfile +echo "# Install the Jupyter kernel" >> ./.devcontainer/Dockerfile +echo "RUN . /entrypoint.sh && \\" >> ./.devcontainer/Dockerfile +echo " python3 -m ipykernel install \\" >> ./.devcontainer/Dockerfile +echo " --name py311-exago \\" >> ./.devcontainer/Dockerfile +echo " --display-name \"ExaGO\" \\" >> ./.devcontainer/Dockerfile +echo " --prefix=$(which jupyter)" >> ./.devcontainer/Dockerfile + +# Install the mpi4py Jupyter kernel +echo "" >> ./.devcontainer/Dockerfile +echo "# Install the mpi4py Jupyter kernel" >> ./.devcontainer/Dockerfile +echo "RUN . /entrypoint.sh && \\" >> ./.devcontainer/Dockerfile +echo " python3 -m ipykernel install \\" >> ./.devcontainer/Dockerfile +echo " --name py311-mpi4py-exago \\" >> ./.devcontainer/Dockerfile +echo " --display-name \"ExaGO w/ MPI\" \\" >> ./.devcontainer/Dockerfile +echo " --prefix=$(which jupyter)" >> ./.devcontainer/Dockerfile + +# Modify mpi4py kernel to actually launch process with mpiexec +echo "" >> ./.devcontainer/Dockerfile +echo "# Make modifications that are necessary to run mpi4py in kernelspec" >> ./.devcontainer/Dockerfile +echo "RUN sed -i 's/\\\"\/opt\/views\/view\/bin\/python3\\\"/\\\"mpiexec\\\", \\\"-n\\\", \\\"1\\\", \\\"\/opt\/views\/view\/bin\/python3\\\"/g' /usr/local/share/jupyter/kernels/py311-mpi4py-exago/kernel.json" >> ./.devcontainer/Dockerfile + +# Make sure vscode user is correct +echo "" >> ./.devcontainer/Dockerfile +echo "# Configure user for container" >> ./.devcontainer/Dockerfile +echo "USER vscode" >> ./.devcontainer/Dockerfile + +# Install nvm for VSCode user +echo "" >> ./.devcontainer/Dockerfile +echo "# Install nvm" >> ./.devcontainer/Dockerfile +echo "RUN mkdir -p /home/vscode/nvm && cd /home/vscode/nvm && curl -O https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh" >> ./.devcontainer/Dockerfile +echo "RUN chown vscode /home/vscode/nvm/install.sh && chmod +x /home/vscode/nvm/install.sh" >> ./.devcontainer/Dockerfile + +# Install NodeJS version 16.13.0 with nvm +echo "" >> ./.devcontainer/Dockerfile +echo "# Install NodeJS version 16.13.0 with nvm" >> ./.devcontainer/Dockerfile +#echo "RUN . /opt/nvm/nvm.sh && \\" >> ./.devcontainer/Dockerfile +#echo " nvm install v16.13.0" >> ./.devcontainer/Dockerfile diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index facd9a6e..134760f6 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -9,7 +9,8 @@ "ms-azuretools.vscode-docker", "github.vscode-github-actions", "ms-toolsai.jupyter", - "GitHub.copilot" + "GitHub.copilot", + "ms-vsliveshare.vsliveshare" ] } }, diff --git a/.gitignore b/.gitignore index d5f79fce..fad03d2d 100644 --- a/.gitignore +++ b/.gitignore @@ -5,7 +5,7 @@ install/* .ubuild.json *__pycache__* *nvblas.conf -spack-* +spack* .vscode/ coinhsl-* node_modules @@ -14,3 +14,4 @@ package-lock.json config.py spack_* hiop/ +solution diff --git a/docs/devcontainer/README.md b/docs/devcontainer/README.md index ec90b952..ae503b71 100644 --- a/docs/devcontainer/README.md +++ b/docs/devcontainer/README.md @@ -7,6 +7,10 @@ 1. open your local clone of exago in VSCode 1. copy the CoinHSL 2019 tarball to the top level of your exago directory +## Generate the container + +Spack is used to generate the base image, with some sed/echo commands used to fine-tune Dockerfile for use case within a Dev Container. Run `.devcontainer/create_dockerfile.sh` in order to re-generate the Dockerfile. This should be done semi-frequently whenever a spack version or exago version needs updating. + ## Build Container The build info for this container is in `.devcontainer/`. There is a Dockerfile and json file associated with the configuration. diff --git a/docs/devcontainer/mpi4py-tutorial.ipynb b/docs/devcontainer/mpi4py-tutorial.ipynb new file mode 100644 index 00000000..4ceaec4b --- /dev/null +++ b/docs/devcontainer/mpi4py-tutorial.ipynb @@ -0,0 +1,1558 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# ExaGO mpi4py Jupyter Tutorial\n", + "\n", + "We have a Python wrapper for ExaGO installed in this container through spack. You can view the Dockerfile in `.devcontainer/Dockerfile`. See the Appendix for more details.\n", + "\n", + "This is different to the base tutorial in that we include some additional information about MPI configuration." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ExaGO 1.6.0 built on Nov 9 2023\n", + "ExaGO 1.6.0 built on Nov 9 2023\n", + "ExaGO 1.6.0 built on Nov 9 2023\n", + "ExaGO 1.6.0 built on Nov 9 2023\n", + "ExaGO 1.6.0 built on Nov 9 2023\n" + ] + } + ], + "source": [ + "!mpirun -n 5 opflow --version" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Hello\n", + " from rank 0 out of 1 total ranks\n" + ] + } + ], + "source": [ + "# Unique to MPI configuration\n", + "print(f'Hello')\n", + "import mpi4py\n", + "mpi4py.rc.threads = False\n", + "from mpi4py import MPI\n", + "comm = MPI.COMM_WORLD\n", + "rank = comm.Get_rank()\n", + "size = comm.Get_size()\n", + "print(f'{comm} from rank {rank} out of {size} total ranks')" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "/home/app/docs/devcontainer\n", + "/home/app\n" + ] + } + ], + "source": [ + "# Get pwd and change directory to where datafiles are\n", + "import os\n", + "print(f'{os.getcwd()}')\n", + "os.chdir('../..')\n", + "print(f'{os.getcwd()}')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We need to run in a parallel cluster, save file to disk (or return in place), and then do something with the solution..." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Starting 6 engines with \n", + "100%|██████████| 6/6 [00:05<00:00, 1.03engine/s]\n", + "Hello World from rank 0. total ranks=6. host=dfdb9932ea09 out of /home/app\n", + "Hello World from rank 1. total ranks=6. host=dfdb9932ea09 out of /home/app\n", + "Hello World from rank 2. total ranks=6. host=dfdb9932ea09 out of /home/app\n", + "Hello World from rank 3. total ranks=6. host=dfdb9932ea09 out of /home/app\n", + "Hello World from rank 4. total ranks=6. host=dfdb9932ea09 out of /home/app\n", + "Hello World from rank 5. total ranks=6. host=dfdb9932ea09 out of /home/app\n", + "Stopping engine(s): 1699501339\n", + "engine set stopped 1699501339: {'exit_code': 0, 'pid': 35617, 'identifier': 'ipengine-1699501338-ciod-1699501339-35554'}\n", + "Stopping controller\n", + "Controller stopped: {'exit_code': 0, 'pid': 35587, 'identifier': 'ipcontroller-1699501338-ciod-35554'}\n" + ] + } + ], + "source": [ + "# Hello world first:\n", + "import ipyparallel as ipp\n", + "\n", + "def mpi_example():\n", + " import os\n", + " from mpi4py import MPI\n", + " comm = MPI.COMM_WORLD\n", + " return f\"Hello World from rank {comm.Get_rank()}. total ranks={comm.Get_size()}. host={MPI.Get_processor_name()} out of {os.getcwd()}\"\n", + "\n", + "# request an MPI cluster with 24 engines\n", + "with ipp.Cluster(controller_ip=\"*\", engines=\"mpi\", n=6) as rc:\n", + " # get a broadcast_view on the cluster which is best\n", + " # suited for MPI style computation\n", + " view = rc.broadcast_view()\n", + " # run the mpi_example function on all engines in parallel\n", + " r = view.apply_sync(mpi_example)\n", + " # Retrieve and print the result from the engines\n", + " print(\"\\n\".join(r))\n", + "# at this point, the cluster processes have been shutdown" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "/home/app\n", + "/home/app\n", + "Starting 1 engines with \n", + "100%|██████████| 1/1 [00:06<00:00, 6.02s/engine]\n", + "Stopping engine(s): 1699625249\n", + "engine set stopped 1699625249: {'exit_code': 15, 'pid': 4000, 'identifier': 'ipengine-1699625248-oea1-1699625249-2295'}\n", + "Stopping controller\n", + "Controller stopped: {'exit_code': 0, 'pid': 3989, 'identifier': 'ipcontroller-1699625248-oea1-2295'}\n" + ] + } + ], + "source": [ + "import ipyparallel as ipp\n", + "import os\n", + "print(f'{os.getcwd()}')\n", + "os.chdir('/home/app')\n", + "print(f'{os.getcwd()}')\n", + "\n", + "def run_exago():\n", + " from mpi4py import MPI\n", + " import exago\n", + " import os\n", + " comm = MPI.COMM_WORLD\n", + " rank = comm.Get_rank()\n", + " exago.initialize(\"app\", comm)\n", + " scopf = exago.SCOPFLOW()\n", + " path = exago.prefix()\n", + " scopf.set_network_data(\n", + " os.path.join(path, 'share', 'exago', 'datafiles', 'case9', 'case9mod.m'))\n", + " scopf.set_contingency_data(\n", + " os.path.join(path, 'share', 'exago', 'datafiles', 'case9', 'case9.cont'),\n", + " exago.ContingencyFileInputFormat.NATIVE)\n", + " scopf.set_num_contingencies(4)\n", + " # set solver HIOP\n", + " # subproblem solver IPOPT\n", + " scopf.set_solver(\"IPOPT\")\n", + " scopf.solve()\n", + "\n", + "\n", + " comm.barrier()\n", + "\n", + " scopf.save_solution_all(exago.OutputFormat.JSON, 'solution')\n", + "\n", + " # exago.finalize()\n", + " comm.barrier()\n", + "\n", + "# request an MPI cluster with 24 engines\n", + "with ipp.Cluster(controller_ip=\"*\", engines=\"mpi\", n=1) as rc:\n", + " # get a broadcast_view on the cluster which is best\n", + " # suited for MPI style computation\n", + " view = rc.broadcast_view()\n", + " # run the mpi_example function on all engines in parallel\n", + " r = view.apply_sync(run_exago)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{\n", + "\t\"casefile\": \"./datafiles/case9/case9mod.m\",\n", + "\t\"gicfile\": \"not given\",\n", + "\t\"nbranch\": 9,\n", + "\t\"ngen\": 3,\n", + "\t\"nbus\": 9,\n", + "\t\"KVlevels\": [\n", + "\t\t345.000000\n", + "\t],\n", + "\t\"casejsonfile\": \"solution.json\",\n", + "\t\"geojsondata\": {\n", + "\t\t\"type\": \"FeatureCollection\",\n", + "\t\t\"features\": [\n", + "\t\t\t{\n", + "\t\t\t\t\"type\": \"Feature\",\n", + "\t\t\t\t\"geometry\": {\n", + "\t\t\t\t\t\"type\": \"Point\",\n", + "\t\t\t\t\t\"coordinates\": [\n", + "\t\t\t\t\t\t-97.508469,\n", + "\t\t\t\t\t\t35.981918\n", + "\t\t\t\t\t]\n", + "\t\t\t\t},\n", + "\t\t\t\t\"properties\": {\n", + "\t\t\t\t\t\"elementtype\": \"SUBSTATION\",\n", + "\t\t\t\t\t\"NAME\": \"1\",\n", + "\t\t\t\t\t\"nbus\": 1,\n", + "\t\t\t\t\t\"KVlevels\": [\n", + "\t\t\t\t\t\t345.000000\n", + "\t\t\t\t\t],\n", + "\t\t\t\t\t\"bus\": [\n", + "\t\t\t\t\t\t{\n", + "\t\t\t\t\t\t\t\"elementtype\": \"bus\",\n", + "\t\t\t\t\t\t\t\"BUS_I\": 1,\n", + "\t\t\t\t\t\t\t\"VA\": 0.000000,\n", + "\t\t\t\t\t\t\t\"VM\": 1.099983,\n", + "\t\t\t\t\t\t\t\"BUS_NAME\": \" 1\",\n", + "\t\t\t\t\t\t\t\"VMIN\": 0.900000,\n", + "\t\t\t\t\t\t\t\"VMAX\": 1.100000,\n", + "\t\t\t\t\t\t\t\"BASE_KV\": 345.000000,\n", + "\t\t\t\t\t\t\t\"PD\": 0.000000,\n", + "\t\t\t\t\t\t\t\"QD\": 0.000000,\n", + "\t\t\t\t\t\t\t\"PDloss\": 0.000000,\n", + "\t\t\t\t\t\t\t\"QDloss\": 0.000000,\n", + "\t\t\t\t\t\t\t\"LAM_P\": 2102.907811,\n", + "\t\t\t\t\t\t\t\"LAM_Q\": 0.000000,\n", + "\t\t\t\t\t\t\t\"ngen\": 1,\n", + "\t\t\t\t\t\t\t\"gen\": [\n", + "\t\t\t\t\t\t\t\t{\n", + "\t\t\t\t\t\t\t\t\t\"GEN_BUS\": 1,\n", + "\t\t\t\t\t\t\t\t\t\"GEN_FUEL\": \"UNDEFINED\",\n", + "\t\t\t\t\t\t\t\t\t\"PG\": 72.859446,\n", + "\t\t\t\t\t\t\t\t\t\"QG\": 6.790092,\n", + "\t\t\t\t\t\t\t\t\t\"GEN_STATUS\": 1,\n", + "\t\t\t\t\t\t\t\t\t\"PMAX\": 350.000000,\n", + "\t\t\t\t\t\t\t\t\t\"PMIN\": 10.000000,\n", + "\t\t\t\t\t\t\t\t\t\"QMAX\": 300.000000,\n", + "\t\t\t\t\t\t\t\t\t\"QMIN\": -300.000000\n", + "\t\t\t\t\t\t\t\t}\n", + "\t\t\t\t\t\t\t]\n", + "\t\t\t\t\t\t}\n", + "\t\t\t\t\t],\n", + "\t\t\t\t\t\"Vm\": 1.099983\n", + "\t\t\t\t}\n", + "\t\t\t},\n", + "\t\t\t{\n", + "\t\t\t\t\"type\": \"Feature\",\n", + "\t\t\t\t\"geometry\": {\n", + "\t\t\t\t\t\"type\": \"Point\",\n", + "\t\t\t\t\t\"coordinates\": [\n", + "\t\t\t\t\t\t-97.187075,\n", + "\t\t\t\t\t\t35.864940\n", + "\t\t\t\t\t]\n", + "\t\t\t\t},\n", + "\t\t\t\t\"properties\": {\n", + "\t\t\t\t\t\"elementtype\": \"SUBSTATION\",\n", + "\t\t\t\t\t\"NAME\": \"2\",\n", + "\t\t\t\t\t\"nbus\": 1,\n", + "\t\t\t\t\t\"KVlevels\": [\n", + "\t\t\t\t\t\t345.000000\n", + "\t\t\t\t\t],\n", + "\t\t\t\t\t\"bus\": [\n", + "\t\t\t\t\t\t{\n", + "\t\t\t\t\t\t\t\"elementtype\": \"bus\",\n", + "\t\t\t\t\t\t\t\"BUS_I\": 2,\n", + "\t\t\t\t\t\t\t\"VA\": 3.927539,\n", + "\t\t\t\t\t\t\t\"VM\": 1.095254,\n", + "\t\t\t\t\t\t\t\"BUS_NAME\": \" 1\",\n", + "\t\t\t\t\t\t\t\"VMIN\": 0.900000,\n", + "\t\t\t\t\t\t\t\"VMAX\": 1.100000,\n", + "\t\t\t\t\t\t\t\"BASE_KV\": 345.000000,\n", + "\t\t\t\t\t\t\t\"PD\": 0.000000,\n", + "\t\t\t\t\t\t\t\"QD\": 0.000000,\n", + "\t\t\t\t\t\t\t\"PDloss\": 0.000000,\n", + "\t\t\t\t\t\t\t\"QDloss\": 0.000000,\n", + "\t\t\t\t\t\t\t\"LAM_P\": 2059.179811,\n", + "\t\t\t\t\t\t\t\"LAM_Q\": -0.000000,\n", + "\t\t\t\t\t\t\t\"ngen\": 1,\n", + "\t\t\t\t\t\t\t\"gen\": [\n", + "\t\t\t\t\t\t\t\t{\n", + "\t\t\t\t\t\t\t\t\t\"GEN_BUS\": 2,\n", + "\t\t\t\t\t\t\t\t\t\"GEN_FUEL\": \"UNDEFINED\",\n", + "\t\t\t\t\t\t\t\t\t\"PG\": 114.069401,\n", + "\t\t\t\t\t\t\t\t\t\"QG\": -5.128376,\n", + "\t\t\t\t\t\t\t\t\t\"GEN_STATUS\": 1,\n", + "\t\t\t\t\t\t\t\t\t\"PMAX\": 300.000000,\n", + "\t\t\t\t\t\t\t\t\t\"PMIN\": 10.000000,\n", + "\t\t\t\t\t\t\t\t\t\"QMAX\": 300.000000,\n", + "\t\t\t\t\t\t\t\t\t\"QMIN\": -300.000000\n", + "\t\t\t\t\t\t\t\t}\n", + "\t\t\t\t\t\t\t]\n", + "\t\t\t\t\t\t}\n", + "\t\t\t\t\t],\n", + "\t\t\t\t\t\"Vm\": 1.095254\n", + "\t\t\t\t}\n", + "\t\t\t},\n", + "\t\t\t{\n", + "\t\t\t\t\"type\": \"Feature\",\n", + "\t\t\t\t\"geometry\": {\n", + "\t\t\t\t\t\"type\": \"Point\",\n", + "\t\t\t\t\t\"coordinates\": [\n", + "\t\t\t\t\t\t-97.016065,\n", + "\t\t\t\t\t\t35.568742\n", + "\t\t\t\t\t]\n", + "\t\t\t\t},\n", + "\t\t\t\t\"properties\": {\n", + "\t\t\t\t\t\"elementtype\": \"SUBSTATION\",\n", + "\t\t\t\t\t\"NAME\": \"3\",\n", + "\t\t\t\t\t\"nbus\": 1,\n", + "\t\t\t\t\t\"KVlevels\": [\n", + "\t\t\t\t\t\t345.000000\n", + "\t\t\t\t\t],\n", + "\t\t\t\t\t\"bus\": [\n", + "\t\t\t\t\t\t{\n", + "\t\t\t\t\t\t\t\"elementtype\": \"bus\",\n", + "\t\t\t\t\t\t\t\"BUS_I\": 3,\n", + "\t\t\t\t\t\t\t\"VA\": 2.120068,\n", + "\t\t\t\t\t\t\t\"VM\": 1.086566,\n", + "\t\t\t\t\t\t\t\"BUS_NAME\": \" 1\",\n", + "\t\t\t\t\t\t\t\"VMIN\": 0.900000,\n", + "\t\t\t\t\t\t\t\"VMAX\": 1.100000,\n", + "\t\t\t\t\t\t\t\"BASE_KV\": 345.000000,\n", + "\t\t\t\t\t\t\t\"PD\": 0.000000,\n", + "\t\t\t\t\t\t\t\"QD\": 0.000000,\n", + "\t\t\t\t\t\t\t\"PDloss\": 0.000000,\n", + "\t\t\t\t\t\t\t\"QDloss\": 0.000000,\n", + "\t\t\t\t\t\t\t\"LAM_P\": 2065.154806,\n", + "\t\t\t\t\t\t\t\"LAM_Q\": -0.000000,\n", + "\t\t\t\t\t\t\t\"ngen\": 1,\n", + "\t\t\t\t\t\t\t\"gen\": [\n", + "\t\t\t\t\t\t\t\t{\n", + "\t\t\t\t\t\t\t\t\t\"GEN_BUS\": 3,\n", + "\t\t\t\t\t\t\t\t\t\"GEN_FUEL\": \"UNDEFINED\",\n", + "\t\t\t\t\t\t\t\t\t\"PG\": 80.210400,\n", + "\t\t\t\t\t\t\t\t\t\"QG\": -23.474118,\n", + "\t\t\t\t\t\t\t\t\t\"GEN_STATUS\": 1,\n", + "\t\t\t\t\t\t\t\t\t\"PMAX\": 270.000000,\n", + "\t\t\t\t\t\t\t\t\t\"PMIN\": 10.000000,\n", + "\t\t\t\t\t\t\t\t\t\"QMAX\": 300.000000,\n", + "\t\t\t\t\t\t\t\t\t\"QMIN\": -300.000000\n", + "\t\t\t\t\t\t\t\t}\n", + "\t\t\t\t\t\t\t]\n", + "\t\t\t\t\t\t}\n", + "\t\t\t\t\t],\n", + "\t\t\t\t\t\"Vm\": 1.086566\n", + "\t\t\t\t}\n", + "\t\t\t},\n", + "\t\t\t{\n", + "\t\t\t\t\"type\": \"Feature\",\n", + "\t\t\t\t\"geometry\": {\n", + "\t\t\t\t\t\"type\": \"Point\",\n", + "\t\t\t\t\t\"coordinates\": [\n", + "\t\t\t\t\t\t-97.075456,\n", + "\t\t\t\t\t\t35.231918\n", + "\t\t\t\t\t]\n", + "\t\t\t\t},\n", + "\t\t\t\t\"properties\": {\n", + "\t\t\t\t\t\"elementtype\": \"SUBSTATION\",\n", + "\t\t\t\t\t\"NAME\": \"4\",\n", + "\t\t\t\t\t\"nbus\": 1,\n", + "\t\t\t\t\t\"KVlevels\": [\n", + "\t\t\t\t\t\t345.000000\n", + "\t\t\t\t\t],\n", + "\t\t\t\t\t\"bus\": [\n", + "\t\t\t\t\t\t{\n", + "\t\t\t\t\t\t\t\"elementtype\": \"bus\",\n", + "\t\t\t\t\t\t\t\"BUS_I\": 4,\n", + "\t\t\t\t\t\t\t\"VA\": -1.992724,\n", + "\t\t\t\t\t\t\t\"VM\": 1.097021,\n", + "\t\t\t\t\t\t\t\"BUS_NAME\": \" 1\",\n", + "\t\t\t\t\t\t\t\"VMIN\": 0.900000,\n", + "\t\t\t\t\t\t\t\"VMAX\": 1.100000,\n", + "\t\t\t\t\t\t\t\"BASE_KV\": 345.000000,\n", + "\t\t\t\t\t\t\t\"PD\": 0.000000,\n", + "\t\t\t\t\t\t\t\"QD\": 0.000000,\n", + "\t\t\t\t\t\t\t\"PDloss\": 0.000000,\n", + "\t\t\t\t\t\t\t\"QDloss\": 0.000000,\n", + "\t\t\t\t\t\t\t\"LAM_P\": 2103.164667,\n", + "\t\t\t\t\t\t\t\"LAM_Q\": 0.076862,\n", + "\t\t\t\t\t\t\t\"ngen\": 0,\n", + "\t\t\t\t\t\t\t\"gen\": [\n", + "\t\t\t\t\t\t\t]\n", + "\t\t\t\t\t\t}\n", + "\t\t\t\t\t],\n", + "\t\t\t\t\t\"Vm\": 1.097021\n", + "\t\t\t\t}\n", + "\t\t\t},\n", + "\t\t\t{\n", + "\t\t\t\t\"type\": \"Feature\",\n", + "\t\t\t\t\"geometry\": {\n", + "\t\t\t\t\t\"type\": \"Point\",\n", + "\t\t\t\t\t\"coordinates\": [\n", + "\t\t\t\t\t\t-97.337459,\n", + "\t\t\t\t\t\t35.012072\n", + "\t\t\t\t\t]\n", + "\t\t\t\t},\n", + "\t\t\t\t\"properties\": {\n", + "\t\t\t\t\t\"elementtype\": \"SUBSTATION\",\n", + "\t\t\t\t\t\"NAME\": \"5\",\n", + "\t\t\t\t\t\"nbus\": 1,\n", + "\t\t\t\t\t\"KVlevels\": [\n", + "\t\t\t\t\t\t345.000000\n", + "\t\t\t\t\t],\n", + "\t\t\t\t\t\"bus\": [\n", + "\t\t\t\t\t\t{\n", + "\t\t\t\t\t\t\t\"elementtype\": \"bus\",\n", + "\t\t\t\t\t\t\t\"BUS_I\": 5,\n", + "\t\t\t\t\t\t\t\"VA\": -3.059611,\n", + "\t\t\t\t\t\t\t\"VM\": 1.079374,\n", + "\t\t\t\t\t\t\t\"BUS_NAME\": \" 1\",\n", + "\t\t\t\t\t\t\t\"VMIN\": 0.900000,\n", + "\t\t\t\t\t\t\t\"VMAX\": 1.100000,\n", + "\t\t\t\t\t\t\t\"BASE_KV\": 345.000000,\n", + "\t\t\t\t\t\t\t\"PD\": 75.000000,\n", + "\t\t\t\t\t\t\t\"QD\": 50.000000,\n", + "\t\t\t\t\t\t\t\"PDloss\": 0.000000,\n", + "\t\t\t\t\t\t\t\"QDloss\": 0.000000,\n", + "\t\t\t\t\t\t\t\"LAM_P\": 2113.454996,\n", + "\t\t\t\t\t\t\t\"LAM_Q\": 7.292915,\n", + "\t\t\t\t\t\t\t\"ngen\": 0,\n", + "\t\t\t\t\t\t\t\"gen\": [\n", + "\t\t\t\t\t\t\t]\n", + "\t\t\t\t\t\t}\n", + "\t\t\t\t\t],\n", + "\t\t\t\t\t\"Vm\": 1.079374\n", + "\t\t\t\t}\n", + "\t\t\t},\n", + "\t\t\t{\n", + "\t\t\t\t\"type\": \"Feature\",\n", + "\t\t\t\t\"geometry\": {\n", + "\t\t\t\t\t\"type\": \"Point\",\n", + "\t\t\t\t\t\"coordinates\": [\n", + "\t\t\t\t\t\t-97.679479,\n", + "\t\t\t\t\t\t35.012072\n", + "\t\t\t\t\t]\n", + "\t\t\t\t},\n", + "\t\t\t\t\"properties\": {\n", + "\t\t\t\t\t\"elementtype\": \"SUBSTATION\",\n", + "\t\t\t\t\t\"NAME\": \"6\",\n", + "\t\t\t\t\t\"nbus\": 1,\n", + "\t\t\t\t\t\"KVlevels\": [\n", + "\t\t\t\t\t\t345.000000\n", + "\t\t\t\t\t],\n", + "\t\t\t\t\t\"bus\": [\n", + "\t\t\t\t\t\t{\n", + "\t\t\t\t\t\t\t\"elementtype\": \"bus\",\n", + "\t\t\t\t\t\t\t\"BUS_I\": 6,\n", + "\t\t\t\t\t\t\t\"VA\": -3.926879,\n", + "\t\t\t\t\t\t\t\"VM\": 1.086823,\n", + "\t\t\t\t\t\t\t\"BUS_NAME\": \" 1\",\n", + "\t\t\t\t\t\t\t\"VMIN\": 0.900000,\n", + "\t\t\t\t\t\t\t\"VMAX\": 1.100000,\n", + "\t\t\t\t\t\t\t\"BASE_KV\": 345.000000,\n", + "\t\t\t\t\t\t\t\"PD\": 90.000000,\n", + "\t\t\t\t\t\t\t\"QD\": 30.000000,\n", + "\t\t\t\t\t\t\t\"PDloss\": 0.000000,\n", + "\t\t\t\t\t\t\t\"QDloss\": 0.000000,\n", + "\t\t\t\t\t\t\t\"LAM_P\": 2129.849392,\n", + "\t\t\t\t\t\t\t\"LAM_Q\": 1.619742,\n", + "\t\t\t\t\t\t\t\"ngen\": 0,\n", + "\t\t\t\t\t\t\t\"gen\": [\n", + "\t\t\t\t\t\t\t]\n", + "\t\t\t\t\t\t}\n", + "\t\t\t\t\t],\n", + "\t\t\t\t\t\"Vm\": 1.086823\n", + "\t\t\t\t}\n", + "\t\t\t},\n", + "\t\t\t{\n", + "\t\t\t\t\"type\": \"Feature\",\n", + "\t\t\t\t\"geometry\": {\n", + "\t\t\t\t\t\"type\": \"Point\",\n", + "\t\t\t\t\t\"coordinates\": [\n", + "\t\t\t\t\t\t-97.941482,\n", + "\t\t\t\t\t\t35.231918\n", + "\t\t\t\t\t]\n", + "\t\t\t\t},\n", + "\t\t\t\t\"properties\": {\n", + "\t\t\t\t\t\"elementtype\": \"SUBSTATION\",\n", + "\t\t\t\t\t\"NAME\": \"7\",\n", + "\t\t\t\t\t\"nbus\": 1,\n", + "\t\t\t\t\t\"KVlevels\": [\n", + "\t\t\t\t\t\t345.000000\n", + "\t\t\t\t\t],\n", + "\t\t\t\t\t\"bus\": [\n", + "\t\t\t\t\t\t{\n", + "\t\t\t\t\t\t\t\"elementtype\": \"bus\",\n", + "\t\t\t\t\t\t\t\"BUS_I\": 7,\n", + "\t\t\t\t\t\t\t\"VA\": 0.534813,\n", + "\t\t\t\t\t\t\t\"VM\": 1.100000,\n", + "\t\t\t\t\t\t\t\"BUS_NAME\": \" 1\",\n", + "\t\t\t\t\t\t\t\"VMIN\": 0.900000,\n", + "\t\t\t\t\t\t\t\"VMAX\": 1.100000,\n", + "\t\t\t\t\t\t\t\"BASE_KV\": 345.000000,\n", + "\t\t\t\t\t\t\t\"PD\": 0.000000,\n", + "\t\t\t\t\t\t\t\"QD\": 0.000000,\n", + "\t\t\t\t\t\t\t\"PDloss\": 0.000000,\n", + "\t\t\t\t\t\t\t\"QDloss\": 0.000000,\n", + "\t\t\t\t\t\t\t\"LAM_P\": 2059.568013,\n", + "\t\t\t\t\t\t\t\"LAM_Q\": -0.040507,\n", + "\t\t\t\t\t\t\t\"ngen\": 0,\n", + "\t\t\t\t\t\t\t\"gen\": [\n", + "\t\t\t\t\t\t\t]\n", + "\t\t\t\t\t\t}\n", + "\t\t\t\t\t],\n", + "\t\t\t\t\t\"Vm\": 1.100000\n", + "\t\t\t\t}\n", + "\t\t\t},\n", + "\t\t\t{\n", + "\t\t\t\t\"type\": \"Feature\",\n", + "\t\t\t\t\"geometry\": {\n", + "\t\t\t\t\t\"type\": \"Point\",\n", + "\t\t\t\t\t\"coordinates\": [\n", + "\t\t\t\t\t\t-98.000873,\n", + "\t\t\t\t\t\t35.568742\n", + "\t\t\t\t\t]\n", + "\t\t\t\t},\n", + "\t\t\t\t\"properties\": {\n", + "\t\t\t\t\t\"elementtype\": \"SUBSTATION\",\n", + "\t\t\t\t\t\"NAME\": \"8\",\n", + "\t\t\t\t\t\"nbus\": 1,\n", + "\t\t\t\t\t\"KVlevels\": [\n", + "\t\t\t\t\t\t345.000000\n", + "\t\t\t\t\t],\n", + "\t\t\t\t\t\"bus\": [\n", + "\t\t\t\t\t\t{\n", + "\t\t\t\t\t\t\t\"elementtype\": \"bus\",\n", + "\t\t\t\t\t\t\t\"BUS_I\": 8,\n", + "\t\t\t\t\t\t\t\"VA\": -1.720022,\n", + "\t\t\t\t\t\t\t\"VM\": 1.089476,\n", + "\t\t\t\t\t\t\t\"BUS_NAME\": \" 1\",\n", + "\t\t\t\t\t\t\t\"VMIN\": 0.900000,\n", + "\t\t\t\t\t\t\t\"VMAX\": 1.100000,\n", + "\t\t\t\t\t\t\t\"BASE_KV\": 345.000000,\n", + "\t\t\t\t\t\t\t\"PD\": 100.000000,\n", + "\t\t\t\t\t\t\t\"QD\": 35.000000,\n", + "\t\t\t\t\t\t\t\"PDloss\": 0.000000,\n", + "\t\t\t\t\t\t\t\"QDloss\": 0.000000,\n", + "\t\t\t\t\t\t\t\"LAM_P\": 2079.336928,\n", + "\t\t\t\t\t\t\t\"LAM_Q\": 2.993805,\n", + "\t\t\t\t\t\t\t\"ngen\": 0,\n", + "\t\t\t\t\t\t\t\"gen\": [\n", + "\t\t\t\t\t\t\t]\n", + "\t\t\t\t\t\t}\n", + "\t\t\t\t\t],\n", + "\t\t\t\t\t\"Vm\": 1.089476\n", + "\t\t\t\t}\n", + "\t\t\t},\n", + "\t\t\t{\n", + "\t\t\t\t\"type\": \"Feature\",\n", + "\t\t\t\t\"geometry\": {\n", + "\t\t\t\t\t\"type\": \"Point\",\n", + "\t\t\t\t\t\"coordinates\": [\n", + "\t\t\t\t\t\t-97.829863,\n", + "\t\t\t\t\t\t35.864940\n", + "\t\t\t\t\t]\n", + "\t\t\t\t},\n", + "\t\t\t\t\"properties\": {\n", + "\t\t\t\t\t\"elementtype\": \"SUBSTATION\",\n", + "\t\t\t\t\t\"NAME\": \"9\",\n", + "\t\t\t\t\t\"nbus\": 1,\n", + "\t\t\t\t\t\"KVlevels\": [\n", + "\t\t\t\t\t\t345.000000\n", + "\t\t\t\t\t],\n", + "\t\t\t\t\t\"bus\": [\n", + "\t\t\t\t\t\t{\n", + "\t\t\t\t\t\t\t\"elementtype\": \"bus\",\n", + "\t\t\t\t\t\t\t\"BUS_I\": 9,\n", + "\t\t\t\t\t\t\t\"VA\": -0.134848,\n", + "\t\t\t\t\t\t\t\"VM\": 1.100000,\n", + "\t\t\t\t\t\t\t\"BUS_NAME\": \" 1\",\n", + "\t\t\t\t\t\t\t\"VMIN\": 0.900000,\n", + "\t\t\t\t\t\t\t\"VMAX\": 1.100000,\n", + "\t\t\t\t\t\t\t\"BASE_KV\": 345.000000,\n", + "\t\t\t\t\t\t\t\"PD\": 0.000000,\n", + "\t\t\t\t\t\t\t\"QD\": 0.000000,\n", + "\t\t\t\t\t\t\t\"PDloss\": 0.000000,\n", + "\t\t\t\t\t\t\t\"QDloss\": 0.000000,\n", + "\t\t\t\t\t\t\t\"LAM_P\": 2065.428566,\n", + "\t\t\t\t\t\t\t\"LAM_Q\": -0.091922,\n", + "\t\t\t\t\t\t\t\"ngen\": 0,\n", + "\t\t\t\t\t\t\t\"gen\": [\n", + "\t\t\t\t\t\t\t]\n", + "\t\t\t\t\t\t}\n", + "\t\t\t\t\t],\n", + "\t\t\t\t\t\"Vm\": 1.100000\n", + "\t\t\t\t}\n", + "\t\t\t},\n", + "\t\t\t{\n", + "\t\t\t\t\"type\": \"Feature\",\n", + "\t\t\t\t\"geometry\": {\n", + "\t\t\t\t\t\"type\": \"LineString\",\n", + "\t\t\t\t\t\"coordinates\": [\n", + "\t\t\t\t\t\t[\n", + "\t\t\t\t\t\t\t-97.508469,\n", + "\t\t\t\t\t\t\t35.981918\n", + "\t\t\t\t\t\t],\n", + "\t\t\t\t\t\t[\n", + "\t\t\t\t\t\t\t-97.075456,\n", + "\t\t\t\t\t\t\t35.231918\n", + "\t\t\t\t\t\t]\n", + "\t\t\t\t\t]\n", + "\t\t\t\t},\n", + "\t\t\t\t\"properties\": {\n", + "\t\t\t\t\t\"elementtype\": \"Branch\",\n", + "\t\t\t\t\t\"NAME\": \"1 -- 4\",\n", + "\t\t\t\t\t\"F_BUS\": 1,\n", + "\t\t\t\t\t\"T_BUS\": 4,\n", + "\t\t\t\t\t\"BR_STATUS\": 1,\n", + "\t\t\t\t\t\"KV\": 345.000000,\n", + "\t\t\t\t\t\"RATE_A\": 380.000000,\n", + "\t\t\t\t\t\"PF\": 72.859445,\n", + "\t\t\t\t\t\"QF\": 6.790095,\n", + "\t\t\t\t\t\"PT\": -72.855020,\n", + "\t\t\t\t\t\"QT\": -4.253076\n", + "\t\t\t\t}\n", + "\t\t\t},\n", + "\t\t\t{\n", + "\t\t\t\t\"type\": \"Feature\",\n", + "\t\t\t\t\"geometry\": {\n", + "\t\t\t\t\t\"type\": \"LineString\",\n", + "\t\t\t\t\t\"coordinates\": [\n", + "\t\t\t\t\t\t[\n", + "\t\t\t\t\t\t\t-97.187075,\n", + "\t\t\t\t\t\t\t35.864940\n", + "\t\t\t\t\t\t],\n", + "\t\t\t\t\t\t[\n", + "\t\t\t\t\t\t\t-97.941482,\n", + "\t\t\t\t\t\t\t35.231918\n", + "\t\t\t\t\t\t]\n", + "\t\t\t\t\t]\n", + "\t\t\t\t},\n", + "\t\t\t\t\"properties\": {\n", + "\t\t\t\t\t\"elementtype\": \"Branch\",\n", + "\t\t\t\t\t\"NAME\": \"2 -- 7\",\n", + "\t\t\t\t\t\"F_BUS\": 2,\n", + "\t\t\t\t\t\"T_BUS\": 7,\n", + "\t\t\t\t\t\"BR_STATUS\": 1,\n", + "\t\t\t\t\t\"KV\": 345.000000,\n", + "\t\t\t\t\t\"RATE_A\": 250.000000,\n", + "\t\t\t\t\t\"PF\": 114.069299,\n", + "\t\t\t\t\t\"QF\": -5.126619,\n", + "\t\t\t\t\t\"PT\": -114.058431,\n", + "\t\t\t\t\t\"QT\": 11.907578\n", + "\t\t\t\t}\n", + "\t\t\t},\n", + "\t\t\t{\n", + "\t\t\t\t\"type\": \"Feature\",\n", + "\t\t\t\t\"geometry\": {\n", + "\t\t\t\t\t\"type\": \"LineString\",\n", + "\t\t\t\t\t\"coordinates\": [\n", + "\t\t\t\t\t\t[\n", + "\t\t\t\t\t\t\t-97.016065,\n", + "\t\t\t\t\t\t\t35.568742\n", + "\t\t\t\t\t\t],\n", + "\t\t\t\t\t\t[\n", + "\t\t\t\t\t\t\t-97.829863,\n", + "\t\t\t\t\t\t\t35.864940\n", + "\t\t\t\t\t\t]\n", + "\t\t\t\t\t]\n", + "\t\t\t\t},\n", + "\t\t\t\t\"properties\": {\n", + "\t\t\t\t\t\"elementtype\": \"Branch\",\n", + "\t\t\t\t\t\"NAME\": \"3 -- 9\",\n", + "\t\t\t\t\t\"F_BUS\": 3,\n", + "\t\t\t\t\t\"T_BUS\": 9,\n", + "\t\t\t\t\t\"BR_STATUS\": 1,\n", + "\t\t\t\t\t\"KV\": 345.000000,\n", + "\t\t\t\t\t\"RATE_A\": 300.000000,\n", + "\t\t\t\t\t\"PF\": 80.210330,\n", + "\t\t\t\t\t\"QF\": -23.472244,\n", + "\t\t\t\t\t\"PT\": -80.204414,\n", + "\t\t\t\t\t\"QT\": 26.926958\n", + "\t\t\t\t}\n", + "\t\t\t},\n", + "\t\t\t{\n", + "\t\t\t\t\"type\": \"Feature\",\n", + "\t\t\t\t\"geometry\": {\n", + "\t\t\t\t\t\"type\": \"LineString\",\n", + "\t\t\t\t\t\"coordinates\": [\n", + "\t\t\t\t\t\t[\n", + "\t\t\t\t\t\t\t-97.075456,\n", + "\t\t\t\t\t\t\t35.231918\n", + "\t\t\t\t\t\t],\n", + "\t\t\t\t\t\t[\n", + "\t\t\t\t\t\t\t-97.337459,\n", + "\t\t\t\t\t\t\t35.012072\n", + "\t\t\t\t\t\t]\n", + "\t\t\t\t\t]\n", + "\t\t\t\t},\n", + "\t\t\t\t\"properties\": {\n", + "\t\t\t\t\t\"elementtype\": \"Branch\",\n", + "\t\t\t\t\t\"NAME\": \"4 -- 5\",\n", + "\t\t\t\t\t\"F_BUS\": 4,\n", + "\t\t\t\t\t\"T_BUS\": 5,\n", + "\t\t\t\t\t\"BR_STATUS\": 1,\n", + "\t\t\t\t\t\"KV\": 345.000000,\n", + "\t\t\t\t\t\"RATE_A\": 250.000000,\n", + "\t\t\t\t\t\"PF\": 28.254972,\n", + "\t\t\t\t\t\"QF\": 9.102475,\n", + "\t\t\t\t\t\"PT\": -28.156409,\n", + "\t\t\t\t\t\"QT\": -29.107542\n", + "\t\t\t\t}\n", + "\t\t\t},\n", + "\t\t\t{\n", + "\t\t\t\t\"type\": \"Feature\",\n", + "\t\t\t\t\"geometry\": {\n", + "\t\t\t\t\t\"type\": \"LineString\",\n", + "\t\t\t\t\t\"coordinates\": [\n", + "\t\t\t\t\t\t[\n", + "\t\t\t\t\t\t\t-97.075456,\n", + "\t\t\t\t\t\t\t35.231918\n", + "\t\t\t\t\t\t],\n", + "\t\t\t\t\t\t[\n", + "\t\t\t\t\t\t\t-97.679479,\n", + "\t\t\t\t\t\t\t35.012072\n", + "\t\t\t\t\t\t]\n", + "\t\t\t\t\t]\n", + "\t\t\t\t},\n", + "\t\t\t\t\"properties\": {\n", + "\t\t\t\t\t\"elementtype\": \"Branch\",\n", + "\t\t\t\t\t\"NAME\": \"4 -- 6\",\n", + "\t\t\t\t\t\"F_BUS\": 4,\n", + "\t\t\t\t\t\"T_BUS\": 6,\n", + "\t\t\t\t\t\"BR_STATUS\": 1,\n", + "\t\t\t\t\t\"KV\": 345.000000,\n", + "\t\t\t\t\t\"RATE_A\": 250.000000,\n", + "\t\t\t\t\t\"PF\": 44.600049,\n", + "\t\t\t\t\t\"QF\": -4.849399,\n", + "\t\t\t\t\t\"PT\": -44.315995,\n", + "\t\t\t\t\t\"QT\": -12.452026\n", + "\t\t\t\t}\n", + "\t\t\t},\n", + "\t\t\t{\n", + "\t\t\t\t\"type\": \"Feature\",\n", + "\t\t\t\t\"geometry\": {\n", + "\t\t\t\t\t\"type\": \"LineString\",\n", + "\t\t\t\t\t\"coordinates\": [\n", + "\t\t\t\t\t\t[\n", + "\t\t\t\t\t\t\t-97.337459,\n", + "\t\t\t\t\t\t\t35.012072\n", + "\t\t\t\t\t\t],\n", + "\t\t\t\t\t\t[\n", + "\t\t\t\t\t\t\t-97.941482,\n", + "\t\t\t\t\t\t\t35.231918\n", + "\t\t\t\t\t\t]\n", + "\t\t\t\t\t]\n", + "\t\t\t\t},\n", + "\t\t\t\t\"properties\": {\n", + "\t\t\t\t\t\"elementtype\": \"Branch\",\n", + "\t\t\t\t\t\"NAME\": \"5 -- 7\",\n", + "\t\t\t\t\t\"F_BUS\": 5,\n", + "\t\t\t\t\t\"T_BUS\": 7,\n", + "\t\t\t\t\t\"BR_STATUS\": 1,\n", + "\t\t\t\t\t\"KV\": 345.000000,\n", + "\t\t\t\t\t\"RATE_A\": 250.000000,\n", + "\t\t\t\t\t\"PF\": -46.843421,\n", + "\t\t\t\t\t\"QF\": -20.891819,\n", + "\t\t\t\t\t\"PT\": 47.448707,\n", + "\t\t\t\t\t\"QT\": -12.401091\n", + "\t\t\t\t}\n", + "\t\t\t},\n", + "\t\t\t{\n", + "\t\t\t\t\"type\": \"Feature\",\n", + "\t\t\t\t\"geometry\": {\n", + "\t\t\t\t\t\"type\": \"LineString\",\n", + "\t\t\t\t\t\"coordinates\": [\n", + "\t\t\t\t\t\t[\n", + "\t\t\t\t\t\t\t-97.679479,\n", + "\t\t\t\t\t\t\t35.012072\n", + "\t\t\t\t\t\t],\n", + "\t\t\t\t\t\t[\n", + "\t\t\t\t\t\t\t-97.829863,\n", + "\t\t\t\t\t\t\t35.864940\n", + "\t\t\t\t\t\t]\n", + "\t\t\t\t\t]\n", + "\t\t\t\t},\n", + "\t\t\t\t\"properties\": {\n", + "\t\t\t\t\t\"elementtype\": \"Branch\",\n", + "\t\t\t\t\t\"NAME\": \"6 -- 9\",\n", + "\t\t\t\t\t\"F_BUS\": 6,\n", + "\t\t\t\t\t\"T_BUS\": 9,\n", + "\t\t\t\t\t\"BR_STATUS\": 1,\n", + "\t\t\t\t\t\"KV\": 345.000000,\n", + "\t\t\t\t\t\"RATE_A\": 150.000000,\n", + "\t\t\t\t\t\"PF\": -45.683824,\n", + "\t\t\t\t\t\"QF\": -17.547371,\n", + "\t\t\t\t\t\"PT\": 46.377176,\n", + "\t\t\t\t\t\"QT\": -22.232518\n", + "\t\t\t\t}\n", + "\t\t\t},\n", + "\t\t\t{\n", + "\t\t\t\t\"type\": \"Feature\",\n", + "\t\t\t\t\"geometry\": {\n", + "\t\t\t\t\t\"type\": \"LineString\",\n", + "\t\t\t\t\t\"coordinates\": [\n", + "\t\t\t\t\t\t[\n", + "\t\t\t\t\t\t\t-97.941482,\n", + "\t\t\t\t\t\t\t35.231918\n", + "\t\t\t\t\t\t],\n", + "\t\t\t\t\t\t[\n", + "\t\t\t\t\t\t\t-98.000873,\n", + "\t\t\t\t\t\t\t35.568742\n", + "\t\t\t\t\t\t]\n", + "\t\t\t\t\t]\n", + "\t\t\t\t},\n", + "\t\t\t\t\"properties\": {\n", + "\t\t\t\t\t\"elementtype\": \"Branch\",\n", + "\t\t\t\t\t\"NAME\": \"7 -- 8\",\n", + "\t\t\t\t\t\"F_BUS\": 7,\n", + "\t\t\t\t\t\"T_BUS\": 8,\n", + "\t\t\t\t\t\"BR_STATUS\": 1,\n", + "\t\t\t\t\t\"KV\": 345.000000,\n", + "\t\t\t\t\t\"RATE_A\": 250.000000,\n", + "\t\t\t\t\t\"PF\": 66.609412,\n", + "\t\t\t\t\t\"QF\": 0.489599,\n", + "\t\t\t\t\t\"PT\": -66.291389,\n", + "\t\t\t\t\t\"QT\": -15.653093\n", + "\t\t\t\t}\n", + "\t\t\t},\n", + "\t\t\t{\n", + "\t\t\t\t\"type\": \"Feature\",\n", + "\t\t\t\t\"geometry\": {\n", + "\t\t\t\t\t\"type\": \"LineString\",\n", + "\t\t\t\t\t\"coordinates\": [\n", + "\t\t\t\t\t\t[\n", + "\t\t\t\t\t\t\t-98.000873,\n", + "\t\t\t\t\t\t\t35.568742\n", + "\t\t\t\t\t\t],\n", + "\t\t\t\t\t\t[\n", + "\t\t\t\t\t\t\t-97.829863,\n", + "\t\t\t\t\t\t\t35.864940\n", + "\t\t\t\t\t\t]\n", + "\t\t\t\t\t]\n", + "\t\t\t\t},\n", + "\t\t\t\t\"properties\": {\n", + "\t\t\t\t\t\"elementtype\": \"Branch\",\n", + "\t\t\t\t\t\"NAME\": \"8 -- 9\",\n", + "\t\t\t\t\t\"F_BUS\": 8,\n", + "\t\t\t\t\t\"T_BUS\": 9,\n", + "\t\t\t\t\t\"BR_STATUS\": 1,\n", + "\t\t\t\t\t\"KV\": 345.000000,\n", + "\t\t\t\t\t\"RATE_A\": 150.000000,\n", + "\t\t\t\t\t\"PF\": -33.708218,\n", + "\t\t\t\t\t\"QF\": -19.344343,\n", + "\t\t\t\t\t\"PT\": 33.826963,\n", + "\t\t\t\t\t\"QT\": -4.698016\n", + "\t\t\t\t}\n", + "\t\t\t}\n", + "\t\t]\n", + "\t},\n", + "\t\"summary\": {\n", + "\t\t\"NBUS\": 9,\n", + "\t\t\"NGEN\": 3,\n", + "\t\t\"NGENON\": 3,\n", + "\t\t\"NLINE\": 9,\n", + "\t\t\"NLINEON\": 9,\n", + "\t\t\"NLOAD\": 3,\n", + "\t\t\"GENCAP\": 920.000000,\n", + "\t\t\"GENON\": [\n", + "\t\t\t267.139247,\n", + "\t\t\t-21.812401\n", + "\t\t],\n", + "\t\t\"GENCAPON\": 920.000000,\n", + "\t\t\"LOAD\": [\n", + "\t\t\t265.000000,\n", + "\t\t\t115.000000\n", + "\t\t],\n", + "\t\t\"LOADSHED\": [\n", + "\t\t\t0.000000,\n", + "\t\t\t0.000000\n", + "\t\t],\n", + "\t\t\"SolveRealTime\": 0.013155,\n", + "\t\t\"SolveCPUTime\": 0.000001,\n", + "\t}\n", + "}\n" + ] + } + ], + "source": [ + "!cat solution.json" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The output to stdout isn't quite right, and we noteably don't call `exago.finalize()` which is a little concerning, but this seems to work. Should be fine to run SCOPFLOW and more complex applications, and then you can loop over ExaGO runs like this all natively to Python!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## MPI Execution Options\n", + "\n", + "There are quite a few ways to run MPI backed code, and here are some notes on how I arrived at the above implementation." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{\n", + " \"argv\": [\n", + " \"mpiexec\", \"-n\", \"1\", \"/opt/views/view/bin/python3\",\n", + " \"-m\",\n", + " \"ipykernel_launcher\",\n", + " \"-f\",\n", + " \"{connection_file}\"\n", + " ],\n", + " \"display_name\": \"ExaGO w/ MPI\",\n", + " \"language\": \"python\",\n", + " \"metadata\": {\n", + " \"debugger\": true\n", + " }\n", + "}" + ] + } + ], + "source": [ + "!cat /usr/local/share/jupyter/kernels/py311-mpi4py-exago/kernel.json" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Firstly we execute the ipykernel backend using MPI. This means all kernels are launched within a single rank MPI context, and MPI basics work.\n", + "\n", + "To run with more processes, we can either:\n", + "1. Use `!` in a Python block and just run with `mpiexec -n N` for the number of ranks\n", + " - This works, but I/O is clunky\n", + " - It becomes cumbersome to code dynamic high-level applications that re-run different sims based on returned output\n", + "1. Spawn an ipyparallel cluster\n", + " - https://ipyparallel.readthedocs.io/en/latest/reference/mpi.html \n", + " - you can start the cluster and connect to it, but these docs are a little confusing, as you start many processes\n", + " - Would be better to have it all be jupyter native\n", + " - https://kb.oakland.edu/uts/HPCJupyterMPI\n", + " - Inlcudes a much better Jupyter focused bit of docs around this\n", + "1. Use a different workflow engine, and find a tool\n", + "\n", + "While a workflow tool is a strong consideration for most high level applications, we are going to stick with 2. 1 and 3 would likely be custom to your use-case" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Appendix\n", + "\n", + "From https://github.com/mpi4py/mpi4py/issues/15#issuecomment-765658147, had to modify mpi4py init routines by hand - this was all due to a red-herring, but is interesting discussion." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.00s - Debugger warning: It seems that frozen modules are being used, which may\n", + "0.00s - make the debugger miss breakpoints. Please pass -Xfrozen_modules=off\n", + "0.00s - to python to disable frozen modules.\n", + "0.00s - Note: Debugging will proceed. Set PYDEVD_DISABLE_FILE_VALIDATION=1 to disable this validation.\n", + "Available kernels:\n", + " python3 /opt/views/view/share/jupyter/kernels/python3\n", + " py311-exago /usr/local/share/jupyter/kernels/py311-exago\n", + " py311-mpi4py-exago /usr/local/share/jupyter/kernels/py311-mpi4py-exago\n" + ] + } + ], + "source": [ + "!jupyter kernelspec list" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{\n", + " \"argv\": [\n", + " \"/opt/views/view/bin/python3\",\n", + " \"-m\",\n", + " \"ipykernel_launcher\",\n", + " \"-f\",\n", + " \"{connection_file}\"\n", + " ],\n", + " \"display_name\": \"ExaGO\",\n", + " \"language\": \"python\",\n", + " \"metadata\": {\n", + " \"debugger\": true\n", + " }\n", + "}" + ] + } + ], + "source": [ + "!cat /usr/local/share/jupyter/kernels/py311-exago/kernel.json" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As you can see, we have some extra script in our dockerfile that slightly modifies the installed Jupyter kernel to use mpiexec when launching!" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Package Version\n", + "----------------------- ---------\n", + "aiohttp 3.8.4\n", + "aiosignal 1.3.1\n", + "anyio 3.6.2\n", + "argon2-cffi 21.3.0\n", + "argon2-cffi-bindings 21.2.0\n", + "asttokens 2.4.0\n", + "async-timeout 4.0.2\n", + "attrs 23.1.0\n", + "Babel 2.12.1\n", + "backcall 0.2.0\n", + "beautifulsoup4 4.12.2\n", + "bleach 6.0.0\n", + "blinker 1.6.2\n", + "certifi 2023.7.22\n", + "cffi 1.15.1\n", + "charset-normalizer 3.3.0\n", + "click 8.1.5\n", + "colorama 0.4.6\n", + "comm 0.1.4\n", + "config 0.5.1\n", + "dataclasses-json 0.5.9\n", + "debugpy 1.6.7\n", + "decorator 5.1.1\n", + "defusedxml 0.7.1\n", + "entrypoints 0.4\n", + "executing 1.2.0\n", + "fastjsonschema 2.16.3\n", + "Flask 2.3.2\n", + "Flask-Cors 4.0.0\n", + "frozenlist 1.4.0\n", + "gevent 23.7.0\n", + "greenlet 2.0.2\n", + "idna 3.4\n", + "iniconfig 2.0.0\n", + "ipykernel 6.23.1\n", + "ipyparallel 8.4.1\n", + "ipython 8.14.0\n", + "ipython-genutils 0.2.0\n", + "itsdangerous 2.1.2\n", + "jedi 0.18.2\n", + "jellyfish 0.11.2\n", + "Jinja2 3.1.2\n", + "json5 0.9.14\n", + "jsonschema 4.17.3\n", + "jupyter_client 8.2.0\n", + "jupyter_core 5.3.0\n", + "jupyter-server 1.21.0\n", + "jupyterlab 3.4.8\n", + "jupyterlab-pygments 0.2.2\n", + "jupyterlab_server 2.22.1\n", + "langchain 0.0.233\n", + "langsmith 0.0.5\n", + "MarkupSafe 2.1.3\n", + "marshmallow 3.19.0\n", + "marshmallow-enum 1.5.1\n", + "matplotlib-inline 0.1.6\n", + "mistune 2.0.5\n", + "mpi4py 3.1.4\n", + "multidict 6.0.4\n", + "mypy-extensions 1.0.0\n", + "nbclassic 1.0.0\n", + "nbclient 0.8.0\n", + "nbconvert 7.4.0\n", + "nbformat 5.8.0\n", + "nest-asyncio 1.5.6\n", + "notebook 6.5.4\n", + "notebook_shim 0.2.3\n", + "numexpr 2.8.4\n", + "numpy 1.25.0\n", + "openai 0.27.8\n", + "openapi-schema-pydantic 1.2.4\n", + "packaging 23.1\n", + "pandas 2.0.2\n", + "pandocfilters 1.5.0\n", + "parso 0.8.3\n", + "pexpect 4.8.0\n", + "pickleshare 0.7.5\n", + "pip 23.3.1\n", + "platformdirs 3.10.0\n", + "pluggy 1.0.0\n", + "prometheus-client 0.17.0\n", + "prompt-toolkit 3.0.38\n", + "psutil 5.9.5\n", + "psycopg2 2.9.6\n", + "ptyprocess 0.7.0\n", + "pure-eval 0.2.2\n", + "pycparser 2.21\n", + "pydantic 1.10.11\n", + "Pygments 2.16.1\n", + "pyrsistent 0.19.3\n", + "pytest 7.3.2\n", + "python-dateutil 2.8.2\n", + "pytz 2023.3\n", + "PyYAML 6.0\n", + "pyzmq 25.0.2\n", + "requests 2.31.0\n", + "Send2Trash 1.8.0\n", + "setuptools 68.0.0\n", + "shapely 2.0.1\n", + "six 1.16.0\n", + "sniffio 1.3.0\n", + "soupsieve 2.4.1\n", + "SQLAlchemy 2.0.18\n", + "stack-data 0.6.2\n", + "tenacity 8.2.2\n", + "terminado 0.17.1\n", + "tinycss2 1.2.1\n", + "tornado 6.3.3\n", + "tqdm 4.66.1\n", + "traitlets 5.9.0\n", + "typing_extensions 4.7.1\n", + "typing-inspect 0.9.0\n", + "tzdata 2023.3\n", + "urllib3 2.0.6\n", + "us 3.1.1\n", + "wcwidth 0.2.7\n", + "webencodings 0.5.1\n", + "websocket-client 1.6.3\n", + "Werkzeug 2.3.6\n", + "wheel 0.41.3\n", + "yarl 1.9.2\n", + "zope.event 4.6\n", + "zope.interface 5.4.0\n" + ] + } + ], + "source": [ + "!pip3 list" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "That's odd - ExaGO can import and run, but doesn't show up in pip. That's because we installed using Spack, and ExaGO is available directly through the `PYTHONPATH` environment variable.\n", + "\n", + "This is configured through `entrypoint.sh`, which is the last thing that happens in the configured `~/.bashrc`:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " fi; \\\n", + " fi`'\n", + " local lightblue='\\[\\033[1;34m\\]'\n", + " local removecolor='\\[\\033[0m\\]'\n", + " PS1=\"${userpart} ${lightblue}\\w ${gitbranch}${removecolor}\\$ \"\n", + " unset -f __bash_prompt\n", + "}\n", + "__bash_prompt\n", + "export PROMPT_DIRTRIM=4\n", + "source /entrypoint.sh\n" + ] + } + ], + "source": [ + "!cat ~/.bashrc | tail -n 10" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "#!/bin/sh\n", + ". /opt/spack-environment/activate.sh\n", + "exec \"$@\"\n" + ] + } + ], + "source": [ + "!cat /entrypoint.sh" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "export SPACK_ENV=/opt/spack-environment;\n", + "export SPACK_ENV_VIEW=default;\n", + "alias despacktivate='spack env deactivate';\n", + "export ACLOCAL_PATH=/opt/views/view/share/aclocal;\n", + "export CMAKE_PREFIX_PATH=/opt/views/view;\n", + "export C_INCLUDE_PATH=/opt/views/view/include;\n", + "export JUPYTERLAB_DIR=/opt/views/view/share/jupyter/lab;\n", + "export JUPYTER_PATH=/opt/views/view/share/jupyter;\n", + "export LD_LIBRARY_PATH=/opt/views/view/lib64:/opt/views/view/lib;\n", + "export LIBRARY_PATH=/opt/views/view/lib;\n", + "export MANPATH=/opt/views/view/share/man:/opt/views/view/man:;\n", + "export MPICC=/opt/views/view/bin/mpicc;\n", + "export MPICXX=/opt/views/view/bin/mpic++;\n", + "export MPIF77=/opt/views/view/bin/mpif77;\n", + "export MPIF90=/opt/views/view/bin/mpif90;\n", + "export PATH=/opt/views/view/bin:/opt/spack/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin;\n", + "export PETSC_ARCH=\"\";\n", + "export PETSC_DIR=/opt/views/view;\n", + "export PKG_CONFIG_PATH=/opt/views/view/lib64/pkgconfig:/opt/views/view/lib/pkgconfig:/opt/views/view/share/pkgconfig;\n", + "export PYTHONPATH=/opt/views/view/lib/python3.11/site-packages;\n" + ] + } + ], + "source": [ + "!cat /opt/spack-environment/activate.sh" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "/opt/views/view/lib/python3.11/site-packages\n" + ] + } + ], + "source": [ + "!echo $PYTHONPATH" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "total 748\n", + "drwxr-xr-x 168 root root 12288 Nov 9 01:24 .\n", + "drwxr-xr-x 39 root root 4096 Nov 9 01:24 ..\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 Babel-2.12.1.dist-info\n", + "drwxr-xr-x 11 root root 4096 Nov 9 01:24 IPython\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 Jinja2-3.1.2.dist-info\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 MarkupSafe-2.1.3.dist-info\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 Pygments-2.16.1.dist-info\n", + "lrwxrwxrwx 1 root root 139 Nov 9 01:24 README.txt -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/python-3.11.6-ybsi7tlnssr3m4h3eqrzq6tyxdcsr2n7/lib/python3.11/site-packages/README.txt\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 Send2Trash-1.8.0.dist-info\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 __pycache__\n", + "drwxr-xr-x 3 root root 4096 Nov 9 01:24 _argon2_cffi_bindings\n", + "lrwxrwxrwx 1 root root 175 Nov 9 01:24 _cffi_backend.cpython-311-x86_64-linux-gnu.so -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/py-cffi-1.15.1-ns7kiujztzymljhmkwceej66qntnjlcr/lib/python3.11/site-packages/_cffi_backend.cpython-311-x86_64-linux-gnu.so\n", + "drwxr-xr-x 3 root root 4096 Nov 9 01:24 _distutils_hack\n", + "lrwxrwxrwx 1 root root 158 Nov 9 01:24 _pyrsistent_version.py -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/py-pyrsistent-0.19.3-ptruwnt5v52i3udbb6cbvhq5oeqn7dox/lib/python3.11/site-packages/_pyrsistent_version.py\n", + "drwxr-xr-x 9 root root 4096 Nov 9 01:24 _pytest\n", + "drwxr-xr-x 7 root root 4096 Nov 9 01:24 anyio\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 anyio-3.6.2.dist-info\n", + "drwxr-xr-x 3 root root 4096 Nov 9 01:24 argon2\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 argon2_cffi-21.3.0.dist-info\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 argon2_cffi_bindings-21.2.0.dist-info\n", + "drwxr-xr-x 3 root root 4096 Nov 9 01:24 asttokens\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 asttokens-2.4.0.dist-info\n", + "drwxr-xr-x 3 root root 4096 Nov 9 01:24 attr\n", + "drwxr-xr-x 3 root root 4096 Nov 9 01:24 attrs\n", + "drwxr-xr-x 3 root root 4096 Nov 9 01:24 attrs-23.1.0.dist-info\n", + "drwxr-xr-x 6 root root 4096 Nov 9 01:24 babel\n", + "drwxr-xr-x 3 root root 4096 Nov 9 01:24 backcall\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 backcall-0.2.0.dist-info\n", + "drwxr-xr-x 3 root root 4096 Nov 9 01:24 beautifulsoup4-4.12.2.dist-info\n", + "drwxr-xr-x 4 root root 4096 Nov 9 01:24 bleach\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 bleach-6.0.0.dist-info\n", + "drwxr-xr-x 5 root root 4096 Nov 9 01:24 bs4\n", + "drwxr-xr-x 3 root root 4096 Nov 9 01:24 certifi\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 certifi-2023.7.22.dist-info\n", + "drwxr-xr-x 3 root root 4096 Nov 9 01:24 cffi\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 cffi-1.15.1.dist-info\n", + "drwxr-xr-x 4 root root 4096 Nov 9 01:24 charset_normalizer\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 charset_normalizer-3.3.0.dist-info\n", + "drwxr-xr-x 3 root root 4096 Nov 9 01:24 comm\n", + "drwxr-xr-x 3 root root 4096 Nov 9 01:24 comm-0.1.4.dist-info\n", + "drwxr-xr-x 6 root root 4096 Nov 9 01:24 dateutil\n", + "drwxr-xr-x 8 root root 4096 Nov 9 01:24 debugpy\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 debugpy-1.6.7.dist-info\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 decorator-5.1.1.dist-info\n", + "lrwxrwxrwx 1 root root 146 Nov 9 01:24 decorator.py -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/py-decorator-5.1.1-y6omagu7er3rjtyisfdajw5upayicgxe/lib/python3.11/site-packages/decorator.py\n", + "drwxr-xr-x 3 root root 4096 Nov 9 01:24 defusedxml\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 defusedxml-0.7.1.dist-info\n", + "lrwxrwxrwx 1 root root 160 Nov 9 01:24 distutils-precedence.pth -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/py-setuptools-68.0.0-ceuwjz4g6i5jxk4babjsbh6oxmqggbba/lib/python3.11/site-packages/distutils-precedence.pth\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 entrypoints-0.4.dist-info\n", + "lrwxrwxrwx 1 root root 148 Nov 9 01:24 entrypoints.py -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/py-entrypoints-0.4-d7yae57isrvmfonytpxzfwt2zqj3dz3r/lib/python3.11/site-packages/entrypoints.py\n", + "lrwxrwxrwx 1 root root 164 Nov 9 01:24 exago.cpython-311-x86_64-linux-gnu.so -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/exago-1.6.0-odeio72qx5b7od5yh44oxq52q4otbuz7/lib/python3.11/site-packages/exago.cpython-311-x86_64-linux-gnu.so\n", + "drwxr-xr-x 3 root root 4096 Nov 9 01:24 executing\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 executing-1.2.0.dist-info\n", + "drwxr-xr-x 3 root root 4096 Nov 9 01:24 fastjsonschema\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 fastjsonschema-2.16.3.dist-info\n", + "drwxr-xr-x 9 root root 4096 Nov 9 01:24 gevent\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 gevent-23.7.0.dist-info\n", + "drwxr-xr-x 5 root root 4096 Nov 9 01:24 greenlet\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 greenlet-2.0.2.dist-info\n", + "drwxr-xr-x 3 root root 4096 Nov 9 01:24 idna\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 idna-3.4.dist-info\n", + "drwxr-xr-x 3 root root 4096 Nov 9 01:24 iniconfig\n", + "drwxr-xr-x 3 root root 4096 Nov 9 01:24 iniconfig-2.0.0.dist-info\n", + "drwxr-xr-x 9 root root 4096 Nov 9 01:24 ipykernel\n", + "drwxr-xr-x 3 root root 4096 Nov 9 01:24 ipykernel-6.23.1.dist-info\n", + "lrwxrwxrwx 1 root root 156 Nov 9 01:24 ipykernel_launcher.py -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/py-ipykernel-6.23.1-lkt3rawpdvlxrgc6gzcb7ikhvnfe6mq2/lib/python3.11/site-packages/ipykernel_launcher.py\n", + "drwxr-xr-x 12 root root 4096 Nov 9 01:24 ipyparallel\n", + "drwxr-xr-x 3 root root 4096 Nov 9 01:24 ipyparallel-8.4.1.dist-info\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 ipython-8.14.0.dist-info\n", + "drwxr-xr-x 5 root root 4096 Nov 9 01:24 ipython_genutils\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 ipython_genutils-0.2.0.dist-info\n", + "drwxr-xr-x 7 root root 4096 Nov 9 01:24 jedi\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 jedi-0.18.2.dist-info\n", + "drwxr-xr-x 3 root root 4096 Nov 9 01:24 jinja2\n", + "drwxr-xr-x 3 root root 4096 Nov 9 01:24 json5\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 json5-0.9.14.dist-info\n", + "drwxr-xr-x 6 root root 4096 Nov 9 01:24 jsonschema\n", + "drwxr-xr-x 3 root root 4096 Nov 9 01:24 jsonschema-4.17.3.dist-info\n", + "lrwxrwxrwx 1 root root 147 Nov 9 01:24 jupyter.py -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/py-jupyter-core-5.3.0-if7k3k3yqs5n2xy3ojop3fpnefqktfwy/lib/python3.11/site-packages/jupyter.py\n", + "drwxr-xr-x 8 root root 4096 Nov 9 01:24 jupyter_client\n", + "drwxr-xr-x 3 root root 4096 Nov 9 01:24 jupyter_client-8.2.0.dist-info\n", + "drwxr-xr-x 5 root root 4096 Nov 9 01:24 jupyter_core\n", + "drwxr-xr-x 3 root root 4096 Nov 9 01:24 jupyter_core-5.3.0.dist-info\n", + "drwxr-xr-x 17 root root 4096 Nov 9 01:24 jupyter_server\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 jupyter_server-1.21.0.dist-info\n", + "drwxr-xr-x 9 root root 4096 Nov 9 01:24 jupyterlab\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 jupyterlab-3.4.8.dist-info\n", + "drwxr-xr-x 4 root root 4096 Nov 9 01:24 jupyterlab_pygments\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 jupyterlab_pygments-0.2.2.dist-info\n", + "drwxr-xr-x 5 root root 4096 Nov 9 01:24 jupyterlab_server\n", + "drwxr-xr-x 3 root root 4096 Nov 9 01:24 jupyterlab_server-2.22.1.dist-info\n", + "drwxr-xr-x 3 root root 4096 Nov 9 01:24 markupsafe\n", + "drwxr-xr-x 3 root root 4096 Nov 9 01:24 matplotlib_inline\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 matplotlib_inline-0.1.6.dist-info\n", + "drwxr-xr-x 5 root root 4096 Nov 9 01:24 mistune\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 mistune-2.0.5.dist-info\n", + "drwxr-xr-x 7 root root 4096 Nov 9 01:24 mpi4py\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 mpi4py-3.1.4.dist-info\n", + "drwxr-xr-x 12 root root 4096 Nov 9 01:24 nbclassic\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 nbclassic-1.0.0.dist-info\n", + "drwxr-xr-x 4 root root 4096 Nov 9 01:24 nbclient\n", + "drwxr-xr-x 3 root root 4096 Nov 9 01:24 nbclient-0.8.0.dist-info\n", + "drwxr-xr-x 11 root root 4096 Nov 9 01:24 nbconvert\n", + "drwxr-xr-x 3 root root 4096 Nov 9 01:24 nbconvert-7.4.0.dist-info\n", + "drwxr-xr-x 8 root root 4096 Nov 9 01:24 nbformat\n", + "drwxr-xr-x 3 root root 4096 Nov 9 01:24 nbformat-5.8.0.dist-info\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 nest_asyncio-1.5.6.dist-info\n", + "lrwxrwxrwx 1 root root 152 Nov 9 01:24 nest_asyncio.py -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/py-nest-asyncio-1.5.6-uphpwzfjvy2o4gjf7zyscvvb3sjujtuh/lib/python3.11/site-packages/nest_asyncio.py\n", + "drwxr-xr-x 20 root root 4096 Nov 9 01:24 notebook\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 notebook-6.5.4.dist-info\n", + "drwxr-xr-x 4 root root 4096 Nov 9 01:24 notebook_shim\n", + "drwxr-xr-x 3 root root 4096 Nov 9 01:24 notebook_shim-0.2.3.dist-info\n", + "drwxr-xr-x 3 root root 4096 Nov 9 01:24 packaging\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 packaging-23.1.dist-info\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 pandocfilters-1.5.0.dist-info\n", + "lrwxrwxrwx 1 root root 154 Nov 9 01:24 pandocfilters.py -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/py-pandocfilters-1.5.0-wseldytxe3leiottrhb5ogloooxslfd5/lib/python3.11/site-packages/pandocfilters.py\n", + "drwxr-xr-x 5 root root 4096 Nov 9 01:24 parso\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 parso-0.8.3.dist-info\n", + "drwxr-xr-x 3 root root 4096 Nov 9 01:24 pexpect\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 pexpect-4.8.0.dist-info\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 pickleshare-0.7.5.dist-info\n", + "lrwxrwxrwx 1 root root 150 Nov 9 01:24 pickleshare.py -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/py-pickleshare-0.7.5-wty2ecbqmknacpwe6nwpiyxbq5oqhcza/lib/python3.11/site-packages/pickleshare.py\n", + "drwxr-xr-x 5 root root 4096 Nov 9 01:24 pkg_resources\n", + "drwxr-xr-x 3 root root 4096 Nov 9 01:24 platformdirs\n", + "drwxr-xr-x 3 root root 4096 Nov 9 01:24 platformdirs-3.10.0.dist-info\n", + "drwxr-xr-x 3 root root 4096 Nov 9 01:24 pluggy\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 pluggy-1.0.0.dist-info\n", + "drwxr-xr-x 6 root root 4096 Nov 9 01:24 prometheus_client\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 prometheus_client-0.17.0.dist-info\n", + "drwxr-xr-x 18 root root 4096 Nov 9 01:24 prompt_toolkit\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 prompt_toolkit-3.0.38.dist-info\n", + "drwxr-xr-x 4 root root 4096 Nov 9 01:24 psutil\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 psutil-5.9.5.dist-info\n", + "drwxr-xr-x 3 root root 4096 Nov 9 01:24 ptyprocess\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 ptyprocess-0.7.0.dist-info\n", + "drwxr-xr-x 3 root root 4096 Nov 9 01:24 pure_eval\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 pure_eval-0.2.2.dist-info\n", + "lrwxrwxrwx 1 root root 176 Nov 9 01:24 pvectorc.cpython-311-x86_64-linux-gnu.so -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/py-pyrsistent-0.19.3-ptruwnt5v52i3udbb6cbvhq5oeqn7dox/lib/python3.11/site-packages/pvectorc.cpython-311-x86_64-linux-gnu.so\n", + "lrwxrwxrwx 1 root root 136 Nov 9 01:24 py.py -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/py-pytest-7.3.2-arsygg5grgdxn2ydomwdcv6qg66wbgff/lib/python3.11/site-packages/py.py\n", + "drwxr-xr-x 4 root root 4096 Nov 9 01:24 pycparser\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 pycparser-2.21.dist-info\n", + "drwxr-xr-x 7 root root 4096 Nov 9 01:24 pygments\n", + "drwxr-xr-x 3 root root 4096 Nov 9 01:24 pyrsistent\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 pyrsistent-0.19.3.dist-info\n", + "drwxr-xr-x 3 root root 4096 Nov 9 01:24 pytest\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 pytest-7.3.2.dist-info\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 python_dateutil-2.8.2.dist-info\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 pyzmq-25.0.2.dist-info\n", + "drwxr-xr-x 3 root root 4096 Nov 9 01:24 requests\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 requests-2.31.0.dist-info\n", + "drwxr-xr-x 3 root root 4096 Nov 9 01:24 send2trash\n", + "drwxr-xr-x 8 root root 4096 Nov 9 01:24 setuptools\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 setuptools-68.0.0.dist-info\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 six-1.16.0.dist-info\n", + "lrwxrwxrwx 1 root root 135 Nov 9 01:24 six.py -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/py-six-1.16.0-nbnfdrflk6rrh3fu3pengfnlmslekoqs/lib/python3.11/site-packages/six.py\n", + "drwxr-xr-x 4 root root 4096 Nov 9 01:24 sniffio\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 sniffio-1.3.0.dist-info\n", + "drwxr-xr-x 3 root root 4096 Nov 9 01:24 soupsieve\n", + "drwxr-xr-x 3 root root 4096 Nov 9 01:24 soupsieve-2.4.1.dist-info\n", + "drwxr-xr-x 3 root root 4096 Nov 9 01:24 stack_data\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 stack_data-0.6.2.dist-info\n", + "drwxr-xr-x 5 root root 4096 Nov 9 01:24 terminado\n", + "drwxr-xr-x 3 root root 4096 Nov 9 01:24 terminado-0.17.1.dist-info\n", + "drwxr-xr-x 3 root root 4096 Nov 9 01:24 tinycss2\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 tinycss2-1.2.1.dist-info\n", + "drwxr-xr-x 5 root root 4096 Nov 9 01:24 tornado\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 tornado-6.3.3.dist-info\n", + "drwxr-xr-x 4 root root 4096 Nov 9 01:24 tqdm\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 tqdm-4.66.1.dist-info\n", + "drwxr-xr-x 6 root root 4096 Nov 9 01:24 traitlets\n", + "drwxr-xr-x 3 root root 4096 Nov 9 01:24 traitlets-5.9.0.dist-info\n", + "drwxr-xr-x 5 root root 4096 Nov 9 01:24 urllib3\n", + "drwxr-xr-x 3 root root 4096 Nov 9 01:24 urllib3-2.0.6.dist-info\n", + "drwxr-xr-x 3 root root 4096 Nov 9 01:24 wcwidth\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 wcwidth-0.2.7.dist-info\n", + "drwxr-xr-x 3 root root 4096 Nov 9 01:24 webencodings\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 webencodings-0.5.1.dist-info\n", + "drwxr-xr-x 4 root root 4096 Nov 9 01:24 websocket\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 websocket_client-1.6.3.dist-info\n", + "drwxr-xr-x 13 root root 4096 Nov 9 01:24 zmq\n", + "drwxr-xr-x 4 root root 4096 Nov 9 01:24 zope\n", + "lrwxrwxrwx 1 root root 164 Nov 9 01:24 zope.event-4.6-py3.11-nspkg.pth -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/py-zope-event-4.6-mlah5dql76d33hl34zeysun66ik2nmjk/lib/python3.11/site-packages/zope.event-4.6-py3.11-nspkg.pth\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 zope.event-4.6.dist-info\n", + "lrwxrwxrwx 1 root root 176 Nov 9 01:24 zope.interface-5.4.0-py3.11-nspkg.pth -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/py-zope-interface-5.4.0-6jsmi36ohggmpihuchqcd3r3s2eiqaan/lib/python3.11/site-packages/zope.interface-5.4.0-py3.11-nspkg.pth\n", + "drwxr-xr-x 2 root root 4096 Nov 9 01:24 zope.interface-5.4.0.dist-info\n" + ] + } + ], + "source": [ + "!ls -al /opt/views/view/lib/python3.11/site-packages" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here you can see the full list of spack configured python packages, including exago." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Some info about this container" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "PRETTY_NAME=\"Debian GNU/Linux 12 (bookworm)\"\n", + "NAME=\"Debian GNU/Linux\"\n", + "VERSION_ID=\"12\"\n", + "VERSION=\"12 (bookworm)\"\n", + "VERSION_CODENAME=bookworm\n", + "ID=debian\n", + "HOME_URL=\"https://www.debian.org/\"\n", + "SUPPORT_URL=\"https://www.debian.org/support\"\n", + "BUG_REPORT_URL=\"https://bugs.debian.org/\"\n" + ] + } + ], + "source": [ + "!cat /etc/os-release" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "ExaGO w/ MPI", + "language": "python", + "name": "py311-mpi4py-exago" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.6" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/devcontainer/tutorial.ipynb b/docs/devcontainer/tutorial.ipynb index 7dce4b46..ecc54b11 100644 --- a/docs/devcontainer/tutorial.ipynb +++ b/docs/devcontainer/tutorial.ipynb @@ -112,8 +112,8 @@ "Number of equality constraint Jacobian evaluations = 19\n", "Number of inequality constraint Jacobian evaluations = 19\n", "Number of Lagrangian Hessian evaluations = 18\n", - "Total CPU secs in IPOPT (w/o function evaluations) = 0.003\n", - "Total CPU secs in NLP function evaluations = 0.001\n", + "Total CPU secs in IPOPT (w/o function evaluations) = 0.014\n", + "Total CPU secs in NLP function evaluations = 0.002\n", "\n", "EXIT: Optimal Solution Found.\n", "=============================================================\n", @@ -195,13 +195,69 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Appendix\n" + "# Appendix\n", + "\n", + "Information about the Jupyter/Python/Container config is listed here." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.00s - Debugger warning: It seems that frozen modules are being used, which may\n", + "0.00s - make the debugger miss breakpoints. Please pass -Xfrozen_modules=off\n", + "0.00s - to python to disable frozen modules.\n", + "0.00s - Note: Debugging will proceed. Set PYDEVD_DISABLE_FILE_VALIDATION=1 to disable this validation.\n", + "Available kernels:\n", + " python3 /opt/views/view/share/jupyter/kernels/python3\n", + " py311-exago /usr/local/share/jupyter/kernels/py311-exago\n", + " py311-mpi4py-exago /usr/local/share/jupyter/kernels/py311-mpi4py-exago\n" + ] + } + ], + "source": [ + "!jupyter kernelspec list" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{\n", + " \"argv\": [\n", + " \"/opt/views/view/bin/python3\",\n", + " \"-m\",\n", + " \"ipykernel_launcher\",\n", + " \"-f\",\n", + " \"{connection_file}\"\n", + " ],\n", + " \"display_name\": \"ExaGO\",\n", + " \"language\": \"python\",\n", + " \"metadata\": {\n", + " \"debugger\": true\n", + " }\n", + "}" + ] + } + ], + "source": [ + "!cat /usr/local/share/jupyter/kernels/py311-exago/kernel.json" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -330,7 +386,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -356,7 +412,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -375,7 +431,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -411,7 +467,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -428,7 +484,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 11, "metadata": {}, "outputs": [ { @@ -436,220 +492,220 @@ "output_type": "stream", "text": [ "total 864\n", - "drwxr-xr-x 193 root root 12288 Nov 5 17:14 .\n", - "drwxr-xr-x 39 root root 4096 Nov 5 17:14 ..\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 Babel-2.12.1.dist-info\n", - "drwxr-xr-x 11 root root 4096 Nov 5 17:14 IPython\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 Jinja2-3.0.3.dist-info\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 MarkupSafe-2.1.3.dist-info\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 PyYAML-6.0.dist-info\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 Pygments-2.16.1.dist-info\n", - "lrwxrwxrwx 1 root root 139 Nov 5 17:14 README.txt -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/python-3.11.6-ybsi7tlnssr3m4h3eqrzq6tyxdcsr2n7/lib/python3.11/site-packages/README.txt\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 Send2Trash-1.8.0.dist-info\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 __pycache__\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 _argon2_cffi_bindings\n", - "lrwxrwxrwx 1 root root 175 Nov 5 17:14 _cffi_backend.cpython-311-x86_64-linux-gnu.so -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/py-cffi-1.15.1-ns7kiujztzymljhmkwceej66qntnjlcr/lib/python3.11/site-packages/_cffi_backend.cpython-311-x86_64-linux-gnu.so\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 _distutils_hack\n", - "lrwxrwxrwx 1 root root 158 Nov 5 17:14 _pyrsistent_version.py -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/py-pyrsistent-0.19.3-ptruwnt5v52i3udbb6cbvhq5oeqn7dox/lib/python3.11/site-packages/_pyrsistent_version.py\n", - "drwxr-xr-x 9 root root 4096 Nov 5 17:14 _pytest\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 _yaml\n", - "drwxr-xr-x 7 root root 4096 Nov 5 17:14 anyio\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 anyio-4.0.0.dist-info\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 argon2\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 argon2_cffi-21.3.0.dist-info\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 argon2_cffi_bindings-21.2.0.dist-info\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 arrow\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 arrow-1.2.3.dist-info\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 asttokens\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 asttokens-2.4.0.dist-info\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 async_lru-1.0.3.dist-info\n", - "lrwxrwxrwx 1 root root 146 Nov 5 17:14 async_lru.py -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/py-async-lru-1.0.3-n4nwu7jegsgtzsmiplftm3ik7dsghnz7/lib/python3.11/site-packages/async_lru.py\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 attr\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 attrs\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 attrs-23.1.0.dist-info\n", - "drwxr-xr-x 6 root root 4096 Nov 5 17:14 babel\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 backcall\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 backcall-0.2.0.dist-info\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 beautifulsoup4-4.12.2.dist-info\n", - "drwxr-xr-x 4 root root 4096 Nov 5 17:14 bleach\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 bleach-6.0.0.dist-info\n", - "drwxr-xr-x 5 root root 4096 Nov 5 17:14 bs4\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 certifi\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 certifi-2023.7.22.dist-info\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 cffi\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 cffi-1.15.1.dist-info\n", - "drwxr-xr-x 4 root root 4096 Nov 5 17:14 charset_normalizer\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 charset_normalizer-3.3.0.dist-info\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 comm\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 comm-0.1.4.dist-info\n", - "drwxr-xr-x 6 root root 4096 Nov 5 17:14 dateutil\n", - "drwxr-xr-x 8 root root 4096 Nov 5 17:14 debugpy\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 debugpy-1.6.7.dist-info\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 decorator-5.1.1.dist-info\n", - "lrwxrwxrwx 1 root root 146 Nov 5 17:14 decorator.py -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/py-decorator-5.1.1-y6omagu7er3rjtyisfdajw5upayicgxe/lib/python3.11/site-packages/decorator.py\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 defusedxml\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 defusedxml-0.7.1.dist-info\n", - "lrwxrwxrwx 1 root root 160 Nov 5 17:14 distutils-precedence.pth -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/py-setuptools-68.0.0-ceuwjz4g6i5jxk4babjsbh6oxmqggbba/lib/python3.11/site-packages/distutils-precedence.pth\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 editables\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 editables-0.3.dist-info\n", - "lrwxrwxrwx 1 root root 164 Nov 5 17:14 exago.cpython-311-x86_64-linux-gnu.so -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/exago-1.6.0-ssrhw6tbxmal4jmksthjndq2wu33csoe/lib/python3.11/site-packages/exago.cpython-311-x86_64-linux-gnu.so\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 executing\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 executing-1.2.0.dist-info\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 fastjsonschema\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 fastjsonschema-2.16.3.dist-info\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 fqdn\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 fqdn-1.5.1.dist-info\n", - "drwxr-xr-x 9 root root 4096 Nov 5 17:14 gevent\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 gevent-23.7.0.dist-info\n", - "drwxr-xr-x 5 root root 4096 Nov 5 17:14 greenlet\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 greenlet-2.0.2.dist-info\n", - "drwxr-xr-x 5 root root 4096 Nov 5 17:14 hatch_jupyter_builder\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 hatch_jupyter_builder-0.8.3.dist-info\n", - "drwxr-xr-x 12 root root 4096 Nov 5 17:14 hatchling\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 hatchling-1.18.0.dist-info\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 idna\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 idna-3.4.dist-info\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 iniconfig\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 iniconfig-2.0.0.dist-info\n", - "drwxr-xr-x 9 root root 4096 Nov 5 17:14 ipykernel\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 ipykernel-6.23.1.dist-info\n", - "lrwxrwxrwx 1 root root 156 Nov 5 17:14 ipykernel_launcher.py -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/py-ipykernel-6.23.1-raogvtxj7buw67byp3cbpliaqqc4bgkc/lib/python3.11/site-packages/ipykernel_launcher.py\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 ipython-8.14.0.dist-info\n", - "drwxr-xr-x 6 root root 4096 Nov 5 17:14 isoduration\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 isoduration-20.11.0.dist-info\n", - "drwxr-xr-x 7 root root 4096 Nov 5 17:14 jedi\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 jedi-0.18.2.dist-info\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 jinja2\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 json5\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 json5-0.9.14.dist-info\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 jsonpointer-2.0.dist-info\n", - "lrwxrwxrwx 1 root root 148 Nov 5 17:14 jsonpointer.py -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/py-jsonpointer-2.0-6f5qc5t5ix6e77lewi5pgup5cwgmbngu/lib/python3.11/site-packages/jsonpointer.py\n", - "drwxr-xr-x 6 root root 4096 Nov 5 17:14 jsonschema\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 jsonschema-4.17.3.dist-info\n", - "lrwxrwxrwx 1 root root 147 Nov 5 17:14 jupyter.py -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/py-jupyter-core-5.3.0-bupox3eooyhmccqjf75vgk34tys5l75z/lib/python3.11/site-packages/jupyter.py\n", - "drwxr-xr-x 8 root root 4096 Nov 5 17:14 jupyter_client\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 jupyter_client-8.2.0.dist-info\n", - "drwxr-xr-x 5 root root 4096 Nov 5 17:14 jupyter_core\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 jupyter_core-5.3.0.dist-info\n", - "drwxr-xr-x 4 root root 4096 Nov 5 17:14 jupyter_events\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 jupyter_events-0.6.3.dist-info\n", - "drwxr-xr-x 7 root root 4096 Nov 5 17:14 jupyter_lsp\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 jupyter_lsp-2.2.0.dist-info\n", - "drwxr-xr-x 18 root root 4096 Nov 5 17:14 jupyter_server\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 jupyter_server-2.6.0.dist-info\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 jupyter_server_terminals\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 jupyter_server_terminals-0.4.4.dist-info\n", - "drwxr-xr-x 11 root root 4096 Nov 5 17:14 jupyterlab\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 jupyterlab-4.0.1.dist-info\n", - "drwxr-xr-x 4 root root 4096 Nov 5 17:14 jupyterlab_pygments\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 jupyterlab_pygments-0.2.2.dist-info\n", - "drwxr-xr-x 5 root root 4096 Nov 5 17:14 jupyterlab_server\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 jupyterlab_server-2.22.1.dist-info\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 markupsafe\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 matplotlib_inline\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 matplotlib_inline-0.1.6.dist-info\n", - "drwxr-xr-x 5 root root 4096 Nov 5 17:14 mistune\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 mistune-2.0.5.dist-info\n", - "drwxr-xr-x 7 root root 4096 Nov 5 17:14 mpi4py\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 mpi4py-3.1.4.dist-info\n", - "drwxr-xr-x 4 root root 4096 Nov 5 17:14 nbclient\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 nbclient-0.8.0.dist-info\n", - "drwxr-xr-x 11 root root 4096 Nov 5 17:14 nbconvert\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 nbconvert-7.4.0.dist-info\n", - "drwxr-xr-x 8 root root 4096 Nov 5 17:14 nbformat\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 nbformat-5.8.0.dist-info\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 nest_asyncio-1.5.6.dist-info\n", - "lrwxrwxrwx 1 root root 152 Nov 5 17:14 nest_asyncio.py -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/py-nest-asyncio-1.5.6-hbtnt2uhwofptyytpmbxi2uqcbngvlox/lib/python3.11/site-packages/nest_asyncio.py\n", - "drwxr-xr-x 4 root root 4096 Nov 5 17:14 notebook_shim\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 notebook_shim-0.2.3.dist-info\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 overrides\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 overrides-7.3.1.dist-info\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 packaging\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 packaging-23.1.dist-info\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 pandocfilters-1.5.0.dist-info\n", - "lrwxrwxrwx 1 root root 154 Nov 5 17:14 pandocfilters.py -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/py-pandocfilters-1.5.0-wseldytxe3leiottrhb5ogloooxslfd5/lib/python3.11/site-packages/pandocfilters.py\n", - "drwxr-xr-x 5 root root 4096 Nov 5 17:14 parso\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 parso-0.8.3.dist-info\n", - "drwxr-xr-x 4 root root 4096 Nov 5 17:14 pathspec\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 pathspec-0.11.1.dist-info\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 pexpect\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 pexpect-4.8.0.dist-info\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 pickleshare-0.7.5.dist-info\n", - "lrwxrwxrwx 1 root root 150 Nov 5 17:14 pickleshare.py -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/py-pickleshare-0.7.5-wty2ecbqmknacpwe6nwpiyxbq5oqhcza/lib/python3.11/site-packages/pickleshare.py\n", - "drwxr-xr-x 5 root root 4096 Nov 5 17:14 pkg_resources\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 platformdirs\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 platformdirs-3.10.0.dist-info\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 pluggy\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 pluggy-1.0.0.dist-info\n", - "drwxr-xr-x 6 root root 4096 Nov 5 17:14 prometheus_client\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 prometheus_client-0.17.0.dist-info\n", - "drwxr-xr-x 18 root root 4096 Nov 5 17:14 prompt_toolkit\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 prompt_toolkit-3.0.38.dist-info\n", - "drwxr-xr-x 4 root root 4096 Nov 5 17:14 psutil\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 psutil-5.9.5.dist-info\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 ptyprocess\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 ptyprocess-0.7.0.dist-info\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 pure_eval\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 pure_eval-0.2.2.dist-info\n", - "lrwxrwxrwx 1 root root 176 Nov 5 17:14 pvectorc.cpython-311-x86_64-linux-gnu.so -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/py-pyrsistent-0.19.3-ptruwnt5v52i3udbb6cbvhq5oeqn7dox/lib/python3.11/site-packages/pvectorc.cpython-311-x86_64-linux-gnu.so\n", - "lrwxrwxrwx 1 root root 136 Nov 5 17:14 py.py -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/py-pytest-7.3.2-wx6nsrjdt6ftqyuprphukh4m64lu3hk6/lib/python3.11/site-packages/py.py\n", - "drwxr-xr-x 4 root root 4096 Nov 5 17:14 pycparser\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 pycparser-2.21.dist-info\n", - "drwxr-xr-x 7 root root 4096 Nov 5 17:14 pygments\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 pyrsistent\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 pyrsistent-0.19.3.dist-info\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 pytest\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 pytest-7.3.2.dist-info\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 python_dateutil-2.8.2.dist-info\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 python_json_logger-2.0.7.dist-info\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 pythonjsonlogger\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 pyzmq-25.0.2.dist-info\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 requests\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 requests-2.31.0.dist-info\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 rfc3339_validator-0.1.4.dist-info\n", - "lrwxrwxrwx 1 root root 162 Nov 5 17:14 rfc3339_validator.py -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/py-rfc3339-validator-0.1.4-ifadhrcyquy632ftjvceaylpe4aqn7kt/lib/python3.11/site-packages/rfc3339_validator.py\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 rfc3986_validator-0.1.1.dist-info\n", - "lrwxrwxrwx 1 root root 162 Nov 5 17:14 rfc3986_validator.py -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/py-rfc3986-validator-0.1.1-zkwpotfen5ywonax22utpdph5j4eczmr/lib/python3.11/site-packages/rfc3986_validator.py\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 send2trash\n", - "drwxr-xr-x 8 root root 4096 Nov 5 17:14 setuptools\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 setuptools-68.0.0.dist-info\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 six-1.16.0.dist-info\n", - "lrwxrwxrwx 1 root root 135 Nov 5 17:14 six.py -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/py-six-1.16.0-nbnfdrflk6rrh3fu3pengfnlmslekoqs/lib/python3.11/site-packages/six.py\n", - "drwxr-xr-x 4 root root 4096 Nov 5 17:14 sniffio\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 sniffio-1.3.0.dist-info\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 soupsieve\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 soupsieve-2.4.1.dist-info\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 stack_data\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 stack_data-0.6.2.dist-info\n", - "drwxr-xr-x 5 root root 4096 Nov 5 17:14 terminado\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 terminado-0.17.1.dist-info\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 tinycss2\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 tinycss2-1.2.1.dist-info\n", - "drwxr-xr-x 5 root root 4096 Nov 5 17:14 tornado\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 tornado-6.3.3.dist-info\n", - "drwxr-xr-x 6 root root 4096 Nov 5 17:14 traitlets\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 traitlets-5.9.0.dist-info\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 trove_classifiers\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 trove_classifiers-2023.8.7.dist-info\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 uri_template\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 uri_template-1.2.0.dist-info\n", - "drwxr-xr-x 5 root root 4096 Nov 5 17:14 urllib3\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 urllib3-2.0.6.dist-info\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 wcwidth\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 wcwidth-0.2.7.dist-info\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 webcolors-1.11.1.dist-info\n", - "lrwxrwxrwx 1 root root 147 Nov 5 17:14 webcolors.py -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/py-webcolors-1.11.1-x6fsbcye464konn2u33psb3vrat7bmzj/lib/python3.11/site-packages/webcolors.py\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 webencodings\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 webencodings-0.5.1.dist-info\n", - "drwxr-xr-x 4 root root 4096 Nov 5 17:14 websocket\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 websocket_client-1.6.3.dist-info\n", - "drwxr-xr-x 3 root root 4096 Nov 5 17:14 yaml\n", - "drwxr-xr-x 13 root root 4096 Nov 5 17:14 zmq\n", - "drwxr-xr-x 4 root root 4096 Nov 5 17:14 zope\n", - "lrwxrwxrwx 1 root root 164 Nov 5 17:14 zope.event-4.6-py3.11-nspkg.pth -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/py-zope-event-4.6-mlah5dql76d33hl34zeysun66ik2nmjk/lib/python3.11/site-packages/zope.event-4.6-py3.11-nspkg.pth\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 zope.event-4.6.dist-info\n", - "lrwxrwxrwx 1 root root 176 Nov 5 17:14 zope.interface-5.4.0-py3.11-nspkg.pth -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/py-zope-interface-5.4.0-6jsmi36ohggmpihuchqcd3r3s2eiqaan/lib/python3.11/site-packages/zope.interface-5.4.0-py3.11-nspkg.pth\n", - "drwxr-xr-x 2 root root 4096 Nov 5 17:14 zope.interface-5.4.0.dist-info\n" + "drwxr-xr-x 193 root root 12288 Nov 6 20:19 .\n", + "drwxr-xr-x 39 root root 4096 Nov 6 20:19 ..\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 Babel-2.12.1.dist-info\n", + "drwxr-xr-x 11 root root 4096 Nov 6 20:19 IPython\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 Jinja2-3.0.3.dist-info\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 MarkupSafe-2.1.3.dist-info\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 PyYAML-6.0.dist-info\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 Pygments-2.16.1.dist-info\n", + "lrwxrwxrwx 1 root root 139 Nov 6 20:19 README.txt -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/python-3.11.6-ybsi7tlnssr3m4h3eqrzq6tyxdcsr2n7/lib/python3.11/site-packages/README.txt\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 Send2Trash-1.8.0.dist-info\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 __pycache__\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 _argon2_cffi_bindings\n", + "lrwxrwxrwx 1 root root 175 Nov 6 20:19 _cffi_backend.cpython-311-x86_64-linux-gnu.so -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/py-cffi-1.15.1-ns7kiujztzymljhmkwceej66qntnjlcr/lib/python3.11/site-packages/_cffi_backend.cpython-311-x86_64-linux-gnu.so\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 _distutils_hack\n", + "lrwxrwxrwx 1 root root 158 Nov 6 20:19 _pyrsistent_version.py -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/py-pyrsistent-0.19.3-ptruwnt5v52i3udbb6cbvhq5oeqn7dox/lib/python3.11/site-packages/_pyrsistent_version.py\n", + "drwxr-xr-x 9 root root 4096 Nov 6 20:19 _pytest\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 _yaml\n", + "drwxr-xr-x 7 root root 4096 Nov 6 20:19 anyio\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 anyio-4.0.0.dist-info\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 argon2\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 argon2_cffi-21.3.0.dist-info\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 argon2_cffi_bindings-21.2.0.dist-info\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 arrow\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 arrow-1.2.3.dist-info\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 asttokens\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 asttokens-2.4.0.dist-info\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 async_lru-1.0.3.dist-info\n", + "lrwxrwxrwx 1 root root 146 Nov 6 20:19 async_lru.py -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/py-async-lru-1.0.3-n4nwu7jegsgtzsmiplftm3ik7dsghnz7/lib/python3.11/site-packages/async_lru.py\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 attr\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 attrs\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 attrs-23.1.0.dist-info\n", + "drwxr-xr-x 6 root root 4096 Nov 6 20:19 babel\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 backcall\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 backcall-0.2.0.dist-info\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 beautifulsoup4-4.12.2.dist-info\n", + "drwxr-xr-x 4 root root 4096 Nov 6 20:19 bleach\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 bleach-6.0.0.dist-info\n", + "drwxr-xr-x 5 root root 4096 Nov 6 20:19 bs4\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 certifi\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 certifi-2023.7.22.dist-info\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 cffi\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 cffi-1.15.1.dist-info\n", + "drwxr-xr-x 4 root root 4096 Nov 6 20:19 charset_normalizer\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 charset_normalizer-3.3.0.dist-info\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 comm\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 comm-0.1.4.dist-info\n", + "drwxr-xr-x 6 root root 4096 Nov 6 20:19 dateutil\n", + "drwxr-xr-x 8 root root 4096 Nov 6 20:19 debugpy\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 debugpy-1.6.7.dist-info\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 decorator-5.1.1.dist-info\n", + "lrwxrwxrwx 1 root root 146 Nov 6 20:19 decorator.py -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/py-decorator-5.1.1-y6omagu7er3rjtyisfdajw5upayicgxe/lib/python3.11/site-packages/decorator.py\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 defusedxml\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 defusedxml-0.7.1.dist-info\n", + "lrwxrwxrwx 1 root root 160 Nov 6 20:19 distutils-precedence.pth -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/py-setuptools-68.0.0-ceuwjz4g6i5jxk4babjsbh6oxmqggbba/lib/python3.11/site-packages/distutils-precedence.pth\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 editables\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 editables-0.3.dist-info\n", + "lrwxrwxrwx 1 root root 164 Nov 6 20:19 exago.cpython-311-x86_64-linux-gnu.so -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/exago-1.6.0-ssrhw6tbxmal4jmksthjndq2wu33csoe/lib/python3.11/site-packages/exago.cpython-311-x86_64-linux-gnu.so\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 executing\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 executing-1.2.0.dist-info\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 fastjsonschema\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 fastjsonschema-2.16.3.dist-info\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 fqdn\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 fqdn-1.5.1.dist-info\n", + "drwxr-xr-x 9 root root 4096 Nov 6 20:19 gevent\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 gevent-23.7.0.dist-info\n", + "drwxr-xr-x 5 root root 4096 Nov 6 20:19 greenlet\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 greenlet-2.0.2.dist-info\n", + "drwxr-xr-x 5 root root 4096 Nov 6 20:19 hatch_jupyter_builder\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 hatch_jupyter_builder-0.8.3.dist-info\n", + "drwxr-xr-x 12 root root 4096 Nov 6 20:19 hatchling\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 hatchling-1.18.0.dist-info\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 idna\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 idna-3.4.dist-info\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 iniconfig\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 iniconfig-2.0.0.dist-info\n", + "drwxr-xr-x 9 root root 4096 Nov 6 20:19 ipykernel\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 ipykernel-6.23.1.dist-info\n", + "lrwxrwxrwx 1 root root 156 Nov 6 20:19 ipykernel_launcher.py -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/py-ipykernel-6.23.1-raogvtxj7buw67byp3cbpliaqqc4bgkc/lib/python3.11/site-packages/ipykernel_launcher.py\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 ipython-8.14.0.dist-info\n", + "drwxr-xr-x 6 root root 4096 Nov 6 20:19 isoduration\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 isoduration-20.11.0.dist-info\n", + "drwxr-xr-x 7 root root 4096 Nov 6 20:19 jedi\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 jedi-0.18.2.dist-info\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 jinja2\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 json5\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 json5-0.9.14.dist-info\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 jsonpointer-2.0.dist-info\n", + "lrwxrwxrwx 1 root root 148 Nov 6 20:19 jsonpointer.py -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/py-jsonpointer-2.0-6f5qc5t5ix6e77lewi5pgup5cwgmbngu/lib/python3.11/site-packages/jsonpointer.py\n", + "drwxr-xr-x 6 root root 4096 Nov 6 20:19 jsonschema\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 jsonschema-4.17.3.dist-info\n", + "lrwxrwxrwx 1 root root 147 Nov 6 20:19 jupyter.py -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/py-jupyter-core-5.3.0-bupox3eooyhmccqjf75vgk34tys5l75z/lib/python3.11/site-packages/jupyter.py\n", + "drwxr-xr-x 8 root root 4096 Nov 6 20:19 jupyter_client\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 jupyter_client-8.2.0.dist-info\n", + "drwxr-xr-x 5 root root 4096 Nov 6 20:19 jupyter_core\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 jupyter_core-5.3.0.dist-info\n", + "drwxr-xr-x 4 root root 4096 Nov 6 20:19 jupyter_events\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 jupyter_events-0.6.3.dist-info\n", + "drwxr-xr-x 7 root root 4096 Nov 6 20:19 jupyter_lsp\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 jupyter_lsp-2.2.0.dist-info\n", + "drwxr-xr-x 18 root root 4096 Nov 6 20:19 jupyter_server\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 jupyter_server-2.6.0.dist-info\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 jupyter_server_terminals\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 jupyter_server_terminals-0.4.4.dist-info\n", + "drwxr-xr-x 11 root root 4096 Nov 6 20:19 jupyterlab\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 jupyterlab-4.0.1.dist-info\n", + "drwxr-xr-x 4 root root 4096 Nov 6 20:19 jupyterlab_pygments\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 jupyterlab_pygments-0.2.2.dist-info\n", + "drwxr-xr-x 5 root root 4096 Nov 6 20:19 jupyterlab_server\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 jupyterlab_server-2.22.1.dist-info\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 markupsafe\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 matplotlib_inline\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 matplotlib_inline-0.1.6.dist-info\n", + "drwxr-xr-x 5 root root 4096 Nov 6 20:19 mistune\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 mistune-2.0.5.dist-info\n", + "drwxr-xr-x 7 root root 4096 Nov 6 20:19 mpi4py\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 mpi4py-3.1.4.dist-info\n", + "drwxr-xr-x 4 root root 4096 Nov 6 20:19 nbclient\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 nbclient-0.8.0.dist-info\n", + "drwxr-xr-x 11 root root 4096 Nov 6 20:19 nbconvert\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 nbconvert-7.4.0.dist-info\n", + "drwxr-xr-x 8 root root 4096 Nov 6 20:19 nbformat\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 nbformat-5.8.0.dist-info\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 nest_asyncio-1.5.6.dist-info\n", + "lrwxrwxrwx 1 root root 152 Nov 6 20:19 nest_asyncio.py -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/py-nest-asyncio-1.5.6-hbtnt2uhwofptyytpmbxi2uqcbngvlox/lib/python3.11/site-packages/nest_asyncio.py\n", + "drwxr-xr-x 4 root root 4096 Nov 6 20:19 notebook_shim\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 notebook_shim-0.2.3.dist-info\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 overrides\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 overrides-7.3.1.dist-info\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 packaging\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 packaging-23.1.dist-info\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 pandocfilters-1.5.0.dist-info\n", + "lrwxrwxrwx 1 root root 154 Nov 6 20:19 pandocfilters.py -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/py-pandocfilters-1.5.0-wseldytxe3leiottrhb5ogloooxslfd5/lib/python3.11/site-packages/pandocfilters.py\n", + "drwxr-xr-x 5 root root 4096 Nov 6 20:19 parso\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 parso-0.8.3.dist-info\n", + "drwxr-xr-x 4 root root 4096 Nov 6 20:19 pathspec\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 pathspec-0.11.1.dist-info\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 pexpect\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 pexpect-4.8.0.dist-info\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 pickleshare-0.7.5.dist-info\n", + "lrwxrwxrwx 1 root root 150 Nov 6 20:19 pickleshare.py -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/py-pickleshare-0.7.5-wty2ecbqmknacpwe6nwpiyxbq5oqhcza/lib/python3.11/site-packages/pickleshare.py\n", + "drwxr-xr-x 5 root root 4096 Nov 6 20:19 pkg_resources\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 platformdirs\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 platformdirs-3.10.0.dist-info\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 pluggy\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 pluggy-1.0.0.dist-info\n", + "drwxr-xr-x 6 root root 4096 Nov 6 20:19 prometheus_client\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 prometheus_client-0.17.0.dist-info\n", + "drwxr-xr-x 18 root root 4096 Nov 6 20:19 prompt_toolkit\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 prompt_toolkit-3.0.38.dist-info\n", + "drwxr-xr-x 4 root root 4096 Nov 6 20:19 psutil\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 psutil-5.9.5.dist-info\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 ptyprocess\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 ptyprocess-0.7.0.dist-info\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 pure_eval\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 pure_eval-0.2.2.dist-info\n", + "lrwxrwxrwx 1 root root 176 Nov 6 20:19 pvectorc.cpython-311-x86_64-linux-gnu.so -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/py-pyrsistent-0.19.3-ptruwnt5v52i3udbb6cbvhq5oeqn7dox/lib/python3.11/site-packages/pvectorc.cpython-311-x86_64-linux-gnu.so\n", + "lrwxrwxrwx 1 root root 136 Nov 6 20:19 py.py -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/py-pytest-7.3.2-wx6nsrjdt6ftqyuprphukh4m64lu3hk6/lib/python3.11/site-packages/py.py\n", + "drwxr-xr-x 4 root root 4096 Nov 6 20:19 pycparser\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 pycparser-2.21.dist-info\n", + "drwxr-xr-x 7 root root 4096 Nov 6 20:19 pygments\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 pyrsistent\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 pyrsistent-0.19.3.dist-info\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 pytest\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 pytest-7.3.2.dist-info\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 python_dateutil-2.8.2.dist-info\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 python_json_logger-2.0.7.dist-info\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 pythonjsonlogger\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 pyzmq-25.0.2.dist-info\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 requests\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 requests-2.31.0.dist-info\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 rfc3339_validator-0.1.4.dist-info\n", + "lrwxrwxrwx 1 root root 162 Nov 6 20:19 rfc3339_validator.py -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/py-rfc3339-validator-0.1.4-ifadhrcyquy632ftjvceaylpe4aqn7kt/lib/python3.11/site-packages/rfc3339_validator.py\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 rfc3986_validator-0.1.1.dist-info\n", + "lrwxrwxrwx 1 root root 162 Nov 6 20:19 rfc3986_validator.py -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/py-rfc3986-validator-0.1.1-zkwpotfen5ywonax22utpdph5j4eczmr/lib/python3.11/site-packages/rfc3986_validator.py\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 send2trash\n", + "drwxr-xr-x 8 root root 4096 Nov 6 20:19 setuptools\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 setuptools-68.0.0.dist-info\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 six-1.16.0.dist-info\n", + "lrwxrwxrwx 1 root root 135 Nov 6 20:19 six.py -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/py-six-1.16.0-nbnfdrflk6rrh3fu3pengfnlmslekoqs/lib/python3.11/site-packages/six.py\n", + "drwxr-xr-x 4 root root 4096 Nov 6 20:19 sniffio\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 sniffio-1.3.0.dist-info\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 soupsieve\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 soupsieve-2.4.1.dist-info\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 stack_data\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 stack_data-0.6.2.dist-info\n", + "drwxr-xr-x 5 root root 4096 Nov 6 20:19 terminado\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 terminado-0.17.1.dist-info\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 tinycss2\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 tinycss2-1.2.1.dist-info\n", + "drwxr-xr-x 5 root root 4096 Nov 6 20:19 tornado\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 tornado-6.3.3.dist-info\n", + "drwxr-xr-x 6 root root 4096 Nov 6 20:19 traitlets\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 traitlets-5.9.0.dist-info\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 trove_classifiers\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 trove_classifiers-2023.8.7.dist-info\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 uri_template\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 uri_template-1.2.0.dist-info\n", + "drwxr-xr-x 5 root root 4096 Nov 6 20:19 urllib3\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 urllib3-2.0.6.dist-info\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 wcwidth\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 wcwidth-0.2.7.dist-info\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 webcolors-1.11.1.dist-info\n", + "lrwxrwxrwx 1 root root 147 Nov 6 20:19 webcolors.py -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/py-webcolors-1.11.1-x6fsbcye464konn2u33psb3vrat7bmzj/lib/python3.11/site-packages/webcolors.py\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 webencodings\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 webencodings-0.5.1.dist-info\n", + "drwxr-xr-x 4 root root 4096 Nov 6 20:19 websocket\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 websocket_client-1.6.3.dist-info\n", + "drwxr-xr-x 3 root root 4096 Nov 6 20:19 yaml\n", + "drwxr-xr-x 13 root root 4096 Nov 6 20:19 zmq\n", + "drwxr-xr-x 4 root root 4096 Nov 6 20:19 zope\n", + "lrwxrwxrwx 1 root root 164 Nov 6 20:19 zope.event-4.6-py3.11-nspkg.pth -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/py-zope-event-4.6-mlah5dql76d33hl34zeysun66ik2nmjk/lib/python3.11/site-packages/zope.event-4.6-py3.11-nspkg.pth\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 zope.event-4.6.dist-info\n", + "lrwxrwxrwx 1 root root 176 Nov 6 20:19 zope.interface-5.4.0-py3.11-nspkg.pth -> /opt/software/linux-ubuntu22.04-x86_64_v3/gcc-11.4.0/py-zope-interface-5.4.0-6jsmi36ohggmpihuchqcd3r3s2eiqaan/lib/python3.11/site-packages/zope.interface-5.4.0-py3.11-nspkg.pth\n", + "drwxr-xr-x 2 root root 4096 Nov 6 20:19 zope.interface-5.4.0.dist-info\n" ] } ], @@ -673,7 +729,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 12, "metadata": {}, "outputs": [ { diff --git a/docs/devcontainer/viz-tutorial.ipynb b/docs/devcontainer/viz-tutorial.ipynb new file mode 100644 index 00000000..18c3afd8 --- /dev/null +++ b/docs/devcontainer/viz-tutorial.ipynb @@ -0,0 +1,547 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Intro\n", + "\n", + "This assumes you have gone through the intro/mpi4py intro, and that you are comfortable generating ExaGO output.\n", + "\n", + "Now we will go through specifics to the vizualisation frontend, how it is installed, and a typical workflow.\n", + "\n", + "# Open Issues:\n", + "\n", + "- npm dependencies were pinned and have security issues\n", + "- requirements.txt has pinned versions and we cannot upgrade / reproduce\n", + "- OpenAI keys and other missing steps...\n", + "\n", + "# Generating file to visualize\n", + "\n", + "I don't know how to do gic file option, so we are going to use OPFLOW C++ CLI to do this..." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ExaGO 1.6.0 built on Nov 9 2023\n" + ] + } + ], + "source": [ + "!opflow --version" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "TODO: Going to let Shri fill the details in here, as likely we don't want people churning large data sets in a small demo, and we can include pre-generated data I would hope... include what gic is " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!./opflow -netfile -save_output -opflow_output_format JSON -gicfile " + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Visualization\n", + "\n", + "Launch the visualization webpage through shell commands or with the following shell command:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "v16.13.0 is already installed.\n", + "Now using node v16.13.0 (npm v8.1.0)\n", + "Now using node v16.13.0 (npm v8.1.0)\n", + "v16.13.0\n", + "\u001b[K\u001b[?25h\u001b[37;40mnpm\u001b[0m \u001b[0m\u001b[30;43mWARN\u001b[0m \u001b[0m\u001b[35mEBADENGINE\u001b[0m Unsupported engine {ompleted in 1ms\u001b[0m\u001b[K[K\n", + "\u001b[0m\u001b[37;40mnpm\u001b[0m \u001b[0m\u001b[30;43mWARN\u001b[0m \u001b[0m\u001b[35mEBADENGINE\u001b[0m package: '@fortaine/fetch-event-source@3.0.6',\n", + "\u001b[0m\u001b[37;40mnpm\u001b[0m \u001b[0m\u001b[30;43mWARN\u001b[0m \u001b[0m\u001b[35mEBADENGINE\u001b[0m required: { node: '>=16.15' },\n", + "\u001b[0m\u001b[37;40mnpm\u001b[0m \u001b[0m\u001b[30;43mWARN\u001b[0m \u001b[0m\u001b[35mEBADENGINE\u001b[0m current: { node: 'v16.13.0', npm: '8.1.0' }\n", + "\u001b[0m\u001b[37;40mnpm\u001b[0m \u001b[0m\u001b[30;43mWARN\u001b[0m \u001b[0m\u001b[35mEBADENGINE\u001b[0m }\n", + "\u001b[0m\u001b[37;40mnpm\u001b[0m \u001b[0m\u001b[30;43mWARN\u001b[0m \u001b[0m\u001b[35mEBADENGINE\u001b[0m Unsupported engine {\n", + "\u001b[0m\u001b[37;40mnpm\u001b[0m \u001b[0m\u001b[30;43mWARN\u001b[0m \u001b[0m\u001b[35mEBADENGINE\u001b[0m package: 'langchain@0.0.75',\n", + "\u001b[0m\u001b[37;40mnpm\u001b[0m \u001b[0m\u001b[30;43mWARN\u001b[0m \u001b[0m\u001b[35mEBADENGINE\u001b[0m required: { node: '>=18' },\n", + "\u001b[0m\u001b[37;40mnpm\u001b[0m \u001b[0m\u001b[30;43mWARN\u001b[0m \u001b[0m\u001b[35mEBADENGINE\u001b[0m current: { node: 'v16.13.0', npm: '8.1.0' }\n", + "\u001b[0m\u001b[37;40mnpm\u001b[0m \u001b[0m\u001b[30;43mWARN\u001b[0m \u001b[0m\u001b[35mEBADENGINE\u001b[0m }\n", + "\u001b[K\u001b[?25hm##################\u001b[0m⸩ ⠴ reify:fsevents: \u001b[32;40mtiming\u001b[0m \u001b[35mreifyNode:node_modules/webpack-de\u001b[0m\u001b[Ks\u001b[0m\u001b[K0ms\u001b[0m\u001b[K\n", + "up to date, audited 1436 packages in 5s\n", + "\n", + "91 packages are looking for funding\n", + " run `npm fund` for details\n", + "\n", + "\u001b[31m\u001b[1m16\u001b[22m\u001b[39m vulnerabilities (1 \u001b[1mlow\u001b[22m, 6 \u001b[33m\u001b[1mmoderate\u001b[22m\u001b[39m, 9 \u001b[31m\u001b[1mhigh\u001b[22m\u001b[39m)\n", + "\n", + "To address issues that do not require attention, run:\n", + " npm audit fix\n", + "\n", + "To address all issues (including breaking changes), run:\n", + " npm audit fix --force\n", + "\n", + "Run `npm audit` for details.\n", + "\n", + "> geojson@0.0.0 start\n", + "> webpack-dev-server --progress --hot --open\n", + "\n", + "\u001b[1m10% building 1/1 modules 0 active\u001b[39m\u001b[22m\u001b[34mℹ\u001b[39m \u001b[90m「wds」\u001b[39m: Project is running at \u001b[1m\u001b[34mhttp://localhost:8080/\u001b[39m\u001b[22m\n", + "\u001b[34mℹ\u001b[39m \u001b[90m「wds」\u001b[39m: webpack output is served from \u001b[1m\u001b[34m/\u001b[39m\u001b[22m\n", + "\u001b[34mℹ\u001b[39m \u001b[90m「wds」\u001b[39m: Content not from webpack is served from \u001b[1m\u001b[34m/home/app/viz\u001b[39m\u001b[22m\n", + "\u001b[1m10% building 1/4 modules 3 active .../lib/index.js??ref--4!/home/app/viz/app.js\u001b[39m\u001b[22m\u001b[2K\u001b[34mℹ\u001b[39m \u001b[90m「wdm」\u001b[39m: wait until bundle finished: /\n", + "\u001b[34mℹ\u001b[39m \u001b[90m「wdm」\u001b[39m: Hash: \u001b[1mb687832adda5702a5eee\u001b[39m\u001b[22m2m39m\u001b[22mn.js\u001b[39m\u001b[22m\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\n", + "Version: webpack \u001b[1m4.47.0\u001b[39m\u001b[22m\n", + "Time: \u001b[1m142430\u001b[39m\u001b[22mms\n", + "Built at: 11/10/2023 \u001b[1m2:14:39 PM\u001b[39m\u001b[22m\n", + " \u001b[1mAsset\u001b[39m\u001b[22m \u001b[1mSize\u001b[39m\u001b[22m \u001b[1mChunks\u001b[39m\u001b[22m \u001b[1m\u001b[39m\u001b[22m \u001b[1m\u001b[39m\u001b[22m\u001b[1mChunk Names\u001b[39m\u001b[22m\n", + " \u001b[1m\u001b[32mapp.js\u001b[39m\u001b[22m 45.6 MiB \u001b[1mapp\u001b[39m\u001b[22m \u001b[1m\u001b[32m[emitted]\u001b[39m\u001b[22m app\n", + "\u001b[1m\u001b[32mapp.js.map\u001b[39m\u001b[22m 20.7 MiB \u001b[1mapp\u001b[39m\u001b[22m \u001b[1m\u001b[32m[emitted] [dev]\u001b[39m\u001b[22m app\n", + "Entrypoint \u001b[1mapp\u001b[39m\u001b[22m = \u001b[1m\u001b[32mapp.js\u001b[39m\u001b[22m \u001b[1m\u001b[32mapp.js.map\u001b[39m\u001b[22m\n", + "[0] \u001b[1mmulti (webpack)-dev-server/client?http://localhost:8080 (webpack)/hot/dev-server.js ./app.js\u001b[39m\u001b[22m 52 bytes {\u001b[1m\u001b[33mapp\u001b[39m\u001b[22m}\u001b[1m\u001b[32m [built]\u001b[39m\u001b[22m\n", + "[\u001b[1m./app.js\u001b[39m\u001b[22m] 44.1 KiB {\u001b[1m\u001b[33mapp\u001b[39m\u001b[22m}\u001b[1m\u001b[32m [built]\u001b[39m\u001b[22m\n", + "[\u001b[1m./module_casedata.js\u001b[39m\u001b[22m] 354 bytes {\u001b[1m\u001b[33mapp\u001b[39m\u001b[22m}\u001b[1m\u001b[32m [built]\u001b[39m\u001b[22m\n", + "[\u001b[1m./node_modules/@deck.gl/core/dist/esm/index.js\u001b[39m\u001b[22m] 3.49 KiB {\u001b[1m\u001b[33mapp\u001b[39m\u001b[22m}\u001b[1m\u001b[32m [built]\u001b[39m\u001b[22m\n", + "[\u001b[1m./node_modules/@deck.gl/extensions/dist/esm/index.js\u001b[39m\u001b[22m] 795 bytes {\u001b[1m\u001b[33mapp\u001b[39m\u001b[22m}\u001b[1m\u001b[32m [built]\u001b[39m\u001b[22m\n", + "[\u001b[1m./node_modules/@deck.gl/react/dist/esm/index.js\u001b[39m\u001b[22m] 115 bytes {\u001b[1m\u001b[33mapp\u001b[39m\u001b[22m}\u001b[1m\u001b[32m [built]\u001b[39m\u001b[22m\n", + "[\u001b[1m./node_modules/@mui/icons-material/ArrowDropDown.js\u001b[39m\u001b[22m] 492 bytes {\u001b[1m\u001b[33mapp\u001b[39m\u001b[22m}\u001b[1m\u001b[32m [built]\u001b[39m\u001b[22m\n", + "[\u001b[1m./node_modules/@mui/icons-material/HomeOutlined.js\u001b[39m\u001b[22m] 554 bytes {\u001b[1m\u001b[33mapp\u001b[39m\u001b[22m}\u001b[1m\u001b[32m [built]\u001b[39m\u001b[22m\n", + "[\u001b[1m./node_modules/@mui/icons-material/ThreeSixtyOutlined.js\u001b[39m\u001b[22m] 670 bytes {\u001b[1m\u001b[33mapp\u001b[39m\u001b[22m}\u001b[1m\u001b[32m [built]\u001b[39m\u001b[22m\n", + "[\u001b[1m./node_modules/@mui/icons-material/esm/index.js\u001b[39m\u001b[22m] 688 KiB {\u001b[1m\u001b[33mapp\u001b[39m\u001b[22m}\u001b[1m\u001b[32m [built]\u001b[39m\u001b[22m\n", + "[\u001b[1m./node_modules/@mui/material/Accordion/index.js\u001b[39m\u001b[22m] 155 bytes {\u001b[1m\u001b[33mapp\u001b[39m\u001b[22m}\u001b[1m\u001b[32m [built]\u001b[39m\u001b[22m\n", + "[\u001b[1m./node_modules/@mui/material/AccordionDetails/index.js\u001b[39m\u001b[22m] 183 bytes {\u001b[1m\u001b[33mapp\u001b[39m\u001b[22m}\u001b[1m\u001b[32m [built]\u001b[39m\u001b[22m\n", + "[\u001b[1m./node_modules/@mui/material/AccordionSummary/index.js\u001b[39m\u001b[22m] 183 bytes {\u001b[1m\u001b[33mapp\u001b[39m\u001b[22m}\u001b[1m\u001b[32m [built]\u001b[39m\u001b[22m\n", + "[./node_modules/webpack-dev-server/client/index.js?http://localhost:8080] \u001b[1m(webpack)-dev-server/client?http://localhost:8080\u001b[39m\u001b[22m 4.29 KiB {\u001b[1m\u001b[33mapp\u001b[39m\u001b[22m}\u001b[1m\u001b[32m [built]\u001b[39m\u001b[22m\n", + "[./node_modules/webpack/hot/dev-server.js] \u001b[1m(webpack)/hot/dev-server.js\u001b[39m\u001b[22m 1.59 KiB {\u001b[1m\u001b[33mapp\u001b[39m\u001b[22m}\u001b[1m\u001b[32m [built]\u001b[39m\u001b[22m\n", + " + 12854 hidden modules\n", + "\u001b[34mℹ\u001b[39m \u001b[90m「wdm」\u001b[39m: Compiled successfully.\n", + "\u001b[34mℹ\u001b[39m \u001b[90m「wdm」\u001b[39m: Compiling...\n", + "\u001b[34mℹ\u001b[39m \u001b[90m「wdm」\u001b[39m: Hash: \u001b[1mf44406baf0346ed8ad10\u001b[39m\u001b[22m2m39m\u001b[22mp.js\u001b[39m\u001b[22m\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\u001b[2K\n", + "Version: webpack \u001b[1m4.47.0\u001b[39m\u001b[22m\n", + "Time: \u001b[1m14928\u001b[39m\u001b[22mms\n", + "Built at: 11/10/2023 \u001b[1m2:16:46 PM\u001b[39m\u001b[22m\n", + " \u001b[1mAsset\u001b[39m\u001b[22m \u001b[1mSize\u001b[39m\u001b[22m \u001b[1mChunks\u001b[39m\u001b[22m \u001b[1m\u001b[39m\u001b[22m \u001b[1m\u001b[39m\u001b[22m\u001b[1mChunk Names\u001b[39m\u001b[22m\n", + " \u001b[1m\u001b[32mapp.b687832adda5702a5eee.hot-update.js\u001b[39m\u001b[22m 58.3 KiB \u001b[1mapp\u001b[39m\u001b[22m \u001b[1m\u001b[32m[emitted] [immutable] [hmr]\u001b[39m\u001b[22m app\n", + "\u001b[1m\u001b[32mapp.b687832adda5702a5eee.hot-update.js.map\u001b[39m\u001b[22m 92.5 KiB \u001b[1mapp\u001b[39m\u001b[22m \u001b[1m\u001b[32m[emitted] [dev]\u001b[39m\u001b[22m app\n", + " \u001b[1m\u001b[32mapp.js\u001b[39m\u001b[22m 45.6 MiB \u001b[1mapp\u001b[39m\u001b[22m \u001b[1m\u001b[32m[emitted]\u001b[39m\u001b[22m app\n", + " \u001b[1m\u001b[32mapp.js.map\u001b[39m\u001b[22m 20.7 MiB \u001b[1mapp\u001b[39m\u001b[22m \u001b[1m\u001b[32m[emitted] [dev]\u001b[39m\u001b[22m app\n", + " \u001b[1m\u001b[32mb687832adda5702a5eee.hot-update.json\u001b[39m\u001b[22m 45 bytes \u001b[1m\u001b[39m\u001b[22m \u001b[1m\u001b[32m[emitted] [immutable] [hmr]\u001b[39m\u001b[22m \n", + "Entrypoint \u001b[1mapp\u001b[39m\u001b[22m = \u001b[1m\u001b[32mapp.js\u001b[39m\u001b[22m \u001b[1m\u001b[32mapp.b687832adda5702a5eee.hot-update.js\u001b[39m\u001b[22m \u001b[1m\u001b[32mapp.js.map\u001b[39m\u001b[22m \u001b[1m\u001b[32mapp.b687832adda5702a5eee.hot-update.js.map\u001b[39m\u001b[22m\n", + "[\u001b[1m./app.js\u001b[39m\u001b[22m] 44.1 KiB {\u001b[1m\u001b[33mapp\u001b[39m\u001b[22m}\u001b[1m\u001b[32m [built]\u001b[39m\u001b[22m\n", + " + 12868 hidden modules\n", + "\u001b[34mℹ\u001b[39m \u001b[90m「wdm」\u001b[39m: Compiled successfully.\n", + "^C\n" + ] + } + ], + "source": [ + "!cd /home/app/viz && . /usr/local/share/nvm/nvm.sh && nvm install 16.13.0 && nvm use 16.13.0 && node --version && npm install && npm start" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "I seem to be stuck... Let's try and capture some more debugging information really quick.\n", + "\n", + "# ChatGrid" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: pip in /usr/local/lib/python3.11/site-packages (23.3.1)\n", + "\u001b[33mWARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv\u001b[0m\u001b[33m\n", + "\u001b[0mRequirement already satisfied: aiohttp==3.8.4 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 1)) (3.8.4)\n", + "Requirement already satisfied: aiosignal==1.3.1 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 2)) (1.3.1)\n", + "Requirement already satisfied: asttokens==2.2.1 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 3)) (2.2.1)\n", + "Requirement already satisfied: async-timeout==4.0.2 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 4)) (4.0.2)\n", + "Requirement already satisfied: attrs==23.1.0 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 5)) (23.1.0)\n", + "Requirement already satisfied: backcall==0.2.0 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 6)) (0.2.0)\n", + "Requirement already satisfied: blinker==1.6.2 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 7)) (1.6.2)\n", + "Requirement already satisfied: certifi==2023.5.7 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 8)) (2023.5.7)\n", + "Requirement already satisfied: charset-normalizer==3.2.0 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 9)) (3.2.0)\n", + "Requirement already satisfied: click==8.1.5 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 10)) (8.1.5)\n", + "Requirement already satisfied: colorama==0.4.6 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 11)) (0.4.6)\n", + "Requirement already satisfied: comm==0.1.3 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 12)) (0.1.3)\n", + "Requirement already satisfied: config in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 13)) (0.5.1)\n", + "Requirement already satisfied: dataclasses-json==0.5.9 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 14)) (0.5.9)\n", + "Requirement already satisfied: debugpy==1.6.7 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 15)) (1.6.7)\n", + "Requirement already satisfied: decorator==5.1.1 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 16)) (5.1.1)\n", + "Requirement already satisfied: executing==1.2.0 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 17)) (1.2.0)\n", + "Requirement already satisfied: Flask==2.3.2 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 18)) (2.3.2)\n", + "Requirement already satisfied: Flask-Cors==4.0.0 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 19)) (4.0.0)\n", + "Requirement already satisfied: frozenlist==1.4.0 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 20)) (1.4.0)\n", + "Requirement already satisfied: greenlet==2.0.2 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 21)) (2.0.2)\n", + "Requirement already satisfied: idna==3.4 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 22)) (3.4)\n", + "Requirement already satisfied: ipykernel==6.23.3 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 23)) (6.23.3)\n", + "Requirement already satisfied: ipython==8.14.0 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 24)) (8.14.0)\n", + "Requirement already satisfied: itsdangerous==2.1.2 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 25)) (2.1.2)\n", + "Requirement already satisfied: jedi==0.18.2 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 26)) (0.18.2)\n", + "Requirement already satisfied: jellyfish==0.11.2 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 27)) (0.11.2)\n", + "Requirement already satisfied: Jinja2==3.1.2 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 28)) (3.1.2)\n", + "Requirement already satisfied: jupyter_client==8.3.0 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 29)) (8.3.0)\n", + "Requirement already satisfied: jupyter_core==5.3.1 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 30)) (5.3.1)\n", + "Requirement already satisfied: langchain==0.0.233 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 31)) (0.0.233)\n", + "Requirement already satisfied: langsmith==0.0.5 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 32)) (0.0.5)\n", + "Requirement already satisfied: MarkupSafe==2.1.3 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 33)) (2.1.3)\n", + "Requirement already satisfied: marshmallow==3.19.0 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 34)) (3.19.0)\n", + "Requirement already satisfied: marshmallow-enum==1.5.1 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 35)) (1.5.1)\n", + "Requirement already satisfied: matplotlib-inline==0.1.6 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 36)) (0.1.6)\n", + "Requirement already satisfied: multidict==6.0.4 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 37)) (6.0.4)\n", + "Requirement already satisfied: mypy-extensions==1.0.0 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 38)) (1.0.0)\n", + "Requirement already satisfied: nest-asyncio==1.5.6 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 39)) (1.5.6)\n", + "Requirement already satisfied: numexpr==2.8.4 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 40)) (2.8.4)\n", + "Requirement already satisfied: numpy==1.25.0 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 41)) (1.25.0)\n", + "Requirement already satisfied: openai==0.27.8 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 42)) (0.27.8)\n", + "Requirement already satisfied: openapi-schema-pydantic==1.2.4 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 43)) (1.2.4)\n", + "Requirement already satisfied: packaging==23.1 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 44)) (23.1)\n", + "Requirement already satisfied: pandas==2.0.2 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 45)) (2.0.2)\n", + "Requirement already satisfied: parso==0.8.3 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 46)) (0.8.3)\n", + "Requirement already satisfied: pickleshare==0.7.5 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 47)) (0.7.5)\n", + "Requirement already satisfied: platformdirs==3.8.0 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 48)) (3.8.0)\n", + "Requirement already satisfied: prompt-toolkit==3.0.38 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 49)) (3.0.38)\n", + "Requirement already satisfied: psutil==5.9.5 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 50)) (5.9.5)\n", + "Requirement already satisfied: psycopg2==2.9.6 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 51)) (2.9.6)\n", + "Requirement already satisfied: pure-eval==0.2.2 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 52)) (0.2.2)\n", + "Requirement already satisfied: pydantic==1.10.11 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 53)) (1.10.11)\n", + "Requirement already satisfied: Pygments==2.15.1 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 54)) (2.15.1)\n", + "Requirement already satisfied: python-dateutil==2.8.2 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 55)) (2.8.2)\n", + "Requirement already satisfied: pytz==2023.3 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 56)) (2023.3)\n", + "Requirement already satisfied: PyYAML==6.0 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 57)) (6.0)\n", + "Requirement already satisfied: pyzmq==25.1.0 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 58)) (25.1.0)\n", + "Requirement already satisfied: requests==2.31.0 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 59)) (2.31.0)\n", + "Requirement already satisfied: shapely==2.0.1 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 60)) (2.0.1)\n", + "Requirement already satisfied: six==1.16.0 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 61)) (1.16.0)\n", + "Requirement already satisfied: SQLAlchemy==2.0.18 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 62)) (2.0.18)\n", + "Requirement already satisfied: stack-data==0.6.2 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 63)) (0.6.2)\n", + "Requirement already satisfied: tenacity==8.2.2 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 64)) (8.2.2)\n", + "Requirement already satisfied: tornado==6.3.2 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 65)) (6.3.2)\n", + "Requirement already satisfied: tqdm==4.65.0 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 66)) (4.65.0)\n", + "Requirement already satisfied: traitlets==5.9.0 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 67)) (5.9.0)\n", + "Requirement already satisfied: typing-inspect==0.9.0 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 68)) (0.9.0)\n", + "Requirement already satisfied: typing_extensions==4.7.1 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 69)) (4.7.1)\n", + "Requirement already satisfied: tzdata==2023.3 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 70)) (2023.3)\n", + "Requirement already satisfied: urllib3==2.0.3 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 71)) (2.0.3)\n", + "Requirement already satisfied: us==3.1.1 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 72)) (3.1.1)\n", + "Requirement already satisfied: wcwidth==0.2.6 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 73)) (0.2.6)\n", + "Requirement already satisfied: Werkzeug==2.3.6 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 74)) (2.3.6)\n", + "Requirement already satisfied: yarl==1.9.2 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 75)) (1.9.2)\n", + "Requirement already satisfied: pexpect>4.3 in /usr/local/lib/python3.11/site-packages (from ipython==8.14.0->-r requirements.txt (line 24)) (4.8.0)\n", + "Requirement already satisfied: ptyprocess>=0.5 in /usr/local/lib/python3.11/site-packages (from pexpect>4.3->ipython==8.14.0->-r requirements.txt (line 24)) (0.7.0)\n", + "\u001b[33mWARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv\u001b[0m\u001b[33m\n", + "\u001b[0m * Serving Flask app 'server'\n", + " * Debug mode: on\n", + "\u001b[31m\u001b[1mWARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.\u001b[0m\n", + " * Running on http://127.0.0.1:5000\n", + "\u001b[33mPress CTRL+C to quit\u001b[0m\n", + " * Restarting with stat\n", + " * Debugger is active!\n", + " * Debugger PIN: 103-781-530\n", + "127.0.0.1 - - [10/Nov/2023 04:03:42] \"\u001b[33mGET /?vscodeBrowserReqId=1699589022090 HTTP/1.1\u001b[0m\" 404 -\n" + ] + }, + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mThe Kernel crashed while executing code in the the current cell or a previous cell. Please review the code in the cell(s) to identify a possible cause of the failure. Click here for more info. View Jupyter log for further details." + ] + } + ], + "source": [ + "!cd ../../viz/backend && \\\n", + " sudo python3 -m pip install --upgrade pip && \\\n", + " sudo python3 -m pip install -r requirements.txt && \\\n", + " PYTHONPATH=/usr/local/lib/python3.11/site-packages python3 server.py" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It seems like there were not only windows file endings here, but there were hard coded frozen requirements that were just for windows, and pinned for python < 3.11... Trying to run anyway just to see what happens.\n", + "\n", + "Stopping here, where a few dependencies where missing, and PYTHONPATH wasn't quite correct. I am missing quite a few steps, but hopefully this is close..." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!cd ../../viz/backend && python3 server.py" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "# Installation\n", + "\n", + "This is done through the `postCreateCommand` that is configured in `.devcontainer/devcontainer.json` in theroy. Still debugging, so I did some stuff through Jupyter magic just to iterate quickly." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{\n", + "\t\"build\": {\n", + "\t\t\"dockerfile\": \"Dockerfile\",\n", + "\t\t\"context\": \"..\"\n", + "\t},\n", + "\t\"customizations\": {\n", + "\t\t\"vscode\": {\n", + "\t\t\t\"extensions\": [\n", + "\t\t\t\t\"ms-azuretools.vscode-docker\",\n", + "\t\t\t\t\"github.vscode-github-actions\",\n", + "\t\t\t\t\"ms-toolsai.jupyter\",\n", + "\t\t\t\t\"GitHub.copilot\",\n", + "\t\t\t\t\"ms-vsliveshare.vsliveshare\"\n", + "\t\t\t]\n", + "\t\t}\n", + "\t},\n", + "\t\"workspaceFolder\": \"/home/app/\",\n", + " \t\"postCreateCommand\": \"cd /home/app/viz && export CXX=$(which gcc) && npm install\",\n", + " \"workspaceMount\": \"source=${localWorkspaceFolder},target=/home/app/,type=bind,consistency=cached\"\n", + "}\n" + ] + } + ], + "source": [ + "!cat ../../.devcontainer/devcontainer.json" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "9.2.0\n" + ] + } + ], + "source": [ + "!npm --version" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "v18.13.0\n" + ] + } + ], + "source": [ + "!node --version" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "# Build stage with Spack pre-installed and ready to be used\n", + "FROM spack/ubuntu-jammy as builder\n", + "\n", + "# Install OS packages needed to build the software\n", + "RUN apt-get -yqq update && apt-get -yqq upgrade \\\n", + " && apt-get -yqq install autoconf \\\n", + " && rm -rf /var/lib/apt/lists/*\n", + "\n", + "# What we want to install and how we want to install it\n", + "# is specified in a manifest file (spack.yaml)\n", + "RUN mkdir /opt/spack-environment \\\n", + "&& (echo spack: \\\n", + "&& echo ' specs:' \\\n", + "&& echo ' - exago@1.6.0+ipopt+python+mpi' \\\n", + "&& echo ' - petsc~fortran~hdf5~hypre+metis' \\\n", + "&& echo ' - ipopt@3.12.10+coinhsl~mumps+metis' \\\n", + "&& echo ' - coinhsl@2019.05.21+blas' \\\n", + "&& echo ' - py-jupyterlab' \\\n", + "&& echo ' - py-ipyparallel' \\\n", + "&& echo ' concretizer:' \\\n", + "&& echo ' unify: true' \\\n", + "&& echo ' reuse: true' \\\n", + "&& echo ' mirrors:' \\\n", + "&& echo ' spack: https://binaries.spack.io/develop' \\\n", + "&& echo ' packages:' \\\n", + "&& echo ' all:' \\\n", + "&& echo ' providers:' \\\n", + "&& echo ' mpi:' \\\n", + "&& echo ' - openmpi' \\\n", + "&& echo ' zlib-api:' \\\n", + "&& echo ' - zlib' \\\n", + "&& echo ' zlib-ng:' \\\n", + "&& echo ' buildable: false' \\\n", + "&& echo ' config:' \\\n", + "&& echo ' install_tree: /opt/software' \\\n", + "&& echo ' view: /opt/views/view') > /opt/spack-environment/spack.yaml\n", + "\n", + "# This is manual, and required to build Ipopt\n", + "COPY coinhsl-archive-2019.05.21.tar.gz /opt/spack-environment/coinhsl-archive-2019.05.21.tar.gz\n", + "\n", + "# Find external packages\n", + "RUN cd /opt/spack-environment && spack env activate . && spack external find --all\n", + "\n", + "# Do this separate of install to cache keys...\n", + "RUN cd /opt/spack-environment && spack env activate . && spack mirror add develop https://binaries.spack.io/develop && spack buildcache keys --install --trust && spack concretize -f && spack mirror create -a\n", + "\n", + "# Install Ipopt w/ CoinHSL (and other deps) in stages to cache builds\n", + "RUN cd /opt/spack-environment && spack env activate . && spack install --fail-fast ipopt\n", + "\n", + "# Install PETSc \n", + "RUN cd /opt/spack-environment && spack env activate . && spack install --fail-fast petsc\n", + "\n", + "# Install py-jupyterlab\n", + "RUN cd /opt/spack-environment && spack env activate . && spack install --fail-fast py-jupyterlab\n", + "\n", + "# Install py-ipyparallel\n", + "RUN cd /opt/spack-environment && spack env activate . && spack install --fail-fast py-ipyparallel\n", + "\n", + "# Install the software, remove unnecessary deps\n", + "RUN cd /opt/spack-environment && spack env activate . && spack install --fail-fast && spack gc -y\n", + "\n", + "# Strip all the binaries\n", + "RUN find -L /opt/views/view/* -type f -exec readlink -f '{}' \\; | \\\n", + " xargs file -i | \\\n", + " grep 'charset=binary' | \\\n", + " grep 'x-executable\\|x-archive\\|x-sharedlib' | \\\n", + " awk -F: '{print $1}' | xargs strip\n", + "\n", + "# Modifications to the environment that are necessary to run\n", + "RUN cd /opt/spack-environment && \\\n", + " spack env activate --sh -d . > activate.sh\n", + "\n", + "\n", + "# Bare OS image to run the installed executables\n", + "FROM mcr.microsoft.com/devcontainers/python:3.11-bookworm\n", + "\n", + "COPY --from=builder /opt/spack-environment /opt/spack-environment\n", + "COPY --from=builder /opt/software /opt/software\n", + "\n", + "# paths.view is a symlink, so copy the parent to avoid dereferencing and duplicating it\n", + "COPY --from=builder /opt/views /opt/views\n", + "\n", + "RUN { \\\n", + " echo '#!/bin/sh' \\\n", + " && echo '.' /opt/spack-environment/activate.sh \\\n", + " && echo 'exec \"$@\"'; \\\n", + " } > /entrypoint.sh \\\n", + "&& chmod a+x /entrypoint.sh \\\n", + "&& ln -s /opt/views/view /opt/view\n", + "\n", + "\n", + "RUN apt-get -yqq update && apt-get -yqq upgrade \\\n", + " && apt-get -yqq install gfortran nodejs npm \\\n", + " && rm -rf /var/lib/apt/lists/*\n", + "ENTRYPOINT [ \"/entrypoint.sh\" ]\n", + "CMD [ \"/bin/bash\" ]\n", + "\n", + "# Make sure devcontainer user gets spack packages\n", + "RUN echo \"source /entrypoint.sh\" >> /home/vscode/.bashrc\n", + "\n", + "# Install the Jupyter kernel\n", + "RUN . /entrypoint.sh && \\\n", + " python3 -m ipykernel install \\\n", + " --name py311-exago \\\n", + " --display-name \"ExaGO\" \\\n", + " --prefix=\n", + "\n", + "# Install the mpi4py Jupyter kernel\n", + "RUN . /entrypoint.sh && \\\n", + " python3 -m ipykernel install \\\n", + " --name py311-mpi4py-exago \\\n", + " --display-name \"ExaGO w/ MPI\" \\\n", + " --prefix=\n", + "\n", + "# Make modifications that are necessary to run mpi4py in kernelspec\n", + "RUN sed -i 's/\\\"\\/opt\\/views\\/view\\/bin\\/python3\\\"/\\\"mpiexec\\\", \\\"-n\\\", \\\"1\\\", \\\"\\/opt\\/views\\/view\\/bin\\/python3\\\"/g' /usr/local/share/jupyter/kernels/py311-mpi4py-exago/kernel.json\n", + "\n", + "# Configure user for container\n", + "USER vscode\n" + ] + } + ], + "source": [ + "!cat ../../.devcontainer/Dockerfile" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.6 (main, Nov 1 2023, 10:08:51) [GCC 12.2.0]" + }, + "vscode": { + "interpreter": { + "hash": "949777d72b0d2535278d3dc13498b2535136f6dfe0678499012e853ee9abcab1" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/viz/app.js b/viz/app.js index c4786dfd..dc5c8597 100644 --- a/viz/app.js +++ b/viz/app.js @@ -4,7 +4,7 @@ import { StaticMap, Popup, Marker, _MapContext as MapContext, FullscreenControl, import { WebMercatorViewport } from '@deck.gl/core'; import DeckGL from '@deck.gl/react'; // import FlowMapLayer from '@flowmap.gl/core' -import { FlowmapLayer } from '@flowmap.gl/layers' +// import { FlowmapLayer } from '@flowmap.gl/layers' import { GeoJsonLayer, ColumnLayer, PolygonLayer } from '@deck.gl/layers'; import { DataFilterExtension } from '@deck.gl/extensions'; import Checkbox from '@mui/material/Checkbox'; @@ -739,23 +739,23 @@ export default function App({ refdata = data, refflowdata = flowdata, ggdata = g const layers = [ - new FlowmapLayer({ - id: 'my-flowmap-layer', - data: flowdata, - visible: flowlayeractive, - animationEnabled: true, //control the animation effect of flow layer - colorScheme: ["rgb(0,0,255)","rgb(255,0,255)"], - // darkMode: true, - // clusteringEnabled: false, //control the aggregate effect of flow layer - // adaptiveScalesEnabled: false, - getFlowMagnitude: (flow) => flow.count, - getFlowOriginId: (flow) => flow.origin, - getFlowDestId: (flow) => flow.dest, - getLocationId: (loc) => loc.id, - getLocationLat: (loc) => loc.lat, - getLocationLon: (loc) => loc.lon, - - }), + // new FlowmapLayer({ + // id: 'my-flowmap-layer', + // data: flowdata, + // visible: flowlayeractive, + // animationEnabled: true, //control the animation effect of flow layer + // colorScheme: ["rgb(0,0,255)","rgb(255,0,255)"], + // // darkMode: true, + // // clusteringEnabled: false, //control the aggregate effect of flow layer + // // adaptiveScalesEnabled: false, + // getFlowMagnitude: (flow) => flow.count, + // getFlowOriginId: (flow) => flow.origin, + // getFlowDestId: (flow) => flow.dest, + // getLocationId: (loc) => loc.id, + // getLocationLat: (loc) => loc.lat, + // getLocationLon: (loc) => loc.lon, + // + // }), new GeoJsonLayer({ id: 'geojson', diff --git a/viz/backend/requirements.txt b/viz/backend/requirements.txt index dcfd4d3f..0072edda 100644 Binary files a/viz/backend/requirements.txt and b/viz/backend/requirements.txt differ diff --git a/viz/package.json b/viz/package.json index 9023e1d4..6c8d39cc 100644 --- a/viz/package.json +++ b/viz/package.json @@ -1,8 +1,6 @@ { "name": "geojson", - "version": "0.0.0", - "livscode-file://vscode-app/c:/Users/jins176/AppData/Local/Programs/Microsoft%20VS%20Code/resources/app/out/vs/code/electron-sandbox/workbench/workbench.htmlcense": "MIT", - + "version": "0.0.0", "scripts": { "start-local": "webpack-dev-server --env.local --progress --hot --open", "start": "webpack-dev-server --progress --hot --open "