From 070795c58d9454ba863cc825e6eeec2a541b9d81 Mon Sep 17 00:00:00 2001 From: Sakib Pathen <107497530+srpathen@users.noreply.github.com> Date: Wed, 19 Jun 2024 17:53:53 -0400 Subject: [PATCH] Add GLayout introduction notebook --- .../glayout/GLayout_Introduction.ipynb | 2239 +++++++++++++++++ 1 file changed, 2239 insertions(+) create mode 100644 docs/source/notebooks/glayout/GLayout_Introduction.ipynb diff --git a/docs/source/notebooks/glayout/GLayout_Introduction.ipynb b/docs/source/notebooks/glayout/GLayout_Introduction.ipynb new file mode 100644 index 000000000..ab026b943 --- /dev/null +++ b/docs/source/notebooks/glayout/GLayout_Introduction.ipynb @@ -0,0 +1,2239 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "aK2t7aSWNojQ" + }, + "source": [ + "# GLayout Quick Start Guide\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "view-in-github" + }, + "source": [ + "\"Open\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "xjDewsT5Y4lP" + }, + "source": [ + "```\n", + "OpenFASOC Team, Feb 2024\n", + "SPDX-License-Identifier: Apache-2.0\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "-Xp4cEjkeHIx" + }, + "source": [ + "## Introduction\n", + "Welcome!\n", + "This notebook serves as an introduction to the GDSFactory-based layout automation tool **GLayout** and a demonstration of the functions and classes you will primarily be using.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "j4dNshkgMM4I" + }, + "source": [ + "## Installation On Google Collab\n", + "### 1. Clone the repository and install dependencies\n", + "**Python Dependencies**\n", + "* [`gdsfactory`](https://github.com/gdsfactory/gdsfactory): Provides the backend for GDS manipulation.\n", + "* [`sky130`](https://github.com/gdsfactory/skywater130): The Skywater 130nm PDK Python package for GDSFactory to use in this demo.\n", + "* [`gf180`](https://github.com/gdsfactory/gf180): The GF 180nm PDK Python package for GDSFactory to use in this demo.\n", + "* [`gdstk`](https://heitzmann.github.io/gdstk/): (installed as a part of gdsfactory) Used for converting GDS files into SVG images for viewing.\n", + "* [`svgutils`](https://svgutils.readthedocs.io/en/latest/): To scale the SVG image.\n", + "\n", + "**System Dependencies**\n", + "* [`klayout`](https://klayout.de/): For DRC (Design Rule Checking).\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "bANz_LDB8TQW" + }, + "source": [ + "#### 1.1. Installing the binary dependency `klayout` using micromamba\n", + "**You only need to run this once**" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "id": "JzDjayJIMSHe", + "scrolled": true, + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "215f680e-fb6f-4b35-b02d-5e9a5ca62ac4" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "fatal: destination path 'OpenFASOC' already exists and is not an empty directory.\n", + "Requirement already satisfied: sky130 in /usr/local/lib/python3.10/dist-packages (0.11.1)\n", + "Collecting gdsfactory~=7.26.1 (from sky130)\n", + " Using cached gdsfactory-7.26.1-py3-none-any.whl (839 kB)\n", + "Requirement already satisfied: PySpice in /usr/local/lib/python3.10/dist-packages (from sky130) (1.5)\n", + "Requirement already satisfied: flatdict in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (4.0.1)\n", + "Requirement already satisfied: gdstk<0.10,>=0.9.49 in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (0.9.52)\n", + "Requirement already satisfied: jinja2<4 in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (3.1.4)\n", + "Requirement already satisfied: loguru<1 in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (0.7.2)\n", + "Requirement already satisfied: matplotlib<4 in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (3.7.1)\n", + "Requirement already satisfied: numpy<2 in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (1.25.2)\n", + "Requirement already satisfied: omegaconf<3 in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (2.3.0)\n", + "Requirement already satisfied: orjson<4 in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (3.10.5)\n", + "Requirement already satisfied: pandas<3 in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (2.0.3)\n", + "Requirement already satisfied: pydantic<2.8,>=2 in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (2.6.4)\n", + "Requirement already satisfied: pydantic-settings<3 in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (2.2.1)\n", + "Requirement already satisfied: pydantic-extra-types<3 in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (2.8.2)\n", + "Requirement already satisfied: pyyaml in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (6.0.1)\n", + "Requirement already satisfied: qrcode in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (7.4.2)\n", + "Requirement already satisfied: rectpack<1 in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (0.2.2)\n", + "Requirement already satisfied: rich<14 in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (13.7.1)\n", + "Requirement already satisfied: scipy<2 in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (1.11.4)\n", + "Requirement already satisfied: shapely<3 in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (2.0.4)\n", + "Requirement already satisfied: toolz<1 in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (0.12.1)\n", + "Requirement already satisfied: types-PyYAML in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (6.0.12.20240311)\n", + "Requirement already satisfied: typer<1 in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (0.12.3)\n", + "Requirement already satisfied: watchdog<5 in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (4.0.1)\n", + "Requirement already satisfied: kfactory[git,ipy]<0.13,>=0.9.1 in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (0.11.4)\n", + "Requirement already satisfied: freetype-py in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (2.4.0)\n", + "Requirement already satisfied: mapbox_earcut in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (1.0.1)\n", + "Requirement already satisfied: networkx in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (3.3)\n", + "Requirement already satisfied: pyglet<2 in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (1.5.29)\n", + "Requirement already satisfied: scikit-image in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (0.19.3)\n", + "Requirement already satisfied: trimesh<4.4,>=4 in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (4.1.8)\n", + "Requirement already satisfied: ipycytoscape in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (1.3.3)\n", + "Requirement already satisfied: ipyevents in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (2.0.2)\n", + "Requirement already satisfied: ipykernel in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (5.5.6)\n", + "Requirement already satisfied: ipympl in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (0.9.4)\n", + "Requirement already satisfied: ipytree in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (0.2.2)\n", + "Requirement already satisfied: ipywidgets in /usr/local/lib/python3.10/dist-packages (from gdsfactory~=7.26.1->sky130) (7.7.1)\n", + "Requirement already satisfied: cffi>=1.14 in /usr/local/lib/python3.10/dist-packages (from PySpice->sky130) (1.16.0)\n", + "Requirement already satisfied: ply>=3.11 in /usr/local/lib/python3.10/dist-packages (from PySpice->sky130) (3.11)\n", + "Requirement already satisfied: requests>=2.23 in /usr/local/lib/python3.10/dist-packages (from PySpice->sky130) (2.31.0)\n", + "Requirement already satisfied: pycparser in /usr/local/lib/python3.10/dist-packages (from cffi>=1.14->PySpice->sky130) (2.22)\n", + "Requirement already satisfied: typing_extensions in /usr/local/lib/python3.10/dist-packages (from gdstk<0.10,>=0.9.49->gdsfactory~=7.26.1->sky130) (4.12.2)\n", + "Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from jinja2<4->gdsfactory~=7.26.1->sky130) (2.1.5)\n", + "Requirement already satisfied: klayout>=0.28.17 in /usr/local/lib/python3.10/dist-packages (from kfactory[git,ipy]<0.13,>=0.9.1->gdsfactory~=7.26.1->sky130) (0.29.2)\n", + "Requirement already satisfied: ruamel.yaml in /usr/local/lib/python3.10/dist-packages (from kfactory[git,ipy]<0.13,>=0.9.1->gdsfactory~=7.26.1->sky130) (0.18.6)\n", + "Requirement already satisfied: cachetools>=5.2.0 in /usr/local/lib/python3.10/dist-packages (from kfactory[git,ipy]<0.13,>=0.9.1->gdsfactory~=7.26.1->sky130) (5.3.3)\n", + "Requirement already satisfied: tomli in /usr/local/lib/python3.10/dist-packages (from kfactory[git,ipy]<0.13,>=0.9.1->gdsfactory~=7.26.1->sky130) (2.0.1)\n", + "Requirement already satisfied: aenum in /usr/local/lib/python3.10/dist-packages (from kfactory[git,ipy]<0.13,>=0.9.1->gdsfactory~=7.26.1->sky130) (3.1.15)\n", + "Requirement already satisfied: ipython in /usr/local/lib/python3.10/dist-packages (from kfactory[git,ipy]<0.13,>=0.9.1->gdsfactory~=7.26.1->sky130) (7.34.0)\n", + "Requirement already satisfied: gitpython in /usr/local/lib/python3.10/dist-packages (from kfactory[git,ipy]<0.13,>=0.9.1->gdsfactory~=7.26.1->sky130) (3.1.43)\n", + "Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib<4->gdsfactory~=7.26.1->sky130) (1.2.1)\n", + "Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.10/dist-packages (from matplotlib<4->gdsfactory~=7.26.1->sky130) (0.12.1)\n", + "Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib<4->gdsfactory~=7.26.1->sky130) (4.53.0)\n", + "Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib<4->gdsfactory~=7.26.1->sky130) (1.4.5)\n", + "Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib<4->gdsfactory~=7.26.1->sky130) (24.1)\n", + "Requirement already satisfied: pillow>=6.2.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib<4->gdsfactory~=7.26.1->sky130) (9.4.0)\n", + "Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib<4->gdsfactory~=7.26.1->sky130) (3.1.2)\n", + "Requirement already satisfied: python-dateutil>=2.7 in /usr/local/lib/python3.10/dist-packages (from matplotlib<4->gdsfactory~=7.26.1->sky130) (2.8.2)\n", + "Requirement already satisfied: antlr4-python3-runtime==4.9.* in /usr/local/lib/python3.10/dist-packages (from omegaconf<3->gdsfactory~=7.26.1->sky130) (4.9.3)\n", + "Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.10/dist-packages (from pandas<3->gdsfactory~=7.26.1->sky130) (2023.4)\n", + "Requirement already satisfied: tzdata>=2022.1 in /usr/local/lib/python3.10/dist-packages (from pandas<3->gdsfactory~=7.26.1->sky130) (2024.1)\n", + "Requirement already satisfied: annotated-types>=0.4.0 in /usr/local/lib/python3.10/dist-packages (from pydantic<2.8,>=2->gdsfactory~=7.26.1->sky130) (0.7.0)\n", + "Requirement already satisfied: pydantic-core==2.16.3 in /usr/local/lib/python3.10/dist-packages (from pydantic<2.8,>=2->gdsfactory~=7.26.1->sky130) (2.16.3)\n", + "Requirement already satisfied: python-dotenv>=0.21.0 in /usr/local/lib/python3.10/dist-packages (from pydantic-settings<3->gdsfactory~=7.26.1->sky130) (1.0.1)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests>=2.23->PySpice->sky130) (3.3.2)\n", + "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests>=2.23->PySpice->sky130) (3.7)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests>=2.23->PySpice->sky130) (2.0.7)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests>=2.23->PySpice->sky130) (2024.6.2)\n", + "Requirement already satisfied: markdown-it-py>=2.2.0 in /usr/local/lib/python3.10/dist-packages (from rich<14->gdsfactory~=7.26.1->sky130) (3.0.0)\n", + "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /usr/local/lib/python3.10/dist-packages (from rich<14->gdsfactory~=7.26.1->sky130) (2.16.1)\n", + "Requirement already satisfied: click>=8.0.0 in /usr/local/lib/python3.10/dist-packages (from typer<1->gdsfactory~=7.26.1->sky130) (8.1.7)\n", + "Requirement already satisfied: shellingham>=1.3.0 in /usr/local/lib/python3.10/dist-packages (from typer<1->gdsfactory~=7.26.1->sky130) (1.5.4)\n", + "Requirement already satisfied: spectate>=1.0.0 in /usr/local/lib/python3.10/dist-packages (from ipycytoscape->gdsfactory~=7.26.1->sky130) (1.0.1)\n", + "Requirement already satisfied: ipython-genutils~=0.2.0 in /usr/local/lib/python3.10/dist-packages (from ipywidgets->gdsfactory~=7.26.1->sky130) (0.2.0)\n", + "Requirement already satisfied: traitlets>=4.3.1 in /usr/local/lib/python3.10/dist-packages (from ipywidgets->gdsfactory~=7.26.1->sky130) (5.7.1)\n", + "Requirement already satisfied: widgetsnbextension~=3.6.0 in /usr/local/lib/python3.10/dist-packages (from ipywidgets->gdsfactory~=7.26.1->sky130) (3.6.6)\n", + "Requirement already satisfied: jupyterlab-widgets>=1.0.0 in /usr/local/lib/python3.10/dist-packages (from ipywidgets->gdsfactory~=7.26.1->sky130) (3.0.11)\n", + "Requirement already satisfied: jupyter-client in /usr/local/lib/python3.10/dist-packages (from ipykernel->gdsfactory~=7.26.1->sky130) (6.1.12)\n", + "Requirement already satisfied: tornado>=4.2 in /usr/local/lib/python3.10/dist-packages (from ipykernel->gdsfactory~=7.26.1->sky130) (6.3.3)\n", + "Requirement already satisfied: pypng in /usr/local/lib/python3.10/dist-packages (from qrcode->gdsfactory~=7.26.1->sky130) (0.20220715.0)\n", + "Requirement already satisfied: imageio>=2.4.1 in /usr/local/lib/python3.10/dist-packages (from scikit-image->gdsfactory~=7.26.1->sky130) (2.31.6)\n", + "Requirement already satisfied: tifffile>=2019.7.26 in /usr/local/lib/python3.10/dist-packages (from scikit-image->gdsfactory~=7.26.1->sky130) (2024.5.22)\n", + "Requirement already satisfied: PyWavelets>=1.1.1 in /usr/local/lib/python3.10/dist-packages (from scikit-image->gdsfactory~=7.26.1->sky130) (1.6.0)\n", + "Requirement already satisfied: setuptools>=18.5 in /usr/local/lib/python3.10/dist-packages (from ipython->kfactory[git,ipy]<0.13,>=0.9.1->gdsfactory~=7.26.1->sky130) (67.7.2)\n", + "Requirement already satisfied: jedi>=0.16 in /usr/local/lib/python3.10/dist-packages (from ipython->kfactory[git,ipy]<0.13,>=0.9.1->gdsfactory~=7.26.1->sky130) (0.19.1)\n", + "Requirement already satisfied: decorator in /usr/local/lib/python3.10/dist-packages (from ipython->kfactory[git,ipy]<0.13,>=0.9.1->gdsfactory~=7.26.1->sky130) (4.4.2)\n", + "Requirement already satisfied: pickleshare in /usr/local/lib/python3.10/dist-packages (from ipython->kfactory[git,ipy]<0.13,>=0.9.1->gdsfactory~=7.26.1->sky130) (0.7.5)\n", + "Requirement already satisfied: prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0 in /usr/local/lib/python3.10/dist-packages (from ipython->kfactory[git,ipy]<0.13,>=0.9.1->gdsfactory~=7.26.1->sky130) (3.0.47)\n", + "Requirement already satisfied: backcall in /usr/local/lib/python3.10/dist-packages (from ipython->kfactory[git,ipy]<0.13,>=0.9.1->gdsfactory~=7.26.1->sky130) (0.2.0)\n", + "Requirement already satisfied: matplotlib-inline in /usr/local/lib/python3.10/dist-packages (from ipython->kfactory[git,ipy]<0.13,>=0.9.1->gdsfactory~=7.26.1->sky130) (0.1.7)\n", + "Requirement already satisfied: pexpect>4.3 in /usr/local/lib/python3.10/dist-packages (from ipython->kfactory[git,ipy]<0.13,>=0.9.1->gdsfactory~=7.26.1->sky130) (4.9.0)\n", + "Requirement already satisfied: mdurl~=0.1 in /usr/local/lib/python3.10/dist-packages (from markdown-it-py>=2.2.0->rich<14->gdsfactory~=7.26.1->sky130) (0.1.2)\n", + "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-dateutil>=2.7->matplotlib<4->gdsfactory~=7.26.1->sky130) (1.16.0)\n", + "Requirement already satisfied: notebook>=4.4.1 in /usr/local/lib/python3.10/dist-packages (from widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (6.5.5)\n", + "Requirement already satisfied: gitdb<5,>=4.0.1 in /usr/local/lib/python3.10/dist-packages (from gitpython->kfactory[git,ipy]<0.13,>=0.9.1->gdsfactory~=7.26.1->sky130) (4.0.11)\n", + "Requirement already satisfied: jupyter-core>=4.6.0 in /usr/local/lib/python3.10/dist-packages (from jupyter-client->ipykernel->gdsfactory~=7.26.1->sky130) (5.7.2)\n", + "Requirement already satisfied: pyzmq>=13 in /usr/local/lib/python3.10/dist-packages (from jupyter-client->ipykernel->gdsfactory~=7.26.1->sky130) (24.0.1)\n", + "Requirement already satisfied: ruamel.yaml.clib>=0.2.7 in /usr/local/lib/python3.10/dist-packages (from ruamel.yaml->kfactory[git,ipy]<0.13,>=0.9.1->gdsfactory~=7.26.1->sky130) (0.2.8)\n", + "\u001b[33mWARNING: typer 0.12.3 does not provide the extra 'all'\u001b[0m\u001b[33m\n", + "\u001b[0mRequirement already satisfied: smmap<6,>=3.0.1 in /usr/local/lib/python3.10/dist-packages (from gitdb<5,>=4.0.1->gitpython->kfactory[git,ipy]<0.13,>=0.9.1->gdsfactory~=7.26.1->sky130) (5.0.1)\n", + "Requirement already satisfied: parso<0.9.0,>=0.8.3 in /usr/local/lib/python3.10/dist-packages (from jedi>=0.16->ipython->kfactory[git,ipy]<0.13,>=0.9.1->gdsfactory~=7.26.1->sky130) (0.8.4)\n", + "Requirement already satisfied: platformdirs>=2.5 in /usr/local/lib/python3.10/dist-packages (from jupyter-core>=4.6.0->jupyter-client->ipykernel->gdsfactory~=7.26.1->sky130) (4.2.2)\n", + "Requirement already satisfied: argon2-cffi in /usr/local/lib/python3.10/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (23.1.0)\n", + "Requirement already satisfied: nbformat in /usr/local/lib/python3.10/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (5.10.4)\n", + "Requirement already satisfied: nbconvert>=5 in /usr/local/lib/python3.10/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (6.5.4)\n", + "Requirement already satisfied: nest-asyncio>=1.5 in /usr/local/lib/python3.10/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (1.6.0)\n", + "Requirement already satisfied: Send2Trash>=1.8.0 in /usr/local/lib/python3.10/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (1.8.3)\n", + "Requirement already satisfied: terminado>=0.8.3 in /usr/local/lib/python3.10/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (0.18.1)\n", + "Requirement already satisfied: prometheus-client in /usr/local/lib/python3.10/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (0.20.0)\n", + "Requirement already satisfied: nbclassic>=0.4.7 in /usr/local/lib/python3.10/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (1.1.0)\n", + "Requirement already satisfied: ptyprocess>=0.5 in /usr/local/lib/python3.10/dist-packages (from pexpect>4.3->ipython->kfactory[git,ipy]<0.13,>=0.9.1->gdsfactory~=7.26.1->sky130) (0.7.0)\n", + "Requirement already satisfied: wcwidth in /usr/local/lib/python3.10/dist-packages (from prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0->ipython->kfactory[git,ipy]<0.13,>=0.9.1->gdsfactory~=7.26.1->sky130) (0.2.13)\n", + "Requirement already satisfied: notebook-shim>=0.2.3 in /usr/local/lib/python3.10/dist-packages (from nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (0.2.4)\n", + "Requirement already satisfied: lxml in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (4.9.4)\n", + "Requirement already satisfied: beautifulsoup4 in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (4.12.3)\n", + "Requirement already satisfied: bleach in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (6.1.0)\n", + "Requirement already satisfied: defusedxml in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (0.7.1)\n", + "Requirement already satisfied: entrypoints>=0.2.2 in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (0.4)\n", + "Requirement already satisfied: jupyterlab-pygments in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (0.3.0)\n", + "Requirement already satisfied: mistune<2,>=0.8.1 in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (0.8.4)\n", + "Requirement already satisfied: nbclient>=0.5.0 in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (0.10.0)\n", + "Requirement already satisfied: pandocfilters>=1.4.1 in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (1.5.1)\n", + "Requirement already satisfied: tinycss2 in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (1.3.0)\n", + "Requirement already satisfied: fastjsonschema>=2.15 in /usr/local/lib/python3.10/dist-packages (from nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (2.19.1)\n", + "Requirement already satisfied: jsonschema>=2.6 in /usr/local/lib/python3.10/dist-packages (from nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (4.19.2)\n", + "Requirement already satisfied: argon2-cffi-bindings in /usr/local/lib/python3.10/dist-packages (from argon2-cffi->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (21.2.0)\n", + "Requirement already satisfied: attrs>=22.2.0 in /usr/local/lib/python3.10/dist-packages (from jsonschema>=2.6->nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (23.2.0)\n", + "Requirement already satisfied: jsonschema-specifications>=2023.03.6 in /usr/local/lib/python3.10/dist-packages (from jsonschema>=2.6->nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (2023.12.1)\n", + "Requirement already satisfied: referencing>=0.28.4 in /usr/local/lib/python3.10/dist-packages (from jsonschema>=2.6->nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (0.35.1)\n", + "Requirement already satisfied: rpds-py>=0.7.1 in /usr/local/lib/python3.10/dist-packages (from jsonschema>=2.6->nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (0.18.1)\n", + "Requirement already satisfied: jupyter-server<3,>=1.8 in /usr/local/lib/python3.10/dist-packages (from notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (1.24.0)\n", + "Requirement already satisfied: soupsieve>1.2 in /usr/local/lib/python3.10/dist-packages (from beautifulsoup4->nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (2.5)\n", + "Requirement already satisfied: webencodings in /usr/local/lib/python3.10/dist-packages (from bleach->nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (0.5.1)\n", + "Requirement already satisfied: anyio<4,>=3.1.0 in /usr/local/lib/python3.10/dist-packages (from jupyter-server<3,>=1.8->notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (3.7.1)\n", + "Requirement already satisfied: websocket-client in /usr/local/lib/python3.10/dist-packages (from jupyter-server<3,>=1.8->notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (1.8.0)\n", + "Requirement already satisfied: sniffio>=1.1 in /usr/local/lib/python3.10/dist-packages (from anyio<4,>=3.1.0->jupyter-server<3,>=1.8->notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (1.3.1)\n", + "Requirement already satisfied: exceptiongroup in /usr/local/lib/python3.10/dist-packages (from anyio<4,>=3.1.0->jupyter-server<3,>=1.8->notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory~=7.26.1->sky130) (1.2.1)\n", + "Installing collected packages: gdsfactory\n", + " Attempting uninstall: gdsfactory\n", + " Found existing installation: gdsfactory 7.16.0\n", + " Uninstalling gdsfactory-7.16.0:\n", + " Successfully uninstalled gdsfactory-7.16.0\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", + "gf180 0.1.0 requires gdsfactory<7.17,>=7.16.0, but you have gdsfactory 7.26.1 which is incompatible.\u001b[0m\u001b[31m\n", + "\u001b[0mSuccessfully installed gdsfactory-7.26.1\n", + "Requirement already satisfied: gf180 in /usr/local/lib/python3.10/dist-packages (0.1.0)\n", + "Requirement already satisfied: prettyprinttree in /usr/local/lib/python3.10/dist-packages (2.0.0)\n", + "Requirement already satisfied: svgutils in /usr/local/lib/python3.10/dist-packages (0.3.4)\n", + "Collecting gdsfactory<7.17,>=7.16.0 (from gf180)\n", + " Using cached gdsfactory-7.16.0-py3-none-any.whl (834 kB)\n", + "Requirement already satisfied: colorama in /usr/local/lib/python3.10/dist-packages (from prettyprinttree) (0.4.6)\n", + "Requirement already satisfied: cmd2 in /usr/local/lib/python3.10/dist-packages (from prettyprinttree) (2.4.3)\n", + "Requirement already satisfied: lxml in /usr/local/lib/python3.10/dist-packages (from svgutils) (4.9.4)\n", + "Requirement already satisfied: flatdict in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (4.0.1)\n", + "Requirement already satisfied: gdstk<0.10,>=0.9.49 in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (0.9.52)\n", + "Requirement already satisfied: jinja2<4 in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (3.1.4)\n", + "Requirement already satisfied: loguru<1 in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (0.7.2)\n", + "Requirement already satisfied: matplotlib<4 in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (3.7.1)\n", + "Requirement already satisfied: numpy<2 in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (1.25.2)\n", + "Requirement already satisfied: omegaconf<3 in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (2.3.0)\n", + "Requirement already satisfied: orjson<4 in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (3.10.5)\n", + "Requirement already satisfied: pandas<3 in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (2.0.3)\n", + "Requirement already satisfied: pydantic<2.7,>=2 in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (2.6.4)\n", + "Requirement already satisfied: pydantic-settings<3 in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (2.2.1)\n", + "Requirement already satisfied: pydantic-extra-types<3 in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (2.8.2)\n", + "Requirement already satisfied: pyyaml in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (6.0.1)\n", + "Requirement already satisfied: qrcode in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (7.4.2)\n", + "Requirement already satisfied: rectpack<1 in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (0.2.2)\n", + "Requirement already satisfied: rich<14 in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (13.7.1)\n", + "Requirement already satisfied: scipy<2 in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (1.11.4)\n", + "Requirement already satisfied: shapely<3 in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (2.0.4)\n", + "Requirement already satisfied: toolz<1 in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (0.12.1)\n", + "Requirement already satisfied: types-PyYAML in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (6.0.12.20240311)\n", + "Requirement already satisfied: typer<1 in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (0.12.3)\n", + "Requirement already satisfied: watchdog<5 in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (4.0.1)\n", + "Requirement already satisfied: kfactory[git,ipy]<0.12,>=0.9.1 in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (0.11.4)\n", + "Requirement already satisfied: freetype-py in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (2.4.0)\n", + "Requirement already satisfied: mapbox_earcut in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (1.0.1)\n", + "Requirement already satisfied: networkx in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (3.3)\n", + "Requirement already satisfied: pyglet<2 in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (1.5.29)\n", + "Requirement already satisfied: scikit-image in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (0.19.3)\n", + "Requirement already satisfied: trimesh<4.2,>=4 in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (4.1.8)\n", + "Requirement already satisfied: ipycytoscape in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (1.3.3)\n", + "Requirement already satisfied: ipyevents in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (2.0.2)\n", + "Requirement already satisfied: ipykernel in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (5.5.6)\n", + "Requirement already satisfied: ipympl in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (0.9.4)\n", + "Requirement already satisfied: ipytree in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (0.2.2)\n", + "Requirement already satisfied: ipywidgets in /usr/local/lib/python3.10/dist-packages (from gdsfactory<7.17,>=7.16.0->gf180) (7.7.1)\n", + "Requirement already satisfied: attrs>=16.3.0 in /usr/local/lib/python3.10/dist-packages (from cmd2->prettyprinttree) (23.2.0)\n", + "Requirement already satisfied: pyperclip>=1.6 in /usr/local/lib/python3.10/dist-packages (from cmd2->prettyprinttree) (1.8.2)\n", + "Requirement already satisfied: wcwidth>=0.1.7 in /usr/local/lib/python3.10/dist-packages (from cmd2->prettyprinttree) (0.2.13)\n", + "Requirement already satisfied: typing_extensions in /usr/local/lib/python3.10/dist-packages (from gdstk<0.10,>=0.9.49->gdsfactory<7.17,>=7.16.0->gf180) (4.12.2)\n", + "Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from jinja2<4->gdsfactory<7.17,>=7.16.0->gf180) (2.1.5)\n", + "Requirement already satisfied: klayout>=0.28.17 in /usr/local/lib/python3.10/dist-packages (from kfactory[git,ipy]<0.12,>=0.9.1->gdsfactory<7.17,>=7.16.0->gf180) (0.29.2)\n", + "Requirement already satisfied: ruamel.yaml in /usr/local/lib/python3.10/dist-packages (from kfactory[git,ipy]<0.12,>=0.9.1->gdsfactory<7.17,>=7.16.0->gf180) (0.18.6)\n", + "Requirement already satisfied: cachetools>=5.2.0 in /usr/local/lib/python3.10/dist-packages (from kfactory[git,ipy]<0.12,>=0.9.1->gdsfactory<7.17,>=7.16.0->gf180) (5.3.3)\n", + "Requirement already satisfied: tomli in /usr/local/lib/python3.10/dist-packages (from kfactory[git,ipy]<0.12,>=0.9.1->gdsfactory<7.17,>=7.16.0->gf180) (2.0.1)\n", + "Requirement already satisfied: requests in /usr/local/lib/python3.10/dist-packages (from kfactory[git,ipy]<0.12,>=0.9.1->gdsfactory<7.17,>=7.16.0->gf180) (2.31.0)\n", + "Requirement already satisfied: aenum in /usr/local/lib/python3.10/dist-packages (from kfactory[git,ipy]<0.12,>=0.9.1->gdsfactory<7.17,>=7.16.0->gf180) (3.1.15)\n", + "Requirement already satisfied: ipython in /usr/local/lib/python3.10/dist-packages (from kfactory[git,ipy]<0.12,>=0.9.1->gdsfactory<7.17,>=7.16.0->gf180) (7.34.0)\n", + "Requirement already satisfied: gitpython in /usr/local/lib/python3.10/dist-packages (from kfactory[git,ipy]<0.12,>=0.9.1->gdsfactory<7.17,>=7.16.0->gf180) (3.1.43)\n", + "Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib<4->gdsfactory<7.17,>=7.16.0->gf180) (1.2.1)\n", + "Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.10/dist-packages (from matplotlib<4->gdsfactory<7.17,>=7.16.0->gf180) (0.12.1)\n", + "Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib<4->gdsfactory<7.17,>=7.16.0->gf180) (4.53.0)\n", + "Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib<4->gdsfactory<7.17,>=7.16.0->gf180) (1.4.5)\n", + "Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib<4->gdsfactory<7.17,>=7.16.0->gf180) (24.1)\n", + "Requirement already satisfied: pillow>=6.2.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib<4->gdsfactory<7.17,>=7.16.0->gf180) (9.4.0)\n", + "Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib<4->gdsfactory<7.17,>=7.16.0->gf180) (3.1.2)\n", + "Requirement already satisfied: python-dateutil>=2.7 in /usr/local/lib/python3.10/dist-packages (from matplotlib<4->gdsfactory<7.17,>=7.16.0->gf180) (2.8.2)\n", + "Requirement already satisfied: antlr4-python3-runtime==4.9.* in /usr/local/lib/python3.10/dist-packages (from omegaconf<3->gdsfactory<7.17,>=7.16.0->gf180) (4.9.3)\n", + "Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.10/dist-packages (from pandas<3->gdsfactory<7.17,>=7.16.0->gf180) (2023.4)\n", + "Requirement already satisfied: tzdata>=2022.1 in /usr/local/lib/python3.10/dist-packages (from pandas<3->gdsfactory<7.17,>=7.16.0->gf180) (2024.1)\n", + "Requirement already satisfied: annotated-types>=0.4.0 in /usr/local/lib/python3.10/dist-packages (from pydantic<2.7,>=2->gdsfactory<7.17,>=7.16.0->gf180) (0.7.0)\n", + "Requirement already satisfied: pydantic-core==2.16.3 in /usr/local/lib/python3.10/dist-packages (from pydantic<2.7,>=2->gdsfactory<7.17,>=7.16.0->gf180) (2.16.3)\n", + "Requirement already satisfied: python-dotenv>=0.21.0 in /usr/local/lib/python3.10/dist-packages (from pydantic-settings<3->gdsfactory<7.17,>=7.16.0->gf180) (1.0.1)\n", + "Requirement already satisfied: markdown-it-py>=2.2.0 in /usr/local/lib/python3.10/dist-packages (from rich<14->gdsfactory<7.17,>=7.16.0->gf180) (3.0.0)\n", + "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /usr/local/lib/python3.10/dist-packages (from rich<14->gdsfactory<7.17,>=7.16.0->gf180) (2.16.1)\n", + "Requirement already satisfied: click>=8.0.0 in /usr/local/lib/python3.10/dist-packages (from typer<1->gdsfactory<7.17,>=7.16.0->gf180) (8.1.7)\n", + "Requirement already satisfied: shellingham>=1.3.0 in /usr/local/lib/python3.10/dist-packages (from typer<1->gdsfactory<7.17,>=7.16.0->gf180) (1.5.4)\n", + "Requirement already satisfied: spectate>=1.0.0 in /usr/local/lib/python3.10/dist-packages (from ipycytoscape->gdsfactory<7.17,>=7.16.0->gf180) (1.0.1)\n", + "Requirement already satisfied: ipython-genutils~=0.2.0 in /usr/local/lib/python3.10/dist-packages (from ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (0.2.0)\n", + "Requirement already satisfied: traitlets>=4.3.1 in /usr/local/lib/python3.10/dist-packages (from ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (5.7.1)\n", + "Requirement already satisfied: widgetsnbextension~=3.6.0 in /usr/local/lib/python3.10/dist-packages (from ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (3.6.6)\n", + "Requirement already satisfied: jupyterlab-widgets>=1.0.0 in /usr/local/lib/python3.10/dist-packages (from ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (3.0.11)\n", + "Requirement already satisfied: jupyter-client in /usr/local/lib/python3.10/dist-packages (from ipykernel->gdsfactory<7.17,>=7.16.0->gf180) (6.1.12)\n", + "Requirement already satisfied: tornado>=4.2 in /usr/local/lib/python3.10/dist-packages (from ipykernel->gdsfactory<7.17,>=7.16.0->gf180) (6.3.3)\n", + "Requirement already satisfied: pypng in /usr/local/lib/python3.10/dist-packages (from qrcode->gdsfactory<7.17,>=7.16.0->gf180) (0.20220715.0)\n", + "Requirement already satisfied: imageio>=2.4.1 in /usr/local/lib/python3.10/dist-packages (from scikit-image->gdsfactory<7.17,>=7.16.0->gf180) (2.31.6)\n", + "Requirement already satisfied: tifffile>=2019.7.26 in /usr/local/lib/python3.10/dist-packages (from scikit-image->gdsfactory<7.17,>=7.16.0->gf180) (2024.5.22)\n", + "Requirement already satisfied: PyWavelets>=1.1.1 in /usr/local/lib/python3.10/dist-packages (from scikit-image->gdsfactory<7.17,>=7.16.0->gf180) (1.6.0)\n", + "Requirement already satisfied: setuptools>=18.5 in /usr/local/lib/python3.10/dist-packages (from ipython->kfactory[git,ipy]<0.12,>=0.9.1->gdsfactory<7.17,>=7.16.0->gf180) (67.7.2)\n", + "Requirement already satisfied: jedi>=0.16 in /usr/local/lib/python3.10/dist-packages (from ipython->kfactory[git,ipy]<0.12,>=0.9.1->gdsfactory<7.17,>=7.16.0->gf180) (0.19.1)\n", + "Requirement already satisfied: decorator in /usr/local/lib/python3.10/dist-packages (from ipython->kfactory[git,ipy]<0.12,>=0.9.1->gdsfactory<7.17,>=7.16.0->gf180) (4.4.2)\n", + "Requirement already satisfied: pickleshare in /usr/local/lib/python3.10/dist-packages (from ipython->kfactory[git,ipy]<0.12,>=0.9.1->gdsfactory<7.17,>=7.16.0->gf180) (0.7.5)\n", + "Requirement already satisfied: prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0 in /usr/local/lib/python3.10/dist-packages (from ipython->kfactory[git,ipy]<0.12,>=0.9.1->gdsfactory<7.17,>=7.16.0->gf180) (3.0.47)\n", + "Requirement already satisfied: backcall in /usr/local/lib/python3.10/dist-packages (from ipython->kfactory[git,ipy]<0.12,>=0.9.1->gdsfactory<7.17,>=7.16.0->gf180) (0.2.0)\n", + "Requirement already satisfied: matplotlib-inline in /usr/local/lib/python3.10/dist-packages (from ipython->kfactory[git,ipy]<0.12,>=0.9.1->gdsfactory<7.17,>=7.16.0->gf180) (0.1.7)\n", + "Requirement already satisfied: pexpect>4.3 in /usr/local/lib/python3.10/dist-packages (from ipython->kfactory[git,ipy]<0.12,>=0.9.1->gdsfactory<7.17,>=7.16.0->gf180) (4.9.0)\n", + "Requirement already satisfied: mdurl~=0.1 in /usr/local/lib/python3.10/dist-packages (from markdown-it-py>=2.2.0->rich<14->gdsfactory<7.17,>=7.16.0->gf180) (0.1.2)\n", + "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-dateutil>=2.7->matplotlib<4->gdsfactory<7.17,>=7.16.0->gf180) (1.16.0)\n", + "Requirement already satisfied: notebook>=4.4.1 in /usr/local/lib/python3.10/dist-packages (from widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (6.5.5)\n", + "Requirement already satisfied: gitdb<5,>=4.0.1 in /usr/local/lib/python3.10/dist-packages (from gitpython->kfactory[git,ipy]<0.12,>=0.9.1->gdsfactory<7.17,>=7.16.0->gf180) (4.0.11)\n", + "Requirement already satisfied: jupyter-core>=4.6.0 in /usr/local/lib/python3.10/dist-packages (from jupyter-client->ipykernel->gdsfactory<7.17,>=7.16.0->gf180) (5.7.2)\n", + "Requirement already satisfied: pyzmq>=13 in /usr/local/lib/python3.10/dist-packages (from jupyter-client->ipykernel->gdsfactory<7.17,>=7.16.0->gf180) (24.0.1)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests->kfactory[git,ipy]<0.12,>=0.9.1->gdsfactory<7.17,>=7.16.0->gf180) (3.3.2)\n", + "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests->kfactory[git,ipy]<0.12,>=0.9.1->gdsfactory<7.17,>=7.16.0->gf180) (3.7)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests->kfactory[git,ipy]<0.12,>=0.9.1->gdsfactory<7.17,>=7.16.0->gf180) (2.0.7)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests->kfactory[git,ipy]<0.12,>=0.9.1->gdsfactory<7.17,>=7.16.0->gf180) (2024.6.2)\n", + "Requirement already satisfied: ruamel.yaml.clib>=0.2.7 in /usr/local/lib/python3.10/dist-packages (from ruamel.yaml->kfactory[git,ipy]<0.12,>=0.9.1->gdsfactory<7.17,>=7.16.0->gf180) (0.2.8)\n", + "\u001b[33mWARNING: typer 0.12.3 does not provide the extra 'all'\u001b[0m\u001b[33m\n", + "\u001b[0mRequirement already satisfied: smmap<6,>=3.0.1 in /usr/local/lib/python3.10/dist-packages (from gitdb<5,>=4.0.1->gitpython->kfactory[git,ipy]<0.12,>=0.9.1->gdsfactory<7.17,>=7.16.0->gf180) (5.0.1)\n", + "Requirement already satisfied: parso<0.9.0,>=0.8.3 in /usr/local/lib/python3.10/dist-packages (from jedi>=0.16->ipython->kfactory[git,ipy]<0.12,>=0.9.1->gdsfactory<7.17,>=7.16.0->gf180) (0.8.4)\n", + "Requirement already satisfied: platformdirs>=2.5 in /usr/local/lib/python3.10/dist-packages (from jupyter-core>=4.6.0->jupyter-client->ipykernel->gdsfactory<7.17,>=7.16.0->gf180) (4.2.2)\n", + "Requirement already satisfied: argon2-cffi in /usr/local/lib/python3.10/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (23.1.0)\n", + "Requirement already satisfied: nbformat in /usr/local/lib/python3.10/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (5.10.4)\n", + "Requirement already satisfied: nbconvert>=5 in /usr/local/lib/python3.10/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (6.5.4)\n", + "Requirement already satisfied: nest-asyncio>=1.5 in /usr/local/lib/python3.10/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (1.6.0)\n", + "Requirement already satisfied: Send2Trash>=1.8.0 in /usr/local/lib/python3.10/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (1.8.3)\n", + "Requirement already satisfied: terminado>=0.8.3 in /usr/local/lib/python3.10/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (0.18.1)\n", + "Requirement already satisfied: prometheus-client in /usr/local/lib/python3.10/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (0.20.0)\n", + "Requirement already satisfied: nbclassic>=0.4.7 in /usr/local/lib/python3.10/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (1.1.0)\n", + "Requirement already satisfied: ptyprocess>=0.5 in /usr/local/lib/python3.10/dist-packages (from pexpect>4.3->ipython->kfactory[git,ipy]<0.12,>=0.9.1->gdsfactory<7.17,>=7.16.0->gf180) (0.7.0)\n", + "Requirement already satisfied: notebook-shim>=0.2.3 in /usr/local/lib/python3.10/dist-packages (from nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (0.2.4)\n", + "Requirement already satisfied: beautifulsoup4 in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (4.12.3)\n", + "Requirement already satisfied: bleach in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (6.1.0)\n", + "Requirement already satisfied: defusedxml in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (0.7.1)\n", + "Requirement already satisfied: entrypoints>=0.2.2 in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (0.4)\n", + "Requirement already satisfied: jupyterlab-pygments in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (0.3.0)\n", + "Requirement already satisfied: mistune<2,>=0.8.1 in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (0.8.4)\n", + "Requirement already satisfied: nbclient>=0.5.0 in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (0.10.0)\n", + "Requirement already satisfied: pandocfilters>=1.4.1 in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (1.5.1)\n", + "Requirement already satisfied: tinycss2 in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (1.3.0)\n", + "Requirement already satisfied: fastjsonschema>=2.15 in /usr/local/lib/python3.10/dist-packages (from nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (2.19.1)\n", + "Requirement already satisfied: jsonschema>=2.6 in /usr/local/lib/python3.10/dist-packages (from nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (4.19.2)\n", + "Requirement already satisfied: argon2-cffi-bindings in /usr/local/lib/python3.10/dist-packages (from argon2-cffi->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (21.2.0)\n", + "Requirement already satisfied: jsonschema-specifications>=2023.03.6 in /usr/local/lib/python3.10/dist-packages (from jsonschema>=2.6->nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (2023.12.1)\n", + "Requirement already satisfied: referencing>=0.28.4 in /usr/local/lib/python3.10/dist-packages (from jsonschema>=2.6->nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (0.35.1)\n", + "Requirement already satisfied: rpds-py>=0.7.1 in /usr/local/lib/python3.10/dist-packages (from jsonschema>=2.6->nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (0.18.1)\n", + "Requirement already satisfied: jupyter-server<3,>=1.8 in /usr/local/lib/python3.10/dist-packages (from notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (1.24.0)\n", + "Requirement already satisfied: cffi>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from argon2-cffi-bindings->argon2-cffi->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (1.16.0)\n", + "Requirement already satisfied: soupsieve>1.2 in /usr/local/lib/python3.10/dist-packages (from beautifulsoup4->nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (2.5)\n", + "Requirement already satisfied: webencodings in /usr/local/lib/python3.10/dist-packages (from bleach->nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (0.5.1)\n", + "Requirement already satisfied: pycparser in /usr/local/lib/python3.10/dist-packages (from cffi>=1.0.1->argon2-cffi-bindings->argon2-cffi->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (2.22)\n", + "Requirement already satisfied: anyio<4,>=3.1.0 in /usr/local/lib/python3.10/dist-packages (from jupyter-server<3,>=1.8->notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (3.7.1)\n", + "Requirement already satisfied: websocket-client in /usr/local/lib/python3.10/dist-packages (from jupyter-server<3,>=1.8->notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (1.8.0)\n", + "Requirement already satisfied: sniffio>=1.1 in /usr/local/lib/python3.10/dist-packages (from anyio<4,>=3.1.0->jupyter-server<3,>=1.8->notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (1.3.1)\n", + "Requirement already satisfied: exceptiongroup in /usr/local/lib/python3.10/dist-packages (from anyio<4,>=3.1.0->jupyter-server<3,>=1.8->notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->gdsfactory<7.17,>=7.16.0->gf180) (1.2.1)\n", + "Installing collected packages: gdsfactory\n", + " Attempting uninstall: gdsfactory\n", + " Found existing installation: gdsfactory 7.26.1\n", + " Uninstalling gdsfactory-7.26.1:\n", + " Successfully uninstalled gdsfactory-7.26.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", + "sky130 0.11.1 requires gdsfactory~=7.26.1, but you have gdsfactory 7.16.0 which is incompatible.\u001b[0m\u001b[31m\n", + "\u001b[0mSuccessfully installed gdsfactory-7.16.0\n", + "Collecting gdsfactory==7.7.0\n", + " Using cached gdsfactory-7.7.0-py3-none-any.whl (801 kB)\n", + "Requirement already satisfied: flatdict in /usr/local/lib/python3.10/dist-packages (from gdsfactory==7.7.0) (4.0.1)\n", + "Requirement already satisfied: gdstk<1 in /usr/local/lib/python3.10/dist-packages (from gdsfactory==7.7.0) (0.9.52)\n", + "Requirement already satisfied: jinja2 in /usr/local/lib/python3.10/dist-packages (from gdsfactory==7.7.0) (3.1.4)\n", + "Requirement already satisfied: loguru<1 in /usr/local/lib/python3.10/dist-packages (from gdsfactory==7.7.0) (0.7.2)\n", + "Requirement already satisfied: matplotlib in /usr/local/lib/python3.10/dist-packages (from gdsfactory==7.7.0) (3.7.1)\n", + "Requirement already satisfied: numpy in /usr/local/lib/python3.10/dist-packages (from gdsfactory==7.7.0) (1.25.2)\n", + "Requirement already satisfied: omegaconf<3 in /usr/local/lib/python3.10/dist-packages (from gdsfactory==7.7.0) (2.3.0)\n", + "Requirement already satisfied: orjson in /usr/local/lib/python3.10/dist-packages (from gdsfactory==7.7.0) (3.10.5)\n", + "Requirement already satisfied: pandas in /usr/local/lib/python3.10/dist-packages (from gdsfactory==7.7.0) (2.0.3)\n", + "Requirement already satisfied: pydantic<3,>=2 in /usr/local/lib/python3.10/dist-packages (from gdsfactory==7.7.0) (2.6.4)\n", + "Requirement already satisfied: pydantic-settings in /usr/local/lib/python3.10/dist-packages (from gdsfactory==7.7.0) (2.2.1)\n", + "Requirement already satisfied: pydantic-extra-types in /usr/local/lib/python3.10/dist-packages (from gdsfactory==7.7.0) (2.8.2)\n", + "Requirement already satisfied: pyyaml in /usr/local/lib/python3.10/dist-packages (from gdsfactory==7.7.0) (6.0.1)\n", + "Requirement already satisfied: qrcode in /usr/local/lib/python3.10/dist-packages (from gdsfactory==7.7.0) (7.4.2)\n", + "Requirement already satisfied: rectpack in /usr/local/lib/python3.10/dist-packages (from gdsfactory==7.7.0) (0.2.2)\n", + "Requirement already satisfied: rich in /usr/local/lib/python3.10/dist-packages (from gdsfactory==7.7.0) (13.7.1)\n", + "Requirement already satisfied: scipy in /usr/local/lib/python3.10/dist-packages (from gdsfactory==7.7.0) (1.11.4)\n", + "Requirement already satisfied: shapely<3 in /usr/local/lib/python3.10/dist-packages (from gdsfactory==7.7.0) (2.0.4)\n", + "Requirement already satisfied: toolz in /usr/local/lib/python3.10/dist-packages (from gdsfactory==7.7.0) (0.12.1)\n", + "Requirement already satisfied: tqdm in /usr/local/lib/python3.10/dist-packages (from gdsfactory==7.7.0) (4.66.4)\n", + "Requirement already satisfied: types-PyYAML in /usr/local/lib/python3.10/dist-packages (from gdsfactory==7.7.0) (6.0.12.20240311)\n", + "Requirement already satisfied: typer in /usr/local/lib/python3.10/dist-packages (from gdsfactory==7.7.0) (0.12.3)\n", + "Requirement already satisfied: watchdog in /usr/local/lib/python3.10/dist-packages (from gdsfactory==7.7.0) (4.0.1)\n", + "Requirement already satisfied: typing_extensions in /usr/local/lib/python3.10/dist-packages (from gdstk<1->gdsfactory==7.7.0) (4.12.2)\n", + "Requirement already satisfied: antlr4-python3-runtime==4.9.* in /usr/local/lib/python3.10/dist-packages (from omegaconf<3->gdsfactory==7.7.0) (4.9.3)\n", + "Requirement already satisfied: annotated-types>=0.4.0 in /usr/local/lib/python3.10/dist-packages (from pydantic<3,>=2->gdsfactory==7.7.0) (0.7.0)\n", + "Requirement already satisfied: pydantic-core==2.16.3 in /usr/local/lib/python3.10/dist-packages (from pydantic<3,>=2->gdsfactory==7.7.0) (2.16.3)\n", + "Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from jinja2->gdsfactory==7.7.0) (2.1.5)\n", + "Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib->gdsfactory==7.7.0) (1.2.1)\n", + "Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.10/dist-packages (from matplotlib->gdsfactory==7.7.0) (0.12.1)\n", + "Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib->gdsfactory==7.7.0) (4.53.0)\n", + "Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib->gdsfactory==7.7.0) (1.4.5)\n", + "Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib->gdsfactory==7.7.0) (24.1)\n", + "Requirement already satisfied: pillow>=6.2.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib->gdsfactory==7.7.0) (9.4.0)\n", + "Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib->gdsfactory==7.7.0) (3.1.2)\n", + "Requirement already satisfied: python-dateutil>=2.7 in /usr/local/lib/python3.10/dist-packages (from matplotlib->gdsfactory==7.7.0) (2.8.2)\n", + "Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.10/dist-packages (from pandas->gdsfactory==7.7.0) (2023.4)\n", + "Requirement already satisfied: tzdata>=2022.1 in /usr/local/lib/python3.10/dist-packages (from pandas->gdsfactory==7.7.0) (2024.1)\n", + "Requirement already satisfied: python-dotenv>=0.21.0 in /usr/local/lib/python3.10/dist-packages (from pydantic-settings->gdsfactory==7.7.0) (1.0.1)\n", + "Requirement already satisfied: pypng in /usr/local/lib/python3.10/dist-packages (from qrcode->gdsfactory==7.7.0) (0.20220715.0)\n", + "Requirement already satisfied: markdown-it-py>=2.2.0 in /usr/local/lib/python3.10/dist-packages (from rich->gdsfactory==7.7.0) (3.0.0)\n", + "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /usr/local/lib/python3.10/dist-packages (from rich->gdsfactory==7.7.0) (2.16.1)\n", + "Requirement already satisfied: click>=8.0.0 in /usr/local/lib/python3.10/dist-packages (from typer->gdsfactory==7.7.0) (8.1.7)\n", + "Requirement already satisfied: shellingham>=1.3.0 in /usr/local/lib/python3.10/dist-packages (from typer->gdsfactory==7.7.0) (1.5.4)\n", + "Requirement already satisfied: mdurl~=0.1 in /usr/local/lib/python3.10/dist-packages (from markdown-it-py>=2.2.0->rich->gdsfactory==7.7.0) (0.1.2)\n", + "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-dateutil>=2.7->matplotlib->gdsfactory==7.7.0) (1.16.0)\n", + "Installing collected packages: gdsfactory\n", + " Attempting uninstall: gdsfactory\n", + " Found existing installation: gdsfactory 7.16.0\n", + " Uninstalling gdsfactory-7.16.0:\n", + " Successfully uninstalled gdsfactory-7.16.0\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", + "gf180 0.1.0 requires gdsfactory<7.17,>=7.16.0, but you have gdsfactory 7.7.0 which is incompatible.\n", + "sky130 0.11.1 requires gdsfactory~=7.26.1, but you have gdsfactory 7.7.0 which is incompatible.\u001b[0m\u001b[31m\n", + "\u001b[0mSuccessfully installed gdsfactory-7.7.0\n", + "bin/micromamba\n", + "env: CONDA_PREFIX=/content/conda-env\n", + "Empty environment created at prefix: /content/conda-env\n", + "\u001b[?25l\u001b[2K\u001b[0G[+] 0.0s\n", + "litex-hub/linux-64.. ⣾ \n", + "litex-hub/noarch (.. ⣾ \n", + "main/linux-64 (che.. ⣾ \n", + "main/noarch (check.. ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.1s\n", + "litex-hub/linux-64.. ⣾ \n", + "litex-hub/noarch (.. ⣾ \n", + "main/linux-64 (che.. ⣾ \n", + "main/noarch (check.. ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.2s\n", + "litex-hub/linux-64.. ⣾ \n", + "litex-hub/noarch (.. ⣾ \n", + "main/linux-64 (che.. ⣾ \n", + "main/noarch (check.. ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gmain/noarch (check zst) \n", + "main/linux-64 (check zst) \n", + "[+] 0.3s\n", + "litex-hub/linux-64.. ⣾ \n", + "litex-hub/noarch (.. ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glitex-hub/noarch (check zst) \n", + "[+] 0.4s\n", + "litex-hub/linux-64.. ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[0Glitex-hub/linux-64 (check zst) \n", + "\u001b[?25h\u001b[?25l\u001b[2K\u001b[0G[+] 0.0s\n", + "\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.1s\n", + "litex-hub/linux-64 ⣾ \n", + "litex-hub/noarch ⣾ \n", + "main/linux-64 ⣾ \n", + "main/noarch ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.2s\n", + "litex-hub/linux-64 ⣾ \n", + "litex-hub/noarch ⣾ \n", + "main/linux-64 ⣾ \n", + "main/noarch 4%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glitex-hub/noarch \n", + "main/noarch \n", + "[+] 0.3s\n", + "litex-hub/linux-64 ⣾ \n", + "main/linux-64 10%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.4s\n", + "litex-hub/linux-64 ⣾ \n", + "main/linux-64 84%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gmain/linux-64 \n", + "[+] 0.5s\n", + "litex-hub/linux-64 ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.6s\n", + "litex-hub/linux-64 ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.7s\n", + "litex-hub/linux-64 ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.8s\n", + "litex-hub/linux-64 54%\u001b[2K\u001b[1A\u001b[2K\u001b[0Glitex-hub/linux-64 \n", + "\u001b[?25h\n", + "Transaction\n", + "\n", + " Prefix: /content/conda-env\n", + "\n", + " Updating specs:\n", + "\n", + " - klayout\n", + "\n", + "\n", + " Package Version Build Channel Size\n", + "─────────────────────────────────────────────────────────────────────────────────────────\n", + " Install:\n", + "─────────────────────────────────────────────────────────────────────────────────────────\n", + "\n", + " \u001b[32m+ _libgcc_mutex \u001b[0m 0.1 main main 3kB\n", + " \u001b[32m+ libstdcxx-ng \u001b[0m 11.2.0 h1234567_1 main 6MB\n", + " \u001b[32m+ ld_impl_linux-64\u001b[0m 2.38 h1181459_1 main 749kB\n", + " \u001b[32m+ ca-certificates \u001b[0m 2024.3.11 h06a4308_0 main 137kB\n", + " \u001b[32m+ libgomp \u001b[0m 11.2.0 h1234567_1 main 573kB\n", + " \u001b[32m+ _openmp_mutex \u001b[0m 5.1 1_gnu main 21kB\n", + " \u001b[32m+ libgcc-ng \u001b[0m 11.2.0 h1234567_1 main 9MB\n", + " \u001b[32m+ yaml \u001b[0m 0.1.7 had09818_2 main 87kB\n", + " \u001b[32m+ libuuid \u001b[0m 1.41.5 h5eee18b_0 main 29kB\n", + " \u001b[32m+ gmp \u001b[0m 6.2.1 h295c915_3 main 822kB\n", + " \u001b[32m+ ncurses \u001b[0m 6.4 h6a678d5_0 main 1MB\n", + " \u001b[32m+ bzip2 \u001b[0m 1.0.8 h5eee18b_6 main 428kB\n", + " \u001b[32m+ libev \u001b[0m 4.33 h7f8727e_1 main 109kB\n", + " \u001b[32m+ c-ares \u001b[0m 1.19.1 h5eee18b_0 main 116kB\n", + " \u001b[32m+ libiconv \u001b[0m 1.16 h5eee18b_3 main 1MB\n", + " \u001b[32m+ libffi \u001b[0m 3.4.4 h6a678d5_1 main 154kB\n", + " \u001b[32m+ xz \u001b[0m 5.4.6 h5eee18b_1 main 717kB\n", + " \u001b[32m+ zlib \u001b[0m 1.2.13 h5eee18b_1 main 127kB\n", + " \u001b[32m+ openssl \u001b[0m 1.1.1w h7f8727e_0 main 4MB\n", + " \u001b[32m+ libxcb \u001b[0m 1.15 h7f8727e_0 main 623kB\n", + " \u001b[32m+ jpeg \u001b[0m 9e h5eee18b_1 main 281kB\n", + " \u001b[32m+ icu \u001b[0m 58.2 he6710b0_3 main 24MB\n", + " \u001b[32m+ expat \u001b[0m 2.6.2 h6a678d5_0 main 200kB\n", + " \u001b[32m+ libedit \u001b[0m 3.1.20230828 h5eee18b_0 main 196kB\n", + " \u001b[32m+ readline \u001b[0m 8.2 h5eee18b_0 main 468kB\n", + " \u001b[32m+ tk \u001b[0m 8.6.14 h39e8969_0 main 4MB\n", + " \u001b[32m+ pcre2 \u001b[0m 10.42 hebb0a14_1 main 3MB\n", + " \u001b[32m+ libpng \u001b[0m 1.6.39 h5eee18b_0 main 363kB\n", + " \u001b[32m+ libssh2 \u001b[0m 1.10.0 h37d81fd_2 main 312kB\n", + " \u001b[32m+ libnghttp2 \u001b[0m 1.52.0 ha637b67_1 main 717kB\n", + " \u001b[32m+ krb5 \u001b[0m 1.20.1 h568e23c_1 main 1MB\n", + " \u001b[32m+ sqlite \u001b[0m 3.45.3 h5eee18b_0 main 2MB\n", + " \u001b[32m+ ruby \u001b[0m 2.5.1 haf1161a_0 main 5MB\n", + " \u001b[32m+ libglib \u001b[0m 2.78.4 hdc74915_0 main 2MB\n", + " \u001b[32m+ freetype \u001b[0m 2.12.1 h4a9f257_0 main 972kB\n", + " \u001b[32m+ libcurl \u001b[0m 8.2.1 h91b91d3_0 main 386kB\n", + " \u001b[32m+ python \u001b[0m 3.7.16 h7a1cb2a_0 main 49MB\n", + " \u001b[32m+ wheel \u001b[0m 0.38.4 py37h06a4308_0 main 59kB\n", + " \u001b[32m+ glib-tools \u001b[0m 2.78.4 h6a678d5_0 main 113kB\n", + " \u001b[32m+ curl \u001b[0m 8.2.1 h37d81fd_0 main 89kB\n", + " \u001b[32m+ certifi \u001b[0m 2022.12.7 py37h06a4308_0 main 155kB\n", + " \u001b[32m+ libgit2 \u001b[0m 1.6.4 ha637b67_0 main 1MB\n", + " \u001b[32m+ setuptools \u001b[0m 65.6.3 py37h06a4308_0 main 1MB\n", + " \u001b[32m+ pip \u001b[0m 22.3.1 py37h06a4308_0 main 3MB\n", + " \u001b[32m+ glib \u001b[0m 2.78.4 h6a678d5_0 main 499kB\n", + " \u001b[32m+ gstreamer \u001b[0m 1.14.1 h5eee18b_1 main 2MB\n", + " \u001b[32m+ dbus \u001b[0m 1.13.18 hb2f20db_0 main 600kB\n", + " \u001b[32m+ gst-plugins-base\u001b[0m 1.14.1 h6a678d5_1 main 2MB\n", + " \u001b[32m+ libxml2 \u001b[0m 2.9.9 20220706_155948 litex-hub 1MB\n", + " \u001b[32m+ fontconfig \u001b[0m 2.13.0 h9420a91_0 main 298kB\n", + " \u001b[32m+ qt \u001b[0m 5.9.7 h5867ecd_1 main 90MB\n", + " \u001b[32m+ klayout \u001b[0m 0.28.17_212_gfa14afbbf 20240223_100318_py37 litex-hub 27MB\n", + "\n", + " Summary:\n", + "\n", + " Install: 52 packages\n", + "\n", + " Total download: 249MB\n", + "\n", + "─────────────────────────────────────────────────────────────────────────────────────────\n", + "\n", + "\n", + "\n", + "Transaction starting\n", + "\u001b[?25l\u001b[2K\u001b[0G[+] 0.0s\n", + "Downloading 0%\n", + "Extracting 0%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.1s\n", + "Downloading (5) 0%\n", + "Extracting 0%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.2s\n", + "Downloading (5) 0%\n", + "Extracting 0%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.3s\n", + "Downloading (5) 0%\n", + "Extracting 0%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.4s\n", + "Downloading (5) 0%\n", + "Extracting 0%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G_libgcc_mutex 3.1kB @ 7.7kB/s 0.4s\n", + "[+] 0.5s\n", + "Downloading (5) 1%\n", + "Extracting (1) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gld_impl_linux-64 749.1kB @ 1.5MB/s 0.5s\n", + "ca-certificates 137.4kB @ 234.5kB/s 0.6s\n", + "libgomp 573.2kB @ 976.5kB/s 0.6s\n", + "[+] 0.6s\n", + "Downloading (5) 1%\n", + "Extracting (4) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.7s\n", + "Downloading (5) 2%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.8s\n", + "Downloading (5) 3%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibstdcxx-ng 6.4MB @ 7.5MB/s 0.9s\n", + "ncurses 1.2MB @ 1.3MB/s 0.5s\n", + "[+] 0.9s\n", + "Downloading (5) 4%\n", + "Extracting (5) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gc-ares 116.3kB @ 126.2kB/s 0.4s\n", + "[+] 1.0s\n", + "Downloading (5) 4%\n", + "Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gxz 716.9kB @ 698.4kB/s 0.4s\n", + "libxcb 623.5kB @ 573.9kB/s 0.5s\n", + "[+] 1.1s\n", + "Downloading (5) 5%\n", + "Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 1.2s\n", + "Downloading (5) 5%\n", + "Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gexpat 200.2kB @ 156.8kB/s 0.4s\n", + "[+] 1.3s\n", + "Downloading (5) 5%\n", + "Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibssh2 311.8kB @ 234.8kB/s 0.4s\n", + "tk 3.6MB @ 2.6MB/s 0.5s\n", + "[+] 1.4s\n", + "Downloading (5) 6%\n", + "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 1.5s\n", + "Downloading (5) 6%\n", + "Extracting (8) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gsqlite 1.7MB @ 1.1MB/s 0.6s\n", + "[+] 1.6s\n", + "Downloading (5) 7%\n", + "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 1.7s\n", + "Downloading (5) 7%\n", + "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gwheel 58.7kB @ 33.3kB/s 0.5s\n", + "certifi 155.3kB @ 87.6kB/s 0.4s\n", + "[+] 1.8s\n", + "Downloading (5) 7%\n", + "Extracting (11) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 1.9s\n", + "Downloading (5) 7%\n", + "Extracting (11) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 2.0s\n", + "Downloading (5) 9%\n", + "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gpip 2.8MB @ 1.4MB/s 0.6s\n", + "_openmp_mutex 20.8kB @ 10.0kB/s 0.3s\n", + "[+] 2.1s\n", + "Downloading (5) 9%\n", + "Extracting (12) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gfreetype 972.0kB @ 461.3kB/s 1.0s\n", + "[+] 2.2s\n", + "Downloading (5) 9%\n", + "Extracting (13) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gfontconfig 297.6kB @ 135.0kB/s 0.4s\n", + "[+] 2.3s\n", + "Downloading (5) 9%\n", + "Extracting (14) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibuuid 29.2kB @ 12.6kB/s 0.3s\n", + "dbus 600.2kB @ 253.2kB/s 0.8s\n", + "[+] 2.4s\n", + "Downloading (5) 9%\n", + "Extracting (15) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibev 108.9kB @ 44.9kB/s 0.3s\n", + "[+] 2.5s\n", + "Downloading (5) 9%\n", + "Extracting (16) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gzlib 127.1kB @ 50.3kB/s 0.4s\n", + "[+] 2.6s\n", + "Downloading (5) 9%\n", + "Extracting (17) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 2.7s\n", + "Downloading (5) 9%\n", + "Extracting (17) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 2.8s\n", + "Downloading (5) 11%\n", + "Extracting (17) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibcurl 386.4kB @ 137.3kB/s 0.4s\n", + "krb5 1.4MB @ 502.2kB/s 0.5s\n", + "[+] 2.9s\n", + "Downloading (5) 14%\n", + "Extracting (19) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gpcre2 3.3MB @ 1.2MB/s 0.6s\n", + "[+] 3.0s\n", + "Downloading (5) 18%\n", + "Extracting (19) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gcurl 88.8kB @ 28.9kB/s 0.5s\n", + "[+] 3.1s\n", + "Downloading (5) 19%\n", + "Extracting (20) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gicu 23.8MB @ 7.5MB/s 1.0s\n", + "[+] 3.2s\n", + "Downloading (5) 21%\n", + "Extracting (21) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.3s\n", + "Downloading (5) 21%\n", + "Extracting (21) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gglib 499.0kB @ 151.3kB/s 0.5s\n", + "[+] 3.4s\n", + "Downloading (5) 21%\n", + "Extracting (22) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.5s\n", + "Downloading (5) 23%\n", + "Extracting (21) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibxml2 1.4MB @ 395.5kB/s 0.7s\n", + "bzip2 427.5kB @ 121.0kB/s 0.5s\n", + "[+] 3.6s\n", + "Downloading (5) 25%\n", + "Extracting (23) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibgcc-ng 8.9MB @ 2.5MB/s 0.7s\n", + "readline 467.7kB @ 129.1kB/s 0.3s\n", + "[+] 3.7s\n", + "Downloading (5) 25%\n", + "Extracting (25) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.8s\n", + "Downloading (5) 26%\n", + "Extracting (25) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.9s\n", + "Downloading (5) 27%\n", + "Extracting (24) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gopenssl 4.0MB @ 1.0MB/s 0.7s\n", + "glib-tools 112.6kB @ 28.5kB/s 0.4s\n", + "[+] 4.0s\n", + "Downloading (5) 27%\n", + "Extracting (26) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Ggstreamer 1.7MB @ 415.6kB/s 0.5s\n", + "[+] 4.1s\n", + "Downloading (5) 28%\n", + "Extracting (27) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.2s\n", + "Downloading (5) 29%\n", + "Extracting (26) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.3s\n", + "Downloading (5) 31%\n", + "Extracting (26) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibiconv 1.4MB @ 327.5kB/s 0.5s\n", + "[+] 4.4s\n", + "Downloading (5) 34%\n", + "Extracting (25) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.5s\n", + "Downloading (5) 35%\n", + "Extracting (26) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.6s\n", + "Downloading (5) 38%\n", + "Extracting (26) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibglib 1.6MB @ 339.9kB/s 0.6s\n", + "[+] 4.7s\n", + "Downloading (5) 39%\n", + "Extracting (27) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gklayout 26.7MB @ 5.7MB/s 1.1s\n", + "[+] 4.8s\n", + "Downloading (5) 41%\n", + "Extracting (27) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.9s\n", + "Downloading (5) 41%\n", + "Extracting (27) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gruby 5.3MB @ 1.1MB/s 1.5s\n", + "[+] 5.0s\n", + "Downloading (5) 42%\n", + "Extracting (27) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gsetuptools 1.4MB @ 287.5kB/s 0.6s\n", + "libedit 195.8kB @ 38.9kB/s 1.1s\n", + "yaml 87.1kB @ 17.2kB/s 0.4s\n", + "[+] 5.1s\n", + "Downloading (5) 43%\n", + "Extracting (30) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gjpeg 281.4kB @ 54.3kB/s 0.5s\n", + "[+] 5.2s\n", + "Downloading (5) 43%\n", + "Extracting (31) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.3s\n", + "Downloading (5) 43%\n", + "Extracting (31) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.4s\n", + "Downloading (5) 43%\n", + "Extracting (31) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.5s\n", + "Downloading (5) 43%\n", + "Extracting (31) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibpng 362.6kB @ 65.6kB/s 0.5s\n", + "[+] 5.6s\n", + "Downloading (5) 43%\n", + "Extracting (30) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.7s\n", + "Downloading (5) 44%\n", + "Extracting (30) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibnghttp2 716.6kB @ 125.7kB/s 0.5s\n", + "[+] 5.8s\n", + "Downloading (5) 47%\n", + "Extracting (31) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.9s\n", + "Downloading (5) 48%\n", + "Extracting (31) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibffi 154.0kB @ 25.8kB/s 0.4s\n", + "[+] 6.0s\n", + "Downloading (5) 50%\n", + "Extracting (32) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 6.1s\n", + "Downloading (5) 51%\n", + "Extracting (32) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 6.2s\n", + "Downloading (5) 52%\n", + "Extracting (32) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibgit2 1.2MB @ 187.9kB/s 0.5s\n", + "[+] 6.3s\n", + "Downloading (4) 55%\n", + "Extracting (33) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Ggst-plugins-base 2.3MB @ 353.7kB/s 1.3s\n", + "[+] 6.4s\n", + "Downloading (3) 58%\n", + "Extracting (34) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Ggmp 822.4kB @ 127.9kB/s 0.5s\n", + "[+] 6.5s\n", + "Downloading (2) 61%\n", + "Extracting (35) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 6.6s\n", + "Downloading (2) 63%\n", + "Extracting (35) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 6.7s\n", + "Downloading (2) 64%\n", + "Extracting (34) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 6.8s\n", + "Downloading (2) 67%\n", + "Extracting (34) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 6.9s\n", + "Downloading (2) 69%\n", + "Extracting (34) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.0s\n", + "Downloading (2) 71%\n", + "Extracting (34) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.1s\n", + "Downloading (2) 74%\n", + "Extracting (34) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.2s\n", + "Downloading (2) 76%\n", + "Extracting (34) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.3s\n", + "Downloading (2) 78%\n", + "Extracting (34) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.4s\n", + "Downloading (2) 79%\n", + "Extracting (34) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.5s\n", + "Downloading (2) 81%\n", + "Extracting (34) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.6s\n", + "Downloading (2) 83%\n", + "Extracting (34) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gqt 90.0MB @ 11.7MB/s 2.7s\n", + "[+] 7.7s\n", + "Downloading (1) 85%\n", + "Extracting (34) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.8s\n", + "Downloading (1) 85%\n", + "Extracting (35) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.9s\n", + "Downloading (1) 86%\n", + "Extracting (35) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 8.0s\n", + "Downloading (1) 86%\n", + "Extracting (35) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 8.1s\n", + "Downloading (1) 87%\n", + "Extracting (35) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 8.2s\n", + "Downloading (1) 88%\n", + "Extracting (35) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 8.3s\n", + "Downloading (1) 89%\n", + "Extracting (35) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 8.4s\n", + "Downloading (1) 90%\n", + "Extracting (35) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 8.5s\n", + "Downloading (1) 91%\n", + "Extracting (35) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 8.6s\n", + "Downloading (1) 93%\n", + "Extracting (35) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 8.7s\n", + "Downloading (1) 95%\n", + "Extracting (35) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 8.8s\n", + "Downloading (1) 96%\n", + "Extracting (35) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 8.9s\n", + "Downloading (1) 98%\n", + "Extracting (35) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gpython 48.7MB @ 5.4MB/s 4.0s\n", + "[+] 9.0s\n", + "Downloading 100%\n", + "Extracting (36) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 9.1s\n", + "Downloading 100%\n", + "Extracting (36) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 9.2s\n", + "Downloading 100%\n", + "Extracting (35) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 9.3s\n", + "Downloading 100%\n", + "Extracting (35) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 9.4s\n", + "Downloading 100%\n", + "Extracting (35) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 9.5s\n", + "Downloading 100%\n", + "Extracting (35) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 9.6s\n", + "Downloading 100%\n", + "Extracting (35) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 9.7s\n", + "Downloading 100%\n", + "Extracting (35) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 9.8s\n", + "Downloading 100%\n", + "Extracting (35) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 9.9s\n", + "Downloading 100%\n", + "Extracting (35) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 10.0s\n", + "Downloading 100%\n", + "Extracting (34) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 10.1s\n", + "Downloading 100%\n", + "Extracting (34) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 10.2s\n", + "Downloading 100%\n", + "Extracting (34) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 10.3s\n", + "Downloading 100%\n", + "Extracting (34) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 10.4s\n", + "Downloading 100%\n", + "Extracting (34) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 10.5s\n", + "Downloading 100%\n", + "Extracting (34) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 10.6s\n", + "Downloading 100%\n", + "Extracting (34) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 10.7s\n", + "Downloading 100%\n", + "Extracting (34) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 10.8s\n", + "Downloading 100%\n", + "Extracting (34) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 10.9s\n", + "Downloading 100%\n", + "Extracting (34) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 11.0s\n", + "Downloading 100%\n", + "Extracting (34) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 11.1s\n", + "Downloading 100%\n", + "Extracting (34) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 11.2s\n", + "Downloading 100%\n", + "Extracting (33) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 11.3s\n", + "Downloading 100%\n", + "Extracting (33) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 11.4s\n", + "Downloading 100%\n", + "Extracting (33) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 11.5s\n", + "Downloading 100%\n", + "Extracting (33) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 11.6s\n", + "Downloading 100%\n", + "Extracting (33) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 11.7s\n", + "Downloading 100%\n", + "Extracting (33) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 11.8s\n", + "Downloading 100%\n", + "Extracting (33) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 11.9s\n", + "Downloading 100%\n", + "Extracting (33) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 12.0s\n", + "Downloading 100%\n", + "Extracting (33) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 12.1s\n", + "Downloading 100%\n", + "Extracting (33) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 12.2s\n", + "Downloading 100%\n", + "Extracting (33) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 12.3s\n", + "Downloading 100%\n", + "Extracting (33) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 12.4s\n", + "Downloading 100%\n", + "Extracting (32) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 12.5s\n", + "Downloading 100%\n", + "Extracting (32) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 12.6s\n", + "Downloading 100%\n", + "Extracting (32) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 12.7s\n", + "Downloading 100%\n", + "Extracting (32) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 12.8s\n", + "Downloading 100%\n", + "Extracting (32) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 12.9s\n", + "Downloading 100%\n", + "Extracting (32) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 13.0s\n", + "Downloading 100%\n", + "Extracting (32) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 13.1s\n", + "Downloading 100%\n", + "Extracting (32) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 13.2s\n", + "Downloading 100%\n", + "Extracting (32) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 13.3s\n", + "Downloading 100%\n", + "Extracting (31) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 13.4s\n", + "Downloading 100%\n", + "Extracting (31) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 13.5s\n", + "Downloading 100%\n", + "Extracting (31) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 13.6s\n", + "Downloading 100%\n", + "Extracting (31) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 13.7s\n", + "Downloading 100%\n", + "Extracting (30) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 13.8s\n", + "Downloading 100%\n", + "Extracting (30) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 13.9s\n", + "Downloading 100%\n", + "Extracting (30) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 14.0s\n", + "Downloading 100%\n", + "Extracting (30) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 14.1s\n", + "Downloading 100%\n", + "Extracting (29) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 14.2s\n", + "Downloading 100%\n", + "Extracting (29) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 14.3s\n", + "Downloading 100%\n", + "Extracting (29) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 14.4s\n", + "Downloading 100%\n", + "Extracting (29) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 14.5s\n", + "Downloading 100%\n", + "Extracting (29) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 14.6s\n", + "Downloading 100%\n", + "Extracting (28) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 14.7s\n", + "Downloading 100%\n", + "Extracting (28) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 14.8s\n", + "Downloading 100%\n", + "Extracting (28) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 14.9s\n", + "Downloading 100%\n", + "Extracting (28) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 15.0s\n", + "Downloading 100%\n", + "Extracting (28) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 15.1s\n", + "Downloading 100%\n", + "Extracting (28) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 15.2s\n", + "Downloading 100%\n", + "Extracting (28) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 15.3s\n", + "Downloading 100%\n", + "Extracting (27) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 15.4s\n", + "Downloading 100%\n", + "Extracting (27) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 15.5s\n", + "Downloading 100%\n", + "Extracting (27) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 15.6s\n", + "Downloading 100%\n", + "Extracting (27) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 15.7s\n", + "Downloading 100%\n", + "Extracting (26) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 15.8s\n", + "Downloading 100%\n", + "Extracting (26) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 15.9s\n", + "Downloading 100%\n", + "Extracting (25) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 16.0s\n", + "Downloading 100%\n", + "Extracting (24) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 16.1s\n", + "Downloading 100%\n", + "Extracting (24) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 16.2s\n", + "Downloading 100%\n", + "Extracting (24) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 16.3s\n", + "Downloading 100%\n", + "Extracting (24) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 16.4s\n", + "Downloading 100%\n", + "Extracting (23) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 16.5s\n", + "Downloading 100%\n", + "Extracting (22) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 16.6s\n", + "Downloading 100%\n", + "Extracting (22) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 16.7s\n", + "Downloading 100%\n", + "Extracting (22) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 16.8s\n", + "Downloading 100%\n", + "Extracting (22) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 16.9s\n", + "Downloading 100%\n", + "Extracting (22) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 17.0s\n", + "Downloading 100%\n", + "Extracting (22) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 17.1s\n", + "Downloading 100%\n", + "Extracting (22) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 17.2s\n", + "Downloading 100%\n", + "Extracting (22) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 17.3s\n", + "Downloading 100%\n", + "Extracting (22) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 17.4s\n", + "Downloading 100%\n", + "Extracting (22) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 17.5s\n", + "Downloading 100%\n", + "Extracting (22) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 17.6s\n", + "Downloading 100%\n", + "Extracting (22) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 17.7s\n", + "Downloading 100%\n", + "Extracting (21) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 17.8s\n", + "Downloading 100%\n", + "Extracting (21) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 17.9s\n", + "Downloading 100%\n", + "Extracting (20) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 18.0s\n", + "Downloading 100%\n", + "Extracting (19) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 18.1s\n", + "Downloading 100%\n", + "Extracting (19) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 18.2s\n", + "Downloading 100%\n", + "Extracting (19) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 18.3s\n", + "Downloading 100%\n", + "Extracting (18) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 18.4s\n", + "Downloading 100%\n", + "Extracting (18) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 18.5s\n", + "Downloading 100%\n", + "Extracting (17) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 18.6s\n", + "Downloading 100%\n", + "Extracting (17) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 18.7s\n", + "Downloading 100%\n", + "Extracting (17) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 18.8s\n", + "Downloading 100%\n", + "Extracting (17) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 18.9s\n", + "Downloading 100%\n", + "Extracting (16) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 19.0s\n", + "Downloading 100%\n", + "Extracting (16) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 19.1s\n", + "Downloading 100%\n", + "Extracting (16) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 19.2s\n", + "Downloading 100%\n", + "Extracting (15) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 19.3s\n", + "Downloading 100%\n", + "Extracting (15) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 19.4s\n", + "Downloading 100%\n", + "Extracting (15) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 19.5s\n", + "Downloading 100%\n", + "Extracting (14) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 19.6s\n", + "Downloading 100%\n", + "Extracting (13) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 19.7s\n", + "Downloading 100%\n", + "Extracting (13) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 19.8s\n", + "Downloading 100%\n", + "Extracting (12) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 19.9s\n", + "Downloading 100%\n", + "Extracting (12) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 20.0s\n", + "Downloading 100%\n", + "Extracting (11) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 20.1s\n", + "Downloading 100%\n", + "Extracting (11) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 20.2s\n", + "Downloading 100%\n", + "Extracting (11) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 20.3s\n", + "Downloading 100%\n", + "Extracting (11) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 20.4s\n", + "Downloading 100%\n", + "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 20.5s\n", + "Downloading 100%\n", + "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 20.6s\n", + "Downloading 100%\n", + "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 20.7s\n", + "Downloading 100%\n", + "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 20.8s\n", + "Downloading 100%\n", + "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 20.9s\n", + "Downloading 100%\n", + "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 21.0s\n", + "Downloading 100%\n", + "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 21.1s\n", + "Downloading 100%\n", + "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 21.2s\n", + "Downloading 100%\n", + "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 21.3s\n", + "Downloading 100%\n", + "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 21.4s\n", + "Downloading 100%\n", + "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 21.5s\n", + "Downloading 100%\n", + "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 21.6s\n", + "Downloading 100%\n", + "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 21.7s\n", + "Downloading 100%\n", + "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 21.8s\n", + "Downloading 100%\n", + "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 21.9s\n", + "Downloading 100%\n", + "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 22.0s\n", + "Downloading 100%\n", + "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 22.1s\n", + "Downloading 100%\n", + "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 22.2s\n", + "Downloading 100%\n", + "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 22.3s\n", + "Downloading 100%\n", + "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 22.4s\n", + "Downloading 100%\n", + "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 22.5s\n", + "Downloading 100%\n", + "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 22.6s\n", + "Downloading 100%\n", + "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 22.7s\n", + "Downloading 100%\n", + "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 22.8s\n", + "Downloading 100%\n", + "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 22.9s\n", + "Downloading 100%\n", + "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 23.0s\n", + "Downloading 100%\n", + "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 23.1s\n", + "Downloading 100%\n", + "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 23.2s\n", + "Downloading 100%\n", + "Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 23.3s\n", + "Downloading 100%\n", + "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 23.4s\n", + "Downloading 100%\n", + "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 23.5s\n", + "Downloading 100%\n", + "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 23.6s\n", + "Downloading 100%\n", + "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 23.7s\n", + "Downloading 100%\n", + "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 23.8s\n", + "Downloading 100%\n", + "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 23.9s\n", + "Downloading 100%\n", + "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 24.0s\n", + "Downloading 100%\n", + "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 24.1s\n", + "Downloading 100%\n", + "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 24.2s\n", + "Downloading 100%\n", + "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 24.3s\n", + "Downloading 100%\n", + "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 24.4s\n", + "Downloading 100%\n", + "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 24.5s\n", + "Downloading 100%\n", + "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 24.6s\n", + "Downloading 100%\n", + "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 24.7s\n", + "Downloading 100%\n", + "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 24.8s\n", + "Downloading 100%\n", + "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 24.9s\n", + "Downloading 100%\n", + "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 25.0s\n", + "Downloading 100%\n", + "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 25.1s\n", + "Downloading 100%\n", + "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 25.2s\n", + "Downloading 100%\n", + "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 25.3s\n", + "Downloading 100%\n", + "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 25.4s\n", + "Downloading 100%\n", + "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 25.5s\n", + "Downloading 100%\n", + "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 25.6s\n", + "Downloading 100%\n", + "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 25.7s\n", + "Downloading 100%\n", + "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 25.8s\n", + "Downloading 100%\n", + "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 25.9s\n", + "Downloading 100%\n", + "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 26.0s\n", + "Downloading 100%\n", + "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 26.1s\n", + "Downloading 100%\n", + "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 26.2s\n", + "Downloading 100%\n", + "Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 26.3s\n", + "Downloading 100%\n", + "Extracting (8) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 26.4s\n", + "Downloading 100%\n", + "Extracting (8) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 26.5s\n", + "Downloading 100%\n", + "Extracting (8) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 26.6s\n", + "Downloading 100%\n", + "Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 26.7s\n", + "Downloading 100%\n", + "Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 26.8s\n", + "Downloading 100%\n", + "Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 26.9s\n", + "Downloading 100%\n", + "Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 27.0s\n", + "Downloading 100%\n", + "Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 27.1s\n", + "Downloading 100%\n", + "Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 27.2s\n", + "Downloading 100%\n", + "Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 27.3s\n", + "Downloading 100%\n", + "Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 27.4s\n", + "Downloading 100%\n", + "Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 27.5s\n", + "Downloading 100%\n", + "Extracting (5) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 27.6s\n", + "Downloading 100%\n", + "Extracting (5) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 27.7s\n", + "Downloading 100%\n", + "Extracting (5) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 27.8s\n", + "Downloading 100%\n", + "Extracting (5) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 27.9s\n", + "Downloading 100%\n", + "Extracting (5) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 28.0s\n", + "Downloading 100%\n", + "Extracting (5) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 28.1s\n", + "Downloading 100%\n", + "Extracting (4) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 28.2s\n", + "Downloading 100%\n", + "Extracting (4) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 28.3s\n", + "Downloading 100%\n", + "Extracting (4) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 28.4s\n", + "Downloading 100%\n", + "Extracting (4) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 28.5s\n", + "Downloading 100%\n", + "Extracting (4) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 28.6s\n", + "Downloading 100%\n", + "Extracting (4) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 28.7s\n", + "Downloading 100%\n", + "Extracting (4) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 28.8s\n", + "Downloading 100%\n", + "Extracting (4) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 28.9s\n", + "Downloading 100%\n", + "Extracting (4) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 29.0s\n", + "Downloading 100%\n", + "Extracting (4) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 29.1s\n", + "Downloading 100%\n", + "Extracting (4) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 29.2s\n", + "Downloading 100%\n", + "Extracting (4) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 29.3s\n", + "Downloading 100%\n", + "Extracting (4) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 29.4s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 29.5s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 29.6s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 29.7s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 29.8s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 29.9s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 30.0s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 30.1s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 30.2s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 30.3s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 30.4s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 30.5s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 30.6s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 30.7s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 30.8s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 30.9s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 31.0s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 31.1s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 31.2s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 31.3s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 31.4s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 31.5s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 31.6s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 31.7s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 31.8s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 31.9s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 32.0s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 32.1s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 32.2s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 32.3s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 32.4s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 32.5s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 32.6s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 32.7s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 32.8s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 32.9s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 33.0s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 33.1s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 33.2s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 33.3s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 33.4s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 33.5s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 33.6s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 33.7s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 33.8s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 33.9s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 34.0s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 34.1s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 34.2s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 34.3s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 34.4s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 34.5s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 34.6s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 34.7s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 34.8s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 34.9s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 35.0s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 35.1s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 35.2s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 35.3s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 35.4s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 35.5s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 35.6s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 35.7s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 35.8s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 35.9s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 36.0s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 36.1s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 36.2s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 36.3s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 36.4s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 36.5s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 36.6s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 36.7s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 36.8s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 36.9s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 37.0s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 37.1s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 37.2s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 37.3s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 37.4s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 37.5s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 37.6s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 37.7s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 37.8s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 37.9s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 38.0s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 38.1s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 38.2s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 38.3s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 38.4s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 38.5s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 38.6s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 38.7s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 38.8s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 38.9s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 39.0s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 39.1s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 39.2s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 39.3s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 39.4s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 39.5s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 39.6s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 39.7s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 39.8s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 39.9s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 40.0s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 40.1s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 40.2s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 40.3s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 40.4s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 40.5s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 40.6s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 40.7s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 40.8s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 40.9s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 41.0s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 41.1s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 41.2s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 41.3s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 41.4s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 41.5s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 41.6s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 41.7s\n", + "Downloading 100%\n", + "Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 41.8s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 41.9s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 42.0s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 42.1s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 42.2s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 42.3s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 42.4s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 42.5s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 42.6s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 42.7s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 42.8s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 42.9s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 43.0s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 43.1s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 43.2s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 43.3s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 43.4s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 43.5s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 43.6s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 43.7s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 43.8s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 43.9s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 44.0s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 44.1s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 44.2s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 44.3s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 44.4s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 44.5s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 44.6s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 44.7s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 44.8s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 44.9s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 45.0s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 45.1s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 45.2s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 45.3s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 45.4s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 45.5s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 45.6s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 45.7s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 45.8s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 45.9s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 46.0s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 46.1s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 46.2s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 46.3s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 46.4s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 46.5s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 46.6s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 46.7s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 46.8s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 46.9s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 47.0s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 47.1s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 47.2s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 47.3s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 47.4s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 47.5s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 47.6s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 47.7s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 47.8s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 47.9s\n", + "Downloading 100%\n", + "Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 48.0s\n", + "Downloading 100%\n", + "Extracting (1) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 48.1s\n", + "Downloading 100%\n", + "Extracting (1) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 48.2s\n", + "Downloading 100%\n", + "Extracting (1) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 48.3s\n", + "Downloading 100%\n", + "Extracting (1) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 48.4s\n", + "Downloading 100%\n", + "Extracting (1) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 48.5s\n", + "Downloading 100%\n", + "Extracting (1) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 48.6s\n", + "Downloading 100%\n", + "Extracting (1) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 48.7s\n", + "Downloading 100%\n", + "Extracting (1) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 48.8s\n", + "Downloading 100%\n", + "Extracting (1) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 48.9s\n", + "Downloading 100%\n", + "Extracting (1) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 49.0s\n", + "Downloading 100%\n", + "Extracting (1) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 49.1s\n", + "Downloading 100%\n", + "Extracting (1) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 49.2s\n", + "Downloading 100%\n", + "Extracting (1) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 49.3s\n", + "Downloading 100%\n", + "Extracting (1) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 49.4s\n", + "Downloading 100%\n", + "Extracting 100%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G\u001b[?25hLinking _libgcc_mutex-0.1-main\n", + "Linking libstdcxx-ng-11.2.0-h1234567_1\n", + "Linking ld_impl_linux-64-2.38-h1181459_1\n", + "Linking ca-certificates-2024.3.11-h06a4308_0\n", + "Linking libgomp-11.2.0-h1234567_1\n", + "Linking _openmp_mutex-5.1-1_gnu\n", + "Linking libgcc-ng-11.2.0-h1234567_1\n", + "Linking yaml-0.1.7-had09818_2\n", + "Linking libuuid-1.41.5-h5eee18b_0\n", + "Linking gmp-6.2.1-h295c915_3\n", + "Linking ncurses-6.4-h6a678d5_0\n", + "Linking bzip2-1.0.8-h5eee18b_6\n", + "Linking libev-4.33-h7f8727e_1\n", + "Linking c-ares-1.19.1-h5eee18b_0\n", + "Linking libiconv-1.16-h5eee18b_3\n", + "Linking libffi-3.4.4-h6a678d5_1\n", + "Linking xz-5.4.6-h5eee18b_1\n", + "Linking zlib-1.2.13-h5eee18b_1\n", + "Linking openssl-1.1.1w-h7f8727e_0\n", + "Linking libxcb-1.15-h7f8727e_0\n", + "Linking jpeg-9e-h5eee18b_1\n", + "Linking icu-58.2-he6710b0_3\n", + "Linking expat-2.6.2-h6a678d5_0\n", + "Linking libedit-3.1.20230828-h5eee18b_0\n", + "Linking readline-8.2-h5eee18b_0\n", + "Linking tk-8.6.14-h39e8969_0\n", + "Linking pcre2-10.42-hebb0a14_1\n", + "Linking libpng-1.6.39-h5eee18b_0\n", + "Linking libssh2-1.10.0-h37d81fd_2\n", + "Linking libnghttp2-1.52.0-ha637b67_1\n", + "Linking krb5-1.20.1-h568e23c_1\n", + "Linking sqlite-3.45.3-h5eee18b_0\n", + "Linking ruby-2.5.1-haf1161a_0\n", + "Linking libglib-2.78.4-hdc74915_0\n", + "Linking freetype-2.12.1-h4a9f257_0\n", + "Linking libcurl-8.2.1-h91b91d3_0\n", + "Linking python-3.7.16-h7a1cb2a_0\n", + "Linking wheel-0.38.4-py37h06a4308_0\n", + "Linking glib-tools-2.78.4-h6a678d5_0\n", + "Linking curl-8.2.1-h37d81fd_0\n", + "Linking certifi-2022.12.7-py37h06a4308_0\n", + "Linking libgit2-1.6.4-ha637b67_0\n", + "Linking setuptools-65.6.3-py37h06a4308_0\n", + "Linking pip-22.3.1-py37h06a4308_0\n", + "Linking glib-2.78.4-h6a678d5_0\n", + "Linking gstreamer-1.14.1-h5eee18b_1\n", + "Linking dbus-1.13.18-hb2f20db_0\n", + "Linking gst-plugins-base-1.14.1-h6a678d5_1\n", + "Linking libxml2-2.9.9-20220706_155948\n", + "Linking fontconfig-2.13.0-h9420a91_0\n", + "Linking qt-5.9.7-h5867ecd_1\n", + "Linking klayout-0.28.17_212_gfa14afbbf-20240223_100318_py37\n", + "\n", + "Transaction finished\n", + "\n", + "To activate this environment, use:\n", + "\n", + " micromamba activate /content/conda-env\n", + "\n", + "Or to execute a single command in this environment, use:\n", + "\n", + " micromamba run -p /content/conda-env mycommand\n", + "\n" + ] + } + ], + "source": [ + "# Setup the environment for the OpenFASOC GDSFactory generator\n", + "# You only need to run this block once!\n", + "\n", + "# Clone OpenFASoC\n", + "!git clone https://github.com/idea-fasoc/OpenFASOC\n", + "# Install python dependencies\n", + "!pip install sky130\n", + "!pip install gf180 prettyprinttree svgutils\n", + "!pip install gdsfactory==7.7.0\n", + "\n", + "import pathlib\n", + "import os\n", + "# Install KLayout (via conda)\n", + "!curl -Ls https://micro.mamba.pm/api/micromamba/linux-64/latest | tar -xvj bin/micromamba\n", + "conda_prefix_path = pathlib.Path('conda-env')\n", + "CONDA_PREFIX = str(conda_prefix_path.resolve())\n", + "%env CONDA_PREFIX={CONDA_PREFIX}\n", + "\n", + "!bin/micromamba create --yes --prefix $CONDA_PREFIX\n", + "# Install from the litex-hub channel\n", + "!bin/micromamba install --yes --prefix $CONDA_PREFIX \\\n", + " --channel litex-hub \\\n", + " --channel main \\\n", + " klayout\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "B6dO3W3m8TQZ" + }, + "source": [ + "#### 1.2. Adding the `klayout` binary to the system path, then goto the GLayout directory\n", + "**You need to run this each time you restart the kernel**" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "id": "Izl4QURo8TQa", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "40d0a93b-7d99-410f-8fd6-ff25a830f507" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "env: CONDA_PREFIX=/content/conda-env\n", + "env: PATH=/opt/bin:/usr/local/nvidia/bin:/usr/local/cuda/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/tools/node/bin:/tools/google-cloud-sdk/bin:/content/conda-env/bin\n", + "/content/OpenFASOC/openfasoc/generators/glayout\n" + ] + } + ], + "source": [ + "# Setup the environment for the OpenFASOC GDSFactory generator\n", + "\n", + "# Adding micro-mamba binary directory to the PATH\n", + "# This directory contains Klayout\n", + "import pathlib\n", + "import os\n", + "conda_prefix_path = pathlib.Path('conda-env')\n", + "CONDA_PREFIX = str(conda_prefix_path.resolve())\n", + "%env CONDA_PREFIX={CONDA_PREFIX}\n", + "# Add conda packages to the PATH\n", + "PATH = os.environ['PATH']\n", + "%env PATH={PATH}:{CONDA_PREFIX}/bin\n", + "\n", + "%cd /content/OpenFASOC/openfasoc/generators/glayout" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "e-sbwZb_8TQb" + }, + "source": [ + "#### 1.3. Importing Libraries and Utility Functions" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "id": "Nc7wGAz68TQb" + }, + "outputs": [], + "source": [ + "from glayout.flow.pdk.sky130_mapped import sky130_mapped_pdk as sky130\n", + "from glayout.flow.pdk.gf180_mapped import gf180_mapped_pdk as gf180\n", + "import gdstk\n", + "import svgutils.transform as sg\n", + "import IPython.display\n", + "from IPython.display import clear_output\n", + "import ipywidgets as widgets\n", + "\n", + "# Redirect all outputs here\n", + "hide = widgets.Output()\n", + "\n", + "def display_gds(gds_file, scale = 3):\n", + " # Generate an SVG image\n", + " top_level_cell = gdstk.read_gds(gds_file).top_level()[0]\n", + " top_level_cell.write_svg('out.svg')\n", + " # Scale the image for displaying\n", + " fig = sg.fromfile('out.svg')\n", + " fig.set_size((str(float(fig.width) * scale), str(float(fig.height) * scale)))\n", + " fig.save('out.svg')\n", + "\n", + " # Display the image\n", + " IPython.display.display(IPython.display.SVG('out.svg'))\n", + "\n", + "def display_component(component, scale = 3):\n", + " # Save to a GDS file\n", + " with hide:\n", + " component.write_gds(\"out.gds\")\n", + " display_gds('out.gds', scale)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ywJ1Xc5K395z" + }, + "source": [ + "# Introduction to GLayout\n", + "\n", + "## Overview\n", + "\n", + "This document provides a detailed tutorial on using the GLayout API.\n", + "\n", + "## Prerequisites\n", + "\n", + "Ensure that you have the following installed:\n", + "- Python environment with access to GLayout API.\n", + "- GDSFactory package for handling generic layout components.\n", + "- A PDK (Process Design Kit) appropriate for the technology node you're working on\n", + "\n", + "## GLayers\n", + "Processes often have a shared set of layers. We access these layers using generic layers.\n", + "We support\n", + "1. n well\n", + "2. n/p select\n", + "3. diffusion\n", + "4. poly\n", + "5. metal 1\n", + "6. metal 2\n", + "7. metal 3\n", + "8. Mcon\n", + "9. via 1\n", + "10. via 2\n", + "\n", + "As you can see in the following code examples we use `pdk.get_glayer()` in order to get a tuple associated with a layer.\n", + "\n", + "This tuple associated the generic layer with a PDK's layer." + ] + }, + { + "cell_type": "code", + "source": [ + "sky130_met1 = sky130.get_glayer(\"met1\")\n", + "gf180_met1 = gf180.get_glayer(\"met1\")\n", + "print(sky130_met1)\n", + "print(gf180_met1)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "doswEocb2Wyg", + "outputId": "46af4bc6-0fde-4f09-9055-80246ef750e6" + }, + "execution_count": 10, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "(67, 20)\n", + "(34, 0)\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "## GRules\n", + "GRules is how you access layout rules for a layer.\n", + "\n", + "### Examples\n", + "1. Remember the via example? In that example we wanted to access the minimum width of a via\n", + "2. In the via example we want to find the minimum enclosure of a via inside of a metal contact.\n", + "3. When you want to space two metal tracks\n" + ], + "metadata": { + "id": "8e_EKnZD6MLY" + } + }, + { + "cell_type": "code", + "source": [ + "# Minimum width for a via example\n", + "min_width_via1 = sky130.get_grule('via1')['min_width']\n", + "print(f\"min width for via: {min_width_via1}\")" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "gKlMrabr7Skw", + "outputId": "6ffc85c1-e72f-4418-cb53-435a89582a78" + }, + "execution_count": 26, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "min width for via: 0.17\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# Minimum Enclosure Example\n", + "# Lets do it for sky 130\n", + "min_enc_met1 = sky130.get_grule('via1','met1')['min_enclosure']\n", + "min_enc_met2 = sky130.get_grule('via1','met2')['min_enclosure']\n", + "print(\"Sky130\")\n", + "print(f\"min enclosure metal1 and via: {min_enc_met1}\")\n", + "print(f\"min enclosure metal2 and via: {min_enc_met2}\")\n", + "\n", + "# Lets do the same for gf180\n", + "min_enc_met1 = gf180.get_grule('via1','met1')['min_enclosure']\n", + "min_enc_met2 = gf180.get_grule('via1','met2')['min_enclosure']\n", + "print(\"Gf180\")\n", + "print(f\"min enclosure metal1 and via: {min_enc_met1}\")\n", + "print(f\"min enclosure metal1 and via: {min_enc_met2}\")" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "GaSgRFeR9A0Q", + "outputId": "e5b62b08-81d6-412a-d64c-5a37f9669cb8" + }, + "execution_count": 27, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Sky130\n", + "min enclosure metal1 and via: 0.0\n", + "min enclosure metal2 and via: 0.06\n", + "Gf180\n", + "min enclosure metal1 and via: 0.12\n", + "min enclosure metal1 and via: 0.12\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# Minimum Spacing Example\n", + "min_met1_spacing = sky130.get_grule('met1','met1')['min_separation']\n", + "print(f\"min spacing between metal: {min_met1_spacing}\")" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "EODOFqGq9DIr", + "outputId": "9c75276e-a09c-4de3-9612-98458f379573" + }, + "execution_count": 30, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "min spacing between metal: 0.17\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "## Drawing layouts\n", + "We draw rectangles for layers using gdsfactory\n", + "For now, lets use the rules we just used to make a very simple metal rectangle. Here we have an example where we draw a simple metal track." + ], + "metadata": { + "id": "HBKDwtNG94OC" + } + }, + { + "cell_type": "code", + "source": [ + "from glayout.flow.pdk.mappedpdk import MappedPDK\n", + "from gdsfactory import Component\n", + "from gdsfactory.components import rectangle\n", + "\n", + "def makeMet1Rectangle(pdk: MappedPDK, length):\n", + " met1 = pdk.get_glayer(\"met1\")\n", + " met1_width = pdk.get_grule(\"met1\")[\"min_width\"]\n", + " top_level = Component(name=\"metal_track\")\n", + " top_level << rectangle(size=(length, met1_width), layer=met1)\n", + " return top_level\n", + "\n", + "metalTrack = makeMet1Rectangle(sky130,3)\n", + "metalTrack.write_gds('metaltrack.gds')\n", + "display_gds('metaltrack.gds',scale=20)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 134 + }, + "id": "pfvH6W3T-US7", + "outputId": "002b6605-ce98-4e2a-f35d-b147ce762c8f" + }, + "execution_count": 41, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "\u001b[32m2024-06-19 19:37:26.658\u001b[0m | \u001b[1mINFO \u001b[0m | \u001b[36mgdsfactory.component\u001b[0m:\u001b[36m_write_library\u001b[0m:\u001b[36m1851\u001b[0m - \u001b[1mWrote to 'metaltrack.gds'\u001b[0m\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "image/svg+xml": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "## Using and Manipulating Components\n", + "In the previous section, we made a component that just consists of a metal track. Now lets use this component to make other components. This is called hierarchal design. Here we introduce the `evaluate_bbox` and `movey`\n" + ], + "metadata": { + "id": "HZdmO-LOAVwV" + } + }, + { + "cell_type": "code", + "source": [ + "from glayout.flow.pdk.util.comp_utils import evaluate_bbox\n", + "\n", + "def makeAdjacentMetal1Tracks(pdk: MappedPDK, length):\n", + " track1 = makeMet1Rectangle(pdk, length)\n", + " track2 = makeMet1Rectangle(pdk, length)\n", + " top_level = Component(name=\"adjacent_metal_tracks\")\n", + " track1_ref = top_level << track1\n", + " track2_ref = top_level << track2\n", + " width = evaluate_bbox(track1)[1] # gets the dimension on the y axis\n", + " track2_ref.movey(width + pdk.get_grule('met1','met1')['min_separation'])\n", + " return top_level\n", + "\n", + "adjMetalTrack = makeAdjacentMetal1Tracks(sky130,3)\n", + "adjMetalTrack.write_gds('adjmetaltrack.gds')\n", + "display_gds('adjmetaltrack.gds',scale=20)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 202 + }, + "id": "9uhSsJk5BQoT", + "outputId": "e2568734-0706-4c4d-e338-017d9f2df70f" + }, + "execution_count": 48, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "\u001b[32m2024-06-19 20:00:37.397\u001b[0m | \u001b[1mINFO \u001b[0m | \u001b[36mgdsfactory.component\u001b[0m:\u001b[36m_write_library\u001b[0m:\u001b[36m1851\u001b[0m - \u001b[1mWrote to 'adjmetaltrack.gds'\u001b[0m\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "image/svg+xml": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "## Primitives\n", + "GLayout provides many primitives that you can use instead of doing everything from the bottom up. You can find all of the primitives [here](https://github.com/idea-fasoc/OpenFASOC/tree/main/openfasoc/generators/glayout/glayout/flow/primitives)\n", + "I will place a pmos and a nmos side by side in the example below:" + ], + "metadata": { + "id": "2ltByHycDMf2" + } + }, + { + "cell_type": "code", + "source": [ + "from glayout.flow.primitives.fet import pmos\n", + "from glayout.flow.primitives.fet import nmos\n", + "\n", + "def placeTwoTrasistors(pdk):\n", + " pfet = pmos(pdk)\n", + " nfet = nmos(pdk)\n", + " top_level = Component()\n", + " pfet_ref = top_level << pfet\n", + " nfet_ref = top_level << nfet\n", + " compSep = pdk.util_max_metal_seperation()\n", + " nfet_ref.movex(compSep + evaluate_bbox(pfet)[0])\n", + " return top_level\n", + "\n", + "twoTransistors = placeTwoTrasistors(sky130)\n", + "twoTransistors.write_gds('twotransistors.gds')\n", + "display_gds('twotransistors.gds',scale=2)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 296 + }, + "id": "LDRd54mjEfpz", + "outputId": "ef17c6b1-4d2a-45e5-dcaa-59fb9a24eb4c" + }, + "execution_count": 53, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + ":15: UserWarning: Unnamed cells, 3 in 'Unnamed_2f8a1aac'\n", + " twoTransistors.write_gds('twotransistors.gds')\n", + "\u001b[32m2024-06-19 20:04:32.294\u001b[0m | \u001b[1mINFO \u001b[0m | \u001b[36mgdsfactory.component\u001b[0m:\u001b[36m_write_library\u001b[0m:\u001b[36m1851\u001b[0m - \u001b[1mWrote to 'twotransistors.gds'\u001b[0m\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "image/svg+xml": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "## Routing and Ports\n", + "How do we connect the ports of transistors. In this section we'll make a current mirror" + ], + "metadata": { + "id": "Y2DYHIcdHUpw" + } + }, + { + "cell_type": "code", + "source": [ + "from glayout.flow.routing.straight_route import straight_route\n", + "from glayout.flow.routing.c_route import c_route\n", + "\n", + "def currentMirror(pdk: MappedPDK):\n", + " currMirrComp = Component()\n", + " pfet_ref = pmos(pdk, with_substrate_tap=False, with_dummy=(False, True))\n", + " pfet_mir = pmos(pdk, with_substrate_tap=False, with_dummy=(True, False))\n", + " cref_ref = currMirrComp << pfet_ref\n", + " cmir_ref = currMirrComp << pfet_mir\n", + " cref_ref.movex(evaluate_bbox(pfet_mir)[0] + pdk.util_max_metal_seperation())\n", + " currMirrComp << straight_route(pdk, cref_ref.ports[\"multiplier_0_source_E\"], cmir_ref.ports[\"multiplier_0_source_E\"])\n", + " currMirrComp << straight_route(pdk, cref_ref.ports[\"multiplier_0_gate_E\"], cmir_ref.ports[\"multiplier_0_gate_E\"])\n", + " currMirrComp << c_route(pdk, cref_ref.ports[\"multiplier_0_drain_E\"], cref_ref.ports[\"multiplier_0_gate_E\"])\n", + " return currMirrComp\n", + "\n", + "currentMirror(sky130).write_gds(\"cmirror_example.gds\")\n", + "display_gds(\"cmirror_example.gds\")" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 324 + }, + "id": "hBw2fYboQvMD", + "outputId": "6923efe5-2408-4f14-f3e7-2e7f1f8a78db" + }, + "execution_count": 57, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + ":16: UserWarning: Unnamed cells, 3 in 'Unnamed_79c3280c'\n", + " currentMirror(sky130).write_gds(\"cmirror_example.gds\")\n", + "\u001b[32m2024-06-19 20:52:07.345\u001b[0m | \u001b[1mINFO \u001b[0m | \u001b[36mgdsfactory.component\u001b[0m:\u001b[36m_write_library\u001b[0m:\u001b[36m1851\u001b[0m - \u001b[1mWrote to 'cmirror_example.gds'\u001b[0m\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "image/svg+xml": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" + }, + "metadata": {} + } + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "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.11.7" + }, + "vscode": { + "interpreter": { + "hash": "397704579725e15f5c7cb49fe5f0341eb7531c82d19f2c29d197e8b64ab5776b" + } + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file