diff --git a/jarvis-tools-notebooks/chipsff_scaling.ipynb b/jarvis-tools-notebooks/chipsff_scaling.ipynb
new file mode 100644
index 0000000..78dff11
--- /dev/null
+++ b/jarvis-tools-notebooks/chipsff_scaling.ipynb
@@ -0,0 +1,763 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 0,
+ "metadata": {
+ "colab": {
+ "provenance": [],
+ "authorship_tag": "ABX9TyPs6g1TuoqIIalWL8bP0kGV",
+ "include_colab_link": true
+ },
+ "kernelspec": {
+ "name": "python3",
+ "display_name": "Python 3"
+ },
+ "language_info": {
+ "name": "python"
+ }
+ },
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "view-in-github",
+ "colab_type": "text"
+ },
+ "source": [
+ "
"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "!pip install -q condacolab\n",
+ "import condacolab\n",
+ "condacolab.install()"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "mv6mGRHKA3c9",
+ "outputId": "7e3bf3c7-ba61-45bd-8283-f0b26149e7f5"
+ },
+ "execution_count": 1,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "⏬ Downloading https://github.com/conda-forge/miniforge/releases/download/23.11.0-0/Mambaforge-23.11.0-0-Linux-x86_64.sh...\n",
+ "📦 Installing...\n",
+ "📌 Adjusting configuration...\n",
+ "🩹 Patching environment...\n",
+ "⏲ Done in 0:00:13\n",
+ "🔁 Restarting kernel...\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "%%time\n",
+ "!conda install alignn chgnet matgl pytorch torchvision torchaudio pytorch-cuda -c pytorch -c nvidia -y --quiet"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "WdKN6F9aG7Z_",
+ "outputId": "a5a9d4d7-49b3-47e0-f13c-4703f21eab20"
+ },
+ "execution_count": 1,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Channels:\n",
+ " - pytorch\n",
+ " - nvidia\n",
+ " - conda-forge\n",
+ "Platform: linux-64\n",
+ "Collecting package metadata (repodata.json): ...working... done\n",
+ "Solving environment: ...working... done\n",
+ "\n",
+ "## Package Plan ##\n",
+ "\n",
+ " environment location: /usr/local\n",
+ "\n",
+ " added / updated specs:\n",
+ " - alignn\n",
+ " - chgnet\n",
+ " - matgl\n",
+ " - pytorch\n",
+ " - pytorch-cuda\n",
+ " - torchaudio\n",
+ " - torchvision\n",
+ "\n",
+ "\n",
+ "The following packages will be downloaded:\n",
+ "\n",
+ " package | build\n",
+ " ---------------------------|-----------------\n",
+ " _openmp_mutex-4.5 | 2_kmp_llvm 6 KB conda-forge\n",
+ " absl-py-2.1.0 | pyhd8ed1ab_1 105 KB conda-forge\n",
+ " alignn-2024.10.30 | pyhd8ed1ab_0 76 KB conda-forge\n",
+ " annotated-types-0.7.0 | pyhd8ed1ab_1 18 KB conda-forge\n",
+ " ase-3.23.0 | pyhd8ed1ab_0 1.8 MB conda-forge\n",
+ " astunparse-1.6.3 | pyhd8ed1ab_2 18 KB conda-forge\n",
+ " babel-2.16.0 | pyhd8ed1ab_1 6.2 MB conda-forge\n",
+ " blinker-1.9.0 | pyhff2d567_0 14 KB conda-forge\n",
+ " brotli-1.1.0 | hd590300_1 19 KB conda-forge\n",
+ " brotli-bin-1.1.0 | hd590300_1 19 KB conda-forge\n",
+ " c-ares-1.34.3 | hb9d3cd8_1 200 KB conda-forge\n",
+ " ca-certificates-2024.8.30 | hbcca054_0 155 KB conda-forge\n",
+ " cached-property-1.5.2 | hd8ed1ab_1 4 KB conda-forge\n",
+ " cached_property-1.5.2 | pyha770c72_1 11 KB conda-forge\n",
+ " certifi-2024.8.30 | pyhd8ed1ab_0 160 KB conda-forge\n",
+ " chgnet-0.3.8 | py310hc51659f_0 8.5 MB conda-forge\n",
+ " click-8.1.7 |unix_pyh707e725_1 83 KB conda-forge\n",
+ " contourpy-1.3.1 | py310h3788b33_0 255 KB conda-forge\n",
+ " cuda-cudart-12.4.127 | 0 198 KB nvidia\n",
+ " cuda-cupti-12.4.127 | 0 16.4 MB nvidia\n",
+ " cuda-libraries-12.4.1 | 0 2 KB nvidia\n",
+ " cuda-nvrtc-12.4.127 | 0 21.0 MB nvidia\n",
+ " cuda-nvtx-12.4.127 | 0 58 KB nvidia\n",
+ " cuda-opencl-12.6.77 | 0 25 KB nvidia\n",
+ " cuda-runtime-12.4.1 | 0 2 KB nvidia\n",
+ " cuda-version-12.6 | 3 16 KB nvidia\n",
+ " cycler-0.12.1 | pyhd8ed1ab_1 13 KB conda-forge\n",
+ " cython-3.0.11 | py310h5b1441d_3 3.1 MB conda-forge\n",
+ " dgl-2.3.0 | py310h039f8d5_0 4.1 MB conda-forge\n",
+ " ffmpeg-4.3 | hf484d3e_0 9.9 MB pytorch\n",
+ " filelock-3.16.1 | pyhd8ed1ab_1 17 KB conda-forge\n",
+ " flake8-7.1.1 | pyhd8ed1ab_1 109 KB conda-forge\n",
+ " flask-3.1.0 | pyhff2d567_0 80 KB conda-forge\n",
+ " flatbuffers-24.3.25 | h59595ed_0 1.4 MB conda-forge\n",
+ " fonttools-4.55.3 | py310h89163eb_0 2.2 MB conda-forge\n",
+ " freetype-2.12.1 | h267a509_2 620 KB conda-forge\n",
+ " fsspec-2024.10.0 | pyhd8ed1ab_1 132 KB conda-forge\n",
+ " future-1.0.0 | pyhd8ed1ab_1 356 KB conda-forge\n",
+ " gast-0.6.0 | pyhd8ed1ab_0 24 KB conda-forge\n",
+ " ghp-import-2.1.0 | pyhd8ed1ab_1 16 KB conda-forge\n",
+ " giflib-5.2.2 | hd590300_0 75 KB conda-forge\n",
+ " gmp-6.3.0 | hac33072_2 449 KB conda-forge\n",
+ " gmpy2-2.1.5 | py310he8512ff_3 198 KB conda-forge\n",
+ " gnutls-3.6.13 | h85f3911_1 2.0 MB conda-forge\n",
+ " google-pasta-0.2.0 | pyhd8ed1ab_2 48 KB conda-forge\n",
+ " grpcio-1.62.2 | py310h1b8f574_0 980 KB conda-forge\n",
+ " h5py-3.12.1 |nompi_py310h60e0fe6_102 1.2 MB conda-forge\n",
+ " hdf5-1.14.3 |nompi_hdf9ad27_105 3.7 MB conda-forge\n",
+ " importlib-metadata-8.5.0 | pyha770c72_1 28 KB conda-forge\n",
+ " importlib-resources-6.4.5 | pyhd8ed1ab_1 9 KB conda-forge\n",
+ " importlib_resources-6.4.5 | pyhd8ed1ab_1 32 KB conda-forge\n",
+ " inflect-7.4.0 | pyhd8ed1ab_1 37 KB conda-forge\n",
+ " itsdangerous-2.2.0 | pyhd8ed1ab_1 19 KB conda-forge\n",
+ " jarvis-tools-2024.10.30 | pyhd8ed1ab_0 3.8 MB conda-forge\n",
+ " jinja2-3.1.4 | pyhd8ed1ab_1 108 KB conda-forge\n",
+ " joblib-1.4.2 | pyhd8ed1ab_1 215 KB conda-forge\n",
+ " keras-3.7.0 | pyh753f3f9_1 681 KB conda-forge\n",
+ " kiwisolver-1.4.7 | py310h3788b33_0 70 KB conda-forge\n",
+ " lame-3.100 | h166bdaf_1003 496 KB conda-forge\n",
+ " latexcodec-2.0.1 | pyh9f0ad1d_0 18 KB conda-forge\n",
+ " lcms2-2.16 | hb7c19ff_0 239 KB conda-forge\n",
+ " lerc-4.0.0 | h27087fc_0 275 KB conda-forge\n",
+ " libabseil-20240116.2 | cxx17_he02047a_1 1.2 MB conda-forge\n",
+ " libaec-1.1.3 | h59595ed_0 35 KB conda-forge\n",
+ " libblas-3.9.0 |25_linux64_openblas 15 KB conda-forge\n",
+ " libbrotlicommon-1.1.0 | hd590300_1 68 KB conda-forge\n",
+ " libbrotlidec-1.1.0 | hd590300_1 32 KB conda-forge\n",
+ " libbrotlienc-1.1.0 | hd590300_1 276 KB conda-forge\n",
+ " libcblas-3.9.0 |25_linux64_openblas 15 KB conda-forge\n",
+ " libcublas-12.4.5.8 | 0 309.2 MB nvidia\n",
+ " libcufft-11.2.1.3 | 0 190.5 MB nvidia\n",
+ " libcufile-1.11.1.6 | 0 899 KB nvidia\n",
+ " libcurand-10.3.7.77 | 0 39.7 MB nvidia\n",
+ " libcurl-8.8.0 | hca28451_0 396 KB conda-forge\n",
+ " libcusolver-11.6.1.9 | 0 114.0 MB nvidia\n",
+ " libcusparse-12.3.1.170 | 0 179.6 MB nvidia\n",
+ " libdeflate-1.20 | hd590300_0 70 KB conda-forge\n",
+ " libgcc-14.2.0 | h77fa898_1 829 KB conda-forge\n",
+ " libgcc-ng-14.2.0 | h69a702a_1 53 KB conda-forge\n",
+ " libgfortran-14.2.0 | h69a702a_1 53 KB conda-forge\n",
+ " libgfortran-ng-14.2.0 | h69a702a_1 53 KB conda-forge\n",
+ " libgfortran5-14.2.0 | hd5240d6_1 1.4 MB conda-forge\n",
+ " libgomp-14.2.0 | h77fa898_1 450 KB conda-forge\n",
+ " libgrpc-1.62.2 | h15f2491_0 7.0 MB conda-forge\n",
+ " libhwloc-2.9.3 |default_h554bfaf_1009 2.5 MB conda-forge\n",
+ " libjpeg-turbo-3.0.0 | hd590300_1 604 KB conda-forge\n",
+ " liblapack-3.9.0 |25_linux64_openblas 15 KB conda-forge\n",
+ " liblapacke-3.9.0 |25_linux64_openblas 15 KB conda-forge\n",
+ " libnpp-12.2.5.30 | 0 142.8 MB nvidia\n",
+ " libnvfatbin-12.6.77 | 0 783 KB nvidia\n",
+ " libnvjitlink-12.4.127 | 0 18.2 MB nvidia\n",
+ " libnvjpeg-12.3.1.117 | 0 3.0 MB nvidia\n",
+ " libopenblas-0.3.28 |pthreads_h94d23a6_1 5.3 MB conda-forge\n",
+ " libpng-1.6.43 | h2797004_0 281 KB conda-forge\n",
+ " libprotobuf-4.25.3 | h08a7969_0 2.7 MB conda-forge\n",
+ " libre2-11-2023.09.01 | h5a48ba9_2 227 KB conda-forge\n",
+ " libsqlite-3.46.0 | hde9e2c9_0 845 KB conda-forge\n",
+ " libstdcxx-14.2.0 | hc0a3c3a_1 3.7 MB conda-forge\n",
+ " libtiff-4.6.0 | h1dd3fc0_3 276 KB conda-forge\n",
+ " libtorch-2.3.1 |cpu_mkl_h0bb0d08_100 47.5 MB conda-forge\n",
+ " liburing-2.7 | h434a139_0 107 KB conda-forge\n",
+ " libuv-1.49.2 | hb9d3cd8_0 864 KB conda-forge\n",
+ " libwebp-base-1.4.0 | hd590300_0 429 KB conda-forge\n",
+ " libxcb-1.15 | h0b41bf4_0 375 KB conda-forge\n",
+ " lightning-2.4.0 | pyhd8ed1ab_0 435 KB conda-forge\n",
+ " lightning-utilities-0.11.9 | pyhff2d567_0 28 KB conda-forge\n",
+ " llvm-openmp-19.1.5 | h024ca30_0 3.0 MB conda-forge\n",
+ " markdown-3.6 | pyhd8ed1ab_0 76 KB conda-forge\n",
+ " markdown-it-py-3.0.0 | pyhd8ed1ab_1 63 KB conda-forge\n",
+ " markupsafe-3.0.2 | py310h89163eb_1 23 KB conda-forge\n",
+ " matgl-1.1.3 | pyhd8ed1ab_0 195 KB conda-forge\n",
+ " matplotlib-base-3.9.3 | py310h68603db_0 6.8 MB conda-forge\n",
+ " mccabe-0.7.0 | pyhd8ed1ab_1 13 KB conda-forge\n",
+ " mdurl-0.1.2 | pyhd8ed1ab_1 14 KB conda-forge\n",
+ " mergedeep-1.3.4 | pyhd8ed1ab_0 9 KB conda-forge\n",
+ " metis-5.1.1 | h59595ed_2 3.7 MB conda-forge\n",
+ " mkdocs-1.6.1 | pyhd8ed1ab_0 3.4 MB conda-forge\n",
+ " mkdocs-get-deps-0.2.0 | pyhd8ed1ab_0 14 KB conda-forge\n",
+ " mkdocs-material-9.5.48 | pyhd8ed1ab_0 4.7 MB conda-forge\n",
+ " mkdocs-material-extensions-1.3.1| pyhd8ed1ab_0 16 KB conda-forge\n",
+ " mkl-2023.2.0 | h84fe81f_50496 156.8 MB conda-forge\n",
+ " ml_dtypes-0.3.2 | py310hcc13569_0 160 KB conda-forge\n",
+ " monty-2024.10.21 | pyhd8ed1ab_0 44 KB conda-forge\n",
+ " more-itertools-10.5.0 | pyhd8ed1ab_1 56 KB conda-forge\n",
+ " mpc-1.3.1 | h24ddda3_1 114 KB conda-forge\n",
+ " mpfr-4.2.1 | h90cbb55_3 620 KB conda-forge\n",
+ " mpmath-1.3.0 | pyhd8ed1ab_1 429 KB conda-forge\n",
+ " munkres-1.1.4 | pyh9f0ad1d_0 12 KB conda-forge\n",
+ " namex-0.0.8 | pyhd8ed1ab_1 11 KB conda-forge\n",
+ " nettle-3.6 | he412f7d_0 6.5 MB conda-forge\n",
+ " networkx-3.4.2 | pyh267e887_2 1.2 MB conda-forge\n",
+ " numpy-1.26.4 | py310hb13e2d6_0 6.7 MB conda-forge\n",
+ " nvidia-ml-7.352.0 | py_0 19 KB conda-forge\n",
+ " openh264-2.1.1 | h780b84a_0 1.5 MB conda-forge\n",
+ " openjpeg-2.5.2 | h488ebb8_0 334 KB conda-forge\n",
+ " openssl-3.4.0 | hb9d3cd8_0 2.8 MB conda-forge\n",
+ " opt_einsum-3.4.0 | pyhd8ed1ab_1 61 KB conda-forge\n",
+ " optree-0.13.1 | py310h3788b33_1 328 KB conda-forge\n",
+ " paginate-0.5.7 | pyhd8ed1ab_0 18 KB conda-forge\n",
+ " palettable-3.3.3 | pyhd8ed1ab_0 79 KB conda-forge\n",
+ " pandas-2.2.3 | py310h5eaa309_1 12.4 MB conda-forge\n",
+ " pathspec-0.12.1 | pyhd8ed1ab_1 40 KB conda-forge\n",
+ " pillow-10.3.0 | py310hf73ecf8_0 39.8 MB conda-forge\n",
+ " plotly-5.24.1 | pyhd8ed1ab_1 7.7 MB conda-forge\n",
+ " protobuf-4.25.3 | py310h0e2eeba_1 324 KB conda-forge\n",
+ " psutil-6.1.0 | py310ha75aee5_0 360 KB conda-forge\n",
+ " pthread-stubs-0.4 | hb9d3cd8_1002 8 KB conda-forge\n",
+ " pybtex-0.24.0 | pyhd8ed1ab_2 71 KB conda-forge\n",
+ " pycodestyle-2.12.1 | pyhd8ed1ab_1 34 KB conda-forge\n",
+ " pydantic-2.10.3 | pyh3cfb1c2_0 310 KB conda-forge\n",
+ " pydantic-core-2.27.1 | py310h505e2c1_0 1.6 MB conda-forge\n",
+ " pydantic-settings-2.6.1 | pyh3cfb1c2_1 30 KB conda-forge\n",
+ " pydocstyle-6.3.0 | pyhd8ed1ab_1 39 KB conda-forge\n",
+ " pyflakes-3.2.0 | pyhd8ed1ab_1 57 KB conda-forge\n",
+ " pygments-2.18.0 | pyhd8ed1ab_1 856 KB conda-forge\n",
+ " pymatgen-2024.5.31 | py310h8a78493_0 3.9 MB conda-forge\n",
+ " pymdown-extensions-10.12 | pyhd8ed1ab_0 163 KB conda-forge\n",
+ " pyparsing-2.4.7 | pyhd8ed1ab_1 60 KB conda-forge\n",
+ " python-dateutil-2.9.0.post0| pyhff2d567_1 217 KB conda-forge\n",
+ " python-dotenv-1.0.1 | pyhd8ed1ab_1 24 KB conda-forge\n",
+ " python-flatbuffers-24.3.25 | pyhe33e51e_1 34 KB conda-forge\n",
+ " python-lmdb-1.5.1 | py310h74df5ed_1 130 KB conda-forge\n",
+ " python-tzdata-2024.2 | pyhd8ed1ab_1 139 KB conda-forge\n",
+ " pytorch-2.3.1 |cpu_mkl_py310h75865b9_100 28.9 MB conda-forge\n",
+ " pytorch-cuda-12.4 | hc786d27_7 7 KB pytorch\n",
+ " pytorch-lightning-2.4.0 | pyhd8ed1ab_0 434 KB conda-forge\n",
+ " pytorch-mutex-1.0 | cpu 3 KB pytorch\n",
+ " pytz-2024.1 | pyhd8ed1ab_0 184 KB conda-forge\n",
+ " pyyaml-6.0.2 | py310ha75aee5_1 178 KB conda-forge\n",
+ " pyyaml-env-tag-0.1 | pyhd8ed1ab_0 7 KB conda-forge\n",
+ " qhull-2020.2 | h434a139_5 540 KB conda-forge\n",
+ " re2-2023.09.01 | h7f4b329_2 26 KB conda-forge\n",
+ " regex-2024.11.6 | py310ha75aee5_0 345 KB conda-forge\n",
+ " rich-13.9.4 | pyhd8ed1ab_1 181 KB conda-forge\n",
+ " scikit-learn-1.6.0 | py310h27f47ee_0 9.0 MB conda-forge\n",
+ " scipy-1.14.1 | py310hfcf56fc_2 16.0 MB conda-forge\n",
+ " six-1.17.0 | pyhd8ed1ab_0 16 KB conda-forge\n",
+ " sleef-3.7 | h1b44611_2 1.8 MB conda-forge\n",
+ " snappy-1.2.1 | h8bd8927_1 42 KB conda-forge\n",
+ " snowballstemmer-2.2.0 | pyhd8ed1ab_0 57 KB conda-forge\n",
+ " spglib-2.5.0 | py310h39fee3d_2 637 KB conda-forge\n",
+ " sympy-1.13.3 | pypyh2585a3b_103 4.4 MB conda-forge\n",
+ " tabulate-0.9.0 | pyhd8ed1ab_2 37 KB conda-forge\n",
+ " tbb-2021.11.0 | h00ab1b0_1 191 KB conda-forge\n",
+ " tenacity-9.0.0 | pyhd8ed1ab_1 24 KB conda-forge\n",
+ " tensorboard-2.16.2 | pyhd8ed1ab_0 4.9 MB conda-forge\n",
+ " tensorboard-data-server-0.7.0| py310h6c63255_2 3.4 MB conda-forge\n",
+ " tensorflow-2.16.1 |cpu_py310h49b650b_0 41 KB conda-forge\n",
+ " tensorflow-base-2.16.1 |cpu_py310h224022f_0 147.3 MB conda-forge\n",
+ " tensorflow-estimator-2.16.1|cpu_py310hc6dcfef_0 540 KB conda-forge\n",
+ " termcolor-2.5.0 | pyhd8ed1ab_1 12 KB conda-forge\n",
+ " threadpoolctl-3.5.0 | pyhc1e730c_0 23 KB conda-forge\n",
+ " tomli-2.2.1 | pyhd8ed1ab_1 19 KB conda-forge\n",
+ " toolz-1.0.0 | pyhd8ed1ab_1 51 KB conda-forge\n",
+ " torchaudio-2.3.1 | py310_cpu 5.0 MB pytorch\n",
+ " torchdata-0.7.1 | py310 2.4 MB pytorch\n",
+ " torchmetrics-1.5.2 | pyhe5570ce_0 352 KB conda-forge\n",
+ " torchvision-0.18.1 | py310_cpu 6.8 MB pytorch\n",
+ " typeguard-4.4.1 | pyhd8ed1ab_1 34 KB conda-forge\n",
+ " typing-extensions-4.12.2 | hd8ed1ab_1 10 KB conda-forge\n",
+ " typing_extensions-4.12.2 | pyha770c72_1 39 KB conda-forge\n",
+ " uncertainties-3.2.2 | pyhd8ed1ab_2 54 KB conda-forge\n",
+ " unicodedata2-15.1.0 | py310ha75aee5_1 359 KB conda-forge\n",
+ " watchdog-6.0.0 | py310hff52083_0 113 KB conda-forge\n",
+ " werkzeug-3.1.3 | pyhd8ed1ab_1 238 KB conda-forge\n",
+ " wrapt-1.17.0 | py310ha75aee5_0 55 KB conda-forge\n",
+ " xmltodict-0.14.2 | pyhd8ed1ab_1 15 KB conda-forge\n",
+ " xorg-libxau-1.0.11 | hb9d3cd8_1 14 KB conda-forge\n",
+ " xorg-libxdmcp-1.1.5 | hb9d3cd8_0 19 KB conda-forge\n",
+ " yaml-0.2.5 | h7f98852_2 87 KB conda-forge\n",
+ " zipp-3.21.0 | pyhd8ed1ab_1 21 KB conda-forge\n",
+ " zlib-1.2.13 | hd590300_5 91 KB conda-forge\n",
+ " zstandard-0.23.0 | py310ha39cb0e_1 399 KB conda-forge\n",
+ " zstd-1.5.6 | ha6fb4c9_0 542 KB conda-forge\n",
+ " ------------------------------------------------------------\n",
+ " Total: 1.63 GB\n",
+ "\n",
+ "The following NEW packages will be INSTALLED:\n",
+ "\n",
+ " absl-py conda-forge/noarch::absl-py-2.1.0-pyhd8ed1ab_1 \n",
+ " alignn conda-forge/noarch::alignn-2024.10.30-pyhd8ed1ab_0 \n",
+ " annotated-types conda-forge/noarch::annotated-types-0.7.0-pyhd8ed1ab_1 \n",
+ " ase conda-forge/noarch::ase-3.23.0-pyhd8ed1ab_0 \n",
+ " astunparse conda-forge/noarch::astunparse-1.6.3-pyhd8ed1ab_2 \n",
+ " babel conda-forge/noarch::babel-2.16.0-pyhd8ed1ab_1 \n",
+ " blinker conda-forge/noarch::blinker-1.9.0-pyhff2d567_0 \n",
+ " brotli conda-forge/linux-64::brotli-1.1.0-hd590300_1 \n",
+ " brotli-bin conda-forge/linux-64::brotli-bin-1.1.0-hd590300_1 \n",
+ " cached-property conda-forge/noarch::cached-property-1.5.2-hd8ed1ab_1 \n",
+ " cached_property conda-forge/noarch::cached_property-1.5.2-pyha770c72_1 \n",
+ " chgnet conda-forge/linux-64::chgnet-0.3.8-py310hc51659f_0 \n",
+ " click conda-forge/noarch::click-8.1.7-unix_pyh707e725_1 \n",
+ " contourpy conda-forge/linux-64::contourpy-1.3.1-py310h3788b33_0 \n",
+ " cuda-cudart nvidia/linux-64::cuda-cudart-12.4.127-0 \n",
+ " cuda-cupti nvidia/linux-64::cuda-cupti-12.4.127-0 \n",
+ " cuda-libraries nvidia/linux-64::cuda-libraries-12.4.1-0 \n",
+ " cuda-nvrtc nvidia/linux-64::cuda-nvrtc-12.4.127-0 \n",
+ " cuda-nvtx nvidia/linux-64::cuda-nvtx-12.4.127-0 \n",
+ " cuda-opencl nvidia/linux-64::cuda-opencl-12.6.77-0 \n",
+ " cuda-runtime nvidia/linux-64::cuda-runtime-12.4.1-0 \n",
+ " cuda-version nvidia/noarch::cuda-version-12.6-3 \n",
+ " cycler conda-forge/noarch::cycler-0.12.1-pyhd8ed1ab_1 \n",
+ " cython conda-forge/linux-64::cython-3.0.11-py310h5b1441d_3 \n",
+ " dgl conda-forge/linux-64::dgl-2.3.0-py310h039f8d5_0 \n",
+ " ffmpeg pytorch/linux-64::ffmpeg-4.3-hf484d3e_0 \n",
+ " filelock conda-forge/noarch::filelock-3.16.1-pyhd8ed1ab_1 \n",
+ " flake8 conda-forge/noarch::flake8-7.1.1-pyhd8ed1ab_1 \n",
+ " flask conda-forge/noarch::flask-3.1.0-pyhff2d567_0 \n",
+ " flatbuffers conda-forge/linux-64::flatbuffers-24.3.25-h59595ed_0 \n",
+ " fonttools conda-forge/linux-64::fonttools-4.55.3-py310h89163eb_0 \n",
+ " freetype conda-forge/linux-64::freetype-2.12.1-h267a509_2 \n",
+ " fsspec conda-forge/noarch::fsspec-2024.10.0-pyhd8ed1ab_1 \n",
+ " future conda-forge/noarch::future-1.0.0-pyhd8ed1ab_1 \n",
+ " gast conda-forge/noarch::gast-0.6.0-pyhd8ed1ab_0 \n",
+ " ghp-import conda-forge/noarch::ghp-import-2.1.0-pyhd8ed1ab_1 \n",
+ " giflib conda-forge/linux-64::giflib-5.2.2-hd590300_0 \n",
+ " gmp conda-forge/linux-64::gmp-6.3.0-hac33072_2 \n",
+ " gmpy2 conda-forge/linux-64::gmpy2-2.1.5-py310he8512ff_3 \n",
+ " gnutls conda-forge/linux-64::gnutls-3.6.13-h85f3911_1 \n",
+ " google-pasta conda-forge/noarch::google-pasta-0.2.0-pyhd8ed1ab_2 \n",
+ " grpcio conda-forge/linux-64::grpcio-1.62.2-py310h1b8f574_0 \n",
+ " h5py conda-forge/linux-64::h5py-3.12.1-nompi_py310h60e0fe6_102 \n",
+ " hdf5 conda-forge/linux-64::hdf5-1.14.3-nompi_hdf9ad27_105 \n",
+ " importlib-metadata conda-forge/noarch::importlib-metadata-8.5.0-pyha770c72_1 \n",
+ " importlib-resourc~ conda-forge/noarch::importlib-resources-6.4.5-pyhd8ed1ab_1 \n",
+ " importlib_resourc~ conda-forge/noarch::importlib_resources-6.4.5-pyhd8ed1ab_1 \n",
+ " inflect conda-forge/noarch::inflect-7.4.0-pyhd8ed1ab_1 \n",
+ " itsdangerous conda-forge/noarch::itsdangerous-2.2.0-pyhd8ed1ab_1 \n",
+ " jarvis-tools conda-forge/noarch::jarvis-tools-2024.10.30-pyhd8ed1ab_0 \n",
+ " jinja2 conda-forge/noarch::jinja2-3.1.4-pyhd8ed1ab_1 \n",
+ " joblib conda-forge/noarch::joblib-1.4.2-pyhd8ed1ab_1 \n",
+ " keras conda-forge/noarch::keras-3.7.0-pyh753f3f9_1 \n",
+ " kiwisolver conda-forge/linux-64::kiwisolver-1.4.7-py310h3788b33_0 \n",
+ " lame conda-forge/linux-64::lame-3.100-h166bdaf_1003 \n",
+ " latexcodec conda-forge/noarch::latexcodec-2.0.1-pyh9f0ad1d_0 \n",
+ " lcms2 conda-forge/linux-64::lcms2-2.16-hb7c19ff_0 \n",
+ " lerc conda-forge/linux-64::lerc-4.0.0-h27087fc_0 \n",
+ " libabseil conda-forge/linux-64::libabseil-20240116.2-cxx17_he02047a_1 \n",
+ " libaec conda-forge/linux-64::libaec-1.1.3-h59595ed_0 \n",
+ " libblas conda-forge/linux-64::libblas-3.9.0-25_linux64_openblas \n",
+ " libbrotlicommon conda-forge/linux-64::libbrotlicommon-1.1.0-hd590300_1 \n",
+ " libbrotlidec conda-forge/linux-64::libbrotlidec-1.1.0-hd590300_1 \n",
+ " libbrotlienc conda-forge/linux-64::libbrotlienc-1.1.0-hd590300_1 \n",
+ " libcblas conda-forge/linux-64::libcblas-3.9.0-25_linux64_openblas \n",
+ " libcublas nvidia/linux-64::libcublas-12.4.5.8-0 \n",
+ " libcufft nvidia/linux-64::libcufft-11.2.1.3-0 \n",
+ " libcufile nvidia/linux-64::libcufile-1.11.1.6-0 \n",
+ " libcurand nvidia/linux-64::libcurand-10.3.7.77-0 \n",
+ " libcusolver nvidia/linux-64::libcusolver-11.6.1.9-0 \n",
+ " libcusparse nvidia/linux-64::libcusparse-12.3.1.170-0 \n",
+ " libdeflate conda-forge/linux-64::libdeflate-1.20-hd590300_0 \n",
+ " libgcc conda-forge/linux-64::libgcc-14.2.0-h77fa898_1 \n",
+ " libgfortran conda-forge/linux-64::libgfortran-14.2.0-h69a702a_1 \n",
+ " libgfortran-ng conda-forge/linux-64::libgfortran-ng-14.2.0-h69a702a_1 \n",
+ " libgfortran5 conda-forge/linux-64::libgfortran5-14.2.0-hd5240d6_1 \n",
+ " libgrpc conda-forge/linux-64::libgrpc-1.62.2-h15f2491_0 \n",
+ " libhwloc conda-forge/linux-64::libhwloc-2.9.3-default_h554bfaf_1009 \n",
+ " libjpeg-turbo conda-forge/linux-64::libjpeg-turbo-3.0.0-hd590300_1 \n",
+ " liblapack conda-forge/linux-64::liblapack-3.9.0-25_linux64_openblas \n",
+ " liblapacke conda-forge/linux-64::liblapacke-3.9.0-25_linux64_openblas \n",
+ " libnpp nvidia/linux-64::libnpp-12.2.5.30-0 \n",
+ " libnvfatbin nvidia/linux-64::libnvfatbin-12.6.77-0 \n",
+ " libnvjitlink nvidia/linux-64::libnvjitlink-12.4.127-0 \n",
+ " libnvjpeg nvidia/linux-64::libnvjpeg-12.3.1.117-0 \n",
+ " libopenblas conda-forge/linux-64::libopenblas-0.3.28-pthreads_h94d23a6_1 \n",
+ " libpng conda-forge/linux-64::libpng-1.6.43-h2797004_0 \n",
+ " libprotobuf conda-forge/linux-64::libprotobuf-4.25.3-h08a7969_0 \n",
+ " libre2-11 conda-forge/linux-64::libre2-11-2023.09.01-h5a48ba9_2 \n",
+ " libstdcxx conda-forge/linux-64::libstdcxx-14.2.0-hc0a3c3a_1 \n",
+ " libtiff conda-forge/linux-64::libtiff-4.6.0-h1dd3fc0_3 \n",
+ " libtorch conda-forge/linux-64::libtorch-2.3.1-cpu_mkl_h0bb0d08_100 \n",
+ " liburing conda-forge/linux-64::liburing-2.7-h434a139_0 \n",
+ " libuv conda-forge/linux-64::libuv-1.49.2-hb9d3cd8_0 \n",
+ " libwebp-base conda-forge/linux-64::libwebp-base-1.4.0-hd590300_0 \n",
+ " libxcb conda-forge/linux-64::libxcb-1.15-h0b41bf4_0 \n",
+ " lightning conda-forge/noarch::lightning-2.4.0-pyhd8ed1ab_0 \n",
+ " lightning-utiliti~ conda-forge/noarch::lightning-utilities-0.11.9-pyhff2d567_0 \n",
+ " llvm-openmp conda-forge/linux-64::llvm-openmp-19.1.5-h024ca30_0 \n",
+ " markdown conda-forge/noarch::markdown-3.6-pyhd8ed1ab_0 \n",
+ " markdown-it-py conda-forge/noarch::markdown-it-py-3.0.0-pyhd8ed1ab_1 \n",
+ " markupsafe conda-forge/linux-64::markupsafe-3.0.2-py310h89163eb_1 \n",
+ " matgl conda-forge/noarch::matgl-1.1.3-pyhd8ed1ab_0 \n",
+ " matplotlib-base conda-forge/linux-64::matplotlib-base-3.9.3-py310h68603db_0 \n",
+ " mccabe conda-forge/noarch::mccabe-0.7.0-pyhd8ed1ab_1 \n",
+ " mdurl conda-forge/noarch::mdurl-0.1.2-pyhd8ed1ab_1 \n",
+ " mergedeep conda-forge/noarch::mergedeep-1.3.4-pyhd8ed1ab_0 \n",
+ " metis conda-forge/linux-64::metis-5.1.1-h59595ed_2 \n",
+ " mkdocs conda-forge/noarch::mkdocs-1.6.1-pyhd8ed1ab_0 \n",
+ " mkdocs-get-deps conda-forge/noarch::mkdocs-get-deps-0.2.0-pyhd8ed1ab_0 \n",
+ " mkdocs-material conda-forge/noarch::mkdocs-material-9.5.48-pyhd8ed1ab_0 \n",
+ " mkdocs-material-e~ conda-forge/noarch::mkdocs-material-extensions-1.3.1-pyhd8ed1ab_0 \n",
+ " mkl conda-forge/linux-64::mkl-2023.2.0-h84fe81f_50496 \n",
+ " ml_dtypes conda-forge/linux-64::ml_dtypes-0.3.2-py310hcc13569_0 \n",
+ " monty conda-forge/noarch::monty-2024.10.21-pyhd8ed1ab_0 \n",
+ " more-itertools conda-forge/noarch::more-itertools-10.5.0-pyhd8ed1ab_1 \n",
+ " mpc conda-forge/linux-64::mpc-1.3.1-h24ddda3_1 \n",
+ " mpfr conda-forge/linux-64::mpfr-4.2.1-h90cbb55_3 \n",
+ " mpmath conda-forge/noarch::mpmath-1.3.0-pyhd8ed1ab_1 \n",
+ " munkres conda-forge/noarch::munkres-1.1.4-pyh9f0ad1d_0 \n",
+ " namex conda-forge/noarch::namex-0.0.8-pyhd8ed1ab_1 \n",
+ " nettle conda-forge/linux-64::nettle-3.6-he412f7d_0 \n",
+ " networkx conda-forge/noarch::networkx-3.4.2-pyh267e887_2 \n",
+ " numpy conda-forge/linux-64::numpy-1.26.4-py310hb13e2d6_0 \n",
+ " nvidia-ml conda-forge/noarch::nvidia-ml-7.352.0-py_0 \n",
+ " openh264 conda-forge/linux-64::openh264-2.1.1-h780b84a_0 \n",
+ " openjpeg conda-forge/linux-64::openjpeg-2.5.2-h488ebb8_0 \n",
+ " opt_einsum conda-forge/noarch::opt_einsum-3.4.0-pyhd8ed1ab_1 \n",
+ " optree conda-forge/linux-64::optree-0.13.1-py310h3788b33_1 \n",
+ " paginate conda-forge/noarch::paginate-0.5.7-pyhd8ed1ab_0 \n",
+ " palettable conda-forge/noarch::palettable-3.3.3-pyhd8ed1ab_0 \n",
+ " pandas conda-forge/linux-64::pandas-2.2.3-py310h5eaa309_1 \n",
+ " pathspec conda-forge/noarch::pathspec-0.12.1-pyhd8ed1ab_1 \n",
+ " pillow conda-forge/linux-64::pillow-10.3.0-py310hf73ecf8_0 \n",
+ " plotly conda-forge/noarch::plotly-5.24.1-pyhd8ed1ab_1 \n",
+ " protobuf conda-forge/linux-64::protobuf-4.25.3-py310h0e2eeba_1 \n",
+ " psutil conda-forge/linux-64::psutil-6.1.0-py310ha75aee5_0 \n",
+ " pthread-stubs conda-forge/linux-64::pthread-stubs-0.4-hb9d3cd8_1002 \n",
+ " pybtex conda-forge/noarch::pybtex-0.24.0-pyhd8ed1ab_2 \n",
+ " pycodestyle conda-forge/noarch::pycodestyle-2.12.1-pyhd8ed1ab_1 \n",
+ " pydantic conda-forge/noarch::pydantic-2.10.3-pyh3cfb1c2_0 \n",
+ " pydantic-core conda-forge/linux-64::pydantic-core-2.27.1-py310h505e2c1_0 \n",
+ " pydantic-settings conda-forge/noarch::pydantic-settings-2.6.1-pyh3cfb1c2_1 \n",
+ " pydocstyle conda-forge/noarch::pydocstyle-6.3.0-pyhd8ed1ab_1 \n",
+ " pyflakes conda-forge/noarch::pyflakes-3.2.0-pyhd8ed1ab_1 \n",
+ " pygments conda-forge/noarch::pygments-2.18.0-pyhd8ed1ab_1 \n",
+ " pymatgen conda-forge/linux-64::pymatgen-2024.5.31-py310h8a78493_0 \n",
+ " pymdown-extensions conda-forge/noarch::pymdown-extensions-10.12-pyhd8ed1ab_0 \n",
+ " pyparsing conda-forge/noarch::pyparsing-2.4.7-pyhd8ed1ab_1 \n",
+ " python-dateutil conda-forge/noarch::python-dateutil-2.9.0.post0-pyhff2d567_1 \n",
+ " python-dotenv conda-forge/noarch::python-dotenv-1.0.1-pyhd8ed1ab_1 \n",
+ " python-flatbuffers conda-forge/noarch::python-flatbuffers-24.3.25-pyhe33e51e_1 \n",
+ " python-lmdb conda-forge/linux-64::python-lmdb-1.5.1-py310h74df5ed_1 \n",
+ " python-tzdata conda-forge/noarch::python-tzdata-2024.2-pyhd8ed1ab_1 \n",
+ " pytorch conda-forge/linux-64::pytorch-2.3.1-cpu_mkl_py310h75865b9_100 \n",
+ " pytorch-cuda pytorch/linux-64::pytorch-cuda-12.4-hc786d27_7 \n",
+ " pytorch-lightning conda-forge/noarch::pytorch-lightning-2.4.0-pyhd8ed1ab_0 \n",
+ " pytorch-mutex pytorch/noarch::pytorch-mutex-1.0-cpu \n",
+ " pytz conda-forge/noarch::pytz-2024.1-pyhd8ed1ab_0 \n",
+ " pyyaml conda-forge/linux-64::pyyaml-6.0.2-py310ha75aee5_1 \n",
+ " pyyaml-env-tag conda-forge/noarch::pyyaml-env-tag-0.1-pyhd8ed1ab_0 \n",
+ " qhull conda-forge/linux-64::qhull-2020.2-h434a139_5 \n",
+ " re2 conda-forge/linux-64::re2-2023.09.01-h7f4b329_2 \n",
+ " regex conda-forge/linux-64::regex-2024.11.6-py310ha75aee5_0 \n",
+ " rich conda-forge/noarch::rich-13.9.4-pyhd8ed1ab_1 \n",
+ " scikit-learn conda-forge/linux-64::scikit-learn-1.6.0-py310h27f47ee_0 \n",
+ " scipy conda-forge/linux-64::scipy-1.14.1-py310hfcf56fc_2 \n",
+ " six conda-forge/noarch::six-1.17.0-pyhd8ed1ab_0 \n",
+ " sleef conda-forge/linux-64::sleef-3.7-h1b44611_2 \n",
+ " snappy conda-forge/linux-64::snappy-1.2.1-h8bd8927_1 \n",
+ " snowballstemmer conda-forge/noarch::snowballstemmer-2.2.0-pyhd8ed1ab_0 \n",
+ " spglib conda-forge/linux-64::spglib-2.5.0-py310h39fee3d_2 \n",
+ " sympy conda-forge/noarch::sympy-1.13.3-pypyh2585a3b_103 \n",
+ " tabulate conda-forge/noarch::tabulate-0.9.0-pyhd8ed1ab_2 \n",
+ " tbb conda-forge/linux-64::tbb-2021.11.0-h00ab1b0_1 \n",
+ " tenacity conda-forge/noarch::tenacity-9.0.0-pyhd8ed1ab_1 \n",
+ " tensorboard conda-forge/noarch::tensorboard-2.16.2-pyhd8ed1ab_0 \n",
+ " tensorboard-data-~ conda-forge/linux-64::tensorboard-data-server-0.7.0-py310h6c63255_2 \n",
+ " tensorflow conda-forge/linux-64::tensorflow-2.16.1-cpu_py310h49b650b_0 \n",
+ " tensorflow-base conda-forge/linux-64::tensorflow-base-2.16.1-cpu_py310h224022f_0 \n",
+ " tensorflow-estima~ conda-forge/linux-64::tensorflow-estimator-2.16.1-cpu_py310hc6dcfef_0 \n",
+ " termcolor conda-forge/noarch::termcolor-2.5.0-pyhd8ed1ab_1 \n",
+ " threadpoolctl conda-forge/noarch::threadpoolctl-3.5.0-pyhc1e730c_0 \n",
+ " tomli conda-forge/noarch::tomli-2.2.1-pyhd8ed1ab_1 \n",
+ " toolz conda-forge/noarch::toolz-1.0.0-pyhd8ed1ab_1 \n",
+ " torchaudio pytorch/linux-64::torchaudio-2.3.1-py310_cpu \n",
+ " torchdata pytorch/linux-64::torchdata-0.7.1-py310 \n",
+ " torchmetrics conda-forge/noarch::torchmetrics-1.5.2-pyhe5570ce_0 \n",
+ " torchvision pytorch/linux-64::torchvision-0.18.1-py310_cpu \n",
+ " typeguard conda-forge/noarch::typeguard-4.4.1-pyhd8ed1ab_1 \n",
+ " typing-extensions conda-forge/noarch::typing-extensions-4.12.2-hd8ed1ab_1 \n",
+ " typing_extensions conda-forge/noarch::typing_extensions-4.12.2-pyha770c72_1 \n",
+ " uncertainties conda-forge/noarch::uncertainties-3.2.2-pyhd8ed1ab_2 \n",
+ " unicodedata2 conda-forge/linux-64::unicodedata2-15.1.0-py310ha75aee5_1 \n",
+ " watchdog conda-forge/linux-64::watchdog-6.0.0-py310hff52083_0 \n",
+ " werkzeug conda-forge/noarch::werkzeug-3.1.3-pyhd8ed1ab_1 \n",
+ " wrapt conda-forge/linux-64::wrapt-1.17.0-py310ha75aee5_0 \n",
+ " xmltodict conda-forge/noarch::xmltodict-0.14.2-pyhd8ed1ab_1 \n",
+ " xorg-libxau conda-forge/linux-64::xorg-libxau-1.0.11-hb9d3cd8_1 \n",
+ " xorg-libxdmcp conda-forge/linux-64::xorg-libxdmcp-1.1.5-hb9d3cd8_0 \n",
+ " yaml conda-forge/linux-64::yaml-0.2.5-h7f98852_2 \n",
+ " zipp conda-forge/noarch::zipp-3.21.0-pyhd8ed1ab_1 \n",
+ " zlib conda-forge/linux-64::zlib-1.2.13-hd590300_5 \n",
+ "\n",
+ "The following packages will be UPDATED:\n",
+ "\n",
+ " c-ares 1.24.0-hd590300_0 --> 1.34.3-hb9d3cd8_1 \n",
+ " ca-certificates 2023.11.17-hbcca054_0 --> 2024.8.30-hbcca054_0 \n",
+ " certifi 2023.11.17-pyhd8ed1ab_0 --> 2024.8.30-pyhd8ed1ab_0 \n",
+ " libcurl 8.5.0-hca28451_0 --> 8.8.0-hca28451_0 \n",
+ " libgcc-ng 13.2.0-h807b86a_3 --> 14.2.0-h69a702a_1 \n",
+ " libgomp 13.2.0-h807b86a_3 --> 14.2.0-h77fa898_1 \n",
+ " libsqlite 3.44.2-h2797004_0 --> 3.46.0-hde9e2c9_0 \n",
+ " openssl 3.2.0-hd590300_1 --> 3.4.0-hb9d3cd8_0 \n",
+ " zstandard 0.22.0-py310h1275a96_0 --> 0.23.0-py310ha39cb0e_1 \n",
+ " zstd 1.5.5-hfc55251_0 --> 1.5.6-ha6fb4c9_0 \n",
+ "\n",
+ "The following packages will be DOWNGRADED:\n",
+ "\n",
+ " _openmp_mutex 4.5-2_gnu --> 4.5-2_kmp_llvm \n",
+ "\n",
+ "\n",
+ "Preparing transaction: ...working... done\n",
+ "Verifying transaction: ...working... done\n",
+ "Executing transaction: ...working... done\n",
+ "CPU times: user 2.41 s, sys: 342 ms, total: 2.75 s\n",
+ "Wall time: 6min 15s\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "yMKBfs4vAtbL",
+ "outputId": "013c2798-790b-4cc3-b8f6-3984274d35be"
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ " Preparing metadata (setup.py) ... \u001b[?25l\u001b[?25hdone\n",
+ " Building wheel for chipsff (setup.py) ... \u001b[?25l\u001b[?25hdone\n"
+ ]
+ }
+ ],
+ "source": [
+ "!pip install -q git+https://github.com/usnistgov/chipsff.git@develop"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "!git clone https://github.com/ACEsuit/mace.git\n",
+ "!pip install -q ./mace"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "6Q66JrAJBW21",
+ "outputId": "329d7819-f13c-440e-9e97-d999ba34f4b9"
+ },
+ "execution_count": 3,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Cloning into 'mace'...\n",
+ "remote: Enumerating objects: 9215, done.\u001b[K\n",
+ "remote: Counting objects: 100% (4840/4840), done.\u001b[K\n",
+ "remote: Compressing objects: 100% (1197/1197), done.\u001b[K\n",
+ "remote: Total 9215 (delta 4002), reused 4242 (delta 3626), pack-reused 4375 (from 1)\u001b[K\n",
+ "Receiving objects: 100% (9215/9215), 103.83 MiB | 32.32 MiB/s, done.\n",
+ "Resolving deltas: 100% (6757/6757), done.\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",
+ " Preparing metadata (setup.py) ... \u001b[?25l\u001b[?25hdone\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m387.7/387.7 kB\u001b[0m \u001b[31m24.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m207.3/207.3 kB\u001b[0m \u001b[31m17.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m448.8/448.8 kB\u001b[0m \u001b[31m28.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m62.7/62.7 kB\u001b[0m \u001b[31m5.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m102.5/102.5 kB\u001b[0m \u001b[31m9.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25h Building wheel for mace-torch (pyproject.toml) ... \u001b[?25l\u001b[?25hdone\n",
+ " Building wheel for python-hostlist (setup.py) ... \u001b[?25l\u001b[?25hdone\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "from chipsff.scaling_analyzer import ScalingAnalyzer\n",
+ "from chipsff.config import CHIPSFFConfig\n",
+ "config = CHIPSFFConfig(\n",
+ " calculator_type=\"alignn_ff\",\n",
+ " scaling_numbers=[1,2,3],\n",
+ "\n",
+ ")\n",
+ "analyzer = ScalingAnalyzer(\n",
+ " config=config,\n",
+ "\n",
+ ")\n",
+ "analyzer.run()"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "VoIFOGArC09a",
+ "outputId": "83ef9f7d-ec26-4d19-d584-fc6abf14be1b"
+ },
+ "execution_count": 4,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Logging initialized. Output directory: scaling_analysis_Cu\n",
+ "Starting scaling test...\n",
+ "Scaling test: Supercell size 1\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "name": "stderr",
+ "text": [
+ "DGL backend not selected or invalid. Assuming PyTorch for now.\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Setting the default backend to \"pytorch\". You can change it in the ~/.dgl/config.json file or export the DGLBACKEND environment variable. Valid options are: pytorch, mxnet, tensorflow (all lowercase)\n",
+ "dir_path /usr/local/lib/python3.10/site-packages/alignn/ff/v12.2.2024_dft_3d_307k\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "name": "stderr",
+ "text": [
+ "100%|██████████| 549k/549k [00:00<00:00, 1.29MiB/s]\n",
+ "/usr/local/lib/python3.10/site-packages/alignn/ff/ff.py:295: UserWarning: Creating a tensor from a list of numpy.ndarrays is extremely slow. Please consider converting the list to a single numpy.ndarray with numpy.array() before converting to a tensor. (Triggered internally at /home/conda/feedstock_root/build_artifacts/libtorch_1718580401398/work/torch/csrc/utils/tensor_new.cpp:274.)\n",
+ " torch.tensor(atoms.cell)\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Calculator alignn_ff: Time taken 0.6327 s for 1 atoms\n",
+ "Scaling test: Supercell size 2\n",
+ "dir_path /usr/local/lib/python3.10/site-packages/alignn/ff/v12.2.2024_dft_3d_307k\n",
+ "Calculator alignn_ff: Time taken 0.0907 s for 8 atoms\n",
+ "Scaling test: Supercell size 3\n",
+ "dir_path /usr/local/lib/python3.10/site-packages/alignn/ff/v12.2.2024_dft_3d_307k\n",
+ "Calculator alignn_ff: Time taken 0.2131 s for 27 atoms\n",
+ "Scaling test plot saved to scaling_analysis_Cu/scaling_test.png\n",
+ "Job info saved to 'scaling_analysis_Cu/scaling_analysis_job_info.json'\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "analyzer.job_info['scaling_test']"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "XdCK1hs3KD_Q",
+ "outputId": "d9ec8c95-ff49-46fa-a492-4cc36e836281"
+ },
+ "execution_count": 7,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "{'natoms': [1, 8, 27],\n",
+ " 'times': {'alignn_ff': [0.6327011585235596,\n",
+ " 0.09072136878967285,\n",
+ " 0.2130897045135498]}}"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 7
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "import matplotlib.pyplot as plt\n",
+ "%matplotlib inline\n",
+ "plt.plot(analyzer.job_info['scaling_test']['natoms'],analyzer.job_info['scaling_test']['times']['alignn_ff'],'o-')\n",
+ "plt.grid()"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 430
+ },
+ "id": "ePvIm5T2EZcH",
+ "outputId": "d44ce567-a61c-49ca-f883-dfc44adf7674"
+ },
+ "execution_count": 13,
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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7//Gk08+KWFlROP37W9/2/nnhQsXYtGiRZg5cyaOHDmC+++/X8LK5GPz5s2orq7mnDERjDW2f//3f+/888KFC5GQkID7778fFy9exMyZM6e6TEnIqk0TFxcHlUrlNoO7qakJBoNBoqr8U1RUFObMmYMLFy5IXYpfGXmf8j08NWbMmIG4uDi+j8epsLAQ77//Pj755BMkJSU5jxsMBgwODqKzs9PlfL5vx2+ssR3N0qVLASCg3reyCiMajQY5OTkoLS11HrPb7SgtLcWyZcskrMz/9PT04OLFi0hISJC6FL8yffp0GAwGl/ew2WzG119/zfewCK5du4a2tja+j29DEAQUFhZi7969+PjjjzF9+nSXz+fk5ECtVru8b2tqalBXV8f37W3cbmxHU1VVBQAB9b6VXZumqKgITzzxBHJzc7FkyRLs2LEDvb292LBhg9SlydoPf/hDrFmzBqmpqWhoaMDWrVuhUqnwne98R+rSZKenp8flfzSXL19GVVUVYmJikJKSgmeeeQYvvvgiZs+ejenTp+PHP/4xEhMTkZ+fL13RMnGrsY2JicG2bdvwrW99CwaDARcvXsSPfvQjzJo1C6tWrZKwat+3efNmvPPOO9i/fz8iIiKc80AiIyMREhKCyMhIPPnkkygqKkJMTAx0Oh1+8IMfYNmyZbjzzjslrt633W5sL168iHfeeQcPPvggYmNjceLECTz77LP4xje+gUWLFklc/RSS+naeifjZz34mpKSkCBqNRliyZInw1VdfSV2S7K1bt05ISEgQNBqNYDQahXXr1gkXLlyQuixZ+uSTTwQAbr+eeOIJQRAct/f++Mc/FvR6vaDVaoX7779fqKmpkbZombjV2Pb19Ql5eXnCtGnTBLVaLaSmpgobN24UTCaT1GX7vNHGFIDwX//1X85z+vv7haeeekqIjo4WQkNDhYKCAqGxsVG6omXidmNbV1cnfOMb3xBiYmIErVYrzJo1S/iHf/gHoaurS9rCp5hCEARhKsMPERER0Y1kNWeEiIiI/A/DCBEREUmKYYSIiIgkxTBCREREkmIYISIiIkkxjBAREZGkGEaIiIhIUgwjREREJCmGESIiIpIUwwgRERFJimGEiIiIJMUwQkRERJL6/wEYaApg1vP3cQAAAABJRU5ErkJggg==\n"
+ },
+ "metadata": {}
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [],
+ "metadata": {
+ "id": "8SAb5e98KNRq"
+ },
+ "execution_count": null,
+ "outputs": []
+ }
+ ]
+}
\ No newline at end of file