diff --git a/README.md b/README.md
index 3e6b09e6e..d474a91b5 100644
--- a/README.md
+++ b/README.md
@@ -30,6 +30,8 @@ DOI: 10.1021/acs.jctc.2c01297`
+ [5. Advanced examples](docs/user_guide/DMFF_example.ipynb)
+ [And here is a tutorial notebook of the basic usage of DMFF. Welcome to read it and get started with DMFF!](docs/user_guide/test.ipynb)
+[And here is a tutorial notebook, which would tell you some basic usage of DMFF. Welcome to read it and get started witn DMFF!](docs/user_guide/test.ipynb)
+
## Developer Guide
+ [1. Introduction](docs/dev_guide/introduction.md)
+ [2. Software architecture](docs/dev_guide/arch.md)
diff --git a/docs/user_guide/DMFF_example.ipynb b/docs/user_guide/DMFF_example.ipynb
new file mode 100644
index 000000000..51f4b2b1e
--- /dev/null
+++ b/docs/user_guide/DMFF_example.ipynb
@@ -0,0 +1,3698 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "1b1f04ae-398e-4aff-ac2e-e3e2beaea116",
+ "metadata": {},
+ "source": [
+ "# Advanced examples of DMFF 1.0.0\n",
+ "In our new tutorial notebook https://nb.bohrium.dp.tech/detail/6366839940 You must already have a basic understanding of DMFF version 1.0.0. As an advanced tutorial, we have also prepared this example-notebook for you as a supplement to the Tutorial, which includes an introduction to new modules in DMFF such as Qeq, ML Force, and the OpenMM plugin."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "7efc4682-df1a-4137-827e-a210bf325819",
+ "metadata": {},
+ "source": [
+ "## Environment Setup\n",
+ "\n",
+ "Retrieve DMFF from GitHub and switch to the desired branch, then proceed with the installation."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "id": "bd84a262-a875-4909-9c3d-55e9cbfeaea9",
+ "metadata": {
+ "collapsed": true,
+ "jupyter": {
+ "outputs_hidden": true
+ }
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Cloning into 'DMFF'...\n",
+ "remote: Enumerating objects: 4439, done.\u001b[K\n",
+ "remote: Counting objects: 100% (4439/4439), done.\u001b[K\n",
+ "remote: Compressing objects: 100% (1432/1432), done.\u001b[K\n",
+ "remote: Total 4439 (delta 2961), reused 4361 (delta 2922), pack-reused 0\u001b[K\n",
+ "Receiving objects: 100% (4439/4439), 22.10 MiB | 5.00 MiB/s, done.\n",
+ "Resolving deltas: 100% (2961/2961), done.\n",
+ "Updating files: 100% (273/273), done.\n",
+ "Updating files: 100% (318/318), done.\n",
+ "Branch 'wangxy/v1.0.0-devel' set up to track remote branch 'wangxy/v1.0.0-devel' from 'origin'.\n",
+ "Switched to a new branch 'wangxy/v1.0.0-devel'\n",
+ "Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple\n",
+ "Processing /data/DMFF\n",
+ " Preparing metadata (setup.py) ... \u001b[?25ldone\n",
+ "\u001b[?25hRequirement already satisfied: numpy>=1.18 in /opt/mamba/lib/python3.10/site-packages (from dmff==0.2.1.dev338+gcdb14ee) (1.23.4)\n",
+ "Requirement already satisfied: openmm>=7.6.0 in /opt/mamba/lib/python3.10/site-packages (from dmff==0.2.1.dev338+gcdb14ee) (7.7.0)\n",
+ "Requirement already satisfied: freud-analysis in /opt/mamba/lib/python3.10/site-packages/freud_analysis-2.11.0-py3.10-linux-x86_64.egg (from dmff==0.2.1.dev338+gcdb14ee) (2.11.0)\n",
+ "Collecting networkx>=3.0\n",
+ " Downloading https://pypi.tuna.tsinghua.edu.cn/packages/d5/f0/8fbc882ca80cf077f1b246c0e3c3465f7f415439bdea6b899f6b19f61f70/networkx-3.2.1-py3-none-any.whl (1.6 MB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.6/1.6 MB\u001b[0m \u001b[31m10.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m \u001b[36m0:00:01\u001b[0m\n",
+ "\u001b[?25hCollecting optax>=0.1.4\n",
+ " Downloading https://pypi.tuna.tsinghua.edu.cn/packages/13/71/787cc24c4b606f3bb9f1d14957ebd7cb9e4234f6d59081721230b2032196/optax-0.1.7-py3-none-any.whl (154 kB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m154.1/154.1 kB\u001b[0m \u001b[31m3.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0ma \u001b[36m0:00:01\u001b[0m\n",
+ "\u001b[?25hCollecting jaxopt>=0.8.0\n",
+ " Downloading https://pypi.tuna.tsinghua.edu.cn/packages/45/ee/a74d0ec01e2c90945cdb10f5c886441d2a78f11f612f14830df39a94b8b5/jaxopt-0.8.2-py3-none-any.whl (170 kB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m170.3/170.3 kB\u001b[0m \u001b[31m3.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0ma \u001b[36m0:00:01\u001b[0m\n",
+ "\u001b[?25hRequirement already satisfied: pymbar>=4.0.0 in /opt/mamba/lib/python3.10/site-packages (from dmff==0.2.1.dev338+gcdb14ee) (4.0.1)\n",
+ "Requirement already satisfied: tqdm in /opt/mamba/lib/python3.10/site-packages (from dmff==0.2.1.dev338+gcdb14ee) (4.64.1)\n",
+ "Requirement already satisfied: jaxlib>=0.1.69 in /opt/mamba/lib/python3.10/site-packages (from jaxopt>=0.8.0->dmff==0.2.1.dev338+gcdb14ee) (0.3.15+cuda11.cudnn82)\n",
+ "Requirement already satisfied: scipy>=1.0.0 in /opt/mamba/lib/python3.10/site-packages (from jaxopt>=0.8.0->dmff==0.2.1.dev338+gcdb14ee) (1.9.3)\n",
+ "Requirement already satisfied: jax>=0.2.18 in /opt/mamba/lib/python3.10/site-packages (from jaxopt>=0.8.0->dmff==0.2.1.dev338+gcdb14ee) (0.3.17)\n",
+ "Requirement already satisfied: chex>=0.1.5 in /opt/mamba/lib/python3.10/site-packages (from optax>=0.1.4->dmff==0.2.1.dev338+gcdb14ee) (0.1.5)\n",
+ "Requirement already satisfied: absl-py>=0.7.1 in /opt/mamba/lib/python3.10/site-packages (from optax>=0.1.4->dmff==0.2.1.dev338+gcdb14ee) (1.3.0)\n",
+ "Requirement already satisfied: numexpr in /opt/mamba/lib/python3.10/site-packages (from pymbar>=4.0.0->dmff==0.2.1.dev338+gcdb14ee) (2.8.4)\n",
+ "Requirement already satisfied: rowan>=1.2.1 in /opt/mamba/lib/python3.10/site-packages/rowan-1.3.0.post1-py3.10.egg (from freud-analysis->dmff==0.2.1.dev338+gcdb14ee) (1.3.0.post1)\n",
+ "Requirement already satisfied: dm-tree>=0.1.5 in /opt/mamba/lib/python3.10/site-packages (from chex>=0.1.5->optax>=0.1.4->dmff==0.2.1.dev338+gcdb14ee) (0.1.7)\n",
+ "Requirement already satisfied: toolz>=0.9.0 in /opt/mamba/lib/python3.10/site-packages (from chex>=0.1.5->optax>=0.1.4->dmff==0.2.1.dev338+gcdb14ee) (0.12.0)\n",
+ "Requirement already satisfied: typing-extensions in /opt/mamba/lib/python3.10/site-packages (from jax>=0.2.18->jaxopt>=0.8.0->dmff==0.2.1.dev338+gcdb14ee) (4.4.0)\n",
+ "Requirement already satisfied: etils[epath] in /opt/mamba/lib/python3.10/site-packages (from jax>=0.2.18->jaxopt>=0.8.0->dmff==0.2.1.dev338+gcdb14ee) (0.9.0)\n",
+ "Requirement already satisfied: opt-einsum in /opt/mamba/lib/python3.10/site-packages (from jax>=0.2.18->jaxopt>=0.8.0->dmff==0.2.1.dev338+gcdb14ee) (3.3.0)\n",
+ "Requirement already satisfied: zipp in /opt/mamba/lib/python3.10/site-packages (from etils[epath]->jax>=0.2.18->jaxopt>=0.8.0->dmff==0.2.1.dev338+gcdb14ee) (3.10.0)\n",
+ "Requirement already satisfied: importlib_resources in /opt/mamba/lib/python3.10/site-packages (from etils[epath]->jax>=0.2.18->jaxopt>=0.8.0->dmff==0.2.1.dev338+gcdb14ee) (5.10.0)\n",
+ "Building wheels for collected packages: dmff\n",
+ " Building wheel for dmff (setup.py) ... \u001b[?25ldone\n",
+ "\u001b[?25h Created wheel for dmff: filename=dmff-0.2.1.dev338+gcdb14ee-py3-none-any.whl size=123185 sha256=1afdee2df70e0e259d2037d783a88c28a2edbe14c3f3816c5218753a503b687f\n",
+ " Stored in directory: /tmp/pip-ephem-wheel-cache-1dostt5y/wheels/f3/08/c8/63a66e9272163ceeb3675eda2e65e58a3e3c8a96296799182d\n",
+ "Successfully built dmff\n",
+ "Installing collected packages: networkx, jaxopt, optax, dmff\n",
+ " Attempting uninstall: optax\n",
+ " Found existing installation: optax 0.1.3\n",
+ " Uninstalling optax-0.1.3:\n",
+ " Successfully uninstalled optax-0.1.3\n",
+ "Successfully installed dmff-0.2.1.dev338+gcdb14ee jaxopt-0.8.2 networkx-3.2.1 optax-0.1.7\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"
+ ]
+ }
+ ],
+ "source": [
+ "! rm -rf DMFF\n",
+ "! rm -rf /opt/mamba/lib/python3.10/site-packages/dmff*\n",
+ "! git clone https://github.com/deepmodeling/DMFF.git\n",
+ "! git config --global --add safe.directory `pwd`/DMFF\n",
+ "! cd DMFF && git checkout wangxy/v1.0.0-devel && pip install ."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "005cdb5d-ca06-4d89-9add-f8a4c65668b9",
+ "metadata": {},
+ "source": [
+ "Install the required libraries; this step is time-consuming, so please be patient."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "id": "d645c00b-d218-4630-8737-87306d09fc52",
+ "metadata": {
+ "collapsed": true,
+ "jupyter": {
+ "outputs_hidden": true
+ }
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ " __ __ __ __\n",
+ " / \\ / \\ / \\ / \\\n",
+ " / \\/ \\/ \\/ \\\n",
+ "███████████████/ /██/ /██/ /██/ /████████████████████████\n",
+ " / / \\ / \\ / \\ / \\ \\____\n",
+ " / / \\_/ \\_/ \\_/ \\ o \\__,\n",
+ " / _/ \\_____/ `\n",
+ " |/\n",
+ " ███╗ ███╗ █████╗ ███╗ ███╗██████╗ █████╗\n",
+ " ████╗ ████║██╔══██╗████╗ ████║██╔══██╗██╔══██╗\n",
+ " ██╔████╔██║███████║██╔████╔██║██████╔╝███████║\n",
+ " ██║╚██╔╝██║██╔══██║██║╚██╔╝██║██╔══██╗██╔══██║\n",
+ " ██║ ╚═╝ ██║██║ ██║██║ ╚═╝ ██║██████╔╝██║ ██║\n",
+ " ╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝╚═════╝ ╚═╝ ╚═╝\n",
+ "\n",
+ " mamba (0.27.0) supported by @QuantStack\n",
+ "\n",
+ " GitHub: https://github.com/mamba-org/mamba\n",
+ " Twitter: https://twitter.com/QuantStack\n",
+ "\n",
+ "█████████████████████████████████████████████████████████████\n",
+ "\n",
+ "\n",
+ "Looking for: ['openmm=7.7.0', 'rdkit']\n",
+ "\n",
+ "\u001b[?25l\u001b[2K\u001b[0G[+] 0.0s\n",
+ "\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.1s\n",
+ "conda-forge/linux-64 \u001b[90m━━━━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.1s\n",
+ "conda-forge/noarch \u001b[90m━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.1s\n",
+ "pkgs/main/linux-64 \u001b[33m━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.1s\n",
+ "pkgs/main/noarch \u001b[90m━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.1s\n",
+ "pkgs/r/linux-64 \u001b[33m━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.2s\n",
+ "conda-forge/linux-64 \u001b[33m━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.2s\n",
+ "conda-forge/noarch \u001b[90m━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.2s\n",
+ "pkgs/main/linux-64 \u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.2s\n",
+ "pkgs/main/noarch \u001b[90m━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.2s\n",
+ "pkgs/r/linux-64 \u001b[33m━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.3s\n",
+ "conda-forge/linux-64 \u001b[33m━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.3s\n",
+ "conda-forge/noarch \u001b[90m━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.3s\n",
+ "pkgs/main/linux-64 \u001b[90m╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.3s\n",
+ "pkgs/main/noarch \u001b[90m━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.3s\n",
+ "pkgs/r/linux-64 \u001b[90m╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.4s\n",
+ "conda-forge/linux-64 \u001b[33m━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.4s\n",
+ "conda-forge/noarch \u001b[90m━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.4s\n",
+ "pkgs/main/linux-64 \u001b[90m━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.4s\n",
+ "pkgs/main/noarch \u001b[90m━━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.4s\n",
+ "pkgs/r/linux-64 \u001b[90m━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.5s\n",
+ "conda-forge/linux-64 \u001b[33m━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.5s\n",
+ "conda-forge/noarch \u001b[90m━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.5s\n",
+ "pkgs/main/linux-64 \u001b[90m━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.5s\n",
+ "pkgs/main/noarch \u001b[90m━━━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.5s\n",
+ "pkgs/r/linux-64 \u001b[90m━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.6s\n",
+ "conda-forge/linux-64 \u001b[33m━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.6s\n",
+ "conda-forge/noarch \u001b[90m━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.6s\n",
+ "pkgs/main/linux-64 \u001b[90m━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.6s\n",
+ "pkgs/main/noarch \u001b[90m━━━━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.6s\n",
+ "pkgs/r/linux-64 \u001b[90m━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.6s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.7s\n",
+ "conda-forge/linux-64 \u001b[33m━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.7s\n",
+ "conda-forge/noarch \u001b[90m━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.7s\n",
+ "pkgs/main/linux-64 \u001b[90m━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.7s\n",
+ "pkgs/main/noarch \u001b[33m━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.7s\n",
+ "pkgs/r/linux-64 \u001b[90m━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.8s\n",
+ "conda-forge/linux-64 \u001b[33m━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.8s\n",
+ "conda-forge/noarch \u001b[90m━━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.8s\n",
+ "pkgs/main/linux-64 \u001b[90m━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.8s\n",
+ "pkgs/main/noarch \u001b[33m━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━\u001b[0m 352.0 B / ??.?MB @ 473.0 B/s 0.8s\n",
+ "pkgs/r/linux-64 \u001b[90m━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.8s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.9s\n",
+ "conda-forge/linux-64 \u001b[90m╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.9s\n",
+ "conda-forge/noarch \u001b[90m━━━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.9s\n",
+ "pkgs/main/linux-64 \u001b[90m━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━━\u001b[0m 31.4kB / ??.?MB @ 38.6kB/s 0.9s\n",
+ "pkgs/main/noarch \u001b[33m━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━\u001b[0m 31.4kB / ??.?MB @ 38.6kB/s 0.9s\n",
+ "pkgs/r/linux-64 \u001b[90m━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━━\u001b[0m 31.4kB / ??.?MB @ 38.6kB/s 0.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 1.0s\n",
+ "conda-forge/linux-64 \u001b[90m━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 1.0s\n",
+ "conda-forge/noarch \u001b[33m━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 1.0s\n",
+ "pkgs/main/linux-64 \u001b[90m━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━\u001b[0m 94.3kB / ??.?MB @ 98.2kB/s 1.0s\n",
+ "pkgs/main/noarch \u001b[33m━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━\u001b[0m 135.3kB / ??.?MB @ 140.9kB/s 1.0s\n",
+ "pkgs/r/linux-64 \u001b[90m━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━\u001b[0m 135.3kB / ??.?MB @ 140.9kB/s 1.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 1.1s\n",
+ "conda-forge/linux-64 \u001b[90m━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━\u001b[0m 31.7kB / ??.?MB @ 29.3kB/s 1.1s\n",
+ "conda-forge/noarch \u001b[33m━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━\u001b[0m 32.2kB / ??.?MB @ 29.7kB/s 1.1s\n",
+ "pkgs/main/linux-64 \u001b[90m━━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━\u001b[0m 131.6kB / ??.?MB @ 121.7kB/s 1.1s\n",
+ "pkgs/main/noarch \u001b[33m━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━\u001b[0m 176.5kB / ??.?MB @ 163.2kB/s 1.1s\n",
+ "pkgs/r/linux-64 \u001b[90m━━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━\u001b[0m 151.7kB / ??.?MB @ 140.3kB/s 1.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 1.2s\n",
+ "conda-forge/linux-64 \u001b[90m━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━━\u001b[0m 31.7kB / ??.?MB @ 26.8kB/s 1.2s\n",
+ "conda-forge/noarch \u001b[33m━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━\u001b[0m 32.2kB / ??.?MB @ 27.2kB/s 1.2s\n",
+ "pkgs/main/linux-64 \u001b[33m━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━\u001b[0m 278.5kB / ??.?MB @ 235.5kB/s 1.2s\n",
+ "pkgs/main/noarch \u001b[90m━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━\u001b[0m 356.3kB / ??.?MB @ 301.3kB/s 1.2s\n",
+ "pkgs/r/linux-64 \u001b[90m━━━━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━\u001b[0m 327.6kB / ??.?MB @ 277.1kB/s 1.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 1.3s\n",
+ "conda-forge/linux-64 \u001b[90m━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━\u001b[0m 136.6kB / ??.?MB @ 106.5kB/s 1.3s\n",
+ "conda-forge/noarch \u001b[33m━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━\u001b[0m 136.7kB / ??.?MB @ 106.6kB/s 1.3s\n",
+ "pkgs/main/linux-64 \u001b[33m━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━\u001b[0m 360.4kB / ??.?MB @ 281.0kB/s 1.3s\n",
+ "pkgs/main/noarch \u001b[90m━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━\u001b[0m 585.5kB / ??.?MB @ 456.6kB/s 1.3s\n",
+ "pkgs/r/linux-64 \u001b[33m━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━\u001b[0m 425.9kB / ??.?MB @ 332.1kB/s 1.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 1.4s\n",
+ "conda-forge/linux-64 \u001b[90m━━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━\u001b[0m 136.6kB / ??.?MB @ 98.8kB/s 1.4s\n",
+ "conda-forge/noarch \u001b[90m━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━\u001b[0m 136.7kB / ??.?MB @ 98.9kB/s 1.4s\n",
+ "pkgs/main/linux-64 \u001b[33m━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━\u001b[0m 561.1kB / ??.?MB @ 405.7kB/s 1.4s\n",
+ "pkgs/main/noarch \u001b[90m━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━\u001b[0m 814.8kB / ??.?MB @ 589.2kB/s 1.4s\n",
+ "pkgs/r/linux-64 \u001b[33m━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━\u001b[0m 671.5kB / ??.?MB @ 485.6kB/s 1.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gpkgs/main/noarch 853.2kB @ 604.2kB/s 1.4s\n",
+ "[+] 1.5s\n",
+ "conda-forge/linux-64 \u001b[90m━━━━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━\u001b[0m 330.2kB / ??.?MB @ 222.6kB/s 1.5s\n",
+ "conda-forge/noarch \u001b[90m━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━\u001b[0m 347.0kB / ??.?MB @ 233.9kB/s 1.5s\n",
+ "pkgs/main/linux-64 \u001b[33m━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━\u001b[0m 851.9kB / ??.?MB @ 574.3kB/s 1.5s\n",
+ "pkgs/r/linux-64 \u001b[33m━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━\u001b[0m 999.0kB / ??.?MB @ 673.5kB/s 1.5s\n",
+ "pkgs/r/noarch \u001b[90m━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 1.6s\n",
+ "conda-forge/linux-64 \u001b[33m━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━\u001b[0m 395.6kB / ??.?MB @ 249.8kB/s 1.6s\n",
+ "conda-forge/noarch \u001b[90m━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━\u001b[0m 379.7kB / ??.?MB @ 239.8kB/s 1.6s\n",
+ "pkgs/main/linux-64 \u001b[90m╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━\u001b[0m 1.2MB / ??.?MB @ 786.2kB/s 1.6s\n",
+ "pkgs/r/linux-64 \u001b[90m╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━\u001b[0m 1.4MB / ??.?MB @ 910.1kB/s 1.6s\n",
+ "pkgs/r/noarch \u001b[90m━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gpkgs/r/linux-64 1.9MB @ 1.1MB/s 1.7s\n",
+ "[+] 1.7s\n",
+ "conda-forge/linux-64 \u001b[33m━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━\u001b[0m 739.2kB / ??.?MB @ 438.8kB/s 1.7s\n",
+ "conda-forge/noarch \u001b[90m━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━\u001b[0m 756.0kB / ??.?MB @ 448.8kB/s 1.7s\n",
+ "pkgs/main/linux-64 \u001b[90m━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━\u001b[0m 1.8MB / ??.?MB @ 1.1MB/s 1.7s\n",
+ "pkgs/r/noarch \u001b[90m━━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━\u001b[0m 237.6kB / ??.?MB @ 142.3kB/s 0.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 1.8s\n",
+ "conda-forge/linux-64 \u001b[33m━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━\u001b[0m 902.8kB / ??.?MB @ 505.7kB/s 1.8s\n",
+ "conda-forge/noarch \u001b[90m━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━\u001b[0m 886.9kB / ??.?MB @ 496.9kB/s 1.8s\n",
+ "pkgs/main/linux-64 \u001b[90m━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━\u001b[0m 2.6MB / ??.?MB @ 1.4MB/s 1.8s\n",
+ "pkgs/r/noarch \u001b[33m━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━\u001b[0m 860.2kB / ??.?MB @ 486.0kB/s 0.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 1.9s\n",
+ "conda-forge/linux-64 \u001b[90m╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━\u001b[0m 1.3MB / ??.?MB @ 708.7kB/s 1.9s\n",
+ "conda-forge/noarch \u001b[90m━━━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━\u001b[0m 1.3MB / ??.?MB @ 704.3kB/s 1.9s\n",
+ "pkgs/main/linux-64 \u001b[90m━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━━\u001b[0m 3.2MB / ??.?MB @ 1.7MB/s 1.9s\n",
+ "pkgs/r/noarch \u001b[33m━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━\u001b[0m 1.4MB / ??.?MB @ 724.9kB/s 0.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 2.0s\n",
+ "conda-forge/linux-64 \u001b[90m━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━\u001b[0m 1.9MB / ??.?MB @ 980.9kB/s 2.0s\n",
+ "conda-forge/noarch \u001b[33m━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━\u001b[0m 1.9MB / ??.?MB @ 973.1kB/s 2.0s\n",
+ "pkgs/main/linux-64 \u001b[90m━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━\u001b[0m 3.6MB / ??.?MB @ 1.8MB/s 2.0s\n",
+ "pkgs/r/noarch \u001b[33m━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━\u001b[0m 1.8MB / ??.?MB @ 926.9kB/s 0.6s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 2.1s\n",
+ "conda-forge/linux-64 \u001b[90m━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━\u001b[0m 2.3MB / ??.?MB @ 1.1MB/s 2.1s\n",
+ "conda-forge/noarch \u001b[33m━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━\u001b[0m 2.3MB / ??.?MB @ 1.1MB/s 2.1s\n",
+ "pkgs/main/linux-64 \u001b[90m━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━\u001b[0m 3.9MB / ??.?MB @ 1.9MB/s 2.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gpkgs/r/noarch 2.3MB @ 1.1MB/s 0.7s\n",
+ "[+] 2.2s\n",
+ "conda-forge/linux-64 \u001b[90m━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━\u001b[0m 3.4MB / ??.?MB @ 1.6MB/s 2.2s\n",
+ "conda-forge/noarch \u001b[33m━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━\u001b[0m 3.4MB / ??.?MB @ 1.6MB/s 2.2s\n",
+ "pkgs/main/linux-64 \u001b[90m━━━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━\u001b[0m 4.6MB / ??.?MB @ 2.1MB/s 2.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 2.3s\n",
+ "conda-forge/linux-64 \u001b[90m━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━\u001b[0m 4.3MB / ??.?MB @ 1.9MB/s 2.3s\n",
+ "conda-forge/noarch \u001b[33m━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━\u001b[0m 4.6MB / ??.?MB @ 2.0MB/s 2.3s\n",
+ "pkgs/main/linux-64 \u001b[33m━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━\u001b[0m 5.2MB / ??.?MB @ 2.3MB/s 2.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 2.4s\n",
+ "conda-forge/linux-64 \u001b[90m━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━\u001b[0m 5.1MB / ??.?MB @ 2.2MB/s 2.4s\n",
+ "conda-forge/noarch \u001b[90m╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━\u001b[0m 5.5MB / ??.?MB @ 2.3MB/s 2.4s\n",
+ "pkgs/main/linux-64 \u001b[33m━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━\u001b[0m 5.8MB / ??.?MB @ 2.4MB/s 2.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 2.5s\n",
+ "conda-forge/linux-64 \u001b[90m━━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━\u001b[0m 6.1MB @ 2.5MB/s 2.5s\n",
+ "conda-forge/noarch \u001b[90m━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━\u001b[0m 6.5MB @ 2.6MB/s 2.5s\n",
+ "pkgs/main/linux-64 ━━━━━━━━━━━━━━━━━━━━━━ 6.3MB @ 2.6MB/s Finalizing 2.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gpkgs/main/linux-64 @ 2.6MB/s 2.5s\n",
+ "[+] 2.6s\n",
+ "conda-forge/linux-64 \u001b[33m━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━\u001b[0m 7.1MB / ??.?MB @ 2.7MB/s 2.6s\n",
+ "conda-forge/noarch \u001b[90m━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━\u001b[0m 7.6MB / ??.?MB @ 2.9MB/s 2.6s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 2.7s\n",
+ "conda-forge/linux-64 \u001b[33m━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━\u001b[0m 8.1MB / ??.?MB @ 3.0MB/s 2.7s\n",
+ "conda-forge/noarch \u001b[90m━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━━\u001b[0m 8.8MB / ??.?MB @ 3.3MB/s 2.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 2.8s\n",
+ "conda-forge/linux-64 \u001b[33m━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━\u001b[0m 9.0MB / ??.?MB @ 3.2MB/s 2.8s\n",
+ "conda-forge/noarch \u001b[90m━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━\u001b[0m 9.8MB / ??.?MB @ 3.5MB/s 2.8s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 2.9s\n",
+ "conda-forge/linux-64 \u001b[33m━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━\u001b[0m 10.0MB / ??.?MB @ 3.5MB/s 2.9s\n",
+ "conda-forge/noarch \u001b[90m━━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━\u001b[0m 10.8MB / ??.?MB @ 3.7MB/s 2.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.0s\n",
+ "conda-forge/linux-64 \u001b[90m╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━\u001b[0m 10.5MB / ??.?MB @ 3.6MB/s 3.0s\n",
+ "conda-forge/noarch \u001b[90m━━━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━\u001b[0m 11.3MB / ??.?MB @ 3.8MB/s 3.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.1s\n",
+ "conda-forge/linux-64 \u001b[90m╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━\u001b[0m 10.5MB / ??.?MB @ 3.6MB/s 3.1s\n",
+ "conda-forge/noarch \u001b[90m━━━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━\u001b[0m 11.3MB / ??.?MB @ 3.8MB/s 3.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.2s\n",
+ "conda-forge/linux-64 \u001b[90m━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━\u001b[0m 10.8MB / ??.?MB @ 3.4MB/s 3.2s\n",
+ "conda-forge/noarch \u001b[90m━━━━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━\u001b[0m 11.5MB / ??.?MB @ 3.6MB/s 3.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.3s\n",
+ "conda-forge/linux-64 \u001b[90m━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━\u001b[0m 10.8MB / ??.?MB @ 3.4MB/s 3.3s\n",
+ "conda-forge/noarch \u001b[90m━━━━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━\u001b[0m 11.5MB / ??.?MB @ 3.6MB/s 3.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.4s\n",
+ "conda-forge/linux-64 \u001b[90m━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━\u001b[0m 10.8MB / ??.?MB @ 3.4MB/s 3.4s\n",
+ "conda-forge/noarch \u001b[90m━━━━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━\u001b[0m 11.5MB / ??.?MB @ 3.6MB/s 3.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.5s\n",
+ "conda-forge/linux-64 \u001b[90m━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━\u001b[0m 11.8MB / ??.?MB @ 3.4MB/s 3.5s\n",
+ "conda-forge/noarch \u001b[33m━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━\u001b[0m 12.3MB / ??.?MB @ 3.5MB/s 3.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.6s\n",
+ "conda-forge/linux-64 \u001b[90m━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━\u001b[0m 12.2MB / ??.?MB @ 3.4MB/s 3.6s\n",
+ "conda-forge/noarch \u001b[33m━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━\u001b[0m 14.5MB / ??.?MB @ 4.0MB/s 3.6s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.7s\n",
+ "conda-forge/linux-64 \u001b[90m━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━\u001b[0m 12.2MB @ 3.4MB/s 3.7s\n",
+ "conda-forge/noarch ━━━━━━━━━━━━━━━━━━━━━━ 14.5MB @ 4.0MB/s Downloaded 3.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.8s\n",
+ "conda-forge/linux-64 \u001b[90m━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━\u001b[0m 12.2MB / ??.?MB @ 3.4MB/s 3.8s\u001b[2K\u001b[1A\u001b[2K\u001b[0Gconda-forge/noarch @ 4.0MB/s 3.8s\n",
+ "[+] 3.9s\n",
+ "conda-forge/linux-64 \u001b[90m━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━\u001b[0m 14.1MB / ??.?MB @ 3.7MB/s 3.9s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.0s\n",
+ "conda-forge/linux-64 \u001b[90m━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━\u001b[0m 15.8MB / ??.?MB @ 4.0MB/s 4.0s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.1s\n",
+ "conda-forge/linux-64 \u001b[90m━━━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━\u001b[0m 16.9MB / ??.?MB @ 4.2MB/s 4.1s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.2s\n",
+ "conda-forge/linux-64 \u001b[33m━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━\u001b[0m 17.8MB / ??.?MB @ 4.3MB/s 4.2s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.3s\n",
+ "conda-forge/linux-64 \u001b[33m━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━\u001b[0m 18.7MB / ??.?MB @ 4.4MB/s 4.3s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.4s\n",
+ "conda-forge/linux-64 \u001b[33m━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━\u001b[0m 19.4MB / ??.?MB @ 4.4MB/s 4.4s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.5s\n",
+ "conda-forge/linux-64 \u001b[33m━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━\u001b[0m 20.1MB / ??.?MB @ 4.5MB/s 4.5s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.6s\n",
+ "conda-forge/linux-64 \u001b[90m━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━\u001b[0m 21.1MB / ??.?MB @ 4.6MB/s 4.6s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.7s\n",
+ "conda-forge/linux-64 \u001b[90m━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━\u001b[0m 22.0MB / ??.?MB @ 4.7MB/s 4.7s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.8s\n",
+ "conda-forge/linux-64 \u001b[90m━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━\u001b[0m 22.2MB / ??.?MB @ 4.7MB/s 4.8s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.9s\n",
+ "conda-forge/linux-64 \u001b[90m━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━━\u001b[0m 23.1MB / ??.?MB @ 4.8MB/s 4.9s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.0s\n",
+ "conda-forge/linux-64 \u001b[90m━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━\u001b[0m 24.0MB / ??.?MB @ 4.9MB/s 5.0s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.1s\n",
+ "conda-forge/linux-64 \u001b[90m━━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━\u001b[0m 24.9MB / ??.?MB @ 4.9MB/s 5.1s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.2s\n",
+ "conda-forge/linux-64 \u001b[90m━━━━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━\u001b[0m 25.7MB / ??.?MB @ 5.0MB/s 5.2s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.3s\n",
+ "conda-forge/linux-64 \u001b[33m━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━\u001b[0m 26.7MB / ??.?MB @ 5.1MB/s 5.3s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.4s\n",
+ "conda-forge/linux-64 \u001b[33m━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━\u001b[0m 27.7MB / ??.?MB @ 5.2MB/s 5.4s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.5s\n",
+ "conda-forge/linux-64 \u001b[33m━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━\u001b[0m 28.6MB / ??.?MB @ 5.2MB/s 5.5s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.6s\n",
+ "conda-forge/linux-64 \u001b[90m╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━\u001b[0m 29.6MB / ??.?MB @ 5.3MB/s 5.6s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.7s\n",
+ "conda-forge/linux-64 \u001b[90m━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━\u001b[0m 30.5MB / ??.?MB @ 5.4MB/s 5.7s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.8s\n",
+ "conda-forge/linux-64 \u001b[90m━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━\u001b[0m 30.6MB / ??.?MB @ 5.3MB/s 5.8s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.9s\n",
+ "conda-forge/linux-64 \u001b[90m━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━\u001b[0m 32.4MB / ??.?MB @ 5.5MB/s 5.9s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 6.0s\n",
+ "conda-forge/linux-64 \u001b[90m━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━\u001b[0m 33.4MB / ??.?MB @ 5.6MB/s 6.0s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 6.1s\n",
+ "conda-forge/linux-64 \u001b[90m━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━\u001b[0m 34.4MB / ??.?MB @ 5.7MB/s 6.1s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 6.2s\n",
+ "conda-forge/linux-64 \u001b[90m━━━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━\u001b[0m 35.3MB / ??.?MB @ 5.7MB/s 6.2s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 6.3s\n",
+ "conda-forge/linux-64 \u001b[90m━━━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━\u001b[0m 35.3MB / ??.?MB @ 5.7MB/s 6.3s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 6.4s\n",
+ "conda-forge/linux-64 ━━━━━━━━━━━━━━━━━━━━━━ 35.7MB @ 5.7MB/s Downloaded 6.4s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 6.5s\n",
+ "conda-forge/linux-64 ━━━━━━━━━━━━━━━━━━━━━━ 35.7MB @ 5.7MB/s Downloaded 6.5s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 6.6s\n",
+ "conda-forge/linux-64 ━━━━━━━━━━━━━━━━━━━━━━ 35.7MB @ 5.7MB/s Downloaded 6.6s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 6.7s\n",
+ "conda-forge/linux-64 ━━━━━━━━━━━━━━━━━━━━━━ 35.7MB @ 5.7MB/s Downloaded 6.7s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 6.8s\n",
+ "conda-forge/linux-64 ━━━━━━━━━━━━━━━━━━━━━━ 35.7MB @ 5.7MB/s Downloaded 6.8s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 6.9s\n",
+ "conda-forge/linux-64 ━━━━━━━━━━━━━━━━━━━━━━ 35.7MB @ 5.7MB/s Downloaded 6.9s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.0s\n",
+ "conda-forge/linux-64 ━━━━━━━━━━━━━━━━━━━━━━ 35.7MB @ 5.7MB/s Downloaded 7.0s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.1s\n",
+ "conda-forge/linux-64 ━━━━━━━━━━━━━━━━━━━━━━ 35.7MB @ 5.7MB/s Finalizing 7.1s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.2s\n",
+ "conda-forge/linux-64 ━━━━━━━━━━━━━━━━━━━━━━ 35.7MB @ 5.7MB/s Finalizing 7.2s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.3s\n",
+ "conda-forge/linux-64 ━━━━━━━━━━━━━━━━━━━━━━ 35.7MB @ 5.7MB/s Finalizing 7.3s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.4s\n",
+ "\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.5s\n",
+ "\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.6s\n",
+ "\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.7s\n",
+ "\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.8s\n",
+ "\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.9s\n",
+ "\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 8.0s\n",
+ "\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 8.1s\n",
+ "\u001b[2K\u001b[1A\u001b[2K\u001b[0Gconda-forge/linux-64 @ 5.7MB/s 7.3s\n",
+ "\u001b[?25h\n",
+ "Pinned packages:\n",
+ " - python 3.10.*\n",
+ "\n",
+ "\n",
+ "Transaction\n",
+ "\n",
+ " Prefix: /opt/mamba\n",
+ "\n",
+ " Updating specs:\n",
+ "\n",
+ " - openmm=7.7.0\n",
+ " - rdkit\n",
+ " - ca-certificates\n",
+ " - certifi\n",
+ " - openssl\n",
+ "\n",
+ "\n",
+ " Package Version Build Channel Size\n",
+ "──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n",
+ " Install:\n",
+ "──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n",
+ "\n",
+ "\u001b[32m + archspec \u001b[00m 0.2.2 pyhd8ed1ab_0 conda-forge/noarch 42kB\n",
+ "\u001b[32m + boltons \u001b[00m 23.0.0 pyhd8ed1ab_0 conda-forge/noarch 303kB\n",
+ "\u001b[32m + brotli \u001b[00m 1.1.0 hd590300_1 conda-forge/linux-64 19kB\n",
+ "\u001b[32m + brotli-bin \u001b[00m 1.1.0 hd590300_1 conda-forge/linux-64 19kB\n",
+ "\u001b[32m + cairo \u001b[00m 1.18.0 h3faef2a_0 conda-forge/linux-64 982kB\n",
+ "\u001b[32m + conda-libmamba-solver \u001b[00m 23.11.0 pyhd8ed1ab_0 conda-forge/noarch 47kB\n",
+ "\u001b[32m + conda-package-streaming \u001b[00m 0.9.0 pyhd8ed1ab_0 conda-forge/noarch 19kB\n",
+ "\u001b[32m + contourpy \u001b[00m 1.2.0 py310hd41b1e2_0 conda-forge/linux-64 239kB\n",
+ "\u001b[32m + cycler \u001b[00m 0.12.1 pyhd8ed1ab_0 conda-forge/noarch 13kB\n",
+ "\u001b[32m + expat \u001b[00m 2.5.0 hcb278e6_1 conda-forge/linux-64 137kB\n",
+ "\u001b[32m + fmt \u001b[00m 10.1.1 h00ab1b0_0 conda-forge/linux-64 192kB\n",
+ "\u001b[32m + font-ttf-dejavu-sans-mono\u001b[00m 2.37 hab24e00_0 conda-forge/noarch 397kB\n",
+ "\u001b[32m + font-ttf-inconsolata \u001b[00m 3.000 h77eed37_0 conda-forge/noarch 97kB\n",
+ "\u001b[32m + font-ttf-source-code-pro \u001b[00m 2.038 h77eed37_0 conda-forge/noarch 701kB\n",
+ "\u001b[32m + font-ttf-ubuntu \u001b[00m 0.83 hab24e00_0 conda-forge/noarch 2MB\n",
+ "\u001b[32m + fontconfig \u001b[00m 2.14.2 h14ed4e7_0 conda-forge/linux-64 272kB\n",
+ "\u001b[32m + fonts-conda-ecosystem \u001b[00m 1 0 conda-forge/noarch 4kB\n",
+ "\u001b[32m + fonts-conda-forge \u001b[00m 1 0 conda-forge/noarch 4kB\n",
+ "\u001b[32m + fonttools \u001b[00m 4.44.0 py310h2372a71_0 conda-forge/linux-64 2MB\n",
+ "\u001b[32m + freetype \u001b[00m 2.12.1 h267a509_2 conda-forge/linux-64 635kB\n",
+ "\u001b[32m + freetype-py \u001b[00m 2.3.0 pyhd8ed1ab_0 conda-forge/noarch 59kB\n",
+ "\u001b[32m + gettext \u001b[00m 0.21.1 h27087fc_0 conda-forge/linux-64 4MB\n",
+ "\u001b[32m + greenlet \u001b[00m 3.0.1 py310hc6cd4ac_0 conda-forge/linux-64 206kB\n",
+ "\u001b[32m + jsonpatch \u001b[00m 1.33 pyhd8ed1ab_0 conda-forge/noarch 17kB\n",
+ "\u001b[32m + jsonpointer \u001b[00m 2.4 py310hff52083_3 conda-forge/linux-64 16kB\n",
+ "\u001b[32m + kiwisolver \u001b[00m 1.4.5 py310hd41b1e2_1 conda-forge/linux-64 73kB\n",
+ "\u001b[32m + lcms2 \u001b[00m 2.15 h7f713cb_2 conda-forge/linux-64 241kB\n",
+ "\u001b[32m + lerc \u001b[00m 4.0.0 h27087fc_0 conda-forge/linux-64 282kB\n",
+ "\u001b[32m + libboost \u001b[00m 1.82.0 h6fcfa73_6 conda-forge/linux-64 3MB\n",
+ "\u001b[32m + libboost-python \u001b[00m 1.82.0 py310hcb52e73_6 conda-forge/linux-64 119kB\n",
+ "\u001b[32m + libbrotlicommon \u001b[00m 1.1.0 hd590300_1 conda-forge/linux-64 69kB\n",
+ "\u001b[32m + libbrotlidec \u001b[00m 1.1.0 hd590300_1 conda-forge/linux-64 33kB\n",
+ "\u001b[32m + libbrotlienc \u001b[00m 1.1.0 hd590300_1 conda-forge/linux-64 283kB\n",
+ "\u001b[32m + libdeflate \u001b[00m 1.19 hd590300_0 conda-forge/linux-64 67kB\n",
+ "\u001b[32m + libexpat \u001b[00m 2.5.0 hcb278e6_1 conda-forge/linux-64 78kB\n",
+ "\u001b[32m + libglib \u001b[00m 2.78.1 hebfc3b9_0 conda-forge/linux-64 3MB\n",
+ "\u001b[32m + libjpeg-turbo \u001b[00m 2.1.5.1 hd590300_1 conda-forge/linux-64 496kB\n",
+ "\u001b[32m + libpng \u001b[00m 1.6.39 h753d276_0 conda-forge/linux-64 283kB\n",
+ "\u001b[32m + libtiff \u001b[00m 4.6.0 h29866fb_1 conda-forge/linux-64 277kB\n",
+ "\u001b[32m + libwebp-base \u001b[00m 1.3.2 hd590300_0 conda-forge/linux-64 402kB\n",
+ "\u001b[32m + libxcb \u001b[00m 1.15 h0b41bf4_0 conda-forge/linux-64 384kB\n",
+ "\u001b[32m + matplotlib-base \u001b[00m 3.8.0 py310h62c0568_1 conda-forge/linux-64 7MB\n",
+ "\u001b[32m + munkres \u001b[00m 1.1.4 pyh9f0ad1d_0 conda-forge/noarch 12kB\n",
+ "\u001b[32m + openjpeg \u001b[00m 2.5.0 h488ebb8_3 conda-forge/linux-64 357kB\n",
+ "\u001b[32m + pcre2 \u001b[00m 10.40 hc3806b6_0 conda-forge/linux-64 2MB\n",
+ "\u001b[32m + pillow \u001b[00m 10.0.1 py310h29da1c1_1 conda-forge/linux-64 46MB\n",
+ "\u001b[32m + pixman \u001b[00m 0.42.2 h59595ed_0 conda-forge/linux-64 385kB\n",
+ "\u001b[32m + pthread-stubs \u001b[00m 0.4 h36c2ea0_1001 conda-forge/linux-64 6kB\n",
+ "\u001b[32m + pycairo \u001b[00m 1.25.1 py310hda9f760_0 conda-forge/linux-64 116kB\n",
+ "\u001b[32m + rdkit \u001b[00m 2023.09.1 py310hb79e901_0 conda-forge/linux-64 37MB\n",
+ "\u001b[32m + reportlab \u001b[00m 4.0.7 py310h2372a71_0 conda-forge/linux-64 2MB\n",
+ "\u001b[32m + rlpycairo \u001b[00m 0.2.0 pyhd8ed1ab_0 conda-forge/noarch 15kB\n",
+ "\u001b[32m + sqlalchemy \u001b[00m 2.0.23 py310h2372a71_0 conda-forge/linux-64 3MB\n",
+ "\u001b[32m + truststore \u001b[00m 0.8.0 pyhd8ed1ab_0 conda-forge/noarch 21kB\n",
+ "\u001b[32m + typing-extensions \u001b[00m 4.8.0 hd8ed1ab_0 conda-forge/noarch 10kB\n",
+ "\u001b[32m + typing_extensions \u001b[00m 4.8.0 pyha770c72_0 conda-forge/noarch 35kB\n",
+ "\u001b[32m + unicodedata2 \u001b[00m 15.1.0 py310h2372a71_0 conda-forge/linux-64 374kB\n",
+ "\u001b[32m + xorg-kbproto \u001b[00m 1.0.7 h7f98852_1002 conda-forge/linux-64 27kB\n",
+ "\u001b[32m + xorg-libice \u001b[00m 1.1.1 hd590300_0 conda-forge/linux-64 58kB\n",
+ "\u001b[32m + xorg-libsm \u001b[00m 1.2.4 h7391055_0 conda-forge/linux-64 27kB\n",
+ "\u001b[32m + xorg-libx11 \u001b[00m 1.8.7 h8ee46fc_0 conda-forge/linux-64 829kB\n",
+ "\u001b[32m + xorg-libxau \u001b[00m 1.0.11 hd590300_0 conda-forge/linux-64 14kB\n",
+ "\u001b[32m + xorg-libxdmcp \u001b[00m 1.1.3 h7f98852_0 conda-forge/linux-64 19kB\n",
+ "\u001b[32m + xorg-libxext \u001b[00m 1.3.4 h0b41bf4_2 conda-forge/linux-64 50kB\n",
+ "\u001b[32m + xorg-libxrender \u001b[00m 0.9.11 hd590300_0 conda-forge/linux-64 38kB\n",
+ "\u001b[32m + xorg-renderproto \u001b[00m 0.11.1 h7f98852_1002 conda-forge/linux-64 10kB\n",
+ "\u001b[32m + xorg-xextproto \u001b[00m 7.3.0 h0b41bf4_1003 conda-forge/linux-64 30kB\n",
+ "\u001b[32m + xorg-xproto \u001b[00m 7.0.31 h7f98852_1007 conda-forge/linux-64 75kB\n",
+ "\u001b[32m + zstandard \u001b[00m 0.22.0 py310h1275a96_0 conda-forge/linux-64 404kB\n",
+ "\n",
+ " Change:\n",
+ "──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n",
+ "\n",
+ "\u001b[31m - hdf5 \u001b[00m 1.12.1 h70be1eb_2 mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main \n",
+ "\u001b[32m + hdf5 \u001b[00m 1.12.1 nompi_h4df4325_104 conda-forge/linux-64 4MB\n",
+ "\u001b[31m - python \u001b[00m 3.10.6 h582c2e5_0_cpython conda-forge \n",
+ "\u001b[32m + python \u001b[00m 3.10.6 ha86cf86_0_cpython conda-forge/linux-64 30MB\n",
+ "\n",
+ " Upgrade:\n",
+ "──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n",
+ "\n",
+ "\u001b[31m - c-ares \u001b[00m 1.18.1 h7f98852_0 conda-forge \n",
+ "\u001b[32m + c-ares \u001b[00m 1.21.0 hd590300_0 conda-forge/linux-64 122kB\n",
+ "\u001b[31m - ca-certificates \u001b[00m 2022.10.11 h06a4308_0 mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main \n",
+ "\u001b[32m + ca-certificates \u001b[00m 2023.7.22 hbcca054_0 conda-forge/linux-64 150kB\n",
+ "\u001b[31m - certifi \u001b[00m 2022.9.24 py310h06a4308_0 mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main \n",
+ "\u001b[32m + certifi \u001b[00m 2023.7.22 pyhd8ed1ab_0 conda-forge/noarch 154kB\n",
+ "\u001b[31m - conda \u001b[00m 22.11.0 py310h06a4308_1 mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main \n",
+ "\u001b[32m + conda \u001b[00m 23.10.0 py310hff52083_1 conda-forge/linux-64 969kB\n",
+ "\u001b[31m - conda-package-handling \u001b[00m 1.9.0 py310h5764c6d_0 conda-forge \n",
+ "\u001b[32m + conda-package-handling \u001b[00m 2.2.0 pyh38be061_0 conda-forge/noarch 255kB\n",
+ "\u001b[31m - cryptography \u001b[00m 38.0.2 py310h597c629_1 conda-forge \n",
+ "\u001b[32m + cryptography \u001b[00m 41.0.5 py310h75e40e8_0 conda-forge/linux-64 2MB\n",
+ "\u001b[31m - icu \u001b[00m 70.1 h27087fc_0 conda-forge \n",
+ "\u001b[32m + icu \u001b[00m 73.2 h59595ed_0 conda-forge/linux-64 12MB\n",
+ "\u001b[31m - krb5 \u001b[00m 1.19.3 h3790be6_0 conda-forge \n",
+ "\u001b[32m + krb5 \u001b[00m 1.21.2 h659d440_0 conda-forge/linux-64 1MB\n",
+ "\u001b[31m - libarchive \u001b[00m 3.5.2 hb890918_3 conda-forge \n",
+ "\u001b[32m + libarchive \u001b[00m 3.7.2 h039dbb9_0 conda-forge/linux-64 866kB\n",
+ "\u001b[31m - libcurl \u001b[00m 7.86.0 h7bff187_0 conda-forge \n",
+ "\u001b[32m + libcurl \u001b[00m 8.4.0 hca28451_0 conda-forge/linux-64 386kB\n",
+ "\u001b[31m - libmamba \u001b[00m 0.27.0 h0dd8ff0_0 conda-forge \n",
+ "\u001b[32m + libmamba \u001b[00m 1.5.3 had39da4_1 conda-forge/linux-64 2MB\n",
+ "\u001b[31m - libmambapy \u001b[00m 0.27.0 py310hab0e683_0 conda-forge \n",
+ "\u001b[32m + libmambapy \u001b[00m 1.5.3 py310h39ff949_1 conda-forge/linux-64 303kB\n",
+ "\u001b[31m - libnghttp2 \u001b[00m 1.47.0 hdcd2b5c_1 conda-forge \n",
+ "\u001b[32m + libnghttp2 \u001b[00m 1.58.0 h47da74e_0 conda-forge/linux-64 631kB\n",
+ "\u001b[31m - libssh2 \u001b[00m 1.10.0 haa6b8db_3 conda-forge \n",
+ "\u001b[32m + libssh2 \u001b[00m 1.11.0 h0841786_0 conda-forge/linux-64 271kB\n",
+ "\u001b[31m - libuuid \u001b[00m 2.32.1 h7f98852_1000 conda-forge \n",
+ "\u001b[32m + libuuid \u001b[00m 2.38.1 h0b41bf4_0 conda-forge/linux-64 34kB\n",
+ "\u001b[31m - libxml2 \u001b[00m 2.10.3 h7463322_0 conda-forge \n",
+ "\u001b[32m + libxml2 \u001b[00m 2.11.5 h232c23b_1 conda-forge/linux-64 706kB\n",
+ "\u001b[31m - mamba \u001b[00m 0.27.0 py310hf87f941_0 conda-forge \n",
+ "\u001b[32m + mamba \u001b[00m 1.5.3 py310h51d5547_1 conda-forge/linux-64 52kB\n",
+ "\u001b[31m - openssl \u001b[00m 1.1.1s h7f8727e_0 mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main \n",
+ "\u001b[32m + openssl \u001b[00m 3.1.4 hd590300_0 conda-forge/linux-64 3MB\n",
+ "\u001b[31m - packaging \u001b[00m 21.3 pyhd3eb1b0_0 mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main \n",
+ "\u001b[32m + packaging \u001b[00m 23.2 pyhd8ed1ab_0 conda-forge/noarch 49kB\n",
+ "\u001b[31m - pyopenssl \u001b[00m 22.1.0 pyhd8ed1ab_0 conda-forge \n",
+ "\u001b[32m + pyopenssl \u001b[00m 23.3.0 pyhd8ed1ab_0 conda-forge/noarch 127kB\n",
+ "\u001b[31m - yaml-cpp \u001b[00m 0.7.0 h27087fc_2 conda-forge \n",
+ "\u001b[32m + yaml-cpp \u001b[00m 0.8.0 h59595ed_0 conda-forge/linux-64 205kB\n",
+ "\u001b[31m - zstd \u001b[00m 1.5.2 h6239696_4 conda-forge \n",
+ "\u001b[32m + zstd \u001b[00m 1.5.5 hfc55251_0 conda-forge/linux-64 545kB\n",
+ "\n",
+ " Summary:\n",
+ "\n",
+ " Install: 69 packages\n",
+ " Change: 2 packages\n",
+ " Upgrade: 22 packages\n",
+ "\n",
+ " Total download: 182MB\n",
+ "\n",
+ "──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n",
+ "\n",
+ "\u001b[?25l\u001b[2K\u001b[0G[+] 0.0s\n",
+ "Downloading \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 0.0 B 0.0s\n",
+ "Extracting \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 0 0.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.1s\n",
+ "Downloading (5) \u001b[33m╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 0.0 B ca-certificates 0.0s\n",
+ "Extracting \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 0 0.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.2s\n",
+ "Downloading (5) \u001b[33m╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 0.0 B ca-certificates 0.1s\n",
+ "Extracting \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 0 0.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.3s\n",
+ "Downloading (5) \u001b[33m╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 0.0 B ca-certificates 0.2s\n",
+ "Extracting \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 0 0.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.4s\n",
+ "Downloading (5) \u001b[33m╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 0.0 B ca-certificates 0.3s\n",
+ "Extracting \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 0 0.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.5s\n",
+ "Downloading (5) \u001b[33m╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 0.0 B icu 0.4s\n",
+ "Extracting \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 0 0.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.6s\n",
+ "Downloading (5) \u001b[33m╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 0.0 B icu 0.5s\n",
+ "Extracting \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 0 0.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.7s\n",
+ "Downloading (5) \u001b[33m╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 0.0 B icu 0.6s\n",
+ "Extracting \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 0 0.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.8s\n",
+ "Downloading (5) \u001b[33m╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 499.0 B icu 0.7s\n",
+ "Extracting \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 0 0.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.9s\n",
+ "Downloading (5) \u001b[33m╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 130.6kB libuuid 0.8s\n",
+ "Extracting \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 0 0.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibuuid 33.6kB @ 35.2kB/s 1.0s\n",
+ "xorg-libice 58.5kB @ 60.1kB/s 1.0s\n",
+ "[+] 1.0s\n",
+ "Downloading (5) \u001b[33m╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 189.8kB ca-certificates 0.9s\n",
+ "Extracting (2) \u001b[90m━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━\u001b[0m 0 libuuid 0.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 1.1s\n",
+ "Downloading (5) \u001b[33m╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 455.9kB ca-certificates 1.0s\n",
+ "Extracting (2) \u001b[90m━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━\u001b[0m 0 libuuid 0.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gca-certificates 149.5kB @ 132.2kB/s 1.1s\n",
+ "[+] 1.2s\n",
+ "Downloading (5) \u001b[33m╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 877.7kB icu 1.1s\n",
+ "Extracting (3) \u001b[90m━━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━\u001b[0m 0 libuuid 0.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 1.3s\n",
+ "Downloading (5) \u001b[33m╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 955.9kB icu 1.2s\n",
+ "Extracting (3) \u001b[90m━━━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━\u001b[0m 0 libuuid 0.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gpixman 385.3kB @ 295.5kB/s 1.3s\n",
+ "libdeflate 67.1kB @ 49.8kB/s 0.2s\n",
+ "libpng 282.6kB @ 203.8kB/s 0.4s\n",
+ "[+] 1.4s\n",
+ "Downloading (5) \u001b[33m╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 1.6MB icu 1.3s\n",
+ "Extracting (6) \u001b[33m━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━\u001b[0m 0 pixman 0.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 1.5s\n",
+ "Downloading (5) \u001b[33m╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 1.6MB icu 1.4s\n",
+ "Extracting (5) \u001b[33m━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━\u001b[0m 1 pixman 0.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibbrotlicommon 69.4kB @ 45.7kB/s 0.2s\n",
+ "xorg-xproto 74.9kB @ 47.8kB/s 0.2s\n",
+ "[+] 1.6s\n",
+ "Downloading (5) \u001b[33m━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━━━\u001b[0m 2.0MB libboost 1.5s\n",
+ "Extracting (6) \u001b[33m━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━\u001b[0m 2 pixman 0.6s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 1.7s\n",
+ "Downloading (5) \u001b[33m━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━━━\u001b[0m 2.8MB libboost 1.6s\n",
+ "Extracting (5) \u001b[33m━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━\u001b[0m 3 pixman 0.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 1.8s\n",
+ "Downloading (5) \u001b[33m━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━━━\u001b[0m 3.5MB libboost 1.7s\n",
+ "Extracting (4) \u001b[33m━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━\u001b[0m 4 xorg-xproto 0.8s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibxml2 705.5kB @ 385.1kB/s 0.4s\n",
+ "[+] 1.9s\n",
+ "Downloading (5) \u001b[33m━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━━━\u001b[0m 5.4MB libboost 1.8s\n",
+ "Extracting (4) ╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━━\u001b[0m 5 xorg-xproto 0.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 2.0s\n",
+ "Downloading (5) \u001b[33m━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━━\u001b[0m 6.7MB libbrotlidec 1.9s\n",
+ "Extracting (2) ╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━━\u001b[0m 7 libpng 1.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibbrotlidec 32.8kB @ 16.0kB/s 0.2s\n",
+ "pcre2 2.4MB @ 1.2MB/s 1.1s\n",
+ "[+] 2.1s\n",
+ "Downloading (5) ╸\u001b[33m━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━\u001b[0m 9.2MB icu 2.0s\n",
+ "Extracting (3) ╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━━\u001b[0m 8 libbrotlidec 1.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 2.2s\n",
+ "Downloading (5) ╸\u001b[33m━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━\u001b[0m 11.2MB icu 2.1s\n",
+ "Extracting (2) ━╸\u001b[33m╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━━\u001b[0m 9 libbrotlidec 1.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibboost 2.6MB @ 1.2MB/s 0.7s\n",
+ "[+] 2.3s\n",
+ "Downloading (5) ╸\u001b[33m━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━\u001b[0m 14.1MB icu 2.2s\n",
+ "Extracting (3) ━╸\u001b[33m╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━━\u001b[0m 9 libbrotlidec 1.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibnghttp2 631.4kB @ 268.3kB/s 0.3s\n",
+ "krb5 1.4MB @ 582.6kB/s 0.3s\n",
+ "libglib 2.7MB @ 1.1MB/s 0.8s\n",
+ "[+] 2.4s\n",
+ "Downloading (5) ━╸\u001b[33m━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━\u001b[0m 18.4MB icu 2.3s\n",
+ "Extracting (6) ━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━\u001b[0m 9 libbrotlidec 1.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gopenjpeg 356.7kB @ 146.3kB/s 0.2s\n",
+ "[+] 2.5s\n",
+ "Downloading (5) ━╸\u001b[33m━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━\u001b[0m 20.4MB pillow 2.4s\n",
+ "Extracting (6) ━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━\u001b[0m 10 krb5 1.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Ggreenlet 206.4kB @ 80.1kB/s 0.2s\n",
+ "[+] 2.6s\n",
+ "Downloading (5) ━╸\u001b[33m━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━\u001b[0m 22.1MB pillow 2.5s\n",
+ "Extracting (7) ━╸\u001b[33m━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━\u001b[0m 10 krb5 1.6s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gunicodedata2 374.1kB @ 143.0kB/s 0.3s\n",
+ "zstandard 404.0kB @ 154.4kB/s 0.2s\n",
+ "[+] 2.7s\n",
+ "Downloading (5) ━━╸\u001b[33m━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━\u001b[0m 25.5MB pillow 2.6s\n",
+ "Extracting (8) ━╸\u001b[33m━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━\u001b[0m 11 krb5 1.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gicu 12.1MB @ 4.4MB/s 2.7s\n",
+ "xorg-libxrender 37.8kB @ 13.6kB/s 0.2s\n",
+ "[+] 2.8s\n",
+ "Downloading (5) ━━╸\u001b[33m━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━\u001b[0m 28.1MB pillow 2.7s\n",
+ "Extracting (9) ━╸\u001b[33m━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━\u001b[0m 12 greenlet 1.8s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 2.9s\n",
+ "Downloading (5) ━━╸\u001b[33m━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━\u001b[0m 28.6MB truststore 2.8s\n",
+ "Extracting (8) ━━╸\u001b[33m━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━\u001b[0m 13 greenlet 1.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gmunkres 12.5kB @ 4.2kB/s 0.2s\n",
+ "truststore 20.7kB @ 6.9kB/s 0.2s\n",
+ "[+] 3.0s\n",
+ "Downloading (5) ━━╸\u001b[33m━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━\u001b[0m 29.3MB conda-package-streaming 2.9s\n",
+ "Extracting (7) ━━╸\u001b[33m━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━\u001b[0m 15 icu 2.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.1s\n",
+ "Downloading (5) ━━╸\u001b[33m━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━\u001b[0m 29.3MB conda-package-streaming 3.0s\n",
+ "Extracting (5) ━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━\u001b[0m 18 icu 2.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gpackaging 49.5kB @ 15.6kB/s 0.2s\n",
+ "[+] 3.2s\n",
+ "Downloading (5) ━━╸\u001b[33m━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━\u001b[0m 31.4MB conda-package-streaming 3.1s\n",
+ "Extracting (6) ━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━\u001b[0m 18 icu 2.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gconda-package-streaming 19.2kB @ 6.0kB/s 0.2s\n",
+ "font-ttf-source-code-pro 700.8kB @ 214.4kB/s 0.7s\n",
+ "libmambapy 302.8kB @ 92.2kB/s 0.7s\n",
+ "[+] 3.3s\n",
+ "Downloading (5) ━━╸\u001b[33m━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━\u001b[0m 32.5MB cairo 3.2s\n",
+ "Extracting (8) ━━━╸\u001b[33m━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━\u001b[0m 19 icu 2.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.4s\n",
+ "Downloading (5) ━━━╸\u001b[33m━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━\u001b[0m 33.9MB cairo 3.3s\n",
+ "Extracting (6) ━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━\u001b[0m 21 conda-package-streaming 2.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gtyping-extensions 10.1kB @ 3.0kB/s 0.2s\n",
+ "conda-libmamba-solver 46.5kB @ 13.3kB/s 0.2s\n",
+ "[+] 3.5s\n",
+ "Downloading (5) ━━━╸\u001b[33m━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━\u001b[0m 36.8MB cairo 3.4s\n",
+ "Extracting (6) ━━━━╸\u001b[33m━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━\u001b[0m 23 conda-package-streaming 2.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.6s\n",
+ "Downloading (5) ━━━╸\u001b[33m━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━\u001b[0m 36.8MB cairo 3.5s\n",
+ "Extracting (5) ━━━━╸\u001b[33m━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━\u001b[0m 24 conda-libmamba-solver 2.6s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.7s\n",
+ "Downloading (5) ━━━╸\u001b[33m━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━\u001b[0m 37.2MB fonttools 3.6s\n",
+ "Extracting (5) ━━━━╸\u001b[33m━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━\u001b[0m 24 conda-libmamba-solver 2.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gc-ares 121.7kB @ 32.7kB/s 0.2s\n",
+ "[+] 3.8s\n",
+ "Downloading (5) ━━━╸\u001b[33m━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━\u001b[0m 39.0MB fonttools 3.7s\n",
+ "Extracting (6) ━━━━╸\u001b[33m━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━\u001b[0m 24 conda-libmamba-solver 2.8s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.9s\n",
+ "Downloading (5) ━━━╸\u001b[33m━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━\u001b[0m 39.8MB fonttools 3.8s\n",
+ "Extracting (4) ━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━\u001b[0m 26 c-ares 2.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gxorg-xextproto 30.3kB @ 7.7kB/s 0.2s\n",
+ "[+] 4.0s\n",
+ "Downloading (5) ━━━━╸\u001b[33m━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━\u001b[0m 41.1MB fonttools 3.9s\n",
+ "Extracting (3) ━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━\u001b[0m 28 c-ares 3.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gfonttools 2.2MB @ 556.5kB/s 0.8s\n",
+ "[+] 4.1s\n",
+ "Downloading (5) ━━━━╸\u001b[33m━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━\u001b[0m 42.7MB cairo 4.0s\n",
+ "Extracting (3) ━━━━━━╸\u001b[33m╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━\u001b[0m 29 c-ares 3.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.2s\n",
+ "Downloading (5) ━━━━╸\u001b[33m━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━\u001b[0m 43.3MB cairo 4.1s\n",
+ "Extracting (3) ━━━━━━╸\u001b[33m╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━\u001b[0m 29 c-ares 3.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibjpeg-turbo 496.4kB @ 117.6kB/s 0.3s\n",
+ "xorg-libxau 14.5kB @ 3.4kB/s 0.2s\n",
+ "cairo 982.4kB @ 230.4kB/s 1.0s\n",
+ "[+] 4.3s\n",
+ "Downloading (5) ━━━━╸\u001b[33m━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━\u001b[0m 45.3MB libtiff 4.2s\n",
+ "Extracting (4) ━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━\u001b[0m 31 cairo 3.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.4s\n",
+ "Downloading (5) ━━━━╸\u001b[33m━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━\u001b[0m 47.0MB libtiff 4.3s\n",
+ "Extracting (4) ━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━\u001b[0m 31 cairo 3.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.5s\n",
+ "Downloading (5) ━━━━╸\u001b[33m━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━\u001b[0m 47.0MB libtiff 4.4s\n",
+ "Extracting (4) ━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━\u001b[0m 31 cairo 3.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gpthread-stubs 5.6kB @ 1.2kB/s 0.3s\n",
+ "reportlab 2.4MB @ 521.5kB/s 1.1s\n",
+ "libtiff 277.5kB @ 61.4kB/s 0.3s\n",
+ "[+] 4.6s\n",
+ "Downloading (5) ━━━━╸\u001b[33m━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━\u001b[0m 47.6MB fontconfig 4.5s\n",
+ "Extracting (6) ━━━━━━╸\u001b[33m━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━\u001b[0m 32 cairo 3.6s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.7s\n",
+ "Downloading (5) ━━━━╸\u001b[33m━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━\u001b[0m 47.6MB fontconfig 4.6s\n",
+ "Extracting (4) ━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━\u001b[0m 34 libtiff 3.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.8s\n",
+ "Downloading (5) ━━━━━╸\u001b[33m━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━\u001b[0m 51.3MB fontconfig 4.7s\n",
+ "Extracting (4) ━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━\u001b[0m 34 libtiff 3.8s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.9s\n",
+ "Downloading (5) ━━━━━╸\u001b[33m━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━\u001b[0m 51.3MB fontconfig 4.8s\n",
+ "Extracting (3) ━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━\u001b[0m 35 libtiff 3.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.0s\n",
+ "Downloading (5) ━━━━━╸\u001b[33m━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━\u001b[0m 51.4MB openssl 4.9s\n",
+ "Extracting (1) ━━━━━━━━╸\u001b[33m╸\u001b[0m\u001b[90m━━━━━━━━━━━━━\u001b[0m 37 libtiff 4.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gfontconfig 272.0kB @ 54.1kB/s 0.5s\n",
+ "xorg-libx11 828.7kB @ 163.5kB/s 0.6s\n",
+ "[+] 5.1s\n",
+ "Downloading (5) ━━━━━╸\u001b[33m━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━\u001b[0m 53.8MB openssl 5.0s\n",
+ "Extracting (2) ━━━━━━━━╸\u001b[33m╸\u001b[0m\u001b[90m━━━━━━━━━━━━━\u001b[0m 38 fontconfig 4.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gopenssl 2.6MB @ 517.0kB/s 0.9s\n",
+ "[+] 5.2s\n",
+ "Downloading (5) ━━━━━━╸\u001b[33m━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━\u001b[0m 58.7MB libboost-python 5.1s\n",
+ "Extracting (3) ━━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━━━━━━━━\u001b[0m 38 fontconfig 4.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibboost-python 119.1kB @ 22.6kB/s 0.2s\n",
+ "[+] 5.3s\n",
+ "Downloading (5) ━━━━━━╸\u001b[33m━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━\u001b[0m 59.7MB font-ttf-inconsolata 5.2s\n",
+ "Extracting (4) ━━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━━━━━━━━\u001b[0m 38 fontconfig 4.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.4s\n",
+ "Downloading (5) ━━━━━━╸\u001b[33m━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━\u001b[0m 60.5MB font-ttf-inconsolata 5.3s\n",
+ "Extracting (4) ━━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━━━━━━━━\u001b[0m 38 fontconfig 4.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.5s\n",
+ "Downloading (5) ━━━━━━╸\u001b[33m━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━\u001b[0m 60.5MB font-ttf-inconsolata 5.4s\n",
+ "Extracting (4) ━━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━━━━━━━━\u001b[0m 38 libboost-python 4.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gfont-ttf-inconsolata 96.5kB @ 17.5kB/s 0.3s\n",
+ "[+] 5.6s\n",
+ "Downloading (5) ━━━━━━╸\u001b[33m━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━\u001b[0m 60.8MB cycler 5.5s\n",
+ "Extracting (5) ━━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━━━━━━━━\u001b[0m 38 libboost-python 4.6s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.7s\n",
+ "Downloading (5) ━━━━━━╸\u001b[33m━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━\u001b[0m 62.2MB cycler 5.6s\n",
+ "Extracting (4) ━━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━━━━━━━━\u001b[0m 39 libboost-python 4.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibcurl 386.2kB @ 67.7kB/s 0.6s\n",
+ "cycler 13.5kB @ 2.3kB/s 0.2s\n",
+ "libmamba 1.7MB @ 286.7kB/s 0.6s\n",
+ "[+] 5.8s\n",
+ "Downloading (5) ━━━━━━━╸\u001b[33m━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━\u001b[0m 64.5MB archspec 5.7s\n",
+ "Extracting (7) ━━━━━━━━╸\u001b[33m━━╸\u001b[0m\u001b[90m━━━━━━━━━━━\u001b[0m 39 libboost-python 4.8s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.9s\n",
+ "Downloading (5) ━━━━━━━╸\u001b[33m━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━\u001b[0m 65.8MB archspec 5.8s\n",
+ "Extracting (4) ━━━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━━━━━━━\u001b[0m 42 cycler 4.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Garchspec 42.3kB @ 7.1kB/s 0.2s\n",
+ "fonts-conda-ecosystem 3.7kB @ 614.0 B/s 0.2s\n",
+ "[+] 6.0s\n",
+ "Downloading (5) ━━━━━━━╸\u001b[33m━━━━━━━━━━━━━━━\u001b[0m 68.3MB mamba 5.9s\n",
+ "Extracting (6) ━━━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━━━━━━━\u001b[0m 42 cycler 5.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 6.1s\n",
+ "Downloading (5) ━━━━━━━╸\u001b[33m━━━━━━━━━━━━━━━\u001b[0m 68.3MB mamba 6.0s\n",
+ "Extracting (4) ━━━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━━━━━━━\u001b[0m 44 cycler 5.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gmamba 51.6kB @ 8.3kB/s 0.2s\n",
+ "[+] 6.2s\n",
+ "Downloading (5) ━━━━━━━╸\u001b[33m━━━━━━━━━━━━━━━\u001b[0m 68.7MB matplotlib-base 6.1s\n",
+ "Extracting (5) ━━━━━━━━━╸\u001b[33m━━╸\u001b[0m\u001b[90m━━━━━━━━━━\u001b[0m 44 cycler 5.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 6.3s\n",
+ "Downloading (5) ━━━━━━━╸\u001b[33m━━━━━━━━━━━━━━━\u001b[0m 68.7MB matplotlib-base 6.2s\n",
+ "Extracting (5) ━━━━━━━━━╸\u001b[33m━━╸\u001b[0m\u001b[90m━━━━━━━━━━\u001b[0m 44 fonts-conda-ecosystem 5.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 6.4s\n",
+ "Downloading (5) ━━━━━━━╸\u001b[33m━━━━━━━━━━━━━━━\u001b[0m 68.7MB matplotlib-base 6.3s\n",
+ "Extracting (5) ━━━━━━━━━╸\u001b[33m━━╸\u001b[0m\u001b[90m━━━━━━━━━━\u001b[0m 44 fonts-conda-ecosystem 5.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 6.5s\n",
+ "Downloading (5) ━━━━━━━╸\u001b[33m━━━━━━━━━━━━━━━\u001b[0m 69.1MB matplotlib-base 6.4s\n",
+ "Extracting (3) ━━━━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━━━━━━\u001b[0m 46 fonts-conda-ecosystem 5.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 6.6s\n",
+ "Downloading (5) ━━━━━━━╸\u001b[33m━━━━━━━━━━━━━━━\u001b[0m 69.1MB pillow 6.5s\n",
+ "Extracting ━━━━━━━━━━╸\u001b[33m━━━━━━━━━━━━\u001b[0m 49 5.6s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gzstd 545.2kB @ 81.5kB/s 0.5s\n",
+ "[+] 6.7s\n",
+ "Downloading (5) ━━━━━━━╸\u001b[33m━━━━━━━━━━━━━━━\u001b[0m 69.9MB pillow 6.6s\n",
+ "Extracting (1) ━━━━━━━━━━━╸\u001b[33m╸\u001b[0m\u001b[90m━━━━━━━━━━\u001b[0m 49 zstd 5.6s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gpyopenssl 127.1kB @ 19.0kB/s 1.0s\n",
+ "[+] 6.8s\n",
+ "Downloading (5) ━━━━━━━━╸\u001b[33m━━━━━━━━━━━━━━\u001b[0m 76.2MB pillow 6.7s\n",
+ "Extracting (2) ━━━━━━━━━━━╸\u001b[33m╸\u001b[0m\u001b[90m━━━━━━━━━━\u001b[0m 49 zstd 5.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 6.9s\n",
+ "Downloading (5) ━━━━━━━━╸\u001b[33m━━━━━━━━━━━━━━\u001b[0m 76.5MB pillow 6.8s\n",
+ "Extracting (2) ━━━━━━━━━━━╸\u001b[33m╸\u001b[0m\u001b[90m━━━━━━━━━━\u001b[0m 49 zstd 5.8s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gxorg-renderproto 9.6kB @ 1.4kB/s 0.2s\n",
+ "[+] 7.0s\n",
+ "Downloading (5) ━━━━━━━━╸\u001b[33m━━━━━━━━━━━━━━\u001b[0m 78.8MB python 6.9s\n",
+ "Extracting (3) ━━━━━━━━━━━╸\u001b[33m╸\u001b[0m\u001b[90m━━━━━━━━━━\u001b[0m 49 zstd 5.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.1s\n",
+ "Downloading (5) ━━━━━━━━━╸\u001b[33m━━━━━━━━━━━━━\u001b[0m 81.1MB python 7.0s\n",
+ "Extracting (3) ━━━━━━━━━━━╸\u001b[33m╸\u001b[0m\u001b[90m━━━━━━━━━━\u001b[0m 49 pyopenssl 6.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gxorg-libsm 27.4kB @ 3.8kB/s 0.2s\n",
+ "[+] 7.2s\n",
+ "Downloading (5) ━━━━━━━━━╸\u001b[33m━━━━━━━━━━━━━\u001b[0m 83.5MB python 7.1s\n",
+ "Extracting (2) ━━━━━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━━━━━\u001b[0m 51 xorg-libsm 6.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.3s\n",
+ "Downloading (5) ━━━━━━━━━╸\u001b[33m━━━━━━━━━━━━━\u001b[0m 83.5MB python 7.2s\n",
+ "Extracting (2) ━━━━━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━━━━━\u001b[0m 51 xorg-libsm 6.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.4s\n",
+ "Downloading (5) ━━━━━━━━━╸\u001b[33m━━━━━━━━━━━━━\u001b[0m 83.5MB gettext 7.3s\n",
+ "Extracting (1) ━━━━━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━━━━━\u001b[0m 52 xorg-libsm 6.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.5s\n",
+ "Downloading (5) ━━━━━━━━━╸\u001b[33m━━━━━━━━━━━━━\u001b[0m 84.7MB gettext 7.4s\n",
+ "Extracting (1) ━━━━━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━━━━━\u001b[0m 52 xorg-libsm 6.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.6s\n",
+ "Downloading (5) ━━━━━━━━━╸\u001b[33m━━━━━━━━━━━━━\u001b[0m 84.7MB gettext 7.5s\n",
+ "Extracting ━━━━━━━━━━━╸\u001b[33m━━━━━━━━━━━\u001b[0m 53 6.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.7s\n",
+ "Downloading (5) ━━━━━━━━━╸\u001b[33m━━━━━━━━━━━━━\u001b[0m 84.9MB gettext 7.6s\n",
+ "Extracting ━━━━━━━━━━━╸\u001b[33m━━━━━━━━━━━\u001b[0m 53 6.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.8s\n",
+ "Downloading (5) ━━━━━━━━━╸\u001b[33m━━━━━━━━━━━━━\u001b[0m 85.0MB libbrotlienc 7.7s\n",
+ "Extracting ━━━━━━━━━━━╸\u001b[33m━━━━━━━━━━━\u001b[0m 53 6.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibbrotlienc 282.5kB @ 36.0kB/s 0.7s\n",
+ "[+] 7.9s\n",
+ "Downloading (5) ━━━━━━━━━╸\u001b[33m━━━━━━━━━━━━━\u001b[0m 86.2MB gettext 7.8s\n",
+ "Extracting (1) ━━━━━━━━━━━━╸\u001b[33m╸\u001b[0m\u001b[90m━━━━━━━━━\u001b[0m 53 libbrotlienc 6.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 8.0s\n",
+ "Downloading (5) ━━━━━━━━━╸\u001b[33m━━━━━━━━━━━━━\u001b[0m 86.6MB gettext 7.9s\n",
+ "Extracting (1) ━━━━━━━━━━━━╸\u001b[33m╸\u001b[0m\u001b[90m━━━━━━━━━\u001b[0m 53 libbrotlienc 6.6s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 8.1s\n",
+ "Downloading (5) ━━━━━━━━━━╸\u001b[33m━━━━━━━━━━━━\u001b[0m 88.1MB gettext 8.0s\n",
+ "Extracting (1) ━━━━━━━━━━━━╸\u001b[33m╸\u001b[0m\u001b[90m━━━━━━━━━\u001b[0m 53 libbrotlienc 6.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Ggettext 4.3MB @ 528.9kB/s 1.5s\n",
+ "[+] 8.2s\n",
+ "Downloading (5) ━━━━━━━━━━╸\u001b[33m━━━━━━━━━━━━\u001b[0m 95.3MB kiwisolver 8.1s\n",
+ "Extracting (1) ━━━━━━━━━━━━╸\u001b[33m╸\u001b[0m\u001b[90m━━━━━━━━━\u001b[0m 54 gettext 6.8s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 8.3s\n",
+ "Downloading (5) ━━━━━━━━━━╸\u001b[33m━━━━━━━━━━━━\u001b[0m 95.6MB kiwisolver 8.2s\n",
+ "Extracting (1) ━━━━━━━━━━━━╸\u001b[33m╸\u001b[0m\u001b[90m━━━━━━━━━\u001b[0m 54 gettext 6.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gkiwisolver 73.1kB @ 8.7kB/s 0.2s\n",
+ "[+] 8.4s\n",
+ "Downloading (5) ━━━━━━━━━━━╸\u001b[33m━━━━━━━━━━━\u001b[0m 97.2MB cryptography 8.3s\n",
+ "Extracting (2) ━━━━━━━━━━━━╸\u001b[33m╸\u001b[0m\u001b[90m━━━━━━━━━\u001b[0m 54 gettext 7.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 8.5s\n",
+ "Downloading (5) ━━━━━━━━━━━╸\u001b[33m━━━━━━━━━━━\u001b[0m 98.2MB cryptography 8.4s\n",
+ "Extracting (2) ━━━━━━━━━━━━╸\u001b[33m╸\u001b[0m\u001b[90m━━━━━━━━━\u001b[0m 54 gettext 7.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 8.6s\n",
+ "Downloading (5) ━━━━━━━━━━━╸\u001b[33m━━━━━━━━━━━\u001b[0m 100.1MB cryptography 8.5s\n",
+ "Extracting (2) ━━━━━━━━━━━━╸\u001b[33m╸\u001b[0m\u001b[90m━━━━━━━━━\u001b[0m 54 kiwisolver 7.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 8.7s\n",
+ "Downloading (5) ━━━━━━━━━━━╸\u001b[33m━━━━━━━━━━━\u001b[0m 102.2MB cryptography 8.6s\n",
+ "Extracting (2) ━━━━━━━━━━━━╸\u001b[33m╸\u001b[0m\u001b[90m━━━━━━━━━\u001b[0m 54 kiwisolver 7.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 8.8s\n",
+ "Downloading (5) ━━━━━━━━━━━╸\u001b[33m━━━━━━━━━━━\u001b[0m 102.2MB libarchive 8.7s\n",
+ "Extracting (1) ━━━━━━━━━━━━╸\u001b[33m╸\u001b[0m\u001b[90m━━━━━━━━━\u001b[0m 55 gettext 7.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 8.9s\n",
+ "Downloading (5) ━━━━━━━━━━━╸\u001b[33m━━━━━━━━━━━\u001b[0m 102.4MB libarchive 8.8s\n",
+ "Extracting (1) ━━━━━━━━━━━━╸\u001b[33m╸\u001b[0m\u001b[90m━━━━━━━━━\u001b[0m 55 gettext 7.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibarchive 865.9kB @ 96.7kB/s 1.1s\n",
+ "[+] 9.0s\n",
+ "Downloading (5) ━━━━━━━━━━━╸\u001b[33m━━━━━━━━━━━\u001b[0m 102.5MB cryptography 8.9s\n",
+ "Extracting (2) ━━━━━━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━━━━\u001b[0m 55 gettext 7.6s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 9.1s\n",
+ "Downloading (5) ━━━━━━━━━━━━╸\u001b[33m━━━━━━━━━━\u001b[0m 106.0MB cryptography 9.0s\n",
+ "Extracting (2) ━━━━━━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━━━━\u001b[0m 55 gettext 7.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 9.2s\n",
+ "Downloading (5) ━━━━━━━━━━━━╸\u001b[33m━━━━━━━━━━\u001b[0m 107.6MB cryptography 9.1s\n",
+ "Extracting (2) ━━━━━━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━━━━\u001b[0m 55 libarchive 7.8s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 9.3s\n",
+ "Downloading (5) ━━━━━━━━━━━━╸\u001b[33m━━━━━━━━━━\u001b[0m 107.6MB cryptography 9.2s\n",
+ "Extracting (1) ━━━━━━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━━━━\u001b[0m 56 libarchive 7.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 9.4s\n",
+ "Downloading (5) ━━━━━━━━━━━━╸\u001b[33m━━━━━━━━━━\u001b[0m 109.2MB hdf5 9.3s\n",
+ "Extracting ━━━━━━━━━━━━━╸\u001b[33m━━━━━━━━━\u001b[0m 57 8.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 9.5s\n",
+ "Downloading (5) ━━━━━━━━━━━━╸\u001b[33m━━━━━━━━━━\u001b[0m 109.3MB hdf5 9.4s\n",
+ "Extracting ━━━━━━━━━━━━━╸\u001b[33m━━━━━━━━━\u001b[0m 57 8.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 9.6s\n",
+ "Downloading (5) ━━━━━━━━━━━━━╸\u001b[33m━━━━━━━━━\u001b[0m 110.9MB hdf5 9.5s\n",
+ "Extracting ━━━━━━━━━━━━━╸\u001b[33m━━━━━━━━━\u001b[0m 57 8.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 9.7s\n",
+ "Downloading (5) ━━━━━━━━━━━━━╸\u001b[33m━━━━━━━━━\u001b[0m 112.4MB hdf5 9.6s\n",
+ "Extracting ━━━━━━━━━━━━━╸\u001b[33m━━━━━━━━━\u001b[0m 57 8.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gmatplotlib-base 6.8MB @ 695.9kB/s 3.8s\n",
+ "[+] 9.8s\n",
+ "Downloading (5) ━━━━━━━━━━━━━╸\u001b[33m━━━━━━━━━\u001b[0m 116.0MB pillow 9.7s\n",
+ "Extracting (1) ━━━━━━━━━━━━━╸\u001b[33m╸\u001b[0m\u001b[90m━━━━━━━━\u001b[0m 57 matplotlib-base 8.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 9.9s\n",
+ "Downloading (5) ━━━━━━━━━━━━━╸\u001b[33m━━━━━━━━━\u001b[0m 117.2MB pillow 9.8s\n",
+ "Extracting (1) ━━━━━━━━━━━━━╸\u001b[33m╸\u001b[0m\u001b[90m━━━━━━━━\u001b[0m 57 matplotlib-base 8.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gtyping_extensions 35.1kB @ 3.5kB/s 0.2s\n",
+ "[+] 10.0s\n",
+ "Downloading (5) ━━━━━━━━━━━━━╸\u001b[33m━━━━━━━━━\u001b[0m 118.4MB pillow 9.9s\n",
+ "Extracting (2) ━━━━━━━━━━━━━╸\u001b[33m╸\u001b[0m\u001b[90m━━━━━━━━\u001b[0m 57 matplotlib-base 8.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gcryptography 2.0MB @ 196.3kB/s 1.7s\n",
+ "[+] 10.1s\n",
+ "Downloading (5) ━━━━━━━━━━━━━╸\u001b[33m━━━━━━━━━\u001b[0m 119.6MB pillow 10.0s\n",
+ "Extracting (3) ━━━━━━━━━━━━━╸\u001b[33m╸\u001b[0m\u001b[90m━━━━━━━━\u001b[0m 57 matplotlib-base 8.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 10.2s\n",
+ "Downloading (5) ━━━━━━━━━━━━━━╸\u001b[33m━━━━━━━━\u001b[0m 120.7MB python 10.1s\n",
+ "Extracting (3) ━━━━━━━━━━━━━╸\u001b[33m╸\u001b[0m\u001b[90m━━━━━━━━\u001b[0m 57 typing_extensions 8.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gcertifi 153.8kB @ 15.0kB/s 0.3s\n",
+ "[+] 10.3s\n",
+ "Downloading (5) ━━━━━━━━━━━━━━╸\u001b[33m━━━━━━━━\u001b[0m 122.0MB python 10.2s\n",
+ "Extracting (3) ━━━━━━━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━━━\u001b[0m 58 typing_extensions 8.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gconda-package-handling 255.1kB @ 24.8kB/s 0.2s\n",
+ "[+] 10.4s\n",
+ "Downloading (5) ━━━━━━━━━━━━━━╸\u001b[33m━━━━━━━━\u001b[0m 123.4MB python 10.3s\n",
+ "Extracting (3) ━━━━━━━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━━━\u001b[0m 59 certifi 8.6s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gpycairo 116.2kB @ 11.1kB/s 0.3s\n",
+ "[+] 10.5s\n",
+ "Downloading (5) ━━━━━━━━━━━━━━╸\u001b[33m━━━━━━━━\u001b[0m 124.7MB python 10.4s\n",
+ "Extracting (4) ━━━━━━━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━━━\u001b[0m 59 certifi 8.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 10.6s\n",
+ "Downloading (5) ━━━━━━━━━━━━━━╸\u001b[33m━━━━━━━━\u001b[0m 125.9MB fmt 10.5s\n",
+ "Extracting (2) ━━━━━━━━━━━━━━╸\u001b[33m╸\u001b[0m\u001b[90m━━━━━━━\u001b[0m 61 conda-package-handling 8.8s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 10.7s\n",
+ "Downloading (5) ━━━━━━━━━━━━━━╸\u001b[33m━━━━━━━━\u001b[0m 127.1MB fmt 10.6s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━╸\u001b[33m╸\u001b[0m\u001b[90m━━━━━━━\u001b[0m 62 pycairo 8.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 10.8s\n",
+ "Downloading (5) ━━━━━━━━━━━━━━━╸\u001b[33m━━━━━━━\u001b[0m 128.4MB fmt 10.7s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━╸\u001b[33m╸\u001b[0m\u001b[90m━━━━━━━\u001b[0m 62 pycairo 9.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glerc 281.8kB @ 26.0kB/s 0.3s\n",
+ "[+] 10.9s\n",
+ "Downloading (5) ━━━━━━━━━━━━━━━╸\u001b[33m━━━━━━━\u001b[0m 129.7MB fmt 10.8s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━╸\u001b[33m╸\u001b[0m\u001b[90m━━━━━━━\u001b[0m 63 lerc 9.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 11.0s\n",
+ "Downloading (5) ━━━━━━━━━━━━━━━╸\u001b[33m━━━━━━━\u001b[0m 130.9MB hdf5 10.9s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━╸\u001b[33m╸\u001b[0m\u001b[90m━━━━━━━\u001b[0m 63 lerc 9.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gxorg-libxdmcp 19.1kB @ 1.7kB/s 0.2s\n",
+ "fmt 192.3kB @ 17.3kB/s 0.8s\n",
+ "[+] 11.1s\n",
+ "Downloading (5) ━━━━━━━━━━━━━━━╸\u001b[33m━━━━━━━\u001b[0m 132.1MB hdf5 11.0s\n",
+ "Extracting (3) ━━━━━━━━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━━\u001b[0m 63 lerc 9.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gpillow 46.4MB @ 4.2MB/s 8.7s\n",
+ "[+] 11.2s\n",
+ "Downloading (5) ━━━━━━━━━━━━━━━╸\u001b[33m━━━━━━━\u001b[0m 133.3MB hdf5 11.1s\n",
+ "Extracting (4) ━━━━━━━━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━━\u001b[0m 63 lerc 9.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 11.3s\n",
+ "Downloading (5) ━━━━━━━━━━━━━━━╸\u001b[33m━━━━━━━\u001b[0m 134.1MB hdf5 11.2s\n",
+ "Extracting (3) ━━━━━━━━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━━\u001b[0m 64 fmt 9.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gbrotli-bin 19.0kB @ 1.7kB/s 0.2s\n",
+ "brotli 19.4kB @ 1.7kB/s 0.2s\n",
+ "[+] 11.4s\n",
+ "Downloading (5) ━━━━━━━━━━━━━━━━╸\u001b[33m━━━━━━\u001b[0m 135.1MB jsonpatch 11.3s\n",
+ "Extracting (5) ━━━━━━━━━━━━━━╸\u001b[33m━━╸\u001b[0m\u001b[90m━━━━━\u001b[0m 64 fmt 9.6s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibxcb 384.2kB @ 33.7kB/s 0.4s\n",
+ "hdf5 3.7MB @ 325.5kB/s 2.5s\n",
+ "python 30.4MB @ 2.7MB/s 7.0s\n",
+ "[+] 11.5s\n",
+ "Downloading (5) ━━━━━━━━━━━━━━━━╸\u001b[33m━━━━━━\u001b[0m 135.8MB jsonpatch 11.4s\n",
+ "Extracting (7) ━━━━━━━━━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━\u001b[0m 65 fmt 9.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gjsonpatch 17.4kB @ 1.5kB/s 0.2s\n",
+ "[+] 11.6s\n",
+ "Downloading (5) ━━━━━━━━━━━━━━━━╸\u001b[33m━━━━━━\u001b[0m 137.4MB conda 11.5s\n",
+ "Extracting (8) ━━━━━━━━━━━━━━━╸\u001b[33m━━╸\u001b[0m\u001b[90m━━━━\u001b[0m 65 fmt 9.8s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gxorg-kbproto 27.3kB @ 2.3kB/s 0.2s\n",
+ "[+] 11.7s\n",
+ "Downloading (5) ━━━━━━━━━━━━━━━━╸\u001b[33m━━━━━━\u001b[0m 137.6MB conda 11.6s\n",
+ "Extracting (8) ━━━━━━━━━━━━━━━╸\u001b[33m━━╸\u001b[0m\u001b[90m━━━━\u001b[0m 66 brotli 9.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gfont-ttf-ubuntu 2.0MB @ 167.5kB/s 0.4s\n",
+ "yaml-cpp 204.9kB @ 17.4kB/s 0.3s\n",
+ "[+] 11.8s\n",
+ "Downloading (5) ━━━━━━━━━━━━━━━━╸\u001b[33m━━━━━━\u001b[0m 138.4MB conda 11.7s\n",
+ "Extracting (9) ━━━━━━━━━━━━━━━╸\u001b[33m━━╸\u001b[0m\u001b[90m━━━━\u001b[0m 67 brotli 10.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibssh2 271.1kB @ 22.9kB/s 0.3s\n",
+ "jsonpointer 16.2kB @ 1.4kB/s 0.2s\n",
+ "[+] 11.9s\n",
+ "Downloading (5) ━━━━━━━━━━━━━━━━╸\u001b[33m━━━━━━\u001b[0m 139.0MB conda 11.8s\n",
+ "Extracting (11) ━━━━━━━━━━━━━━━╸\u001b[33m━━━╸\u001b[0m\u001b[90m━━━\u001b[0m 67 brotli 10.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gfreetype-py 58.9kB @ 4.9kB/s 0.2s\n",
+ "conda 968.8kB @ 80.9kB/s 0.6s\n",
+ "[+] 12.0s\n",
+ "Downloading (5) ━━━━━━━━━━━━━━━━╸\u001b[33m━━━━━━\u001b[0m 139.4MB expat 11.9s\n",
+ "Extracting (13) ━━━━━━━━━━━━━━━╸\u001b[33m━━━╸\u001b[0m\u001b[90m━━━\u001b[0m 67 brotli 10.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 12.1s\n",
+ "Downloading (5) ━━━━━━━━━━━━━━━━╸\u001b[33m━━━━━━\u001b[0m 139.5MB expat 12.0s\n",
+ "Extracting (12) ━━━━━━━━━━━━━━━╸\u001b[33m━━━╸\u001b[0m\u001b[90m━━━\u001b[0m 68 conda 10.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibexpat 78.0kB @ 6.4kB/s 0.2s\n",
+ "xorg-libxext 50.1kB @ 4.1kB/s 0.2s\n",
+ "expat 136.8kB @ 11.3kB/s 0.3s\n",
+ "fonts-conda-forge 4.1kB @ 336.0 B/s 0.2s\n",
+ "[+] 12.2s\n",
+ "Downloading (5) ━━━━━━━━━━━━━━━━╸\u001b[33m━━━━━━\u001b[0m 140.0MB contourpy 12.1s\n",
+ "Extracting (15) ━━━━━━━━━━━━━━━━╸\u001b[33m━━━╸\u001b[0m\u001b[90m━━\u001b[0m 69 conda 10.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 12.3s\n",
+ "Downloading (5) ━━━━━━━━━━━━━━━━╸\u001b[33m━━━━━━\u001b[0m 140.2MB contourpy 12.2s\n",
+ "Extracting (15) ━━━━━━━━━━━━━━━━╸\u001b[33m━━━╸\u001b[0m\u001b[90m━━\u001b[0m 69 conda 10.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Grlpycairo 14.9kB @ 1.2kB/s 0.2s\n",
+ "contourpy 238.9kB @ 19.3kB/s 0.2s\n",
+ "[+] 12.4s\n",
+ "Downloading (5) ━━━━━━━━━━━━━━━━╸\u001b[33m━━━━━━\u001b[0m 140.9MB boltons 12.3s\n",
+ "Extracting (17) ━━━━━━━━━━━━━━━━╸\u001b[33m━━━━╸\u001b[0m\u001b[90m━\u001b[0m 69 conda 10.6s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibwebp-base 401.8kB @ 32.4kB/s 0.3s\n",
+ "lcms2 240.6kB @ 19.3kB/s 0.3s\n",
+ "[+] 12.5s\n",
+ "Downloading (5) ━━━━━━━━━━━━━━━━╸\u001b[33m━━━━━━\u001b[0m 141.5MB boltons 12.4s\n",
+ "Extracting (18) ━━━━━━━━━━━━━━━━╸\u001b[33m━━━━╸\u001b[0m\u001b[90m━\u001b[0m 70 contourpy 10.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 12.6s\n",
+ "Downloading (5) ━━━━━━━━━━━━━━━━╸\u001b[33m━━━━━━\u001b[0m 141.6MB boltons 12.5s\n",
+ "Extracting (18) ━━━━━━━━━━━━━━━━╸\u001b[33m━━━━╸\u001b[0m\u001b[90m━\u001b[0m 70 contourpy 10.8s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 12.7s\n",
+ "Downloading (5) ━━━━━━━━━━━━━━━━╸\u001b[33m━━━━━━\u001b[0m 143.4MB boltons 12.6s\n",
+ "Extracting (16) ━━━━━━━━━━━━━━━━╸\u001b[33m━━━━╸\u001b[0m\u001b[90m━\u001b[0m 72 contourpy 10.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gboltons 302.8kB @ 23.8kB/s 0.4s\n",
+ "freetype 635.0kB @ 49.8kB/s 0.4s\n",
+ "[+] 12.8s\n",
+ "Downloading (3) ━━━━━━━━━━━━━━━━━╸\u001b[33m━━━━━\u001b[0m 144.3MB font-ttf-dejavu-sans-mono 12.7s\n",
+ "Extracting (18) ━━━━━━━━━━━━━━━━╸\u001b[33m━━━━━━\u001b[0m 72 contourpy 11.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gfont-ttf-dejavu-sans-mono 397.4kB @ 31.0kB/s 0.3s\n",
+ "[+] 12.9s\n",
+ "Downloading (2) ━━━━━━━━━━━━━━━━━╸\u001b[33m━━━━━\u001b[0m 145.3MB rdkit 12.8s\n",
+ "Extracting (18) ━━━━━━━━━━━━━━━━━╸\u001b[33m━━━━━\u001b[0m 73 expat 11.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 13.0s\n",
+ "Downloading (2) ━━━━━━━━━━━━━━━━━╸\u001b[33m━━━━━\u001b[0m 146.1MB rdkit 12.9s\n",
+ "Extracting (17) ━━━━━━━━━━━━━━━━━╸\u001b[33m━━━━━\u001b[0m 74 expat 11.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 13.1s\n",
+ "Downloading (2) ━━━━━━━━━━━━━━━━━╸\u001b[33m━━━━━\u001b[0m 147.0MB rdkit 13.0s\n",
+ "Extracting (16) ━━━━━━━━━━━━━━━━━╸\u001b[33m━━━━━\u001b[0m 75 expat 11.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gsqlalchemy 2.8MB @ 213.7kB/s 1.4s\n",
+ "[+] 13.2s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━╸\u001b[33m━━━━━\u001b[0m 147.9MB rdkit 13.1s\n",
+ "Extracting (16) ━━━━━━━━━━━━━━━━━╸\u001b[33m━━━━━\u001b[0m 76 expat 11.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 13.3s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━╸\u001b[33m━━━━━\u001b[0m 148.5MB rdkit 13.2s\n",
+ "Extracting (11) ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━\u001b[0m 81 conda 11.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 13.4s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━╸\u001b[33m━━━━━\u001b[0m 148.5MB rdkit 13.3s\n",
+ "Extracting (11) ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━\u001b[0m 81 conda 11.6s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 13.5s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━╸\u001b[33m━━━━━\u001b[0m 148.7MB rdkit 13.4s\n",
+ "Extracting (9) ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━\u001b[0m 83 conda 11.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 13.6s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━╸\u001b[33m━━━━━\u001b[0m 148.7MB rdkit 13.5s\n",
+ "Extracting (9) ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━\u001b[0m 83 conda 11.8s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 13.7s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━╸\u001b[33m━━━━━\u001b[0m 148.7MB rdkit 13.6s\n",
+ "Extracting (6) ━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━\u001b[0m 86 contourpy 11.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 13.8s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━╸\u001b[33m━━━━━\u001b[0m 149.2MB rdkit 13.7s\n",
+ "Extracting (5) ━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━\u001b[0m 87 contourpy 12.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 13.9s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━╸\u001b[33m━━━━━\u001b[0m 149.8MB rdkit 13.8s\n",
+ "Extracting (2) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 90 fonts-conda-forge 12.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 14.0s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━╸\u001b[33m━━━━━\u001b[0m 150.3MB rdkit 13.9s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 91 python 12.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 14.1s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━╸\u001b[33m━━━━━\u001b[0m 150.9MB rdkit 14.0s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 91 python 12.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 14.2s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━━\u001b[0m 151.4MB rdkit 14.1s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 91 python 12.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 14.3s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━━\u001b[0m 151.9MB rdkit 14.2s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 91 python 12.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 14.4s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━━\u001b[0m 152.5MB rdkit 14.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 91 python 12.6s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 14.5s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━━\u001b[0m 153.0MB rdkit 14.4s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 91 python 12.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 14.6s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━━\u001b[0m 153.6MB rdkit 14.5s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 91 python 12.8s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 14.7s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━━\u001b[0m 154.1MB rdkit 14.6s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 91 python 12.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 14.8s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━━\u001b[0m 154.4MB rdkit 14.7s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 91 python 13.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 14.9s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━━\u001b[0m 155.0MB rdkit 14.8s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 91 python 13.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 15.0s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━━\u001b[0m 155.5MB rdkit 14.9s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 91 python 13.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 15.1s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━━\u001b[0m 156.0MB rdkit 15.0s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 91 python 13.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 15.2s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━━\u001b[0m 156.6MB rdkit 15.1s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 91 python 13.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 15.3s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━━\u001b[0m 157.1MB rdkit 15.2s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 91 python 13.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 15.4s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━━\u001b[0m 157.7MB rdkit 15.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 91 python 13.6s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 15.5s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━\u001b[0m 158.2MB rdkit 15.4s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 91 python 13.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 15.6s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━\u001b[0m 158.8MB rdkit 15.5s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 91 python 13.8s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 15.7s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━\u001b[0m 159.3MB rdkit 15.6s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 91 python 13.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 15.8s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━\u001b[0m 159.8MB rdkit 15.7s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 91 python 14.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 15.9s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━\u001b[0m 160.4MB rdkit 15.8s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 91 python 14.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 16.0s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━\u001b[0m 160.9MB rdkit 15.9s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 91 python 14.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 16.1s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━\u001b[0m 161.5MB rdkit 16.0s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 91 python 14.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 16.2s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━\u001b[0m 162.0MB rdkit 16.1s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 91 python 14.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 16.3s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━\u001b[0m 162.6MB rdkit 16.2s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 92 14.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 16.4s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━\u001b[0m 163.1MB rdkit 16.3s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 92 14.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 16.5s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━\u001b[0m 163.7MB rdkit 16.4s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 92 14.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 16.6s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━\u001b[0m 164.2MB rdkit 16.5s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 92 14.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 16.7s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━\u001b[0m 164.8MB rdkit 16.6s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 92 14.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 16.8s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━\u001b[0m 165.3MB rdkit 16.7s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 92 14.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 16.9s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━\u001b[0m 165.9MB rdkit 16.8s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 92 14.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 17.0s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━\u001b[0m 166.4MB rdkit 16.9s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 92 14.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 17.1s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━\u001b[0m 167.0MB rdkit 17.0s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 92 14.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 17.2s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━\u001b[0m 167.7MB rdkit 17.1s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 92 14.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 17.3s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━\u001b[0m 168.4MB rdkit 17.2s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 92 14.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 17.4s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━\u001b[0m 169.1MB rdkit 17.3s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 92 14.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 17.5s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━\u001b[0m 170.0MB rdkit 17.4s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 92 14.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 17.6s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━\u001b[0m 170.9MB rdkit 17.5s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 92 14.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 17.7s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━\u001b[0m 171.8MB rdkit 17.6s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 92 14.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 17.8s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━\u001b[0m 172.9MB rdkit 17.7s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 92 14.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 17.9s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━\u001b[0m 173.7MB rdkit 17.8s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 92 14.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 18.0s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 174.7MB rdkit 17.9s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 92 14.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 18.1s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 175.7MB rdkit 18.0s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 92 14.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 18.2s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 176.8MB rdkit 18.1s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 92 14.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 18.3s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 177.8MB rdkit 18.2s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 92 14.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 18.4s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 178.8MB rdkit 18.3s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 92 14.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 18.5s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 179.8MB rdkit 18.4s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 92 14.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 18.6s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 180.9MB rdkit 18.5s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 92 14.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Grdkit 37.1MB @ 2.0MB/s 6.3s\n",
+ "[+] 18.7s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 181.8MB 18.6s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 92 rdkit 14.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 18.8s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 181.8MB 18.6s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 92 rdkit 14.6s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 18.9s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 181.8MB 18.6s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 92 rdkit 14.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 19.0s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 181.8MB 18.6s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 92 rdkit 14.8s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 19.1s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 181.8MB 18.6s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 92 rdkit 14.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 19.2s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 181.8MB 18.6s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 92 rdkit 15.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 19.3s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 181.8MB 18.6s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 92 rdkit 15.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 19.4s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 181.8MB 18.6s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 92 rdkit 15.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 19.5s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 181.8MB 18.6s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 92 rdkit 15.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 19.6s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 181.8MB 18.6s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 92 rdkit 15.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G\u001b[?25h\n",
+ "Downloading and Extracting Packages\n",
+ "\n",
+ "Preparing transaction: done\n",
+ "Verifying transaction: done\n",
+ "Executing transaction: done\n",
+ "Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple\n",
+ "Collecting parmed\n",
+ " Downloading https://pypi.tuna.tsinghua.edu.cn/packages/5b/48/d94bf10284cac3daaecdeaa856fcdb5def06c5187d8c0431266b8805ff9d/ParmEd-4.2.2.tar.gz (20.2 MB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m20.2/20.2 MB\u001b[0m \u001b[31m29.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0m\n",
+ "\u001b[?25h Preparing metadata (setup.py) ... \u001b[?25ldone\n",
+ "\u001b[?25hRequirement already satisfied: mdtraj in /opt/mamba/lib/python3.10/site-packages (1.9.7)\n",
+ "Requirement already satisfied: pymbar in /opt/mamba/lib/python3.10/site-packages (4.0.1)\n",
+ "Requirement already satisfied: networkx in /opt/mamba/lib/python3.10/site-packages (3.2.1)\n",
+ "Requirement already satisfied: astunparse in /opt/mamba/lib/python3.10/site-packages (from mdtraj) (1.6.3)\n",
+ "Requirement already satisfied: pyparsing in /opt/mamba/lib/python3.10/site-packages (from mdtraj) (3.0.9)\n",
+ "Requirement already satisfied: scipy in /opt/mamba/lib/python3.10/site-packages (from mdtraj) (1.9.3)\n",
+ "Requirement already satisfied: numpy>=1.6 in /opt/mamba/lib/python3.10/site-packages (from mdtraj) (1.23.4)\n",
+ "Requirement already satisfied: jaxlib in /opt/mamba/lib/python3.10/site-packages (from pymbar) (0.3.15+cuda11.cudnn82)\n",
+ "Requirement already satisfied: numexpr in /opt/mamba/lib/python3.10/site-packages (from pymbar) (2.8.4)\n",
+ "Requirement already satisfied: jax in /opt/mamba/lib/python3.10/site-packages (from pymbar) (0.3.17)\n",
+ "Requirement already satisfied: wheel<1.0,>=0.23.0 in /opt/mamba/lib/python3.10/site-packages (from astunparse->mdtraj) (0.37.1)\n",
+ "Requirement already satisfied: six<2.0,>=1.6.1 in /opt/mamba/lib/python3.10/site-packages (from astunparse->mdtraj) (1.16.0)\n",
+ "Requirement already satisfied: etils[epath] in /opt/mamba/lib/python3.10/site-packages (from jax->pymbar) (0.9.0)\n",
+ "Requirement already satisfied: typing-extensions in /opt/mamba/lib/python3.10/site-packages (from jax->pymbar) (4.8.0)\n",
+ "Requirement already satisfied: absl-py in /opt/mamba/lib/python3.10/site-packages (from jax->pymbar) (1.3.0)\n",
+ "Requirement already satisfied: opt-einsum in /opt/mamba/lib/python3.10/site-packages (from jax->pymbar) (3.3.0)\n",
+ "Requirement already satisfied: zipp in /opt/mamba/lib/python3.10/site-packages (from etils[epath]->jax->pymbar) (3.10.0)\n",
+ "Requirement already satisfied: importlib_resources in /opt/mamba/lib/python3.10/site-packages (from etils[epath]->jax->pymbar) (5.10.0)\n",
+ "Building wheels for collected packages: parmed\n",
+ " Building wheel for parmed (setup.py) ... \u001b[?25ldone\n",
+ "\u001b[?25h Created wheel for parmed: filename=ParmEd-4.2.2-cp310-cp310-linux_x86_64.whl size=19199927 sha256=9a99ceb4ee4b01a9311bc2d233af89b88dc3ec19cdef4e3af55199c54d85db6c\n",
+ " Stored in directory: /root/.cache/pip/wheels/69/fc/4b/be5259741ac3c58269f1c8f6db8ce9e3a492319611ed0017ae\n",
+ "Successfully built parmed\n",
+ "Installing collected packages: parmed\n",
+ "Successfully installed parmed-4.2.2\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"
+ ]
+ }
+ ],
+ "source": [
+ "! mamba install openmm=7.7.0 rdkit -c conda-forge -y\n",
+ "! pip install parmed mdtraj pymbar networkx"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "59a45a2a-a1db-4261-b94a-1180199fc85a",
+ "metadata": {},
+ "source": [
+ "## 1. ADMPQeqForce"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "01ac23a0-0af1-41e2-b878-b80ad897bc86",
+ "metadata": {},
+ "source": [
+ "ADMPQeqForce provides a support to coulombic energy calculation for constant potential model and constant charge model. Net charges on all atoms were equilibrated at setted constraint first, then charge related energys were carried out next.\n",
+ "\n",
+ "You can directly run the test:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "id": "e81f8cbf-1024-45bc-92e2-559d4aaf02f2",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "run DMFF/tests/test_admp/test_qeq.py"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "76e0a6d0-e1f7-4d4c-bd43-6e13047c7273",
+ "metadata": {},
+ "source": [
+ "And we will provide a more detailed explanation as follows"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "47a2b80b-3320-46a0-bb64-8ba0cf7d220b",
+ "metadata": {},
+ "source": [
+ "### Import the necessary libraries"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "id": "3b039276-dd47-4072-a6af-360237cd05bf",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import openmm.app as app\n",
+ "import openmm.unit as unit\n",
+ "from dmff.api import Hamiltonian\n",
+ "from dmff.api import DMFFTopology\n",
+ "from dmff.api.xmlio import XMLIO\n",
+ "from dmff import NeighborList\n",
+ "import jax\n",
+ "from jax import value_and_grad\n",
+ "import jax.numpy as jnp\n",
+ "import numpy as np\n",
+ "import time\n",
+ "import pickle\n",
+ "import sys"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "96762867-f1d2-4e08-9e10-5afa66eb72f2",
+ "metadata": {},
+ "source": [
+ "### Load your force field"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "id": "0c828d89-e4b1-4848-a68f-d7c5ebdd216c",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "xml = XMLIO()\n",
+ "xml.loadXML(\"DMFF/tests/data/qeq2.xml\")\n",
+ "\n",
+ "# get residues\n",
+ "res = xml.parseResidues()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "13a18793-c124-400a-9071-fe2fe10eaff9",
+ "metadata": {},
+ "source": [
+ "For information about the force field file, please refer to the user guide, which contains detailed explanations.\n",
+ "### Initialize the charge and type of each atom and aux"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "id": "0a3952b0-5756-44cc-b9a1-7d92d5fb4cb6",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "charges, types = [], []\n",
+ "for i in range(len(res)):\n",
+ " charges += [a[\"charge\"] for a in res[i][\"particles\"]]\n",
+ " types += [a[\"type\"] for a in res[i][\"particles\"]]\n",
+ "charges = np.zeros((len(charges),))\n",
+ "\n",
+ "# initialize aux\n",
+ "aux = {\n",
+ " \"q\": jnp.array(charges),\n",
+ " \"lagmt\": jnp.array([1.0, 1.0])\n",
+ " #\"lagmt\": jnp.array([1.0])\n",
+ "}"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "3f8b891b-832e-4b4d-9ca1-3a6b898d48a1",
+ "metadata": {},
+ "source": [
+ "### Load the topological information and supplement it"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "id": "45217801-ff92-4d5d-b8b1-3162ba4279da",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Load topology\n",
+ "pdb = app.PDBFile(\"DMFF/tests/data/qeq2.pdb\")\n",
+ "dmfftop = DMFFTopology(from_top=pdb.topology)\n",
+ "pos = pdb.getPositions(asNumpy=True).value_in_unit(unit.nanometer)\n",
+ "pos = jnp.array(pos)\n",
+ "box = dmfftop.getPeriodicBoxVectors()\n",
+ "\n",
+ "# Assign atom charges and types in te topology\n",
+ "atoms = [a for a in dmfftop.atoms()]\n",
+ "for na, a in enumerate(atoms):\n",
+ " a.meta[\"charge\"] = charges[na]\n",
+ " a.meta[\"type\"] = types[na]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "cdcde6a1-bb19-460c-bf15-543e0c7f35cd",
+ "metadata": {},
+ "source": [
+ "### Preparation for potential function"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "id": "7c01f458-4c79-4e59-888f-13f776e634d4",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# create Hamiltonian\n",
+ "hamilt = Hamiltonian(\"DMFF/tests/data/qeq2.xml\")\n",
+ "\n",
+ "# create neighborlist & pairs\n",
+ "nblist = NeighborList(box, 0.6, dmfftop.buildCovMat())\n",
+ "pairs = nblist.allocate(pos) \n",
+ "\n",
+ "# initialize const_list\n",
+ "const_list, map_atomtype = [], []\n",
+ "for i in dmfftop.residues():\n",
+ " temp = []\n",
+ " for j in i.atoms():\n",
+ " temp.append(int(j.id)-1)\n",
+ " const_list.append(np.array(temp))\n",
+ "\n",
+ "# create map_atomtype\n",
+ "for i in dmfftop.atoms():\n",
+ " map_atomtype.append(int(i.meta[\"type\"])-1) #temp set\n",
+ "\n",
+ "# assign const_val\n",
+ "n_template = len(const_list)\n",
+ "const_val = jnp.zeros(n_template)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b3843624-aa9e-4049-b21e-8ffb200e0f6c",
+ "metadata": {},
+ "source": [
+ "### Create potential function and Calculate the energy"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "id": "64315715-db77-487f-b6c0-3e340085b774",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "energy: 4817.286675 kj/mol\n",
+ "{'q': DeviceArray([-2.99605719e-04, -3.40972179e-04, -4.91927203e-04,\n",
+ " -7.57415141e-04, -9.72305199e-04, -9.04476306e-04,\n",
+ " -6.19403852e-04, -3.18511669e-04, -4.14033308e-04,\n",
+ " -5.08883423e-04, -5.64320831e-04, -5.92336096e-04,\n",
+ " -4.59863367e-04, -5.31103425e-04, -3.93029108e-04,\n",
+ " -4.28646761e-04, -2.86954295e-04, -3.30793706e-04,\n",
+ " -3.17696799e-04, -3.50221376e-04, -2.77981466e-04,\n",
+ " -3.21483470e-04, -2.96629949e-04, -3.72879359e-04,\n",
+ " -3.51565779e-04, -4.66407859e-04, -5.10171801e-04,\n",
+ " 3.04087838e-04, -3.70321220e-03, 3.20495493e-04,\n",
+ " -9.18942861e-04, -3.34922291e-04, -4.97683690e-04,\n",
+ " -3.47713379e-04, -3.55104058e-04, -2.89328710e-04,\n",
+ " -3.24275491e-04, -2.80456324e-04, -3.02740626e-04,\n",
+ " -2.75075995e-04, -2.91228744e-04, -2.70938814e-04,\n",
+ " -4.46974131e-04, -2.97128120e-04, -8.78905378e-04,\n",
+ " 2.95142992e-03, -3.88588557e-02, 1.29549998e-02,\n",
+ " -3.83818161e-02, 3.31452051e-03, -3.74277838e-03,\n",
+ " 1.69146046e-04, -5.05571766e-04, -3.41280745e-04,\n",
+ " -2.96877554e-04, -3.50184751e-04, -2.80700753e-04,\n",
+ " -3.08958051e-04, -2.75486154e-04, -2.53472624e-04,\n",
+ " -4.13053343e-04, 2.50543320e-04, -3.94790845e-03,\n",
+ " 3.08837051e-03, -3.81956267e-02, 9.60634373e-02,\n",
+ " 9.68818582e-02, -3.62979638e-02, 3.29579664e-03,\n",
+ " -1.02522463e-03, -4.53547548e-04, -5.09515948e-04,\n",
+ " -3.07122995e-04, -3.81540204e-04, -2.97175528e-04,\n",
+ " -3.59608561e-04, -2.77417496e-04, -2.72418702e-04,\n",
+ " -2.30206122e-04, -7.13972582e-04, 5.07442477e-04,\n",
+ " -3.56837088e-03, 1.48526525e-02, -3.69820579e-02,\n",
+ " 9.79521879e-02, -4.11810695e-02, 1.16109691e-02,\n",
+ " -6.61601264e-03, -1.50696486e-04, -1.15772010e-03,\n",
+ " -5.52013847e-04, -3.42282836e-04, -5.04247185e-04,\n",
+ " -3.06268072e-04, -3.79429085e-04, -2.97021154e-04,\n",
+ " -2.68281704e-04, -3.63524282e-04, -2.26827694e-04,\n",
+ " -4.84749988e-04, 4.63586556e-04, -1.14723757e-03,\n",
+ " 2.12659981e-03, -7.30877030e-03, -6.49662707e-03,\n",
+ " -6.09779870e-03, -3.32921379e-03, -1.63993637e-03,\n",
+ " -1.04092695e-03, -6.96354733e-04, -3.47717779e-04,\n",
+ " -5.12611257e-04, -3.22951316e-04, -4.07471526e-04,\n",
+ " -2.99612167e-04, -3.28875625e-04, -3.16545100e-04,\n",
+ " -3.53711007e-04, -4.15631694e-04, -5.04555443e-04,\n",
+ " -9.22541839e-04, -1.29533806e-03, -1.85409182e-03,\n",
+ " -2.33100318e-03, -2.61057252e-03, -1.54778026e-03,\n",
+ " -1.42172801e-03, -7.52259682e-04, -6.57063416e-04,\n",
+ " -3.36476383e-04, -4.57009550e-04, -3.20344580e-04,\n",
+ " -3.97260729e-04, -3.11855166e-04, -3.26788820e-04,\n",
+ " -3.32597288e-04, -3.68762724e-04, -4.01437776e-04,\n",
+ " -5.80259620e-04, -8.87751823e-04, -9.34733571e-04,\n",
+ " -6.93458239e-04, -4.85308224e-04, -1.23620433e-02,\n",
+ " -9.20549199e-01, 4.60306706e-01, 4.60242494e-01], dtype=float64), 'lagmt': DeviceArray([ -574.30738132, -1398.09352793], dtype=float64)}\n"
+ ]
+ }
+ ],
+ "source": [
+ "pot = hamilt.createPotential(dmfftop, nonbondedCutoff=0.6*unit.nanometer, nonbondedMethod=app.PME,\n",
+ " ethresh=1e-3, neutral=True, slab=False, constQ=True,\n",
+ " const_list=const_list, const_vals=const_val,\n",
+ " has_aux=True)\n",
+ "\n",
+ "#return energy\n",
+ "efunc = pot.getPotentialFunc()\n",
+ "energy, aux = efunc(pos, box, pairs, hamilt.paramset.parameters, aux)\n",
+ "print(\"energy: %f kj/mol\" %energy)\n",
+ "print(aux)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "49c81a82-7ce6-40f9-a3b8-9a8aa4cc0a79",
+ "metadata": {},
+ "source": [
+ "## 2. Machine Learning Force"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "584e398e-3c0e-49d0-b28c-1c3152e569b9",
+ "metadata": {},
+ "source": [
+ "## 2.1 SGNN\n",
+ "Navigate to the working directory"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "id": "f684afc0-844f-4375-ab1c-23b0a51f8f90",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import os\n",
+ "os.chdir(os.path.join(\"DMFF\",\"examples\", \"sgnn\"))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "f4cf0379-4118-4a9c-93c1-986302101260",
+ "metadata": {},
+ "source": [
+ "SGNN assume the remaining bonding energy can be written as a sum over different local fragments of the molecule. These fragments are defined as “subgraphs” (labeled as g):\n",
+ "\n",
+ "$$\n",
+ "E_{sGNN}=\\sum {E_{g}}\n",
+ "$$\n",
+ "\n",
+ "Each subgraph defines the local environment of a central bond, and $E_g$ represents the intramolcular energy attributed to that bond. This leads to a rigorously localized representation of the molecule, warranting the extendibility of the resulting model."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "3088a4bf-2716-4fad-9c81-4d45374dbdd8",
+ "metadata": {},
+ "source": [
+ "### Create a SGNN potential function"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "c1a0e526-7290-41be-a833-449b989fefe8",
+ "metadata": {},
+ "source": [
+ "For information about the force field file, please refer to the user guide, which contains detailed explanations. Now you need to do the following to create a SGNN potential:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "id": "39ff4e27-40fc-4d09-be6b-89b9f7a344bb",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "H = Hamiltonian('peg.xml')\n",
+ "app.Topology.loadBondDefinitions(\"residues.xml\")\n",
+ "pdb = app.PDBFile(\"peg4.pdb\")\n",
+ "rc = 0.6\n",
+ "# generator stores all force field parameters\n",
+ "pots = H.createPotential(pdb.topology, nonbondedCutoff=rc*unit.nanometer, ethresh=5e-4)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "94008719-c055-4ae0-baa0-8f9d8b0440c2",
+ "metadata": {},
+ "source": [
+ "### Preparation for energy calculation"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "id": "aa0c27d3-2a77-4a8e-8c6d-821127986474",
+ "metadata": {
+ "collapsed": true,
+ "jupyter": {
+ "outputs_hidden": true
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "DeviceArray([[ 0, 1, 1],\n",
+ " [ 0, 2, 1],\n",
+ " [ 0, 3, 1],\n",
+ " [ 0, 4, 2],\n",
+ " [ 0, 5, 3],\n",
+ " [ 0, 6, 3],\n",
+ " [ 0, 7, 3],\n",
+ " [ 0, 8, 3],\n",
+ " [ 0, 9, 4],\n",
+ " [ 0, 10, 4],\n",
+ " [ 0, 11, 2],\n",
+ " [ 0, 12, 1],\n",
+ " [ 0, 13, 2],\n",
+ " [ 0, 14, 2],\n",
+ " [ 0, 19, 4],\n",
+ " [ 0, 20, 5],\n",
+ " [ 0, 21, 5],\n",
+ " [ 1, 2, 2],\n",
+ " [ 1, 3, 2],\n",
+ " [ 1, 4, 3],\n",
+ " [ 1, 5, 4],\n",
+ " [ 1, 6, 4],\n",
+ " [ 1, 7, 4],\n",
+ " [ 1, 8, 4],\n",
+ " [ 1, 9, 5],\n",
+ " [ 1, 10, 5],\n",
+ " [ 1, 11, 3],\n",
+ " [ 1, 12, 2],\n",
+ " [ 1, 13, 3],\n",
+ " [ 1, 14, 3],\n",
+ " [ 1, 19, 5],\n",
+ " [ 1, 20, 6],\n",
+ " [ 1, 21, 6],\n",
+ " [ 2, 3, 2],\n",
+ " [ 2, 4, 3],\n",
+ " [ 2, 5, 4],\n",
+ " [ 2, 6, 4],\n",
+ " [ 2, 7, 4],\n",
+ " [ 2, 8, 4],\n",
+ " [ 2, 9, 5],\n",
+ " [ 2, 10, 5],\n",
+ " [ 2, 11, 3],\n",
+ " [ 2, 12, 2],\n",
+ " [ 2, 13, 3],\n",
+ " [ 2, 14, 3],\n",
+ " [ 2, 19, 5],\n",
+ " [ 2, 20, 6],\n",
+ " [ 2, 21, 6],\n",
+ " [ 3, 4, 1],\n",
+ " [ 3, 5, 2],\n",
+ " [ 3, 6, 2],\n",
+ " [ 3, 7, 2],\n",
+ " [ 3, 8, 4],\n",
+ " [ 3, 9, 5],\n",
+ " [ 3, 10, 5],\n",
+ " [ 3, 11, 3],\n",
+ " [ 3, 12, 2],\n",
+ " [ 3, 13, 3],\n",
+ " [ 3, 14, 3],\n",
+ " [ 4, 5, 1],\n",
+ " [ 4, 6, 1],\n",
+ " [ 4, 7, 1],\n",
+ " [ 4, 8, 5],\n",
+ " [ 4, 11, 4],\n",
+ " [ 4, 12, 3],\n",
+ " [ 4, 13, 4],\n",
+ " [ 4, 14, 4],\n",
+ " [ 5, 6, 2],\n",
+ " [ 5, 7, 2],\n",
+ " [ 5, 11, 5],\n",
+ " [ 5, 12, 4],\n",
+ " [ 5, 13, 5],\n",
+ " [ 5, 14, 5],\n",
+ " [ 6, 7, 2],\n",
+ " [ 6, 11, 5],\n",
+ " [ 6, 12, 4],\n",
+ " [ 6, 13, 5],\n",
+ " [ 6, 14, 5],\n",
+ " [ 7, 11, 5],\n",
+ " [ 7, 12, 4],\n",
+ " [ 7, 13, 5],\n",
+ " [ 7, 14, 5],\n",
+ " [ 8, 9, 1],\n",
+ " [ 8, 10, 1],\n",
+ " [ 8, 11, 1],\n",
+ " [ 8, 12, 2],\n",
+ " [ 8, 13, 3],\n",
+ " [ 8, 14, 3],\n",
+ " [ 8, 15, 3],\n",
+ " [ 8, 16, 4],\n",
+ " [ 8, 17, 4],\n",
+ " [ 8, 18, 2],\n",
+ " [ 8, 19, 1],\n",
+ " [ 8, 20, 2],\n",
+ " [ 8, 21, 2],\n",
+ " [ 8, 22, 4],\n",
+ " [ 8, 23, 5],\n",
+ " [ 8, 24, 5],\n",
+ " [ 9, 10, 2],\n",
+ " [ 9, 11, 2],\n",
+ " [ 9, 12, 3],\n",
+ " [ 9, 13, 4],\n",
+ " [ 9, 14, 4],\n",
+ " [ 9, 15, 4],\n",
+ " [ 9, 16, 5],\n",
+ " [ 9, 17, 5],\n",
+ " [ 9, 18, 3],\n",
+ " [ 9, 19, 2],\n",
+ " [ 9, 20, 3],\n",
+ " [ 9, 21, 3],\n",
+ " [ 9, 22, 5],\n",
+ " [ 9, 23, 6],\n",
+ " [ 9, 24, 6],\n",
+ " [10, 11, 2],\n",
+ " [10, 12, 3],\n",
+ " [10, 13, 4],\n",
+ " [10, 14, 4],\n",
+ " [10, 15, 4],\n",
+ " [10, 16, 5],\n",
+ " [10, 17, 5],\n",
+ " [10, 18, 3],\n",
+ " [10, 19, 2],\n",
+ " [10, 20, 3],\n",
+ " [10, 21, 3],\n",
+ " [10, 22, 5],\n",
+ " [10, 23, 6],\n",
+ " [10, 24, 6],\n",
+ " [11, 12, 1],\n",
+ " [11, 13, 2],\n",
+ " [11, 14, 2],\n",
+ " [11, 15, 4],\n",
+ " [11, 16, 5],\n",
+ " [11, 17, 5],\n",
+ " [11, 18, 3],\n",
+ " [11, 19, 2],\n",
+ " [11, 20, 3],\n",
+ " [11, 21, 3],\n",
+ " [12, 13, 1],\n",
+ " [12, 14, 1],\n",
+ " [12, 15, 5],\n",
+ " [12, 18, 4],\n",
+ " [12, 19, 3],\n",
+ " [12, 20, 4],\n",
+ " [12, 21, 4],\n",
+ " [13, 14, 2],\n",
+ " [13, 18, 5],\n",
+ " [13, 19, 4],\n",
+ " [13, 20, 5],\n",
+ " [13, 21, 5],\n",
+ " [14, 18, 5],\n",
+ " [14, 19, 4],\n",
+ " [14, 20, 5],\n",
+ " [14, 21, 5],\n",
+ " [15, 16, 1],\n",
+ " [15, 17, 1],\n",
+ " [15, 18, 1],\n",
+ " [15, 19, 2],\n",
+ " [15, 20, 3],\n",
+ " [15, 21, 3],\n",
+ " [15, 22, 1],\n",
+ " [15, 23, 2],\n",
+ " [15, 24, 2],\n",
+ " [15, 25, 2],\n",
+ " [15, 26, 3],\n",
+ " [15, 27, 4],\n",
+ " [15, 28, 4],\n",
+ " [15, 29, 4],\n",
+ " [16, 17, 2],\n",
+ " [16, 18, 2],\n",
+ " [16, 19, 3],\n",
+ " [16, 20, 4],\n",
+ " [16, 21, 4],\n",
+ " [16, 22, 2],\n",
+ " [16, 23, 3],\n",
+ " [16, 24, 3],\n",
+ " [16, 25, 3],\n",
+ " [16, 26, 4],\n",
+ " [16, 27, 5],\n",
+ " [16, 28, 5],\n",
+ " [16, 29, 5],\n",
+ " [17, 18, 2],\n",
+ " [17, 19, 3],\n",
+ " [17, 20, 4],\n",
+ " [17, 21, 4],\n",
+ " [17, 22, 2],\n",
+ " [17, 23, 3],\n",
+ " [17, 24, 3],\n",
+ " [17, 25, 3],\n",
+ " [17, 26, 4],\n",
+ " [17, 27, 5],\n",
+ " [17, 28, 5],\n",
+ " [17, 29, 5],\n",
+ " [18, 19, 1],\n",
+ " [18, 20, 2],\n",
+ " [18, 21, 2],\n",
+ " [18, 22, 2],\n",
+ " [18, 23, 3],\n",
+ " [18, 24, 3],\n",
+ " [18, 25, 3],\n",
+ " [18, 26, 4],\n",
+ " [18, 27, 5],\n",
+ " [18, 28, 5],\n",
+ " [18, 29, 5],\n",
+ " [19, 20, 1],\n",
+ " [19, 21, 1],\n",
+ " [19, 22, 3],\n",
+ " [19, 23, 4],\n",
+ " [19, 24, 4],\n",
+ " [19, 25, 4],\n",
+ " [19, 26, 5],\n",
+ " [20, 21, 2],\n",
+ " [20, 22, 4],\n",
+ " [20, 23, 5],\n",
+ " [20, 24, 5],\n",
+ " [20, 25, 5],\n",
+ " [21, 22, 4],\n",
+ " [21, 23, 5],\n",
+ " [21, 24, 5],\n",
+ " [21, 25, 5],\n",
+ " [22, 23, 1],\n",
+ " [22, 24, 1],\n",
+ " [22, 25, 1],\n",
+ " [22, 26, 2],\n",
+ " [22, 27, 3],\n",
+ " [22, 28, 3],\n",
+ " [22, 29, 3],\n",
+ " [23, 24, 2],\n",
+ " [23, 25, 2],\n",
+ " [23, 26, 3],\n",
+ " [23, 27, 4],\n",
+ " [23, 28, 4],\n",
+ " [23, 29, 4],\n",
+ " [24, 25, 2],\n",
+ " [24, 26, 3],\n",
+ " [24, 27, 4],\n",
+ " [24, 28, 4],\n",
+ " [24, 29, 4],\n",
+ " [25, 26, 1],\n",
+ " [25, 27, 2],\n",
+ " [25, 28, 2],\n",
+ " [25, 29, 2],\n",
+ " [26, 27, 1],\n",
+ " [26, 28, 1],\n",
+ " [26, 29, 1],\n",
+ " [27, 28, 2],\n",
+ " [27, 29, 2],\n",
+ " [28, 29, 2],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0],\n",
+ " [30, 30, 0]], dtype=int64)"
+ ]
+ },
+ "execution_count": 14,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# construct inputs\n",
+ "positions = jnp.array(pdb.positions._value)\n",
+ "a, b, c = pdb.topology.getPeriodicBoxVectors()\n",
+ "box = jnp.array([a._value, b._value, c._value])\n",
+ "# neighbor list\n",
+ "nbl = NeighborList(box, rc, pots.meta['cov_map']) \n",
+ "nbl.allocate(positions)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "e8ef2d4a-6510-44a5-aca7-2c745359b112",
+ "metadata": {},
+ "source": [
+ "And you can get parameters by:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "id": "01e48a54-e506-4322-8c00-c6566a787264",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "paramset = H.getParameters()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "8f0caa3b-6320-4490-8e1f-3a9af1f9c708",
+ "metadata": {},
+ "source": [
+ "### Load data and fix it"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "id": "fe602bb3-488e-44ec-b957-0c433b1a18ab",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "with open('test_backend/set_test_lowT.pickle', 'rb') as ifile:\n",
+ " data = pickle.load(ifile)\n",
+ "\n",
+ "# input in nm\n",
+ "pos = jnp.array(data['positions'][0:20]) / 10\n",
+ "box = jnp.eye(3) * 5"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "1cd68aac-83b1-4a3e-b301-6263bc397761",
+ "metadata": {},
+ "source": [
+ "### Calculate the energy"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "id": "4b124b2c-46d7-4e70-96fd-c95407be39d2",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "-21.588284621154514\n",
+ "[-21.58828462 -39.79334159 10.03889335 -48.22451239 -32.90970162\n",
+ " -49.68568287 -47.58035178 -51.73860617 -37.39235277 -35.01933271\n",
+ " -46.06621902 -31.69327601 -6.86739655 -5.13698524 -27.4031207\n",
+ " -44.65301991 -52.00357797 3.1734038 -72.79081259 -28.27007722]\n"
+ ]
+ }
+ ],
+ "source": [
+ "efunc = jax.jit(pots.getPotentialFunc())\n",
+ "efunc_vmap = jax.vmap(jax.jit(pots.getPotentialFunc()), in_axes=(0, None, None, None), out_axes=0)\n",
+ "print(efunc(pos[0], box, nbl.pairs, paramset))\n",
+ "print(efunc_vmap(pos, box, nbl.pairs, paramset))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "5b4bc26c-2974-4bcd-b0dd-996d60c62d85",
+ "metadata": {},
+ "source": [
+ "## 2.1 EANN\n",
+ "Navigate to the working directory"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "id": "9781c244-156e-4a27-a5c2-5e957525eccd",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "current_directory = os.getcwd()\n",
+ "parent_directory = os.path.dirname(current_directory)\n",
+ "os.chdir(parent_directory)\n",
+ "os.chdir(os.path.join(\"eann\"))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "13ae9c47-247e-432e-abe2-7a6688b34e99",
+ "metadata": {},
+ "source": [
+ "EANN framework born out from the EAM idea. This physically inspired embedded atom neuralnetworks (EANN) representation is not only conceptually andnumerically simple but also very efficient and accurate, as discussed below. EANN assume that the impurity experiences a locally uniform electron density, the embedding energy can be approximated as a function of the scalar local electron density at the impurity site plus an electrostatic interaction. Considering all atoms in the system as impurities embedded in the electron gas created by other atoms, in the EAM framework, the total energy of an $N$ atom system is just the sum over all individual impurity energies.\n",
+ "\n",
+ "$$\n",
+ "E=\\sum_{i=1}^{N} E_{i}=\\sum_{i=1}^{N}\\left[F_{i}\\left(\\rho_{i}\\right)+\\frac{1}{2} \\sum_{j \\neq i} \\phi_{i j}\\left(r_{i j}\\right)\\right]\n",
+ "$$\n",
+ "\n",
+ "where $F_i$ is the embedding function, $ρ_i$ is the embedded electron density at the position of atom $i$ given by the superposition of the densities of surrounding atoms, and $\\phi_{ij}$ is the short-range repulsive potential between atoms $i$ and $j$ depending on their distance $r_{ij}$. As the exact forms of these functions are generally unknown, they are often taken from electron gas computations or fit to experimental properties with semiempirical expres-sions. Given these intrinsic approximations, EAM or even its modified version has a limited accuracy and is mainly suitablefor metallic systems.\n",
+ "\n",
+ "To go beyond the EAM, we need to improve both expressions of the embedded density and the function $F$. To this end, EANN start from the commonly used Gaussian-type orbitals (GTOs) centered at each atom,\n",
+ "\n",
+ "$$\n",
+ "\\phi_{l_{x} y_{l} y_{z}}^{\\alpha, r_{s}}=x^{l_{x}} y^{l_{y}} z^{l_{z}} \\exp \\left(-\\alpha\\left|r-r_{s}\\right|^{2}\\right)\n",
+ "$$\n",
+ "\n",
+ "where each atom is taken as the origin, $r=(x,y,z)$ constitutes the coordinate vector of an electron, $r$ is the norm of the vector,$α$ and $r_s$ are parameters that determine radial distributions of atomic orbitals, ${l_x+l_y+l_z=L}$ specifies the orbital angular momentum ($L$), e.g., $L$ = 0, 1, and 2, correspond to the s, p, and d orbitals, respectively. In this representation, the embedded density of atom $i$ can be taken as the square of the linear combination of atomic orbitals from neighboring atoms, in a similar spirit as that in Hartree−Fock (HF) and densityfunctional theory (DFT). This would generate a scalar $ρ^i$ value for the embedding atom $i$, as used in the EAM, which has been proven to offer insufficient representability for the total energyand can be improved by including the gradients of density."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "3567df74-e392-4679-9ec1-2fe087fef68d",
+ "metadata": {},
+ "source": [
+ "As for code, just follow the step in SGNN:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "id": "581c3238-c476-4118-99a1-1f5321775680",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "-0.09797672247941636\n"
+ ]
+ }
+ ],
+ "source": [
+ "H = Hamiltonian('peg.xml')\n",
+ "app.Topology.loadBondDefinitions(\"residues.xml\")\n",
+ "pdb = app.PDBFile(\"peg4.pdb\")\n",
+ "rc = 0.4\n",
+ "# generator stores all force field parameters\n",
+ "pots = H.createPotential(pdb.topology, nonbondedCutoff=rc*unit.nanometer, ethresh=5e-4)\n",
+ "\n",
+ "# construct inputs\n",
+ "positions = jnp.array(pdb.positions._value)\n",
+ "a, b, c = pdb.topology.getPeriodicBoxVectors()\n",
+ "box = jnp.array([a._value, b._value, c._value])\n",
+ "# neighbor list\n",
+ "nbl = NeighborList(box, rc, pots.meta['cov_map']) \n",
+ "nbl.allocate(positions)\n",
+ "\n",
+ "\n",
+ "paramset = H.getParameters()\n",
+ "# params = paramset.parameters\n",
+ "paramset.parameters\n",
+ "\n",
+ "efunc = jax.jit(pots.getPotentialFunc())\n",
+ "print(efunc(positions, box, nbl.pairs, paramset))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "95704edc-1cd8-40fc-bfd9-c24b4e18ac8d",
+ "metadata": {},
+ "source": [
+ "## 3. OpenMM Plugin for DMFF"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "6fb30805-b23d-4e70-be0b-5e3df0c31c6f",
+ "metadata": {},
+ "source": [
+ "OpenMM DMFF plugin was developed for [OpenMM](http://openmm.org) to incorporate the trained JAX model from [DMFF](https://github.com/deepmodeling/DMFF) as an independent Force class for molecular dynamics simulations.\n",
+ "To utilize this plugin, you need to save your DMFF model using the `DMFF/backend/save_dmff2tf.py` script.\n",
+ "The `save_dmff2tf.py` script converts the DMFF model to a TensorFlow module using the experimental feature of JAX called [`jax2tf`](https://github.com/google/jax/blob/main/jax/experimental/jax2tf/README.md).\n",
+ "The integration of the saved TensorFlow module with the DMFF plugin is accomplished using [cppflow](https://github.com/serizba/cppflow) and the OpenMM C++ interface. \n",
+ "\n",
+ "**Here you might need to shut down the original node and start up a new one**"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "e2bf5e5b-6429-4a86-b806-b4610928cd9e",
+ "metadata": {},
+ "source": [
+ "### Save the DMFF model with `save_dmff2tf.py` script"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b78d80d6-c0e6-4214-b80e-9ab40c0861d4",
+ "metadata": {},
+ "source": [
+ "#### Install TensorFlow and JAX"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "id": "72997e8a-b190-445d-955a-88cedbdbcf14",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import os\n",
+ "os.chdir('/data')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "id": "fd9049db-6633-4d93-94b1-7c9f517bacc6",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple\n",
+ "Collecting jax[cpu]==0.4.14\n",
+ " Downloading https://pypi.tuna.tsinghua.edu.cn/packages/65/ce/e3a6e8669de6ff37b44b1f801c33c10dcdc05548ee5ded30c0327eb09c93/jax-0.4.14.tar.gz (1.3 MB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.3/1.3 MB\u001b[0m \u001b[31m5.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0ma \u001b[36m0:00:01\u001b[0m\n",
+ "\u001b[?25h Installing build dependencies ... \u001b[?25ldone\n",
+ "\u001b[?25h Getting requirements to build wheel ... \u001b[?25ldone\n",
+ "\u001b[?25h Preparing metadata (pyproject.toml) ... \u001b[?25ldone\n",
+ "\u001b[?25hRequirement already satisfied: numpy>=1.22 in /opt/mamba/lib/python3.10/site-packages (from jax[cpu]==0.4.14) (1.23.4)\n",
+ "Requirement already satisfied: opt-einsum in /opt/mamba/lib/python3.10/site-packages (from jax[cpu]==0.4.14) (3.3.0)\n",
+ "Collecting ml-dtypes>=0.2.0\n",
+ " Downloading https://pypi.tuna.tsinghua.edu.cn/packages/90/31/ec94e33a799323a8c37d1883f44b517c38d9defa7667db97cba212384d71/ml_dtypes-0.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (206 kB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m206.7/206.7 kB\u001b[0m \u001b[31m4.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0ma \u001b[36m0:00:01\u001b[0m\n",
+ "\u001b[?25hRequirement already satisfied: scipy>=1.7 in /opt/mamba/lib/python3.10/site-packages (from jax[cpu]==0.4.14) (1.9.3)\n",
+ "Collecting jaxlib==0.4.14\n",
+ " Downloading https://pypi.tuna.tsinghua.edu.cn/packages/62/a1/beb609f27603cf2ce6f3fb14ad2e93bde9324158f872e46509d52b178cdc/jaxlib-0.4.14-cp310-cp310-manylinux2014_x86_64.whl (73.7 MB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m73.7/73.7 MB\u001b[0m \u001b[31m15.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0m\n",
+ "\u001b[?25hBuilding wheels for collected packages: jax\n",
+ " Building wheel for jax (pyproject.toml) ... \u001b[?25ldone\n",
+ "\u001b[?25h Created wheel for jax: filename=jax-0.4.14-py3-none-any.whl size=1535363 sha256=87520dcb5f85c5073802ec72c4583f7acda7b09c0432e41f25a1d6ab1b34a94e\n",
+ " Stored in directory: /root/.cache/pip/wheels/7d/7a/8d/c75c9181b2ea75b6953c3a91fdacfec166038cb6d815807149\n",
+ "Successfully built jax\n",
+ "Installing collected packages: ml-dtypes, jaxlib, jax\n",
+ " Attempting uninstall: jaxlib\n",
+ " Found existing installation: jaxlib 0.3.15+cuda11.cudnn82\n",
+ " Uninstalling jaxlib-0.3.15+cuda11.cudnn82:\n",
+ " Successfully uninstalled jaxlib-0.3.15+cuda11.cudnn82\n",
+ " Attempting uninstall: jax\n",
+ " Found existing installation: jax 0.3.17\n",
+ " Uninstalling jax-0.3.17:\n",
+ " Successfully uninstalled jax-0.3.17\n",
+ "Successfully installed jax-0.4.14 jaxlib-0.4.14 ml-dtypes-0.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[0mLooking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple\n",
+ "Collecting tensorflow\n",
+ " Downloading https://pypi.tuna.tsinghua.edu.cn/packages/e2/7a/c7762c698fb1ac41a7e3afee51dc72aa3ec74ae8d2f57ce19a9cded3a4af/tensorflow-2.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (489.8 MB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m489.8/489.8 MB\u001b[0m \u001b[31m1.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:02\u001b[0m\n",
+ "\u001b[?25hRequirement already satisfied: six>=1.12.0 in /opt/mamba/lib/python3.10/site-packages (from tensorflow) (1.16.0)\n",
+ "Requirement already satisfied: typing-extensions>=3.6.6 in /opt/mamba/lib/python3.10/site-packages (from tensorflow) (4.4.0)\n",
+ "Collecting tensorflow-estimator<2.15,>=2.14.0\n",
+ " Downloading https://pypi.tuna.tsinghua.edu.cn/packages/d1/da/4f264c196325bb6e37a6285caec5b12a03def489b57cc1fdac02bb6272cd/tensorflow_estimator-2.14.0-py2.py3-none-any.whl (440 kB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m440.7/440.7 kB\u001b[0m \u001b[31m31.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hCollecting gast!=0.5.0,!=0.5.1,!=0.5.2,>=0.2.1\n",
+ " Downloading https://pypi.tuna.tsinghua.edu.cn/packages/fa/39/5aae571e5a5f4de9c3445dae08a530498e5c53b0e74410eeeb0991c79047/gast-0.5.4-py3-none-any.whl (19 kB)\n",
+ "Collecting numpy>=1.23.5\n",
+ " Downloading https://pypi.tuna.tsinghua.edu.cn/packages/2d/5e/cb38e3d1916cc29880c84a9332a9122a8f49a7b57ec7aea63e0f678587a2/numpy-1.26.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.2 MB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m18.2/18.2 MB\u001b[0m \u001b[31m23.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0m\n",
+ "\u001b[?25hCollecting tensorflow-io-gcs-filesystem>=0.23.1\n",
+ " Downloading https://pypi.tuna.tsinghua.edu.cn/packages/88/99/8b507a009359fd55e411001acb64a1a8a4f81a26cb6e21c3b75c7fda4ae3/tensorflow_io_gcs_filesystem-0.34.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (2.4 MB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m2.4/2.4 MB\u001b[0m \u001b[31m38.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0ma \u001b[36m0:00:01\u001b[0m\n",
+ "\u001b[?25hRequirement already satisfied: absl-py>=1.0.0 in /opt/mamba/lib/python3.10/site-packages (from tensorflow) (1.3.0)\n",
+ "Collecting ml-dtypes==0.2.0\n",
+ " Downloading https://pypi.tuna.tsinghua.edu.cn/packages/d1/1d/d5cf76e5e40f69dbd273036e3172ae4a614577cb141673427b80cac948df/ml_dtypes-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.0 MB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.0/1.0 MB\u001b[0m \u001b[31m40.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hRequirement already satisfied: opt-einsum>=2.3.2 in /opt/mamba/lib/python3.10/site-packages (from tensorflow) (3.3.0)\n",
+ "Requirement already satisfied: h5py>=2.9.0 in /opt/mamba/lib/python3.10/site-packages (from tensorflow) (3.7.0)\n",
+ "Collecting termcolor>=1.1.0\n",
+ " Downloading https://pypi.tuna.tsinghua.edu.cn/packages/67/e1/434566ffce04448192369c1a282931cf4ae593e91907558eaecd2e9f2801/termcolor-2.3.0-py3-none-any.whl (6.9 kB)\n",
+ "Collecting wrapt<1.15,>=1.11.0\n",
+ " Downloading https://pypi.tuna.tsinghua.edu.cn/packages/fd/70/8a133c88a394394dd57159083b86a564247399440b63f2da0ad727593570/wrapt-1.14.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (77 kB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m77.9/77.9 kB\u001b[0m \u001b[31m24.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hCollecting keras<2.15,>=2.14.0\n",
+ " Downloading https://pypi.tuna.tsinghua.edu.cn/packages/fe/58/34d4d8f1aa11120c2d36d7ad27d0526164b1a8ae45990a2fede31d0e59bf/keras-2.14.0-py3-none-any.whl (1.7 MB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.7/1.7 MB\u001b[0m \u001b[31m37.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0ma \u001b[36m0:00:01\u001b[0m\n",
+ "\u001b[?25hCollecting grpcio<2.0,>=1.24.3\n",
+ " Downloading https://pypi.tuna.tsinghua.edu.cn/packages/29/cc/e6883efbbcaa6570a0d2207ba53c796137f11293e47d11e2696f37b66811/grpcio-1.59.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.3 MB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m5.3/5.3 MB\u001b[0m \u001b[31m37.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0m\n",
+ "\u001b[?25hRequirement already satisfied: packaging in /opt/mamba/lib/python3.10/site-packages (from tensorflow) (21.3)\n",
+ "Requirement already satisfied: setuptools in /opt/mamba/lib/python3.10/site-packages (from tensorflow) (65.5.0)\n",
+ "Collecting libclang>=13.0.0\n",
+ " Downloading https://pypi.tuna.tsinghua.edu.cn/packages/ea/df/55525e489c43f9dbb6c8ea27d8a567b3dcd18a22f3c45483055f5ca6611d/libclang-16.0.6-py2.py3-none-manylinux2010_x86_64.whl (22.9 MB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m22.9/22.9 MB\u001b[0m \u001b[31m12.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0m\n",
+ "\u001b[?25hCollecting tensorboard<2.15,>=2.14\n",
+ " Downloading https://pypi.tuna.tsinghua.edu.cn/packages/73/a2/66ed644f6ed1562e0285fcd959af17670ea313c8f331c46f79ee77187eb9/tensorboard-2.14.1-py3-none-any.whl (5.5 MB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m5.5/5.5 MB\u001b[0m \u001b[31m38.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0m\n",
+ "\u001b[?25hCollecting flatbuffers>=23.5.26\n",
+ " Downloading https://pypi.tuna.tsinghua.edu.cn/packages/6f/12/d5c79ee252793ffe845d58a913197bfa02ae9a0b5c9bc3dc4b58d477b9e7/flatbuffers-23.5.26-py2.py3-none-any.whl (26 kB)\n",
+ "Requirement already satisfied: astunparse>=1.6.0 in /opt/mamba/lib/python3.10/site-packages (from tensorflow) (1.6.3)\n",
+ "Collecting google-pasta>=0.1.1\n",
+ " Downloading https://pypi.tuna.tsinghua.edu.cn/packages/a3/de/c648ef6835192e6e2cc03f40b19eeda4382c49b5bafb43d88b931c4c74ac/google_pasta-0.2.0-py3-none-any.whl (57 kB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m57.5/57.5 kB\u001b[0m \u001b[31m20.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hCollecting protobuf!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<5.0.0dev,>=3.20.3\n",
+ " Downloading https://pypi.tuna.tsinghua.edu.cn/packages/ae/32/45b1cf0c5d4a3ba881f5164c26af877c0dabfe6de0019d426aa0e5cf6806/protobuf-4.25.0-cp37-abi3-manylinux2014_x86_64.whl (294 kB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m294.4/294.4 kB\u001b[0m \u001b[31m43.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hRequirement already satisfied: wheel<1.0,>=0.23.0 in /opt/mamba/lib/python3.10/site-packages (from astunparse>=1.6.0->tensorflow) (0.37.1)\n",
+ "Collecting google-auth<3,>=1.6.3\n",
+ " Downloading https://pypi.tuna.tsinghua.edu.cn/packages/86/a7/75911c13a242735d5aeaca6a272da380335ff4ba5f26d6b2ae20ff682d13/google_auth-2.23.4-py2.py3-none-any.whl (183 kB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m183.3/183.3 kB\u001b[0m \u001b[31m51.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hCollecting tensorboard-data-server<0.8.0,>=0.7.0\n",
+ " Downloading https://pypi.tuna.tsinghua.edu.cn/packages/73/c6/825dab04195756cf8ff2e12698f22513b3db2f64925bdd41671bfb33aaa5/tensorboard_data_server-0.7.2-py3-none-manylinux_2_31_x86_64.whl (6.6 MB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m6.6/6.6 MB\u001b[0m \u001b[31m37.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0m\n",
+ "\u001b[?25hCollecting werkzeug>=1.0.1\n",
+ " Downloading https://pypi.tuna.tsinghua.edu.cn/packages/c3/fc/254c3e9b5feb89ff5b9076a23218dafbc99c96ac5941e900b71206e6313b/werkzeug-3.0.1-py3-none-any.whl (226 kB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m226.7/226.7 kB\u001b[0m \u001b[31m53.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hCollecting markdown>=2.6.8\n",
+ " Downloading https://pypi.tuna.tsinghua.edu.cn/packages/70/58/2c5a654173937d9f540a4971c569b44dcd55e5424a484d954cdaeebcf79c/Markdown-3.5.1-py3-none-any.whl (102 kB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m102.2/102.2 kB\u001b[0m \u001b[31m36.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hCollecting google-auth-oauthlib<1.1,>=0.5\n",
+ " Downloading https://pypi.tuna.tsinghua.edu.cn/packages/4a/07/8d9a8186e6768b55dfffeb57c719bc03770cf8a970a074616ae6f9e26a57/google_auth_oauthlib-1.0.0-py2.py3-none-any.whl (18 kB)\n",
+ "Requirement already satisfied: requests<3,>=2.21.0 in /opt/mamba/lib/python3.10/site-packages (from tensorboard<2.15,>=2.14->tensorflow) (2.28.1)\n",
+ "Requirement already satisfied: pyparsing!=3.0.5,>=2.0.2 in /opt/mamba/lib/python3.10/site-packages (from packaging->tensorflow) (3.0.9)\n",
+ "Collecting pyasn1-modules>=0.2.1\n",
+ " Downloading https://pypi.tuna.tsinghua.edu.cn/packages/cd/8e/bea464350e1b8c6ed0da3a312659cb648804a08af6cacc6435867f74f8bd/pyasn1_modules-0.3.0-py2.py3-none-any.whl (181 kB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m181.3/181.3 kB\u001b[0m \u001b[31m53.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hCollecting rsa<5,>=3.1.4\n",
+ " Downloading https://pypi.tuna.tsinghua.edu.cn/packages/49/97/fa78e3d2f65c02c8e1268b9aba606569fe97f6c8f7c2d74394553347c145/rsa-4.9-py3-none-any.whl (34 kB)\n",
+ "Collecting cachetools<6.0,>=2.0.0\n",
+ " Downloading https://pypi.tuna.tsinghua.edu.cn/packages/a2/91/2d843adb9fbd911e0da45fbf6f18ca89d07a087c3daa23e955584f90ebf4/cachetools-5.3.2-py3-none-any.whl (9.3 kB)\n",
+ "Collecting requests-oauthlib>=0.7.0\n",
+ " Downloading https://pypi.tuna.tsinghua.edu.cn/packages/6f/bb/5deac77a9af870143c684ab46a7934038a53eb4aa975bc0687ed6ca2c610/requests_oauthlib-1.3.1-py2.py3-none-any.whl (23 kB)\n",
+ "Requirement already satisfied: urllib3<1.27,>=1.21.1 in /opt/mamba/lib/python3.10/site-packages (from requests<3,>=2.21.0->tensorboard<2.15,>=2.14->tensorflow) (1.26.11)\n",
+ "Requirement already satisfied: certifi>=2017.4.17 in /opt/mamba/lib/python3.10/site-packages (from requests<3,>=2.21.0->tensorboard<2.15,>=2.14->tensorflow) (2022.9.24)\n",
+ "Requirement already satisfied: charset-normalizer<3,>=2 in /opt/mamba/lib/python3.10/site-packages (from requests<3,>=2.21.0->tensorboard<2.15,>=2.14->tensorflow) (2.1.1)\n",
+ "Requirement already satisfied: idna<4,>=2.5 in /opt/mamba/lib/python3.10/site-packages (from requests<3,>=2.21.0->tensorboard<2.15,>=2.14->tensorflow) (3.4)\n",
+ "Requirement already satisfied: MarkupSafe>=2.1.1 in /opt/mamba/lib/python3.10/site-packages (from werkzeug>=1.0.1->tensorboard<2.15,>=2.14->tensorflow) (2.1.1)\n",
+ "Collecting pyasn1<0.6.0,>=0.4.6\n",
+ " Downloading https://pypi.tuna.tsinghua.edu.cn/packages/14/e5/b56a725cbde139aa960c26a1a3ca4d4af437282e20b5314ee6a3501e7dfc/pyasn1-0.5.0-py2.py3-none-any.whl (83 kB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m83.9/83.9 kB\u001b[0m \u001b[31m28.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hCollecting oauthlib>=3.0.0\n",
+ " Downloading https://pypi.tuna.tsinghua.edu.cn/packages/7e/80/cab10959dc1faead58dc8384a781dfbf93cb4d33d50988f7a69f1b7c9bbe/oauthlib-3.2.2-py3-none-any.whl (151 kB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m151.7/151.7 kB\u001b[0m \u001b[31m44.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hInstalling collected packages: libclang, flatbuffers, wrapt, werkzeug, termcolor, tensorflow-io-gcs-filesystem, tensorflow-estimator, tensorboard-data-server, pyasn1, protobuf, oauthlib, numpy, markdown, keras, grpcio, google-pasta, gast, cachetools, rsa, requests-oauthlib, pyasn1-modules, ml-dtypes, google-auth, google-auth-oauthlib, tensorboard, tensorflow\n",
+ " Attempting uninstall: numpy\n",
+ " Found existing installation: numpy 1.23.4\n",
+ " Uninstalling numpy-1.23.4:\n",
+ " Successfully uninstalled numpy-1.23.4\n",
+ " Attempting uninstall: ml-dtypes\n",
+ " Found existing installation: ml-dtypes 0.3.1\n",
+ " Uninstalling ml-dtypes-0.3.1:\n",
+ " Successfully uninstalled ml-dtypes-0.3.1\n",
+ "\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n",
+ "scipy 1.9.3 requires numpy<1.26.0,>=1.18.5, but you have numpy 1.26.1 which is incompatible.\u001b[0m\u001b[31m\n",
+ "\u001b[0mSuccessfully installed cachetools-5.3.2 flatbuffers-23.5.26 gast-0.5.4 google-auth-2.23.4 google-auth-oauthlib-1.0.0 google-pasta-0.2.0 grpcio-1.59.2 keras-2.14.0 libclang-16.0.6 markdown-3.5.1 ml-dtypes-0.2.0 numpy-1.26.1 oauthlib-3.2.2 protobuf-4.25.0 pyasn1-0.5.0 pyasn1-modules-0.3.0 requests-oauthlib-1.3.1 rsa-4.9 tensorboard-2.14.1 tensorboard-data-server-0.7.2 tensorflow-2.14.0 tensorflow-estimator-2.14.0 tensorflow-io-gcs-filesystem-0.34.0 termcolor-2.3.0 werkzeug-3.0.1 wrapt-1.14.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[0m"
+ ]
+ }
+ ],
+ "source": [
+ "!pip install \"jax[cpu]==0.4.14\"\n",
+ "!pip install tensorflow"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "f64a7c5d-c36a-4405-9fd1-f7269c567fb7",
+ "metadata": {},
+ "source": [
+ "#### Save DMFF with dmff2tf script"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "6c282143-6795-49d8-830c-334e2c384336",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "!python DMFF/backend/save_dmff2tf.py --input_pdb DMFF/examples/water_fullpol/water_dimer.pdb --xml_files DMFF/examples/water_fullpol/forcefield.xml --output /tmp/dmff_admp_water_dimer --has_aux True\n",
+ "!ls /tmp/dmff_admp_water_dimer"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "d9bd39fd-4c0d-45f2-bcc0-882d8b2d49d7",
+ "metadata": {},
+ "source": [
+ "!python DMFF/backend/save_dmff2tf.py --input_pdb DMFF/examples/classical/lig.pdb --xml_files DMFF/examples/classical/lig-prm.xml --output /tmp/dmff_classical_lig"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "0556b692-adeb-45db-970a-830d266dd769",
+ "metadata": {},
+ "source": [
+ "### Install OpenMM DMFF Plugin"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "id": "43bc5a9e-54da-4dda-8f1b-ad53cd1b5215",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ " __ __ __ __\n",
+ " / \\ / \\ / \\ / \\\n",
+ " / \\/ \\/ \\/ \\\n",
+ "███████████████/ /██/ /██/ /██/ /████████████████████████\n",
+ " / / \\ / \\ / \\ / \\ \\____\n",
+ " / / \\_/ \\_/ \\_/ \\ o \\__,\n",
+ " / _/ \\_____/ `\n",
+ " |/\n",
+ " ███╗ ███╗ █████╗ ███╗ ███╗██████╗ █████╗\n",
+ " ████╗ ████║██╔══██╗████╗ ████║██╔══██╗██╔══██╗\n",
+ " ██╔████╔██║███████║██╔████╔██║██████╔╝███████║\n",
+ " ██║╚██╔╝██║██╔══██║██║╚██╔╝██║██╔══██╗██╔══██║\n",
+ " ██║ ╚═╝ ██║██║ ██║██║ ╚═╝ ██║██████╔╝██║ ██║\n",
+ " ╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝╚═════╝ ╚═╝ ╚═╝\n",
+ "\n",
+ " mamba (0.27.0) supported by @QuantStack\n",
+ "\n",
+ " GitHub: https://github.com/mamba-org/mamba\n",
+ " Twitter: https://twitter.com/QuantStack\n",
+ "\n",
+ "█████████████████████████████████████████████████████████████\n",
+ "\n",
+ "\n",
+ "Looking for: ['python=3.9', 'openmm', 'libtensorflow_cc=2.9.1', 'swig=4.0.1', 'setuptools=59.5.0']\n",
+ "\n",
+ "\u001b[?25l\u001b[2K\u001b[0G[+] 0.0s\n",
+ "\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.1s\n",
+ "conda-forge/linux-64 \u001b[33m━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.1s\n",
+ "conda-forge/noarch \u001b[90m━━━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.1s\n",
+ "pkgs/main/linux-64 \u001b[33m━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.1s\n",
+ "pkgs/main/noarch \u001b[90m━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.1s\n",
+ "pkgs/r/linux-64 \u001b[90m━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.2s\n",
+ "conda-forge/linux-64 \u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.2s\n",
+ "conda-forge/noarch \u001b[33m━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.2s\n",
+ "pkgs/main/linux-64 \u001b[90m╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.2s\n",
+ "pkgs/main/noarch \u001b[90m━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.2s\n",
+ "pkgs/r/linux-64 \u001b[90m━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.3s\n",
+ "conda-forge/linux-64 \u001b[90m╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.3s\n",
+ "conda-forge/noarch \u001b[33m━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.3s\n",
+ "pkgs/main/linux-64 \u001b[90m━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.3s\n",
+ "pkgs/main/noarch \u001b[90m━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.3s\n",
+ "pkgs/r/linux-64 \u001b[90m━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.4s\n",
+ "conda-forge/linux-64 \u001b[90m━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.4s\n",
+ "conda-forge/noarch \u001b[33m━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.4s\n",
+ "pkgs/main/linux-64 \u001b[90m━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.4s\n",
+ "pkgs/main/noarch \u001b[90m━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.4s\n",
+ "pkgs/r/linux-64 \u001b[90m━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.5s\n",
+ "conda-forge/linux-64 \u001b[90m━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.5s\n",
+ "conda-forge/noarch \u001b[33m━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.5s\n",
+ "pkgs/main/linux-64 \u001b[90m━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.5s\n",
+ "pkgs/main/noarch \u001b[90m━━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.5s\n",
+ "pkgs/r/linux-64 \u001b[90m━━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.6s\n",
+ "conda-forge/linux-64 \u001b[90m━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.6s\n",
+ "conda-forge/noarch \u001b[33m━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.6s\n",
+ "pkgs/main/linux-64 \u001b[90m━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.6s\n",
+ "pkgs/main/noarch \u001b[90m━━━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.6s\n",
+ "pkgs/r/linux-64 \u001b[90m━━━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.6s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.7s\n",
+ "conda-forge/linux-64 \u001b[90m━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.7s\n",
+ "conda-forge/noarch \u001b[33m━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.7s\n",
+ "pkgs/main/linux-64 \u001b[90m━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.7s\n",
+ "pkgs/main/noarch \u001b[33m━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━\u001b[0m 352.0 B / ??.?MB @ 565.0 B/s 0.7s\n",
+ "pkgs/r/linux-64 \u001b[33m━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.8s\n",
+ "conda-forge/linux-64 \u001b[90m━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.8s\n",
+ "conda-forge/noarch \u001b[33m━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.8s\n",
+ "pkgs/main/linux-64 \u001b[90m━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━━\u001b[0m 31.4kB / ??.?MB @ 43.2kB/s 0.8s\n",
+ "pkgs/main/noarch \u001b[33m━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━\u001b[0m 31.4kB / ??.?MB @ 43.2kB/s 0.8s\n",
+ "pkgs/r/linux-64 \u001b[33m━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━\u001b[0m 31.4kB / ??.?MB @ 43.2kB/s 0.8s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.9s\n",
+ "conda-forge/linux-64 \u001b[90m━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.9s\n",
+ "conda-forge/noarch \u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.9s\n",
+ "pkgs/main/linux-64 \u001b[90m━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━\u001b[0m 32.8kB / ??.?MB @ 38.0kB/s 0.9s\n",
+ "pkgs/main/noarch \u001b[33m━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━\u001b[0m 32.8kB / ??.?MB @ 38.0kB/s 0.9s\n",
+ "pkgs/r/linux-64 \u001b[33m━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━\u001b[0m 32.8kB / ??.?MB @ 38.0kB/s 0.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 1.0s\n",
+ "conda-forge/linux-64 \u001b[90m━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 1.0s\n",
+ "conda-forge/noarch \u001b[90m━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 1.0s\n",
+ "pkgs/main/linux-64 \u001b[90m━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━\u001b[0m 107.0kB / ??.?MB @ 110.4kB/s 1.0s\n",
+ "pkgs/main/noarch \u001b[33m━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━\u001b[0m 102.4kB / ??.?MB @ 105.6kB/s 1.0s\n",
+ "pkgs/r/linux-64 \u001b[33m━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━\u001b[0m 110.9kB / ??.?MB @ 114.3kB/s 1.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 1.1s\n",
+ "conda-forge/linux-64 \u001b[90m━━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 1.1s\n",
+ "conda-forge/noarch \u001b[90m━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 1.1s\n",
+ "pkgs/main/linux-64 \u001b[90m━━━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━\u001b[0m 156.1kB / ??.?MB @ 145.8kB/s 1.1s\n",
+ "pkgs/main/noarch \u001b[33m━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━\u001b[0m 176.5kB / ??.?MB @ 164.9kB/s 1.1s\n",
+ "pkgs/r/linux-64 \u001b[33m━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━\u001b[0m 180.8kB / ??.?MB @ 168.7kB/s 1.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 1.2s\n",
+ "conda-forge/linux-64 \u001b[33m━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 1.2s\n",
+ "conda-forge/noarch \u001b[90m━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 1.2s\n",
+ "pkgs/main/linux-64 \u001b[33m━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━\u001b[0m 229.4kB / ??.?MB @ 195.9kB/s 1.2s\n",
+ "pkgs/main/noarch \u001b[90m╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━\u001b[0m 262.1kB / ??.?MB @ 223.8kB/s 1.2s\n",
+ "pkgs/r/linux-64 \u001b[90m╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━\u001b[0m 278.5kB / ??.?MB @ 236.8kB/s 1.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 1.3s\n",
+ "conda-forge/linux-64 \u001b[33m━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━\u001b[0m 18.2kB / ??.?MB @ 14.3kB/s 1.3s\n",
+ "conda-forge/noarch \u001b[90m━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━\u001b[0m 32.2kB / ??.?MB @ 25.3kB/s 1.3s\n",
+ "pkgs/main/linux-64 \u001b[33m━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━\u001b[0m 344.0kB / ??.?MB @ 270.6kB/s 1.3s\n",
+ "pkgs/main/noarch \u001b[90m━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━\u001b[0m 393.1kB / ??.?MB @ 309.2kB/s 1.3s\n",
+ "pkgs/r/linux-64 \u001b[90m━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━\u001b[0m 409.5kB / ??.?MB @ 320.9kB/s 1.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 1.4s\n",
+ "conda-forge/linux-64 \u001b[33m━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━\u001b[0m 31.8kB / ??.?MB @ 23.1kB/s 1.4s\n",
+ "conda-forge/noarch \u001b[90m━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━\u001b[0m 32.2kB / ??.?MB @ 23.4kB/s 1.4s\n",
+ "pkgs/main/linux-64 \u001b[33m━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━\u001b[0m 475.0kB / ??.?MB @ 346.2kB/s 1.4s\n",
+ "pkgs/main/noarch \u001b[90m━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━\u001b[0m 577.5kB / ??.?MB @ 420.9kB/s 1.4s\n",
+ "pkgs/r/linux-64 \u001b[90m━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━\u001b[0m 606.0kB / ??.?MB @ 440.2kB/s 1.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gpkgs/main/noarch 853.2kB @ 583.5kB/s 1.5s\n",
+ "[+] 1.5s\n",
+ "conda-forge/linux-64 \u001b[33m━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━\u001b[0m 64.9kB / ??.?MB @ 44.0kB/s 1.5s\n",
+ "conda-forge/noarch \u001b[90m━━━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━\u001b[0m 134.6kB / ??.?MB @ 91.3kB/s 1.5s\n",
+ "pkgs/main/linux-64 \u001b[33m━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━\u001b[0m 704.2kB / ??.?MB @ 477.7kB/s 1.5s\n",
+ "pkgs/r/linux-64 \u001b[90m━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━\u001b[0m 917.1kB / ??.?MB @ 620.9kB/s 1.5s\n",
+ "pkgs/r/noarch \u001b[33m━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 1.6s\n",
+ "conda-forge/linux-64 \u001b[90m╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━\u001b[0m 107.4kB / ??.?MB @ 68.2kB/s 1.6s\n",
+ "conda-forge/noarch \u001b[33m━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━\u001b[0m 175.4kB / ??.?MB @ 111.5kB/s 1.6s\n",
+ "pkgs/main/linux-64 \u001b[90m━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━\u001b[0m 1.0MB / ??.?MB @ 666.0kB/s 1.6s\n",
+ "pkgs/r/linux-64 \u001b[90m━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━\u001b[0m 1.4MB / ??.?MB @ 861.6kB/s 1.6s\n",
+ "pkgs/r/noarch \u001b[33m━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gpkgs/r/linux-64 1.9MB @ 1.1MB/s 1.7s\n",
+ "[+] 1.7s\n",
+ "conda-forge/linux-64 \u001b[90m━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━\u001b[0m 165.5kB / ??.?MB @ 98.4kB/s 1.7s\n",
+ "conda-forge/noarch \u001b[33m━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━\u001b[0m 330.6kB / ??.?MB @ 196.6kB/s 1.7s\n",
+ "pkgs/main/linux-64 \u001b[90m━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━\u001b[0m 1.4MB / ??.?MB @ 854.6kB/s 1.7s\n",
+ "pkgs/r/noarch \u001b[90m━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━\u001b[0m 28.7kB / ??.?MB @ 17.0kB/s 0.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 1.8s\n",
+ "conda-forge/linux-64 \u001b[90m━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━\u001b[0m 287.9kB / ??.?MB @ 161.5kB/s 1.8s\n",
+ "conda-forge/noarch \u001b[33m━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━\u001b[0m 494.3kB / ??.?MB @ 277.2kB/s 1.8s\n",
+ "pkgs/main/linux-64 \u001b[90m━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━\u001b[0m 2.2MB / ??.?MB @ 1.2MB/s 1.8s\n",
+ "pkgs/r/noarch \u001b[90m━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━\u001b[0m 593.9kB / ??.?MB @ 333.2kB/s 0.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 1.9s\n",
+ "conda-forge/linux-64 \u001b[90m━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━━\u001b[0m 418.8kB / ??.?MB @ 222.4kB/s 1.9s\n",
+ "conda-forge/noarch \u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━\u001b[0m 772.5kB / ??.?MB @ 410.2kB/s 1.9s\n",
+ "pkgs/main/linux-64 \u001b[90m━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━\u001b[0m 2.7MB / ??.?MB @ 1.5MB/s 1.9s\n",
+ "pkgs/r/noarch \u001b[90m━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━\u001b[0m 1.1MB / ??.?MB @ 591.8kB/s 0.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 2.0s\n",
+ "conda-forge/linux-64 \u001b[90m━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━\u001b[0m 647.8kB / ??.?MB @ 326.6kB/s 2.0s\n",
+ "conda-forge/noarch \u001b[90m━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━\u001b[0m 1.1MB / ??.?MB @ 554.5kB/s 2.0s\n",
+ "pkgs/main/linux-64 \u001b[90m━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━\u001b[0m 3.2MB / ??.?MB @ 1.6MB/s 2.0s\n",
+ "pkgs/r/noarch \u001b[90m━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━\u001b[0m 1.6MB / ??.?MB @ 813.5kB/s 0.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 2.1s\n",
+ "conda-forge/linux-64 \u001b[90m━━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━\u001b[0m 1.0MB / ??.?MB @ 480.9kB/s 2.1s\n",
+ "conda-forge/noarch \u001b[90m━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━\u001b[0m 1.6MB / ??.?MB @ 786.8kB/s 2.1s\n",
+ "pkgs/main/linux-64 \u001b[90m━━━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━\u001b[0m 3.7MB / ??.?MB @ 1.8MB/s 2.1s\n",
+ "pkgs/r/noarch \u001b[90m━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━\u001b[0m 2.1MB / ??.?MB @ 1.0MB/s 0.6s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gpkgs/r/noarch 2.3MB @ 1.1MB/s 0.7s\n",
+ "[+] 2.2s\n",
+ "conda-forge/linux-64 \u001b[90m━━━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━\u001b[0m 1.2MB / ??.?MB @ 563.4kB/s 2.2s\n",
+ "conda-forge/noarch \u001b[90m━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━\u001b[0m 2.0MB / ??.?MB @ 935.1kB/s 2.2s\n",
+ "pkgs/main/linux-64 \u001b[90m━━━━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━\u001b[0m 4.0MB / ??.?MB @ 1.8MB/s 2.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 2.3s\n",
+ "conda-forge/linux-64 \u001b[33m━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━\u001b[0m 2.1MB / ??.?MB @ 915.4kB/s 2.3s\n",
+ "conda-forge/noarch \u001b[90m━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━\u001b[0m 3.3MB / ??.?MB @ 1.5MB/s 2.3s\n",
+ "pkgs/main/linux-64 \u001b[33m━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━\u001b[0m 4.3MB / ??.?MB @ 1.9MB/s 2.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 2.4s\n",
+ "conda-forge/linux-64 \u001b[33m━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━\u001b[0m 3.2MB / ??.?MB @ 1.3MB/s 2.4s\n",
+ "conda-forge/noarch \u001b[90m━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━\u001b[0m 4.1MB / ??.?MB @ 1.7MB/s 2.4s\n",
+ "pkgs/main/linux-64 \u001b[33m━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━\u001b[0m 4.8MB / ??.?MB @ 2.1MB/s 2.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 2.5s\n",
+ "conda-forge/linux-64 \u001b[33m━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━\u001b[0m 4.2MB / ??.?MB @ 1.7MB/s 2.5s\n",
+ "conda-forge/noarch \u001b[90m━━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━\u001b[0m 5.1MB / ??.?MB @ 2.1MB/s 2.5s\n",
+ "pkgs/main/linux-64 \u001b[33m━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━\u001b[0m 5.4MB / ??.?MB @ 2.2MB/s 2.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 2.6s\n",
+ "conda-forge/linux-64 \u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━\u001b[0m 5.2MB / ??.?MB @ 2.0MB/s 2.6s\n",
+ "conda-forge/noarch \u001b[33m━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━\u001b[0m 6.0MB / ??.?MB @ 2.4MB/s 2.6s\n",
+ "pkgs/main/linux-64 \u001b[90m╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━\u001b[0m 6.0MB / ??.?MB @ 2.3MB/s 2.6s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 2.7s\n",
+ "conda-forge/linux-64 \u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━\u001b[0m 5.7MB @ 2.2MB/s 2.7s\n",
+ "conda-forge/noarch \u001b[33m━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━\u001b[0m 6.6MB @ 2.5MB/s 2.7s\n",
+ "pkgs/main/linux-64 ━━━━━━━━━━━━━━━━━━━━━━ 6.3MB @ 2.4MB/s Finalizing 2.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gpkgs/main/linux-64 @ 2.4MB/s 2.7s\n",
+ "[+] 2.8s\n",
+ "conda-forge/linux-64 \u001b[90m━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━\u001b[0m 6.0MB / ??.?MB @ 2.1MB/s 2.8s\n",
+ "conda-forge/noarch \u001b[33m━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━\u001b[0m 6.8MB / ??.?MB @ 2.4MB/s 2.8s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 2.9s\n",
+ "conda-forge/linux-64 \u001b[90m━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━\u001b[0m 7.8MB / ??.?MB @ 2.7MB/s 2.9s\n",
+ "conda-forge/noarch \u001b[33m━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━\u001b[0m 8.9MB / ??.?MB @ 3.1MB/s 2.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.0s\n",
+ "conda-forge/linux-64 \u001b[90m━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━\u001b[0m 9.4MB / ??.?MB @ 3.1MB/s 3.0s\n",
+ "conda-forge/noarch \u001b[33m━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━\u001b[0m 10.4MB / ??.?MB @ 3.5MB/s 3.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.1s\n",
+ "conda-forge/linux-64 \u001b[90m━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━\u001b[0m 10.4MB / ??.?MB @ 3.4MB/s 3.1s\n",
+ "conda-forge/noarch \u001b[90m╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━\u001b[0m 11.5MB / ??.?MB @ 3.7MB/s 3.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.2s\n",
+ "conda-forge/linux-64 \u001b[90m━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━\u001b[0m 11.4MB / ??.?MB @ 3.6MB/s 3.2s\n",
+ "conda-forge/noarch \u001b[90m━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━\u001b[0m 12.5MB / ??.?MB @ 3.9MB/s 3.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.3s\n",
+ "conda-forge/linux-64 \u001b[90m━━━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━\u001b[0m 12.3MB / ??.?MB @ 3.7MB/s 3.3s\n",
+ "conda-forge/noarch \u001b[90m━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━\u001b[0m 13.4MB / ??.?MB @ 4.1MB/s 3.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.4s\n",
+ "conda-forge/linux-64 \u001b[90m━━━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━\u001b[0m 12.3MB / ??.?MB @ 3.7MB/s 3.4s\n",
+ "conda-forge/noarch \u001b[90m━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━\u001b[0m 13.4MB / ??.?MB @ 4.1MB/s 3.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.5s\n",
+ "conda-forge/linux-64 \u001b[90m━━━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━\u001b[0m 12.3MB / ??.?MB @ 3.7MB/s 3.5s\n",
+ "conda-forge/noarch \u001b[90m━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━\u001b[0m 13.4MB / ??.?MB @ 4.1MB/s 3.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.6s\n",
+ "conda-forge/linux-64 \u001b[33m━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━\u001b[0m 12.8MB / ??.?MB @ 3.6MB/s 3.6s\n",
+ "conda-forge/noarch \u001b[90m━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━\u001b[0m 14.1MB / ??.?MB @ 3.9MB/s 3.6s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.7s\n",
+ "conda-forge/linux-64 \u001b[33m━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━\u001b[0m 15.4MB / ??.?MB @ 4.2MB/s 3.7s\n",
+ "conda-forge/noarch \u001b[90m━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━\u001b[0m 14.4MB / ??.?MB @ 3.9MB/s 3.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.8s\n",
+ "conda-forge/linux-64 \u001b[33m━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━\u001b[0m 15.4MB @ 4.2MB/s 3.8s\n",
+ "conda-forge/noarch ━━━━━━━━━━━━━━━━━━━━━━ 14.5MB @ 3.9MB/s Finalizing 3.8s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.9s\n",
+ "conda-forge/linux-64 \u001b[33m━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━\u001b[0m 15.4MB / ??.?MB @ 4.2MB/s 3.9s\u001b[2K\u001b[1A\u001b[2K\u001b[0Gconda-forge/noarch @ 3.9MB/s 3.9s\n",
+ "[+] 4.0s\n",
+ "conda-forge/linux-64 \u001b[33m━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━\u001b[0m 17.5MB / ??.?MB @ 4.4MB/s 4.0s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.1s\n",
+ "conda-forge/linux-64 \u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━\u001b[0m 19.1MB / ??.?MB @ 4.7MB/s 4.1s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.2s\n",
+ "conda-forge/linux-64 \u001b[90m━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━\u001b[0m 20.1MB / ??.?MB @ 4.8MB/s 4.2s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.3s\n",
+ "conda-forge/linux-64 \u001b[90m━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━\u001b[0m 21.0MB / ??.?MB @ 4.9MB/s 4.3s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.4s\n",
+ "conda-forge/linux-64 \u001b[90m━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━\u001b[0m 22.0MB / ??.?MB @ 5.0MB/s 4.4s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.5s\n",
+ "conda-forge/linux-64 \u001b[90m━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━\u001b[0m 22.9MB / ??.?MB @ 5.1MB/s 4.5s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.6s\n",
+ "conda-forge/linux-64 \u001b[90m━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━\u001b[0m 23.8MB / ??.?MB @ 5.2MB/s 4.6s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.7s\n",
+ "conda-forge/linux-64 \u001b[90m━━━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━\u001b[0m 24.8MB / ??.?MB @ 5.3MB/s 4.7s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.8s\n",
+ "conda-forge/linux-64 \u001b[33m━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━\u001b[0m 25.7MB / ??.?MB @ 5.4MB/s 4.8s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.9s\n",
+ "conda-forge/linux-64 \u001b[33m━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━\u001b[0m 26.7MB / ??.?MB @ 5.5MB/s 4.9s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.0s\n",
+ "conda-forge/linux-64 \u001b[33m━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━\u001b[0m 27.7MB / ??.?MB @ 5.5MB/s 5.0s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.1s\n",
+ "conda-forge/linux-64 \u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━\u001b[0m 28.6MB / ??.?MB @ 5.6MB/s 5.1s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.2s\n",
+ "conda-forge/linux-64 \u001b[90m━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━\u001b[0m 29.4MB / ??.?MB @ 5.7MB/s 5.2s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.3s\n",
+ "conda-forge/linux-64 \u001b[90m━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━\u001b[0m 30.3MB / ??.?MB @ 5.7MB/s 5.3s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.4s\n",
+ "conda-forge/linux-64 \u001b[90m━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━\u001b[0m 31.2MB / ??.?MB @ 5.8MB/s 5.4s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.5s\n",
+ "conda-forge/linux-64 \u001b[90m━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━\u001b[0m 32.3MB / ??.?MB @ 5.9MB/s 5.5s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.6s\n",
+ "conda-forge/linux-64 \u001b[90m━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━\u001b[0m 33.3MB / ??.?MB @ 6.0MB/s 5.6s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.7s\n",
+ "conda-forge/linux-64 \u001b[90m━━━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━\u001b[0m 34.1MB / ??.?MB @ 6.0MB/s 5.7s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.8s\n",
+ "conda-forge/linux-64 \u001b[33m━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━\u001b[0m 34.6MB / ??.?MB @ 6.0MB/s 5.8s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.9s\n",
+ "conda-forge/linux-64 \u001b[33m━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━\u001b[0m 35.0MB / ??.?MB @ 5.9MB/s 5.9s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 6.0s\n",
+ "conda-forge/linux-64 \u001b[33m━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━\u001b[0m 35.0MB / ??.?MB @ 5.9MB/s 6.0s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 6.1s\n",
+ "conda-forge/linux-64 \u001b[33m━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━\u001b[0m 35.0MB / ??.?MB @ 5.9MB/s 6.1s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 6.2s\n",
+ "conda-forge/linux-64 \u001b[33m━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━\u001b[0m 35.0MB / ??.?MB @ 5.9MB/s 6.2s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 6.3s\n",
+ "conda-forge/linux-64 \u001b[33m━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━\u001b[0m 35.0MB / ??.?MB @ 5.9MB/s 6.3s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 6.4s\n",
+ "conda-forge/linux-64 ━━━━━━━━━━━━━━━━━━━━━━ 35.7MB @ 6.0MB/s Downloaded 6.4s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 6.5s\n",
+ "conda-forge/linux-64 ━━━━━━━━━━━━━━━━━━━━━━ 35.7MB @ 6.0MB/s Downloaded 6.5s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 6.6s\n",
+ "conda-forge/linux-64 ━━━━━━━━━━━━━━━━━━━━━━ 35.7MB @ 6.0MB/s Downloaded 6.6s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 6.7s\n",
+ "conda-forge/linux-64 ━━━━━━━━━━━━━━━━━━━━━━ 35.7MB @ 6.0MB/s Downloaded 6.7s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 6.8s\n",
+ "conda-forge/linux-64 ━━━━━━━━━━━━━━━━━━━━━━ 35.7MB @ 6.0MB/s Finalizing 6.8s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 6.9s\n",
+ "conda-forge/linux-64 ━━━━━━━━━━━━━━━━━━━━━━ 35.7MB @ 6.0MB/s Finalizing 6.9s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.0s\n",
+ "conda-forge/linux-64 ━━━━━━━━━━━━━━━━━━━━━━ 35.7MB @ 6.0MB/s Finalizing 7.0s\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.1s\n",
+ "\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.2s\n",
+ "\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.3s\n",
+ "\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.4s\n",
+ "\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.5s\n",
+ "\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.6s\n",
+ "\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.7s\n",
+ "\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.8s\n",
+ "\u001b[2K\u001b[1A\u001b[2K\u001b[0Gconda-forge/linux-64 @ 6.0MB/s 7.0s\n",
+ "\u001b[?25h\u001b[33m\u001b[1mwarning libmamba\u001b[m Extracted package cache '/opt/mamba/pkgs/ocl-icd-2.3.1-h7f98852_0' has invalid url\n",
+ "\u001b[33m\u001b[1mwarning libmamba\u001b[m Extracted package cache '/opt/mamba/pkgs/ocl-icd-system-1.0.0-1' has invalid url\n",
+ "Transaction\n",
+ "\n",
+ " Prefix: /opt/mamba/envs/dmff_omm\n",
+ "\n",
+ " Updating specs:\n",
+ "\n",
+ " - python=3.9\n",
+ " - openmm\n",
+ " - libtensorflow_cc=2.9.1\n",
+ " - swig=4.0.1\n",
+ " - setuptools=59.5.0\n",
+ "\n",
+ "\n",
+ " Package Version Build Channel Size\n",
+ "──────────────────────────────────────────────────────────────────────────────────────────\n",
+ " Install:\n",
+ "──────────────────────────────────────────────────────────────────────────────────────────\n",
+ "\n",
+ "\u001b[32m + _libgcc_mutex \u001b[00m 0.1 conda_forge conda-forge/linux-64\u001b[32m Cached\u001b[00m\n",
+ "\u001b[32m + _openmp_mutex \u001b[00m 4.5 2_gnu conda-forge/linux-64\u001b[32m Cached\u001b[00m\n",
+ "\u001b[32m + abseil-cpp \u001b[00m 20211102.0 h93e1e8c_3 conda-forge/linux-64 13kB\n",
+ "\u001b[32m + bzip2 \u001b[00m 1.0.8 hd590300_5 conda-forge/linux-64 254kB\n",
+ "\u001b[32m + c-ares \u001b[00m 1.21.0 hd590300_0 conda-forge/linux-64 122kB\n",
+ "\u001b[32m + ca-certificates \u001b[00m 2023.7.22 hbcca054_0 conda-forge/linux-64 150kB\n",
+ "\u001b[32m + cuda-nvrtc \u001b[00m 12.0.76 h59595ed_1 conda-forge/linux-64 18MB\n",
+ "\u001b[32m + cuda-version \u001b[00m 12.0 hffde075_2 conda-forge/noarch 21kB\n",
+ "\u001b[32m + giflib \u001b[00m 5.2.1 h0b41bf4_3 conda-forge/linux-64 77kB\n",
+ "\u001b[32m + grpc-cpp \u001b[00m 1.46.4 h6fc47f4_3 conda-forge/linux-64 5MB\n",
+ "\u001b[32m + icu \u001b[00m 70.1 h27087fc_0 conda-forge/linux-64\u001b[32m Cached\u001b[00m\n",
+ "\u001b[32m + jpeg \u001b[00m 9e h0b41bf4_3 conda-forge/linux-64 240kB\n",
+ "\u001b[32m + keyutils \u001b[00m 1.6.1 h166bdaf_0 conda-forge/linux-64\u001b[32m Cached\u001b[00m\n",
+ "\u001b[32m + krb5 \u001b[00m 1.20.1 hf9c8cef_0 conda-forge/linux-64 1MB\n",
+ "\u001b[32m + ld_impl_linux-64\u001b[00m 2.40 h41732ed_0 conda-forge/linux-64 705kB\n",
+ "\u001b[32m + libabseil \u001b[00m 20211102.0 cxx17_h48a1fff_3 conda-forge/linux-64 1MB\n",
+ "\u001b[32m + libblas \u001b[00m 3.9.0 19_linux64_openblas conda-forge/linux-64 15kB\n",
+ "\u001b[32m + libcblas \u001b[00m 3.9.0 19_linux64_openblas conda-forge/linux-64 14kB\n",
+ "\u001b[32m + libcufft \u001b[00m 11.0.0.21 hcb278e6_1 conda-forge/linux-64 45MB\n",
+ "\u001b[32m + libcurl \u001b[00m 7.87.0 h6312ad2_0 conda-forge/linux-64 347kB\n",
+ "\u001b[32m + libedit \u001b[00m 3.1.20191231 he28a2e2_2 conda-forge/linux-64\u001b[32m Cached\u001b[00m\n",
+ "\u001b[32m + libev \u001b[00m 4.33 h516909a_1 conda-forge/linux-64\u001b[32m Cached\u001b[00m\n",
+ "\u001b[32m + libffi \u001b[00m 3.4.2 h7f98852_5 conda-forge/linux-64\u001b[32m Cached\u001b[00m\n",
+ "\u001b[32m + libgcc-ng \u001b[00m 13.2.0 h807b86a_2 conda-forge/linux-64 771kB\n",
+ "\u001b[32m + libgfortran-ng \u001b[00m 13.2.0 h69a702a_2 conda-forge/linux-64 24kB\n",
+ "\u001b[32m + libgfortran5 \u001b[00m 13.2.0 ha4646dd_2 conda-forge/linux-64 1MB\n",
+ "\u001b[32m + libgomp \u001b[00m 13.2.0 h807b86a_2 conda-forge/linux-64 421kB\n",
+ "\u001b[32m + liblapack \u001b[00m 3.9.0 19_linux64_openblas conda-forge/linux-64 14kB\n",
+ "\u001b[32m + libnghttp2 \u001b[00m 1.51.0 hdcd2b5c_0 conda-forge/linux-64 623kB\n",
+ "\u001b[32m + libnsl \u001b[00m 2.0.1 hd590300_0 conda-forge/linux-64 33kB\n",
+ "\u001b[32m + libopenblas \u001b[00m 0.3.24 pthreads_h413a1c8_0 conda-forge/linux-64 5MB\n",
+ "\u001b[32m + libpng \u001b[00m 1.6.39 h753d276_0 conda-forge/linux-64 283kB\n",
+ "\u001b[32m + libprotobuf \u001b[00m 3.20.3 h3eb15da_0 conda-forge/linux-64 2MB\n",
+ "\u001b[32m + libsqlite \u001b[00m 3.44.0 h2797004_0 conda-forge/linux-64 846kB\n",
+ "\u001b[32m + libssh2 \u001b[00m 1.10.0 haa6b8db_3 conda-forge/linux-64\u001b[32m Cached\u001b[00m\n",
+ "\u001b[32m + libstdcxx-ng \u001b[00m 13.2.0 h7e041cc_2 conda-forge/linux-64 4MB\n",
+ "\u001b[32m + libtensorflow_cc\u001b[00m 2.9.1 cpu_h0c3d7b9_0 conda-forge/linux-64 105MB\n",
+ "\u001b[32m + libuuid \u001b[00m 2.38.1 h0b41bf4_0 conda-forge/linux-64 34kB\n",
+ "\u001b[32m + libzlib \u001b[00m 1.2.13 hd590300_5 conda-forge/linux-64 62kB\n",
+ "\u001b[32m + ncurses \u001b[00m 6.4 h59595ed_2 conda-forge/linux-64 884kB\n",
+ "\u001b[32m + numpy \u001b[00m 1.26.0 py39h474f0d3_0 conda-forge/linux-64 7MB\n",
+ "\u001b[32m + ocl-icd \u001b[00m 2.3.1 h7f98852_0 conda-forge/linux-64\u001b[32m Cached\u001b[00m\n",
+ "\u001b[32m + ocl-icd-system \u001b[00m 1.0.0 1 conda-forge/linux-64\u001b[32m Cached\u001b[00m\n",
+ "\u001b[32m + openmm \u001b[00m 8.0.0 py39h5d72b6b_3 conda-forge/linux-64 11MB\n",
+ "\u001b[32m + openssl \u001b[00m 1.1.1w hd590300_0 conda-forge/linux-64 2MB\n",
+ "\u001b[32m + pcre \u001b[00m 8.45 h9c3ff4c_0 conda-forge/linux-64 259kB\n",
+ "\u001b[32m + pip \u001b[00m 23.3.1 pyhd8ed1ab_0 conda-forge/noarch 1MB\n",
+ "\u001b[32m + python \u001b[00m 3.9.15 h47a2c10_0_cpython conda-forge/linux-64 22MB\n",
+ "\u001b[32m + python_abi \u001b[00m 3.9 4_cp39 conda-forge/linux-64 6kB\n",
+ "\u001b[32m + re2 \u001b[00m 2022.06.01 h27087fc_1 conda-forge/linux-64 196kB\n",
+ "\u001b[32m + readline \u001b[00m 8.2 h8228510_1 conda-forge/linux-64 281kB\n",
+ "\u001b[32m + setuptools \u001b[00m 59.5.0 py39hf3d152e_0 conda-forge/linux-64 1MB\n",
+ "\u001b[32m + snappy \u001b[00m 1.1.10 h9fff704_0 conda-forge/linux-64 39kB\n",
+ "\u001b[32m + sqlite \u001b[00m 3.44.0 h2c6b66d_0 conda-forge/linux-64 837kB\n",
+ "\u001b[32m + swig \u001b[00m 4.0.1 he1b5a44_0 conda-forge/linux-64 1MB\n",
+ "\u001b[32m + tk \u001b[00m 8.6.13 noxft_h4845f30_101 conda-forge/linux-64 3MB\n",
+ "\u001b[32m + tzdata \u001b[00m 2023c h71feb2d_0 conda-forge/noarch 118kB\n",
+ "\u001b[32m + wheel \u001b[00m 0.41.3 pyhd8ed1ab_0 conda-forge/noarch 58kB\n",
+ "\u001b[32m + xz \u001b[00m 5.2.6 h166bdaf_0 conda-forge/linux-64\u001b[32m Cached\u001b[00m\n",
+ "\u001b[32m + zlib \u001b[00m 1.2.13 hd590300_5 conda-forge/linux-64 93kB\n",
+ "\n",
+ " Summary:\n",
+ "\n",
+ " Install: 60 packages\n",
+ "\n",
+ " Total download: 245MB\n",
+ "\n",
+ "──────────────────────────────────────────────────────────────────────────────────────────\n",
+ "\n",
+ "\u001b[?25l\u001b[2K\u001b[0G[+] 0.0s\n",
+ "Downloading \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 0.0 B 0.0s\n",
+ "Extracting (2) \u001b[90m━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━\u001b[0m 0 ocl-icd 0.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.1s\n",
+ "Downloading (5) \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 0.0 B ca-certificates 0.0s\n",
+ "Extracting (2) \u001b[90m━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━\u001b[0m 0 ocl-icd 0.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.2s\n",
+ "Downloading (5) \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 0.0 B ca-certificates 0.1s\n",
+ "Extracting (2) \u001b[90m━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━\u001b[0m 0 ocl-icd 0.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.3s\n",
+ "Downloading (5) \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 0.0 B ca-certificates 0.2s\n",
+ "Extracting (2) \u001b[90m━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━━\u001b[0m 0 ocl-icd 0.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.4s\n",
+ "Downloading (5) \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 0.0 B ca-certificates 0.3s\n",
+ "Extracting (2) \u001b[90m━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━\u001b[0m 0 ocl-icd-system 0.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.5s\n",
+ "Downloading (5) \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 0.0 B ld_impl_linux-64 0.4s\n",
+ "Extracting \u001b[33m╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 2 0.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.6s\n",
+ "Downloading (5) \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 0.0 B ld_impl_linux-64 0.5s\n",
+ "Extracting \u001b[33m╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 2 0.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.7s\n",
+ "Downloading (5) \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 0.0 B ld_impl_linux-64 0.6s\n",
+ "Extracting \u001b[33m╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 2 0.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gpython_abi 6.4kB @ 9.0kB/s 0.7s\n",
+ "[+] 0.8s\n",
+ "Downloading (5) \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 102.0kB ld_impl_linux-64 0.7s\n",
+ "Extracting (1) \u001b[33m━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━\u001b[0m 2 python_abi 0.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.9s\n",
+ "Downloading (5) \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 135.9kB libgomp 0.8s\n",
+ "Extracting (1) \u001b[33m━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━\u001b[0m 2 python_abi 0.6s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 1.0s\n",
+ "Downloading (5) \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 392.2kB libgomp 0.9s\n",
+ "Extracting (1) \u001b[33m━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━\u001b[0m 2 python_abi 0.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 1.1s\n",
+ "Downloading (5) \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 542.9kB libgomp 1.0s\n",
+ "Extracting ╸\u001b[33m╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━━━\u001b[0m 3 0.8s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gca-certificates 149.5kB @ 130.2kB/s 1.1s\n",
+ "[+] 1.2s\n",
+ "Downloading (5) \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 895.2kB libgomp 1.1s\n",
+ "Extracting (1) ╸\u001b[33m╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━━━\u001b[0m 3 ca-certificates 0.8s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 1.3s\n",
+ "Downloading (5) \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 1.3MB libstdcxx-ng 1.2s\n",
+ "Extracting (1) ╸\u001b[33m╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━━━\u001b[0m 3 ca-certificates 0.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gjpeg 240.4kB @ 179.4kB/s 0.6s\n",
+ "libgomp 421.1kB @ 313.0kB/s 1.3s\n",
+ "[+] 1.4s\n",
+ "Downloading (5) \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 1.7MB libstdcxx-ng 1.3s\n",
+ "Extracting (3) ╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━━\u001b[0m 3 ca-certificates 1.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gld_impl_linux-64 704.7kB @ 485.8kB/s 1.5s\n",
+ "[+] 1.5s\n",
+ "Downloading (5) \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 2.2MB libstdcxx-ng 1.4s\n",
+ "Extracting (3) ╸\u001b[33m━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━\u001b[0m 4 jpeg 1.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibzlib 61.6kB @ 39.3kB/s 0.2s\n",
+ "pcre 259.4kB @ 164.3kB/s 0.4s\n",
+ "[+] 1.6s\n",
+ "Downloading (5) \u001b[33m╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 2.9MB libstdcxx-ng 1.5s\n",
+ "Extracting (5) ╸\u001b[33m━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━\u001b[0m 4 jpeg 1.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gbzip2 254.2kB @ 158.3kB/s 0.3s\n",
+ "[+] 1.7s\n",
+ "Downloading (5) \u001b[33m╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 3.4MB swig 1.6s\n",
+ "Extracting (6) ╸\u001b[33m━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━\u001b[0m 4 jpeg 1.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 1.8s\n",
+ "Downloading (5) \u001b[33m╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 4.5MB swig 1.7s\n",
+ "Extracting (5) ━╸\u001b[33m━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━\u001b[0m 5 bzip2 1.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 1.9s\n",
+ "Downloading (5) \u001b[33m╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 6.6MB swig 1.8s\n",
+ "Extracting (3) ━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━\u001b[0m 7 bzip2 1.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gswig 1.3MB @ 661.4kB/s 0.5s\n",
+ "libstdcxx-ng 3.8MB @ 2.0MB/s 2.0s\n",
+ "[+] 2.0s\n",
+ "Downloading (5) \u001b[33m╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 8.6MB krb5 1.9s\n",
+ "Extracting (5) ━━╸\u001b[33m━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━\u001b[0m 7 bzip2 1.6s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 2.1s\n",
+ "Downloading (5) \u001b[33m╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 9.5MB krb5 2.0s\n",
+ "Extracting (4) ━━╸\u001b[33m━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━\u001b[0m 8 bzip2 1.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibblas 14.6kB @ 6.9kB/s 0.2s\n",
+ "krb5 1.3MB @ 621.7kB/s 0.5s\n",
+ "liblapack 14.5kB @ 6.7kB/s 0.2s\n",
+ "[+] 2.2s\n",
+ "Downloading (5) \u001b[33m━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━━\u001b[0m 10.9MB cuda-nvrtc 2.1s\n",
+ "Extracting (5) ━━━╸\u001b[33m━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━\u001b[0m 10 krb5 1.8s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gcuda-version 20.9kB @ 9.1kB/s 0.2s\n",
+ "[+] 2.3s\n",
+ "Downloading (5) \u001b[33m━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━━\u001b[0m 12.0MB cuda-nvrtc 2.2s\n",
+ "Extracting (6) ━━━╸\u001b[33m━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━\u001b[0m 10 krb5 1.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibprotobuf 2.3MB @ 961.8kB/s 0.8s\n",
+ "[+] 2.4s\n",
+ "Downloading (5) ╸\u001b[33m━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━\u001b[0m 14.6MB cuda-nvrtc 2.3s\n",
+ "Extracting (7) ━━━╸\u001b[33m━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━\u001b[0m 10 krb5 2.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gtk 3.3MB @ 1.4MB/s 0.8s\n",
+ "pip 1.4MB @ 581.9kB/s 0.2s\n",
+ "[+] 2.5s\n",
+ "Downloading (5) ╸\u001b[33m━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━\u001b[0m 17.2MB cuda-nvrtc 2.4s\n",
+ "Extracting (9) ━━━╸\u001b[33m━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━\u001b[0m 10 krb5 2.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibgcc-ng 771.1kB @ 302.6kB/s 0.3s\n",
+ "c-ares 121.7kB @ 47.7kB/s 0.2s\n",
+ "[+] 2.6s\n",
+ "Downloading (5) ╸\u001b[33m━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━\u001b[0m 19.2MB libabseil 2.5s\n",
+ "Extracting (9) ━━━━╸\u001b[33m━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━\u001b[0m 12 libblas 2.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibuuid 33.6kB @ 12.8kB/s 0.2s\n",
+ "libabseil 1.1MB @ 417.8kB/s 0.2s\n",
+ "[+] 2.7s\n",
+ "Downloading (5) ━╸\u001b[33m━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━\u001b[0m 22.2MB abseil-cpp 2.6s\n",
+ "Extracting (10) ━━━━╸\u001b[33m━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━\u001b[0m 13 libblas 2.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gabseil-cpp 12.8kB @ 4.7kB/s 0.2s\n",
+ "libpng 282.6kB @ 102.6kB/s 0.2s\n",
+ "[+] 2.8s\n",
+ "Downloading (5) ━╸\u001b[33m━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━\u001b[0m 24.4MB cuda-nvrtc 2.7s\n",
+ "Extracting (11) ━━━━━╸\u001b[33m━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━\u001b[0m 14 libblas 2.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibcurl 347.4kB @ 121.5kB/s 0.2s\n",
+ "[+] 2.9s\n",
+ "Downloading (5) ━╸\u001b[33m━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━\u001b[0m 28.3MB cuda-nvrtc 2.8s\n",
+ "Extracting (9) ━━━━━━╸\u001b[33m━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━\u001b[0m 17 abseil-cpp 2.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gtzdata 117.6kB @ 40.2kB/s 0.2s\n",
+ "[+] 3.0s\n",
+ "Downloading (5) ━╸\u001b[33m━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━\u001b[0m 30.6MB cuda-nvrtc 2.9s\n",
+ "Extracting (10) ━━━━━━╸\u001b[33m━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━\u001b[0m 17 abseil-cpp 2.6s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.1s\n",
+ "Downloading (5) ━╸\u001b[33m━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━\u001b[0m 31.6MB cuda-nvrtc 3.0s\n",
+ "Extracting (10) ━━━━━━╸\u001b[33m━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━\u001b[0m 17 abseil-cpp 2.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.2s\n",
+ "Downloading (5) ━╸\u001b[33m━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━\u001b[0m 32.2MB libopenblas 3.1s\n",
+ "Extracting (10) ━━━━━━╸\u001b[33m━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━\u001b[0m 17 abseil-cpp 2.8s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.3s\n",
+ "Downloading (5) ━╸\u001b[33m━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━\u001b[0m 32.3MB libopenblas 3.2s\n",
+ "Extracting (9) ━━━━━━━╸\u001b[33m━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━\u001b[0m 18 c-ares 2.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gsnappy 38.9kB @ 11.6kB/s 0.4s\n",
+ "[+] 3.4s\n",
+ "Downloading (5) ━╸\u001b[33m━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━\u001b[0m 33.7MB libopenblas 3.3s\n",
+ "Extracting (7) ━━━━━━━━╸\u001b[33m━━━╸\u001b[0m\u001b[90m━━━━━━━━━━\u001b[0m 21 abseil-cpp 3.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gsetuptools 1.0MB @ 304.8kB/s 0.7s\n",
+ "[+] 3.5s\n",
+ "Downloading (5) ━━╸\u001b[33m━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━\u001b[0m 35.1MB libopenblas 3.4s\n",
+ "Extracting (7) ━━━━━━━━╸\u001b[33m━━━━╸\u001b[0m\u001b[90m━━━━━━━━━\u001b[0m 22 abseil-cpp 3.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.6s\n",
+ "Downloading (5) ━━╸\u001b[33m━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━\u001b[0m 35.3MB ncurses 3.5s\n",
+ "Extracting (6) ━━━━━━━━━╸\u001b[33m━━━╸\u001b[0m\u001b[90m━━━━━━━━━\u001b[0m 23 abseil-cpp 3.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.7s\n",
+ "Downloading (5) ━━╸\u001b[33m━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━\u001b[0m 35.7MB ncurses 3.6s\n",
+ "Extracting (5) ━━━━━━━━━╸\u001b[33m━━━╸\u001b[0m\u001b[90m━━━━━━━━━\u001b[0m 24 abseil-cpp 3.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.8s\n",
+ "Downloading (5) ━━╸\u001b[33m━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━\u001b[0m 37.7MB ncurses 3.7s\n",
+ "Extracting (2) ━━━━━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━━━━━\u001b[0m 27 setuptools 3.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gncurses 884.4kB @ 232.3kB/s 0.5s\n",
+ "[+] 3.9s\n",
+ "Downloading (5) ━━╸\u001b[33m━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━\u001b[0m 40.0MB cuda-nvrtc 3.8s\n",
+ "Extracting (2) ━━━━━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━━━━━\u001b[0m 28 setuptools 3.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.0s\n",
+ "Downloading (5) ━━╸\u001b[33m━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━\u001b[0m 40.2MB cuda-nvrtc 3.9s\n",
+ "Extracting (1) ━━━━━━━━━━━━╸\u001b[33m╸\u001b[0m\u001b[90m━━━━━━━━━\u001b[0m 29 ncurses 3.6s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Greadline 281.5kB @ 70.1kB/s 0.6s\n",
+ "libopenblas 5.5MB @ 1.4MB/s 1.4s\n",
+ "[+] 4.1s\n",
+ "Downloading (5) ━━╸\u001b[33m━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━\u001b[0m 43.6MB cuda-nvrtc 4.0s\n",
+ "Extracting (3) ━━━━━━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━━━━\u001b[0m 29 ncurses 3.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.2s\n",
+ "Downloading (5) ━━╸\u001b[33m━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━\u001b[0m 43.6MB cuda-nvrtc 4.1s\n",
+ "Extracting (3) ━━━━━━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━━━━\u001b[0m 29 ncurses 3.8s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibcblas 14.5kB @ 3.4kB/s 0.2s\n",
+ "libsqlite 846.0kB @ 198.9kB/s 0.5s\n",
+ "[+] 4.3s\n",
+ "Downloading (5) ━━━╸\u001b[33m━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━\u001b[0m 44.9MB libcufft 4.2s\n",
+ "Extracting (4) ━━━━━━━━━━━━╸\u001b[33m━━╸\u001b[0m\u001b[90m━━━━━━━\u001b[0m 30 libcblas 3.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.4s\n",
+ "Downloading (5) ━━━╸\u001b[33m━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━\u001b[0m 44.9MB libcufft 4.3s\n",
+ "Extracting (3) ━━━━━━━━━━━━╸\u001b[33m━━╸\u001b[0m\u001b[90m━━━━━━━\u001b[0m 31 libcblas 4.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.5s\n",
+ "Downloading (5) ━━━╸\u001b[33m━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━\u001b[0m 45.9MB libcufft 4.4s\n",
+ "Extracting (2) ━━━━━━━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━━━\u001b[0m 32 libcblas 4.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.6s\n",
+ "Downloading (5) ━━━╸\u001b[33m━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━\u001b[0m 45.9MB libcufft 4.5s\n",
+ "Extracting (2) ━━━━━━━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━━━\u001b[0m 32 libcblas 4.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.7s\n",
+ "Downloading (5) ━━━╸\u001b[33m━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━\u001b[0m 45.9MB libgfortran5 4.6s\n",
+ "Extracting ━━━━━━━━━━━━━━╸\u001b[33m━━━━━━━━\u001b[0m 34 4.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.8s\n",
+ "Downloading (5) ━━━╸\u001b[33m━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━\u001b[0m 47.9MB libgfortran5 4.7s\n",
+ "Extracting ━━━━━━━━━━━━━━╸\u001b[33m━━━━━━━━\u001b[0m 34 4.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibgfortran5 1.4MB @ 298.5kB/s 0.6s\n",
+ "cuda-nvrtc 17.8MB @ 3.6MB/s 2.7s\n",
+ "[+] 4.9s\n",
+ "Downloading (5) ━━━╸\u001b[33m━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━\u001b[0m 51.9MB libcufft 4.8s\n",
+ "Extracting (2) ━━━━━━━━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━━\u001b[0m 34 cuda-nvrtc 4.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.0s\n",
+ "Downloading (5) ━━━━╸\u001b[33m━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━\u001b[0m 55.5MB libcufft 4.9s\n",
+ "Extracting (2) ━━━━━━━━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━━\u001b[0m 34 cuda-nvrtc 4.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.1s\n",
+ "Downloading (5) ━━━━╸\u001b[33m━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━\u001b[0m 57.2MB libcufft 5.0s\n",
+ "Extracting (2) ━━━━━━━━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━━\u001b[0m 34 cuda-nvrtc 4.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.2s\n",
+ "Downloading (5) ━━━━╸\u001b[33m━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━\u001b[0m 58.6MB libcufft 5.1s\n",
+ "Extracting (2) ━━━━━━━━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━━\u001b[0m 34 cuda-nvrtc 4.6s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.3s\n",
+ "Downloading (5) ━━━━╸\u001b[33m━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━\u001b[0m 59.1MB libnghttp2 5.2s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━━\u001b[0m 35 cuda-nvrtc 4.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibnghttp2 622.7kB @ 116.1kB/s 0.5s\n",
+ "[+] 5.4s\n",
+ "Downloading (5) ━━━━╸\u001b[33m━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━\u001b[0m 59.2MB libcufft 5.3s\n",
+ "Extracting (2) ━━━━━━━━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━━\u001b[0m 35 cuda-nvrtc 4.8s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.5s\n",
+ "Downloading (5) ━━━━╸\u001b[33m━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━\u001b[0m 60.2MB libcufft 5.4s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━╸\u001b[33m╸\u001b[0m\u001b[90m━━━━━━\u001b[0m 36 libnghttp2 4.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.6s\n",
+ "Downloading (5) ━━━━╸\u001b[33m━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━\u001b[0m 60.7MB libcufft 5.5s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━╸\u001b[33m╸\u001b[0m\u001b[90m━━━━━━\u001b[0m 36 libnghttp2 5.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.7s\n",
+ "Downloading (5) ━━━━╸\u001b[33m━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━\u001b[0m 61.3MB libcufft 5.6s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━╸\u001b[33m╸\u001b[0m\u001b[90m━━━━━━\u001b[0m 36 libnghttp2 5.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gopenssl 2.0MB @ 339.7kB/s 1.5s\n",
+ "wheel 57.9kB @ 10.0kB/s 0.4s\n",
+ "[+] 5.8s\n",
+ "Downloading (5) ━━━━╸\u001b[33m━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━\u001b[0m 64.5MB openmm 5.7s\n",
+ "Extracting (2) ━━━━━━━━━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━━\u001b[0m 37 openssl 5.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gsqlite 836.6kB @ 144.2kB/s 0.9s\n",
+ "[+] 5.9s\n",
+ "Downloading (5) ━━━━━╸\u001b[33m━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━\u001b[0m 67.6MB openmm 5.8s\n",
+ "Extracting (3) ━━━━━━━━━━━━━━━╸\u001b[33m━━╸\u001b[0m\u001b[90m━━━━\u001b[0m 37 openssl 5.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gzlib 92.8kB @ 15.5kB/s 0.2s\n",
+ "giflib 77.4kB @ 12.9kB/s 0.2s\n",
+ "[+] 6.0s\n",
+ "Downloading (5) ━━━━━╸\u001b[33m━━━━━━━━━━━━━━━━━\u001b[0m 68.9MB openmm 5.9s\n",
+ "Extracting (5) ━━━━━━━━━━━━━━━╸\u001b[33m━━╸\u001b[0m\u001b[90m━━━━\u001b[0m 37 openssl 5.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 6.1s\n",
+ "Downloading (5) ━━━━━╸\u001b[33m━━━━━━━━━━━━━━━━━\u001b[0m 70.5MB openmm 6.0s\n",
+ "Extracting (5) ━━━━━━━━━━━━━━━╸\u001b[33m━━╸\u001b[0m\u001b[90m━━━━\u001b[0m 37 openssl 5.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 6.2s\n",
+ "Downloading (5) ━━━━━╸\u001b[33m━━━━━━━━━━━━━━━━━\u001b[0m 70.6MB python 6.1s\n",
+ "Extracting (4) ━━━━━━━━━━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━━\u001b[0m 38 sqlite 5.6s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibnsl 33.4kB @ 5.4kB/s 0.2s\n",
+ "[+] 6.3s\n",
+ "Downloading (5) ━━━━━╸\u001b[33m━━━━━━━━━━━━━━━━━\u001b[0m 70.8MB python 6.2s\n",
+ "Extracting (3) ━━━━━━━━━━━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━\u001b[0m 40 giflib 5.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 6.4s\n",
+ "Downloading (5) ━━━━━╸\u001b[33m━━━━━━━━━━━━━━━━━\u001b[0m 71.7MB python 6.3s\n",
+ "Extracting (3) ━━━━━━━━━━━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━\u001b[0m 40 giflib 5.8s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibgfortran-ng 23.7kB @ 3.7kB/s 0.2s\n",
+ "[+] 6.5s\n",
+ "Downloading (5) ━━━━━╸\u001b[33m━━━━━━━━━━━━━━━━━\u001b[0m 72.7MB python 6.4s\n",
+ "Extracting (2) ━━━━━━━━━━━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━━\u001b[0m 42 libgfortran-ng 5.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 6.6s\n",
+ "Downloading (5) ━━━━━╸\u001b[33m━━━━━━━━━━━━━━━━━\u001b[0m 75.2MB re2 6.5s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━╸\u001b[33m╸\u001b[0m\u001b[90m━━━\u001b[0m 43 libgfortran-ng 6.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gopenmm 11.1MB @ 1.7MB/s 3.8s\n",
+ "[+] 6.7s\n",
+ "Downloading (5) ━━━━━╸\u001b[33m━━━━━━━━━━━━━━━━━\u001b[0m 75.5MB re2 6.6s\n",
+ "Extracting (2) ━━━━━━━━━━━━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━\u001b[0m 43 libgfortran-ng 6.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 6.8s\n",
+ "Downloading (5) ━━━━━╸\u001b[33m━━━━━━━━━━━━━━━━━\u001b[0m 75.5MB re2 6.7s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━\u001b[0m 44 openmm 6.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 6.9s\n",
+ "Downloading (5) ━━━━━━╸\u001b[33m━━━━━━━━━━━━━━━━\u001b[0m 76.2MB re2 6.8s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━\u001b[0m 44 openmm 6.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gre2 196.0kB @ 28.3kB/s 0.5s\n",
+ "[+] 7.0s\n",
+ "Downloading (5) ━━━━━━╸\u001b[33m━━━━━━━━━━━━━━━━\u001b[0m 79.0MB grpc-cpp 6.9s\n",
+ "Extracting (2) ━━━━━━━━━━━━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━\u001b[0m 44 openmm 6.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.1s\n",
+ "Downloading (5) ━━━━━━╸\u001b[33m━━━━━━━━━━━━━━━━\u001b[0m 79.0MB grpc-cpp 7.0s\n",
+ "Extracting (2) ━━━━━━━━━━━━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━\u001b[0m 44 openmm 6.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.2s\n",
+ "Downloading (5) ━━━━━━╸\u001b[33m━━━━━━━━━━━━━━━━\u001b[0m 80.5MB grpc-cpp 7.1s\n",
+ "Extracting (2) ━━━━━━━━━━━━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━━\u001b[0m 44 re2 6.6s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.3s\n",
+ "Downloading (5) ━━━━━━╸\u001b[33m━━━━━━━━━━━━━━━━\u001b[0m 80.5MB grpc-cpp 7.2s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━\u001b[0m 46 6.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.4s\n",
+ "Downloading (5) ━━━━━━╸\u001b[33m━━━━━━━━━━━━━━━━\u001b[0m 83.2MB libcufft 7.3s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━\u001b[0m 46 6.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.5s\n",
+ "Downloading (5) ━━━━━━╸\u001b[33m━━━━━━━━━━━━━━━━\u001b[0m 83.2MB libcufft 7.4s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━\u001b[0m 46 6.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.6s\n",
+ "Downloading (5) ━━━━━━╸\u001b[33m━━━━━━━━━━━━━━━━\u001b[0m 83.3MB libcufft 7.5s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━\u001b[0m 46 6.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.7s\n",
+ "Downloading (5) ━━━━━━╸\u001b[33m━━━━━━━━━━━━━━━━\u001b[0m 84.0MB libcufft 7.6s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━\u001b[0m 46 6.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.8s\n",
+ "Downloading (5) ━━━━━━╸\u001b[33m━━━━━━━━━━━━━━━━\u001b[0m 84.0MB libtensorflow_cc 7.7s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━\u001b[0m 46 6.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.9s\n",
+ "Downloading (5) ━━━━━━╸\u001b[33m━━━━━━━━━━━━━━━━\u001b[0m 84.0MB libtensorflow_cc 7.8s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━\u001b[0m 46 6.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 8.0s\n",
+ "Downloading (5) ━━━━━━━╸\u001b[33m━━━━━━━━━━━━━━━\u001b[0m 86.1MB libtensorflow_cc 7.9s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━\u001b[0m 46 6.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 8.1s\n",
+ "Downloading (5) ━━━━━━━╸\u001b[33m━━━━━━━━━━━━━━━\u001b[0m 91.5MB libtensorflow_cc 8.0s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━\u001b[0m 46 6.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 8.2s\n",
+ "Downloading (5) ━━━━━━━╸\u001b[33m━━━━━━━━━━━━━━━\u001b[0m 96.2MB numpy 8.1s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━\u001b[0m 46 6.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 8.3s\n",
+ "Downloading (5) ━━━━━━━╸\u001b[33m━━━━━━━━━━━━━━━\u001b[0m 97.8MB numpy 8.2s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━\u001b[0m 46 6.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 8.4s\n",
+ "Downloading (5) ━━━━━━━━╸\u001b[33m━━━━━━━━━━━━━━\u001b[0m 98.9MB numpy 8.3s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━\u001b[0m 46 6.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 8.5s\n",
+ "Downloading (5) ━━━━━━━━╸\u001b[33m━━━━━━━━━━━━━━\u001b[0m 98.9MB numpy 8.4s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━\u001b[0m 46 6.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 8.6s\n",
+ "Downloading (5) ━━━━━━━━╸\u001b[33m━━━━━━━━━━━━━━\u001b[0m 99.5MB python 8.5s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━\u001b[0m 46 6.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 8.7s\n",
+ "Downloading (5) ━━━━━━━━╸\u001b[33m━━━━━━━━━━━━━━\u001b[0m 99.8MB python 8.6s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━\u001b[0m 46 6.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 8.8s\n",
+ "Downloading (5) ━━━━━━━━╸\u001b[33m━━━━━━━━━━━━━━\u001b[0m 100.3MB python 8.7s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━\u001b[0m 46 6.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 8.9s\n",
+ "Downloading (5) ━━━━━━━━╸\u001b[33m━━━━━━━━━━━━━━\u001b[0m 100.4MB python 8.8s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━\u001b[0m 46 6.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 9.0s\n",
+ "Downloading (5) ━━━━━━━━╸\u001b[33m━━━━━━━━━━━━━━\u001b[0m 102.5MB grpc-cpp 8.9s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━\u001b[0m 46 6.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 9.1s\n",
+ "Downloading (5) ━━━━━━━━╸\u001b[33m━━━━━━━━━━━━━━\u001b[0m 102.6MB grpc-cpp 9.0s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━\u001b[0m 46 6.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gnumpy 6.9MB @ 747.8kB/s 2.3s\n",
+ "[+] 9.2s\n",
+ "Downloading (4) ━━━━━━━━╸\u001b[33m━━━━━━━━━━━━━━\u001b[0m 104.2MB grpc-cpp 9.1s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━\u001b[0m 46 numpy 6.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Ggrpc-cpp 5.0MB @ 540.7kB/s 2.6s\n",
+ "[+] 9.3s\n",
+ "Downloading (3) ━━━━━━━━╸\u001b[33m━━━━━━━━━━━━━━\u001b[0m 105.4MB libcufft 9.2s\n",
+ "Extracting (2) ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━\u001b[0m 46 numpy 6.8s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 9.4s\n",
+ "Downloading (3) ━━━━━━━━╸\u001b[33m━━━━━━━━━━━━━━\u001b[0m 107.5MB libcufft 9.3s\n",
+ "Extracting (2) ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━\u001b[0m 46 numpy 6.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 9.5s\n",
+ "Downloading (3) ━━━━━━━━━╸\u001b[33m━━━━━━━━━━━━━\u001b[0m 111.8MB libcufft 9.4s\n",
+ "Extracting (2) ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━\u001b[0m 46 numpy 7.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 9.6s\n",
+ "Downloading (3) ━━━━━━━━━╸\u001b[33m━━━━━━━━━━━━━\u001b[0m 113.2MB libcufft 9.5s\n",
+ "Extracting (2) ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━\u001b[0m 46 grpc-cpp 7.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 9.7s\n",
+ "Downloading (3) ━━━━━━━━━╸\u001b[33m━━━━━━━━━━━━━\u001b[0m 114.7MB libtensorflow_cc 9.6s\n",
+ "Extracting (2) ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━\u001b[0m 46 grpc-cpp 7.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 9.8s\n",
+ "Downloading (3) ━━━━━━━━━╸\u001b[33m━━━━━━━━━━━━━\u001b[0m 116.3MB libtensorflow_cc 9.7s\n",
+ "Extracting (2) ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━╸\u001b[0m\u001b[90m━\u001b[0m 46 grpc-cpp 7.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 9.9s\n",
+ "Downloading (3) ━━━━━━━━━━╸\u001b[33m━━━━━━━━━━━━\u001b[0m 117.9MB libtensorflow_cc 9.8s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━╸\u001b[33m╸\u001b[0m\u001b[90m━\u001b[0m 47 grpc-cpp 7.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 10.0s\n",
+ "Downloading (3) ━━━━━━━━━━╸\u001b[33m━━━━━━━━━━━━\u001b[0m 118.8MB libtensorflow_cc 9.9s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━╸\u001b[33m╸\u001b[0m\u001b[90m━\u001b[0m 47 grpc-cpp 7.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 10.1s\n",
+ "Downloading (3) ━━━━━━━━━━╸\u001b[33m━━━━━━━━━━━━\u001b[0m 118.8MB python 10.0s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━╸\u001b[33m╸\u001b[0m\u001b[90m━\u001b[0m 47 grpc-cpp 7.6s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 10.2s\n",
+ "Downloading (3) ━━━━━━━━━━╸\u001b[33m━━━━━━━━━━━━\u001b[0m 119.2MB python 10.1s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━╸\u001b[33m╸\u001b[0m\u001b[90m━\u001b[0m 47 grpc-cpp 7.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 10.3s\n",
+ "Downloading (3) ━━━━━━━━━━╸\u001b[33m━━━━━━━━━━━━\u001b[0m 120.0MB python 10.2s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━╸\u001b[33m╸\u001b[0m\u001b[90m━\u001b[0m 47 grpc-cpp 7.8s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 10.4s\n",
+ "Downloading (3) ━━━━━━━━━━╸\u001b[33m━━━━━━━━━━━━\u001b[0m 120.3MB python 10.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━╸\u001b[33m╸\u001b[0m\u001b[90m━\u001b[0m 47 grpc-cpp 7.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 10.5s\n",
+ "Downloading (3) ━━━━━━━━━━╸\u001b[33m━━━━━━━━━━━━\u001b[0m 122.0MB libcufft 10.4s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━╸\u001b[33m╸\u001b[0m\u001b[90m━\u001b[0m 47 grpc-cpp 8.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 10.6s\n",
+ "Downloading (3) ━━━━━━━━━━╸\u001b[33m━━━━━━━━━━━━\u001b[0m 123.0MB libcufft 10.5s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━\u001b[0m 48 8.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 10.7s\n",
+ "Downloading (3) ━━━━━━━━━━╸\u001b[33m━━━━━━━━━━━━\u001b[0m 123.0MB libcufft 10.6s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━\u001b[0m 48 8.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 10.8s\n",
+ "Downloading (3) ━━━━━━━━━━╸\u001b[33m━━━━━━━━━━━━\u001b[0m 123.6MB libcufft 10.7s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━\u001b[0m 48 8.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 10.9s\n",
+ "Downloading (3) ━━━━━━━━━━╸\u001b[33m━━━━━━━━━━━━\u001b[0m 126.9MB libtensorflow_cc 10.8s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━\u001b[0m 48 8.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 11.0s\n",
+ "Downloading (3) ━━━━━━━━━━━╸\u001b[33m━━━━━━━━━━━\u001b[0m 130.6MB libtensorflow_cc 10.9s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━\u001b[0m 48 8.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 11.1s\n",
+ "Downloading (3) ━━━━━━━━━━━╸\u001b[33m━━━━━━━━━━━\u001b[0m 132.3MB libtensorflow_cc 11.0s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━\u001b[0m 48 8.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gpython 21.9MB @ 2.0MB/s 5.3s\n",
+ "[+] 11.2s\n",
+ "Downloading (2) ━━━━━━━━━━━╸\u001b[33m━━━━━━━━━━━\u001b[0m 133.5MB libtensorflow_cc 11.1s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━\u001b[0m 48 python 8.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 11.3s\n",
+ "Downloading (2) ━━━━━━━━━━━╸\u001b[33m━━━━━━━━━━━\u001b[0m 134.4MB libcufft 11.2s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━\u001b[0m 48 python 8.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 11.4s\n",
+ "Downloading (2) ━━━━━━━━━━━╸\u001b[33m━━━━━━━━━━━\u001b[0m 135.4MB libcufft 11.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━\u001b[0m 48 python 8.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 11.5s\n",
+ "Downloading (2) ━━━━━━━━━━━╸\u001b[33m━━━━━━━━━━━\u001b[0m 136.4MB libcufft 11.4s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━\u001b[0m 48 python 8.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 11.6s\n",
+ "Downloading (2) ━━━━━━━━━━━╸\u001b[33m━━━━━━━━━━━\u001b[0m 137.5MB libcufft 11.5s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━\u001b[0m 48 python 8.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 11.7s\n",
+ "Downloading (2) ━━━━━━━━━━━╸\u001b[33m━━━━━━━━━━━\u001b[0m 138.6MB libtensorflow_cc 11.6s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━\u001b[0m 48 python 8.6s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 11.8s\n",
+ "Downloading (2) ━━━━━━━━━━━━╸\u001b[33m━━━━━━━━━━\u001b[0m 139.8MB libtensorflow_cc 11.7s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━\u001b[0m 48 python 8.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 11.9s\n",
+ "Downloading (2) ━━━━━━━━━━━━╸\u001b[33m━━━━━━━━━━\u001b[0m 141.2MB libtensorflow_cc 11.8s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━\u001b[0m 48 python 8.8s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 12.0s\n",
+ "Downloading (2) ━━━━━━━━━━━━╸\u001b[33m━━━━━━━━━━\u001b[0m 142.6MB libtensorflow_cc 11.9s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 49 8.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 12.1s\n",
+ "Downloading (2) ━━━━━━━━━━━━╸\u001b[33m━━━━━━━━━━\u001b[0m 144.2MB libcufft 12.0s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 49 8.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 12.2s\n",
+ "Downloading (2) ━━━━━━━━━━━━╸\u001b[33m━━━━━━━━━━\u001b[0m 145.9MB libcufft 12.1s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 49 8.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 12.3s\n",
+ "Downloading (2) ━━━━━━━━━━━━╸\u001b[33m━━━━━━━━━━\u001b[0m 147.8MB libcufft 12.2s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 49 8.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 12.4s\n",
+ "Downloading (2) ━━━━━━━━━━━━╸\u001b[33m━━━━━━━━━━\u001b[0m 148.2MB libcufft 12.3s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 49 8.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 12.5s\n",
+ "Downloading (2) ━━━━━━━━━━━━╸\u001b[33m━━━━━━━━━━\u001b[0m 148.2MB libtensorflow_cc 12.4s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 49 8.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 12.6s\n",
+ "Downloading (2) ━━━━━━━━━━━━╸\u001b[33m━━━━━━━━━━\u001b[0m 149.2MB libtensorflow_cc 12.5s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 49 8.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 12.7s\n",
+ "Downloading (2) ━━━━━━━━━━━━━╸\u001b[33m━━━━━━━━━\u001b[0m 150.3MB libtensorflow_cc 12.6s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 49 8.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 12.8s\n",
+ "Downloading (2) ━━━━━━━━━━━━━╸\u001b[33m━━━━━━━━━\u001b[0m 150.5MB libtensorflow_cc 12.7s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 49 8.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 12.9s\n",
+ "Downloading (2) ━━━━━━━━━━━━━╸\u001b[33m━━━━━━━━━\u001b[0m 150.5MB libcufft 12.8s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 49 8.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 13.0s\n",
+ "Downloading (2) ━━━━━━━━━━━━━╸\u001b[33m━━━━━━━━━\u001b[0m 153.4MB libcufft 12.9s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 49 8.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 13.1s\n",
+ "Downloading (2) ━━━━━━━━━━━━━╸\u001b[33m━━━━━━━━━\u001b[0m 154.9MB libcufft 13.0s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 49 8.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 13.2s\n",
+ "Downloading (2) ━━━━━━━━━━━━━╸\u001b[33m━━━━━━━━━\u001b[0m 158.1MB libcufft 13.1s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 49 8.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 13.3s\n",
+ "Downloading (2) ━━━━━━━━━━━━━╸\u001b[33m━━━━━━━━━\u001b[0m 160.0MB libtensorflow_cc 13.2s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 49 8.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 13.4s\n",
+ "Downloading (2) ━━━━━━━━━━━━━━╸\u001b[33m━━━━━━━━\u001b[0m 161.8MB libtensorflow_cc 13.3s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 49 8.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 13.5s\n",
+ "Downloading (2) ━━━━━━━━━━━━━━╸\u001b[33m━━━━━━━━\u001b[0m 161.8MB libtensorflow_cc 13.4s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 49 8.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 13.6s\n",
+ "Downloading (2) ━━━━━━━━━━━━━━╸\u001b[33m━━━━━━━━\u001b[0m 161.8MB libtensorflow_cc 13.5s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 49 8.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 13.7s\n",
+ "Downloading (2) ━━━━━━━━━━━━━━╸\u001b[33m━━━━━━━━\u001b[0m 162.0MB libcufft 13.6s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 49 8.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 13.8s\n",
+ "Downloading (2) ━━━━━━━━━━━━━━╸\u001b[33m━━━━━━━━\u001b[0m 162.0MB libcufft 13.7s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 49 8.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 13.9s\n",
+ "Downloading (2) ━━━━━━━━━━━━━━╸\u001b[33m━━━━━━━━\u001b[0m 162.0MB libcufft 13.8s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 49 8.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 14.0s\n",
+ "Downloading (2) ━━━━━━━━━━━━━━╸\u001b[33m━━━━━━━━\u001b[0m 162.0MB libcufft 13.9s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 49 8.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 14.1s\n",
+ "Downloading (2) ━━━━━━━━━━━━━━╸\u001b[33m━━━━━━━━\u001b[0m 164.0MB libtensorflow_cc 14.0s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 49 8.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 14.2s\n",
+ "Downloading (2) ━━━━━━━━━━━━━━╸\u001b[33m━━━━━━━━\u001b[0m 165.5MB libtensorflow_cc 14.1s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 49 8.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 14.3s\n",
+ "Downloading (2) ━━━━━━━━━━━━━━╸\u001b[33m━━━━━━━━\u001b[0m 167.3MB libtensorflow_cc 14.2s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 49 8.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 14.4s\n",
+ "Downloading (2) ━━━━━━━━━━━━━━╸\u001b[33m━━━━━━━━\u001b[0m 169.3MB libtensorflow_cc 14.3s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 49 8.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 14.5s\n",
+ "Downloading (2) ━━━━━━━━━━━━━━╸\u001b[33m━━━━━━━━\u001b[0m 171.4MB libcufft 14.4s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 49 8.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 14.6s\n",
+ "Downloading (2) ━━━━━━━━━━━━━━━╸\u001b[33m━━━━━━━\u001b[0m 173.5MB libcufft 14.5s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 49 8.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 14.7s\n",
+ "Downloading (2) ━━━━━━━━━━━━━━━╸\u001b[33m━━━━━━━\u001b[0m 175.7MB libcufft 14.6s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 49 8.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibcufft 44.8MB @ 3.0MB/s 10.8s\n",
+ "[+] 14.8s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━╸\u001b[33m━━━━━━━\u001b[0m 178.1MB libtensorflow_cc 14.7s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 49 libcufft 8.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 14.9s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━╸\u001b[33m━━━━━━━\u001b[0m 179.3MB libtensorflow_cc 14.8s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 49 libcufft 9.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 15.0s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━╸\u001b[33m━━━━━━━\u001b[0m 180.6MB libtensorflow_cc 14.9s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 49 libcufft 9.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 15.1s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━╸\u001b[33m━━━━━━\u001b[0m 182.0MB libtensorflow_cc 15.0s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 49 libcufft 9.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 15.2s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━╸\u001b[33m━━━━━━\u001b[0m 183.5MB libtensorflow_cc 15.1s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 49 libcufft 9.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 15.3s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━╸\u001b[33m━━━━━━\u001b[0m 185.2MB libtensorflow_cc 15.2s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 49 libcufft 9.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 15.4s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━╸\u001b[33m━━━━━━\u001b[0m 186.1MB libtensorflow_cc 15.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 49 libcufft 9.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 15.5s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━╸\u001b[33m━━━━━━\u001b[0m 186.1MB libtensorflow_cc 15.4s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 49 libcufft 9.6s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 15.6s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━╸\u001b[33m━━━━━━\u001b[0m 186.2MB libtensorflow_cc 15.5s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 49 libcufft 9.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 15.7s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━╸\u001b[33m━━━━━━\u001b[0m 188.1MB libtensorflow_cc 15.6s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 49 libcufft 9.8s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 15.8s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━╸\u001b[33m━━━━━━\u001b[0m 189.4MB libtensorflow_cc 15.7s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 9.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 15.9s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━╸\u001b[33m━━━━━━\u001b[0m 191.0MB libtensorflow_cc 15.8s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 9.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 16.0s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━╸\u001b[33m━━━━━━\u001b[0m 192.7MB libtensorflow_cc 15.9s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 9.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 16.1s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━╸\u001b[33m━━━━━\u001b[0m 194.4MB libtensorflow_cc 16.0s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 9.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 16.2s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━╸\u001b[33m━━━━━\u001b[0m 196.0MB libtensorflow_cc 16.1s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 9.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 16.3s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━╸\u001b[33m━━━━━\u001b[0m 197.7MB libtensorflow_cc 16.2s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 9.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 16.4s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━╸\u001b[33m━━━━━\u001b[0m 197.7MB libtensorflow_cc 16.3s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 9.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 16.5s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━╸\u001b[33m━━━━━\u001b[0m 197.7MB libtensorflow_cc 16.4s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 9.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 16.6s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━╸\u001b[33m━━━━━\u001b[0m 199.3MB libtensorflow_cc 16.5s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 9.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 16.7s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━╸\u001b[33m━━━━━\u001b[0m 200.3MB libtensorflow_cc 16.6s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 9.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 16.8s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━╸\u001b[33m━━━━━\u001b[0m 201.7MB libtensorflow_cc 16.7s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 9.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 16.9s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━╸\u001b[33m━━━━━\u001b[0m 203.1MB libtensorflow_cc 16.8s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 9.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 17.0s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━━\u001b[0m 204.8MB libtensorflow_cc 16.9s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 9.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 17.1s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━━\u001b[0m 206.5MB libtensorflow_cc 17.0s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 9.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 17.2s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━━\u001b[0m 208.1MB libtensorflow_cc 17.1s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 9.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 17.3s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━━\u001b[0m 209.8MB libtensorflow_cc 17.2s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 9.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 17.4s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━━\u001b[0m 211.4MB libtensorflow_cc 17.3s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 9.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 17.5s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━━\u001b[0m 212.3MB libtensorflow_cc 17.4s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 9.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 17.6s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━━\u001b[0m 212.3MB libtensorflow_cc 17.5s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 9.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 17.7s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━━\u001b[0m 212.4MB libtensorflow_cc 17.6s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 9.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 17.8s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━\u001b[0m 214.1MB libtensorflow_cc 17.7s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 9.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 17.9s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━\u001b[0m 215.5MB libtensorflow_cc 17.8s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 9.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 18.0s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━\u001b[0m 217.5MB libtensorflow_cc 17.9s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 9.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 18.1s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━\u001b[0m 219.3MB libtensorflow_cc 18.0s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 9.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 18.2s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━\u001b[0m 221.4MB libtensorflow_cc 18.1s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 9.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 18.3s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━\u001b[0m 222.1MB libtensorflow_cc 18.2s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 9.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 18.4s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━\u001b[0m 222.1MB libtensorflow_cc 18.3s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 9.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 18.5s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━\u001b[0m 222.8MB libtensorflow_cc 18.4s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 9.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 18.6s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━\u001b[0m 223.9MB libtensorflow_cc 18.5s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 9.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 18.7s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━━\u001b[0m 225.4MB libtensorflow_cc 18.6s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 9.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 18.8s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━\u001b[0m 226.6MB libtensorflow_cc 18.7s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 9.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 18.9s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━\u001b[0m 228.5MB libtensorflow_cc 18.8s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 9.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 19.0s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━\u001b[0m 230.3MB libtensorflow_cc 18.9s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 9.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 19.1s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━\u001b[0m 232.1MB libtensorflow_cc 19.0s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 9.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 19.2s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━\u001b[0m 233.1MB libtensorflow_cc 19.1s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 9.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 19.3s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━\u001b[0m 233.1MB libtensorflow_cc 19.2s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 9.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 19.4s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━━\u001b[0m 234.5MB libtensorflow_cc 19.3s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 9.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 19.5s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 235.5MB libtensorflow_cc 19.4s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 9.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 19.6s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 236.7MB libtensorflow_cc 19.5s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 9.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 19.7s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 238.8MB libtensorflow_cc 19.6s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 9.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 19.8s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 240.9MB libtensorflow_cc 19.7s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 9.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 19.9s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 241.9MB libtensorflow_cc 19.8s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 9.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 20.0s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 243.0MB libtensorflow_cc 19.9s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 9.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 20.1s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 243.0MB libtensorflow_cc 20.0s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 9.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 20.2s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 243.5MB libtensorflow_cc 20.1s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 9.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 20.3s\n",
+ "Downloading (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 243.6MB libtensorflow_cc 20.2s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 9.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibtensorflow_cc 105.3MB @ 5.2MB/s 14.3s\n",
+ "[+] 20.4s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 9.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 20.5s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 10.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 20.6s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 10.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 20.7s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 10.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 20.8s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 10.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 20.9s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 10.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 21.0s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 10.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 21.1s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 10.6s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 21.2s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 10.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 21.3s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 10.8s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 21.4s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 10.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 21.5s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 11.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 21.6s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 11.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 21.7s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 11.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 21.8s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 11.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 21.9s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 11.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 22.0s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 11.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 22.1s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 11.6s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 22.2s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 11.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 22.3s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 11.8s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 22.4s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 11.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 22.5s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 12.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 22.6s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 12.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 22.7s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 12.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 22.8s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 12.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 22.9s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 12.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 23.0s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 12.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 23.1s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 12.6s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 23.2s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 12.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 23.3s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 12.8s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 23.4s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 12.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 23.5s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 13.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 23.6s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 13.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 23.7s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 13.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 23.8s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 13.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 23.9s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 13.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 24.0s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 13.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 24.1s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 13.6s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 24.2s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 13.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 24.3s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 13.8s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 24.4s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 13.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 24.5s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 14.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 24.6s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 14.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 24.7s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 14.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 24.8s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 14.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 24.9s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 14.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 25.0s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 14.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 25.1s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 14.6s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 25.2s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 14.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 25.3s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 14.8s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 25.4s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 14.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 25.5s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 15.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 25.6s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 15.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 25.7s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 15.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 25.8s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 15.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 25.9s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 15.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 26.0s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 15.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 26.1s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 15.6s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 26.2s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 15.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 26.3s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 15.8s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 26.4s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 15.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 26.5s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 16.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 26.6s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 16.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 26.7s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 16.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 26.8s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 16.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 26.9s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 16.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 27.0s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 16.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 27.1s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 16.6s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 27.2s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 16.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 27.3s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 16.8s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 27.4s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 16.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 27.5s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 17.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 27.6s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 17.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 27.7s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 17.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 27.8s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 17.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 27.9s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 17.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 28.0s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 17.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 28.1s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 17.6s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 28.2s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 17.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 28.3s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 17.8s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 28.4s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 17.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 28.5s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 18.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 28.6s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 18.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 28.7s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 18.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 28.8s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 18.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 28.9s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 18.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 29.0s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 18.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 29.1s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 18.6s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 29.2s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 18.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 29.3s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 18.8s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 29.4s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 18.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 29.5s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 19.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 29.6s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 19.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 29.7s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 19.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 29.8s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 19.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 29.9s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 19.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 30.0s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 19.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 30.1s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 19.6s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 30.2s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 19.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 30.3s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 19.8s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 30.4s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 19.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 30.5s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 20.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 30.6s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 20.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 30.7s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 20.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 30.8s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 20.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 30.9s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 20.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 31.0s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 20.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 31.1s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 20.6s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 31.2s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 20.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 31.3s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 20.8s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 31.4s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 20.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 31.5s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 21.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 31.6s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 21.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 31.7s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 21.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 31.8s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 21.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 31.9s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 21.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 32.0s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 21.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 32.1s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 21.6s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 32.2s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 21.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 32.3s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 21.8s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 32.4s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 21.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 32.5s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 22.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 32.6s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 22.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 32.7s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 22.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 32.8s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 22.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 32.9s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 22.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 33.0s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 22.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 33.1s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 22.6s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 33.2s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 22.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 33.3s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 22.8s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 33.4s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 22.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 33.5s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 23.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 33.6s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 23.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 33.7s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 23.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 33.8s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 23.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 33.9s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 23.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 34.0s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 23.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 34.1s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 23.6s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 34.2s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 23.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 34.3s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 23.8s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 34.4s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 23.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 34.5s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 24.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 34.6s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 24.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 34.7s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 24.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 34.8s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 24.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 34.9s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 24.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 35.0s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 24.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 35.1s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 24.6s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 35.2s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 24.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 35.3s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 24.8s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 35.4s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 24.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 35.5s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 25.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 35.6s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 25.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 35.7s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 25.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 35.8s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 25.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 35.9s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 25.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 36.0s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 25.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 36.1s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 25.6s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 36.2s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 25.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 36.3s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 25.8s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 36.4s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 25.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 36.5s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 26.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 36.6s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 26.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 36.7s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 26.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 36.8s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 26.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 36.9s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 26.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 37.0s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 26.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 37.1s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 26.6s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 37.2s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 26.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 37.3s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 26.8s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 37.4s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 26.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 37.5s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 27.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 37.6s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 27.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 37.7s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 27.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 37.8s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 27.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 37.9s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 27.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 38.0s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 27.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 38.1s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 27.6s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 38.2s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 27.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 38.3s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 27.8s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 38.4s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 27.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 38.5s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 28.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 38.6s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 28.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 38.7s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 28.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 38.8s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 28.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 38.9s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 28.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 39.0s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 28.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 39.1s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 28.6s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 39.2s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 28.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 39.3s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 28.8s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 39.4s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 28.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 39.5s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 29.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 39.6s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 29.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 39.7s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 29.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 39.8s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 29.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 39.9s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 29.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 40.0s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 29.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 40.1s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 29.6s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 40.2s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 29.7s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 40.3s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 29.8s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 40.4s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 29.9s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 40.5s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 30.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 40.6s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 30.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 40.7s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 30.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 40.8s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 30.3s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 40.9s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 30.4s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 41.0s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting (1) ━━━━━━━━━━━━━━━━━━━━━╸\u001b[33m━\u001b[0m 50 libtensorflow_cc 30.5s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 41.1s\n",
+ "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 245.1MB 20.3s\n",
+ "Extracting ━━━━━━━━━━━━━━━━━━━━━━━ 51 30.6s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G\u001b[?25h\n",
+ "Downloading and Extracting Packages\n",
+ "\n",
+ "Preparing transaction: done\n",
+ "Verifying transaction: done\n",
+ "Executing transaction: done\n",
+ "\n",
+ "To activate this environment, use\n",
+ "\n",
+ " $ mamba activate dmff_omm\n",
+ "\n",
+ "To deactivate an active environment, use\n",
+ "\n",
+ " $ mamba deactivate\n",
+ "\n",
+ "Run 'mamba init' to be able to run mamba activate/deactivate\n",
+ "and start a new shell session. Or use conda to activate/deactivate.\n",
+ "\n"
+ ]
+ }
+ ],
+ "source": [
+ "!mamba create -n dmff_omm -c conda-forge -y python=3.9 openmm libtensorflow_cc=2.9.1 swig=4.0.1 setuptools=59.5.0\n",
+ "!mamba activate dmff_omm"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "id": "23491ef9-77c7-45b8-b71e-05452c7ba798",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "--2023-11-09 06:26:46-- https://github.com/tensorflow/tensorflow/archive/refs/tags/v2.9.1.tar.gz\n",
+ "Resolving ga.dp.tech (ga.dp.tech)... 10.255.254.7, 10.255.254.37, 10.255.254.18\n",
+ "Connecting to ga.dp.tech (ga.dp.tech)|10.255.254.7|:8118... connected.\n",
+ "Proxy request sent, awaiting response... 302 Found\n",
+ "Location: https://codeload.github.com/tensorflow/tensorflow/tar.gz/refs/tags/v2.9.1 [following]\n",
+ "--2023-11-09 06:26:47-- https://codeload.github.com/tensorflow/tensorflow/tar.gz/refs/tags/v2.9.1\n",
+ "Connecting to ga.dp.tech (ga.dp.tech)|10.255.254.7|:8118... connected.\n",
+ "Proxy request sent, awaiting response... 200 OK\n",
+ "Length: unspecified [application/x-gzip]\n",
+ "Saving to: ‘v2.9.1.tar.gz’\n",
+ "\n",
+ "v2.9.1.tar.gz [ <=>] 63.57M 5.04MB/s in 14s \n",
+ "\n",
+ "2023-11-09 06:27:02 (4.66 MB/s) - ‘v2.9.1.tar.gz’ saved [66654318]\n",
+ "\n"
+ ]
+ }
+ ],
+ "source": [
+ "!wget https://github.com/tensorflow/tensorflow/archive/refs/tags/v2.9.1.tar.gz\n",
+ "!tar -xf v2.9.1.tar.gz --no-same-owner\n",
+ "!cp -r tensorflow-2.9.1/tensorflow/c /opt/mamba/envs/dmff_omm/include/tensorflow"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "id": "33b4746d-9d70-4304-ba2f-27b481ed2407",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Cloning into 'cppflow'...\n",
+ "remote: Enumerating objects: 1011, done.\u001b[K\n",
+ "remote: Counting objects: 100% (299/299), done.\u001b[K\n",
+ "remote: Compressing objects: 100% (138/138), done.\u001b[K\n",
+ "remote: Total 1011 (delta 182), reused 237 (delta 157), pack-reused 712\u001b[K\n",
+ "Receiving objects: 100% (1011/1011), 8.70 MiB | 5.32 MiB/s, done.\n",
+ "Resolving deltas: 100% (483/483), done.\n"
+ ]
+ }
+ ],
+ "source": [
+ "!git clone https://github.com/serizba/cppflow.git\n",
+ "!cd /data/cppflow && git apply /data/DMFF/backend/openmm_dmff_plugin/tests/cppflow_empty_constructor.patch\n",
+ "!mkdir /opt/mamba/envs/dmff_omm/include/cppflow\n",
+ "!cd /data/cppflow && cp -r include/cppflow /opt/mamba/envs/dmff_omm/include/"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "id": "d07d498d-536d-4ed8-8fa8-f012fd8d6281",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "-- The C compiler identification is GNU 9.4.0\n",
+ "-- The CXX compiler identification is GNU 9.4.0\n",
+ "-- Check for working C compiler: /usr/bin/cc\n",
+ "-- Check for working C compiler: /usr/bin/cc -- works\n",
+ "-- Detecting C compiler ABI info\n",
+ "-- Detecting C compiler ABI info - done\n",
+ "-- Detecting C compile features\n",
+ "-- Detecting C compile features - done\n",
+ "-- Check for working CXX compiler: /usr/bin/c++\n",
+ "-- Check for working CXX compiler: /usr/bin/c++ -- works\n",
+ "-- Detecting CXX compiler ABI info\n",
+ "-- Detecting CXX compiler ABI info - done\n",
+ "-- Detecting CXX compile features\n",
+ "-- Detecting CXX compile features - done\n",
+ "-- Looking for pthread.h\n",
+ "-- Looking for pthread.h - found\n",
+ "-- Performing Test CMAKE_HAVE_LIBC_PTHREAD\n",
+ "-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Failed\n",
+ "-- Looking for pthread_create in pthreads\n",
+ "-- Looking for pthread_create in pthreads - not found\n",
+ "-- Looking for pthread_create in pthread\n",
+ "-- Looking for pthread_create in pthread - found\n",
+ "-- Found Threads: TRUE \n",
+ "-- CUDA found, building CUDA implementation\n",
+ "-- Python and SWIG found, building Python wrappers\n",
+ "-- Configuring done\n",
+ "-- Generating done\n",
+ "-- Build files have been written to: /data/DMFF/backend/openmm_dmff_plugin/build\n",
+ "\u001b[35m\u001b[1mScanning dependencies of target OpenMMDMFF\u001b[0m\n",
+ "[ 5%] \u001b[32mBuilding CXX object CMakeFiles/OpenMMDMFF.dir/openmmapi/src/DMFFForce.cpp.o\u001b[0m\n",
+ "[ 10%] \u001b[32mBuilding CXX object CMakeFiles/OpenMMDMFF.dir/openmmapi/src/DMFFForceImpl.cpp.o\u001b[0m\n",
+ "[ 15%] \u001b[32mBuilding CXX object CMakeFiles/OpenMMDMFF.dir/serialization/src/DMFFForceProxy.cpp.o\u001b[0m\n",
+ "[ 21%] \u001b[32mBuilding CXX object CMakeFiles/OpenMMDMFF.dir/serialization/src/DMFFSerializationProxyRegistration.cpp.o\u001b[0m\n",
+ "[ 26%] \u001b[32m\u001b[1mLinking CXX shared library libOpenMMDMFF.so\u001b[0m\n",
+ "[ 26%] Built target OpenMMDMFF\n",
+ "\u001b[35m\u001b[1mScanning dependencies of target TestSerializeDMFFForce\u001b[0m\n",
+ "[ 31%] \u001b[32mBuilding CXX object serialization/tests/CMakeFiles/TestSerializeDMFFForce.dir/TestSerializeDMFFForce.cpp.o\u001b[0m\n",
+ "[ 36%] \u001b[32m\u001b[1mLinking CXX executable ../../TestSerializeDMFFForce\u001b[0m\n",
+ "[ 36%] Built target TestSerializeDMFFForce\n",
+ "\u001b[35m\u001b[1mScanning dependencies of target OpenMMDMFFReference\u001b[0m\n",
+ "[ 42%] \u001b[32mBuilding CXX object platforms/reference/CMakeFiles/OpenMMDMFFReference.dir/src/ReferenceDMFFKernelFactory.cpp.o\u001b[0m\n",
+ "[ 47%] \u001b[32mBuilding CXX object platforms/reference/CMakeFiles/OpenMMDMFFReference.dir/src/ReferenceDMFFKernels.cpp.o\u001b[0m\n",
+ "[ 52%] \u001b[32m\u001b[1mLinking CXX shared library ../../libOpenMMDMFFReference.so\u001b[0m\n",
+ "[ 52%] Built target OpenMMDMFFReference\n",
+ "\u001b[35m\u001b[1mScanning dependencies of target TestDMFFPlugin4Reference\u001b[0m\n",
+ "[ 57%] \u001b[32mBuilding CXX object platforms/reference/tests/CMakeFiles/TestDMFFPlugin4Reference.dir/TestDMFFPlugin4Reference.cpp.o\u001b[0m\n",
+ "[ 63%] \u001b[32m\u001b[1mLinking CXX executable ../../../TestDMFFPlugin4Reference\u001b[0m\n",
+ "[ 63%] Built target TestDMFFPlugin4Reference\n",
+ "[ 68%] \u001b[34m\u001b[1mGenerating src/CudaDMFFKernelSources.cpp, src/CudaDMFFKernelSources.h\u001b[0m\n",
+ "\u001b[35m\u001b[1mScanning dependencies of target OpenMMDMFFCUDA\u001b[0m\n",
+ "[ 73%] \u001b[32mBuilding CXX object platforms/cuda/CMakeFiles/OpenMMDMFFCUDA.dir/src/CudaDMFFKernelFactory.cpp.o\u001b[0m\n",
+ "[ 78%] \u001b[32mBuilding CXX object platforms/cuda/CMakeFiles/OpenMMDMFFCUDA.dir/src/CudaDMFFKernels.cpp.o\u001b[0m\n",
+ "[ 84%] \u001b[32mBuilding CXX object platforms/cuda/CMakeFiles/OpenMMDMFFCUDA.dir/src/CudaDMFFKernelSources.cpp.o\u001b[0m\n",
+ "[ 89%] \u001b[32m\u001b[1mLinking CXX shared library ../../libOpenMMDMFFCUDA.so\u001b[0m\n",
+ "[ 89%] Built target OpenMMDMFFCUDA\n",
+ "\u001b[35m\u001b[1mScanning dependencies of target TestDMFFPlugin4CUDA\u001b[0m\n",
+ "[ 94%] \u001b[32mBuilding CXX object platforms/cuda/tests/CMakeFiles/TestDMFFPlugin4CUDA.dir/TestDMFFPlugin4CUDA.cpp.o\u001b[0m\n",
+ "[100%] \u001b[32m\u001b[1mLinking CXX executable ../../../TestDMFFPlugin4CUDA\u001b[0m\n",
+ "[100%] Built target TestDMFFPlugin4CUDA\n",
+ "[ 26%] Built target OpenMMDMFF\n",
+ "[ 36%] Built target TestSerializeDMFFForce\n",
+ "[ 52%] Built target OpenMMDMFFReference\n",
+ "[ 63%] Built target TestDMFFPlugin4Reference\n",
+ "[ 89%] Built target OpenMMDMFFCUDA\n",
+ "[100%] Built target TestDMFFPlugin4CUDA\n",
+ "\u001b[36mInstall the project...\u001b[0m\n",
+ "-- Install configuration: \"\"\n",
+ "-- Installing: /opt/mamba/envs/dmff_omm/include/DMFFForce.h\n",
+ "-- Installing: /opt/mamba/envs/dmff_omm/include/DMFFKernels.h\n",
+ "-- Installing: /opt/mamba/envs/dmff_omm/include/internal/DMFFForceImpl.h\n",
+ "-- Installing: /opt/mamba/envs/dmff_omm/include/internal/windowsExportDMFF.h\n",
+ "-- Installing: /opt/mamba/envs/dmff_omm/lib/libOpenMMDMFF.so\n",
+ "-- Set runtime path of \"/opt/mamba/envs/dmff_omm/lib/libOpenMMDMFF.so\" to \"\"\n",
+ "-- Installing: /opt/mamba/envs/dmff_omm/lib/plugins/libOpenMMDMFFReference.so\n",
+ "-- Set runtime path of \"/opt/mamba/envs/dmff_omm/lib/plugins/libOpenMMDMFFReference.so\" to \"\"\n",
+ "-- Installing: /opt/mamba/envs/dmff_omm/lib/plugins/libOpenMMDMFFCUDA.so\n",
+ "-- Set runtime path of \"/opt/mamba/envs/dmff_omm/lib/plugins/libOpenMMDMFFCUDA.so\" to \"\"\n",
+ "\u001b[35m\u001b[1mScanning dependencies of target PythonInstall\u001b[0m\n",
+ "[100%] \u001b[34m\u001b[1mGenerating OpenMMDMFFPluginWrapper.cpp\u001b[0m\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:724: Warning 314: 'None' is a python keyword, renaming to '_None'\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:470: Warning 453: Can't apply (OpenMM::Context &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:493: Warning 453: Can't apply (OpenMM::Context &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:570: Warning 453: Can't apply (std::vector< double,std::allocator< double > > &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:587: Warning 453: Can't apply (std::string &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:588: Warning 453: Can't apply (std::vector< double,std::allocator< double > > &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:598: Warning 453: Can't apply (std::string &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:599: Warning 453: Can't apply (std::string &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:605: Warning 453: Can't apply (std::set< int > &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:606: Warning 453: Can't apply (std::set< int > &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:611: Warning 453: Can't apply (OpenMM::Context &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:633: Warning 453: Can't apply (std::vector< double,std::allocator< double > > &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:666: Warning 453: Can't apply (std::vector< double,std::allocator< double > > &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:671: Warning 453: Can't apply (OpenMM::Context &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:707: Warning 453: Can't apply (OpenMM::Context &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:777: Warning 453: Can't apply (std::vector< int,std::allocator< int > > &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:794: Warning 453: Can't apply (OpenMM::Context &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:808: Warning 453: Can't apply (std::vector< double,std::allocator< double > > &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:834: Warning 453: Can't apply (OpenMM::Context &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:866: Warning 453: Can't apply (std::vector< double,std::allocator< double > > &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:874: Warning 453: Can't apply (OpenMM::Context &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:905: Warning 453: Can't apply (std::vector< double,std::allocator< double > > &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:912: Warning 453: Can't apply (OpenMM::Context &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:987: Warning 453: Can't apply (OpenMM::Context &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:1104: Warning 453: Can't apply (std::string &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:1117: Warning 453: Can't apply (std::string &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:1135: Warning 453: Can't apply (OpenMM::Context &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:1183: Warning 453: Can't apply (ContextImpl &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:1184: Warning 453: Can't apply (ContextImpl &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:1223: Warning 453: Can't apply (OpenMM::Context &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:1224: Warning 453: Can't apply (std::vector< double,std::allocator< double > > &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:1228: Warning 453: Can't apply (OpenMM::Context &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:1231: Warning 453: Can't apply (OpenMM::Context &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:1255: Warning 453: Can't apply (Vec3 &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:1256: Warning 453: Can't apply (Vec3 &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:1257: Warning 453: Can't apply (Vec3 &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:1304: Warning 453: Can't apply (OpenMM::Context &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:1317: Warning 453: Can't apply (std::vector< double,std::allocator< double > > &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:1354: Warning 453: Can't apply (std::vector< int,std::allocator< int > > &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:1355: Warning 453: Can't apply (std::vector< double,std::allocator< double > > &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:1361: Warning 453: Can't apply (std::vector< int,std::allocator< int > > &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:1362: Warning 453: Can't apply (std::vector< double,std::allocator< double > > &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:1371: Warning 453: Can't apply (OpenMM::Context &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:1438: Warning 453: Can't apply (OpenMM::Context &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:1501: Warning 453: Can't apply (ContextImpl &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:1583: Warning 453: Can't apply (OpenMM::Context &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:1611: Warning 453: Can't apply (std::vector< double,std::allocator< double > > &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:1721: Warning 453: Can't apply (std::vector< double,std::allocator< double > > &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:1722: Warning 453: Can't apply (std::vector< double,std::allocator< double > > &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:1775: Warning 453: Can't apply (std::vector< Vec3,std::allocator< Vec3 > > &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:1778: Warning 453: Can't apply (std::vector< Vec3,std::allocator< Vec3 > > &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:1781: Warning 453: Can't apply (OpenMM::Context &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:1827: Warning 453: Can't apply (std::vector< double,std::allocator< double > > &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:1832: Warning 453: Can't apply (std::string &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:1833: Warning 453: Can't apply (std::string &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:1841: Warning 453: Can't apply (std::string &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:1859: Warning 453: Can't apply (std::string &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:1860: Warning 453: Can't apply (std::vector< double,std::allocator< double > > &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:1869: Warning 453: Can't apply (OpenMM::Context &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:1896: Warning 453: Can't apply (std::vector< double,std::allocator< double > > &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:1983: Warning 453: Can't apply (Vec3 &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:1984: Warning 453: Can't apply (Vec3 &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:1985: Warning 453: Can't apply (Vec3 &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:2017: Warning 453: Can't apply (std::vector< double,std::allocator< double > > &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:2023: Warning 453: Can't apply (OpenMM::Context &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:2054: Warning 453: Can't apply (OpenMM::Context &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:2089: Warning 453: Can't apply (std::vector< Vec3,std::allocator< Vec3 > > &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:2092: Warning 453: Can't apply (std::vector< Vec3,std::allocator< Vec3 > > &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:2107: Warning 453: Can't apply (std::string &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:2108: Warning 453: Can't apply (std::string &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:2178: Warning 453: Can't apply (OpenMM::Context &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:2238: Warning 453: Can't apply (std::vector< int,std::allocator< int > > &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:2253: Warning 453: Can't apply (std::vector< double,std::allocator< double > > &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:2254: Warning 453: Can't apply (std::vector< double,std::allocator< double > > &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:2275: Warning 453: Can't apply (std::vector< int,std::allocator< int > > &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:2278: Warning 453: Can't apply (std::vector< std::vector< int,std::allocator< int > >,std::allocator< std::vector< int,std::allocator< int > > > > &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:2289: Warning 453: Can't apply (std::vector< Vec3,std::allocator< Vec3 > > &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:2292: Warning 453: Can't apply (std::vector< Vec3,std::allocator< Vec3 > > &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:2295: Warning 453: Can't apply (std::vector< Vec3,std::allocator< Vec3 > > &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:2298: Warning 453: Can't apply (std::vector< double,std::allocator< double > > &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:2301: Warning 453: Can't apply (OpenMM::Context &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:2302: Warning 453: Can't apply (std::vector< double,std::allocator< double > > &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:2306: Warning 453: Can't apply (OpenMM::Context &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:2337: Warning 453: Can't apply (std::vector< int,std::allocator< int > > &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:2338: Warning 453: Can't apply (std::vector< double,std::allocator< double > > &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:2348: Warning 453: Can't apply (std::string &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:2349: Warning 453: Can't apply (std::vector< double,std::allocator< double > > &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:2358: Warning 453: Can't apply (OpenMM::Context &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:2374: Warning 453: Can't apply (OpenMM::SerializationNode &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:2384: Warning 453: Can't apply (std::vector< double,std::allocator< double > > &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:2436: Warning 453: Can't apply (std::vector< double,std::allocator< double > > &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:2447: Warning 453: Can't apply (std::vector< double,std::allocator< double > > &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:2466: Warning 453: Can't apply (std::string &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:2467: Warning 453: Can't apply (std::vector< double,std::allocator< double > > &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:2476: Warning 453: Can't apply (OpenMM::Context &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:2520: Warning 453: Can't apply (std::vector< double,std::allocator< double > > &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:2534: Warning 453: Can't apply (std::set< int > &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:2542: Warning 453: Can't apply (OpenMM::Context &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:2600: Warning 453: Can't apply (std::vector< double,std::allocator< double > > &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:2603: Warning 453: Can't apply (std::vector< double,std::allocator< double > > &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:2606: Warning 453: Can't apply (std::vector< double,std::allocator< double > > &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:2679: Warning 453: Can't apply (OpenMM::Context &OUTPUT). No typemaps are defined.\n",
+ "/opt/mamba/envs/dmff_omm/include/swig/OpenMMSwigHeaders.i:2723: Warning 453: Can't apply (std::vector< double,std::allocator< double > > &OUTPUT). No typemaps are defined.\n",
+ "running build\n",
+ "running build_py\n",
+ "creating build\n",
+ "creating build/lib.linux-x86_64-3.9\n",
+ "creating build/lib.linux-x86_64-3.9/OpenMMDMFFPlugin\n",
+ "copying OpenMMDMFFPlugin/__init__.py -> build/lib.linux-x86_64-3.9/OpenMMDMFFPlugin\n",
+ "copying OpenMMDMFFPlugin/tools.py -> build/lib.linux-x86_64-3.9/OpenMMDMFFPlugin\n",
+ "package init file 'OpenMMDMFFPlugin/tests/__init__.py' not found (or not a regular file)\n",
+ "creating build/lib.linux-x86_64-3.9/OpenMMDMFFPlugin/tests\n",
+ "copying OpenMMDMFFPlugin/tests/test_dmff_plugin_nve.py -> build/lib.linux-x86_64-3.9/OpenMMDMFFPlugin/tests\n",
+ "package init file 'OpenMMDMFFPlugin/tests/__init__.py' not found (or not a regular file)\n",
+ "running build_ext\n",
+ "building 'OpenMMDMFFPlugin._OpenMMDMFFPlugin' extension\n",
+ "creating build/temp.linux-x86_64-3.9\n",
+ "/usr/bin/cc -Wno-unused-result -Wsign-compare -DNDEBUG -fwrapv -O2 -Wall -fPIC -O2 -isystem /opt/mamba/envs/dmff_omm/include -fPIC -O2 -isystem /opt/mamba/envs/dmff_omm/include -fPIC -I/opt/mamba/envs/dmff_omm/include -I/opt/mamba/envs/dmff_omm/include -I/opt/mamba/envs/dmff_omm/include -I/data/DMFF/backend/openmm_dmff_plugin/openmmapi/include -I/opt/mamba/envs/dmff_omm/include/python3.9 -c OpenMMDMFFPluginWrapper.cpp -o build/temp.linux-x86_64-3.9/OpenMMDMFFPluginWrapper.o -std=c++17 -fPIC\n",
+ "/usr/bin/c++ -shared -Wl,--allow-shlib-undefined -Wl,-rpath,/opt/mamba/envs/dmff_omm/lib -Wl,-rpath-link,/opt/mamba/envs/dmff_omm/lib -L/opt/mamba/envs/dmff_omm/lib -Wl,--allow-shlib-undefined -Wl,-rpath,/opt/mamba/envs/dmff_omm/lib -Wl,-rpath-link,/opt/mamba/envs/dmff_omm/lib -L/opt/mamba/envs/dmff_omm/lib build/temp.linux-x86_64-3.9/OpenMMDMFFPluginWrapper.o -L/opt/mamba/envs/dmff_omm/lib -L/opt/mamba/envs/dmff_omm/lib -L/opt/mamba/envs/dmff_omm/lib -L/data/DMFF/backend/openmm_dmff_plugin/build -lOpenMM -lOpenMMDMFF -o build/lib.linux-x86_64-3.9/OpenMMDMFFPlugin/_OpenMMDMFFPlugin.cpython-39-x86_64-linux-gnu.so\n",
+ "running install\n",
+ "running build\n",
+ "running build_py\n",
+ "copying OpenMMDMFFPlugin/OpenMMDMFFPlugin.py -> build/lib.linux-x86_64-3.9/OpenMMDMFFPlugin\n",
+ "package init file 'OpenMMDMFFPlugin/tests/__init__.py' not found (or not a regular file)\n",
+ "package init file 'OpenMMDMFFPlugin/tests/__init__.py' not found (or not a regular file)\n",
+ "running build_ext\n",
+ "running install_lib\n",
+ "creating /opt/mamba/envs/dmff_omm/lib/python3.9/site-packages/OpenMMDMFFPlugin\n",
+ "copying build/lib.linux-x86_64-3.9/OpenMMDMFFPlugin/OpenMMDMFFPlugin.py -> /opt/mamba/envs/dmff_omm/lib/python3.9/site-packages/OpenMMDMFFPlugin\n",
+ "copying build/lib.linux-x86_64-3.9/OpenMMDMFFPlugin/_OpenMMDMFFPlugin.cpython-39-x86_64-linux-gnu.so -> /opt/mamba/envs/dmff_omm/lib/python3.9/site-packages/OpenMMDMFFPlugin\n",
+ "copying build/lib.linux-x86_64-3.9/OpenMMDMFFPlugin/__init__.py -> /opt/mamba/envs/dmff_omm/lib/python3.9/site-packages/OpenMMDMFFPlugin\n",
+ "creating /opt/mamba/envs/dmff_omm/lib/python3.9/site-packages/OpenMMDMFFPlugin/tests\n",
+ "copying build/lib.linux-x86_64-3.9/OpenMMDMFFPlugin/tests/test_dmff_plugin_nve.py -> /opt/mamba/envs/dmff_omm/lib/python3.9/site-packages/OpenMMDMFFPlugin/tests\n",
+ "copying build/lib.linux-x86_64-3.9/OpenMMDMFFPlugin/tools.py -> /opt/mamba/envs/dmff_omm/lib/python3.9/site-packages/OpenMMDMFFPlugin\n",
+ "byte-compiling /opt/mamba/envs/dmff_omm/lib/python3.9/site-packages/OpenMMDMFFPlugin/OpenMMDMFFPlugin.py to OpenMMDMFFPlugin.cpython-39.pyc\n",
+ "byte-compiling /opt/mamba/envs/dmff_omm/lib/python3.9/site-packages/OpenMMDMFFPlugin/__init__.py to __init__.cpython-39.pyc\n",
+ "byte-compiling /opt/mamba/envs/dmff_omm/lib/python3.9/site-packages/OpenMMDMFFPlugin/tests/test_dmff_plugin_nve.py to test_dmff_plugin_nve.cpython-39.pyc\n",
+ "byte-compiling /opt/mamba/envs/dmff_omm/lib/python3.9/site-packages/OpenMMDMFFPlugin/tools.py to tools.cpython-39.pyc\n",
+ "running install_egg_info\n",
+ "Writing /opt/mamba/envs/dmff_omm/lib/python3.9/site-packages/OpenMMDMFFPlugin-cdb14ee-py3.9.egg-info\n",
+ "[100%] Built target PythonInstall\n"
+ ]
+ }
+ ],
+ "source": [
+ "!cd /data/DMFF/backend/openmm_dmff_plugin/ && mkdir build && cd build && cmake .. -DOPENMM_DIR=/opt/mamba/envs/dmff_omm -DCPPFLOW_DIR=/opt/mamba/envs/dmff_omm -DTENSORFLOW_DIR=/opt/mamba/envs/dmff_omm -DSWIG_EXECUTABLE=/opt/mamba/envs/dmff_omm/bin/swig -DPYTHON_EXECUTABLE=/opt/mamba/envs/dmff_omm/bin/python && make && make install && make PythonInstall"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "id": "9b9bc4df-09cd-4bcc-ae19-59b684cd84ed",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "2023-11-09 06:35:31.878151: I tensorflow/cc/saved_model/reader.cc:43] Reading SavedModel from: ./openmm_dmff_plugin/python/OpenMMDMFFPlugin/data/admp_water_dimer_aux\n",
+ "2023-11-09 06:35:32.138075: I tensorflow/cc/saved_model/reader.cc:81] Reading meta graph with tags { serve }\n",
+ "2023-11-09 06:35:32.138139: I tensorflow/cc/saved_model/reader.cc:122] Reading SavedModel debug info (if present) from: ./openmm_dmff_plugin/python/OpenMMDMFFPlugin/data/admp_water_dimer_aux\n",
+ "2023-11-09 06:35:32.139209: I tensorflow/core/platform/cpu_feature_guard.cc:193] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations: SSE4.1 SSE4.2 AVX AVX2 AVX512F FMA\n",
+ "To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.\n",
+ "2023-11-09 06:35:32.854369: I tensorflow/compiler/mlir/mlir_graph_optimization_pass.cc:354] MLIR V1 optimization pass is not enabled\n",
+ "2023-11-09 06:35:32.946199: I tensorflow/cc/saved_model/loader.cc:228] Restoring SavedModel bundle.\n",
+ "2023-11-09 06:35:36.536096: I tensorflow/cc/saved_model/loader.cc:212] Running initialization op on SavedModel bundle at path: ./openmm_dmff_plugin/python/OpenMMDMFFPlugin/data/admp_water_dimer_aux\n",
+ "2023-11-09 06:35:40.039418: I tensorflow/cc/saved_model/loader.cc:301] SavedModel load for tags { serve }; Status: success: OK. Took 8161272 microseconds.\n",
+ "Running dynamics\n",
+ "2023-11-09 06:35:59.797664: I tensorflow/compiler/xla/service/service.cc:170] XLA service 0x55b197670fa0 initialized for platform Host (this does not guarantee that XLA will be used). Devices:\n",
+ "2023-11-09 06:35:59.797707: I tensorflow/compiler/xla/service/service.cc:178] StreamExecutor device (0): Host, Default Version\n",
+ "2023-11-09 06:35:59.809487: I tensorflow/compiler/jit/xla_compilation_cache.cc:478] Compiled cluster using XLA! This line is logged at most once for the lifetime of the process.\n",
+ "2023-11-09 06:35:59.984554: I tensorflow/compiler/mlir/tensorflow/utils/dump_mlir_util.cc:263] disabling MLIR crash reproducer, set env var `MLIR_CRASH_REPRODUCER_DIRECTORY` to enable.\n",
+ "Running on Reference platform, time cost: 40.6564 s\n",
+ "Total energy std: 0.0051 kJ/mol\n",
+ "Mean total energy: -0.0556 kJ/mol\n"
+ ]
+ }
+ ],
+ "source": [
+ "!cd /data/DMFF/backend && /opt/mamba/envs/dmff_omm/bin/python -m OpenMMDMFFPlugin.tests.test_dmff_plugin_nve -n 100 --pdb ../examples/water_fullpol/water_dimer.pdb --model ./openmm_dmff_plugin/python/OpenMMDMFFPlugin/data/admp_water_dimer_aux --has_aux True"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "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.10.6"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/docs/user_guide/test.ipynb b/docs/user_guide/test.ipynb
new file mode 100644
index 000000000..d304f8fa8
--- /dev/null
+++ b/docs/user_guide/test.ipynb
@@ -0,0 +1 @@
+{"metadata":{"kernelspec":{"display_name":"Python 3 (ipykernel)","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.10.6"}},"nbformat_minor":5,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# Getting started with DMFF: A comprehensive beginner's tutorial.\n**In the simulation of molecular systems, the underlying force field (FF) model plays an extremely important role, determining the reliability of the simulation. However, the quality of the state-of-the-art molecular force fields is still unsatisfactory in many cases, and the FF parameterization process largely relies on human experience, which is not scalable. To address this issue, we introduce DMFF (Differentiable Molecular Force Field), an open-source molecular FF development platform based on automatic differentiation technique. Using DMFF, both energies/forces and thermodynamic quantities such as ensemble averages and free energies can be evaluated in a differentiable way, realizing an automatic, yet highly\nflexible force field optimization workflow**\n\nFor more details, please refer to this link: https://mp.weixin.qq.com/s/eVXTr1eU1-dGbC5UFybr0g\n\n**Note**: JAX, DMFF, and other related tools are still undergoing rapid development and iteration. This notebook has been successfully executed using DMFF 0.2.0.\n> **Choose dmff:0.2.0-notebook and you can directly run this notebook on Bohrium** \n\nThis notebook is primarily organized by Wei Feng.","metadata":{},"id":"5a7fe9e6-825a-4963-a55e-18a7366fb8b0"},{"cell_type":"markdown","source":"# Before You Run","metadata":{"jp-MarkdownHeadingCollapsed":true},"id":"410936e3-f066-44e7-8ee4-930417d62809"},{"cell_type":"markdown","source":"Molecular systems are a highly important category of systems, encompassing various organic molecules such as biomolecules, drug molecules, various coatings used in industries, porous materials like COFs, polymers and small molecule electrolytes in batteries, and more. Problems of interest in industries, such as structure prediction of biomolecules, drug screening, screening and design of materials, heavily rely on molecular dynamics (MD) simulations of molecular systems. Although the applications of MD have extended beyond molecular systems, simulating molecular systems remains one of the core applications of MD.\n\nMD simulations usually rely on a potential energy surface (PES), which describes the energies and the forces of the simulated atoms. For the sake of computational efficiency, the PES is typically approximated using a classical model, namely molecular force field, instead of being computed ab initioly on-the-fly. Therefore, the quality of the underlying force field limits the accuracy and the predictive power of the simulation. \n\nSo it's obvious that the core of simulation is fitting microscale interactions, or potential functions, to accurately predict macroscopic properties. In classical molecular dynamics, the potential function is expressed mathematically in terms of a molecular force field.\n\n## What Is Molecular Force Field\n\nAs we mentioned above, one of the most important aspects in simulating molecular systems is characterizing the system's potential energy function and describing the interactions within the system. In Classical Molecular Dynamics (CMD) simulations, the potential energy function follows a fixed mathematical form, and the force field provides the mathematical functions for intermolecular and intramolecular interaction potentials. The traditional force fields commonly used in the industry, such as OPLS and GAFF, generally share a similar form:\n\n![s](https://i.postimg.cc/SKJjsCjq/interact.jpg)\n\nThe total energy can be divided into bonded and nonbonded components. The bonded component naturally depends on the intramolecular coordinates (bond lengths, bond angles, dihedral angles), while the nonbonded component (further decomposable into van der Waals interactions and electrostatic interactions) naturally depends on the interatomic distances. This form is almost universally used as the standard form in the entire industry. However, the molecular force fields currently employed in industrial applications face several challenges:\n- Lack of portability and predictive capability: When studying new systems, it is often uncertain which force field will yield better results until actual simulations are performed. Apart from relying on \"experience,\" it can be challenging to determine the appropriate force field selection criteria.\n- Parameter's non-uniqueness and inconsistency: It is common to encounter multiple sets of completely different parameters that yield similar macroscopic predictions. As a result, it is not possible to solely rely on macroscopic data to determine which set of parameters is more reasonable at the microscale. Moreover, similar molecular systems often have entirely different force field parameters, making it challenging to combine force fields developed by different research groups.\n\nOver the past few decades, the development of empirical force fields and the improvement of computational accuracy have been both an age-old and emerging topic. The quest to accurately and efficiently describe atomic interactions and establish a technical roadmap for developing a molecular force field applicable to the majority of systems has been the focus of researchers in the field of molecular force fields and molecular dynamics.\n\nThe optimization of parameters in force fields has long relied on manual intervention and \"empirical\" parameter tuning methods. This reliance raises concerns about the reliability and efficiency of empirical force field fitting. However, with the advent of the artificial intelligence era, one underlying technology, automatic differentiation, offers a new solution. This technology has paved the way for the development of Differentiable Molecular Force Field (DMFF), which holds the promise of becoming a powerful tool for molecular force field developers.","metadata":{},"id":"6dd2486f-c47b-4d46-a42c-ffe2e94827c3"},{"cell_type":"markdown","source":"## Automatic DIfferentiation & DMFF\nAutomatic differentiation is a high-precision and versatile method for computing derivatives in computer programs. It follows the mathematical chain rule to compute derivatives of composite functions. By tracing the derivative chains of every data point based on the computation graph, it can calculate the differentiation of the output with respect to the input variables.\n\nAutomatic differentiation plays a crucial role in optimizing neural network models. During model training, it is necessary to compute the gradients of the output with respect to the input variables through backpropagation and utilize gradient descent to optimize the model parameters. Automatic differentiation frameworks excel at achieving this task. With their efficient optimization capabilities for high-dimensional parameters, automatic differentiation techniques can be applied not only to neural network models but also to any framework that follows the \"input model parameters → apply model computation → obtain computed results\" structure. Molecular dynamics simulations precisely follow this workflow.\n\nTherefore, leveraging automatic differentiation techniques and utilizing experimental or first-principles computed data as references, it is possible to optimize force field parameters by calculating the differentiation of the output results with respect to the input parameters through backpropagation. This enables the optimization of force field parameters in molecular dynamics simulations, just as in the optimization of neural network models.\n\n![s](https://i.postimg.cc/Gp1S3JXT/Autod.jpg)\n\nSeveral attempts have been made to harness automatic differentiation techniques for molecular dynamics simulations, such as TorchMD, JAX-MD, and SPONGE. However, the deep computational graph involved in molecular dynamics simulations often introduces additional challenges. The backpropagation process, which calculates the differentiation from the output results to the input variables, can be computationally expensive. Additionally, there is still a lack of simulation engines specifically designed for rapid implementation and parameter optimization of force fields. Molecular force field developers urgently require comprehensive support for a wider range of force field functional forms and various types of objective functions. Now DMFF comes.\n\n![s](https://i.postimg.cc/CLkQ3QNp/dmffLogo.jpg)\n\nDMFF provides a comprehensive and rapid implementation of force field models and offers differentiable estimators of system energy, forces, and thermodynamic quantities. These differentiable estimators allow for the definition of corresponding object functions, enabling an automatic optimization process.\n\nAs mentioned above, the deep computational graph spanning the entire trajectory in molecular dynamics simulations would be computationally expensive and time-consuming. However, this limitation can be mitigated by employing a reweighting scheme for the trajectory. In DMFF, the reweighting algorithm is incorporated into the MBAR method, and extends the differentiable estimators for average properties and free energy calculations. We will demonstrate this method with practical examples to showcase its effectiveness.\n\nDMFF gives a solution to two major problems in molecular force field development:\n- How to ensure the rapid implementation and iteration of complex force fields in molecular dynamics simulations?\n- How to improve the efficiency of optimizing parameters in high-dimensional functions and automate this process, while increasing the transferability of the parameters?\n\nIn our latest release, DMFF 0.2.0, we have explored a pathway for automatic optimization of force field parameters. The corresponding workflow has been validated in both simple small molecular systems and more complex electrolyte systems. We will guide you through a step-by-step notebook experience, demonstrating the complete workflow of DMFF for automatic optimization of force field parameters. Furthermore, using the notebook as a teaching template, we will provide a real hands-on experience showcasing the impact of DMFF on force field development.","metadata":{},"id":"79f62281-a2e6-4e78-afe2-1aeeac9d934e"},{"cell_type":"markdown","source":"# Table of Contents:\n* [1. Quick Start Guide to DMFF](#1)\n * [1.0 Import dependencies and prepare files](#1-1)\n * [1.1 Load existing force field parameters and topology](#1-2)\n * [1.2 Calculation](#1-3)\n * [1.3 [Review] Basic interface and key usage points of DMFF](#1-4)\n* [2. Mutipolar polarizable force field with fluctuating charges](#2)\n * [2.1 Genearate auto-differentiable multipolar polarizable (ADMP) forces](#2-1)\n * [2.2 Implement fluctuating charges](#2-2)\n * [3. Bottom-Up Fitting](#3)\n * [3.1 Problem introduction](#3-1)\n * [3.2 Definition of potential function](#3-2)\n * [3.3 Preparing inputs for the potential function](#3-3)\n * [3.4 Definition of loss function](#3-5)\n * [3.5 Optimize](#3-6)\n* [4.Using DMFF for force field optimization of liquid dimethyl carbonate (DMC)](#4)\n * [4.1 Introduction](#4-1)\n * [4.2 Definition of potential function](#4-2)\n * [4.3 Definition of OpenMM sampler](#4-3)\n * [4.4 Initial MD sampling](#4-4)\n * [4.5 Definition of property calculation functions](#4-5)\n * [4.6 Read the data and perform the comparison](#4-6)\n * [4.7 Estimator initialization](#4-7)\n * [4.8 Definition of target ensemble](#4-8)\n * [4.9 Definition of loss function](#4-9)\n * [4.10 Optimizer setup and optimization loop](#4-10)\n* [5. Summary & Outlook](#summary)","metadata":{},"id":"51c192bb-7ed8-4462-afcc-4b88dbc6e9ce"},{"cell_type":"markdown","source":"## 1. Quick Start Guide to DMFF \nThis case is primarily contributed by Yanbo Han.\n### 1.0 Import dependencies and prepare files \nFirst, we set up the runtime environment and import the potential functions needed.","metadata":{"jp-MarkdownHeadingCollapsed":true},"id":"b9c18f06-2ab4-46dd-ae07-cc82edeb81b2"},{"cell_type":"code","source":"! rm -rf DMFF\n! git clone https://github.com/deepmodeling/DMFF.git\n! git config --global --add safe.directory `pwd`/DMFF\n! cd DMFF && git checkout wangxy/v1.0.0-devel && pip install .","metadata":{"collapsed":true,"jupyter":{"outputs_hidden":true}},"execution_count":1,"outputs":[{"name":"stdout","output_type":"stream","text":"Cloning into 'DMFF'...\nremote: Enumerating objects: 4249, done.\u001b[K\nremote: Counting objects: 100% (532/532), done.\u001b[K\nremote: Compressing objects: 100% (204/204), done.\u001b[K\nremote: Total 4249 (delta 364), reused 466 (delta 328), pack-reused 3717\u001b[K\nReceiving objects: 100% (4249/4249), 19.60 MiB | 4.03 MiB/s, done.\nResolving deltas: 100% (2754/2754), done.\nUpdating files: 100% (273/273), done.\nUpdating files: 100% (281/281), done.\nBranch 'wangxy/v1.0.0-devel' set up to track remote branch 'wangxy/v1.0.0-devel' from 'origin'.\nSwitched to a new branch 'wangxy/v1.0.0-devel'\nLooking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple\nProcessing /data/DMFF\n Preparing metadata (setup.py) ... \u001b[?25ldone\n\u001b[?25hRequirement already satisfied: numpy>=1.18 in /opt/mamba/lib/python3.10/site-packages (from dmff==0.2.1.dev306+geaba9a4) (1.23.4)\nRequirement already satisfied: openmm>=7.6.0 in /opt/mamba/lib/python3.10/site-packages (from dmff==0.2.1.dev306+geaba9a4) (7.7.0)\nRequirement already satisfied: freud-analysis in /opt/mamba/lib/python3.10/site-packages/freud_analysis-2.11.0-py3.10-linux-x86_64.egg (from dmff==0.2.1.dev306+geaba9a4) (2.11.0)\nCollecting networkx>=3.0\n Downloading https://pypi.tuna.tsinghua.edu.cn/packages/d5/f0/8fbc882ca80cf077f1b246c0e3c3465f7f415439bdea6b899f6b19f61f70/networkx-3.2.1-py3-none-any.whl (1.6 MB)\n\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.6/1.6 MB\u001b[0m \u001b[31m6.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0m\n\u001b[?25hCollecting optax>=0.1.4\n Downloading https://pypi.tuna.tsinghua.edu.cn/packages/13/71/787cc24c4b606f3bb9f1d14957ebd7cb9e4234f6d59081721230b2032196/optax-0.1.7-py3-none-any.whl (154 kB)\n\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m154.1/154.1 kB\u001b[0m \u001b[31m3.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0ma \u001b[36m0:00:01\u001b[0m\n\u001b[?25hCollecting jaxopt>=0.8.0\n Downloading https://pypi.tuna.tsinghua.edu.cn/packages/4d/a2/46c5f5cf6808bd9b316a022497c7e76e9106360aec3522fde562224a8b9d/jaxopt-0.8.1-py3-none-any.whl (169 kB)\n\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m169.7/169.7 kB\u001b[0m \u001b[31m3.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0ma \u001b[36m0:00:01\u001b[0m\n\u001b[?25hRequirement already satisfied: pymbar>=4.0.0 in /opt/mamba/lib/python3.10/site-packages (from dmff==0.2.1.dev306+geaba9a4) (4.0.1)\nRequirement already satisfied: tqdm in /opt/mamba/lib/python3.10/site-packages (from dmff==0.2.1.dev306+geaba9a4) (4.64.1)\nRequirement already satisfied: scipy>=1.0.0 in /opt/mamba/lib/python3.10/site-packages (from jaxopt>=0.8.0->dmff==0.2.1.dev306+geaba9a4) (1.9.3)\nRequirement already satisfied: jax>=0.2.18 in /opt/mamba/lib/python3.10/site-packages (from jaxopt>=0.8.0->dmff==0.2.1.dev306+geaba9a4) (0.3.17)\nRequirement already satisfied: jaxlib>=0.1.69 in /opt/mamba/lib/python3.10/site-packages (from jaxopt>=0.8.0->dmff==0.2.1.dev306+geaba9a4) (0.3.15+cuda11.cudnn82)\nRequirement already satisfied: chex>=0.1.5 in /opt/mamba/lib/python3.10/site-packages (from optax>=0.1.4->dmff==0.2.1.dev306+geaba9a4) (0.1.5)\nRequirement already satisfied: absl-py>=0.7.1 in /opt/mamba/lib/python3.10/site-packages (from optax>=0.1.4->dmff==0.2.1.dev306+geaba9a4) (1.3.0)\nRequirement already satisfied: numexpr in /opt/mamba/lib/python3.10/site-packages (from pymbar>=4.0.0->dmff==0.2.1.dev306+geaba9a4) (2.8.4)\nRequirement already satisfied: rowan>=1.2.1 in /opt/mamba/lib/python3.10/site-packages/rowan-1.3.0.post1-py3.10.egg (from freud-analysis->dmff==0.2.1.dev306+geaba9a4) (1.3.0.post1)\nRequirement already satisfied: toolz>=0.9.0 in /opt/mamba/lib/python3.10/site-packages (from chex>=0.1.5->optax>=0.1.4->dmff==0.2.1.dev306+geaba9a4) (0.12.0)\nRequirement already satisfied: dm-tree>=0.1.5 in /opt/mamba/lib/python3.10/site-packages (from chex>=0.1.5->optax>=0.1.4->dmff==0.2.1.dev306+geaba9a4) (0.1.7)\nRequirement already satisfied: etils[epath] in /opt/mamba/lib/python3.10/site-packages (from jax>=0.2.18->jaxopt>=0.8.0->dmff==0.2.1.dev306+geaba9a4) (0.9.0)\nRequirement already satisfied: typing-extensions in /opt/mamba/lib/python3.10/site-packages (from jax>=0.2.18->jaxopt>=0.8.0->dmff==0.2.1.dev306+geaba9a4) (4.4.0)\nRequirement already satisfied: opt-einsum in /opt/mamba/lib/python3.10/site-packages (from jax>=0.2.18->jaxopt>=0.8.0->dmff==0.2.1.dev306+geaba9a4) (3.3.0)\nRequirement already satisfied: zipp in /opt/mamba/lib/python3.10/site-packages (from etils[epath]->jax>=0.2.18->jaxopt>=0.8.0->dmff==0.2.1.dev306+geaba9a4) (3.10.0)\nRequirement already satisfied: importlib_resources in /opt/mamba/lib/python3.10/site-packages (from etils[epath]->jax>=0.2.18->jaxopt>=0.8.0->dmff==0.2.1.dev306+geaba9a4) (5.10.0)\nBuilding wheels for collected packages: dmff\n Building wheel for dmff (setup.py) ... \u001b[?25ldone\n\u001b[?25h Created wheel for dmff: filename=dmff-0.2.1.dev306+geaba9a4-py3-none-any.whl size=122980 sha256=92f4a1caf2d4709325963c07231c0589b031244315b53c5a034f0ce9336d9a16\n Stored in directory: /tmp/pip-ephem-wheel-cache-wzaeoh64/wheels/f3/08/c8/63a66e9272163ceeb3675eda2e65e58a3e3c8a96296799182d\nSuccessfully built dmff\nInstalling collected packages: networkx, jaxopt, optax, dmff\n Attempting uninstall: optax\n Found existing installation: optax 0.1.3\n Uninstalling optax-0.1.3:\n Successfully uninstalled optax-0.1.3\n Attempting uninstall: dmff\n Found existing installation: dmff 0.2.1.dev128+g7e83028\n Uninstalling dmff-0.2.1.dev128+g7e83028:\n Successfully uninstalled dmff-0.2.1.dev128+g7e83028\nSuccessfully installed dmff-0.2.1.dev306+geaba9a4 jaxopt-0.8.1 networkx-3.2.1 optax-0.1.7\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"}],"id":"3575eb67-60da-446b-8bcf-5f0ee1d51fbd"},{"cell_type":"code","source":"# CPU version\n! pip install jax==0.4.14\n# GPU version\n! pip install optax==0.1.3 pymbar==4.0.1 jaxopt==0.8.1\n! mamba install openmm=7.7.0 rdkit -c conda-forge -y","metadata":{},"execution_count":1,"outputs":[{"name":"stdout","output_type":"stream","text":"Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple\nRequirement already satisfied: jax==0.4.14 in /opt/mamba/lib/python3.10/site-packages (0.4.14)\nRequirement already satisfied: opt-einsum in /opt/mamba/lib/python3.10/site-packages (from jax==0.4.14) (3.3.0)\nRequirement already satisfied: numpy>=1.22 in /opt/mamba/lib/python3.10/site-packages (from jax==0.4.14) (1.23.4)\nRequirement already satisfied: ml-dtypes>=0.2.0 in /opt/mamba/lib/python3.10/site-packages (from jax==0.4.14) (0.3.1)\nRequirement already satisfied: scipy>=1.7 in /opt/mamba/lib/python3.10/site-packages (from jax==0.4.14) (1.9.3)\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[0mLooking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple\nRequirement already satisfied: optax==0.1.3 in /opt/mamba/lib/python3.10/site-packages (0.1.3)\nRequirement already satisfied: pymbar==4.0.1 in /opt/mamba/lib/python3.10/site-packages (4.0.1)\nRequirement already satisfied: jaxopt==0.8.1 in /opt/mamba/lib/python3.10/site-packages (0.8.1)\nRequirement already satisfied: jax>=0.1.55 in /opt/mamba/lib/python3.10/site-packages (from optax==0.1.3) (0.4.14)\nRequirement already satisfied: typing-extensions>=3.10.0 in /opt/mamba/lib/python3.10/site-packages (from optax==0.1.3) (4.8.0)\nRequirement already satisfied: jaxlib>=0.1.37 in /opt/mamba/lib/python3.10/site-packages (from optax==0.1.3) (0.4.11)\nRequirement already satisfied: chex>=0.0.4 in /opt/mamba/lib/python3.10/site-packages (from optax==0.1.3) (0.1.5)\nRequirement already satisfied: absl-py>=0.7.1 in /opt/mamba/lib/python3.10/site-packages (from optax==0.1.3) (1.3.0)\nRequirement already satisfied: numpy>=1.18.0 in /opt/mamba/lib/python3.10/site-packages (from optax==0.1.3) (1.23.4)\nRequirement already satisfied: numexpr in /opt/mamba/lib/python3.10/site-packages (from pymbar==4.0.1) (2.8.4)\nRequirement already satisfied: scipy in /opt/mamba/lib/python3.10/site-packages (from pymbar==4.0.1) (1.9.3)\nRequirement already satisfied: dm-tree>=0.1.5 in /opt/mamba/lib/python3.10/site-packages (from chex>=0.0.4->optax==0.1.3) (0.1.7)\nRequirement already satisfied: toolz>=0.9.0 in /opt/mamba/lib/python3.10/site-packages (from chex>=0.0.4->optax==0.1.3) (0.12.0)\nRequirement already satisfied: opt-einsum in /opt/mamba/lib/python3.10/site-packages (from jax>=0.1.55->optax==0.1.3) (3.3.0)\nRequirement already satisfied: ml-dtypes>=0.2.0 in /opt/mamba/lib/python3.10/site-packages (from jax>=0.1.55->optax==0.1.3) (0.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[0mTraceback (most recent call last):\n File \"/opt/mamba/bin/mamba\", line 7, in \n from mamba.mamba import main\n File \"/opt/mamba/lib/python3.10/site-packages/mamba/mamba.py\", line 44, in \n import libmambapy as api\n File \"/opt/mamba/lib/python3.10/site-packages/libmambapy/__init__.py\", line 7, in \n raise e\n File \"/opt/mamba/lib/python3.10/site-packages/libmambapy/__init__.py\", line 4, in \n from libmambapy.bindings import * # noqa: F401,F403\nImportError: /opt/mamba/lib/python3.10/site-packages/libmambapy/../../../libmamba.so.2: undefined symbol: solver_ruleinfo2str, version SOLV_1.0\n"}],"id":"3f7f70e2-5fd5-4d4e-b178-58a4a3c053fe"},{"cell_type":"markdown","source":"In addition to DMFF, we also need to use JAX and OpenMM.\n- OpenMM: Manages the force field files and parameter data\n- JAX:framework of differentiation\n\nAt the same time, we will also use other libraries and trajectory analysis software such as mdtraj in the subsequent examples. Let's import them as well.","metadata":{},"id":"6758cdea-f98d-4749-8286-3b23d24adfc5"},{"cell_type":"code","source":"import os\nimport sys\nimport numpy as np\nimport jax\nimport jax.numpy as jnp\nfrom jax import value_and_grad, jit, vmap\nimport openmm as mm\nimport openmm.app as app\nimport openmm.unit as unit\nimport dmff\nfrom dmff import Hamiltonian, NeighborList\nfrom dmff.common import nblist\nfrom dmff.mbar import ReweightEstimator, MBAREstimator, SampleState, TargetState, Sample, OpenMMSampleState, buildTrajEnergyFunction\nfrom dmff.api.xmlio import XMLIO\nfrom dmff.api.paramset import ParamSet\nfrom dmff.generators.classical import LennardJonesGenerator\nfrom dmff.api.topology import DMFFTopology\nfrom dmff.operators.templatetype import TemplateATypeOperator\nfrom dmff.operators.templatevsite import TemplateVSiteOperator\nfrom dmff.api.vstools import insertVirtualSites, pickTheSame\nfrom dmff import NeighborListFreud\nimport pickle\nfrom pprint import pprint\nimport optax\nimport mdtraj as md\nimport xml.etree.ElementTree as ET\nfrom itertools import combinations\nimport matplotlib.pyplot as plt\nfrom tqdm import tqdm, trange","metadata":{},"execution_count":2,"outputs":[{"ename":"AttributeError","evalue":"module 'ml_dtypes' has no attribute 'float8_e4m3b11'","output_type":"error","traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)","Cell \u001b[0;32mIn [2], line 4\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01msys\u001b[39;00m\n\u001b[1;32m 3\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mnumpy\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mnp\u001b[39;00m\n\u001b[0;32m----> 4\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mjax\u001b[39;00m\n\u001b[1;32m 5\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mjax\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mnumpy\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mjnp\u001b[39;00m\n\u001b[1;32m 6\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mjax\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m value_and_grad, jit, vmap\n","File \u001b[0;32m/opt/mamba/lib/python3.10/site-packages/jax/__init__.py:35\u001b[0m\n\u001b[1;32m 30\u001b[0m \u001b[38;5;28;01mdel\u001b[39;00m _cloud_tpu_init\n\u001b[1;32m 32\u001b[0m \u001b[38;5;66;03m# Confusingly there are two things named \"config\": the module and the class.\u001b[39;00m\n\u001b[1;32m 33\u001b[0m \u001b[38;5;66;03m# We want the exported object to be the class, so we first import the module\u001b[39;00m\n\u001b[1;32m 34\u001b[0m \u001b[38;5;66;03m# to make sure a later import doesn't overwrite the class.\u001b[39;00m\n\u001b[0;32m---> 35\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mjax\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m config \u001b[38;5;28;01mas\u001b[39;00m _config_module\n\u001b[1;32m 36\u001b[0m \u001b[38;5;28;01mdel\u001b[39;00m _config_module\n\u001b[1;32m 38\u001b[0m \u001b[38;5;66;03m# Force early import, allowing use of `jax.core` after importing `jax`.\u001b[39;00m\n","File \u001b[0;32m/opt/mamba/lib/python3.10/site-packages/jax/config.py:17\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;66;03m# Copyright 2018 The JAX Authors.\u001b[39;00m\n\u001b[1;32m 2\u001b[0m \u001b[38;5;66;03m#\u001b[39;00m\n\u001b[1;32m 3\u001b[0m \u001b[38;5;66;03m# Licensed under the Apache License, Version 2.0 (the \"License\");\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 14\u001b[0m \n\u001b[1;32m 15\u001b[0m \u001b[38;5;66;03m# TODO(phawkins): fix users of this alias and delete this file.\u001b[39;00m\n\u001b[0;32m---> 17\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mjax\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_src\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mconfig\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m config \u001b[38;5;66;03m# noqa: F401\u001b[39;00m\n","File \u001b[0;32m/opt/mamba/lib/python3.10/site-packages/jax/_src/config.py:27\u001b[0m\n\u001b[1;32m 24\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mthreading\u001b[39;00m\n\u001b[1;32m 25\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mtyping\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m Any, Callable, Generic, NamedTuple, Optional, TypeVar\n\u001b[0;32m---> 27\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mjax\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_src\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m lib\n\u001b[1;32m 28\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mjax\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_src\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mlib\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m jax_jit\n\u001b[1;32m 29\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mjax\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_src\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mlib\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m transfer_guard_lib\n","File \u001b[0;32m/opt/mamba/lib/python3.10/site-packages/jax/_src/lib/__init__.py:87\u001b[0m\n\u001b[1;32m 84\u001b[0m cpu_feature_guard\u001b[38;5;241m.\u001b[39mcheck_cpu_features()\n\u001b[1;32m 86\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mjaxlib\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mutils\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mutils\u001b[39;00m\n\u001b[0;32m---> 87\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mjaxlib\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mxla_client\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mxla_client\u001b[39;00m\n\u001b[1;32m 88\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mjaxlib\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mlapack\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mlapack\u001b[39;00m\n\u001b[1;32m 90\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mjaxlib\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mducc_fft\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mducc_fft\u001b[39;00m\n","File \u001b[0;32m/opt/mamba/lib/python3.10/site-packages/jaxlib/xla_client.py:225\u001b[0m\n\u001b[1;32m 223\u001b[0m bfloat16 \u001b[38;5;241m=\u001b[39m ml_dtypes\u001b[38;5;241m.\u001b[39mbfloat16\n\u001b[1;32m 224\u001b[0m float8_e4m3fn \u001b[38;5;241m=\u001b[39m ml_dtypes\u001b[38;5;241m.\u001b[39mfloat8_e4m3fn\n\u001b[0;32m--> 225\u001b[0m float8_e4m3b11fnuz \u001b[38;5;241m=\u001b[39m \u001b[43mml_dtypes\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfloat8_e4m3b11\u001b[49m\n\u001b[1;32m 226\u001b[0m float8_e5m2 \u001b[38;5;241m=\u001b[39m ml_dtypes\u001b[38;5;241m.\u001b[39mfloat8_e5m2\n\u001b[1;32m 228\u001b[0m XLA_ELEMENT_TYPE_TO_DTYPE \u001b[38;5;241m=\u001b[39m {\n\u001b[1;32m 229\u001b[0m PrimitiveType\u001b[38;5;241m.\u001b[39mPRED: np\u001b[38;5;241m.\u001b[39mdtype(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mbool\u001b[39m\u001b[38;5;124m'\u001b[39m),\n\u001b[1;32m 230\u001b[0m PrimitiveType\u001b[38;5;241m.\u001b[39mS8: np\u001b[38;5;241m.\u001b[39mdtype(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mint8\u001b[39m\u001b[38;5;124m'\u001b[39m),\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 248\u001b[0m PrimitiveType\u001b[38;5;241m.\u001b[39mTOKEN: np\u001b[38;5;241m.\u001b[39mdtype(np\u001b[38;5;241m.\u001b[39mobject_),\n\u001b[1;32m 249\u001b[0m }\n","\u001b[0;31mAttributeError\u001b[0m: module 'ml_dtypes' has no attribute 'float8_e4m3b11'"]}],"id":"aab99ecb-ffd3-4633-8b95-a12a7dc95bc2"},{"cell_type":"markdown","source":"Navigate to the working directory","metadata":{},"id":"a89fa3f5-2dc8-4c4e-ab8b-1ffca85e3c72"},{"cell_type":"code","source":"import os\nos.chdir(os.path.join(\"DMFF\",\"examples\", \"classical\"))","metadata":{},"execution_count":3,"outputs":[],"id":"7d8f746b-1176-4cf3-a302-ba637e69efbf"},{"cell_type":"markdown","source":"### 1.1 Load existing force field parameters and topology | OpenMM Frontend \n\nIf you are using a force field in OpenMM, you can load the force field parameters using the `ForceField` class, like:\n```python\napp.Topology.loadBondDefinitions(\"lig-top.xml\")\npdb = app.PDBFile('lig.pdb')\npdb_system = pdb.topology\n\nforcefield = ForceField('someforcefield.xml')\n```\n\nIn DMFF, there is a functionality class called `Hamiltonian` that is similar to OpenMM's `ForceField` class. It allows you to read force field parameters and define a more generalized system potential energy function. At the same time, it is compatible with reading existing force field parameters.\n\n- We can use OpenMM to read PDB and topology files:\n - topology(`log-top.xml`)\n - PDB(`lig.pdb`)\n- Load the force field parameters using DMFF's Hamiltonian class and create a differentiable potential energy function:\n - GAFF force field file (`gaff-2.11.xml`)\n - Additional parameters for the corresponding molecule (assigned charges) (`lig-prm.xml`)\n \nThe DMFF potential function, apart from the name \"Hamiltonian,\" is used in a similar way to OpenMM. The XML files of OpenMM force fields can also be directly reused.","metadata":{},"id":"2143158a-3914-4023-ac83-72901975d82a"},{"cell_type":"code","source":"app.Topology.loadBondDefinitions(\"lig-top.xml\")\npdb = app.PDBFile(\"lig.pdb\")\nff = Hamiltonian(\"gaff-2.11.xml\", \"lig-prm.xml\")\npotentials = ff.createPotential(pdb.topology)","metadata":{},"execution_count":3,"outputs":[],"id":"5e8c689e-d13f-47cd-99fd-c5f60c49614b"},{"cell_type":"markdown","source":"In DMFF, the parameters and calculations of the potential function are managed by JAX. For example, the DMFF potential function includes the re-implemented HarmonicBondForce, HarmonicAngleForce, PeriodicTorsionForce, and NonbondedForce. The parameters in DMFF are JAX-wrapped Array objects. For example, if we define:\n```python\njnp.array([1.])\n```\nYou will obtain a `DeviceArray` type. This type has a similar interface to numpy.ndarray(), as both are high-performance arrays/matrices. However, unlike numpy, JAX's jax.numpy.array() can be extended to work with GPUs/TPUs, making it suitable for efficient automatic differentiation.","metadata":{},"id":"087c7d7e-499d-480b-b7e2-683634330a11"},{"cell_type":"code","source":"for k in potentials.dmff_potentials.keys():\n pot = potentials.dmff_potentials[k]\n print(k, pot)\n\nparams = ff.getParameters()\n# print(params.keys()) # GAFF2有四种 Force,'NonbondedForce', 'HarmonicBondForce', 'HarmonicAngleForce', 'PeriodicTorsionForce'\nnbparam = params['NonbondedForce']\nfor k,v in nbparam.items():\n print(k, type(v), v if v.shape[0]<10 else f\"shape: {v.shape}\")","metadata":{},"execution_count":4,"outputs":[{"name":"stdout","output_type":"stream","text":"HarmonicBondForce .potential_fn at 0x7f4e401437f0>\nHarmonicAngleForce .potential_fn at 0x7f4e40143be0>\nPeriodicTorsionForce .potential_fn at 0x7f4dfc538280>\nNonbondedForce .potential_fn at 0x7f4dfc538e50>\nsigma shape: (97,)\nepsilon shape: (97,)\n"}],"id":"6546efbf-6c0b-4790-9b4a-aa136cfb3f2d"},{"cell_type":"code","source":"potentials.meta[\"cov_map\"]","metadata":{},"execution_count":5,"outputs":[{"execution_count":5,"output_type":"execute_result","data":{"text/plain":"DeviceArray([[0, 1, 2, ..., 0, 0, 2],\n [1, 0, 1, ..., 0, 0, 3],\n [2, 1, 0, ..., 0, 0, 4],\n ...,\n [0, 0, 0, ..., 0, 2, 0],\n [0, 0, 0, ..., 2, 0, 0],\n [2, 3, 4, ..., 0, 0, 0]], dtype=int64)"},"metadata":{}}],"id":"7f6bf26c-0d91-4b00-8c1a-3cb8498041f9"},{"cell_type":"markdown","source":"### 1.2 Calculation | JAX Differentiable Backend \nIn the calculation of the defined potential functions, we require the following parameters:\n\n- **coordinates**: just use the coordinates in PDB file\n\n- **box**: We need to add the definition of the box since our PDB file does not contain this information. However, it is worth mentioning that if we use **None** for the box size, we can still obtain results because our system does not involve periodic boundaries.\n\n- **pairs**: The GAFF2 potential function requires the input of **NeighborList** to calculate nonbonded forces. Therefore, we can use the NeighborList class to obtain the pairs for the energy calculation.\n\nThen, we can pass these to the `get_energy` function, which is generated by the `generator` from the parsed XML force field parameters in **potentials.dmff_potentials**. For example, we can calculate the energy associated with the `NonbondedForce` interactions as follows:","metadata":{},"id":"3895de0e-010d-4125-bdc3-fbf53850cd83"},{"cell_type":"code","source":"positions = jnp.array(pdb.getPositions(asNumpy=True).value_in_unit(unit.nanometer))\n\nbox = jnp.array([\n [10.0, 0.0, 0.0],\n [ 0.0, 10.0, 0.0],\n [ 0.0, 0.0, 10.0]\n])\n# box=None # 使用这个也可以\n\nnbList = NeighborList(box, 4, potentials.meta[\"cov_map\"])\nnbList.allocate(positions)\npairs = nbList.pairs\n\n# pairs的格式是[原子索引1, 原子索引2, nbond],nbond为0表示没有bond\n# print(pairs)\n\nnbfunc = potentials.dmff_potentials['NonbondedForce']\n\n# 可以用 inspect 看看,`nbfunc`是一个【函数】,而inspect.signature()方法会告诉我们这个函数的输入参数有哪些\n# \n# import inspect\n# print(inspect.signature(nbfunc))\n\nnbene = nbfunc(positions, box, pairs, params)\nprint(nbene)","metadata":{},"execution_count":6,"outputs":[{"name":"stdout","output_type":"stream","text":"-425.4047017461835\n"}],"id":"f81744a2-085e-4dae-9a0b-64e1dee88d70"},{"cell_type":"markdown","source":"For the system we defined above, the total energy can be calculated as follows:\n\n$$E_{\\rm{total}}^{\\rm{GAFF2}}=E_{\\rm{bond}}+E_{\\rm{angle}}+E_{\\rm{torsion}}+E_{\\rm{nonbond}}$$\n\nTo calculate the total energy using the previously defined potential, you can use the `getPotentialFunc()` method, which will return the function for calculating the total energy.","metadata":{},"id":"7cd6a691-42b0-4800-a89a-49f29b479221"},{"cell_type":"code","source":"efunc = potentials.getPotentialFunc()\nparams = ff.getParameters()\ntotene = efunc(positions, box, pairs, params)\nprint(totene)","metadata":{},"execution_count":7,"outputs":[{"name":"stdout","output_type":"stream","text":"-52.35775535703641\n"}],"id":"fc12600d-1e31-4405-83f3-d0d2270e0c03"},{"cell_type":"markdown","source":"So far, the methods we have used to calculate the system energy are similar to those in OpenMM.\n\nThe main advantage of using JAX as a computational backend is that we can use the `jax.grad` function to obtain the gradients of a function. Its syntax is `jax.grad(func, argnums)`, where it calculates the (partial) derivatives of the function with respect to the **argument** specified by argnums.\n\nThe interface of the total energy calculation function efunc that we obtained is [coordinates, box, bond pairs, force field parameters]. ","metadata":{},"id":"72329b6d-66c5-433f-bff5-d7bea991a91f"},{"cell_type":"code","source":"# you can use inspect.signature to view the function interface signature\n# import inspect\n# print(inspect.signature(efunc))","metadata":{},"execution_count":8,"outputs":[],"id":"ce0b6451-1956-49da-bff3-7ab18389a943"},{"cell_type":"markdown","source":"By applying the \"differentiation of the function\" operation, specifically taking the partial derivatives of the total energy with respect to the coordinates, we can compute the partial derivatives of the total energy with respect to the coordinates. These derivatives can then be used to calculate the forces acting on the atoms in the molecule.\n\n$$\\frac{\\partial{E_{\\rm{total}}}}{\\partial{\\mathbf{Z_i}}}=-\\mathbf{F_i}, \\ i=x,y,z$$","metadata":{},"id":"0ae128d7-3d1a-47ce-8d78-b35cd856b144"},{"cell_type":"code","source":"pos_grad_func = jax.grad(efunc, argnums=0)\nforce = -pos_grad_func(positions, box, pairs, params)\nprint(force)","metadata":{},"execution_count":9,"outputs":[{"name":"stdout","output_type":"stream","text":"[[ 803.52957747 3400.29774026 -661.96213523]\n [ 1150.36392033 -2973.80535655 4723.1401719 ]\n [-1806.30563334 -1691.22853598 -4400.66468133]\n [-1975.18818512 -3796.76170845 -2135.01995789]\n [ 300.94474783 -2505.35668706 1973.24600965]\n [ 1417.86850059 4929.0136063 690.09213683]\n [-1214.69075969 -752.04890746 -728.64363448]\n [ 506.19084362 -1762.15983054 -183.44743699]\n [ 666.47812556 -96.44574992 1381.96013269]\n [-1764.39328602 -1823.64962431 -1339.25100614]\n [ 716.92780964 2224.67413422 -611.09476826]\n [ -668.08596611 -2633.60075168 -45.50003995]\n [ 525.3188336 1892.76410092 -324.60902175]\n [ -222.93562587 -1252.5822138 1038.35399886]\n [ 1050.2831757 1406.00072105 859.35930808]\n [ -149.99815788 -816.80260414 -112.40342883]\n [-2460.68641394 1360.33433118 -797.03282339]\n [-1690.67958659 -4545.06401473 67.80091833]\n [ 2421.74312888 2531.32994259 411.40292148]\n [-1881.71637547 2700.43869309 -938.8271789 ]\n [ 2230.84228769 -2105.44762878 996.80519838]\n [ 2820.17595634 3725.34103792 531.68421385]\n [ 1008.60327391 -1133.9584703 -123.14349352]\n [ -276.50743719 160.26940872 -402.33483739]\n [ 119.18246059 482.13137215 -187.78600837]\n [ 350.39374172 -1206.41303817 97.6235938 ]\n [ -646.06449223 625.31531552 662.35075182]\n [ -848.36122598 793.56182029 -1179.70627373]\n [ -110.52131871 -297.51678589 1608.69051833]\n [ 907.24924949 -712.65640858 -804.73153243]\n [ -23.81344251 -403.63449895 221.90382764]\n [ -974.84347195 1265.96450714 34.97803045]\n [ 1254.77065898 408.1267468 160.6793413 ]\n [ -523.41026695 797.07980959 -1009.97526506]\n [ 384.26997895 -426.25633961 378.53995254]\n [ -935.39210743 511.55922005 -1090.50523632]\n [ -150.10284632 -666.4265588 1039.41296827]\n [ 397.37612952 -338.39787242 339.2815683 ]\n [ 414.71386197 479.49633356 767.07953947]\n [ 965.36948355 160.06498779 13.46682867]\n [ -527.06588314 650.7009065 441.7987455 ]\n [ 317.29196525 998.74765406 -60.58825503]\n [ -273.48532288 918.78223009 -523.6331768 ]\n [ 1251.03183781 930.39541048 445.93120648]\n [ -647.65431898 -1616.51320224 -86.54822059]\n [-1666.19786619 -537.25322843 -452.23497364]\n [ -638.9467378 -822.28086508 -414.43010717]\n [ 751.15184138 454.18755264 783.01090009]\n [ 428.44509773 -256.58883573 -690.36786701]\n [ -603.21827361 231.03790584 -406.60888759]\n [ -831.82950411 -148.26754971 -253.45934033]\n [ -156.60888744 425.77912229 815.50717525]\n [ -181.66985391 242.79408619 13.22389549]\n [ -527.76583611 -599.48002448 -484.46773728]\n [ -955.47257532 -160.50351122 388.18000331]\n [ -212.87534091 -710.95427149 291.92603185]\n [ 34.79793147 149.08675492 746.77258693]\n [ -35.16803002 -257.83600642 -725.78935376]\n [ -63.9175139 318.12674851 679.27357666]\n [ 737.52783774 43.30127308 -182.65304035]\n [ 723.9084714 492.98317644 -177.7631343 ]\n [ 326.54325749 -76.56914279 -903.24205277]\n [ 8.258139 342.50611657 700.35028221]\n [ 721.14445971 20.56613577 -288.54115124]\n [ -195.67178466 -755.86375714 93.28108171]\n [ 128.54774337 1809.56507834 -670.14135826]]\n"}],"id":"55a230f0-7d8c-4639-a430-6fabe07a5348"},{"cell_type":"markdown","source":"### 1.3 [Review] Basic interface and key usage points of DMFF \n\n### 1.3.1 Applications of DMFF:\n**Molecular Force Field Optimization Platform**\n- DMFF is compatible with OpenMM's XML format for molecular force field parameters\n- Automatic differentiation and GPU support enable fast implementation of complex molecular dynamics force fields in DMFF\n- **flexible force field parameter optimization capability of DMFF**:\n - Improving a specific component among them×\n - Complex parameter optimization√ Rapid implementation through automatic differentiation frameworks\n### 1.3.2 General Operations\n### Generating Potential Functions\n- Defining force parameters in an XML file (OpenMM interface)\n- Description of the system in PDB and topology in XML format\n----\n```py\npdb = app.PDBFile(\"lig.pdb\")\nff = Hamiltonian(\"gaff-2.11.xml\", \"lig-prm.xml\")\npotentials = ff.createPotential(pdb.topology)\n```\n----\n### Calculating System's Energy and Forces\n----\n```py\nefunc = potentials.getPotentialFunc()\nparams = ff.getParameters()\n\n# energy function\ntotene = efunc(positions, box, pairs, params)\nprint(totene)\n\n# 力\npos_grad_func = jax.grad(efunc, argnums=0)\nforce = -pos_grad_func(positions, box, pairs, params)\nprint(force)\n```\n----\n### 1.3.3 [More] Why do we need \"differentiable\" JAX: The first step towards infinite possibilities for new force fields.\n> Why JAX?\n\nHere we take the example of the implementation of the HarmonicBondForce in DMFF to build a simple model to illustrate what we can do with the JAX backend of DMFF.\n\nIn this part we will use some customized files (modifying these files might help you understand what the DMFF frontend does):\n\nwe an create a new file `dummy-prm.xml`\n\n-----\n```xml\n\n \n \n \n \n \n \n \n\n```\n-----\n\n`dummy-top.xml`:\n\n-----\n```xml\n\n \n \n \n\n```\n-----\n\n`dummy.pdb`:\n\n-----\n```pdb\nREMARK 1 CREATED WITH MANUAL\nHETATM 1 C1 DUM A 1 0.000 0.000 0.000 1.00 0.00 C \nHETATM 2 C2 DUM A 1 1.000 0.000 0.000 1.00 0.00 C \nTER 3 DUM A 1\nEND\n```\n-----\n\n\n> and `dummy.xml`:\n\n-----\n```xml\n\n \n \n \n \n \n \n\n```\n-----","metadata":{},"id":"805db12e-cb86-4b17-9ef9-e210f8b00134"},{"cell_type":"code","source":"# from dmff/classical/intra.py\nimport jax.numpy as jnp\nfrom jax import value_and_grad\nfrom dmff.classical.intra import distance\n'''\ndef distance(p1v, p2v):\n return jnp.sqrt(jnp.sum(jnp.power(p1v - p2v, 2), axis=1))\n\nclass HarmonicBondJaxForce:\n def __init__(self, p1idx, p2idx, prmidx):\n self.p1idx = p1idx\n self.p2idx = p2idx\n self.prmidx = prmidx\n self.refresh_calculators()\n\n def generate_get_energy(self):\n def get_energy(positions, box, pairs, k, length):\n p1 = positions[self.p1idx,:]\n p2 = positions[self.p2idx,:]\n kprm = k[self.prmidx]\n b0prm = length[self.prmidx]\n dist = distance(p1, p2)\n return jnp.sum(0.5 * kprm * jnp.power(dist - b0prm, 2))\n\n return get_energy\n\n def update_env(self, attr, val):\n \"\"\"\n Update the environment of the calculator\n \"\"\"\n setattr(self, attr, val)\n self.refresh_calculators()\n\n def refresh_calculators(self):\n \"\"\"\n refresh the energy and force calculators according to the current environment\n \"\"\"\n self.get_energy = self.generate_get_energy()\n self.get_forces = value_and_grad(self.get_energy)\n'''\nimport openmm.app as app\napp.Topology.loadBondDefinitions(\"dummy-top.xml\")\npdb = app.PDBFile('dummy.pdb')\nff = Hamiltonian(\"dummy.xml\",\"dummy-prm.xml\")\npotentials = ff.createPotential(pdb.topology)\nefunc = potentials.getPotentialFunc()\nparams = ff.getParameters()\ntotene = efunc(jnp.array([[0,0,0],[0.11,0,0]]), box=None, pairs=[[0,1,1]], prms=params)\nprint(\"dmff energy:\",totene)\npos_grad_func = jax.grad(efunc, argnums=0)\nforce = -pos_grad_func(jnp.array([[0,0,0],[0.11,0,0]]), box=None, pairs=[[0,1,1]], prms=params)\nprint(\"dmff force:\",force)\n\ndef get_energy(positions, box, pairs, k, length):\n p1 = positions[[0],:]\n p2 = positions[[1],:]\n kprm = k[0]\n b0prm = length[0]\n dist = distance(p1, p2)\n return jnp.sum(0.5 * kprm * jnp.power(dist - b0prm, 2))\n\npos = jnp.array([[0,0,0],[0.11,0,0]])\nbox = None\npairs = [[0,1,1]]\nk = [100]\nlength = [0.1]\n\nprint(\"func energy:\", get_energy(pos,box,pairs,k,length))\n\npos_grad_func = jax.grad(get_energy, argnums=0)\nprint(\"func force:\", -pos_grad_func(pos,box,pairs,k,length))\n\ndef get_rmse_force(pos,box,pairs,k,length):\n return jnp.sum(jnp.power(pos_grad_func(pos,box,pairs,k,length),2))\n\nparam_grad_func = jax.grad(get_rmse_force, argnums=4)\nprint(\"param grad:\", param_grad_func(pos,box,pairs,k,length))\nprint(\"param grad, optimized:\", param_grad_func(pos,box,pairs,k,[0.11]))","metadata":{},"execution_count":11,"outputs":[{"name":"stdout","output_type":"stream","text":"dmff energy: 0.004999999999999995\ndmff force: [[ 1. -0. -0.]\n [-1. -0. -0.]]\nfunc energy: 0.004999999999999995\nfunc force: [[ 1. -0. -0.]\n [-1. -0. -0.]]\nparam grad: [DeviceArray(-400., dtype=float64, weak_type=True)]\nparam grad, optimized: [DeviceArray(-0., dtype=float64, weak_type=True)]\n"}],"id":"0920c0dd-5fb1-4c2c-86cc-4b1186d6f17c"},{"cell_type":"markdown","source":"- By taking derivatives with respect to coordinates, we can perform molecular dynamics (MD) simulations.\n- By taking derivatives with respect to the box, we can perform NPT ensemble molecular dynamics (MD) simulations.\n- By taking derivatives with respect to the parameters, we will be able to optimize the parameters of our defined force field using techniques such as gradient descent.\n\n### 1.4 Code\n[https://gitee.com/deepmodeling/DMFF](https://gitee.com/deepmodeling/DMFF)\n[https://github.com/deepmodeling/DMFF](https://github.com/deepmodeling/DMFF) ","metadata":{},"id":"4fff2fe9-7bf8-4ad2-a02d-98a85a522ec6"},{"cell_type":"markdown","source":"## 2. Mutipolar polarizable force field with fluctuating charges \nThis case is primarily contributed by Professor Kuang Yu\n\nIn the following example, we show how to implement a **multipolar polarizable potential with fluctuating charges** with DMFF API.\n\nIn conventional models, atomic charges are pre-defined and remain unchanged during the simulation. Here, we want to implement a model that considers atomic charges as *conformer-dependent*, so that the charges can vary during a molecular dynamics simulation. This will give better description of the system's behavior.\n\n### System preparation\nLoad the coordinates, box of a water dimer system. The unit of the frontend API is **nanometer**.\n\nNavigate to the working directory","metadata":{"jp-MarkdownHeadingCollapsed":true},"id":"b3383627-ed6b-4cd2-9988-116151e9b4c5"},{"cell_type":"code","source":"current_directory = os.getcwd()\nparent_directory = os.path.dirname(current_directory)\nos.chdir(parent_directory)\nos.chdir(os.path.join(\"fluctuated_leading_term_waterff\"))\n\nfrom dmff.api import Hamiltonian\nfrom jax_md import space, partition\nfrom jax import value_and_grad, jit\nimport pickle\nfrom dmff.admp.pme import trim_val_0\nfrom dmff.admp.spatial import v_pbc_shift\nfrom dmff.common import nblist\nfrom dmff.utils import jit_condition\nfrom dmff.admp.pairwise import (\n TT_damping_qq_c6_kernel,\n generate_pairwise_interaction,\n slater_disp_damping_kernel,\n slater_sr_kernel,\n TT_damping_qq_kernel\n)\n\nrc = 0.4\npdb = app.PDBFile(\"water_dimer.pdb\")\n# construct inputs\npositions = jnp.array(pdb.positions._value)\na, b, c = pdb.topology.getPeriodicBoxVectors()\nbox = jnp.array([a._value, b._value, c._value])","metadata":{},"execution_count":4,"outputs":[],"id":"b48345d8-5abf-4379-8168-c07ec26f0d4b"},{"cell_type":"markdown","source":"### 2.1 Genearate auto-differentiable multipolar polarizable (ADMP) forces \nFirst, we will use the `dmff` to create a multipolar polarizable potential with **fixed** atomic charges.\n\nHere, we have two types of force: \n\n- Dispersion force\n- Multipolar polarizable PME force.\n\nWe will focus on the PME force.","metadata":{},"id":"b0835b43-9b05-44db-87b7-dbe42240f15f"},{"cell_type":"code","source":"H = Hamiltonian('forcefield.xml')\n# generator stores all force field parameters \npots = H.createPotential(pdb.topology, nonbondedCutoff=rc*unit.nanometer, step_pol=5)\npme_pot = pots.dmff_potentials['ADMPPmeForce']\ndisp_generator, pme_generator = H.getGenerators()","metadata":{},"execution_count":5,"outputs":[],"id":"39ea05df-2ae2-498b-a6ff-46ea745da82f"},{"cell_type":"markdown","source":"The function `pme_pot` takes the following actions:\n\n- Expand **force field parameters** (oxygen and hydrogen charges, polarizabilites, etc.) pre-defined in `forcefield.xml` to each atom, which we called **atomic parameters**\n- Calls the real PME kernel function to evaluate energy.\n\nThe force field parameters are stored in Hamiltonian `H`. And the expansion is implemented with the *broadcast* feature of `jax.numpy.ndarray`. The expansion can be done using the variable `map_atomtype`, which maps each atom to the corrsponding atomtype.","metadata":{},"id":"168f3bf8-37dd-4137-a45c-036f5983c8ac"},{"cell_type":"code","source":"params = H.getParameters()['ADMPPmeForce']\nmap_atomtype = pots.meta[\"ADMPPmeForce_map_atomtype\"]\nparams['Q_local'][map_atomtype]","metadata":{},"execution_count":6,"outputs":[{"execution_count":6,"output_type":"execute_result","data":{"text/plain":"DeviceArray([[-0.803721 , -0.0784325 , 0. , 0. ,\n 0.00459693, 0. , 0. , 0.12960503,\n 0. ],\n [ 0.401876 , -0.0095895 , -0.0121713 , 0. ,\n 0.00812139, 0.00436148, 0. , 0.00701541,\n 0. ],\n [ 0.401876 , -0.0095895 , -0.0121713 , 0. ,\n 0.00812139, 0.00436148, 0. , 0.00701541,\n 0. ],\n [-0.803721 , -0.0784325 , 0. , 0. ,\n 0.00459693, 0. , 0. , 0.12960503,\n 0. ],\n [ 0.401876 , -0.0095895 , -0.0121713 , 0. ,\n 0.00812139, 0.00436148, 0. , 0.00701541,\n 0. ],\n [ 0.401876 , -0.0095895 , -0.0121713 , 0. ,\n 0.00812139, 0.00436148, 0. , 0.00701541,\n 0. ]], dtype=float64)"},"metadata":{}}],"id":"d0e6e127-c530-4509-b0a3-7fee93d2b36b"},{"cell_type":"markdown","source":"### 2.2 Implement fluctuating charges \nSince this expansion process is done internally within `pme_pot`, it is **not flexible** enough for us to specify atom-specific charges, i.e. **fluctuating charges**. \n\nAs a result, we must re-write `pme_pot` to enable modifying the atomic charges after force field parameter expansion. \n\nBenifiting from the flexible APIs in DMFF, we will reuse most of the functions and variables in the `pme_generator`, only modify charges in the input parameters, i.e. the `Q_local` argument in `pme_generator.pme_force.get_energy` function. One particular thing to be careful is that all ADMP backend functions assumes the inputs (`positions` and `box`) are in Angstrom, instead of nm!","metadata":{},"id":"964c81b1-7dde-473a-95e6-ea6dccdb8cf4"},{"cell_type":"code","source":"from dmff.utils import jit_condition\nfrom dmff.admp.pme import trim_val_0\nfrom dmff.admp.spatial import v_pbc_shift\n\n\n@jit_condition(static_argnums=())\ndef compute_leading_terms(positions, box):\n n_atoms = len(positions)\n c0 = jnp.zeros(n_atoms)\n c6_list = jnp.zeros(n_atoms)\n box_inv = jnp.linalg.inv(box)\n O = positions[::3]\n H1 = positions[1::3]\n H2 = positions[2::3]\n ROH1 = H1 - O\n ROH2 = H2 - O\n ROH1 = v_pbc_shift(ROH1, box, box_inv)\n ROH2 = v_pbc_shift(ROH2, box, box_inv)\n dROH1 = jnp.linalg.norm(ROH1, axis=1)\n dROH2 = jnp.linalg.norm(ROH2, axis=1)\n costh = jnp.sum(ROH1 * ROH2, axis=1) / (dROH1 * dROH2)\n angle = jnp.arccos(costh) * 180 / jnp.pi\n dipole = -0.016858755 + 0.002287251 * angle + 0.239667591 * dROH1 + (-0.070483437) * dROH2\n charge_H = dipole / dROH1\n charge_O = charge_H * (-2)\n C6_H = (-2.36066199 + (-0.007049238) * angle + 1.949429648 * dROH1+ 2.097120784 * dROH2) * 0.529**6 * 2625.5\n C6_O = (-8.641301261 + 0.093247893 * angle + 11.90395358 * (dROH1+ dROH2)) * 0.529**6 * 2625.5\n C6_H = trim_val_0(C6_H)\n c0 = c0.at[::3].set(charge_O)\n c0 = c0.at[1::3].set(charge_H)\n c0 = c0.at[2::3].set(charge_H)\n c6_list = c6_list.at[::3].set(jnp.sqrt(C6_O))\n c6_list = c6_list.at[1::3].set(jnp.sqrt(C6_H))\n c6_list = c6_list.at[2::3].set(jnp.sqrt(C6_H))\n return c0, c6_list\n\n\ndef generate_calculator(pots, pme_generator, params):\n map_atomtype = pots.meta[\"ADMPPmeForce_map_atomtype\"]\n map_poltype = pots.meta[\"ADMPPmeForce_map_poltype\"]\n def admp_calculator(positions, box, pairs):\n positions = positions * 10 # convert from nm to angstrom\n box = box * 10\n c0, c6_list = compute_leading_terms(positions, box) # compute fluctuated charges\n Q_local = params[\"Q_local\"][map_atomtype]\n Q_local = Q_local.at[:,0].set(c0) # change fixed charge into fluctuated one\n pol = params[\"pol\"][map_poltype]\n tholes = params[\"thole\"][map_poltype]\n mScales = pme_generator.mScales\n pScales = pme_generator.pScales\n dScales = pme_generator.dScales\n E_pme = pme_generator.pme_force.get_energy(\n positions, \n box, \n pairs, \n Q_local, \n pol, \n tholes, \n mScales, \n pScales, \n dScales\n )\n return E_pme \n return jax.jit(admp_calculator)","metadata":{},"execution_count":7,"outputs":[],"id":"c85107f6-0063-46de-8905-e26591f2c7c5"},{"cell_type":"markdown","source":"**Finally, compute the energy and force!**","metadata":{},"id":"ba9f7c49-f139-49d1-8dad-c83b409895e2"},{"cell_type":"code","source":"# neighbor list\nnbl = nblist.NeighborList(box, rc, pots.meta[\"cov_map\"])\nnbl.allocate(positions)\npairs = nbl.pairs\n\npotential_fn = generate_calculator(pots, pme_generator, params)\nene = potential_fn(positions, box, pairs)\nprint(ene)","metadata":{},"execution_count":8,"outputs":[{"name":"stdout","output_type":"stream","text":"-41.261709056188494\n"}],"id":"8ef82930-52ad-4a3a-853d-d05e34268616"},{"cell_type":"code","source":"force_fn = jax.grad(potential_fn, argnums=(0))\nforce = -force_fn(positions, box, pairs)\nprint(force)","metadata":{},"execution_count":9,"outputs":[{"name":"stdout","output_type":"stream","text":"[[ -76.31268719 117.49783627 -79.89266772]\n [ 751.2499921 -582.24588471 -251.82070224]\n [ -18.97483886 -49.68783375 146.28345763]\n [-675.35013452 382.30839617 204.50616711]\n [ -25.65479533 -52.55337869 41.92507785]\n [ 45.04246381 184.68086471 -61.00133263]]\n"}],"id":"da83ef43-70a4-4a5e-9437-2bff7fdd2b50"},{"cell_type":"markdown","source":"The running speed of the first pass is slow because JAX is trying to track the data flow and compile the code. Once the code is compiled, it runs much faster, until the shapes of the input parameters change, trigerring a recompilation. ","metadata":{},"id":"8dfc4b83-c290-4fc6-b37c-e265249290df"},{"cell_type":"code","source":"print(-force_fn(positions, box, pairs))","metadata":{},"execution_count":10,"outputs":[{"name":"stdout","output_type":"stream","text":"[[ -76.31268719 117.49783627 -79.89266772]\n [ 751.2499921 -582.24588471 -251.82070224]\n [ -18.97483886 -49.68783375 146.28345763]\n [-675.35013452 382.30839617 204.50616711]\n [ -25.65479533 -52.55337869 41.92507785]\n [ 45.04246381 184.68086471 -61.00133263]]\n"}],"id":"3340e66b-4d53-4a97-a1ae-afe6b2cdaeba"},{"cell_type":"markdown","source":"## 3. Bottom-Up Fitting \nThis case is primarily contributed by Junmin Chen\n\nIn this case, we will demonstrate how to use DMFF in a bottom-up fitting approach.\n\nNavigate to the working directory","metadata":{"jp-MarkdownHeadingCollapsed":true},"id":"37315f53-ed4c-4c46-97de-2a4c931ed9c0"},{"cell_type":"code","source":"current_directory = os.getcwd()\nparent_directory = os.path.dirname(current_directory)\nos.chdir(parent_directory)\nos.chdir(os.path.join(\"peg_slater_isa\"))","metadata":{},"execution_count":104,"outputs":[],"id":"0281ede7-0764-484b-9f28-fbc16989e64a"},{"cell_type":"markdown","source":"### 3.1 Problem introduction: \nThe main objective of bottom-up fitting is energies and forces calculated from first-principle calculations. The definition of this object function is relatively straightforward. In this example, we will focus on fitting the Pauli Exchange interaction between two PEG dimers.\n\n![s](https://i.postimg.cc/3xs7wMwW/image.png)\n\nThe intermolecular exchange repulsion term for this system can be written in the following form:\n\n$$\n\\begin{align}\n\\begin{cases}\nE_{ex} & = \\sum_{i\nWe define the relevant `Hamiltonian` (we will define different Hamiltonians and potential functions for the dimer and the two monomers separately):","metadata":{},"id":"5af6e793-7557-4eb7-af31-a0c33021f965"},{"cell_type":"code","source":"restart = 'params.0.pickle' # None\n#restart = None\nff = 'forcefield.xml'\npdb_AB = app.PDBFile('peg2_dimer.pdb')\npdb_A = app.PDBFile('peg2.pdb')\npdb_B = app.PDBFile('peg2.pdb')\nparam_file = 'params.0.pickle'\nH_AB = Hamiltonian(ff)\nH_A = Hamiltonian(ff)\nH_B = Hamiltonian(ff)\npme_generator_AB, \\\n disp_generator_AB, \\\n ex_generator_AB, \\\n sr_es_generator_AB, \\\n sr_pol_generator_AB, \\\n sr_disp_generator_AB, \\\n dhf_generator_AB, \\\n dmp_es_generator_AB, \\\n dmp_disp_generator_AB = H_AB.getGenerators()\npme_generator_A, \\\n disp_generator_A, \\\n ex_generator_A, \\\n sr_es_generator_A, \\\n sr_pol_generator_A, \\\n sr_disp_generator_A, \\\n dhf_generator_A, \\\n dmp_es_generator_A, \\\n dmp_disp_generator_A = H_A.getGenerators()\npme_generator_B, \\\n disp_generator_B, \\\n ex_generator_B, \\\n sr_es_generator_B, \\\n sr_pol_generator_B, \\\n sr_disp_generator_B, \\\n dhf_generator_B, \\\n dmp_es_generator_B, \\\n dmp_disp_generator_B = H_B.getGenerators()","metadata":{},"execution_count":117,"outputs":[],"id":"403aad12-5cf0-4c08-b243-758a8bf15ce1"},{"cell_type":"markdown","source":"And obtain the corresponding potential functionss:","metadata":{},"id":"1682c9ce-7e95-48a0-866f-686865b27eb4"},{"cell_type":"code","source":"rc = 1.45\n\n# get potential functions\npots_AB = H_AB.createPotential(pdb_AB.topology, nonbondedCutoff=rc*unit.nanometer, nonbondedMethod=app.CutoffPeriodic, ethresh=1e-4)\npot_pme_AB = pots_AB.dmff_potentials['ADMPPmeForce']\npot_disp_AB = pots_AB.dmff_potentials['ADMPDispPmeForce']\npot_ex_AB = pots_AB.dmff_potentials['SlaterExForce']\npot_sr_es_AB = pots_AB.dmff_potentials['SlaterSrEsForce']\npot_sr_pol_AB = pots_AB.dmff_potentials['SlaterSrPolForce']\npot_sr_disp_AB = pots_AB.dmff_potentials['SlaterSrDispForce']\npot_dhf_AB = pots_AB.dmff_potentials['SlaterDhfForce']\npot_dmp_es_AB = pots_AB.dmff_potentials['QqTtDampingForce']\npot_dmp_disp_AB = pots_AB.dmff_potentials['SlaterDampingForce']\npots_A = H_A.createPotential(pdb_A.topology, nonbondedCutoff=rc*unit.nanometer, nonbondedMethod=app.CutoffPeriodic, ethresh=1e-4)\npot_pme_A = pots_A.dmff_potentials['ADMPPmeForce']\npot_disp_A = pots_A.dmff_potentials['ADMPDispPmeForce']\npot_ex_A = pots_A.dmff_potentials['SlaterExForce']\npot_sr_es_A = pots_A.dmff_potentials['SlaterSrEsForce']\npot_sr_pol_A = pots_A.dmff_potentials['SlaterSrPolForce']\npot_sr_disp_A = pots_A.dmff_potentials['SlaterSrDispForce']\npot_dhf_A = pots_A.dmff_potentials['SlaterDhfForce']\npot_dmp_es_A = pots_A.dmff_potentials['QqTtDampingForce']\npot_dmp_disp_A = pots_A.dmff_potentials['SlaterDampingForce']\npots_B = H_B.createPotential(pdb_B.topology, nonbondedCutoff=rc*unit.nanometer, nonbondedMethod=app.CutoffPeriodic, ethresh=1e-4)\npot_pme_B = pots_B.dmff_potentials['ADMPPmeForce']\npot_disp_B = pots_B.dmff_potentials['ADMPDispPmeForce']\npot_ex_B = pots_B.dmff_potentials['SlaterExForce']\npot_sr_es_B = pots_B.dmff_potentials['SlaterSrEsForce']\npot_sr_pol_B = pots_B.dmff_potentials['SlaterSrPolForce']\npot_sr_disp_B = pots_B.dmff_potentials['SlaterSrDispForce']\npot_dhf_B = pots_B.dmff_potentials['SlaterDhfForce']\npot_dmp_es_B = pots_B.dmff_potentials['QqTtDampingForce']\npot_dmp_disp_B = pots_B.dmff_potentials['SlaterDampingForce']","metadata":{},"execution_count":118,"outputs":[],"id":"b2d8efa0-c3bb-4150-9344-2322b7d304a0"},{"cell_type":"markdown","source":"Note that in `forcefield.xml`, there is a complete force field that contains many components. Here, we are only interested in the exchange part, so we extract the relevant potential function from it.\n\nIn the subsequent calculation of the loss function, we will process minibatches of structures as input.","metadata":{},"id":"ab0a9beb-536b-4b77-a0ec-051fcb7395d7"},{"cell_type":"markdown","source":"### 3.3 Preparing inputs for the potential function (such as neighbor lists, etc) \n\nNext, we prepare the inputs required for these potential functions, with the most important one, the neighbor list. For a simple system with only two molecules, we can set `rc` to a relatively large value to include all possible interactions. This way, we don't need to update the neighbor list due to structural changes, which will speed up the calculations.\n\nFirst, we obtain the initial structure and box size:","metadata":{},"id":"7a16932d-253a-424d-bb34-89872ed27975"},{"cell_type":"code","source":"# init positions used to set up neighbor list\npos_AB0 = jnp.array(pdb_AB.positions._value)\nn_atoms = len(pos_AB0)\nn_atoms_A = n_atoms // 2\nn_atoms_B = n_atoms // 2\npos_A0 = jnp.array(pdb_AB.positions._value[:n_atoms_A])\npos_B0 = jnp.array(pdb_AB.positions._value[n_atoms_A:n_atoms])\nbox = jnp.array(pdb_AB.topology.getPeriodicBoxVectors()._value)","metadata":{},"execution_count":119,"outputs":[],"id":"222e9182-ea9a-4d2b-9e2a-3fe970110a0a"},{"cell_type":"markdown","source":"Then, construct a list of all atom pairs using the initial structure:","metadata":{},"id":"dcc775f6-d09c-4633-b0c7-07cd5807f6bb"},{"cell_type":"code","source":"# nn list initial allocation\nnbl_AB = nblist.NeighborList(box, rc, pots_AB.meta[\"cov_map\"])\nnbl_AB.allocate(pos_AB0)\npairs_AB = nbl_AB.pairs\nnbl_A = nblist.NeighborList(box, rc, pots_A.meta[\"cov_map\"])\nnbl_A.allocate(pos_A0)\npairs_A = nbl_A.pairs\nnbl_B = nblist.NeighborList(box, rc, pots_B.meta[\"cov_map\"])\nnbl_B.allocate(pos_B0)\npairs_B = nbl_B.pairs\n\npairs_AB = pairs_AB[pairs_AB[:, 0] < pairs_AB[:, 1]]\npairs_A = pairs_A[pairs_A[:, 0] < pairs_A[:, 1]]\npairs_B = pairs_B[pairs_B[:, 0] < pairs_B[:, 1]]","metadata":{},"execution_count":120,"outputs":[],"id":"44f4e571-d3d9-4c59-9e2d-26d0dc41c331"},{"cell_type":"markdown","source":"Next, obtain the initial parameters as the starting point for optimization:","metadata":{},"id":"b51a57ee-9d11-4599-9d83-e99cc3f51436"},{"cell_type":"code","source":"params0 = H_AB.getParameters()","metadata":{},"execution_count":121,"outputs":[],"id":"28981b3f-7604-4028-b6b6-0aaea4a81cc5"},{"cell_type":"code","source":"# construct total force field params\ncomps = ['ex', 'es', 'pol', 'disp', 'dhf', 'tot']\nweights_comps = jnp.array([0.1, 0.1, 0.1, 0.1, 0.1, 1.0])\nif restart is None:\n params = {}\n sr_forces = {\n 'ex': 'SlaterExForce',\n 'es': 'SlaterSrEsForce',\n 'pol': 'SlaterSrPolForce',\n 'disp': 'SlaterSrDispForce',\n 'dhf': 'SlaterDhfForce',\n }\n for k in params0['ADMPPmeForce']:\n params[k] = params0['ADMPPmeForce'][k]\n for k in params0['ADMPDispPmeForce']:\n params[k] = params0['ADMPDispPmeForce'][k]\n for c in comps:\n if c == 'tot':\n continue\n force = sr_forces[c]\n for k in params0[sr_forces[c]]:\n if k == 'A':\n params['A_'+c] = params0[sr_forces[c]][k]\n else:\n params[k] = params0[sr_forces[c]][k]\n # a random initialization of A\n for c in comps:\n if c == 'tot':\n continue\n params['A_'+c] = jnp.array(np.random.random(params['A_'+c].shape))\n # specify charges for es damping\n params['Q'] = params0['QqTtDampingForce']['Q']\nelse:\n with open(restart, 'rb') as ifile:\n params = pickle.load(ifile)","metadata":{},"execution_count":122,"outputs":[{"ename":"ImportError","evalue":"cannot import name 'TracerBoolConversionError' from 'jax._src.errors' (/opt/mamba/lib/python3.10/site-packages/jax/_src/errors.py)","output_type":"error","traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mImportError\u001b[0m Traceback (most recent call last)","Cell \u001b[0;32mIn [122], line 35\u001b[0m\n\u001b[1;32m 33\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 34\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mopen\u001b[39m(restart, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mrb\u001b[39m\u001b[38;5;124m'\u001b[39m) \u001b[38;5;28;01mas\u001b[39;00m ifile:\n\u001b[0;32m---> 35\u001b[0m params \u001b[38;5;241m=\u001b[39m \u001b[43mpickle\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mload\u001b[49m\u001b[43m(\u001b[49m\u001b[43mifile\u001b[49m\u001b[43m)\u001b[49m\n","File \u001b[0;32m/opt/mamba/lib/python3.10/site-packages/jax/_src/array.py:30\u001b[0m\n\u001b[1;32m 28\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mjax\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_src\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m api_util\n\u001b[1;32m 29\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mjax\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_src\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m basearray\n\u001b[0;32m---> 30\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mjax\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_src\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m core\n\u001b[1;32m 31\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mjax\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_src\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m dispatch\n\u001b[1;32m 32\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mjax\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_src\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m dtypes\n","File \u001b[0;32m/opt/mamba/lib/python3.10/site-packages/jax/_src/core.py:42\u001b[0m\n\u001b[1;32m 40\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mjax\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_src\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m effects\n\u001b[1;32m 41\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mjax\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_src\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mconfig\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m config\n\u001b[0;32m---> 42\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mjax\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_src\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01merrors\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m (\n\u001b[1;32m 43\u001b[0m ConcretizationTypeError, TracerArrayConversionError, TracerBoolConversionError,\n\u001b[1;32m 44\u001b[0m TracerIntegerConversionError, UnexpectedTracerError)\n\u001b[1;32m 45\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mjax\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_src\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m linear_util \u001b[38;5;28;01mas\u001b[39;00m lu\n\u001b[1;32m 47\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mjax\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_src\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m source_info_util\n","\u001b[0;31mImportError\u001b[0m: cannot import name 'TracerBoolConversionError' from 'jax._src.errors' (/opt/mamba/lib/python3.10/site-packages/jax/_src/errors.py)"]}],"id":"b6139479-8ca5-41aa-a7d6-b14c554cc8e9"},{"cell_type":"markdown","source":"### 3.4 Definition of loss function ","metadata":{},"id":"75342d96-db47-46ed-9c0b-6db56fa1f2c8"},{"cell_type":"code","source":"@jit\ndef MSELoss(params, scan_res):\n '''\n The weighted mean squared error loss function\n Conducted for each scan\n '''\n E_tot_full = scan_res['tot_full']\n kT = 2.494 # 300 K = 2.494 kJ/mol\n weights_pts = jnp.piecewise(E_tot_full, [E_tot_full<25, E_tot_full>=25], [lambda x: jnp.array(1.0), lambda x: jnp.exp(-(x-25)/kT)])\n npts = len(weights_pts)\n\n energies = {\n 'ex': jnp.zeros(npts), \n 'es': jnp.zeros(npts), \n 'pol': jnp.zeros(npts),\n 'disp': jnp.zeros(npts),\n 'dhf': jnp.zeros(npts),\n 'tot': jnp.zeros(npts)\n }\n\n # setting up params for all calculators\n params_ex = {}\n params_sr_es = {}\n params_sr_pol = {}\n params_sr_disp = {}\n params_dhf = {}\n params_dmp_es = {} # electrostatic damping\n params_dmp_disp = {} # dispersion damping\n for k in ['B', 'mScales']:\n params_ex[k] = params[k]\n params_sr_es[k] = params[k]\n params_sr_pol[k] = params[k]\n params_sr_disp[k] = params[k]\n params_dhf[k] = params[k]\n params_dmp_es[k] = params[k]\n params_dmp_disp[k] = params[k]\n params_ex['A'] = params['A_ex']\n params_sr_es['A'] = params['A_es']\n params_sr_pol['A'] = params['A_pol']\n params_sr_disp['A'] = params['A_disp']\n params_dhf['A'] = params['A_dhf']\n # damping parameters\n params_dmp_es['Q'] = params['Q']\n params_dmp_disp['C6'] = params['C6']\n params_dmp_disp['C8'] = params['C8']\n params_dmp_disp['C10'] = params['C10']\n p = {}\n p['SlaterExForce'] = params_ex\n p['SlaterSrEsForce'] = params_sr_es\n p['SlaterSrPolForce'] = params_sr_pol\n p['SlaterSrDispForce'] = params_sr_disp\n p['SlaterDhfForce'] = params_dhf\n p['QqTtDampingForce'] = params_dmp_es\n p['SlaterDampingForce'] = params_dmp_disp\n\n # calculate each points, only the short range and damping components\n for ipt in range(npts):\n # get position array\n pos_A = jnp.array(scan_res['posA'][ipt]) / 10\n pos_B = jnp.array(scan_res['posB'][ipt]) / 10\n pos_AB = jnp.concatenate([pos_A, pos_B], axis=0)\n\n #####################\n # exchange repulsion\n #####################\n E_ex_AB = pot_ex_AB(pos_AB, box, pairs_AB, p)\n E_ex_A = pot_ex_A(pos_A, box, pairs_A, p)\n E_ex_B = pot_ex_B(pos_B, box, pairs_B, p)\n E_ex = E_ex_AB - E_ex_A - E_ex_B\n\n #######################\n # electrostatic + pol\n #######################\n E_dmp_es = pot_dmp_es_AB(pos_AB, box, pairs_AB, p) \\\n - pot_dmp_es_A(pos_A, box, pairs_A, p) \\\n - pot_dmp_es_B(pos_B, box, pairs_B, p)\n E_sr_es = pot_sr_es_AB(pos_AB, box, pairs_AB, p) \\\n - pot_sr_es_A(pos_A, box, pairs_A, p) \\\n - pot_sr_es_B(pos_B, box, pairs_B, p)\n\n ###################################\n # polarization (induction) energy\n ###################################\n E_sr_pol = pot_sr_pol_AB(pos_AB, box, pairs_AB, p) \\\n - pot_sr_pol_A(pos_A, box, pairs_A, p) \\\n - pot_sr_pol_B(pos_B, box, pairs_B, p)\n\n #############\n # dispersion\n #############\n E_dmp_disp = pot_dmp_disp_AB(pos_AB, box, pairs_AB, p) \\\n - pot_dmp_disp_A(pos_A, box, pairs_A, p) \\\n - pot_dmp_disp_B(pos_B, box, pairs_B, p)\n E_sr_disp = pot_sr_disp_AB(pos_AB, box, pairs_AB, p) \\\n - pot_sr_disp_A(pos_A, box, pairs_A, p) \\\n - pot_sr_disp_B(pos_B, box, pairs_B, p)\n\n ###########\n # dhf\n ###########\n E_AB_dhf = pot_dhf_AB(pos_AB, box, pairs_AB, p)\n E_A_dhf = pot_dhf_A(pos_A, box, pairs_A, p)\n E_B_dhf = pot_dhf_B(pos_B, box, pairs_B, p)\n E_dhf = E_AB_dhf - E_A_dhf - E_B_dhf\n\n energies['ex'] = energies['ex'].at[ipt].set(E_ex)\n energies['es'] = energies['es'].at[ipt].set(E_dmp_es + E_sr_es)\n energies['pol'] = energies['pol'].at[ipt].set(E_sr_pol)\n energies['disp'] = energies['disp'].at[ipt].set(E_dmp_disp + E_sr_disp)\n energies['dhf'] = energies['dhf'].at[ipt].set(E_dhf)\n energies['tot'] = energies['tot'].at[ipt].set(E_ex \n + E_dmp_es + E_sr_es\n + E_sr_pol \n + E_dmp_disp + E_sr_disp \n + E_dhf)\n errs = jnp.zeros(len(comps))\n for ic, c in enumerate(comps):\n dE = energies[c] - scan_res[c]\n mse = dE**2 * weights_pts / jnp.sum(weights_pts)\n errs = errs.at[ic].set(jnp.sum(mse))\n\n return jnp.sum(weights_comps * errs)","metadata":{},"execution_count":49,"outputs":[],"id":"e29e556a-12e8-4a71-8421-7fa6f5e1d9b3"},{"cell_type":"markdown","source":"In this function, we have added a statistical weight to each data point. By assigning weights to the data points, we can effectively ignore those with significantly higher total energies, which may not be important for the actual simulations.","metadata":{},"id":"f60b5c5e-f3e1-43cd-a426-c1b6f7ab92e6"},{"cell_type":"code","source":"# load data\nwith open('data_sr.pickle', 'rb') as ifile:\n data = pickle.load(ifile)\n\nMSELoss_grad = jit(value_and_grad(MSELoss, argnums=(0)))\nerr, gradients = MSELoss_grad(params, data['000'])\nsids = np.array(list(data.keys()))","metadata":{},"execution_count":null,"outputs":[],"id":"240786a9-8e8e-44cc-a8fe-05e506f2c779"},{"cell_type":"markdown","source":"### 3.5 Optimize \n\nonly optimize these parameters A/B","metadata":{},"id":"463259a5-b39b-433a-a902-089108885816"},{"cell_type":"code","source":"def mask_fn(grads):\n for k in grads:\n if k.startswith('A_') or k == 'B':\n continue\n else:\n grads[k] = 0.0\n return grads","metadata":{},"execution_count":24,"outputs":[],"id":"0e470b13-0c4e-4b14-a11a-0cb55ecb2250"},{"cell_type":"markdown","source":"To start our optimization loop, we can iterate over the data for a specified number of epochs and update the parameters using the optimizer. After each epoch, we can save the parameters as a pickle file.","metadata":{},"id":"788d6ad5-e851-46d5-ba2d-aa8e37467bb5"},{"cell_type":"code","source":"# start to do optmization\nlr = 0.01\noptimizer = optax.adam(lr)\nopt_state = optimizer.init(params)\n\nn_epochs = 2000\nfor i_epoch in range(n_epochs):\n np.random.shuffle(sids)\n for sid in sids:\n loss, grads = MSELoss_grad(params, data[sid])\n grads = mask_fn(grads)\n print(loss)\n sys.stdout.flush()\n updates, opt_state = optimizer.update(grads, opt_state)\n params = optax.apply_updates(params, updates)\n with open('params.pickle', 'wb') as ofile:\n pickle.dump(params, ofile)","metadata":{},"execution_count":null,"outputs":[],"id":"e6bf7507-20fb-43f1-93ff-fd261339e68f"},{"cell_type":"markdown","source":"## 4.Using DMFF for force field optimization of liquid dimethyl carbonate (DMC) ","metadata":{"jp-MarkdownHeadingCollapsed":true},"id":"55664308-ca38-48fa-898d-a5fa7e2d90d2"},{"cell_type":"markdown","source":"In the following case, we will provide a practical application of DMFF and build the corresponding workflow.\n\nThis case is primarily contributed by Wei Feng\n\n### 4.1 Introduction \nThe initial step in building a workflow using DMFF is to generate the potential function. The process and API are similar to OpenMM and generally follow the following steps:\n\n1. The first step in building a force field using DMFF is to define the force field object, known as the `Hamiltonian`. It encapsulates the `typification` rules and all the force field parameters. It can be seen as the equivalent of an XML file in OpenMM or an ITP file in GROMACS, but represented as a Python object. \n2. Obtain the molecular bond connectivity information for the system you want to simulate (you can use a PDB file).\n3. Based on the system's connectivity topology, you can use the `Hamiltonian` to classify and parameterize each atom, bond length, bond angle, dihedral angle, etc., and create a potential function. The function takes inputs such as atomic positions, box size, and force field parameters, making it suitable for subsequent derivative calculations.\n4. If necessary, the potential function can be modified and extended as needed. For example, using `jax.grad`, one can obtain a function to compute forces and the Virial matrix, which can be directly used in molecular dynamics (MD) simulations.\n5. `Estimator` and loss functions can be defined based on the potential function to compute desired properties. The optimization of parameters can be performed using a gradient descent optimizer.\n\n**In DMFF, we provide JAX implementations of various potential functions commonly used in traditional physics force fields, such as PME, pairwise interactions, multipole moments, and polarizable force fields. With the help of JAX's transformation tools, users can differentiate, vectorize, compile, and modify these potential functions. They can also create new potential functions by re-encapsulating and recombining existing ones. Additionally, users can develop `property estimators` based on these potential functions, and these new functions can also be further differentiated or vectorized. This function-centric programming paradigm in DMFF offers unbelievable flexibility in defining new force fields and objective functions.**\n\nTo provide users with a comprehensive understanding of the main modules and functionalities in DMFF and how these modules work together in force field development, we will demonstrate the complete process of model definition, optimization, and deployment using a coarse-grained model of dimethyl carbonate (DMC). The goal of this task is to optimize the interactions between three sites representing the DMC chain (3-site model) and reproduce the radial distribution function (RDF) of liquid DMC obtained from X-ray diffraction (XRD) experiments. We will also compare the DMC coarse-grained model force field with the all-atom OPLS-AA force field.\n\n![s](https://i.postimg.cc/0QkqGSyz/pic.jpg)\n\nNavigate to the working directory","metadata":{"jp-MarkdownHeadingCollapsed":true},"id":"475eefde-d99c-412d-b2f4-7ed93c179f86"},{"cell_type":"code","source":"current_directory = os.getcwd()\nparent_directory = os.path.dirname(current_directory)\nos.chdir(parent_directory)\nos.chdir(os.path.join(\"DMC\"))","metadata":{},"execution_count":61,"outputs":[],"id":"63321944-cf2b-4ad0-8188-7dc18c190247"},{"cell_type":"markdown","source":"### 4.2 Definition of potential function \nLoad the topology of the DMC system and construct the potential function for the simulation box:","metadata":{},"id":"2f05bf27-37f0-4eaf-9675-9d0538aa54a1"},{"cell_type":"code","source":"# Load PDB and topology data\npdb = app.PDBFile(\"box_DMC.pdb\")\ntop = pdb.topology\ntopdata = dmff.DMFFTopology(top)\ncov_mat = topdata.buildCovMat()","metadata":{},"execution_count":62,"outputs":[],"id":"e0a7c162-5ee8-4a36-a5c7-46848e837cb4"},{"cell_type":"markdown","source":"From the `prm1.xml` force field file, we can see that the function includes the following terms for intramolecular atomic interactions: bond, angle, and electrostatics, as well as intermolecular interactions represented by the Lennard-Jones potential:\n\n$$\\begin{align*}\n V(\\mathbf{R}) &= V_{\\mathrm{bond}} + V_\\mathrm{angle} + V_{\\mathrm{elec}} + V_{\\mathrm{vdW}} \\\\\n &= \\sum_{\\mathrm{bonds}}k_r(r - r_0)^2 + \\sum_{\\mathrm{angles}}k_\\theta(\\theta - \\theta_{eq})^2 + \\sum_{\\mathrm{i\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n```\nand we take the rest part as the res.xml. Then we can create potential & generator for this part in DMFF, and we need to define a xml-render function between xml files","metadata":{},"id":"a86a3823-6599-4f79-b6f5-e7678c054caf"},{"cell_type":"code","source":"# Load XML forcefield parameters\nio = XMLIO()\nio.loadXML(\"lj.xml\")\nffinfo = io.parseXML()\noperator = TemplateATypeOperator(ffinfo)\noperator.operate(topdata)\nfor na, a in enumerate(topdata._meta):\n print(a)\n \n# Create LJ potential\nparamset = ParamSet()\nlj_gen = LennardJonesGenerator(ffinfo, paramset)\nprint(paramset.parameters)\nprint()\nlj_force = lj_gen.createPotential(\n topdata, nonbondedMethod=app.CutoffPeriodic, nonbondedCutoff=1.0, args={})","metadata":{},"execution_count":63,"outputs":[{"name":"stdout","output_type":"stream","text":"{'LennardJonesForce': {'sigma': DeviceArray([0.5, 0.5], dtype=float64), 'epsilon': DeviceArray([0.75, 0.75], dtype=float64), 'sigma_nbfix': DeviceArray([], dtype=float64), 'epsilon_nbfix': DeviceArray([], dtype=float64)}}\n\n"}],"id":"712dab2c-cbcd-47ec-9674-95b89d2bded4"},{"cell_type":"code","source":"def xmlrender(file1, file2, file3):\n lj_tree = ET.parse(file1)\n lj_root = lj_tree.getroot()\n\n fullff_tree = ET.parse(file2)\n fullff_root = fullff_tree.getroot()\n\n nonbonded_force_element = fullff_root.find(\".//NonbondedForce\")\n\n lj_force_element = lj_root.find(\".//LennardJonesForce\")\n for atom_element in lj_force_element:\n nonbonded_force_element.append(atom_element)\n \n combined_tree = ET.ElementTree(fullff_root)\n combined_tree.write(file3, encoding='utf-8')","metadata":{},"execution_count":64,"outputs":[],"id":"93a0ee4f-11f6-48f6-a4f2-a41f3d5c2b8b"},{"cell_type":"markdown","source":"### 4.3 Definition of OpenMM sampler ","metadata":{},"id":"4cb1282a-58e8-4719-b907-ad6bc73a8412"},{"cell_type":"code","source":"# OpenMM sampler, for resampling during optimization\ndef runMD(ffile, trajfile):\n pdb = app.PDBFile('box_DMC.pdb')\n forcefield = app.ForceField(ffile)\n system = forcefield.createSystem(pdb.topology, nonbondedMethod=app.PME, nonbondedCutoff=1.0*unit.nanometer, constraints=app.HBonds)\n for force in system.getForces():\n if isinstance(force, mm.NonbondedForce):\n force.setUseDispersionCorrection(False)\n system.addForce(mm.MonteCarloBarostat(1.0*unit.bar, 293*unit.kelvin, 20))\n \n # Create integrator and simulation\n integ = mm.LangevinIntegrator(293*unit.kelvin, 5/unit.picosecond, 1*unit.femtosecond)\n simulation = app.Simulation(pdb.topology, system, integ)\n \n # Add reporters and perform simulation\n simulation.reporters.append(app.DCDReporter(trajfile, 4000))\n simulation.reporters.append(app.StateDataReporter(sys.stdout, 10000, density=True, step=True, remainingTime=True, speed=True, totalSteps=500*1000))\n simulation.context.setPositions(pdb.getPositions())\n simulation.minimizeEnergy()\n simulation.step(500*1000)\n\n# Usage\nrunMD(\"prm1.xml\", \"init.dcd\")","metadata":{},"execution_count":78,"outputs":[{"name":"stdout","output_type":"stream","text":"#\"Step\",\"Density (g/mL)\",\"Speed (ns/day)\",\"Time Remaining\"\n10000,0.6530003030971635,0,--\n20000,0.6446899494552302,636,1:05\n30000,0.654480923076971,635,1:03\n40000,0.671459932046347,635,1:02\n50000,0.6414382719916313,635,1:01\n60000,0.6637136428436129,635,0:59\n70000,0.6577889530955275,635,0:58\n80000,0.6682431392147973,635,0:57\n90000,0.6417739622327542,635,0:55\n100000,0.6588650508213222,635,0:54\n110000,0.6487744293895138,635,0:53\n120000,0.6360648337854733,635,0:51\n130000,0.6352417039403969,635,0:50\n140000,0.6560213808456982,635,0:49\n150000,0.6623521021910665,634,0:47\n160000,0.6521971277778645,634,0:46\n170000,0.6589500151573725,634,0:44\n180000,0.6704886539606272,634,0:43\n190000,0.6458769035922026,634,0:42\n200000,0.6534911856804638,634,0:40\n210000,0.6204816291822809,634,0:39\n220000,0.636381553562392,634,0:38\n230000,0.6567372679532382,634,0:36\n240000,0.660606478056156,634,0:35\n250000,0.650192833823221,634,0:34\n260000,0.6514872174830811,634,0:32\n270000,0.6400983888702015,634,0:31\n280000,0.6285535488055957,634,0:29\n290000,0.6573162752760268,634,0:28\n300000,0.6359023006772347,634,0:27\n310000,0.6386603469589097,635,0:25\n320000,0.6288081268924041,635,0:24\n330000,0.6656420040710469,635,0:23\n340000,0.6503358580491692,635,0:21\n350000,0.6528482463172317,635,0:20\n360000,0.6376504075487313,634,0:19\n370000,0.649412819278512,634,0:17\n380000,0.6561046947238908,634,0:16\n390000,0.650230647082696,634,0:14\n400000,0.6546968354167091,634,0:13\n410000,0.6525136526949809,634,0:12\n420000,0.647013386295085,634,0:10\n430000,0.6703421935342975,634,0:09\n440000,0.6680338729151056,634,0:08\n450000,0.6407888426631222,634,0:06\n460000,0.628742500395471,634,0:05\n470000,0.6567841435191818,634,0:04\n480000,0.6550768983884313,634,0:02\n490000,0.6556400271026187,631,0:01\n500000,0.6586471077786411,631,0:00\n"}],"id":"63951106-00b1-41c5-b452-3fcc3585b8e0"},{"cell_type":"markdown","source":"The function generates an NPT ensemble using OpenMM based on the input parameters and saves the generated samples in the specified trajectory file. This function will be repeatedly called for resampling purposes during subsequent optimization steps.\n\n### 4.4 Definition of Energy Rerun function in OpenMM & DMFF \n\nTo enhance computational efficiency, we opt to use DMFF only for calculating the energy of the Lennard Jones part, while the energy for the other parts is still obtained from OpenMM. Therefore, we need to design energy rerun functions pertaining to both OpenMM and DMFF.","metadata":{},"id":"060d68cf-7df9-489f-8899-666bda63be9c"},{"cell_type":"code","source":"def rerun_energy(ffile, traj, skip=20, removeLJ=True, skpi=0):\n samples = md.load(traj, top='box_DMC.pdb')[skip:]\n pdb = app.PDBFile('box_DMC.pdb')\n forcefield = app.ForceField(ffile)\n system = forcefield.createSystem(pdb.topology, nonbondedMethod=app.PME, nonbondedCutoff=1.0*unit.nanometer, constraints=app.HBonds)\n for force in system.getForces():\n if isinstance(force, mm.NonbondedForce):\n force.setUseDispersionCorrection(False)\n if removeLJ:\n for npart in range(force.getNumParticles()):\n chrg, sig, eps = force.getParticleParameters(npart)\n force.setParticleParameters(npart, chrg, 1.0, 0.0)\n for nex in range(force.getNumExceptions()):\n p1, p2, chrg, sig, eps = force.getExceptionParameters(nex)\n force.setExceptionParameters(nex, p1, p2, chrg, 1.0, 0.0)\n integ = mm.LangevinIntegrator(293*unit.kelvin, 5/unit.picosecond, 1*unit.femtosecond)\n ctx = mm.Context(system, integ)\n energies = []\n for frame in tqdm(samples):\n ctx.setPositions(frame.xyz[0] * unit.nanometer)\n ctx.setPeriodicBoxVectors(*frame.unitcell_vectors[0])\n ctx.applyConstraints(1e-10)\n state = ctx.getState(getEnergy=True)\n energy = state.getPotentialEnergy().value_in_unit(unit.kilojoule_per_mole)\n energies.append(energy)\n return np.array(energies)","metadata":{},"execution_count":79,"outputs":[],"id":"23a3b075-6749-415d-b0e5-2658db14be95"},{"cell_type":"code","source":"def rerun_dmff_lennard_jones(params, pdb, traj, efunc, skip=0):\n samples = md.load(traj, top=pdb)[skip:]\n energies = []\n nblist = NeighborListFreud(samples.unitcell_vectors[0], 1.0, cov_mat)\n xyzs_jnp = jnp.array(samples.xyz)\n cell_jnp = jnp.array(samples.unitcell_vectors)\n energies = []\n nblist = NeighborListFreud(samples.unitcell_vectors[0], 1.0, cov_mat)\n xyzs_jnp = jnp.array(samples.xyz)\n cell_jnp = jnp.array(samples.unitcell_vectors)\n energies = []\n for nframe in trange(len(samples)):\n frame = samples[nframe]\n # calc pair\n pairs = jnp.array(nblist.allocate(frame.xyz[0], frame.unitcell_vectors[0]))\n ener = efunc(xyzs_jnp[nframe,:,:], cell_jnp[nframe,:,:], pairs, params)\n energies.append(ener.reshape((1,)))\n energies = jnp.concatenate(energies)\n return energies","metadata":{},"execution_count":80,"outputs":[],"id":"82ec485f-95c1-4fb6-a393-ef82a9db06bb"},{"cell_type":"markdown","source":"### 4.5 Definition of property calculation functions \n\nIn the fitting process, we need to simultaneously fit the Radial Distribution Function (RDF) and density. Therefore, we will define separate calculation functions for RDF and density:","metadata":{},"id":"b50ba93c-27bb-4b9b-9f68-bdd92cbb50c6"},{"cell_type":"code","source":"# define property calculator, in our case, rdf for each frame:\ndef compute_rdf_frame(traj, xaxis):\n rdf_list = []\n delta = xaxis[1] - xaxis[0]\n\n coordinates = traj.xyz\n masses = np.array([15, 15, 60]) # mass of each site\n coordinates_3d = coordinates.reshape((traj.n_frames, 175, 3, 3))\n com = np.sum(masses[:, np.newaxis] * coordinates_3d, axis=2) / 90\n\n pairs = np.array(list(combinations(range(175), 2)))\n\n tidx = np.arange(0, 525, 3, dtype=int)\n tsub = traj.atom_slice(tidx)\n tsub.xyz = com\n \n for frame in tsub:\n _, g_r = md.compute_rdf(frame, pairs, r_range=(xaxis[0]-0.5*delta, xaxis[-1]+0.5*delta+1e-10), bin_width=delta)\n rdf_list.append(g_r.reshape((1, -1)))\n return np.concatenate(rdf_list, axis=0)","metadata":{},"execution_count":81,"outputs":[],"id":"9c977f6e-29a0-4624-b608-a5ea5eb31ca1"},{"cell_type":"markdown","source":"When calculating the ensemble average of an observable quantity $A$, the following statistical quantities need to be computed: $\\langle A \\rangle_p = \\sum_n W (x_n ; \\theta) A(x_n ; \\theta)$, code above has defined the $A(x_n ; \\theta)$ function.\n\nIn general, we need to encapsulate $\\langle A \\rangle_p $ in a function and then take its overall derivative during each optimization iteration.\nHowever, in this case, since the RDF and density are purely structural properties that are independent of $\\theta$ and do not participate in the derivative calculation, we can precompute the RDF for each sample ($A(x_n)$) and store it. It is not necessary to recalculate it in every iteration.\n\nIn the code above, we use the existing tools in `mdtraj` to compute the RDF for each frame, rather than using a differentiable implementation with jax.\n\n### 4.6 Read the data and perform the comparison \n\nRead the experimental data and pre-compute the RDF for the DMC full-atom model in the OPLS-AA force field (generated by LigPargen) as comparison:","metadata":{},"id":"066a1963-01cc-4f72-82b1-a937c3e64ee0"},{"cell_type":"code","source":"# Prepare reference data\ndef readRDF(fname):\n with open(fname, \"r\") as f:\n data = np.array([[float(j) for j in i.strip().split()] for i in f])\n xaxis = np.linspace(2.0, 14.0, 121)\n yinterp = np.interp(xaxis, data[:,0], data[:,1])\n return xaxis, yinterp\n\n# read experimental benzene RDF\nx_ref, y_ref = readRDF(\"DMC_Experi.txt\")\nm_ref, n_ref = readRDF(\"DMC_OPLS.txt\")","metadata":{},"execution_count":82,"outputs":[],"id":"ad92d3c4-895e-4d81-ad41-1709a4a3d053"},{"cell_type":"markdown","source":"We will compare the RDF results obtained from the RDF calculation function with the experimental data and the RDF results from the full-atom model in the OPLS-AA force field. Let's start by looking at the RDF generated from the initial parameter sampling, which serves as our starting point for optimization.","metadata":{},"id":"b7f635fc-07f5-47d5-9efa-1056af9acfe7"},{"cell_type":"code","source":"traj_init = md.load(\"init.dcd\", top=\"box_DMC.pdb\")[20:]\nrdf_frames_init = compute_rdf_frame(traj_init, x_ref*0.1)\nrdf_init = rdf_frames_init.mean(axis=0)\n\nplt.plot(x_ref, rdf_init, label = \"Initial\")\n#plt.plot(x_ref, y_ref, label = \"Experiment\")\nplt.plot(m_ref, n_ref, label = \"OPLS-AA\")\n\nplt.legend()\nplt.show()","metadata":{},"execution_count":83,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n","text/plain":"