{"cells":[{"cell_type":"code","execution_count":1,"metadata":{"id":"5Erad3DSkG3R","collapsed":true,"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1767762407823,"user_tz":480,"elapsed":6632,"user":{"displayName":"navin shrivatsan","userId":"02096111809868742973"}},"outputId":"212a5b27-05d9-4e2e-c186-4a8b152ee873"},"outputs":[{"output_type":"stream","name":"stdout","text":["bin/micromamba\n","2.4.0\n"]}],"source":["!wget -qO micromamba.tar.bz2 https://micromamba.snakepit.net/api/micromamba/linux-64/latest\n","!tar -xvjf micromamba.tar.bz2 bin/micromamba\n","!mv bin/micromamba /usr/local/bin/\n","!rm -rf bin micromamba.tar.bz2\n","!micromamba --version"]},{"cell_type":"code","execution_count":2,"metadata":{"id":"kZu8VYCmaEso","collapsed":true,"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1767762425879,"user_tz":480,"elapsed":18054,"user":{"displayName":"navin shrivatsan","userId":"02096111809868742973"}},"outputId":"362a96e7-e639-4c5f-f1a7-d67919b84c82"},"outputs":[{"output_type":"stream","name":"stdout","text":["\u001b[?25l\u001b[2K\u001b[0G\u001b[?25h\u001b[?25l\u001b[2K\u001b[0G[+] 0.0s\n","\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.1s\n","conda-forge/linux-64 1%\n","conda-forge/noarch ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.2s\n","conda-forge/linux-64 18%\n","conda-forge/noarch 10%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.3s\n","conda-forge/linux-64 30%\n","conda-forge/noarch 34%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.4s\n","conda-forge/linux-64 42%\n","conda-forge/noarch 58%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.5s\n","conda-forge/linux-64 54%\n","conda-forge/noarch 82%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.6s\n","conda-forge/linux-64 62%\n","conda-forge/noarch 91%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gconda-forge/noarch \n","[+] 0.7s\n","conda-forge/linux-64 64%\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.8s\n","conda-forge/linux-64 76%\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.9s\n","conda-forge/linux-64 98%\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 1.0s\n","conda-forge/linux-64 98%\u001b[2K\u001b[1A\u001b[2K\u001b[0Gconda-forge/linux-64 \n","\u001b[?25h\n","\n","Transaction\n","\n"," Prefix: /root/.local/share/mamba/envs/partfield\n","\n"," Updating specs:\n","\n"," - python=3.10\n","\n","\n"," Package Version Build Channel Size\n","─────────────────────────────────────────────────────────────────────────────\n"," Install:\n","─────────────────────────────────────────────────────────────────────────────\n","\n"," \u001b[32m+ _libgcc_mutex \u001b[0m 0.1 conda_forge conda-forge 3kB\n"," \u001b[32m+ _openmp_mutex \u001b[0m 4.5 2_gnu conda-forge 24kB\n"," \u001b[32m+ bzip2 \u001b[0m 1.0.8 hda65f42_8 conda-forge 260kB\n"," \u001b[32m+ ca-certificates \u001b[0m 2026.1.4 hbd8a1cb_0 conda-forge 147kB\n"," \u001b[32m+ icu \u001b[0m 78.1 h33c6efd_0 conda-forge 13MB\n"," \u001b[32m+ ld_impl_linux-64\u001b[0m 2.45 default_hbd61a6d_105 conda-forge 731kB\n"," \u001b[32m+ libexpat \u001b[0m 2.7.3 hecca717_0 conda-forge 77kB\n"," \u001b[32m+ libffi \u001b[0m 3.5.2 h9ec8514_0 conda-forge 58kB\n"," \u001b[32m+ libgcc \u001b[0m 15.2.0 he0feb66_16 conda-forge 1MB\n"," \u001b[32m+ libgcc-ng \u001b[0m 15.2.0 h69a702a_16 conda-forge 27kB\n"," \u001b[32m+ libgomp \u001b[0m 15.2.0 he0feb66_16 conda-forge 603kB\n"," \u001b[32m+ liblzma \u001b[0m 5.8.1 hb9d3cd8_2 conda-forge 113kB\n"," \u001b[32m+ libnsl \u001b[0m 2.0.1 hb9d3cd8_1 conda-forge 34kB\n"," \u001b[32m+ libsqlite \u001b[0m 3.51.1 hf4e2dac_1 conda-forge 943kB\n"," \u001b[32m+ libstdcxx \u001b[0m 15.2.0 h934c35e_16 conda-forge 6MB\n"," \u001b[32m+ libuuid \u001b[0m 2.41.3 h5347b49_0 conda-forge 40kB\n"," \u001b[32m+ libxcrypt \u001b[0m 4.4.36 hd590300_1 conda-forge 100kB\n"," \u001b[32m+ libzlib \u001b[0m 1.3.1 hb9d3cd8_2 conda-forge 61kB\n"," \u001b[32m+ ncurses \u001b[0m 6.5 h2d0b736_3 conda-forge 892kB\n"," \u001b[32m+ openssl \u001b[0m 3.6.0 h26f9b46_0 conda-forge 3MB\n"," \u001b[32m+ pip \u001b[0m 25.3 pyh8b19718_0 conda-forge 1MB\n"," \u001b[32m+ python \u001b[0m 3.10.19 h3c07f61_2_cpython conda-forge 25MB\n"," \u001b[32m+ readline \u001b[0m 8.3 h853b02a_0 conda-forge 345kB\n"," \u001b[32m+ setuptools \u001b[0m 80.9.0 pyhff2d567_0 conda-forge 749kB\n"," \u001b[32m+ tk \u001b[0m 8.6.13 noxft_ha0e22de_103 conda-forge 3MB\n"," \u001b[32m+ tzdata \u001b[0m 2025c hc9c84f9_1 conda-forge 119kB\n"," \u001b[32m+ wheel \u001b[0m 0.45.1 pyhd8ed1ab_1 conda-forge 63kB\n"," \u001b[32m+ zstd \u001b[0m 1.5.7 hb78ec9c_6 conda-forge 601kB\n","\n"," Summary:\n","\n"," Install: 28 packages\n","\n"," Total download: 59MB\n","\n","─────────────────────────────────────────────────────────────────────────────\n","\n","\n","\n","Transaction starting\n","\u001b[?25l\u001b[2K\u001b[0G[+] 0.0s\n","Downloading 5%\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[0Gopenssl 3.2MB @ 21.6MB/s 0.1s\n","tk 3.3MB @ 1.7MB/s 0.1s\n","libstdcxx 5.9MB @ 34.3MB/s 0.1s\n","pip 1.2MB @ ??.?MB/s 0.1s\n","libgcc 1.0MB @ ??.?MB/s 0.0s\n","libsqlite 943.5kB @ ??.?MB/s 0.1s\n","[+] 0.2s\n","Downloading (5) 59%\n","Extracting (5) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gsetuptools 748.8kB @ ??.?MB/s 0.0s\n","ncurses 891.6kB @ ??.?MB/s 0.0s\n","ld_impl_linux-64 730.8kB @ ??.?MB/s 0.0s\n","libgomp 603.3kB @ ??.?MB/s 0.0s\n","zstd 601.4kB @ ??.?MB/s 0.0s\n","readline 345.1kB @ ??.?MB/s 0.0s\n","icu 12.7MB @ 48.2MB/s 0.2s\n","ca-certificates 146.5kB @ ??.?MB/s 0.0s\n","bzip2 260.3kB @ 5.2MB/s 0.1s\n","[+] 0.3s\n","Downloading (5) 86%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gliblzma 112.9kB @ ??.?MB/s 0.0s\n","tzdata 119.1kB @ ??.?MB/s 0.1s\n","libexpat 76.6kB @ ??.?MB/s 0.0s\n","libxcrypt 100.4kB @ ??.?MB/s 0.1s\n","libzlib 61.0kB @ ??.?MB/s 0.0s\n","wheel 62.9kB @ ??.?MB/s 0.1s\n","libuuid 40.3kB @ ??.?MB/s 0.0s\n","libnsl 33.7kB @ ??.?MB/s 0.0s\n","libffi 57.8kB @ ??.?MB/s 0.1s\n","[+] 0.4s\n","Downloading (4) 98%\n","Extracting (4) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G_openmp_mutex 23.6kB @ ??.?MB/s 0.0s\n","libgcc-ng 27.3kB @ ??.?MB/s 0.1s\n","_libgcc_mutex 2.6kB @ ??.?MB/s 0.0s\n","python 25.3MB @ 59.3MB/s 0.4s\n","[+] 0.5s\n","Downloading 100%\n","Extracting 97%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.6s\n","Downloading 100%\n","Extracting (1) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.7s\n","Downloading 100%\n","Extracting (1) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.8s\n","Downloading 100%\n","Extracting (1) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.9s\n","Downloading 100%\n","Extracting (1) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G\u001b[?25hLinking tzdata-2025c-hc9c84f9_1\n","Linking ca-certificates-2026.1.4-hbd8a1cb_0\n","Linking libgomp-15.2.0-he0feb66_16\n","Linking _libgcc_mutex-0.1-conda_forge\n","Linking _openmp_mutex-4.5-2_gnu\n","Linking libgcc-15.2.0-he0feb66_16\n","Linking libstdcxx-15.2.0-h934c35e_16\n","Linking openssl-3.6.0-h26f9b46_0\n","Linking ncurses-6.5-h2d0b736_3\n","Linking libzlib-1.3.1-hb9d3cd8_2\n","Linking libgcc-ng-15.2.0-h69a702a_16\n","Linking libuuid-2.41.3-h5347b49_0\n","Linking libnsl-2.0.1-hb9d3cd8_1\n","Linking liblzma-5.8.1-hb9d3cd8_2\n","Linking libffi-3.5.2-h9ec8514_0\n","Linking libexpat-2.7.3-hecca717_0\n","Linking bzip2-1.0.8-hda65f42_8\n","Linking icu-78.1-h33c6efd_0\n","Linking readline-8.3-h853b02a_0\n","Linking zstd-1.5.7-hb78ec9c_6\n","Linking tk-8.6.13-noxft_ha0e22de_103\n","Linking libxcrypt-4.4.36-hd590300_1\n","Linking libsqlite-3.51.1-hf4e2dac_1\n","Linking ld_impl_linux-64-2.45-default_hbd61a6d_105\n","Linking python-3.10.19-h3c07f61_2_cpython\n","Linking wheel-0.45.1-pyhd8ed1ab_1\n","Linking setuptools-80.9.0-pyhff2d567_0\n","Linking pip-25.3-pyh8b19718_0\n","\n","Transaction finished\n","\n","\n","To activate this environment, use:\n","\n"," micromamba activate partfield\n","\n","Or to execute a single command in this environment, use:\n","\n"," micromamba run -n partfield mycommand\n","\n"]}],"source":["!micromamba create -y -n partfield python=3.10"]},{"cell_type":"code","source":["!micromamba install -n partfield nvidia/label/cuda-12.4.0::cuda-toolkit -c nvidia -c conda-forge -y"],"metadata":{"id":"hqiE1TkaL-Ug","collapsed":true,"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1767762487307,"user_tz":480,"elapsed":61424,"user":{"displayName":"navin shrivatsan","userId":"02096111809868742973"}},"outputId":"2754457f-32ed-4250-9a69-4e49c552c4ce"},"execution_count":3,"outputs":[{"output_type":"stream","name":"stdout","text":["conda-forge/linux-64 Using cache\n","conda-forge/noarch Using cache\n","\u001b[?25l\u001b[2K\u001b[0G[+] 0.0s\n","\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.1s\n","nvidia/label/cuda-.. ⣾ \n","nvidia/label/cuda-.. ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.2s\n","nvidia/label/cuda-.. ⣾ \n","nvidia/label/cuda-.. ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.3s\n","nvidia/label/cuda-.. ⣾ \n","nvidia/label/cuda-.. ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.4s\n","nvidia/label/cuda-.. ⣾ \n","nvidia/label/cuda-.. ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.5s\n","nvidia/label/cuda-.. ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[0G\u001b[?25h\u001b[?25l\u001b[2K\u001b[0G[+] 0.0s\n","\u001b[2K\u001b[1A\u001b[2K\u001b[0Gnvidia/linux-64 309.1kB @ 236.0kB/s 0.0s\n","nvidia/noarch ??.?MB @ ??.?MB/s 0.0s\n","[+] 0.1s\n","nvidia/label/cuda-.. ⣾ \n","nvidia/label/cuda-.. ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.2s\n","nvidia/label/cuda-.. ⣾ \n","nvidia/label/cuda-.. ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.3s\n","nvidia/label/cuda-.. ⣾ \n","nvidia/label/cuda-.. ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gnvidia/label/cuda-12.4.0/linux-64 \n","[+] 0.4s\n","nvidia/label/cuda-.. ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[0Gnvidia/label/cuda-12.4.0/noarch \n","\u001b[?25h\n","Pinned packages:\n","\n"," - python=3.10\n","\n","\n","Transaction\n","\n"," Prefix: /root/.local/share/mamba/envs/partfield\n","\n"," Updating specs:\n","\n"," - nvidia/label/cuda-12.4.0::cuda-toolkit\n","\n","\n"," Package Version Build Channel Size\n","───────────────────────────────────────────────────────────────────────────────────────────────────────\n"," Install:\n","───────────────────────────────────────────────────────────────────────────────────────────────────────\n","\n"," \u001b[32m+ binutils_impl_linux-64 \u001b[0m 2.45 default_hfdba357_105 conda-forge 4MB\n"," \u001b[32m+ binutils_linux-64 \u001b[0m 2.45 default_h4852527_105 conda-forge 36kB\n"," \u001b[32m+ cuda-cccl_linux-64 \u001b[0m 12.9.27 0 nvidia 1MB\n"," \u001b[32m+ cuda-command-line-tools \u001b[0m 12.9.1 0 nvidia 17kB\n"," \u001b[32m+ cuda-compiler \u001b[0m 12.9.1 0 nvidia 17kB\n"," \u001b[32m+ cuda-crt-dev_linux-64 \u001b[0m 12.9.86 0 nvidia 86kB\n"," \u001b[32m+ cuda-crt-tools \u001b[0m 12.9.86 0 nvidia 20kB\n"," \u001b[32m+ cuda-cudart \u001b[0m 12.9.79 0 nvidia 18kB\n"," \u001b[32m+ cuda-cudart-dev \u001b[0m 12.9.79 0 nvidia 18kB\n"," \u001b[32m+ cuda-cudart-dev_linux-64 \u001b[0m 12.9.79 0 nvidia 383kB\n"," \u001b[32m+ cuda-cudart-static \u001b[0m 12.9.79 0 nvidia 18kB\n"," \u001b[32m+ cuda-cudart-static_linux-64\u001b[0m 12.9.79 0 nvidia 1MB\n"," \u001b[32m+ cuda-cudart_linux-64 \u001b[0m 12.9.79 0 nvidia 194kB\n"," \u001b[32m+ cuda-cuobjdump \u001b[0m 12.9.82 1 nvidia 247kB\n"," \u001b[32m+ cuda-cupti \u001b[0m 12.9.79 0 nvidia 2MB\n"," \u001b[32m+ cuda-cupti-dev \u001b[0m 12.9.79 0 nvidia 4MB\n"," \u001b[32m+ cuda-cuxxfilt \u001b[0m 12.9.82 1 nvidia 214kB\n"," \u001b[32m+ cuda-documentation \u001b[0m 12.4.127 0 nvidia 92kB\n"," \u001b[32m+ cuda-driver-dev \u001b[0m 12.9.79 0 nvidia 17kB\n"," \u001b[32m+ cuda-driver-dev_linux-64 \u001b[0m 12.9.79 0 nvidia 32kB\n"," \u001b[32m+ cuda-gdb \u001b[0m 12.9.79 1 nvidia 383kB\n"," \u001b[32m+ cuda-libraries \u001b[0m 12.9.1 0 nvidia 17kB\n"," \u001b[32m+ cuda-libraries-dev \u001b[0m 12.9.1 0 nvidia 17kB\n"," \u001b[32m+ cuda-libraries-static \u001b[0m 12.9.1 0 nvidia 17kB\n"," \u001b[32m+ cuda-nsight \u001b[0m 12.9.79 0 nvidia 119MB\n"," \u001b[32m+ cuda-nvcc \u001b[0m 12.9.86 0 nvidia 17kB\n"," \u001b[32m+ cuda-nvcc-dev_linux-64 \u001b[0m 12.9.86 0 nvidia 14MB\n"," \u001b[32m+ cuda-nvcc-impl \u001b[0m 12.9.86 0 nvidia 20kB\n"," \u001b[32m+ cuda-nvcc-tools \u001b[0m 12.9.86 0 nvidia 27MB\n"," \u001b[32m+ cuda-nvcc_linux-64 \u001b[0m 12.9.86 0 nvidia 20kB\n"," \u001b[32m+ cuda-nvdisasm \u001b[0m 12.9.88 1 nvidia 6MB\n"," \u001b[32m+ cuda-nvml-dev \u001b[0m 12.9.79 1 nvidia 139kB\n"," \u001b[32m+ cuda-nvprof \u001b[0m 12.9.79 0 nvidia 3MB\n"," \u001b[32m+ cuda-nvprune \u001b[0m 12.9.82 1 nvidia 67kB\n"," \u001b[32m+ cuda-nvrtc \u001b[0m 12.9.86 0 nvidia 67MB\n"," \u001b[32m+ cuda-nvrtc-dev \u001b[0m 12.9.86 0 nvidia 31kB\n"," \u001b[32m+ cuda-nvrtc-static \u001b[0m 12.9.86 0 nvidia 57MB\n"," \u001b[32m+ cuda-nvtx \u001b[0m 12.9.79 0 nvidia 25kB\n"," \u001b[32m+ cuda-nvvm-dev_linux-64 \u001b[0m 12.9.86 0 nvidia 18kB\n"," \u001b[32m+ cuda-nvvm-impl \u001b[0m 12.9.86 0 nvidia 21MB\n"," \u001b[32m+ cuda-nvvm-tools \u001b[0m 12.9.86 0 nvidia 24MB\n"," \u001b[32m+ cuda-nvvp \u001b[0m 12.9.79 1 nvidia 118MB\n"," \u001b[32m+ cuda-opencl \u001b[0m 12.9.19 0 nvidia 26kB\n"," \u001b[32m+ cuda-opencl-dev \u001b[0m 12.9.19 0 nvidia 93kB\n"," \u001b[32m+ cuda-profiler-api \u001b[0m 12.9.79 0 nvidia 20kB\n"," \u001b[32m+ cuda-sanitizer-api \u001b[0m 12.9.79 1 nvidia 9MB\n"," \u001b[32m+ cuda-toolkit \u001b[0m 12.4.0 0 nvidia/label/cuda-12.4.0 2kB\n"," \u001b[32m+ cuda-tools \u001b[0m 12.9.1 0 nvidia 17kB\n"," \u001b[32m+ cuda-version \u001b[0m 12.9 3 nvidia 17kB\n"," \u001b[32m+ cuda-visual-tools \u001b[0m 12.9.1 0 nvidia 17kB\n"," \u001b[32m+ dbus \u001b[0m 1.16.2 h24cb091_1 conda-forge 448kB\n"," \u001b[32m+ expat \u001b[0m 2.7.3 hecca717_0 conda-forge 144kB\n"," \u001b[32m+ fontconfig \u001b[0m 2.15.0 h7e30c49_1 conda-forge 266kB\n"," \u001b[32m+ freetype \u001b[0m 2.14.1 ha770c72_0 conda-forge 173kB\n"," \u001b[32m+ gcc_impl_linux-64 \u001b[0m 13.4.0 hf787b08_16 conda-forge 68MB\n"," \u001b[32m+ gcc_linux-64 \u001b[0m 13.4.0 h0a5b801_17 conda-forge 29kB\n"," \u001b[32m+ gds-tools \u001b[0m 1.14.1.1 4 nvidia 40MB\n"," \u001b[32m+ gmp \u001b[0m 6.3.0 hac33072_2 conda-forge 460kB\n"," \u001b[32m+ gxx_impl_linux-64 \u001b[0m 13.4.0 h6a38259_16 conda-forge 14MB\n"," \u001b[32m+ gxx_linux-64 \u001b[0m 13.4.0 h50488e6_17 conda-forge 27kB\n"," \u001b[32m+ kernel-headers_linux-64 \u001b[0m 5.14.0 he073ed8_3 conda-forge 1MB\n"," \u001b[32m+ libcublas \u001b[0m 12.9.1.4 0 nvidia 468MB\n"," \u001b[32m+ libcublas-dev \u001b[0m 12.9.1.4 0 nvidia 89kB\n"," \u001b[32m+ libcublas-static \u001b[0m 12.9.1.4 0 nvidia 491MB\n"," \u001b[32m+ libcufft \u001b[0m 11.4.1.4 0 nvidia 162MB\n"," \u001b[32m+ libcufft-dev \u001b[0m 11.4.1.4 0 nvidia 30kB\n"," \u001b[32m+ libcufft-static \u001b[0m 11.4.1.4 0 nvidia 325MB\n"," \u001b[32m+ libcufile \u001b[0m 1.14.1.1 4 nvidia 969kB\n"," \u001b[32m+ libcufile-dev \u001b[0m 1.14.1.1 4 nvidia 31kB\n"," \u001b[32m+ libcufile-static \u001b[0m 1.14.1.1 4 nvidia 3MB\n"," \u001b[32m+ libcurand \u001b[0m 10.3.10.19 0 nvidia 46MB\n"," \u001b[32m+ libcurand-dev \u001b[0m 10.3.10.19 0 nvidia 244kB\n"," \u001b[32m+ libcurand-static \u001b[0m 10.3.10.19 0 nvidia 46MB\n"," \u001b[32m+ libcusolver \u001b[0m 11.7.5.82 0 nvidia 205MB\n"," \u001b[32m+ libcusolver-dev \u001b[0m 11.7.5.82 0 nvidia 58kB\n"," \u001b[32m+ libcusolver-static \u001b[0m 11.7.5.82 0 nvidia 135MB\n"," \u001b[32m+ libcusparse \u001b[0m 12.5.10.65 0 nvidia 209MB\n"," \u001b[32m+ libcusparse-dev \u001b[0m 12.5.10.65 0 nvidia 47kB\n"," \u001b[32m+ libcusparse-static \u001b[0m 12.5.10.65 0 nvidia 212MB\n"," \u001b[32m+ libfreetype \u001b[0m 2.14.1 ha770c72_0 conda-forge 8kB\n"," \u001b[32m+ libfreetype6 \u001b[0m 2.14.1 h73754d4_0 conda-forge 387kB\n"," \u001b[32m+ libgcc-devel_linux-64 \u001b[0m 13.4.0 hd1d28cc_116 conda-forge 3MB\n"," \u001b[32m+ libglib \u001b[0m 2.86.3 h6548e54_0 conda-forge 4MB\n"," \u001b[32m+ libiconv \u001b[0m 1.18 h3b78370_2 conda-forge 790kB\n"," \u001b[32m+ libnpp \u001b[0m 12.4.1.87 0 nvidia 176MB\n"," \u001b[32m+ libnpp-dev \u001b[0m 12.4.1.87 0 nvidia 453kB\n"," \u001b[32m+ libnpp-static \u001b[0m 12.4.1.87 0 nvidia 172MB\n"," \u001b[32m+ libnvfatbin \u001b[0m 12.9.82 0 nvidia 818kB\n"," \u001b[32m+ libnvfatbin-dev \u001b[0m 12.9.82 0 nvidia 22kB\n"," \u001b[32m+ libnvfatbin-static \u001b[0m 12.9.82 0 nvidia 683kB\n"," \u001b[32m+ libnvjitlink \u001b[0m 12.9.86 0 nvidia 31MB\n"," \u001b[32m+ libnvjitlink-dev \u001b[0m 12.9.86 0 nvidia 22kB\n"," \u001b[32m+ libnvjitlink-static \u001b[0m 12.9.86 0 nvidia 28MB\n"," \u001b[32m+ libnvjpeg \u001b[0m 12.4.0.76 0 nvidia 4MB\n"," \u001b[32m+ libnvjpeg-dev \u001b[0m 12.4.0.76 0 nvidia 28kB\n"," \u001b[32m+ libnvjpeg-static \u001b[0m 12.4.0.76 0 nvidia 3MB\n"," \u001b[32m+ libpng \u001b[0m 1.6.53 h421ea60_0 conda-forge 318kB\n"," \u001b[32m+ libsanitizer \u001b[0m 13.4.0 h2a15e64_16 conda-forge 6MB\n"," \u001b[32m+ libstdcxx-devel_linux-64 \u001b[0m 13.4.0 h6963c3b_116 conda-forge 19MB\n"," \u001b[32m+ libstdcxx-ng \u001b[0m 15.2.0 hdf11a46_16 conda-forge 27kB\n"," \u001b[32m+ libxcb \u001b[0m 1.17.0 h8a09558_0 conda-forge 396kB\n"," \u001b[32m+ libxkbcommon \u001b[0m 1.13.1 hca5e8e5_0 conda-forge 838kB\n"," \u001b[32m+ libxml2 \u001b[0m 2.15.1 he237659_1 conda-forge 45kB\n"," \u001b[32m+ libxml2-16 \u001b[0m 2.15.1 hca6bf5a_1 conda-forge 556kB\n"," \u001b[32m+ nsight-compute \u001b[0m 2025.2.1.3 0 nvidia 335MB\n"," \u001b[32m+ nspr \u001b[0m 4.38 h29cc59b_0 conda-forge 229kB\n"," \u001b[32m+ nss \u001b[0m 3.118 h445c969_0 conda-forge 2MB\n"," \u001b[32m+ ocl-icd \u001b[0m 2.3.3 hb9d3cd8_0 conda-forge 107kB\n"," \u001b[32m+ opencl-headers \u001b[0m 2025.06.13 h5888daf_0 conda-forge 55kB\n"," \u001b[32m+ pcre2 \u001b[0m 10.47 haa7fec5_0 conda-forge 1MB\n"," \u001b[32m+ pthread-stubs \u001b[0m 0.4 hb9d3cd8_1002 conda-forge 8kB\n"," \u001b[32m+ sysroot_linux-64 \u001b[0m 2.34 h087de78_3 conda-forge 41MB\n"," \u001b[32m+ xkeyboard-config \u001b[0m 2.46 hb03c661_0 conda-forge 397kB\n"," \u001b[32m+ xorg-libx11 \u001b[0m 1.8.12 h4f16b4b_0 conda-forge 836kB\n"," \u001b[32m+ xorg-libxau \u001b[0m 1.0.12 hb03c661_1 conda-forge 15kB\n"," \u001b[32m+ xorg-libxdmcp \u001b[0m 1.1.5 hb03c661_1 conda-forge 21kB\n","\n"," Summary:\n","\n"," Install: 116 packages\n","\n"," Total download: 4GB\n","\n","───────────────────────────────────────────────────────────────────────────────────────────────────────\n","\n","\n","\n","Transaction starting\n","\u001b[?25l\u001b[2K\u001b[0G[+] 0.0s\n","Downloading 5%\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) 3%\n","Extracting 0%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.3s\n","Downloading (5) 6%\n","Extracting 0%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.4s\n","Downloading (5) 9%\n","Extracting 0%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.5s\n","Downloading (5) 12%\n","Extracting 0%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.6s\n","Downloading (5) 16%\n","Extracting 0%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.7s\n","Downloading (5) 19%\n","Extracting 0%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.8s\n","Downloading (5) 22%\n","Extracting 0%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.9s\n","Downloading (5) 25%\n","Extracting 0%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 1.0s\n","Downloading (5) 28%\n","Extracting 0%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 1.1s\n","Downloading (5) 32%\n","Extracting 0%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 1.2s\n","Downloading (5) 36%\n","Extracting 0%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 1.3s\n","Downloading (5) 39%\n","Extracting 0%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 1.4s\n","Downloading (5) 42%\n","Extracting 0%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 1.5s\n","Downloading (5) 45%\n","Extracting 0%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 1.6s\n","Downloading (5) 49%\n","Extracting 0%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 1.7s\n","Downloading (5) 53%\n","Extracting 0%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 1.8s\n","Downloading (5) 56%\n","Extracting 0%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 1.9s\n","Downloading (5) 60%\n","Extracting 0%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibcusparse-static 211.8MB @ 108.7MB/s 1.9s\n","[+] 2.0s\n","Downloading (5) 57%\n","Extracting 0%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 2.1s\n","Downloading (5) 61%\n","Extracting 0%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 2.2s\n","Downloading (5) 64%\n","Extracting 0%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibcufft-static 325.3MB @ 142.5MB/s 2.2s\n","[+] 2.3s\n","Downloading (5) 60%\n","Extracting 0%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 2.4s\n","Downloading (5) 62%\n","Extracting 0%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 2.5s\n","Downloading (5) 66%\n","Extracting 0%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 2.6s\n","Downloading (5) 67%\n","Extracting (1) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gnsight-compute 334.8MB @ 126.7MB/s 2.6s\n","[+] 2.7s\n","Downloading (5) 64%\n","Extracting (1) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 2.8s\n","Downloading (5) 64%\n","Extracting (1) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 2.9s\n","Downloading (5) 65%\n","Extracting (1) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.0s\n","Downloading (5) 66%\n","Extracting (1) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.1s\n","Downloading (5) 67%\n","Extracting (1) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.2s\n","Downloading (5) 67%\n","Extracting (1) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.3s\n","Downloading (5) 68%\n","Extracting (1) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.4s\n","Downloading (5) 68%\n","Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.5s\n","Downloading (5) 68%\n","Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.6s\n","Downloading (5) 68%\n","Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.7s\n","Downloading (5) 68%\n","Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.8s\n","Downloading (5) 68%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.9s\n","Downloading (5) 68%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.0s\n","Downloading (5) 68%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.1s\n","Downloading (5) 68%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.2s\n","Downloading (5) 68%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.3s\n","Downloading (5) 68%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.4s\n","Downloading (5) 68%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.5s\n","Downloading (5) 68%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.6s\n","Downloading (5) 68%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.7s\n","Downloading (5) 68%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.8s\n","Downloading (5) 68%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.9s\n","Downloading (5) 68%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.0s\n","Downloading (5) 68%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.1s\n","Downloading (5) 68%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.2s\n","Downloading (5) 68%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.3s\n","Downloading (5) 70%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.4s\n","Downloading (5) 72%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.5s\n","Downloading (5) 75%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.6s\n","Downloading (5) 77%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.7s\n","Downloading (5) 80%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.8s\n","Downloading (5) 81%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.9s\n","Downloading (5) 82%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 6.0s\n","Downloading (5) 83%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 6.1s\n","Downloading (5) 83%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 6.2s\n","Downloading (5) 84%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 6.3s\n","Downloading (5) 84%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 6.4s\n","Downloading (5) 85%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 6.5s\n","Downloading (5) 85%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 6.6s\n","Downloading (5) 85%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 6.7s\n","Downloading (5) 86%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 6.8s\n","Downloading (5) 86%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 6.9s\n","Downloading (5) 86%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.0s\n","Downloading (5) 87%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.1s\n","Downloading (5) 87%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.2s\n","Downloading (5) 88%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.3s\n","Downloading (5) 88%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.4s\n","Downloading (5) 88%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.5s\n","Downloading (5) 88%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.6s\n","Downloading (5) 88%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.7s\n","Downloading (5) 88%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.8s\n","Downloading (5) 88%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 7.9s\n","Downloading (5) 88%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 8.0s\n","Downloading (5) 88%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 8.1s\n","Downloading (5) 88%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 8.2s\n","Downloading (5) 88%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 8.3s\n","Downloading (5) 88%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 8.4s\n","Downloading (5) 88%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 8.5s\n","Downloading (5) 88%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 8.6s\n","Downloading (5) 88%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 8.7s\n","Downloading (5) 88%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 8.8s\n","Downloading (5) 88%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 8.9s\n","Downloading (5) 88%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 9.0s\n","Downloading (5) 88%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 9.1s\n","Downloading (5) 88%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 9.2s\n","Downloading (5) 88%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 9.3s\n","Downloading (5) 88%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 9.4s\n","Downloading (5) 90%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 9.5s\n","Downloading (5) 93%\n","Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibcusparse 208.9MB @ 26.8MB/s 7.6s\n","[+] 9.6s\n","Downloading (5) 90%\n","Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibnpp 175.7MB @ 24.9MB/s 7.0s\n","libcublas-static 491.1MB @ 50.1MB/s 9.6s\n","[+] 9.7s\n","Downloading (5) 83%\n","Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibcusolver 205.2MB @ 26.9MB/s 7.4s\n","[+] 9.8s\n","Downloading (5) 81%\n","Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 9.9s\n","Downloading (5) 82%\n","Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 10.0s\n","Downloading (5) 83%\n","Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 10.1s\n","Downloading (5) 85%\n","Extracting (1) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibcublas 468.0MB @ 46.0MB/s 10.1s\n","[+] 10.2s\n","Downloading (5) 84%\n","Extracting (1) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 10.3s\n","Downloading (5) 85%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 10.4s\n","Downloading (5) 85%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 10.5s\n","Downloading (5) 85%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 10.6s\n","Downloading (5) 85%\n","Extracting (4) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 10.7s\n","Downloading (5) 86%\n","Extracting (4) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 10.8s\n","Downloading (5) 86%\n","Extracting (4) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 10.9s\n","Downloading (5) 86%\n","Extracting (4) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 11.0s\n","Downloading (5) 86%\n","Extracting (4) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 11.1s\n","Downloading (5) 87%\n","Extracting (4) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 11.2s\n","Downloading (5) 87%\n","Extracting (4) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 11.3s\n","Downloading (5) 87%\n","Extracting (4) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 11.4s\n","Downloading (5) 87%\n","Extracting (4) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 11.5s\n","Downloading (5) 87%\n","Extracting (5) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 11.6s\n","Downloading (5) 87%\n","Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 11.7s\n","Downloading (5) 87%\n","Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 11.8s\n","Downloading (5) 87%\n","Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 11.9s\n","Downloading (5) 87%\n","Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 12.0s\n","Downloading (5) 87%\n","Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 12.1s\n","Downloading (5) 87%\n","Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 12.2s\n","Downloading (5) 87%\n","Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 12.3s\n","Downloading (5) 87%\n","Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 12.4s\n","Downloading (5) 87%\n","Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 12.5s\n","Downloading (5) 87%\n","Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 12.6s\n","Downloading (5) 87%\n","Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 12.7s\n","Downloading (5) 87%\n","Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 12.8s\n","Downloading (5) 87%\n","Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 12.9s\n","Downloading (5) 87%\n","Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 13.0s\n","Downloading (5) 87%\n","Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 13.1s\n","Downloading (5) 87%\n","Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 13.2s\n","Downloading (5) 87%\n","Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 13.3s\n","Downloading (5) 87%\n","Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 13.4s\n","Downloading (5) 87%\n","Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 13.5s\n","Downloading (5) 87%\n","Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 13.6s\n","Downloading (5) 87%\n","Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 13.7s\n","Downloading (5) 87%\n","Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 13.8s\n","Downloading (5) 87%\n","Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 13.9s\n","Downloading (5) 87%\n","Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 14.0s\n","Downloading (5) 87%\n","Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 14.1s\n","Downloading (5) 87%\n","Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 14.2s\n","Downloading (5) 87%\n","Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 14.3s\n","Downloading (5) 89%\n","Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 14.4s\n","Downloading (5) 90%\n","Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 14.5s\n","Downloading (5) 91%\n","Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 14.6s\n","Downloading (5) 94%\n","Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gcuda-nsight 118.7MB @ 23.9MB/s 4.9s\n","[+] 14.7s\n","Downloading (5) 92%\n","Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 14.8s\n","Downloading (5) 93%\n","Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 14.9s\n","Downloading (5) 93%\n","Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 15.0s\n","Downloading (5) 93%\n","Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 15.1s\n","Downloading (5) 94%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 15.2s\n","Downloading (5) 94%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 15.3s\n","Downloading (5) 94%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 15.4s\n","Downloading (5) 94%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 15.5s\n","Downloading (5) 94%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 15.6s\n","Downloading (5) 94%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 15.7s\n","Downloading (5) 94%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 15.8s\n","Downloading (5) 94%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 15.9s\n","Downloading (5) 94%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 16.0s\n","Downloading (5) 95%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 16.1s\n","Downloading (5) 95%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 16.2s\n","Downloading (5) 95%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 16.3s\n","Downloading (5) 95%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 16.4s\n","Downloading (5) 96%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 16.5s\n","Downloading (5) 96%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 16.6s\n","Downloading (5) 96%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 16.7s\n","Downloading (5) 96%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 16.8s\n","Downloading (5) 96%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 16.9s\n","Downloading (5) 96%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 17.0s\n","Downloading (5) 96%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 17.1s\n","Downloading (5) 97%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 17.2s\n","Downloading (5) 97%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 17.3s\n","Downloading (5) 97%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 17.4s\n","Downloading (5) 97%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 17.5s\n","Downloading (5) 97%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibcusolver-static 134.6MB @ 17.1MB/s 7.9s\n","[+] 17.6s\n","Downloading (4) 97%\n","Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 17.7s\n","Downloading (5) 96%\n","Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 17.8s\n","Downloading (5) 96%\n","Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 17.9s\n","Downloading (5) 96%\n","Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibcufft 162.3MB @ 19.6MB/s 8.4s\n","[+] 18.0s\n","Downloading (5) 94%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 18.1s\n","Downloading (5) 94%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 18.2s\n","Downloading (5) 95%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 18.3s\n","Downloading (5) 95%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 18.4s\n","Downloading (5) 95%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 18.5s\n","Downloading (5) 95%\n","Extracting (8) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 18.6s\n","Downloading (5) 95%\n","Extracting (8) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 18.7s\n","Downloading (5) 95%\n","Extracting (8) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 18.8s\n","Downloading (5) 95%\n","Extracting (8) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 18.9s\n","Downloading (5) 95%\n","Extracting (8) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 19.0s\n","Downloading (5) 96%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 19.1s\n","Downloading (5) 96%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 19.2s\n","Downloading (5) 96%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 19.3s\n","Downloading (5) 96%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 19.4s\n","Downloading (5) 96%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 19.5s\n","Downloading (5) 96%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 19.6s\n","Downloading (5) 96%\n","Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 19.7s\n","Downloading (5) 97%\n","Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 19.8s\n","Downloading (5) 97%\n","Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 19.9s\n","Downloading (5) 97%\n","Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 20.0s\n","Downloading (5) 97%\n","Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 20.1s\n","Downloading (5) 97%\n","Extracting (5) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 20.2s\n","Downloading (5) 98%\n","Extracting (5) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 20.3s\n","Downloading (5) 98%\n","Extracting (5) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibnpp-static 172.4MB @ 15.9MB/s 10.8s\n","[+] 20.4s\n","Downloading (4) 98%\n","Extracting (5) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 20.5s\n","Downloading (5) 97%\n","Extracting (5) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 20.6s\n","Downloading (5) 97%\n","Extracting (5) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 20.7s\n","Downloading (5) 97%\n","Extracting (5) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 20.8s\n","Downloading (5) 97%\n","Extracting (5) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gcuda-nvvp 117.9MB @ 11.1MB/s 10.7s\n","[+] 20.9s\n","Downloading (5) 96%\n","Extracting (5) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Ggcc_impl_linux-64 68.4MB @ 10.8MB/s 6.3s\n","[+] 21.0s\n","Downloading (5) 95%\n","Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 21.1s\n","Downloading (5) 95%\n","Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 21.2s\n","Downloading (5) 95%\n","Extracting (8) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 21.3s\n","Downloading (5) 96%\n","Extracting (8) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 21.4s\n","Downloading (5) 96%\n","Extracting (8) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 21.5s\n","Downloading (5) 96%\n","Extracting (8) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 21.6s\n","Downloading (5) 96%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 21.7s\n","Downloading (5) 96%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 21.8s\n","Downloading (5) 96%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 21.9s\n","Downloading (5) 96%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 22.0s\n","Downloading (5) 96%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 22.1s\n","Downloading (5) 96%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 22.2s\n","Downloading (5) 96%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 22.3s\n","Downloading (5) 96%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 22.4s\n","Downloading (5) 96%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 22.5s\n","Downloading (5) 96%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 22.6s\n","Downloading (5) 96%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 22.7s\n","Downloading (5) 96%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 22.8s\n","Downloading (5) 96%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 22.9s\n","Downloading (5) 96%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 23.0s\n","Downloading (5) 96%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 23.1s\n","Downloading (5) 96%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 23.2s\n","Downloading (5) 96%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 23.3s\n","Downloading (5) 96%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 23.4s\n","Downloading (5) 96%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 23.5s\n","Downloading (5) 96%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 23.6s\n","Downloading (5) 96%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 23.7s\n","Downloading (5) 96%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 23.8s\n","Downloading (5) 98%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gcuda-nvrtc-static 57.0MB @ 9.1MB/s 5.8s\n","libcurand 46.1MB @ 12.8MB/s 3.5s\n","cuda-nvrtc 67.2MB @ 10.3MB/s 6.3s\n","[+] 23.9s\n","Downloading (5) 97%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 24.0s\n","Downloading (5) 98%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 24.1s\n","Downloading (5) 98%\n","Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gsysroot_linux-64 40.8MB @ 12.6MB/s 3.2s\n","[+] 24.2s\n","Downloading (5) 98%\n","Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 24.3s\n","Downloading (5) 98%\n","Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibcurand-static 46.1MB @ 13.0MB/s 3.6s\n","[+] 24.4s\n","Downloading (5) 97%\n","Extracting (11) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 24.5s\n","Downloading (5) 97%\n","Extracting (11) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 24.6s\n","Downloading (5) 97%\n","Extracting (11) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 24.7s\n","Downloading (5) 98%\n","Extracting (11) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 24.8s\n","Downloading (5) 98%\n","Extracting (11) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 24.9s\n","Downloading (5) 98%\n","Extracting (11) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 25.0s\n","Downloading (5) 98%\n","Extracting (11) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 25.1s\n","Downloading (5) 98%\n","Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 25.2s\n","Downloading (5) 98%\n","Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 25.3s\n","Downloading (5) 98%\n","Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 25.4s\n","Downloading (5) 98%\n","Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 25.5s\n","Downloading (5) 98%\n","Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 25.6s\n","Downloading (5) 98%\n","Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 25.7s\n","Downloading (5) 98%\n","Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 25.8s\n","Downloading (5) 98%\n","Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 25.9s\n","Downloading (5) 98%\n","Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 26.0s\n","Downloading (5) 98%\n","Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 26.1s\n","Downloading (5) 98%\n","Extracting (10) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 26.2s\n","Downloading (5) 98%\n","Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 26.3s\n","Downloading (5) 99%\n","Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 26.4s\n","Downloading (5) 99%\n","Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 26.5s\n","Downloading (5) 99%\n","Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 26.6s\n","Downloading (5) 99%\n","Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 26.7s\n","Downloading (5) 99%\n","Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 26.8s\n","Downloading (5) 99%\n","Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 26.9s\n","Downloading (5) 99%\n","Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 27.0s\n","Downloading (5) 99%\n","Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 27.1s\n","Downloading (5) 99%\n","Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 27.2s\n","Downloading (5) 99%\n","Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 27.3s\n","Downloading (5) 99%\n","Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 27.4s\n","Downloading (5) 99%\n","Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 27.5s\n","Downloading (5) 99%\n","Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 27.6s\n","Downloading (5) 99%\n","Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 27.7s\n","Downloading (5) 99%\n","Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 27.8s\n","Downloading (5) 99%\n","Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibnvjitlink-static 28.1MB @ 5.9MB/s 4.0s\n","libnvjitlink 30.6MB @ 7.2MB/s 4.0s\n","gds-tools 39.6MB @ 9.1MB/s 4.1s\n","cuda-nvvm-tools 24.3MB @ 5.7MB/s 3.5s\n","cuda-nvcc-tools 27.4MB @ 6.0MB/s 3.7s\n","[+] 27.9s\n","Downloading (5) 98%\n","Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 28.0s\n","Downloading (5) 99%\n","Extracting (9) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 28.1s\n","Downloading (5) 99%\n","Extracting (12) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 28.2s\n","Downloading (5) 99%\n","Extracting (13) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 28.3s\n","Downloading (5) 99%\n","Extracting (13) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 28.4s\n","Downloading (5) 99%\n","Extracting (13) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 28.5s\n","Downloading (5) 99%\n","Extracting (13) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 28.6s\n","Downloading (5) 100%\n","Extracting (12) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 28.7s\n","Downloading (5) 100%\n","Extracting (12) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gcuda-sanitizer-api 9.2MB @ 11.4MB/s 0.8s\n","[+] 28.8s\n","Downloading (5) 100%\n","Extracting (13) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 28.9s\n","Downloading (5) 100%\n","Extracting (13) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 29.0s\n","Downloading (5) 100%\n","Extracting (13) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 29.1s\n","Downloading (5) 100%\n","Extracting (13) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 29.2s\n","Downloading (5) 100%\n","Extracting (12) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 29.3s\n","Downloading (5) 100%\n","Extracting (12) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 29.4s\n","Downloading (5) 100%\n","Extracting (12) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Ggxx_impl_linux-64 13.5MB @ 8.6MB/s 1.6s\n","[+] 29.5s\n","Downloading (4) 100%\n","Extracting (12) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 29.6s\n","Downloading (5) 100%\n","Extracting (13) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 29.7s\n","Downloading (5) 100%\n","Extracting (13) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 29.8s\n","Downloading (5) 100%\n","Extracting (13) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 29.9s\n","Downloading (5) 100%\n","Extracting (13) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 30.0s\n","Downloading (5) 100%\n","Extracting (13) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 30.1s\n","Downloading (5) 100%\n","Extracting (13) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 30.2s\n","Downloading (5) 100%\n","Extracting (13) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 30.3s\n","Downloading (5) 100%\n","Extracting (13) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 30.4s\n","Downloading (5) 100%\n","Extracting (13) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 30.5s\n","Downloading (5) 100%\n","Extracting (13) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 30.6s\n","Downloading (5) 100%\n","Extracting (13) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 30.7s\n","Downloading (5) 100%\n","Extracting (13) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibsanitizer 6.4MB @ 3.4MB/s 2.0s\n","[+] 30.8s\n","Downloading (4) 100%\n","Extracting (14) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 30.9s\n","Downloading (4) 100%\n","Extracting (14) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 31.0s\n","Downloading (4) 100%\n","Extracting (14) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 31.1s\n","Downloading (4) 100%\n","Extracting (14) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 31.2s\n","Downloading (4) 100%\n","Extracting (14) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 31.3s\n","Downloading (5) 100%\n","Extracting (14) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 31.4s\n","Downloading (5) 100%\n","Extracting (14) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 31.5s\n","Downloading (5) 100%\n","Extracting (14) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 31.6s\n","Downloading (5) 100%\n","Extracting (14) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 31.7s\n","Downloading (5) 100%\n","Extracting (14) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gcuda-nvvm-impl 21.5MB @ 6.2MB/s 3.9s\n","[+] 31.8s\n","Downloading (4) 100%\n","Extracting (15) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gcuda-nvcc-dev_linux-64 14.5MB @ 3.6MB/s 4.0s\n","libstdcxx-devel_linux-64 19.0MB @ 4.3MB/s 4.0s\n","cuda-nvdisasm 5.5MB @ 1.1MB/s 2.4s\n","cuda-cupti-dev 4.3MB @ 577.7kB/s 0.6s\n","[+] 31.9s\n","Downloading (5) 100%\n","Extracting (15) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibcufile-static 3.1MB @ 13.1MB/s 0.1s\n","libglib 3.9MB @ 23.2MB/s 0.1s\n","libnvjpeg 3.6MB @ 3.3MB/s 0.1s\n","[+] 32.0s\n","Downloading (5) 100%\n","Extracting (15) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibgcc-devel_linux-64 2.8MB @ 40.4MB/s 0.1s\n","binutils_impl_linux-64 3.7MB @ 20.9MB/s 0.2s\n","nss 2.1MB @ 11.4MB/s 0.1s\n","cuda-nvprof 2.6MB @ ??.?MB/s 0.1s\n","cuda-cupti 1.9MB @ ??.?MB/s 0.1s\n","libnvjpeg-static 3.2MB @ ??.?MB/s 0.2s\n","pcre2 1.2MB @ 11.4MB/s 0.1s\n","kernel-headers_linux-64 1.4MB @ ??.?MB/s 0.1s\n","[+] 32.1s\n","Downloading (5) 100%\n","Extracting (20) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gcuda-cudart-static_linux-64 1.1MB @ ??.?MB/s 0.0s\n","libcufile 969.0kB @ ??.?MB/s 0.0s\n","cuda-cccl_linux-64 1.1MB @ 2.6MB/s 0.1s\n","libxkbcommon 837.9kB @ 1.9MB/s 0.1s\n","xorg-libx11 835.9kB @ 2.2MB/s 0.1s\n","libnvfatbin 818.2kB @ 2.3MB/s 0.1s\n","libiconv 790.2kB @ 3.3MB/s 0.1s\n","libnvfatbin-static 682.8kB @ 2.8MB/s 0.1s\n","[+] 32.2s\n","Downloading (5) 100%\n","Extracting (29) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gdbus 447.6kB @ ??.?MB/s 0.0s\n","gmp 460.1kB @ ??.?MB/s 0.0s\n","libnpp-dev 452.8kB @ ??.?MB/s 0.0s\n","libxml2-16 555.7kB @ 1.3MB/s 0.1s\n","xkeyboard-config 397.0kB @ ??.?MB/s 0.1s\n","libxcb 395.9kB @ ??.?MB/s 0.0s\n","cuda-cudart-dev_linux-64 382.9kB @ ??.?MB/s 0.0s\n","libfreetype6 386.7kB @ ??.?MB/s 0.0s\n","libpng 317.7kB @ ??.?MB/s 0.0s\n","cuda-gdb 382.7kB @ ??.?MB/s 0.0s\n","[+] 32.3s\n","Downloading (5) 100%\n","Extracting (35) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gfontconfig 265.6kB @ ??.?MB/s 0.1s\n","cuda-cuobjdump 246.7kB @ ??.?MB/s 0.1s\n","cuda-cuxxfilt 213.8kB @ ??.?MB/s 0.0s\n","libcurand-dev 243.8kB @ ??.?MB/s 0.1s\n","nspr 228.6kB @ ??.?MB/s 0.1s\n","cuda-cudart_linux-64 193.6kB @ ??.?MB/s 0.1s\n","expat 144.0kB @ ??.?MB/s 0.0s\n","cuda-nvml-dev 139.2kB @ ??.?MB/s 0.0s\n","[+] 32.4s\n","Downloading (5) 100%\n","Extracting (39) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gfreetype 173.1kB @ ??.?MB/s 0.1s\n","cuda-documentation 91.6kB @ ??.?MB/s 0.0s\n","ocl-icd 106.7kB @ ??.?MB/s 0.0s\n","cuda-opencl-dev 92.9kB @ ??.?MB/s 0.0s\n","libcublas-dev 88.5kB @ ??.?MB/s 0.0s\n","cuda-crt-dev_linux-64 85.6kB @ ??.?MB/s 0.0s\n","libcusolver-dev 58.0kB @ ??.?MB/s 0.0s\n","opencl-headers 55.4kB @ ??.?MB/s 0.1s\n","cuda-nvprune 66.7kB @ ??.?MB/s 0.1s\n","libcusparse-dev 47.4kB @ ??.?MB/s 0.0s\n","libxml2 45.4kB @ ??.?MB/s 0.0s\n","[+] 32.5s\n","Downloading (5) 100%\n","Extracting (44) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gbinutils_linux-64 36.3kB @ ??.?MB/s 0.1s\n","libcufile-dev 30.9kB @ ??.?MB/s 0.0s\n","libcufft-dev 30.0kB @ ??.?MB/s 0.0s\n","cuda-driver-dev_linux-64 32.2kB @ ??.?MB/s 0.1s\n","cuda-nvrtc-dev 31.3kB @ ??.?MB/s 0.1s\n","libnvjpeg-dev 27.8kB @ ??.?MB/s 0.0s\n","gxx_linux-64 27.5kB @ ??.?MB/s 0.0s\n","libstdcxx-ng 27.3kB @ ??.?MB/s 0.0s\n","gcc_linux-64 28.9kB @ ??.?MB/s 0.1s\n","cuda-opencl 25.9kB @ ??.?MB/s 0.0s\n","[+] 32.6s\n","Downloading (5) 100%\n","Extracting (51) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Glibnvfatbin-dev 22.2kB @ ??.?MB/s 0.0s\n","libnvjitlink-dev 22.0kB @ ??.?MB/s 0.0s\n","xorg-libxdmcp 20.6kB @ ??.?MB/s 0.0s\n","cuda-crt-tools 20.2kB @ ??.?MB/s 0.0s\n","cuda-nvtx 24.6kB @ ??.?MB/s 0.1s\n","cuda-nvcc-impl 19.7kB @ ??.?MB/s 0.0s\n","cuda-nvcc_linux-64 20.1kB @ ??.?MB/s 0.0s\n","cuda-nvvm-dev_linux-64 18.2kB @ ??.?MB/s 0.0s\n","cuda-cudart 17.8kB @ ??.?MB/s 0.0s\n","cuda-cudart-dev 17.9kB @ ??.?MB/s 0.1s\n","[+] 32.7s\n","Downloading (5) 100%\n","Extracting (57) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gcuda-profiler-api 19.6kB @ ??.?MB/s 0.1s\n","cuda-libraries-dev 17.1kB @ ??.?MB/s 0.0s\n","cuda-driver-dev 17.3kB @ ??.?MB/s 0.1s\n","cuda-version 17.2kB @ ??.?MB/s 0.1s\n","cuda-libraries-static 17.1kB @ ??.?MB/s 0.0s\n","cuda-libraries 17.0kB @ ??.?MB/s 0.0s\n","cuda-visual-tools 17.0kB @ ??.?MB/s 0.0s\n","cuda-compiler 17.0kB @ ??.?MB/s 0.0s\n","cuda-command-line-tools 17.0kB @ ??.?MB/s 0.0s\n","[+] 32.8s\n","Downloading (5) 100%\n","Extracting (63) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gcuda-tools 16.9kB @ ??.?MB/s 0.1s\n","cuda-cudart-static 17.5kB @ ??.?MB/s 0.2s\n","pthread-stubs 8.3kB @ ??.?MB/s 0.0s\n","cuda-nvcc 16.9kB @ ??.?MB/s 0.0s\n","xorg-libxau 15.3kB @ 304.8kB/s 0.1s\n","libfreetype 7.7kB @ ??.?MB/s 0.0s\n","[+] 32.9s\n","Downloading (1) 100%\n","Extracting (61) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 33.0s\n","Downloading (1) 100%\n","Extracting (52) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 33.1s\n","Downloading (1) 100%\n","Extracting (32) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 33.2s\n","Downloading (1) 100%\n","Extracting (15) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 33.3s\n","Downloading (1) 100%\n","Extracting (7) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 33.4s\n","Downloading (1) 100%\n","Extracting (6) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 33.5s\n","Downloading (1) 100%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 33.6s\n","Downloading (1) 100%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 33.7s\n","Downloading (1) 100%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 33.8s\n","Downloading (1) 100%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 33.9s\n","Downloading (1) 100%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 34.0s\n","Downloading (1) 100%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 34.1s\n","Downloading (1) 100%\n","Extracting (3) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gcuda-toolkit 1.9kB @ 1.4kB/s 1.3s\n","[+] 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 (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 35.0s\n","Downloading 100%\n","Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 35.1s\n","Downloading 100%\n","Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 35.2s\n","Downloading 100%\n","Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 35.3s\n","Downloading 100%\n","Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 35.4s\n","Downloading 100%\n","Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 35.5s\n","Downloading 100%\n","Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 35.6s\n","Downloading 100%\n","Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 35.7s\n","Downloading 100%\n","Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 35.8s\n","Downloading 100%\n","Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 35.9s\n","Downloading 100%\n","Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 36.0s\n","Downloading 100%\n","Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 36.1s\n","Downloading 100%\n","Extracting (2) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 36.2s\n","Downloading 100%\n","Extracting (1) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 36.3s\n","Downloading 100%\n","Extracting (1) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 36.4s\n","Downloading 100%\n","Extracting (1) ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G\u001b[?25hLinking libstdcxx-ng-15.2.0-hdf11a46_16\n","Linking expat-2.7.3-hecca717_0\n","Linking opencl-headers-2025.06.13-h5888daf_0\n","Linking libsanitizer-13.4.0-h2a15e64_16\n","Linking pcre2-10.47-haa7fec5_0\n","Linking nspr-4.38-h29cc59b_0\n","Linking xorg-libxau-1.0.12-hb03c661_1\n","Linking pthread-stubs-0.4-hb9d3cd8_1002\n","Linking xorg-libxdmcp-1.1.5-hb03c661_1\n","Linking libiconv-1.18-h3b78370_2\n","Linking libpng-1.6.53-h421ea60_0\n","Linking gmp-6.3.0-hac33072_2\n","Linking ocl-icd-2.3.3-hb9d3cd8_0\n","Linking nss-3.118-h445c969_0\n","Linking libxcb-1.17.0-h8a09558_0\n","Linking libxml2-16-2.15.1-hca6bf5a_1\n","Linking libglib-2.86.3-h6548e54_0\n","Linking libfreetype6-2.14.1-h73754d4_0\n","Linking xorg-libx11-1.8.12-h4f16b4b_0\n","Linking libxml2-2.15.1-he237659_1\n","Linking dbus-1.16.2-h24cb091_1\n","Linking libfreetype-2.14.1-ha770c72_0\n","Linking xkeyboard-config-2.46-hb03c661_0\n","Linking freetype-2.14.1-ha770c72_0\n","Linking libxkbcommon-1.13.1-hca5e8e5_0\n","Linking fontconfig-2.15.0-h7e30c49_1\n","Linking cuda-documentation-12.4.127-0\n","Linking cuda-version-12.9-3\n","Linking cuda-nvvm-dev_linux-64-12.9.86-0\n","Linking cuda-crt-dev_linux-64-12.9.86-0\n","Linking cuda-driver-dev_linux-64-12.9.79-0\n","Linking cuda-cudart_linux-64-12.9.79-0\n","Linking cuda-cudart-static_linux-64-12.9.79-0\n","Linking cuda-nvcc-dev_linux-64-12.9.86-0\n","Linking libgcc-devel_linux-64-13.4.0-hd1d28cc_116\n","Linking libstdcxx-devel_linux-64-13.4.0-h6963c3b_116\n","Linking kernel-headers_linux-64-5.14.0-he073ed8_3\n","Linking sysroot_linux-64-2.34-h087de78_3\n","Linking cuda-nvvm-tools-12.9.86-0\n","Linking cuda-crt-tools-12.9.86-0\n","Linking cuda-nvvm-impl-12.9.86-0\n","Linking nsight-compute-2025.2.1.3-0\n","Linking cuda-nsight-12.9.79-0\n","\u001b[33m\u001b[1mwarning libmamba\u001b[m [cuda-nsight-12.9.79-0] The following files were already present in the environment:\n"," - LICENSE\n","Linking cuda-sanitizer-api-12.9.79-1\n","\u001b[33m\u001b[1mwarning libmamba\u001b[m [cuda-sanitizer-api-12.9.79-1] The following files were already present in the environment:\n"," - LICENSE\n","Linking cuda-nvtx-12.9.79-0\n","Linking cuda-nvdisasm-12.9.88-1\n","Linking cuda-gdb-12.9.79-1\n","Linking cuda-cupti-12.9.79-0\n","Linking cuda-nvprune-12.9.82-1\n","\u001b[33m\u001b[1mwarning libmamba\u001b[m [cuda-nvprune-12.9.82-1] The following files were already present in the environment:\n"," - LICENSE\n","Linking cuda-cuxxfilt-12.9.82-1\n","\u001b[33m\u001b[1mwarning libmamba\u001b[m [cuda-cuxxfilt-12.9.82-1] The following files were already present in the environment:\n"," - LICENSE\n","Linking libnvjpeg-12.4.0.76-0\n","Linking libnvjitlink-12.9.86-0\n","Linking libnvfatbin-12.9.82-0\n","Linking libnpp-12.4.1.87-0\n","Linking libcurand-10.3.10.19-0\n","Linking libcufile-1.14.1.1-4\n","Linking libcufft-11.4.1.4-0\n","Linking cuda-opencl-12.9.19-0\n","Linking cuda-nvrtc-12.9.86-0\n","Linking cuda-cccl_linux-64-12.9.27-0\n","Linking libnvjpeg-static-12.4.0.76-0\n","Linking libnvjitlink-static-12.9.86-0\n","Linking libnvfatbin-static-12.9.82-0\n","Linking libnpp-static-12.4.1.87-0\n","Linking libcusparse-static-12.5.10.65-0\n","Linking libcurand-static-10.3.10.19-0\n","Linking libcufile-static-1.14.1.1-4\n","Linking libcufft-static-11.4.1.4-0\n","Linking cuda-nvrtc-static-12.9.86-0\n","Linking cuda-nvml-dev-12.9.79-1\n","Linking cuda-driver-dev-12.9.79-0\n","Linking cuda-cudart-12.9.79-0\n","Linking cuda-cudart-static-12.9.79-0\n","Linking cuda-nvcc-tools-12.9.86-0\n","Linking cuda-cuobjdump-12.9.82-1\n","\u001b[33m\u001b[1mwarning libmamba\u001b[m [cuda-cuobjdump-12.9.82-1] The following files were already present in the environment:\n"," - LICENSE\n","Linking cuda-nvprof-12.9.79-0\n","\u001b[33m\u001b[1mwarning libmamba\u001b[m [cuda-nvprof-12.9.79-0] The following files were already present in the environment:\n"," - LICENSE\n","Linking cuda-cupti-dev-12.9.79-0\n","Linking libnvjitlink-dev-12.9.86-0\n","Linking libcusparse-12.5.10.65-0\n","Linking libnvfatbin-dev-12.9.82-0\n","Linking libnpp-dev-12.4.1.87-0\n","Linking libcurand-dev-10.3.10.19-0\n","Linking libcufile-dev-1.14.1.1-4\n","Linking gds-tools-1.14.1.1-4\n","Linking libcufft-dev-11.4.1.4-0\n","Linking cuda-opencl-dev-12.9.19-0\n","Linking libcublas-12.9.1.4-0\n","Linking cuda-nvrtc-dev-12.9.86-0\n","Linking libcublas-static-12.9.1.4-0\n","Linking cuda-nvvp-12.9.79-1\n","\u001b[33m\u001b[1mwarning libmamba\u001b[m [cuda-nvvp-12.9.79-1] The following files were already present in the environment:\n"," - LICENSE\n","Linking cuda-command-line-tools-12.9.1-0\n","Linking libcusparse-dev-12.5.10.65-0\n","Linking libcusolver-11.7.5.82-0\n","Linking libcusolver-static-11.7.5.82-0\n","Linking libcusolver-dev-11.7.5.82-0\n","Linking cuda-libraries-12.9.1-0\n","Linking cuda-libraries-static-12.9.1-0\n","Linking binutils_impl_linux-64-2.45-default_hfdba357_105\n","Linking gcc_impl_linux-64-13.4.0-hf787b08_16\n","Linking binutils_linux-64-2.45-default_h4852527_105\n","Linking gxx_impl_linux-64-13.4.0-h6a38259_16\n","Linking gcc_linux-64-13.4.0-h0a5b801_17\n","Linking gxx_linux-64-13.4.0-h50488e6_17\n","Linking cuda-cudart-dev_linux-64-12.9.79-0\n","Linking libcublas-dev-12.9.1.4-0\n","Linking cuda-cudart-dev-12.9.79-0\n","Linking cuda-nvcc-impl-12.9.86-0\n","Linking libnvjpeg-dev-12.4.0.76-0\n","Linking cuda-profiler-api-12.9.79-0\n","Linking cuda-nvcc_linux-64-12.9.86-0\n","Linking cuda-libraries-dev-12.9.1-0\n","Linking cuda-nvcc-12.9.86-0\n","Linking cuda-visual-tools-12.9.1-0\n","Linking cuda-compiler-12.9.1-0\n","Linking cuda-tools-12.9.1-0\n","Linking cuda-toolkit-12.4.0-0\n","\n","Transaction finished\n","\n"]}]},{"cell_type":"code","source":["!micromamba run -n partfield pip install torch==2.4.0 torchvision==0.19.0 torchaudio==2.4.0 --index-url https://download.pytorch.org/whl/cu124"],"metadata":{"id":"Sye0c0ebZFz3","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1767762605778,"user_tz":480,"elapsed":118468,"user":{"displayName":"navin shrivatsan","userId":"02096111809868742973"}},"outputId":"fbfbf50c-1247-4fc9-9c60-fd09b711ba27"},"execution_count":4,"outputs":[{"output_type":"stream","name":"stdout","text":["Looking in indexes: https://download.pytorch.org/whl/cu124\n","Collecting torch==2.4.0\n"," Downloading https://download.pytorch.org/whl/cu124/torch-2.4.0%2Bcu124-cp310-cp310-linux_x86_64.whl (797.3 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m797.3/797.3 MB\u001b[0m \u001b[31m44.0 MB/s\u001b[0m \u001b[33m0:00:08\u001b[0m\n","\u001b[?25hCollecting torchvision==0.19.0\n"," Downloading https://download.pytorch.org/whl/cu124/torchvision-0.19.0%2Bcu124-cp310-cp310-linux_x86_64.whl (7.1 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m7.1/7.1 MB\u001b[0m \u001b[31m170.4 MB/s\u001b[0m \u001b[33m0:00:00\u001b[0m\n","\u001b[?25hCollecting torchaudio==2.4.0\n"," Downloading https://download.pytorch.org/whl/cu124/torchaudio-2.4.0%2Bcu124-cp310-cp310-linux_x86_64.whl (3.4 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m3.4/3.4 MB\u001b[0m \u001b[31m65.8 MB/s\u001b[0m \u001b[33m0:00:00\u001b[0m\n","\u001b[?25hCollecting filelock (from torch==2.4.0)\n"," Downloading filelock-3.20.0-py3-none-any.whl.metadata (2.1 kB)\n","Collecting typing-extensions>=4.8.0 (from torch==2.4.0)\n"," Downloading https://download.pytorch.org/whl/typing_extensions-4.15.0-py3-none-any.whl.metadata (3.3 kB)\n","Collecting sympy (from torch==2.4.0)\n"," Downloading sympy-1.14.0-py3-none-any.whl.metadata (12 kB)\n","Collecting networkx (from torch==2.4.0)\n"," Downloading networkx-3.4.2-py3-none-any.whl.metadata (6.3 kB)\n","Collecting jinja2 (from torch==2.4.0)\n"," Downloading https://download.pytorch.org/whl/jinja2-3.1.6-py3-none-any.whl.metadata (2.9 kB)\n","Collecting fsspec (from torch==2.4.0)\n"," Downloading fsspec-2025.12.0-py3-none-any.whl.metadata (10 kB)\n","Collecting nvidia-cuda-nvrtc-cu12==12.4.99 (from torch==2.4.0)\n"," Downloading https://download.pytorch.org/whl/cu124/nvidia_cuda_nvrtc_cu12-12.4.99-py3-none-manylinux2014_x86_64.whl (24.7 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m24.7/24.7 MB\u001b[0m \u001b[31m165.0 MB/s\u001b[0m \u001b[33m0:00:00\u001b[0m\n","\u001b[?25hCollecting nvidia-cuda-runtime-cu12==12.4.99 (from torch==2.4.0)\n"," Downloading https://download.pytorch.org/whl/cu124/nvidia_cuda_runtime_cu12-12.4.99-py3-none-manylinux2014_x86_64.whl (883 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m883.4/883.4 kB\u001b[0m \u001b[31m45.5 MB/s\u001b[0m \u001b[33m0:00:00\u001b[0m\n","\u001b[?25hCollecting nvidia-cuda-cupti-cu12==12.4.99 (from torch==2.4.0)\n"," Downloading https://download.pytorch.org/whl/cu124/nvidia_cuda_cupti_cu12-12.4.99-py3-none-manylinux2014_x86_64.whl (13.8 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m13.8/13.8 MB\u001b[0m \u001b[31m162.7 MB/s\u001b[0m \u001b[33m0:00:00\u001b[0m\n","\u001b[?25hCollecting nvidia-cudnn-cu12==9.1.0.70 (from torch==2.4.0)\n"," Downloading https://download.pytorch.org/whl/cu124/nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl (664.8 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m664.8/664.8 MB\u001b[0m \u001b[31m43.9 MB/s\u001b[0m \u001b[33m0:00:07\u001b[0m\n","\u001b[?25hCollecting nvidia-cublas-cu12==12.4.2.65 (from torch==2.4.0)\n"," Downloading https://download.pytorch.org/whl/cu124/nvidia_cublas_cu12-12.4.2.65-py3-none-manylinux2014_x86_64.whl (363.0 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m363.0/363.0 MB\u001b[0m \u001b[31m64.9 MB/s\u001b[0m \u001b[33m0:00:04\u001b[0m\n","\u001b[?25hCollecting nvidia-cufft-cu12==11.2.0.44 (from torch==2.4.0)\n"," Downloading https://download.pytorch.org/whl/cu124/nvidia_cufft_cu12-11.2.0.44-py3-none-manylinux2014_x86_64.whl (211.5 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m211.5/211.5 MB\u001b[0m \u001b[31m77.6 MB/s\u001b[0m \u001b[33m0:00:02\u001b[0m\n","\u001b[?25hCollecting nvidia-curand-cu12==10.3.5.119 (from torch==2.4.0)\n"," Downloading https://download.pytorch.org/whl/cu124/nvidia_curand_cu12-10.3.5.119-py3-none-manylinux2014_x86_64.whl (56.3 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m56.3/56.3 MB\u001b[0m \u001b[31m168.9 MB/s\u001b[0m \u001b[33m0:00:00\u001b[0m\n","\u001b[?25hCollecting nvidia-cusolver-cu12==11.6.0.99 (from torch==2.4.0)\n"," Downloading https://download.pytorch.org/whl/cu124/nvidia_cusolver_cu12-11.6.0.99-py3-none-manylinux2014_x86_64.whl (128.4 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m128.4/128.4 MB\u001b[0m \u001b[31m147.3 MB/s\u001b[0m \u001b[33m0:00:00\u001b[0m\n","\u001b[?25hCollecting nvidia-cusparse-cu12==12.3.0.142 (from torch==2.4.0)\n"," Downloading https://download.pytorch.org/whl/cu124/nvidia_cusparse_cu12-12.3.0.142-py3-none-manylinux2014_x86_64.whl (207.5 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m207.5/207.5 MB\u001b[0m \u001b[31m78.6 MB/s\u001b[0m \u001b[33m0:00:02\u001b[0m\n","\u001b[?25hCollecting nvidia-nccl-cu12==2.20.5 (from torch==2.4.0)\n"," Downloading https://download.pytorch.org/whl/cu124/nvidia_nccl_cu12-2.20.5-py3-none-manylinux2014_x86_64.whl (176.2 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m176.2/176.2 MB\u001b[0m \u001b[31m68.2 MB/s\u001b[0m \u001b[33m0:00:02\u001b[0m\n","\u001b[?25hCollecting nvidia-nvtx-cu12==12.4.99 (from torch==2.4.0)\n"," Downloading https://download.pytorch.org/whl/cu124/nvidia_nvtx_cu12-12.4.99-py3-none-manylinux2014_x86_64.whl (99 kB)\n","Collecting nvidia-nvjitlink-cu12==12.4.99 (from torch==2.4.0)\n"," Downloading https://download.pytorch.org/whl/cu124/nvidia_nvjitlink_cu12-12.4.99-py3-none-manylinux2014_x86_64.whl (21.1 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m21.1/21.1 MB\u001b[0m \u001b[31m171.5 MB/s\u001b[0m \u001b[33m0:00:00\u001b[0m\n","\u001b[?25hCollecting triton==3.0.0 (from torch==2.4.0)\n"," Downloading https://download.pytorch.org/whl/triton-3.0.0-1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (209.4 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m209.4/209.4 MB\u001b[0m \u001b[31m75.1 MB/s\u001b[0m \u001b[33m0:00:02\u001b[0m\n","\u001b[?25hCollecting numpy (from torchvision==0.19.0)\n"," Downloading numpy-2.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (62 kB)\n","Collecting pillow!=8.3.*,>=5.3.0 (from torchvision==0.19.0)\n"," Downloading pillow-12.0.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.metadata (8.8 kB)\n","Collecting MarkupSafe>=2.0 (from jinja2->torch==2.4.0)\n"," Downloading https://download.pytorch.org/whl/MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (25 kB)\n","Collecting mpmath<1.4,>=1.1.0 (from sympy->torch==2.4.0)\n"," Downloading mpmath-1.3.0-py3-none-any.whl.metadata (8.6 kB)\n","Downloading pillow-12.0.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (7.0 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m7.0/7.0 MB\u001b[0m \u001b[31m82.6 MB/s\u001b[0m \u001b[33m0:00:00\u001b[0m\n","\u001b[?25hDownloading https://download.pytorch.org/whl/typing_extensions-4.15.0-py3-none-any.whl (44 kB)\n","Downloading filelock-3.20.0-py3-none-any.whl (16 kB)\n","Downloading fsspec-2025.12.0-py3-none-any.whl (201 kB)\n","Downloading https://download.pytorch.org/whl/jinja2-3.1.6-py3-none-any.whl (134 kB)\n","Downloading networkx-3.4.2-py3-none-any.whl (1.7 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.7/1.7 MB\u001b[0m \u001b[31m97.4 MB/s\u001b[0m \u001b[33m0:00:00\u001b[0m\n","\u001b[?25hDownloading numpy-2.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (16.8 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m16.8/16.8 MB\u001b[0m \u001b[31m236.1 MB/s\u001b[0m \u001b[33m0:00:00\u001b[0m\n","\u001b[?25hDownloading sympy-1.14.0-py3-none-any.whl (6.3 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m6.3/6.3 MB\u001b[0m \u001b[31m185.3 MB/s\u001b[0m \u001b[33m0:00:00\u001b[0m\n","\u001b[?25hDownloading mpmath-1.3.0-py3-none-any.whl (536 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m536.2/536.2 kB\u001b[0m \u001b[31m25.8 MB/s\u001b[0m \u001b[33m0:00:00\u001b[0m\n","\u001b[?25hInstalling collected packages: mpmath, typing-extensions, sympy, pillow, nvidia-nvtx-cu12, nvidia-nvjitlink-cu12, nvidia-nccl-cu12, nvidia-curand-cu12, nvidia-cufft-cu12, nvidia-cuda-runtime-cu12, nvidia-cuda-nvrtc-cu12, nvidia-cuda-cupti-cu12, nvidia-cublas-cu12, numpy, networkx, MarkupSafe, fsspec, filelock, triton, nvidia-cusparse-cu12, nvidia-cudnn-cu12, jinja2, nvidia-cusolver-cu12, torch, torchvision, torchaudio\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m26/26\u001b[0m [torchaudio]\n","\u001b[1A\u001b[2KSuccessfully installed MarkupSafe-2.1.5 filelock-3.20.0 fsspec-2025.12.0 jinja2-3.1.6 mpmath-1.3.0 networkx-3.4.2 numpy-2.2.6 nvidia-cublas-cu12-12.4.2.65 nvidia-cuda-cupti-cu12-12.4.99 nvidia-cuda-nvrtc-cu12-12.4.99 nvidia-cuda-runtime-cu12-12.4.99 nvidia-cudnn-cu12-9.1.0.70 nvidia-cufft-cu12-11.2.0.44 nvidia-curand-cu12-10.3.5.119 nvidia-cusolver-cu12-11.6.0.99 nvidia-cusparse-cu12-12.3.0.142 nvidia-nccl-cu12-2.20.5 nvidia-nvjitlink-cu12-12.4.99 nvidia-nvtx-cu12-12.4.99 pillow-12.0.0 sympy-1.14.0 torch-2.4.0+cu124 torchaudio-2.4.0+cu124 torchvision-0.19.0+cu124 triton-3.0.0 typing-extensions-4.15.0\n"]}]},{"cell_type":"code","source":["!micromamba run -n partfield pip install lightning==2.2 h5py yacs trimesh scikit-image loguru boto3"],"metadata":{"id":"6L04Vu6LL-Q9","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1767762629843,"user_tz":480,"elapsed":24063,"user":{"displayName":"navin shrivatsan","userId":"02096111809868742973"}},"outputId":"0d2795d5-9611-48a5-cd3d-2bf7e14f134c"},"execution_count":5,"outputs":[{"output_type":"stream","name":"stdout","text":["Collecting lightning==2.2\n"," Downloading lightning-2.2.0-py3-none-any.whl.metadata (56 kB)\n","Collecting h5py\n"," Downloading h5py-3.15.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.metadata (3.0 kB)\n","Collecting yacs\n"," Downloading yacs-0.1.8-py3-none-any.whl.metadata (639 bytes)\n","Collecting trimesh\n"," Downloading trimesh-4.10.1-py3-none-any.whl.metadata (13 kB)\n","Collecting scikit-image\n"," Downloading scikit_image-0.25.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (14 kB)\n","Collecting loguru\n"," Downloading loguru-0.7.3-py3-none-any.whl.metadata (22 kB)\n","Collecting boto3\n"," Downloading boto3-1.42.23-py3-none-any.whl.metadata (6.8 kB)\n","Collecting PyYAML<8.0,>=5.4 (from lightning==2.2)\n"," Downloading pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (2.4 kB)\n","Collecting fsspec<2025.0,>=2022.5.0 (from fsspec[http]<2025.0,>=2022.5.0->lightning==2.2)\n"," Downloading fsspec-2024.12.0-py3-none-any.whl.metadata (11 kB)\n","Collecting lightning-utilities<2.0,>=0.8.0 (from lightning==2.2)\n"," Downloading lightning_utilities-0.15.2-py3-none-any.whl.metadata (5.7 kB)\n","Requirement already satisfied: numpy<3.0,>=1.17.2 in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from lightning==2.2) (2.2.6)\n","Collecting packaging<25.0,>=20.0 (from lightning==2.2)\n"," Downloading packaging-24.2-py3-none-any.whl.metadata (3.2 kB)\n","Requirement already satisfied: torch<4.0,>=1.13.0 in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from lightning==2.2) (2.4.0+cu124)\n","Collecting torchmetrics<3.0,>=0.7.0 (from lightning==2.2)\n"," Downloading torchmetrics-1.8.2-py3-none-any.whl.metadata (22 kB)\n","Collecting tqdm<6.0,>=4.57.0 (from lightning==2.2)\n"," Downloading tqdm-4.67.1-py3-none-any.whl.metadata (57 kB)\n","Requirement already satisfied: typing-extensions<6.0,>=4.4.0 in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from lightning==2.2) (4.15.0)\n","Collecting pytorch-lightning (from lightning==2.2)\n"," Downloading pytorch_lightning-2.6.0-py3-none-any.whl.metadata (21 kB)\n","Collecting aiohttp!=4.0.0a0,!=4.0.0a1 (from fsspec[http]<2025.0,>=2022.5.0->lightning==2.2)\n"," Downloading aiohttp-3.13.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (8.1 kB)\n","Requirement already satisfied: setuptools in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from lightning-utilities<2.0,>=0.8.0->lightning==2.2) (80.9.0)\n","Requirement already satisfied: filelock in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from torch<4.0,>=1.13.0->lightning==2.2) (3.20.0)\n","Requirement already satisfied: sympy in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from torch<4.0,>=1.13.0->lightning==2.2) (1.14.0)\n","Requirement already satisfied: networkx in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from torch<4.0,>=1.13.0->lightning==2.2) (3.4.2)\n","Requirement already satisfied: jinja2 in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from torch<4.0,>=1.13.0->lightning==2.2) (3.1.6)\n","Requirement already satisfied: nvidia-cuda-nvrtc-cu12==12.4.99 in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from torch<4.0,>=1.13.0->lightning==2.2) (12.4.99)\n","Requirement already satisfied: nvidia-cuda-runtime-cu12==12.4.99 in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from torch<4.0,>=1.13.0->lightning==2.2) (12.4.99)\n","Requirement already satisfied: nvidia-cuda-cupti-cu12==12.4.99 in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from torch<4.0,>=1.13.0->lightning==2.2) (12.4.99)\n","Requirement already satisfied: nvidia-cudnn-cu12==9.1.0.70 in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from torch<4.0,>=1.13.0->lightning==2.2) (9.1.0.70)\n","Requirement already satisfied: nvidia-cublas-cu12==12.4.2.65 in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from torch<4.0,>=1.13.0->lightning==2.2) (12.4.2.65)\n","Requirement already satisfied: nvidia-cufft-cu12==11.2.0.44 in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from torch<4.0,>=1.13.0->lightning==2.2) (11.2.0.44)\n","Requirement already satisfied: nvidia-curand-cu12==10.3.5.119 in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from torch<4.0,>=1.13.0->lightning==2.2) (10.3.5.119)\n","Requirement already satisfied: nvidia-cusolver-cu12==11.6.0.99 in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from torch<4.0,>=1.13.0->lightning==2.2) (11.6.0.99)\n","Requirement already satisfied: nvidia-cusparse-cu12==12.3.0.142 in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from torch<4.0,>=1.13.0->lightning==2.2) (12.3.0.142)\n","Requirement already satisfied: nvidia-nccl-cu12==2.20.5 in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from torch<4.0,>=1.13.0->lightning==2.2) (2.20.5)\n","Requirement already satisfied: nvidia-nvtx-cu12==12.4.99 in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from torch<4.0,>=1.13.0->lightning==2.2) (12.4.99)\n","Requirement already satisfied: nvidia-nvjitlink-cu12==12.4.99 in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from torch<4.0,>=1.13.0->lightning==2.2) (12.4.99)\n","Requirement already satisfied: triton==3.0.0 in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from torch<4.0,>=1.13.0->lightning==2.2) (3.0.0)\n","Collecting scipy>=1.11.4 (from scikit-image)\n"," Downloading scipy-1.15.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)\n","Requirement already satisfied: pillow>=10.1 in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from scikit-image) (12.0.0)\n","Collecting imageio!=2.35.0,>=2.33 (from scikit-image)\n"," Downloading imageio-2.37.2-py3-none-any.whl.metadata (9.7 kB)\n","Collecting tifffile>=2022.8.12 (from scikit-image)\n"," Downloading tifffile-2025.5.10-py3-none-any.whl.metadata (31 kB)\n","Collecting lazy-loader>=0.4 (from scikit-image)\n"," Downloading lazy_loader-0.4-py3-none-any.whl.metadata (7.6 kB)\n","Collecting botocore<1.43.0,>=1.42.23 (from boto3)\n"," Downloading botocore-1.42.23-py3-none-any.whl.metadata (5.9 kB)\n","Collecting jmespath<2.0.0,>=0.7.1 (from boto3)\n"," Downloading jmespath-1.0.1-py3-none-any.whl.metadata (7.6 kB)\n","Collecting s3transfer<0.17.0,>=0.16.0 (from boto3)\n"," Downloading s3transfer-0.16.0-py3-none-any.whl.metadata (1.7 kB)\n","Collecting python-dateutil<3.0.0,>=2.1 (from botocore<1.43.0,>=1.42.23->boto3)\n"," Downloading python_dateutil-2.9.0.post0-py2.py3-none-any.whl.metadata (8.4 kB)\n","Collecting urllib3!=2.2.0,<3,>=1.25.4 (from botocore<1.43.0,>=1.42.23->boto3)\n"," Downloading urllib3-2.6.2-py3-none-any.whl.metadata (6.6 kB)\n","Collecting six>=1.5 (from python-dateutil<3.0.0,>=2.1->botocore<1.43.0,>=1.42.23->boto3)\n"," Downloading six-1.17.0-py2.py3-none-any.whl.metadata (1.7 kB)\n","Collecting aiohappyeyeballs>=2.5.0 (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]<2025.0,>=2022.5.0->lightning==2.2)\n"," Downloading aiohappyeyeballs-2.6.1-py3-none-any.whl.metadata (5.9 kB)\n","Collecting aiosignal>=1.4.0 (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]<2025.0,>=2022.5.0->lightning==2.2)\n"," Downloading aiosignal-1.4.0-py3-none-any.whl.metadata (3.7 kB)\n","Collecting async-timeout<6.0,>=4.0 (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]<2025.0,>=2022.5.0->lightning==2.2)\n"," Downloading async_timeout-5.0.1-py3-none-any.whl.metadata (5.1 kB)\n","Collecting attrs>=17.3.0 (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]<2025.0,>=2022.5.0->lightning==2.2)\n"," Downloading attrs-25.4.0-py3-none-any.whl.metadata (10 kB)\n","Collecting frozenlist>=1.1.1 (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]<2025.0,>=2022.5.0->lightning==2.2)\n"," Downloading frozenlist-1.8.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.metadata (20 kB)\n","Collecting multidict<7.0,>=4.5 (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]<2025.0,>=2022.5.0->lightning==2.2)\n"," Downloading multidict-6.7.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (5.3 kB)\n","Collecting propcache>=0.2.0 (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]<2025.0,>=2022.5.0->lightning==2.2)\n"," Downloading propcache-0.4.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (13 kB)\n","Collecting yarl<2.0,>=1.17.0 (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]<2025.0,>=2022.5.0->lightning==2.2)\n"," Downloading yarl-1.22.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (75 kB)\n","Collecting idna>=2.0 (from yarl<2.0,>=1.17.0->aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]<2025.0,>=2022.5.0->lightning==2.2)\n"," Downloading idna-3.11-py3-none-any.whl.metadata (8.4 kB)\n","Requirement already satisfied: MarkupSafe>=2.0 in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from jinja2->torch<4.0,>=1.13.0->lightning==2.2) (2.1.5)\n","Requirement already satisfied: mpmath<1.4,>=1.1.0 in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from sympy->torch<4.0,>=1.13.0->lightning==2.2) (1.3.0)\n","Downloading lightning-2.2.0-py3-none-any.whl (2.1 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m2.1/2.1 MB\u001b[0m \u001b[31m90.4 MB/s\u001b[0m \u001b[33m0:00:00\u001b[0m\n","\u001b[?25hDownloading fsspec-2024.12.0-py3-none-any.whl (183 kB)\n","Downloading lightning_utilities-0.15.2-py3-none-any.whl (29 kB)\n","Downloading packaging-24.2-py3-none-any.whl (65 kB)\n","Downloading pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (770 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m770.3/770.3 kB\u001b[0m \u001b[31m45.1 MB/s\u001b[0m \u001b[33m0:00:00\u001b[0m\n","\u001b[?25hDownloading torchmetrics-1.8.2-py3-none-any.whl (983 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m983.2/983.2 kB\u001b[0m \u001b[31m58.8 MB/s\u001b[0m \u001b[33m0:00:00\u001b[0m\n","\u001b[?25hDownloading tqdm-4.67.1-py3-none-any.whl (78 kB)\n","Downloading h5py-3.15.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (4.7 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m4.7/4.7 MB\u001b[0m \u001b[31m33.2 MB/s\u001b[0m \u001b[33m0:00:00\u001b[0m\n","\u001b[?25hDownloading yacs-0.1.8-py3-none-any.whl (14 kB)\n","Downloading trimesh-4.10.1-py3-none-any.whl (737 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m737.0/737.0 kB\u001b[0m \u001b[31m42.7 MB/s\u001b[0m \u001b[33m0:00:00\u001b[0m\n","\u001b[?25hDownloading scikit_image-0.25.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (14.8 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m14.8/14.8 MB\u001b[0m \u001b[31m164.3 MB/s\u001b[0m \u001b[33m0:00:00\u001b[0m\n","\u001b[?25hDownloading loguru-0.7.3-py3-none-any.whl (61 kB)\n","Downloading boto3-1.42.23-py3-none-any.whl (140 kB)\n","Downloading botocore-1.42.23-py3-none-any.whl (14.6 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m14.6/14.6 MB\u001b[0m \u001b[31m241.6 MB/s\u001b[0m \u001b[33m0:00:00\u001b[0m\n","\u001b[?25hDownloading jmespath-1.0.1-py3-none-any.whl (20 kB)\n","Downloading python_dateutil-2.9.0.post0-py2.py3-none-any.whl (229 kB)\n","Downloading s3transfer-0.16.0-py3-none-any.whl (86 kB)\n","Downloading urllib3-2.6.2-py3-none-any.whl (131 kB)\n","Downloading aiohttp-3.13.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (1.7 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.7/1.7 MB\u001b[0m \u001b[31m95.1 MB/s\u001b[0m \u001b[33m0:00:00\u001b[0m\n","\u001b[?25hDownloading async_timeout-5.0.1-py3-none-any.whl (6.2 kB)\n","Downloading multidict-6.7.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (241 kB)\n","Downloading yarl-1.22.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (346 kB)\n","Downloading aiohappyeyeballs-2.6.1-py3-none-any.whl (15 kB)\n","Downloading aiosignal-1.4.0-py3-none-any.whl (7.5 kB)\n","Downloading attrs-25.4.0-py3-none-any.whl (67 kB)\n","Downloading frozenlist-1.8.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (219 kB)\n","Downloading idna-3.11-py3-none-any.whl (71 kB)\n","Downloading imageio-2.37.2-py3-none-any.whl (317 kB)\n","Downloading lazy_loader-0.4-py3-none-any.whl (12 kB)\n","Downloading propcache-0.4.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (196 kB)\n","Downloading scipy-1.15.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (37.7 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m37.7/37.7 MB\u001b[0m \u001b[31m79.5 MB/s\u001b[0m \u001b[33m0:00:00\u001b[0m\n","\u001b[?25hDownloading six-1.17.0-py2.py3-none-any.whl (11 kB)\n","Downloading tifffile-2025.5.10-py3-none-any.whl (226 kB)\n","Downloading pytorch_lightning-2.6.0-py3-none-any.whl (849 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m849.5/849.5 kB\u001b[0m \u001b[31m47.3 MB/s\u001b[0m \u001b[33m0:00:00\u001b[0m\n","\u001b[?25hInstalling collected packages: urllib3, trimesh, tqdm, tifffile, six, scipy, PyYAML, propcache, packaging, multidict, loguru, jmespath, imageio, idna, h5py, fsspec, frozenlist, attrs, async-timeout, aiohappyeyeballs, yarl, yacs, python-dateutil, lightning-utilities, lazy-loader, aiosignal, scikit-image, botocore, aiohttp, torchmetrics, s3transfer, pytorch-lightning, boto3, lightning\n","\u001b[2K Attempting uninstall: fsspec\n","\u001b[2K Found existing installation: fsspec 2025.12.0\n","\u001b[2K Uninstalling fsspec-2025.12.0:\n","\u001b[2K Successfully uninstalled fsspec-2025.12.0\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m34/34\u001b[0m [lightning]\n","\u001b[1A\u001b[2KSuccessfully installed PyYAML-6.0.3 aiohappyeyeballs-2.6.1 aiohttp-3.13.3 aiosignal-1.4.0 async-timeout-5.0.1 attrs-25.4.0 boto3-1.42.23 botocore-1.42.23 frozenlist-1.8.0 fsspec-2024.12.0 h5py-3.15.1 idna-3.11 imageio-2.37.2 jmespath-1.0.1 lazy-loader-0.4 lightning-2.2.0 lightning-utilities-0.15.2 loguru-0.7.3 multidict-6.7.0 packaging-24.2 propcache-0.4.1 python-dateutil-2.9.0.post0 pytorch-lightning-2.6.0 s3transfer-0.16.0 scikit-image-0.25.2 scipy-1.15.3 six-1.17.0 tifffile-2025.5.10 torchmetrics-1.8.2 tqdm-4.67.1 trimesh-4.10.1 urllib3-2.6.2 yacs-0.1.8 yarl-1.22.0\n"]}]},{"cell_type":"code","source":["!micromamba run -n partfield pip install mesh2sdf tetgen pymeshlab plyfile einops libigl polyscope potpourri3d simple_parsing arrgh open3d"],"metadata":{"id":"zYDkTC6VL-Op","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1767762706093,"user_tz":480,"elapsed":76247,"user":{"displayName":"navin shrivatsan","userId":"02096111809868742973"}},"outputId":"ea0a4dfa-cfbc-47f0-d388-604957d3e9d5"},"execution_count":6,"outputs":[{"output_type":"stream","name":"stdout","text":["Collecting mesh2sdf\n"," Downloading mesh2sdf-1.1.0.tar.gz (18 kB)\n"," Installing build dependencies ... \u001b[?25l\u001b[?25hdone\n"," Getting requirements to build wheel ... \u001b[?25l\u001b[?25hdone\n"," Preparing metadata (pyproject.toml) ... \u001b[?25l\u001b[?25hdone\n","Collecting tetgen\n"," Downloading tetgen-0.7.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.metadata (9.7 kB)\n","Collecting pymeshlab\n"," Downloading pymeshlab-2025.7-cp310-cp310-manylinux_2_35_x86_64.whl.metadata (3.8 kB)\n","Collecting plyfile\n"," Downloading plyfile-1.1.3-py3-none-any.whl.metadata (43 kB)\n","Collecting einops\n"," Downloading einops-0.8.1-py3-none-any.whl.metadata (13 kB)\n","Collecting libigl\n"," Downloading libigl-2.6.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.metadata (4.8 kB)\n","Collecting polyscope\n"," Downloading polyscope-2.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.9 kB)\n","Collecting potpourri3d\n"," Downloading potpourri3d-1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (29 kB)\n","Collecting simple_parsing\n"," Downloading simple_parsing-0.1.7-py3-none-any.whl.metadata (7.3 kB)\n","Collecting arrgh\n"," Downloading arrgh-1.0.0-py3-none-any.whl.metadata (5.0 kB)\n","Collecting open3d\n"," Downloading open3d-0.19.0-cp310-cp310-manylinux_2_31_x86_64.whl.metadata (4.3 kB)\n","Requirement already satisfied: numpy in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from mesh2sdf) (2.2.6)\n","Requirement already satisfied: trimesh in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from mesh2sdf) (4.10.1)\n","Requirement already satisfied: scikit-image in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from mesh2sdf) (0.25.2)\n","Collecting pyvista>=0.31.0 (from tetgen)\n"," Downloading pyvista-0.46.4-py3-none-any.whl.metadata (15 kB)\n","Requirement already satisfied: scipy in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from libigl) (1.15.3)\n","Collecting docstring-parser<1.0,>=0.15 (from simple_parsing)\n"," Downloading docstring_parser-0.17.0-py3-none-any.whl.metadata (3.5 kB)\n","Requirement already satisfied: typing-extensions>=4.5.0 in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from simple_parsing) (4.15.0)\n","Collecting dash>=2.6.0 (from open3d)\n"," Downloading dash-3.3.0-py3-none-any.whl.metadata (11 kB)\n","Collecting werkzeug>=3.0.0 (from open3d)\n"," Downloading werkzeug-3.1.4-py3-none-any.whl.metadata (4.0 kB)\n","Collecting flask>=3.0.0 (from open3d)\n"," Downloading flask-3.1.2-py3-none-any.whl.metadata (3.2 kB)\n","Collecting nbformat>=5.7.0 (from open3d)\n"," Downloading nbformat-5.10.4-py3-none-any.whl.metadata (3.6 kB)\n","Collecting configargparse (from open3d)\n"," Downloading configargparse-1.7.1-py3-none-any.whl.metadata (24 kB)\n","Collecting ipywidgets>=8.0.4 (from open3d)\n"," Downloading ipywidgets-8.1.8-py3-none-any.whl.metadata (2.4 kB)\n","Collecting addict (from open3d)\n"," Downloading addict-2.4.0-py3-none-any.whl.metadata (1.0 kB)\n","Requirement already satisfied: pillow>=9.3.0 in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from open3d) (12.0.0)\n","Collecting matplotlib>=3 (from open3d)\n"," Downloading matplotlib-3.10.8-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (52 kB)\n","Collecting pandas>=1.0 (from open3d)\n"," Downloading pandas-2.3.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.metadata (91 kB)\n","Requirement already satisfied: pyyaml>=5.4.1 in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from open3d) (6.0.3)\n","Collecting scikit-learn>=0.21 (from open3d)\n"," Downloading scikit_learn-1.7.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (11 kB)\n","Requirement already satisfied: tqdm in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from open3d) (4.67.1)\n","Collecting pyquaternion (from open3d)\n"," Downloading pyquaternion-0.9.9-py3-none-any.whl.metadata (1.4 kB)\n","Collecting plotly>=5.0.0 (from dash>=2.6.0->open3d)\n"," Downloading plotly-6.5.0-py3-none-any.whl.metadata (8.5 kB)\n","Collecting importlib-metadata (from dash>=2.6.0->open3d)\n"," Downloading importlib_metadata-8.7.1-py3-none-any.whl.metadata (4.7 kB)\n","Collecting requests (from dash>=2.6.0->open3d)\n"," Downloading requests-2.32.5-py3-none-any.whl.metadata (4.9 kB)\n","Collecting retrying (from dash>=2.6.0->open3d)\n"," Downloading retrying-1.4.2-py3-none-any.whl.metadata (5.5 kB)\n","Collecting nest-asyncio (from dash>=2.6.0->open3d)\n"," Downloading nest_asyncio-1.6.0-py3-none-any.whl.metadata (2.8 kB)\n","Requirement already satisfied: setuptools in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from dash>=2.6.0->open3d) (80.9.0)\n","Collecting blinker>=1.9.0 (from flask>=3.0.0->open3d)\n"," Downloading blinker-1.9.0-py3-none-any.whl.metadata (1.6 kB)\n","Collecting click>=8.1.3 (from flask>=3.0.0->open3d)\n"," Downloading click-8.3.1-py3-none-any.whl.metadata (2.6 kB)\n","Collecting itsdangerous>=2.2.0 (from flask>=3.0.0->open3d)\n"," Downloading itsdangerous-2.2.0-py3-none-any.whl.metadata (1.9 kB)\n","Requirement already satisfied: jinja2>=3.1.2 in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from flask>=3.0.0->open3d) (3.1.6)\n","Requirement already satisfied: markupsafe>=2.1.1 in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from flask>=3.0.0->open3d) (2.1.5)\n","Collecting comm>=0.1.3 (from ipywidgets>=8.0.4->open3d)\n"," Downloading comm-0.2.3-py3-none-any.whl.metadata (3.7 kB)\n","Collecting ipython>=6.1.0 (from ipywidgets>=8.0.4->open3d)\n"," Downloading ipython-8.38.0-py3-none-any.whl.metadata (5.1 kB)\n","Collecting traitlets>=4.3.1 (from ipywidgets>=8.0.4->open3d)\n"," Downloading traitlets-5.14.3-py3-none-any.whl.metadata (10 kB)\n","Collecting widgetsnbextension~=4.0.14 (from ipywidgets>=8.0.4->open3d)\n"," Downloading widgetsnbextension-4.0.15-py3-none-any.whl.metadata (1.6 kB)\n","Collecting jupyterlab_widgets~=3.0.15 (from ipywidgets>=8.0.4->open3d)\n"," Downloading jupyterlab_widgets-3.0.16-py3-none-any.whl.metadata (20 kB)\n","Collecting decorator (from ipython>=6.1.0->ipywidgets>=8.0.4->open3d)\n"," Downloading decorator-5.2.1-py3-none-any.whl.metadata (3.9 kB)\n","Collecting exceptiongroup (from ipython>=6.1.0->ipywidgets>=8.0.4->open3d)\n"," Downloading exceptiongroup-1.3.1-py3-none-any.whl.metadata (6.7 kB)\n","Collecting jedi>=0.16 (from ipython>=6.1.0->ipywidgets>=8.0.4->open3d)\n"," Downloading jedi-0.19.2-py2.py3-none-any.whl.metadata (22 kB)\n","Collecting matplotlib-inline (from ipython>=6.1.0->ipywidgets>=8.0.4->open3d)\n"," Downloading matplotlib_inline-0.2.1-py3-none-any.whl.metadata (2.3 kB)\n","Collecting pexpect>4.3 (from ipython>=6.1.0->ipywidgets>=8.0.4->open3d)\n"," Downloading pexpect-4.9.0-py2.py3-none-any.whl.metadata (2.5 kB)\n","Collecting prompt_toolkit<3.1.0,>=3.0.41 (from ipython>=6.1.0->ipywidgets>=8.0.4->open3d)\n"," Downloading prompt_toolkit-3.0.52-py3-none-any.whl.metadata (6.4 kB)\n","Collecting pygments>=2.4.0 (from ipython>=6.1.0->ipywidgets>=8.0.4->open3d)\n"," Downloading pygments-2.19.2-py3-none-any.whl.metadata (2.5 kB)\n","Collecting stack_data (from ipython>=6.1.0->ipywidgets>=8.0.4->open3d)\n"," Downloading stack_data-0.6.3-py3-none-any.whl.metadata (18 kB)\n","Collecting wcwidth (from prompt_toolkit<3.1.0,>=3.0.41->ipython>=6.1.0->ipywidgets>=8.0.4->open3d)\n"," Downloading wcwidth-0.2.14-py2.py3-none-any.whl.metadata (15 kB)\n","Collecting parso<0.9.0,>=0.8.4 (from jedi>=0.16->ipython>=6.1.0->ipywidgets>=8.0.4->open3d)\n"," Downloading parso-0.8.5-py2.py3-none-any.whl.metadata (8.3 kB)\n","Collecting contourpy>=1.0.1 (from matplotlib>=3->open3d)\n"," Downloading contourpy-1.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (5.5 kB)\n","Collecting cycler>=0.10 (from matplotlib>=3->open3d)\n"," Downloading cycler-0.12.1-py3-none-any.whl.metadata (3.8 kB)\n","Collecting fonttools>=4.22.0 (from matplotlib>=3->open3d)\n"," Downloading fonttools-4.61.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (114 kB)\n","Collecting kiwisolver>=1.3.1 (from matplotlib>=3->open3d)\n"," Downloading kiwisolver-1.4.9-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.metadata (6.3 kB)\n","Requirement already satisfied: packaging>=20.0 in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from matplotlib>=3->open3d) (24.2)\n","Collecting pyparsing>=3 (from matplotlib>=3->open3d)\n"," Downloading pyparsing-3.3.1-py3-none-any.whl.metadata (5.6 kB)\n","Requirement already satisfied: python-dateutil>=2.7 in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from matplotlib>=3->open3d) (2.9.0.post0)\n","Collecting fastjsonschema>=2.15 (from nbformat>=5.7.0->open3d)\n"," Downloading fastjsonschema-2.21.2-py3-none-any.whl.metadata (2.3 kB)\n","Collecting jsonschema>=2.6 (from nbformat>=5.7.0->open3d)\n"," Downloading jsonschema-4.25.1-py3-none-any.whl.metadata (7.6 kB)\n","Collecting jupyter-core!=5.0.*,>=4.12 (from nbformat>=5.7.0->open3d)\n"," Downloading jupyter_core-5.9.1-py3-none-any.whl.metadata (1.5 kB)\n","Requirement already satisfied: attrs>=22.2.0 in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from jsonschema>=2.6->nbformat>=5.7.0->open3d) (25.4.0)\n","Collecting jsonschema-specifications>=2023.03.6 (from jsonschema>=2.6->nbformat>=5.7.0->open3d)\n"," Downloading jsonschema_specifications-2025.9.1-py3-none-any.whl.metadata (2.9 kB)\n","Collecting referencing>=0.28.4 (from jsonschema>=2.6->nbformat>=5.7.0->open3d)\n"," Downloading referencing-0.37.0-py3-none-any.whl.metadata (2.8 kB)\n","Collecting rpds-py>=0.7.1 (from jsonschema>=2.6->nbformat>=5.7.0->open3d)\n"," Downloading rpds_py-0.30.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.1 kB)\n","Collecting platformdirs>=2.5 (from jupyter-core!=5.0.*,>=4.12->nbformat>=5.7.0->open3d)\n"," Downloading platformdirs-4.5.1-py3-none-any.whl.metadata (12 kB)\n","Collecting pytz>=2020.1 (from pandas>=1.0->open3d)\n"," Downloading pytz-2025.2-py2.py3-none-any.whl.metadata (22 kB)\n","Collecting tzdata>=2022.7 (from pandas>=1.0->open3d)\n"," Downloading tzdata-2025.3-py2.py3-none-any.whl.metadata (1.4 kB)\n","Collecting ptyprocess>=0.5 (from pexpect>4.3->ipython>=6.1.0->ipywidgets>=8.0.4->open3d)\n"," Downloading ptyprocess-0.7.0-py2.py3-none-any.whl.metadata (1.3 kB)\n","Collecting narwhals>=1.15.1 (from plotly>=5.0.0->dash>=2.6.0->open3d)\n"," Downloading narwhals-2.15.0-py3-none-any.whl.metadata (13 kB)\n","Requirement already satisfied: six>=1.5 in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from python-dateutil>=2.7->matplotlib>=3->open3d) (1.17.0)\n","Collecting pooch (from pyvista>=0.31.0->tetgen)\n"," Downloading pooch-1.8.2-py3-none-any.whl.metadata (10 kB)\n","Collecting scooby>=0.5.1 (from pyvista>=0.31.0->tetgen)\n"," Downloading scooby-0.11.0-py3-none-any.whl.metadata (15 kB)\n","Collecting vtk!=9.4.0 (from pyvista>=0.31.0->tetgen)\n"," Downloading vtk-9.5.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (5.6 kB)\n","Collecting joblib>=1.2.0 (from scikit-learn>=0.21->open3d)\n"," Downloading joblib-1.5.3-py3-none-any.whl.metadata (5.5 kB)\n","Collecting threadpoolctl>=3.1.0 (from scikit-learn>=0.21->open3d)\n"," Downloading threadpoolctl-3.6.0-py3-none-any.whl.metadata (13 kB)\n","Collecting zipp>=3.20 (from importlib-metadata->dash>=2.6.0->open3d)\n"," Downloading zipp-3.23.0-py3-none-any.whl.metadata (3.6 kB)\n","Collecting charset_normalizer<4,>=2 (from requests->dash>=2.6.0->open3d)\n"," Downloading charset_normalizer-3.4.4-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (37 kB)\n","Requirement already satisfied: idna<4,>=2.5 in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from requests->dash>=2.6.0->open3d) (3.11)\n","Requirement already satisfied: urllib3<3,>=1.21.1 in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from requests->dash>=2.6.0->open3d) (2.6.2)\n","Collecting certifi>=2017.4.17 (from requests->dash>=2.6.0->open3d)\n"," Downloading certifi-2026.1.4-py3-none-any.whl.metadata (2.5 kB)\n","Requirement already satisfied: networkx>=3.0 in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from scikit-image->mesh2sdf) (3.4.2)\n","Requirement already satisfied: imageio!=2.35.0,>=2.33 in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from scikit-image->mesh2sdf) (2.37.2)\n","Requirement already satisfied: tifffile>=2022.8.12 in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from scikit-image->mesh2sdf) (2025.5.10)\n","Requirement already satisfied: lazy-loader>=0.4 in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from scikit-image->mesh2sdf) (0.4)\n","Collecting executing>=1.2.0 (from stack_data->ipython>=6.1.0->ipywidgets>=8.0.4->open3d)\n"," Downloading executing-2.2.1-py2.py3-none-any.whl.metadata (8.9 kB)\n","Collecting asttokens>=2.1.0 (from stack_data->ipython>=6.1.0->ipywidgets>=8.0.4->open3d)\n"," Downloading asttokens-3.0.1-py3-none-any.whl.metadata (4.9 kB)\n","Collecting pure-eval (from stack_data->ipython>=6.1.0->ipywidgets>=8.0.4->open3d)\n"," Downloading pure_eval-0.2.3-py3-none-any.whl.metadata (6.3 kB)\n","Downloading tetgen-0.7.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (2.2 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m2.2/2.2 MB\u001b[0m \u001b[31m3.7 MB/s\u001b[0m \u001b[33m0:00:00\u001b[0m\n","\u001b[?25hDownloading pymeshlab-2025.7-cp310-cp310-manylinux_2_35_x86_64.whl (105.8 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m105.8/105.8 MB\u001b[0m \u001b[31m29.7 MB/s\u001b[0m \u001b[33m0:00:03\u001b[0m\n","\u001b[?25hDownloading plyfile-1.1.3-py3-none-any.whl (36 kB)\n","Downloading einops-0.8.1-py3-none-any.whl (64 kB)\n","Downloading libigl-2.6.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (13.4 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m13.4/13.4 MB\u001b[0m \u001b[31m71.2 MB/s\u001b[0m \u001b[33m0:00:00\u001b[0m\n","\u001b[?25hDownloading polyscope-2.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.8 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m7.8/7.8 MB\u001b[0m \u001b[31m2.0 MB/s\u001b[0m \u001b[33m0:00:03\u001b[0m\n","\u001b[?25hDownloading potpourri3d-1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.5 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m3.5/3.5 MB\u001b[0m \u001b[31m5.0 MB/s\u001b[0m \u001b[33m0:00:00\u001b[0m\n","\u001b[?25hDownloading simple_parsing-0.1.7-py3-none-any.whl (112 kB)\n","Downloading docstring_parser-0.17.0-py3-none-any.whl (36 kB)\n","Downloading arrgh-1.0.0-py3-none-any.whl (5.9 kB)\n","Downloading open3d-0.19.0-cp310-cp310-manylinux_2_31_x86_64.whl (447.7 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m447.7/447.7 MB\u001b[0m \u001b[31m40.8 MB/s\u001b[0m \u001b[33m0:00:08\u001b[0m\n","\u001b[?25hDownloading dash-3.3.0-py3-none-any.whl (7.9 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m7.9/7.9 MB\u001b[0m \u001b[31m122.3 MB/s\u001b[0m \u001b[33m0:00:00\u001b[0m\n","\u001b[?25hDownloading flask-3.1.2-py3-none-any.whl (103 kB)\n","Downloading werkzeug-3.1.4-py3-none-any.whl (224 kB)\n","Downloading blinker-1.9.0-py3-none-any.whl (8.5 kB)\n","Downloading click-8.3.1-py3-none-any.whl (108 kB)\n","Downloading ipywidgets-8.1.8-py3-none-any.whl (139 kB)\n","Downloading jupyterlab_widgets-3.0.16-py3-none-any.whl (914 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m914.9/914.9 kB\u001b[0m \u001b[31m52.9 MB/s\u001b[0m \u001b[33m0:00:00\u001b[0m\n","\u001b[?25hDownloading widgetsnbextension-4.0.15-py3-none-any.whl (2.2 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m2.2/2.2 MB\u001b[0m \u001b[31m101.9 MB/s\u001b[0m \u001b[33m0:00:00\u001b[0m\n","\u001b[?25hDownloading comm-0.2.3-py3-none-any.whl (7.3 kB)\n","Downloading ipython-8.38.0-py3-none-any.whl (831 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m831.8/831.8 kB\u001b[0m \u001b[31m45.6 MB/s\u001b[0m \u001b[33m0:00:00\u001b[0m\n","\u001b[?25hDownloading prompt_toolkit-3.0.52-py3-none-any.whl (391 kB)\n","Downloading itsdangerous-2.2.0-py3-none-any.whl (16 kB)\n","Downloading jedi-0.19.2-py2.py3-none-any.whl (1.6 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.6/1.6 MB\u001b[0m \u001b[31m85.0 MB/s\u001b[0m \u001b[33m0:00:00\u001b[0m\n","\u001b[?25hDownloading parso-0.8.5-py2.py3-none-any.whl (106 kB)\n","Downloading matplotlib-3.10.8-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (8.7 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m8.7/8.7 MB\u001b[0m \u001b[31m113.8 MB/s\u001b[0m \u001b[33m0:00:00\u001b[0m\n","\u001b[?25hDownloading contourpy-1.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (325 kB)\n","Downloading cycler-0.12.1-py3-none-any.whl (8.3 kB)\n","Downloading fonttools-4.61.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (4.9 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m4.9/4.9 MB\u001b[0m \u001b[31m20.6 MB/s\u001b[0m \u001b[33m0:00:00\u001b[0m\n","\u001b[?25hDownloading kiwisolver-1.4.9-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.6 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.6/1.6 MB\u001b[0m \u001b[31m85.0 MB/s\u001b[0m \u001b[33m0:00:00\u001b[0m\n","\u001b[?25hDownloading nbformat-5.10.4-py3-none-any.whl (78 kB)\n","Downloading fastjsonschema-2.21.2-py3-none-any.whl (24 kB)\n","Downloading jsonschema-4.25.1-py3-none-any.whl (90 kB)\n","Downloading jsonschema_specifications-2025.9.1-py3-none-any.whl (18 kB)\n","Downloading jupyter_core-5.9.1-py3-none-any.whl (29 kB)\n","Downloading pandas-2.3.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (12.8 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m12.8/12.8 MB\u001b[0m \u001b[31m54.4 MB/s\u001b[0m \u001b[33m0:00:00\u001b[0m\n","\u001b[?25hDownloading pexpect-4.9.0-py2.py3-none-any.whl (63 kB)\n","Downloading platformdirs-4.5.1-py3-none-any.whl (18 kB)\n","Downloading plotly-6.5.0-py3-none-any.whl (9.9 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m9.9/9.9 MB\u001b[0m \u001b[31m116.5 MB/s\u001b[0m \u001b[33m0:00:00\u001b[0m\n","\u001b[?25hDownloading narwhals-2.15.0-py3-none-any.whl (432 kB)\n","Downloading ptyprocess-0.7.0-py2.py3-none-any.whl (13 kB)\n","Downloading pygments-2.19.2-py3-none-any.whl (1.2 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.2/1.2 MB\u001b[0m \u001b[31m75.1 MB/s\u001b[0m \u001b[33m0:00:00\u001b[0m\n","\u001b[?25hDownloading pyparsing-3.3.1-py3-none-any.whl (121 kB)\n","Downloading pytz-2025.2-py2.py3-none-any.whl (509 kB)\n","Downloading pyvista-0.46.4-py3-none-any.whl (2.4 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m2.4/2.4 MB\u001b[0m \u001b[31m51.8 MB/s\u001b[0m \u001b[33m0:00:00\u001b[0m\n","\u001b[?25hDownloading vtk-9.5.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (112.2 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m112.2/112.2 MB\u001b[0m \u001b[31m81.4 MB/s\u001b[0m \u001b[33m0:00:01\u001b[0m\n","\u001b[?25hDownloading referencing-0.37.0-py3-none-any.whl (26 kB)\n","Downloading rpds_py-0.30.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (390 kB)\n","Downloading scikit_learn-1.7.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (9.7 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m9.7/9.7 MB\u001b[0m \u001b[31m60.8 MB/s\u001b[0m \u001b[33m0:00:00\u001b[0m\n","\u001b[?25hDownloading joblib-1.5.3-py3-none-any.whl (309 kB)\n","Downloading scooby-0.11.0-py3-none-any.whl (19 kB)\n","Downloading threadpoolctl-3.6.0-py3-none-any.whl (18 kB)\n","Downloading traitlets-5.14.3-py3-none-any.whl (85 kB)\n","Downloading tzdata-2025.3-py2.py3-none-any.whl (348 kB)\n","Downloading addict-2.4.0-py3-none-any.whl (3.8 kB)\n","Downloading configargparse-1.7.1-py3-none-any.whl (25 kB)\n","Downloading decorator-5.2.1-py3-none-any.whl (9.2 kB)\n","Downloading exceptiongroup-1.3.1-py3-none-any.whl (16 kB)\n","Downloading importlib_metadata-8.7.1-py3-none-any.whl (27 kB)\n","Downloading zipp-3.23.0-py3-none-any.whl (10 kB)\n","Downloading matplotlib_inline-0.2.1-py3-none-any.whl (9.5 kB)\n","Downloading nest_asyncio-1.6.0-py3-none-any.whl (5.2 kB)\n","Downloading pooch-1.8.2-py3-none-any.whl (64 kB)\n","Downloading requests-2.32.5-py3-none-any.whl (64 kB)\n","Downloading charset_normalizer-3.4.4-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (153 kB)\n","Downloading certifi-2026.1.4-py3-none-any.whl (152 kB)\n","Downloading pyquaternion-0.9.9-py3-none-any.whl (14 kB)\n","Downloading retrying-1.4.2-py3-none-any.whl (10 kB)\n","Downloading stack_data-0.6.3-py3-none-any.whl (24 kB)\n","Downloading asttokens-3.0.1-py3-none-any.whl (27 kB)\n","Downloading executing-2.2.1-py2.py3-none-any.whl (28 kB)\n","Downloading pure_eval-0.2.3-py3-none-any.whl (11 kB)\n","Downloading wcwidth-0.2.14-py2.py3-none-any.whl (37 kB)\n","Building wheels for collected packages: mesh2sdf\n"," Building wheel for mesh2sdf (pyproject.toml) ... \u001b[?25l\u001b[?25hdone\n"," Created wheel for mesh2sdf: filename=mesh2sdf-1.1.0-cp310-cp310-linux_x86_64.whl size=89588 sha256=ba9f9e28ac03a2f635cf237f1049ed8459d97fd2e72b6dcfb8800257f58c26ec\n"," Stored in directory: /root/.cache/pip/wheels/c5/14/7d/f9b1364edbc49155db8aaad352aa621c44f62591753d01c6d7\n","Successfully built mesh2sdf\n","Installing collected packages: pytz, pure-eval, ptyprocess, fastjsonschema, addict, zipp, widgetsnbextension, werkzeug, wcwidth, tzdata, traitlets, threadpoolctl, scooby, rpds-py, retrying, pyquaternion, pyparsing, pymeshlab, pygments, polyscope, plyfile, platformdirs, pexpect, parso, nest-asyncio, narwhals, kiwisolver, jupyterlab_widgets, joblib, itsdangerous, fonttools, executing, exceptiongroup, einops, docstring-parser, decorator, cycler, contourpy, configargparse, comm, click, charset_normalizer, certifi, blinker, asttokens, arrgh, stack_data, simple_parsing, scikit-learn, requests, referencing, prompt_toolkit, potpourri3d, plotly, pandas, matplotlib-inline, matplotlib, libigl, jupyter-core, jedi, importlib-metadata, flask, vtk, pooch, mesh2sdf, jsonschema-specifications, ipython, dash, pyvista, jsonschema, ipywidgets, tetgen, nbformat, open3d\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m74/74\u001b[0m [open3d]\n","\u001b[1A\u001b[2KSuccessfully installed addict-2.4.0 arrgh-1.0.0 asttokens-3.0.1 blinker-1.9.0 certifi-2026.1.4 charset_normalizer-3.4.4 click-8.3.1 comm-0.2.3 configargparse-1.7.1 contourpy-1.3.2 cycler-0.12.1 dash-3.3.0 decorator-5.2.1 docstring-parser-0.17.0 einops-0.8.1 exceptiongroup-1.3.1 executing-2.2.1 fastjsonschema-2.21.2 flask-3.1.2 fonttools-4.61.1 importlib-metadata-8.7.1 ipython-8.38.0 ipywidgets-8.1.8 itsdangerous-2.2.0 jedi-0.19.2 joblib-1.5.3 jsonschema-4.25.1 jsonschema-specifications-2025.9.1 jupyter-core-5.9.1 jupyterlab_widgets-3.0.16 kiwisolver-1.4.9 libigl-2.6.1 matplotlib-3.10.8 matplotlib-inline-0.2.1 mesh2sdf-1.1.0 narwhals-2.15.0 nbformat-5.10.4 nest-asyncio-1.6.0 open3d-0.19.0 pandas-2.3.3 parso-0.8.5 pexpect-4.9.0 platformdirs-4.5.1 plotly-6.5.0 plyfile-1.1.3 polyscope-2.5.0 pooch-1.8.2 potpourri3d-1.3 prompt_toolkit-3.0.52 ptyprocess-0.7.0 pure-eval-0.2.3 pygments-2.19.2 pymeshlab-2025.7 pyparsing-3.3.1 pyquaternion-0.9.9 pytz-2025.2 pyvista-0.46.4 referencing-0.37.0 requests-2.32.5 retrying-1.4.2 rpds-py-0.30.0 scikit-learn-1.7.2 scooby-0.11.0 simple_parsing-0.1.7 stack_data-0.6.3 tetgen-0.7.0 threadpoolctl-3.6.0 traitlets-5.14.3 tzdata-2025.3 vtk-9.5.2 wcwidth-0.2.14 werkzeug-3.1.4 widgetsnbextension-4.0.15 zipp-3.23.0\n"]}]},{"cell_type":"code","source":["!micromamba run -n partfield pip install torch-scatter -f https://data.pyg.org/whl/torch-2.4.0+cu124.html"],"metadata":{"id":"yHn4JbL0L-Mg","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1767762709205,"user_tz":480,"elapsed":3107,"user":{"displayName":"navin shrivatsan","userId":"02096111809868742973"}},"outputId":"090a0da7-0e10-4b46-b480-b2b221c17d62"},"execution_count":7,"outputs":[{"output_type":"stream","name":"stdout","text":["Looking in links: https://data.pyg.org/whl/torch-2.4.0+cu124.html\n","Collecting torch-scatter\n"," Downloading https://data.pyg.org/whl/torch-2.4.0%2Bcu124/torch_scatter-2.1.2%2Bpt24cu124-cp310-cp310-linux_x86_64.whl (10.7 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m10.7/10.7 MB\u001b[0m \u001b[31m110.3 MB/s\u001b[0m \u001b[33m0:00:00\u001b[0m\n","\u001b[?25hInstalling collected packages: torch-scatter\n","Successfully installed torch-scatter-2.1.2+pt24cu124\n"]}]},{"cell_type":"code","source":["!micromamba run -n partfield pip install psutil vtk"],"metadata":{"id":"mV02unUuM50d","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1767762711266,"user_tz":480,"elapsed":2058,"user":{"displayName":"navin shrivatsan","userId":"02096111809868742973"}},"outputId":"d24dcee5-f786-4fd0-9c4c-ec55a77035f9"},"execution_count":8,"outputs":[{"output_type":"stream","name":"stdout","text":["Collecting psutil\n"," Downloading psutil-7.2.1-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl.metadata (22 kB)\n","Requirement already satisfied: vtk in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (9.5.2)\n","Requirement already satisfied: matplotlib>=2.0.0 in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from vtk) (3.10.8)\n","Requirement already satisfied: contourpy>=1.0.1 in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from matplotlib>=2.0.0->vtk) (1.3.2)\n","Requirement already satisfied: cycler>=0.10 in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from matplotlib>=2.0.0->vtk) (0.12.1)\n","Requirement already satisfied: fonttools>=4.22.0 in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from matplotlib>=2.0.0->vtk) (4.61.1)\n","Requirement already satisfied: kiwisolver>=1.3.1 in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from matplotlib>=2.0.0->vtk) (1.4.9)\n","Requirement already satisfied: numpy>=1.23 in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from matplotlib>=2.0.0->vtk) (2.2.6)\n","Requirement already satisfied: packaging>=20.0 in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from matplotlib>=2.0.0->vtk) (24.2)\n","Requirement already satisfied: pillow>=8 in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from matplotlib>=2.0.0->vtk) (12.0.0)\n","Requirement already satisfied: pyparsing>=3 in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from matplotlib>=2.0.0->vtk) (3.3.1)\n","Requirement already satisfied: python-dateutil>=2.7 in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from matplotlib>=2.0.0->vtk) (2.9.0.post0)\n","Requirement already satisfied: six>=1.5 in /root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages (from python-dateutil>=2.7->matplotlib>=2.0.0->vtk) (1.17.0)\n","Downloading psutil-7.2.1-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl (154 kB)\n","Installing collected packages: psutil\n","Successfully installed psutil-7.2.1\n"]}]},{"cell_type":"code","source":["!git clone https://github.com/nv-tlabs/PartField.git"],"metadata":{"collapsed":true,"id":"gpnrYQRwdvPr","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1767762714732,"user_tz":480,"elapsed":3463,"user":{"displayName":"navin shrivatsan","userId":"02096111809868742973"}},"outputId":"a0e87f52-925a-4d5c-e4b2-e73d3ac3c4e4"},"execution_count":9,"outputs":[{"output_type":"stream","name":"stdout","text":["Cloning into 'PartField'...\n","remote: Enumerating objects: 80, done.\u001b[K\n","remote: Counting objects: 100% (22/22), done.\u001b[K\n","remote: Compressing objects: 100% (21/21), done.\u001b[K\n","remote: Total 80 (delta 6), reused 1 (delta 1), pack-reused 58 (from 1)\u001b[K\n","Receiving objects: 100% (80/80), 29.48 MiB | 13.21 MiB/s, done.\n","Resolving deltas: 100% (9/9), done.\n"]}]},{"cell_type":"code","source":["%cd PartField"],"metadata":{"id":"6X1_ETXqNojT","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1767762715539,"user_tz":480,"elapsed":803,"user":{"displayName":"navin shrivatsan","userId":"02096111809868742973"}},"outputId":"f634d736-b858-442c-d5cd-5d928654c8cc"},"execution_count":10,"outputs":[{"output_type":"stream","name":"stdout","text":["/content/PartField\n"]}]},{"cell_type":"code","source":["%%writefile /content/PartField/partfield/dataloader.py\n","import torch\n","import boto3\n","import json\n","from os import path as osp\n","# from botocore.config import Config\n","# from botocore.exceptions import ClientError\n","import h5py\n","import io\n","import numpy as np\n","import skimage\n","import trimesh\n","import os\n","from scipy.spatial import KDTree\n","import gc\n","from plyfile import PlyData\n","\n","## For remeshing\n","import mesh2sdf\n","import tetgen\n","import vtk\n","import math\n","import tempfile\n","\n","### For mesh processing\n","import pymeshlab\n","\n","from partfield.utils import *\n","import random\n","\n","\n","#########################\n","## To handle quad inputs\n","#########################\n","def quad_to_triangle_mesh(F):\n"," \"\"\"\n"," Converts a quad-dominant mesh into a pure triangle mesh by splitting quads into two triangles.\n","\n"," Parameters:\n"," quad_mesh (trimesh.Trimesh): Input mesh with quad faces.\n","\n"," Returns:\n"," trimesh.Trimesh: A new mesh with only triangle faces.\n"," \"\"\"\n"," faces = F\n","\n"," ### If already a triangle mesh -- skip\n"," if len(faces[0]) == 3:\n"," return F\n","\n"," new_faces = []\n","\n"," for face in faces:\n"," if len(face) == 4: # Quad face\n"," # Split into two triangles\n"," new_faces.append([face[0], face[1], face[2]]) # Triangle 1\n"," new_faces.append([face[0], face[2], face[3]]) # Triangle 2\n"," else:\n"," print(f\"Warning: Skipping non-triangle/non-quad face {face}\")\n","\n"," new_faces = np.array(new_faces)\n","\n"," return new_faces\n","#########################\n","\n","class Demo_Dataset(torch.utils.data.Dataset):\n"," def __init__(self, cfg):\n"," super().__init__()\n","\n"," self.data_path = cfg.dataset.data_path\n"," self.is_pc = cfg.is_pc\n","\n"," all_files = os.listdir(self.data_path)\n","\n"," selected = []\n"," for f in all_files:\n"," if \".ply\" in f and self.is_pc:\n"," selected.append(f)\n"," elif (\".obj\" in f or \".glb\" in f or \".off\" in f) and not self.is_pc:\n"," selected.append(f)\n","\n"," self.data_list = selected\n"," self.pc_num_pts = 100000\n","\n"," self.preprocess_mesh = cfg.preprocess_mesh\n"," self.result_name = cfg.result_name\n","\n"," print(\"val dataset len:\", len(self.data_list))\n","\n","\n"," def __len__(self):\n"," return len(self.data_list)\n","\n"," def load_ply_to_numpy(self, filename):\n"," \"\"\"\n"," Load a PLY file and extract the point cloud as a (N, 3) NumPy array.\n","\n"," Parameters:\n"," filename (str): Path to the PLY file.\n","\n"," Returns:\n"," numpy.ndarray: Point cloud array of shape (N, 3).\n"," \"\"\"\n"," ply_data = PlyData.read(filename)\n","\n"," # Extract vertex data\n"," vertex_data = ply_data[\"vertex\"]\n","\n"," # Convert to NumPy array (x, y, z)\n"," points = np.vstack([vertex_data[\"x\"], vertex_data[\"y\"], vertex_data[\"z\"]]).T\n","\n"," return points\n","\n"," def get_model(self, ply_file):\n","\n"," uid = ply_file.split(\".\")[-2].replace(\"/\", \"_\")\n","\n"," ####\n"," if self.is_pc:\n"," ply_file_read = os.path.join(self.data_path, ply_file)\n"," pc = self.load_ply_to_numpy(ply_file_read)\n","\n"," bbmin = pc.min(0)\n"," bbmax = pc.max(0)\n"," center = (bbmin + bbmax) * 0.5\n"," scale = 2.0 * 0.9 / (bbmax - bbmin).max()\n"," pc = (pc - center) * scale\n","\n"," else:\n"," obj_path = os.path.join(self.data_path, ply_file)\n"," mesh = load_mesh_util(obj_path)\n"," vertices = mesh.vertices\n"," faces = mesh.faces\n"," print(\"Vertices:\", len(mesh.vertices))\n"," print(\"Faces:\", len(mesh.faces))\n","\n"," bbmin = vertices.min(0)\n"," bbmax = vertices.max(0)\n"," center = (bbmin + bbmax) * 0.5\n"," scale = 2.0 * 0.9 / (bbmax - bbmin).max()\n"," vertices = (vertices - center) * scale\n"," mesh.vertices = vertices\n","\n"," ### Make sure it is a triangle mesh -- just convert the quad\n"," mesh.faces = quad_to_triangle_mesh(faces)\n","\n"," print(\"before preprocessing...\")\n"," print(mesh.vertices.shape)\n"," print(mesh.faces.shape)\n"," print()\n","\n"," ### Pre-process mesh\n"," if self.preprocess_mesh:\n"," # Create a PyMeshLab mesh directly from vertices and faces\n"," ml_mesh = pymeshlab.Mesh(vertex_matrix=mesh.vertices, face_matrix=mesh.faces)\n","\n"," # Create a MeshSet and add your mesh\n"," ms = pymeshlab.MeshSet()\n"," ms.add_mesh(ml_mesh, \"from_trimesh\")\n","\n"," # Apply filters\n"," ms.apply_filter('meshing_remove_duplicate_faces')\n"," ms.apply_filter('meshing_remove_duplicate_vertices')\n"," percentageMerge = pymeshlab.PercentageValue(0.5)\n"," ms.apply_filter('meshing_merge_close_vertices', threshold=percentageMerge)\n"," ms.apply_filter('meshing_remove_unreferenced_vertices')\n","\n"," # Save or extract mesh\n"," processed = ms.current_mesh()\n"," mesh.vertices = processed.vertex_matrix()\n"," mesh.faces = processed.face_matrix()\n","\n"," print(\"after preprocessing...\")\n"," print(mesh.vertices.shape)\n"," print(mesh.faces.shape)\n","\n"," ### Save input\n"," # save_dir = f\"exp_results/{self.result_name}\"\n"," # os.makedirs(save_dir, exist_ok=True)\n"," # view_id = 0\n"," # mesh.export(f'{save_dir}/input_{uid}_{view_id}.ply')\n","\n","\n"," pc, _ = trimesh.sample.sample_surface(mesh, self.pc_num_pts)\n","\n"," labels = self.load_labels(uid)\n"," # labels = np.arange(0,len(mesh.faces),dtype=int) # Dummy label for demonstration\n","\n"," result = {\n"," \"uid\": uid,\n"," \"pc\": torch.tensor(pc, dtype=torch.float32),\n"," \"labels\": torch.tensor(labels, dtype=torch.long)\n"," }\n","\n"," if not self.is_pc:\n"," result[\"vertices\"] = mesh.vertices\n"," result[\"faces\"] = mesh.faces\n","\n"," return result\n","\n","\n"," def load_labels(self, uid):\n"," label_path = os.path.join(self.data_path, uid + \".npy\")\n"," if not os.path.exists(label_path):\n"," raise FileNotFoundError(f\"Label file not found: {label_path}\")\n"," return np.load(label_path)\n","\n","\n","\n"," def __getitem__(self, index):\n","\n"," gc.collect()\n","\n"," return self.get_model(self.data_list[index])\n","\n","##############\n","\n","###############################\n","class Demo_Remesh_Dataset(torch.utils.data.Dataset):\n"," def __init__(self, cfg):\n"," super().__init__()\n","\n"," self.data_path = cfg.dataset.data_path\n","\n"," all_files = os.listdir(self.data_path)\n","\n"," selected = []\n"," for f in all_files:\n"," if (\".obj\" in f or \".glb\" in f):\n"," selected.append(f)\n","\n"," self.data_list = selected\n"," self.pc_num_pts = 100000\n","\n"," self.preprocess_mesh = cfg.preprocess_mesh\n"," self.result_name = cfg.result_name\n","\n"," print(\"val dataset len:\", len(self.data_list))\n","\n","\n"," def __len__(self):\n"," return len(self.data_list)\n","\n","\n"," def get_model(self, ply_file):\n","\n"," uid = ply_file.split(\".\")[-2]\n","\n"," ####\n"," obj_path = os.path.join(self.data_path, ply_file)\n"," mesh = load_mesh_util(obj_path)\n"," vertices = mesh.vertices\n"," faces = mesh.faces\n","\n"," bbmin = vertices.min(0)\n"," bbmax = vertices.max(0)\n"," center = (bbmin + bbmax) * 0.5\n"," scale = 2.0 * 0.9 / (bbmax - bbmin).max()\n"," vertices = (vertices - center) * scale\n"," mesh.vertices = vertices\n","\n"," ### Pre-process mesh\n"," if self.preprocess_mesh:\n"," # Create a PyMeshLab mesh directly from vertices and faces\n"," ml_mesh = pymeshlab.Mesh(vertex_matrix=mesh.vertices, face_matrix=mesh.faces)\n","\n"," # Create a MeshSet and add your mesh\n"," ms = pymeshlab.MeshSet()\n"," ms.add_mesh(ml_mesh, \"from_trimesh\")\n","\n"," # Apply filters\n"," ms.apply_filter('meshing_remove_duplicate_faces')\n"," ms.apply_filter('meshing_remove_duplicate_vertices')\n"," percentageMerge = pymeshlab.PercentageValue(0.5)\n"," ms.apply_filter('meshing_merge_close_vertices', threshold=percentageMerge)\n"," ms.apply_filter('meshing_remove_unreferenced_vertices')\n","\n","\n"," # Save or extract mesh\n"," processed = ms.current_mesh()\n"," mesh.vertices = processed.vertex_matrix()\n"," mesh.faces = processed.face_matrix()\n","\n"," print(\"after preprocessing...\")\n"," print(mesh.vertices.shape)\n"," print(mesh.faces.shape)\n","\n"," ### Save input\n"," save_dir = f\"exp_results/{self.result_name}\"\n"," os.makedirs(save_dir, exist_ok=True)\n"," view_id = 0\n"," mesh.export(f'{save_dir}/input_{uid}_{view_id}.ply')\n","\n"," try:\n"," ###### Remesh ######\n"," size= 256\n"," level = 2 / size\n","\n"," sdf = mesh2sdf.core.compute(mesh.vertices, mesh.faces, size)\n"," # NOTE: the negative value is not reliable if the mesh is not watertight\n"," udf = np.abs(sdf)\n"," vertices, faces, _, _ = skimage.measure.marching_cubes(udf, level)\n","\n"," #### Only use SDF mesh ###\n"," # new_mesh = trimesh.Trimesh(vertices, faces)\n"," ##########################\n","\n"," #### Make tet #####\n"," components = trimesh.Trimesh(vertices, faces).split(only_watertight=False)\n"," new_mesh = [] #trimesh.Trimesh()\n"," if len(components) > 100000:\n"," raise NotImplementedError\n"," for i, c in enumerate(components):\n"," c.fix_normals()\n"," new_mesh.append(c) #trimesh.util.concatenate(new_mesh, c)\n"," new_mesh = trimesh.util.concatenate(new_mesh)\n","\n"," # generate tet mesh\n"," tet = tetgen.TetGen(new_mesh.vertices, new_mesh.faces)\n"," tet.tetrahedralize(plc=True, nobisect=1., quality=True, fixedvolume=True, maxvolume=math.sqrt(2) / 12 * (2 / size) ** 3)\n"," tmp_vtk = tempfile.NamedTemporaryFile(suffix='.vtk', delete=True)\n"," tet.grid.save(tmp_vtk.name)\n","\n"," # extract surface mesh from tet mesh\n"," reader = vtk.vtkUnstructuredGridReader()\n"," reader.SetFileName(tmp_vtk.name)\n"," reader.Update()\n"," surface_filter = vtk.vtkDataSetSurfaceFilter()\n"," surface_filter.SetInputConnection(reader.GetOutputPort())\n"," surface_filter.Update()\n"," polydata = surface_filter.GetOutput()\n"," writer = vtk.vtkOBJWriter()\n"," tmp_obj = tempfile.NamedTemporaryFile(suffix='.obj', delete=True)\n"," writer.SetFileName(tmp_obj.name)\n"," writer.SetInputData(polydata)\n"," writer.Update()\n"," new_mesh = load_mesh_util(tmp_obj.name)\n"," ##########################\n","\n"," new_mesh.vertices = new_mesh.vertices * (2.0 / size) - 1.0 # normalize it to [-1, 1]\n","\n"," mesh = new_mesh\n"," ####################\n","\n"," except:\n"," print(\"Error in tet.\")\n"," mesh = mesh\n","\n"," pc, _ = trimesh.sample.sample_surface(mesh, self.pc_num_pts)\n","\n"," labels = self.load_labels(uid)\n","\n"," result = {\n"," \"uid\": uid,\n"," \"pc\": torch.tensor(pc, dtype=torch.float32),\n"," \"labels\": torch.tensor(labels, dtype=torch.long),\n"," \"vertices\": mesh.vertices,\n"," \"faces\": mesh.faces\n"," }\n","\n"," return result\n","\n","\n"," def __getitem__(self, index):\n","\n"," gc.collect()\n","\n"," return self.get_model(self.data_list[index])\n","\n","\n","class Correspondence_Demo_Dataset(Demo_Dataset):\n"," def __init__(self, cfg):\n"," super().__init__(cfg)\n","\n"," self.data_path = cfg.dataset.data_path\n"," self.is_pc = cfg.is_pc\n","\n"," self.data_list = cfg.dataset.all_files\n","\n"," self.pc_num_pts = 100000\n","\n"," self.preprocess_mesh = cfg.preprocess_mesh\n"," self.result_name = cfg.result_name\n","\n"," print(\"val dataset len:\", len(self.data_list))\n"],"metadata":{"id":"tdlLVNs8Nof7","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1767762715550,"user_tz":480,"elapsed":9,"user":{"displayName":"navin shrivatsan","userId":"02096111809868742973"}},"outputId":"4f5b15ff-9b50-48bc-edbe-2596d5c25071"},"execution_count":11,"outputs":[{"output_type":"stream","name":"stdout","text":["Overwriting /content/PartField/partfield/dataloader.py\n"]}]},{"cell_type":"code","source":["%%writefile /content/PartField/partfield/model_trainer_pvcnn_only_demo.py\n","import torch\n","import lightning.pytorch as pl\n","from .dataloader import Demo_Dataset, Demo_Remesh_Dataset, Correspondence_Demo_Dataset\n","from torch.utils.data import DataLoader\n","from partfield.model.UNet.model import ResidualUNet3D\n","from partfield.model.triplane import TriplaneTransformer, get_grid_coord #, sample_from_planes, Voxel2Triplane\n","from partfield.model.model_utils import VanillaMLP\n","import torch.nn.functional as F\n","import torch.nn as nn\n","import os\n","import trimesh\n","import skimage\n","import numpy as np\n","import h5py\n","import torch.distributed as dist\n","from partfield.model.PVCNN.encoder_pc import TriPlanePC2Encoder, sample_triplane_feat\n","import json\n","import gc\n","import time\n","from plyfile import PlyData, PlyElement\n","\n","\n","class Model(pl.LightningModule):\n","\n"," def __init__(self, cfg):\n"," super().__init__()\n"," self.cfg = cfg\n"," self.automatic_optimization = False\n","\n"," self.triplane_transformer = TriplaneTransformer(\n"," input_dim=cfg.triplane_channels_low * 2,\n"," transformer_dim=1024,\n"," transformer_layers=6,\n"," transformer_heads=8,\n"," triplane_low_res=32,\n"," triplane_high_res=128,\n"," triplane_dim=cfg.triplane_channels_high,\n"," )\n","\n"," self.pvcnn = TriPlanePC2Encoder(\n"," cfg.pvcnn,\n"," device=\"cuda\",\n"," shape_min=-1,\n"," shape_length=2,\n"," use_2d_feat=False,\n"," )\n","\n"," self.logit_scale = nn.Parameter(torch.tensor(1.0))\n","\n"," # ------------------------------------------------------------------\n"," # DATALOADERS\n"," # ------------------------------------------------------------------\n","\n"," def train_dataloader(self):\n"," if self.cfg.remesh_demo:\n"," dataset = Demo_Remesh_Dataset(self.cfg)\n"," elif self.cfg.correspondence_demo:\n"," dataset = Correspondence_Demo_Dataset(self.cfg)\n"," else:\n"," dataset = Demo_Dataset(self.cfg)\n","\n"," return DataLoader(\n"," dataset,\n"," batch_size=self.cfg.dataset.train_batch_size,\n"," shuffle=True,\n"," drop_last=True,\n"," num_workers=self.cfg.dataset.train_num_workers,\n"," pin_memory=True,\n"," )\n","\n"," def predict_dataloader(self):\n"," if self.cfg.remesh_demo:\n"," dataset = Demo_Remesh_Dataset(self.cfg)\n"," elif self.cfg.correspondence_demo:\n"," dataset = Correspondence_Demo_Dataset(self.cfg)\n"," else:\n"," dataset = Demo_Dataset(self.cfg)\n","\n"," return DataLoader(\n"," dataset,\n"," batch_size=1,\n"," shuffle=False,\n"," num_workers=self.cfg.dataset.val_num_workers,\n"," pin_memory=True,\n"," )\n","\n"," # ------------------------------------------------------------------\n"," # TRAINING STEP AND PREDICT STEP\n"," # ------------------------------------------------------------------\n"," def training_step(self, batch, batch_idx):\n","\n"," opt = self.optimizers()\n"," opt.zero_grad()\n","\n"," # ============================================================\n"," # 1. EXACT SAME FEATURE PIPELINE AS predict_step\n"," # ============================================================\n"," print(f\"batch_pc_shape: {batch['pc'].shape}\")\n"," # PVCNN\n"," pc_feat = self.pvcnn(batch['pc'], batch['pc'])\n"," print(f\"pc_feat_shape: {pc_feat.shape}\")\n","\n"," # Triplane Transformer\n"," planes = self.triplane_transformer(pc_feat)\n"," print(f\"planes_shape: {planes.shape}\")\n"," # Split planes\n"," _, part_planes = torch.split(\n"," planes,\n"," [64, planes.shape[2] - 64],\n"," dim=2\n"," )\n","\n"," # ============================================================\n"," # 2. FEATURE SAMPLING (IDENTICAL LOGIC)\n"," # ============================================================\n","\n"," if self.cfg.is_pc:\n","\n"," # SAME dtype + shape as predict_step\n"," tensor_vertices = (\n"," batch['pc']\n"," .reshape(1, -1, 3)\n"," .to(part_planes.device)\n"," .to(torch.float16)\n"," )\n","\n"," # SAME function call\n"," point_feat = sample_triplane_feat(\n"," part_planes,\n"," tensor_vertices\n"," ) # (1, N, C)\n","\n"," # SAME reshape\n"," point_feat = point_feat.reshape(-1, point_feat.shape[-1])\n","\n"," # Labels must correspond 1:1 with sampled points\n"," labels = batch['labels'].reshape(-1).to(point_feat.device)\n","\n"," else:\n"," # EXACT SAME mesh path\n"," if self.cfg.vertex_feature:\n","\n"," tensor_vertices = (\n"," batch['vertices'][0]\n"," .reshape(1, -1, 3)\n"," .to(part_planes.device)\n"," .to(torch.float32)\n"," )\n","\n"," point_feat = self.sample_and_mean_memory_save_version(\n"," part_planes,\n"," tensor_vertices,\n"," 1\n"," )\n","\n"," else:\n"," n_point_per_face = self.cfg.n_point_per_face\n","\n"," tensor_vertices = self.sample_points(\n"," batch['vertices'][0].to(part_planes.device),\n"," batch['faces'][0].to(part_planes.device),\n"," n_point_per_face\n"," )\n","\n"," tensor_vertices = tensor_vertices.reshape(1, -1, 3).to(torch.float32)\n","\n"," point_feat = self.sample_and_mean_memory_save_version(\n"," part_planes,\n"," tensor_vertices,\n"," n_point_per_face\n"," )\n","\n"," # SAME reshape as predict_step\n"," point_feat = point_feat.reshape(-1, point_feat.shape[-1])\n","\n"," # Face labels\n"," labels = batch['labels'].reshape(-1).to(point_feat.device)\n","\n"," # ============================================================\n"," # 3. LOSS (ONLY ADDITION)\n"," # ============================================================\n","\n"," idx_a, idx_b, idx_c = self.sample_triplets(labels)\n","\n"," # In rare cases, skip empty batch\n"," if idx_a.numel() == 0:\n"," return None\n","\n"," fa = point_feat[idx_a]\n"," fb = point_feat[idx_b]\n"," fc = point_feat[idx_c]\n","\n"," loss = self.contrastive_triplet_loss(fa, fb, fc)\n","\n"," # ============================================================\n"," # 4. BACKPROP (ONLY ADDITION)\n"," # ============================================================\n","\n"," self.manual_backward(loss)\n"," opt.step()\n","\n"," self.log(\n"," \"train_loss\",\n"," loss,\n"," on_step=True,\n"," on_epoch=True,\n"," prog_bar=True,\n"," sync_dist=True\n"," )\n"," return loss\n","\n"," @torch.no_grad()\n"," def predict_step(self, batch, batch_idx):\n"," save_dir = f\"exp_results/{self.cfg.result_name}\"\n"," os.makedirs(save_dir, exist_ok=True)\n","\n"," uid = batch['uid'][0]\n"," view_id = 0\n"," starttime = time.time()\n","\n"," if uid == \"car\" or uid == \"complex_car\":\n"," # if uid == \"complex_car\":\n"," print(\"Skipping this for now.\")\n"," print(uid)\n"," return\n","\n"," ### Skip if model already processed\n"," if os.path.exists(f'{save_dir}/part_feat_{uid}_{view_id}.npy') or os.path.exists(f'{save_dir}/part_feat_{uid}_{view_id}_batch.npy'):\n"," print(\"Already processed \"+uid)\n"," return\n","\n"," N = batch['pc'].shape[0]\n"," assert N == 1\n","\n"," if self.use_2d_feat:\n"," print(\"ERROR. Dataloader not implemented with input 2d feat.\")\n"," exit()\n"," else:\n"," pc_feat = self.pvcnn(batch['pc'], batch['pc'])\n","\n"," planes = pc_feat\n"," planes = self.triplane_transformer(planes)\n"," sdf_planes, part_planes = torch.split(planes, [64, planes.shape[2] - 64], dim=2)\n","\n"," if self.cfg.is_pc:\n"," tensor_vertices = batch['pc'].reshape(1, -1, 3).cuda().to(torch.float16)\n"," point_feat = sample_triplane_feat(part_planes, tensor_vertices) # N, M, C\n"," point_feat = point_feat.cpu().detach().numpy().reshape(-1, 448)\n","\n"," np.save(f'{save_dir}/part_feat_{uid}_{view_id}.npy', point_feat)\n"," print(f\"Exported part_feat_{uid}_{view_id}.npy\")\n","\n"," ###########\n"," from sklearn.decomposition import PCA\n"," data_scaled = point_feat / np.linalg.norm(point_feat, axis=-1, keepdims=True)\n","\n"," pca = PCA(n_components=3)\n","\n"," data_reduced = pca.fit_transform(data_scaled)\n"," data_reduced = (data_reduced - data_reduced.min()) / (data_reduced.max() - data_reduced.min())\n"," colors_255 = (data_reduced * 255).astype(np.uint8)\n","\n"," points = batch['pc'].squeeze().detach().cpu().numpy()\n","\n"," if colors_255 is None:\n"," colors_255 = np.full_like(points, 255) # Default to white color (255,255,255)\n"," else:\n"," assert colors_255.shape == points.shape, \"Colors must have the same shape as points\"\n","\n"," # Convert to structured array for PLY format\n"," vertex_data = np.array(\n"," [(*point, *color) for point, color in zip(points, colors_255)],\n"," dtype=[(\"x\", \"f4\"), (\"y\", \"f4\"), (\"z\", \"f4\"), (\"red\", \"u1\"), (\"green\", \"u1\"), (\"blue\", \"u1\")]\n"," )\n","\n"," # Create PLY element\n"," el = PlyElement.describe(vertex_data, \"vertex\")\n"," # Write to file\n"," filename = f'{save_dir}/feat_pca_{uid}_{view_id}.ply'\n"," PlyData([el], text=True).write(filename)\n"," print(f\"Saved PLY file: {filename}\")\n"," ############\n","\n"," else:\n"," use_cuda_version = True\n"," if use_cuda_version:\n","\n","\n"," if self.cfg.vertex_feature:\n"," tensor_vertices = batch['vertices'][0].reshape(1, -1, 3).to(torch.float32)\n"," point_feat = self.sample_and_mean_memory_save_version(part_planes, tensor_vertices, 1)\n"," else:\n"," n_point_per_face = self.cfg.n_point_per_face\n"," tensor_vertices = self.sample_points(batch['vertices'][0], batch['faces'][0], n_point_per_face)\n"," tensor_vertices = tensor_vertices.reshape(1, -1, 3).to(torch.float32)\n"," point_feat = self.sample_and_mean_memory_save_version(part_planes, tensor_vertices, n_point_per_face) # N, M, C\n","\n"," #### Take mean feature in the triangle\n"," # print(\"Time elapsed for feature prediction: \" + str(time.time() - starttime))\n"," # point_feat = point_feat.reshape(-1, 448).cpu().numpy()\n"," # np.save(f'{save_dir}/part_feat_{uid}_{view_id}_batch.npy', point_feat)\n"," # print(f\"Exported part_feat_{uid}_{view_id}.npy\")\n","\n"," ###########\n"," from sklearn.decomposition import PCA\n"," data_scaled = point_feat / np.linalg.norm(point_feat, axis=-1, keepdims=True)\n","\n"," pca = PCA(n_components=3)\n","\n"," data_reduced = pca.fit_transform(data_scaled)\n"," data_reduced = (data_reduced - data_reduced.min()) / (data_reduced.max() - data_reduced.min())\n"," colors_255 = (data_reduced * 255).astype(np.uint8)\n"," V = batch['vertices'][0].cpu().numpy()\n"," F = batch['faces'][0].cpu().numpy()\n"," if self.cfg.vertex_feature:\n"," colored_mesh = trimesh.Trimesh(vertices=V, faces=F, vertex_colors=colors_255, process=False)\n"," else:\n"," colored_mesh = trimesh.Trimesh(vertices=V, faces=F, face_colors=colors_255, process=False)\n"," colored_mesh.export(f'{save_dir}/feat_pca_{uid}_{view_id}.ply')\n"," ############\n"," torch.cuda.empty_cache()\n","\n"," else:\n"," ### Mesh input (obj file)\n"," V = batch['vertices'][0].cpu().numpy()\n"," F = batch['faces'][0].cpu().numpy()\n","\n"," ##### Loop through faces #####\n"," num_samples_per_face = self.cfg.n_point_per_face\n","\n"," all_point_feats = []\n"," for face in F:\n"," # Get the vertices of the current face\n"," v0, v1, v2 = V[face]\n","\n"," # Generate random barycentric coordinates\n"," u = np.random.rand(num_samples_per_face, 1)\n"," v = np.random.rand(num_samples_per_face, 1)\n"," is_prob = (u+v) >1\n"," u[is_prob] = 1 - u[is_prob]\n"," v[is_prob] = 1 - v[is_prob]\n"," w = 1 - u - v\n","\n"," # Calculate points in Cartesian coordinates\n"," points = u * v0 + v * v1 + w * v2\n","\n"," tensor_vertices = torch.from_numpy(points.copy()).reshape(1, -1, 3).cuda().to(torch.float32)\n"," point_feat = sample_triplane_feat(part_planes, tensor_vertices) # N, M, C\n","\n"," #### Take mean feature in the triangle\n"," point_feat = torch.mean(point_feat, axis=1).cpu().detach().numpy()\n"," all_point_feats.append(point_feat)\n"," ##############################\n","\n"," all_point_feats = np.array(all_point_feats).reshape(-1, 448)\n","\n"," point_feat = all_point_feats\n","\n"," np.save(f'{save_dir}/part_feat_{uid}_{view_id}.npy', point_feat)\n"," print(f\"Exported part_feat_{uid}_{view_id}.npy\")\n","\n"," ###########\n"," from sklearn.decomposition import PCA\n"," data_scaled = point_feat / np.linalg.norm(point_feat, axis=-1, keepdims=True)\n","\n"," pca = PCA(n_components=3)\n","\n"," data_reduced = pca.fit_transform(data_scaled)\n"," data_reduced = (data_reduced - data_reduced.min()) / (data_reduced.max() - data_reduced.min())\n"," colors_255 = (data_reduced * 255).astype(np.uint8)\n","\n"," colored_mesh = trimesh.Trimesh(vertices=V, faces=F, face_colors=colors_255, process=False)\n"," colored_mesh.export(f'{save_dir}/feat_pca_{uid}_{view_id}.ply')\n"," ############\n","\n"," print(\"Time elapsed: \" + str(time.time()-starttime))\n","\n"," return\n","\n","\n","\n"," # ------------------------------------------------------------------\n"," # LOSS FUNCTIONS (Paper-consistent)\n"," # ------------------------------------------------------------------\n","\n"," def sample_triplets(self, labels, num_triplets=1024):\n"," labels_np = labels.detach().cpu().numpy()\n"," device = labels.device\n","\n"," idx_a, idx_b, idx_c = [], [], []\n"," unique_labels = np.unique(labels_np)\n","\n"," for _ in range(num_triplets):\n"," pos_label = np.random.choice(unique_labels)\n"," neg_label = np.random.choice(unique_labels)\n"," while neg_label == pos_label:\n"," neg_label = np.random.choice(unique_labels)\n","\n"," pos_idx = np.where(labels_np == pos_label)[0]\n"," neg_idx = np.where(labels_np == neg_label)[0]\n","\n"," if len(pos_idx) < 2:\n"," continue\n","\n"," a, b = np.random.choice(pos_idx, 2, replace=False)\n"," c = np.random.choice(neg_idx)\n","\n"," idx_a.append(a)\n"," idx_b.append(b)\n"," idx_c.append(c)\n","\n"," if len(idx_a) == 0:\n"," return (\n"," torch.empty(0, dtype=torch.long, device=device),\n"," torch.empty(0, dtype=torch.long, device=device),\n"," torch.empty(0, dtype=torch.long, device=device),\n"," )\n","\n"," return (\n"," torch.tensor(idx_a, dtype=torch.long, device=device),\n"," torch.tensor(idx_b, dtype=torch.long, device=device),\n"," torch.tensor(idx_c, dtype=torch.long, device=device),\n"," )\n","\n"," def contrastive_triplet_loss(self, fa, fb, fc):\n"," fa = F.normalize(fa, dim=-1)\n"," fb = F.normalize(fb, dim=-1)\n"," fc = F.normalize(fc, dim=-1)\n","\n"," tau = torch.clamp(self.logit_scale.exp(), 1e-6, 100.0)\n","\n"," sim_ab = torch.exp(torch.sum(fa * fb, dim=-1) / tau)\n"," sim_ac = torch.exp(torch.sum(fa * fc, dim=-1) / tau)\n"," sim_bc = torch.exp(torch.sum(fb * fc, dim=-1) / tau)\n","\n"," loss_a = -torch.log(sim_ab / (sim_ab + sim_ac))\n"," loss_b = -torch.log(sim_ab / (sim_ab + sim_bc))\n","\n"," return 0.5 * (loss_a + loss_b).mean()\n","\n"," # ------------------------------------------------------------------\n"," # SAMPLING UTILITIES\n"," # ------------------------------------------------------------------\n","\n"," def sample_points(self, vertices, faces, n_point_per_face):\n"," n_f = faces.shape[0]\n"," u = torch.sqrt(torch.rand((n_f, n_point_per_face, 1),\n"," device=vertices.device))\n"," v = torch.rand((n_f, n_point_per_face, 1),\n"," device=vertices.device)\n"," w0 = 1 - u\n"," w1 = u * (1 - v)\n"," w2 = u * v\n","\n"," v0 = vertices[faces[:, 0]]\n"," v1 = vertices[faces[:, 1]]\n"," v2 = vertices[faces[:, 2]]\n","\n"," return (\n"," w0 * v0[:, None] +\n"," w1 * v1[:, None] +\n"," w2 * v2[:, None]\n"," )\n","\n"," def sample_and_mean_memory_save_version(self, part_planes, tensor_vertices, nppf):\n"," n_sample_each = self.cfg.n_sample_each\n"," n_v = tensor_vertices.shape[1]\n"," n_chunks = n_v // n_sample_each + 1\n","\n"," out = []\n"," for i in range(n_chunks):\n"," feat = sample_triplane_feat(\n"," part_planes,\n"," tensor_vertices[:, i * n_sample_each:(i + 1) * n_sample_each]\n"," )\n"," feat = feat.reshape(1, -1, nppf, feat.shape[-1]).mean(dim=-2)\n"," out.append(feat)\n","\n"," return torch.cat(out, dim=1)\n","\n"," # ------------------------------------------------------------------\n"," # OPTIMIZER\n"," # ------------------------------------------------------------------\n","\n"," def configure_optimizers(self):\n"," return torch.optim.AdamW(self.parameters(), lr=self.cfg.lr)"],"metadata":{"id":"cxOrlmWfNod1","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1767762715562,"user_tz":480,"elapsed":9,"user":{"displayName":"navin shrivatsan","userId":"02096111809868742973"}},"outputId":"a4703094-3261-4b32-f767-957f509776f3"},"execution_count":12,"outputs":[{"output_type":"stream","name":"stdout","text":["Overwriting /content/PartField/partfield/model_trainer_pvcnn_only_demo.py\n"]}]},{"cell_type":"code","source":["%%writefile /content/PartField/partfield_inference.py\n","from partfield.config import default_argument_parser, setup\n","from lightning.pytorch import seed_everything, Trainer\n","from lightning.pytorch.callbacks import ModelCheckpoint\n","import torch\n","import os\n","import numpy as np\n","import random\n","\n","def predict(cfg):\n"," seed_everything(cfg.seed)\n","\n"," torch.manual_seed(0)\n"," random.seed(0)\n"," np.random.seed(0)\n","\n"," print(\"checkpoint\")\n"," os.makedirs(cfg.output_dir, exist_ok=True)\n","\n"," checkpoint_callbacks = [\n"," ModelCheckpoint(\n"," dirpath=cfg.output_dir,\n"," filename=\"epoch-{epoch:03d}\",\n"," save_top_k=-1,\n"," every_n_epochs=1,\n"," save_last=True,\n"," verbose=True,\n"," save_on_train_epoch_end=True,\n"," )\n"," ]\n","\n"," print(\"trainer\")\n"," trainer = Trainer(\n"," enable_checkpointing=True,\n"," accelerator=\"gpu\",\n"," devices=1,\n"," precision=\"16-mixed\",\n"," # strategy=\"ddp_notebook\", # FIX\n"," max_epochs=50,\n"," callbacks=checkpoint_callbacks,\n"," )\n","\n"," print(\"model\")\n"," from partfield.model_trainer_pvcnn_only_demo import Model\n"," model = Model(cfg)\n","\n"," if cfg.remesh_demo:\n"," cfg.n_point_per_face = 10\n","\n"," trainer.fit(model)\n"," trainer.save_checkpoint(os.path.join(cfg.output_dir, \"final_model.ckpt\"))\n"," print(f\"Manual checkpoint saved to {cfg.output_dir}\")\n","\n","def main():\n"," print(\"started\")\n"," parser = default_argument_parser()\n"," args = parser.parse_args()\n"," cfg = setup(args, freeze=False)\n"," predict(cfg)\n","\n","if __name__ == \"__main__\":\n"," main()"],"metadata":{"id":"mVx05vW2ifRQ","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1767762833708,"user_tz":480,"elapsed":36,"user":{"displayName":"navin shrivatsan","userId":"02096111809868742973"}},"outputId":"571b7a92-adb1-4d54-bf7c-884dcc04acb7"},"execution_count":16,"outputs":[{"output_type":"stream","name":"stdout","text":["Overwriting /content/PartField/partfield_inference.py\n"]}]},{"cell_type":"code","source":["%%writefile /content/PartField/partfield/model/PVCNN/unet_3daware.py\n","import numpy as np\n","import torch\n","import torch.nn as nn\n","import torch.nn.functional as F\n","from torch.nn import init\n","import einops\n","\n","# ---------------------------\n","# utils / conv factories\n","# ---------------------------\n","def conv3x3(in_channels, out_channels, stride=1, padding=1, bias=True, groups=1):\n"," return nn.Conv2d(in_channels, out_channels, kernel_size=3, stride=stride, padding=padding, bias=bias, groups=groups)\n","\n","def upconv2x2(in_channels, out_channels, mode='transpose'):\n"," if mode == 'transpose':\n"," return nn.ConvTranspose2d(in_channels, out_channels, kernel_size=2, stride=2)\n"," else:\n"," return nn.Sequential(\n"," nn.Upsample(mode='bilinear', scale_factor=2),\n"," conv1x1(in_channels, out_channels))\n","\n","def conv1x1(in_channels, out_channels, groups=1):\n"," return nn.Conv2d(in_channels, out_channels, kernel_size=1, groups=groups, stride=1)\n","\n","# ---------------------------\n","# ConvTriplane3dAware (safe)\n","# ---------------------------\n","class ConvTriplane3dAware(nn.Module):\n"," \"\"\"3D aware triplane conv with FP16-safe blocks (uses autocast disabled for numerically unstable ops).\"\"\"\n"," def __init__(self, internal_conv_f, in_channels, out_channels, order='xz'):\n"," super(ConvTriplane3dAware, self).__init__()\n"," self.in_channels = in_channels\n"," self.out_channels = out_channels\n"," assert order in ['xz', 'zx']\n"," self.order = order\n"," # plane_convs perform a conv on concatenated [i, jpool, kpool] => so input channels = 3*in_channels\n"," self.plane_convs = nn.ModuleList([internal_conv_f(3*self.in_channels, self.out_channels) for _ in range(3)])\n","\n"," def forward(self, triplanes_list):\n"," # triplanes_list: list of 3 tensors: each (B, C, H, W)\n"," inps = list(triplanes_list)\n"," xp = 1\n"," yp = 2\n"," zp = 0\n","\n"," if self.order == 'xz':\n"," inps[yp] = einops.rearrange(inps[yp], 'b c x z -> b c z x')\n","\n"," oplanes = [None] * 3\n","\n"," # We'll run pooling / concat / conv in FP32 (disable autocast), then cast back to original dtype.\n"," for iplane in [zp, xp, yp]:\n"," jplane = (iplane + 1) % 3\n"," kplane = (iplane + 2) % 3\n"," ifeat = inps[iplane]\n"," orig_dtype = ifeat.dtype\n","\n"," # disable autocast so reductions and groupnorm inside convs don't overflow in fp16\n"," with torch.cuda.amp.autocast(enabled=False):\n"," # cast to float32 for stable reductions\n"," j_in = inps[jplane].float()\n"," k_in = inps[kplane].float()\n"," i_in = ifeat.float()\n","\n"," # j_plane -> (b c k i) mean over i -> b c k 1 -> rearrange -> repeat to (b c j k)\n"," jpool = torch.mean(j_in, dim=3, keepdim=True) # b c k 1\n"," jpool = einops.rearrange(jpool, 'b c k 1 -> b c 1 k') # b c 1 k\n"," jpool = einops.repeat(jpool, 'b c 1 k -> b c j k', j=i_in.size(2))\n","\n"," # k_plane -> mean over i (dim=2) then rearrange and repeat to j,k\n"," kpool = torch.mean(k_in, dim=2, keepdim=True) # b c 1 j\n"," kpool = einops.rearrange(kpool, 'b c 1 j -> b c j 1') # b c j 1\n"," kpool = einops.repeat(kpool, 'b c j 1 -> b c j k', k=i_in.size(3))\n","\n"," # concat along channel dim: (i_in, jpool, kpool) -> [B, 3*C, H, W]\n"," catfeat = torch.cat([i_in, jpool, kpool], dim=1)\n","\n"," # run plane conv in FP32\n"," out_fp32 = self.plane_convs[iplane](catfeat)\n"," # cast back to original dtype for consistency with the rest of the model\n"," oplane = out_fp32.to(orig_dtype)\n","\n"," oplanes[iplane] = oplane\n","\n"," if self.order == 'xz':\n"," oplanes[yp] = einops.rearrange(oplanes[yp], 'b c z x -> b c x z')\n","\n"," return oplanes\n","\n","# ---------------------------\n","# roll/unroll helpers\n","# ---------------------------\n","def roll_triplanes(triplanes_list):\n"," tristack = torch.stack((triplanes_list), dim=2)\n"," return einops.rearrange(tristack, 'b c tri h w -> b c (tri h) w', tri=3)\n","\n","def unroll_triplanes(rolled_triplane):\n"," tristack = einops.rearrange(rolled_triplane, 'b c (tri h) w -> b c tri h w', tri=3)\n"," return torch.unbind(tristack, dim=2)\n","\n","def conv1x1triplane3daware(in_channels, out_channels, order='xz', **kwargs):\n"," return ConvTriplane3dAware(lambda inp, out: conv1x1(inp, out, **kwargs), in_channels, out_channels, order=order)\n","\n","# ---------------------------\n","# Normalize and nonlinearity\n","# ---------------------------\n","def Normalize(in_channels, num_groups=32):\n"," num_groups = min(in_channels, num_groups)\n"," # GroupNorm accepts num_channels divisible by num_groups; ensure division is valid by reducing groups if needed\n"," while in_channels % num_groups != 0 and num_groups > 1:\n"," num_groups -= 1\n"," return torch.nn.GroupNorm(num_groups=num_groups, num_channels=in_channels, eps=1e-6, affine=True)\n","\n","def nonlinearity(x):\n"," # Swish: use float32 internally if x is fp16\n"," orig_dtype = x.dtype\n"," with torch.cuda.amp.autocast(enabled=False):\n"," out = x.float() * torch.sigmoid(x.float())\n"," return out.to(orig_dtype)\n","\n","# ---------------------------\n","# Upsample / Downsample (unchanged but careful with dtype)\n","# ---------------------------\n","class Upsample(nn.Module):\n"," def __init__(self, in_channels, with_conv):\n"," super().__init__()\n"," self.with_conv = with_conv\n"," if self.with_conv:\n"," self.conv = nn.Conv2d(in_channels, in_channels, kernel_size=3, stride=1, padding=1)\n","\n"," def forward(self, x):\n"," x = torch.nn.functional.interpolate(x, scale_factor=2.0, mode=\"nearest\")\n"," if self.with_conv:\n"," # run conv in FP32 if input is fp16 to avoid small-range issues\n"," if x.dtype == torch.float16:\n"," with torch.cuda.amp.autocast(enabled=False):\n"," x = self.conv(x.float()).to(torch.float16)\n"," else:\n"," x = self.conv(x)\n"," return x\n","\n","class Downsample(nn.Module):\n"," def __init__(self, in_channels, with_conv):\n"," super().__init__()\n"," self.with_conv = with_conv\n"," if self.with_conv:\n"," self.conv = nn.Conv2d(in_channels, in_channels, kernel_size=3, stride=2, padding=0)\n","\n"," def forward(self, x):\n"," if self.with_conv:\n"," pad = (0, 1, 0, 1)\n"," x = torch.nn.functional.pad(x, pad, mode=\"constant\", value=0)\n"," if x.dtype == torch.float16:\n"," with torch.cuda.amp.autocast(enabled=False):\n"," x = self.conv(x.float()).to(torch.float16)\n"," else:\n"," x = self.conv(x)\n"," else:\n"," x = torch.nn.functional.avg_pool2d(x, kernel_size=2, stride=2)\n"," return x\n","\n","# ---------------------------\n","# ResnetBlock3dAware (FP16-safe)\n","# ---------------------------\n","class ResnetBlock3dAware(nn.Module):\n"," def __init__(self, in_channels, out_channels=None):\n"," super().__init__()\n"," self.in_channels = in_channels\n"," out_channels = in_channels if out_channels is None else out_channels\n"," self.out_channels = out_channels\n","\n"," self.norm1 = Normalize(in_channels)\n"," self.conv1 = conv3x3(self.in_channels, self.out_channels)\n","\n"," self.norm_mid = Normalize(out_channels)\n"," self.conv_3daware = conv1x1triplane3daware(self.out_channels, self.out_channels)\n","\n"," self.norm2 = Normalize(out_channels)\n"," self.conv2 = conv3x3(self.out_channels, self.out_channels)\n","\n"," if self.in_channels != self.out_channels:\n"," self.nin_shortcut = torch.nn.Conv2d(in_channels, out_channels, kernel_size=1, stride=1, padding=0)\n","\n"," def forward(self, x):\n"," # To avoid FP16 numerical problems, run GroupNorm/Swish/Triplane-mixing in FP32 using autocast disabled.\n"," orig_dtype = x.dtype\n","\n"," # Step 1: norm1, swish, conv1 (conv1 we allow to run in FP16 if safe; but do norm+swish in FP32)\n"," with torch.cuda.amp.autocast(enabled=False):\n"," h = self.norm1(x.float())\n"," h = nonlinearity(h).float()\n"," h = self.conv1(h) # conv1 runs in FP32\n"," h = h.to(orig_dtype) # back to original dtype\n","\n"," # Step 2: norm_mid, swish, unroll, conv_3daware (do entire block in FP32)\n"," with torch.cuda.amp.autocast(enabled=False):\n"," h_fp = self.norm_mid(h.float())\n"," h_fp = nonlinearity(h_fp)\n"," planes = unroll_triplanes(h_fp) # list of 3 FP32 tensors\n"," planes = self.conv_3daware(planes) # conv_3daware returns FP32 outputs (we ensured inside)\n"," h = roll_triplanes(planes)\n"," h = h.to(orig_dtype)\n","\n"," # Step 3: norm2, swish, conv2\n"," with torch.cuda.amp.autocast(enabled=False):\n"," h2 = self.norm2(h.float())\n"," h2 = nonlinearity(h2)\n"," h2 = self.conv2(h2)\n"," h2 = h2.to(orig_dtype)\n","\n"," if self.in_channels != self.out_channels:\n"," with torch.cuda.amp.autocast(enabled=False):\n"," x_sc = self.nin_shortcut(x.float())\n"," x_sc = x_sc.to(orig_dtype)\n"," return x_sc + h2\n"," else:\n"," return x + h2\n","\n","# ---------------------------\n","# DownConv3dAware, UpConv3dAware (reuse blocks)\n","# ---------------------------\n","class DownConv3dAware(nn.Module):\n"," def __init__(self, in_channels, out_channels, downsample=True, with_conv=False):\n"," super(DownConv3dAware, self).__init__()\n"," self.in_channels = in_channels\n"," self.out_channels = out_channels\n"," self.block = ResnetBlock3dAware(in_channels=in_channels, out_channels=out_channels)\n"," self.do_downsample = downsample\n"," self.downsample = Downsample(out_channels, with_conv=with_conv)\n","\n"," def forward(self, x):\n"," x = self.block(x)\n"," before_pool = x\n"," if self.do_downsample:\n"," x = einops.rearrange(x, 'b c (tri h) w -> b (c tri) h w', tri=3)\n"," x = self.downsample(x)\n"," x = einops.rearrange(x, 'b (c tri) h w -> b c (tri h) w', tri=3)\n"," return x, before_pool\n","\n","class UpConv3dAware(nn.Module):\n"," def __init__(self, in_channels, out_channels, merge_mode='concat', with_conv=False):\n"," super(UpConv3dAware, self).__init__()\n"," self.in_channels = in_channels\n"," self.out_channels = out_channels\n"," self.merge_mode = merge_mode\n"," self.upsample = Upsample(in_channels, with_conv)\n","\n"," if self.merge_mode == 'concat':\n"," self.norm1 = Normalize(in_channels + out_channels)\n"," self.block = ResnetBlock3dAware(in_channels=in_channels + out_channels, out_channels=out_channels)\n"," else:\n"," self.norm1 = Normalize(in_channels)\n"," self.block = ResnetBlock3dAware(in_channels=in_channels, out_channels=out_channels)\n","\n"," def forward(self, from_down, from_up):\n"," from_up = self.upsample(from_up)\n"," if self.merge_mode == 'concat':\n"," x = torch.cat((from_up, from_down), 1)\n"," else:\n"," x = from_up + from_down\n"," x = self.norm1(x)\n"," x = self.block(x)\n"," return x\n","\n","# ---------------------------\n","# UNetTriplane3dAware (main)\n","# ---------------------------\n","class UNetTriplane3dAware(nn.Module):\n"," def __init__(self, out_channels, in_channels=3, depth=5, start_filts=64, use_initial_conv=False, merge_mode='concat', **kwargs):\n"," super(UNetTriplane3dAware, self).__init__()\n"," self.out_channels = out_channels\n"," self.in_channels = in_channels\n"," self.start_filts = start_filts\n"," self.depth = depth\n"," self.use_initial_conv = use_initial_conv\n","\n"," if use_initial_conv:\n"," self.conv_initial = conv1x1(self.in_channels, self.start_filts)\n","\n"," self.down_convs = []\n"," self.up_convs = []\n","\n"," for i in range(depth):\n"," if i == 0:\n"," ins = self.start_filts if use_initial_conv else self.in_channels\n"," else:\n"," ins = outs\n"," outs = self.start_filts * (2 ** i)\n"," downsamp_it = True if i < depth - 1 else False\n"," down_conv = DownConv3dAware(ins, outs, downsample=downsamp_it)\n"," self.down_convs.append(down_conv)\n","\n"," for i in range(depth - 1):\n"," ins = outs\n"," outs = ins // 2\n"," up_conv = UpConv3dAware(ins, outs, merge_mode=merge_mode)\n"," self.up_convs.append(up_conv)\n","\n"," self.down_convs = nn.ModuleList(self.down_convs)\n"," self.up_convs = nn.ModuleList(self.up_convs)\n","\n"," self.norm_out = Normalize(outs)\n"," self.conv_final = conv1x1(outs, self.out_channels)\n","\n"," self.reset_params()\n","\n"," @staticmethod\n"," def weight_init(m):\n"," # use kaiming normal which is more robust for Swish-like activations\n"," if isinstance(m, (nn.Conv2d, nn.ConvTranspose2d)):\n"," init.kaiming_normal_(m.weight, a=0, mode='fan_in', nonlinearity='leaky_relu')\n"," if m.bias is not None:\n"," init.constant_(m.bias, 0)\n","\n"," def reset_params(self):\n"," for i, m in enumerate(self.modules()):\n"," self.weight_init(m)\n","\n"," def forward(self, x):\n"," # x: (B, tri, C, H, W)\n"," # roll\n"," x = einops.rearrange(x, 'b tri c h w -> b c (tri h) w', tri=3)\n","\n"," if self.use_initial_conv:\n"," x = self.conv_initial(x)\n","\n"," encoder_outs = []\n"," for i, module in enumerate(self.down_convs):\n"," x, before_pool = module(x)\n"," encoder_outs.append(before_pool)\n","\n"," for i, module in enumerate(self.up_convs):\n"," before_pool = encoder_outs[-(i + 2)]\n"," x = module(before_pool, x)\n","\n"," # final\n"," with torch.cuda.amp.autocast(enabled=False):\n"," x = self.norm_out(x.float())\n"," x = self.conv_final(nonlinearity(x))\n"," x = x.to(torch.float32 if x.dtype == torch.float32 else x.dtype) # keep dtype consistent\n"," print(\"After final conv shape:\", x.shape, end='\\n')\n"," # unroll\n"," x = einops.rearrange(x, 'b c (tri h) w -> b tri c h w', tri=3)\n"," print(\"UNetTriplane3dAware output shape:\", x.shape, end='\\n')\n"," return x\n","\n","def setup_unet(output_channels, input_channels, unet_cfg):\n"," if unet_cfg['use_3d_aware']:\n"," assert(unet_cfg['rolled'])\n"," unet = UNetTriplane3dAware(\n"," out_channels=output_channels,\n"," in_channels=input_channels,\n"," depth=unet_cfg['depth'],\n"," use_initial_conv=unet_cfg['use_initial_conv'],\n"," start_filts=unet_cfg['start_hidden_channels'])\n"," else:\n"," raise NotImplementedError\n"," return unet\n"],"metadata":{"id":"fDde0mW-XdmI","collapsed":true,"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1767762715574,"user_tz":480,"elapsed":4,"user":{"displayName":"navin shrivatsan","userId":"02096111809868742973"}},"outputId":"0b74d196-2b9d-4210-f060-97046db6faf6"},"execution_count":14,"outputs":[{"output_type":"stream","name":"stdout","text":["Overwriting /content/PartField/partfield/model/PVCNN/unet_3daware.py\n"]}]},{"cell_type":"code","source":["!mkdir -p /content/PartField/data/objaverse_samples/"],"metadata":{"id":"a6GFFlBBNoXy","executionInfo":{"status":"ok","timestamp":1767762715578,"user_tz":480,"elapsed":3,"user":{"displayName":"navin shrivatsan","userId":"02096111809868742973"}}},"execution_count":15,"outputs":[]},{"cell_type":"code","source":["!micromamba run -n partfield python partfield_inference.py -c configs/final/demo.yaml --opts result_name partfield_features/objaverse dataset.data_path data/objaverse_samples"],"metadata":{"id":"4ivhNgItNoVi","collapsed":true,"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1767765792181,"user_tz":480,"elapsed":2896323,"user":{"displayName":"navin shrivatsan","userId":"02096111809868742973"}},"outputId":"76e7f487-b28f-40ce-933a-e5a1fd95b5c8"},"execution_count":17,"outputs":[{"output_type":"stream","name":"stdout","text":["/root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages/lightning/fabric/__init__.py:40: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html. The pkg_resources package is slated for removal as early as 2025-11-30. Refrain from using this package or pin to Setuptools<81.\n","started\n","Seed set to 0\n","checkpoint\n","trainer\n","Using 16bit Automatic Mixed Precision (AMP)\n","/root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages/lightning/pytorch/plugins/precision/amp.py:55: `torch.cuda.amp.GradScaler(args...)` is deprecated. Please use `torch.amp.GradScaler('cuda', args...)` instead.\n","GPU available: True (cuda), used: True\n","TPU available: False, using: 0 TPU cores\n","IPU available: False, using: 0 IPUs\n","HPU available: False, using: 0 HPUs\n","/root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages/lightning/pytorch/trainer/connectors/logger_connector/logger_connector.py:75: Starting from v1.9.0, `tensorboardX` has been removed as a dependency of the `lightning.pytorch` package, due to potential conflicts with other packages in the ML ecosystem. For this reason, `logger=True` will use `CSVLogger` as the default logger, unless the `tensorboard` or `tensorboardX` packages are found. Please `pip install lightning[extra]` or one of them to enable TensorBoard support by default\n","model\n","You are using a CUDA device ('NVIDIA L4') that has Tensor Cores. To properly utilize them, you should set `torch.set_float32_matmul_precision('medium' | 'high')` which will trade-off precision for performance. For more details, read https://pytorch.org/docs/stable/generated/torch.set_float32_matmul_precision.html#torch.set_float32_matmul_precision\n","Missing logger folder: /content/PartField/lightning_logs\n","LOCAL_RANK: 0 - CUDA_VISIBLE_DEVICES: [0]\n","\n"," | Name | Type | Params\n","-------------------------------------------------------------\n","0 | triplane_transformer | TriplaneTransformer | 99.3 M\n","1 | pvcnn | TriPlanePC2Encoder | 7.6 M \n"," | other params | n/a | 1 \n","-------------------------------------------------------------\n","106 M Trainable params\n","0 Non-trainable params\n","106 M Total params\n","427.561 Total estimated model params size (MB)\n","val dataset len: 1\n","/root/.local/share/mamba/envs/partfield/lib/python3.10/site-packages/lightning/pytorch/loops/fit_loop.py:298: The number of training batches (1) is smaller than the logging interval Trainer(log_every_n_steps=50). Set a lower value for log_every_n_steps if you want to see logs for the training epoch.\n","Epoch 0: 0% 0/1 [00:00