diff --git a/.coveragerc b/.coveragerc index 1f0637b..226e18d 100644 --- a/.coveragerc +++ b/.coveragerc @@ -1,7 +1,7 @@ # .coveragerc to control coverage.py [run] branch = True -source = matbench_genmetrics +source = matbench_genmetrics.core # omit = bad_file.py [paths] diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 226449f..14297a8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,6 +17,9 @@ on: # (useful to check if updates on dependencies break the package) - cron: '0 0 1,16 * *' +permissions: + contents: read + concurrency: group: >- ${{ github.workflow }}-${{ github.ref_type }}- @@ -31,15 +34,18 @@ jobs: steps: - uses: actions/checkout@v3 with: {fetch-depth: 0} # deep clone for setuptools-scm - - uses: actions/setup-python@v3 + - uses: actions/setup-python@v4 + id: setup-python with: {python-version: "3.10"} - name: Run static analysis and format checkers run: pipx run pre-commit run --all-files --show-diff-on-failure - name: Build package distribution files - run: pipx run tox -e clean,build + run: >- + pipx run --python '${{ steps.setup-python.outputs.python-path }}' + tox -e clean,build - name: Record the path of wheel distribution id: wheel-distribution - run: echo "::set-output name=path::$(ls dist/*.whl)" + run: echo "path=$(ls dist/*.whl)" >> $GITHUB_OUTPUT - name: Store the distribution files for use in other stages # `tests` and `publish` will use the same pre-built distributions, # so we make sure to release the exact same package that was tested @@ -63,17 +69,22 @@ jobs: runs-on: ${{ matrix.platform }} steps: - uses: actions/checkout@v3 - - uses: actions/setup-python@v3 + - uses: actions/setup-python@v4 + id: setup-python with: python-version: ${{ matrix.python }} - name: Retrieve pre-built distribution files uses: actions/download-artifact@v3 with: {name: python-distribution-files, path: dist/} + - name: Install mp-api + run: pip install mp-api - name: Run tests + env: + MP_API_KEY: ${{ secrets.MP_API_KEY }} run: >- - pipx run tox - --installpkg '${{ needs.prepare.outputs.wheel-distribution }}' - -- -rFEx --durations 10 --color yes + pipx run --python '${{ steps.setup-python.outputs.python-path }}' + tox --installpkg '${{ needs.prepare.outputs.wheel-distribution }}' + -- -rFEx --durations 10 --color yes # pytest args - name: Generate coverage report run: pipx run coverage lcov -o coverage.lcov - name: Upload partial coverage report @@ -98,9 +109,11 @@ jobs: needs: finalize if: ${{ github.event_name == 'push' && contains(github.ref, 'refs/tags/') }} runs-on: ubuntu-latest + permissions: + contents: write steps: - uses: actions/checkout@v3 - - uses: actions/setup-python@v3 + - uses: actions/setup-python@v4 with: {python-version: "3.10"} - name: Retrieve pre-built distribution files uses: actions/download-artifact@v3 diff --git a/.gitignore b/.gitignore index 0849d93..2987e55 100644 --- a/.gitignore +++ b/.gitignore @@ -52,5 +52,12 @@ MANIFEST .venv*/ .conda*/ .python-version + src/matbench_genmetrics/cdvae/utils.py matbench-genmetrics/meta.yaml + +pytest.ini +src/matbench_genmetrics/mp_time_split/utils/mp_time_summary.json +src/matbench_genmetrics/mp_time_split/utils/mp_time_summary.json.gz +mp_time_split/meta.yaml +mp-time-split/meta.yaml diff --git a/.readthedocs.yml b/.readthedocs.yml index 21b0814..a2bcab3 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -16,8 +16,12 @@ sphinx: formats: - pdf +build: + os: ubuntu-22.04 + tools: + python: "3.11" + python: - version: 3.8 install: - requirements: docs/requirements.txt - {path: ., method: pip} diff --git a/AUTHORS.md b/AUTHORS.md index 6e7ff73..75e1d00 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -1,3 +1,4 @@ # Contributors * sgbaird [sterling.baird@utah.edu](mailto:sterling.baird@utah.edu) +* JosephMontoya-TRI diff --git a/LICENSE.txt b/LICENSE.txt index 3d15b21..bbc53b1 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2022 sgbaird +Copyright (c) 2023 sgbaird Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index fcf478f..6c0b3ed 100644 --- a/README.md +++ b/README.md @@ -1,196 +1,55 @@ [![Project generated with PyScaffold](https://img.shields.io/badge/-PyScaffold-005CA0?logo=pyscaffold)](https://pyscaffold.org/) + -> **NOTE: This is a WIP repository (as of 2022-08-06) being developed in parallel with [`xtal2png`](https://github.com/sparks-baird/xtal2png) and [`mp-time-split`](https://github.com/sparks-baird/mp-time-split). Feedback and contributions welcome!** This is not an official repository of Matbench, but may be incorporated into Matbench at a later time (see https://github.com/materialsproject/matbench/issues/150). - -# matbench-genmetrics [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/sparks-baird/matbench-genmetrics/blob/main/notebooks/1.0-matbench-genmetrics-basic.ipynb) -> Generative materials benchmarking metrics, inspired by [guacamol](https://www.benevolent.com/guacamol) and [CDVAE](https://github.com/txie-93/cdvae). - -This repository provides standardized benchmarks for benchmarking generative models for -crystal structure. Each benchmark has a fixed dataset, a predefined split, and a notion -of best (i.e. metric) associated with it. - -

- -## Getting Started - -Installation, a dummy example, output metrics for the example, and descriptions of the benchmark metrics. - -### Installation - -Create a conda environment with the `matbench-genmetrics` package installed from the -`conda-forge` channel. Then activate the environment. - -> **NOTE: not available on conda-forge as of 2022-07-30, recipe under review by -> conda-forge team. So use `pip install matbench-genmetrics` for now - -```bash -conda create --name matbench-genmetrics --channel conda-forge python==3.9.* matbench-genmetrics -conda activate matbench-genmetrics -``` - -> NOTE: It doesn't have to be Python 3.9; you can remove `python==3.9.*` altogether or -change this to e.g. `python==3.8.*`. See [Advanced Installation](##Advanced-Installation) - -### Example - -> NOTE: be sure to set `dummy=False` for the real/full benchmark run. MPTSMetrics10 is -> intended for fast prototyping and debugging, as it assumes only 10 generated structures. - -```python ->>> from tqdm import tqdm ->>> from mp_time_split.utils.gen import DummyGenerator ->>> from matbench_genmetrics.core import MPTSMetrics10, MPTSMetrics100, MPTSMetrics1000, MPTSMetrics10000 ->>> mptm = MPTSMetrics10(dummy=True) ->>> for fold in mptm.folds: ->>> train_val_inputs = mptm.get_train_and_val_data(fold) ->>> dg = DummyGenerator() ->>> dg.fit(train_val_inputs) ->>> gen_structures = dg.gen(n=mptm.num_gen) ->>> mptm.evaluate_and_record(fold, gen_structures) -``` - -### Output - -```python -print(mptm.recorded_metrics) -``` - -```python -{ - 0: { - "validity": 0.4375, - "coverage": 0.0, - "novelty": 1.0, - "uniqueness": 0.9777777777777777, - }, - 1: { - "validity": 0.4390681003584229, - "coverage": 0.0, - "novelty": 1.0, - "uniqueness": 0.9333333333333333, - }, - 2: { - "validity": 0.4401197604790419, - "coverage": 0.0, - "novelty": 1.0, - "uniqueness": 0.8222222222222222, - }, - 3: { - "validity": 0.4408740359897172, - "coverage": 0.0, - "novelty": 1.0, - "uniqueness": 0.8444444444444444, - }, - 4: { - "validity": 0.4414414414414415, - "coverage": 0.0, - "novelty": 1.0, - "uniqueness": 0.9111111111111111, - }, -} -``` - -### Metrics - -| Metric | Description | -| ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Validity | One minus (Wasserstein distance between distribution of space group numbers for train and generated structures divided by distance of dummy case between train and `space_group_number == 1`). See also | -| Coverage | Match counts between held-out test structures and generated structures divided by number of test structures ("predict the future"). | -| Novelty | One minus (match counts between train structures and generated structures divided by number of generated structures). | -| Uniqueness | One minus (non-self-comparing match counts within generated structures divided by total possible non-self-comparing matches). | - -A match is when StructureMatcher(stol=0.5, ltol=0.3, angle_tol=10.0).fit(s1, s2) evaluates to `True`. - - - -## Advanced Installation -### Anaconda (`conda`) installation (recommended) +# matbench-genmetrics -(2022-07-30, conda-forge installation pending, fallback to `pip install matbench-genmetrics` as separate command) +> Generative materials benchmarking metrics, inspired by CDVAE. -Create and activate a new `conda` environment named `matbench-genmetrics` (`-n`) that will search for and install the `matbench-genmetrics` package from the `conda-forge` Anaconda channel (`-c`). +A longer description of your project goes here... -```bash -conda env create -n matbench-genmetrics -c conda-forge matbench-genmetrics -conda activate matbench-genmetrics -``` - -Alternatively, in an already activated environment: - -```bash -conda install -c conda-forge matbench-genmetrics -``` - -If you run into conflicts with packages you are integrating with `matbench-genmetrics`, please try installing all packages in a single line of code (or two if mixing `conda` and `pip` packages in the same environment) and installing with `mamba` ([source](https://stackoverflow.com/a/69137255/13697228)). - -### PyPI (`pip`) installation - -Create and activate a new `conda` environment named `matbench-genmetrics` (`-n`) with `python==3.9.*` or your preferred Python version, then install `matbench-genmetrics` via `pip`. - -```bash -conda create -n matbench-genmetrics python==3.9.* -conda activate matbench-genmetrics -pip install matbench-genmetrics -``` - -## Editable installation +## Installation In order to set up the necessary environment: -1. clone and enter the repository via: - - ```bash - git clone https://github.com/sparks-baird/matbench-genmetrics.git - cd matbench-genmetrics +1. review and uncomment what you need in `environment.yml` and create an environment `matbench-genmetrics` with the help of [conda]: + ``` + conda env create -f environment.yml + ``` +2. activate the new environment with: ``` - -2. create and activate a new conda environment (optional, but recommended) - - ```bash - conda env create --name matbench-genmetrics python==3.9.* conda activate matbench-genmetrics ``` -3. perform an editable (`-e`) installation in the current directory (`.`): - - ```bash - pip install -e . - ``` +> **_NOTE:_** The conda environment will have matbench-genmetrics installed in editable mode. +> Some changes, e.g. in `setup.cfg`, might require you to run `pip install -e .` again. -> **_NOTE:_** Some changes, e.g. in `setup.cfg`, might require you to run `pip install -e .` again. Optional and needed only once after `git clone`: 3. install several [pre-commit] git hooks with: - ```bash pre-commit install # You might also want to run `pre-commit autoupdate` ``` - and checkout the configuration under `.pre-commit-config.yaml`. The `-n, --no-verify` flag of `git commit` can be used to deactivate pre-commit hooks temporarily. 4. install [nbstripout] git hooks to remove the output cells of committed notebooks with: - ```bash nbstripout --install --attributes notebooks/.gitattributes ``` - This is useful to avoid large diffs due to plots in your notebooks. A simple `nbstripout --uninstall` will revert these changes. + Then take a look into the `scripts` and `notebooks` folders. ## Dependency Management & Reproducibility @@ -199,21 +58,17 @@ Then take a look into the `scripts` and `notebooks` folders. in `setup.cfg` if you want to ship and install your package via `pip` later on. 2. Create concrete dependencies as `environment.lock.yml` for the exact reproduction of your environment with: - ```bash conda env export -n matbench-genmetrics -f environment.lock.yml ``` - For multi-OS development, consider using `--no-builds` during the export. 3. Update your current environment with respect to a new `environment.lock.yml` using: - ```bash conda env update -f environment.lock.yml --prune ``` - ## Project Organization -```txt +``` ├── AUTHORS.md <- List of developers and maintainers. ├── CHANGELOG.md <- Changelog to keep track of new features and fixes. ├── CONTRIBUTING.md <- Guidelines for contributing to this project. @@ -244,7 +99,7 @@ Then take a look into the `scripts` and `notebooks` folders. ├── setup.py <- [DEPRECATED] Use `python setup.py develop` to install for │ development or `python setup.py bdist_wheel` to build. ├── src -│ └── matbench_genmetrics <- Actual Python package where the main functionality goes. +│ └── core <- Actual Python package where the main functionality goes. ├── tests <- Unit tests which can be run with `pytest`. ├── .coveragerc <- Configuration for coverage reports of unit tests. ├── .isort.cfg <- Configuration for git hook that sorts imports. @@ -255,7 +110,7 @@ Then take a look into the `scripts` and `notebooks` folders. ## Note -This project has been set up using [PyScaffold] 4.2.2.post1.dev2+ge50b5e1 and the [dsproject extension] 0.7.2.post1.dev2+geb5d6b6. +This project has been set up using [PyScaffold] 4.4.1 and the [dsproject extension] 0.7.2. [conda]: https://docs.conda.io/ [pre-commit]: https://pre-commit.com/ diff --git a/docs/conf.py b/docs/conf.py index 1959017..1b01c5e 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -110,7 +110,7 @@ # General information about the project. project = "matbench-genmetrics" -copyright = "2022, sgbaird" +copyright = "2023, sgbaird" # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the @@ -121,7 +121,7 @@ # If you don’t need the separation provided between version and release, # just set them both to the same value. try: - from matbench_genmetrics import __version__ as version + from matbench_genmetrics.core import __version__ as version except ImportError: version = "" @@ -180,14 +180,10 @@ # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. -html_theme_options = {"sidebar_width": "300px", "page_width": "1200px"} - -# html_context = { -# "display_github": True, -# "github_user": "sgbaird", -# "github_repo": "matbench-genmetrics", -# "github_version": "main/docs/", -# } +html_theme_options = { + "sidebar_width": "300px", + "page_width": "1200px" +} # Add any paths that contain custom themes here, relative to this directory. # html_theme_path = [] @@ -272,13 +268,7 @@ # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, author, documentclass [howto/manual]). latex_documents = [ - ( - "index", - "user_guide.tex", - "matbench-genmetrics Documentation", - "sgbaird", - "manual", - ) + ("index", "user_guide.tex", "matbench-genmetrics Documentation", "sgbaird", "manual") ] # The name of an image file (relative to this directory) to place at the top of @@ -315,4 +305,4 @@ "pyscaffold": ("https://pyscaffold.org/en/stable", None), } -print(f"loading configurations for {project} {version} ...", file=sys.stderr) +print(f"loading configurations for {project} {version} ...", file=sys.stderr) \ No newline at end of file diff --git a/docs/logo.png b/docs/logo.png index 9b7518d..54419c0 100644 Binary files a/docs/logo.png and b/docs/logo.png differ diff --git a/docs/requirements.txt b/docs/requirements.txt index 4a1fa90..5b27481 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,10 +1,15 @@ +# Requirements file for ReadTheDocs, check .readthedocs.yml. +# To build the module reference correctly, make sure every external package +# under `install_requires` in `setup.cfg` is also listed here! ipykernel +matminer +mp-api myst-parser[linkify] nbsphinx nbsphinx-link +pymatgen +pyxtal +scikit-learn sphinx>=3.2.1 sphinx_copybutton sphinx_rtd_theme -# Requirements file for ReadTheDocs, check .readthedocs.yml. -# To build the module reference correctly, make sure every external package -# under `install_requires` in `setup.cfg` is also listed here! diff --git a/environment.yml b/environment.yml index ec3cc10..96f7ac0 100644 --- a/environment.yml +++ b/environment.yml @@ -8,18 +8,19 @@ dependencies: - python>=3.6 - pip # BASICS - - numpy - - scipy - - pandas - - mp-time-split - - pyxtal - - pystow - - pymatgen + # - numpy + # - scipy + # - pandas # - tqdm # - click + # - scikit-learn + # - pymatgen + # - matminer - ipython # VISUALIZATION - # - matplotlib + - matplotlib + - plotly + - python-kaleido # - ipympl # interactive matplotlib plots # - seaborn # - altair @@ -43,7 +44,7 @@ dependencies: # - snakeviz - pip: - -e . # install git checkout of matbench-genmetrics in editable mode - - element-coder + # - element-coder # add here only pip-packages that are not available in conda/conda-forge! E.g.: # - icecream # - jax diff --git a/notebooks/1.0-matbench-genmetrics-basic.ipynb b/notebooks/core/1.0-matbench-genmetrics-basic.ipynb similarity index 98% rename from notebooks/1.0-matbench-genmetrics-basic.ipynb rename to notebooks/core/1.0-matbench-genmetrics-basic.ipynb index 4bebd28..3b2e833 100644 --- a/notebooks/1.0-matbench-genmetrics-basic.ipynb +++ b/notebooks/core/1.0-matbench-genmetrics-basic.ipynb @@ -3,8 +3,8 @@ { "cell_type": "markdown", "metadata": { - "id": "view-in-github", - "colab_type": "text" + "colab_type": "text", + "id": "view-in-github" }, "source": [ "\"Open" @@ -12,26 +12,26 @@ }, { "cell_type": "markdown", + "metadata": { + "id": "wKCu_chJrCRa" + }, "source": [ "`pyyaml==5.4.1` just for `DummyGenerator` on Colab. See [SO post](https://stackoverflow.com/questions/69564817/typeerror-load-missing-1-required-positional-argument-loader-in-google-col).\n", "\n", "**NOTE: If using Colab, \"Restart Runtime\" after installation.**" - ], - "metadata": { - "id": "wKCu_chJrCRa" - } + ] }, { "cell_type": "code", - "source": [ - "from google.colab import output\n", - "output.enable_custom_widget_manager()" - ], + "execution_count": 7, "metadata": { "id": "pQA4BbZk048c" }, - "execution_count": 7, - "outputs": [] + "outputs": [], + "source": [ + "from google.colab import output\n", + "output.enable_custom_widget_manager()" + ] }, { "cell_type": "code", @@ -45,8 +45,8 @@ }, "outputs": [ { - "output_type": "stream", "name": "stdout", + "output_type": "stream", "text": [ "Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n", "Requirement already satisfied: xtal2png in /usr/local/lib/python3.7/dist-packages (0.9.4)\n", @@ -138,28 +138,15 @@ }, "outputs": [], "source": [ - "from mp_time_split.utils.gen import DummyGenerator\n", - "from matbench_genmetrics.core import MPTSMetrics10, MPTSMetrics100, MPTSMetrics1000, MPTSMetrics10000\n", + "from matbench_genmetrics.mp_time_split.utils.gen import DummyGenerator\n", + "from matbench_genmetrics.core.metrics import MPTSMetrics10, MPTSMetrics100, MPTSMetrics1000, MPTSMetrics10000\n", "from tqdm.notebook import tqdm\n", "from pprint import pprint" ] }, { "cell_type": "code", - "source": [ - "%%time\n", - "mptm = MPTSMetrics10(dummy=True, verbose=False)\n", - "for fold in tqdm(mptm.folds):\n", - " train_val_inputs = mptm.get_train_and_val_data(fold)\n", - "\n", - " dg = DummyGenerator()\n", - " dg.fit(train_val_inputs)\n", - " gen_structures = dg.gen(n=mptm.num_gen)\n", - "\n", - " mptm.evaluate_and_record(fold, gen_structures)\n", - "\n", - "pprint(mptm.recorded_metrics)" - ], + "execution_count": 6, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -291,360 +278,359 @@ "id": "_fSHcLSR00tk", "outputId": "473f1b22-d229-4a77-eae6-4180d0772adc" }, - "execution_count": 6, "outputs": [ { - "output_type": "display_data", "data": { - "text/plain": [ - " 0%| | 0/5 [00:00\"Open" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "hZdyn7fqDqal", + "outputId": "48c8ec01-726d-4458-a7d6-afeec5b5cfae", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "%%timeit\n", + "!wget -O mini.sh https://repo.anaconda.com/miniconda/Miniconda3-py38_4.8.2-Linux-x86_64.sh\n" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "--2022-06-04 19:33:45-- https://repo.anaconda.com/miniconda/Miniconda3-py38_4.8.2-Linux-x86_64.sh\n", + "Resolving repo.anaconda.com (repo.anaconda.com)... 104.16.130.3, 104.16.131.3, 2606:4700::6810:8203, ...\n", + "Connecting to repo.anaconda.com (repo.anaconda.com)|104.16.130.3|:443... connected.\n", + "HTTP request sent, awaiting response... 200 OK\n", + "Length: 89817099 (86M) [application/x-sh]\n", + "Saving to: ‘mini.sh’\n", + "\n", + "mini.sh 100%[===================>] 85.66M 160MB/s in 0.5s \n", + "\n", + "2022-06-04 19:33:46 (160 MB/s) - ‘mini.sh’ saved [89817099/89817099]\n", + "\n", + "--2022-06-04 19:33:46-- https://repo.anaconda.com/miniconda/Miniconda3-py38_4.8.2-Linux-x86_64.sh\n", + "Resolving repo.anaconda.com (repo.anaconda.com)... 104.16.130.3, 104.16.131.3, 2606:4700::6810:8203, ...\n", + "Connecting to repo.anaconda.com (repo.anaconda.com)|104.16.130.3|:443... connected.\n", + "HTTP request sent, awaiting response... 200 OK\n", + "Length: 89817099 (86M) [application/x-sh]\n", + "Saving to: ‘mini.sh’\n", + "\n", + "mini.sh 100%[===================>] 85.66M 164MB/s in 0.5s \n", + "\n", + "2022-06-04 19:33:47 (164 MB/s) - ‘mini.sh’ saved [89817099/89817099]\n", + "\n", + "--2022-06-04 19:33:47-- https://repo.anaconda.com/miniconda/Miniconda3-py38_4.8.2-Linux-x86_64.sh\n", + "Resolving repo.anaconda.com (repo.anaconda.com)... 104.16.130.3, 104.16.131.3, 2606:4700::6810:8203, ...\n", + "Connecting to repo.anaconda.com (repo.anaconda.com)|104.16.130.3|:443... connected.\n", + "HTTP request sent, awaiting response... 200 OK\n", + "Length: 89817099 (86M) [application/x-sh]\n", + "Saving to: ‘mini.sh’\n", + "\n", + "mini.sh 100%[===================>] 85.66M 100MB/s in 0.9s \n", + "\n", + "2022-06-04 19:33:48 (100 MB/s) - ‘mini.sh’ saved [89817099/89817099]\n", + "\n", + "--2022-06-04 19:33:48-- https://repo.anaconda.com/miniconda/Miniconda3-py38_4.8.2-Linux-x86_64.sh\n", + "Resolving repo.anaconda.com (repo.anaconda.com)... 104.16.130.3, 104.16.131.3, 2606:4700::6810:8203, ...\n", + "Connecting to repo.anaconda.com (repo.anaconda.com)|104.16.130.3|:443... connected.\n", + "HTTP request sent, awaiting response... 200 OK\n", + "Length: 89817099 (86M) [application/x-sh]\n", + "Saving to: ‘mini.sh’\n", + "\n", + "mini.sh 100%[===================>] 85.66M 223MB/s in 0.4s \n", + "\n", + "2022-06-04 19:33:48 (223 MB/s) - ‘mini.sh’ saved [89817099/89817099]\n", + "\n", + "--2022-06-04 19:33:48-- https://repo.anaconda.com/miniconda/Miniconda3-py38_4.8.2-Linux-x86_64.sh\n", + "Resolving repo.anaconda.com (repo.anaconda.com)... 104.16.130.3, 104.16.131.3, 2606:4700::6810:8203, ...\n", + "Connecting to repo.anaconda.com (repo.anaconda.com)|104.16.130.3|:443... connected.\n", + "HTTP request sent, awaiting response... 200 OK\n", + "Length: 89817099 (86M) [application/x-sh]\n", + "Saving to: ‘mini.sh’\n", + "\n", + "mini.sh 100%[===================>] 85.66M 212MB/s in 0.4s \n", + "\n", + "2022-06-04 19:33:49 (212 MB/s) - ‘mini.sh’ saved [89817099/89817099]\n", + "\n", + "--2022-06-04 19:33:49-- https://repo.anaconda.com/miniconda/Miniconda3-py38_4.8.2-Linux-x86_64.sh\n", + "Resolving repo.anaconda.com (repo.anaconda.com)... 104.16.130.3, 104.16.131.3, 2606:4700::6810:8203, ...\n", + "Connecting to repo.anaconda.com (repo.anaconda.com)|104.16.130.3|:443... connected.\n", + "HTTP request sent, awaiting response... 200 OK\n", + "Length: 89817099 (86M) [application/x-sh]\n", + "Saving to: ‘mini.sh’\n", + "\n", + "mini.sh 100%[===================>] 85.66M 137MB/s in 0.6s \n", + "\n", + "2022-06-04 19:33:50 (137 MB/s) - ‘mini.sh’ saved [89817099/89817099]\n", + "\n", + "1 loop, best of 5: 513 ms per loop\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "%%timeit\n", + "!chmod +x mini.sh\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "8M08iH_INUMF", + "outputId": "9356142f-c1cc-447c-ba58-65c6a78ea717" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "10 loops, best of 5: 112 ms per loop\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "%%timeit\n", + "!bash ./mini.sh -b -f -p /usr/local\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "XN2lQI4RNUvd", + "outputId": "0a7bdc07-2be8-435a-fe5a-03a292781886" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "PREFIX=/usr/local\n", + "Unpacking payload ...\n", + "Collecting package metadata (current_repodata.json): - \b\b\\ \b\b| \b\bdone\n", + "Solving environment: - \b\bdone\n", + "\n", + "## Package Plan ##\n", + "\n", + " environment location: /usr/local\n", + "\n", + " added / updated specs:\n", + " - _libgcc_mutex==0.1=main\n", + " - asn1crypto==1.3.0=py38_0\n", + " - ca-certificates==2020.1.1=0\n", + " - certifi==2019.11.28=py38_0\n", + " - cffi==1.14.0=py38h2e261b9_0\n", + " - chardet==3.0.4=py38_1003\n", + " - conda-package-handling==1.6.0=py38h7b6447c_0\n", + " - conda==4.8.2=py38_0\n", + " - cryptography==2.8=py38h1ba5d50_0\n", + " - idna==2.8=py38_1000\n", + " - ld_impl_linux-64==2.33.1=h53a641e_7\n", + " - libedit==3.1.20181209=hc058e9b_0\n", + " - libffi==3.2.1=hd88cf55_4\n", + " - libgcc-ng==9.1.0=hdf63c60_0\n", + " - libstdcxx-ng==9.1.0=hdf63c60_0\n", + " - ncurses==6.2=he6710b0_0\n", + " - openssl==1.1.1d=h7b6447c_4\n", + " - pip==20.0.2=py38_1\n", + " - pycosat==0.6.3=py38h7b6447c_0\n", + " - pycparser==2.19=py_0\n", + " - pyopenssl==19.1.0=py38_0\n", + " - pysocks==1.7.1=py38_0\n", + " - python==3.8.1=h0371630_1\n", + " - readline==7.0=h7b6447c_5\n", + " - requests==2.22.0=py38_1\n", + " - ruamel_yaml==0.15.87=py38h7b6447c_0\n", + " - setuptools==45.2.0=py38_0\n", + " - six==1.14.0=py38_0\n", + " - sqlite==3.31.1=h7b6447c_0\n", + " - tk==8.6.8=hbc83047_0\n", + " - tqdm==4.42.1=py_0\n", + " - urllib3==1.25.8=py38_0\n", + " - wheel==0.34.2=py38_0\n", + " - xz==5.2.4=h14c3975_4\n", + " - yaml==0.1.7=had09818_2\n", + " - zlib==1.2.11=h7b6447c_3\n", + "\n", + "\n", + "The following NEW packages will be INSTALLED:\n", + "\n", + " _libgcc_mutex pkgs/main/linux-64::_libgcc_mutex-0.1-main\n", + " asn1crypto pkgs/main/linux-64::asn1crypto-1.3.0-py38_0\n", + " ca-certificates pkgs/main/linux-64::ca-certificates-2020.1.1-0\n", + " certifi pkgs/main/linux-64::certifi-2019.11.28-py38_0\n", + " cffi pkgs/main/linux-64::cffi-1.14.0-py38h2e261b9_0\n", + " chardet pkgs/main/linux-64::chardet-3.0.4-py38_1003\n", + " conda pkgs/main/linux-64::conda-4.8.2-py38_0\n", + " conda-package-han~ pkgs/main/linux-64::conda-package-handling-1.6.0-py38h7b6447c_0\n", + " cryptography pkgs/main/linux-64::cryptography-2.8-py38h1ba5d50_0\n", + " idna pkgs/main/linux-64::idna-2.8-py38_1000\n", + " ld_impl_linux-64 pkgs/main/linux-64::ld_impl_linux-64-2.33.1-h53a641e_7\n", + " libedit pkgs/main/linux-64::libedit-3.1.20181209-hc058e9b_0\n", + " libffi pkgs/main/linux-64::libffi-3.2.1-hd88cf55_4\n", + " libgcc-ng pkgs/main/linux-64::libgcc-ng-9.1.0-hdf63c60_0\n", + " libstdcxx-ng pkgs/main/linux-64::libstdcxx-ng-9.1.0-hdf63c60_0\n", + " ncurses pkgs/main/linux-64::ncurses-6.2-he6710b0_0\n", + " openssl pkgs/main/linux-64::openssl-1.1.1d-h7b6447c_4\n", + " pip pkgs/main/linux-64::pip-20.0.2-py38_1\n", + " pycosat pkgs/main/linux-64::pycosat-0.6.3-py38h7b6447c_0\n", + " pycparser pkgs/main/noarch::pycparser-2.19-py_0\n", + " pyopenssl pkgs/main/linux-64::pyopenssl-19.1.0-py38_0\n", + " pysocks pkgs/main/linux-64::pysocks-1.7.1-py38_0\n", + " python pkgs/main/linux-64::python-3.8.1-h0371630_1\n", + " readline pkgs/main/linux-64::readline-7.0-h7b6447c_5\n", + " requests pkgs/main/linux-64::requests-2.22.0-py38_1\n", + " ruamel_yaml pkgs/main/linux-64::ruamel_yaml-0.15.87-py38h7b6447c_0\n", + " setuptools pkgs/main/linux-64::setuptools-45.2.0-py38_0\n", + " six pkgs/main/linux-64::six-1.14.0-py38_0\n", + " sqlite pkgs/main/linux-64::sqlite-3.31.1-h7b6447c_0\n", + " tk pkgs/main/linux-64::tk-8.6.8-hbc83047_0\n", + " tqdm pkgs/main/noarch::tqdm-4.42.1-py_0\n", + " urllib3 pkgs/main/linux-64::urllib3-1.25.8-py38_0\n", + " wheel pkgs/main/linux-64::wheel-0.34.2-py38_0\n", + " xz pkgs/main/linux-64::xz-5.2.4-h14c3975_4\n", + " yaml pkgs/main/linux-64::yaml-0.1.7-had09818_2\n", + " zlib pkgs/main/linux-64::zlib-1.2.11-h7b6447c_3\n", + "\n", + "\n", + "Preparing transaction: | \b\b/ \b\b- \b\b\\ \b\bdone\n", + "Executing transaction: / \b\b- \b\b\\ \b\b| \b\b/ \b\b- \b\b\\ \b\b| \b\b/ \b\b- \b\b\\ \b\b| \b\b/ \b\b- \b\b\\ \b\b| \b\b/ \b\b- \b\b\\ \b\b| \b\b/ \b\b- \b\bdone\n", + "installation finished.\n", + "WARNING:\n", + " You currently have a PYTHONPATH environment variable set. This may cause\n", + " unexpected behavior when running the Python interpreter in Miniconda3.\n", + " For best results, please verify that your PYTHONPATH only points to\n", + " directories of packages that are compatible with the Python interpreter\n", + " in Miniconda3: /usr/local\n", + "PREFIX=/usr/local\n", + "Unpacking payload ...\n", + "Collecting package metadata (current_repodata.json): - \b\b\\ \b\bdone\n", + "Solving environment: / \b\b- \b\b\\ \b\bdone\n", + "\n", + "# All requested packages already installed.\n", + "\n", + "installation finished.\n", + "WARNING:\n", + " You currently have a PYTHONPATH environment variable set. This may cause\n", + " unexpected behavior when running the Python interpreter in Miniconda3.\n", + " For best results, please verify that your PYTHONPATH only points to\n", + " directories of packages that are compatible with the Python interpreter\n", + " in Miniconda3: /usr/local\n", + "PREFIX=/usr/local\n", + "Unpacking payload ...\n", + "Collecting package metadata (current_repodata.json): - \b\b\\ \b\bdone\n", + "Solving environment: / \b\b- \b\b\\ \b\bdone\n", + "\n", + "# All requested packages already installed.\n", + "\n", + "installation finished.\n", + "WARNING:\n", + " You currently have a PYTHONPATH environment variable set. This may cause\n", + " unexpected behavior when running the Python interpreter in Miniconda3.\n", + " For best results, please verify that your PYTHONPATH only points to\n", + " directories of packages that are compatible with the Python interpreter\n", + " in Miniconda3: /usr/local\n", + "PREFIX=/usr/local\n", + "Unpacking payload ...\n", + "Collecting package metadata (current_repodata.json): - \b\b\\ \b\bdone\n", + "Solving environment: / \b\b- \b\b\\ \b\bdone\n", + "\n", + "# All requested packages already installed.\n", + "\n", + "installation finished.\n", + "WARNING:\n", + " You currently have a PYTHONPATH environment variable set. This may cause\n", + " unexpected behavior when running the Python interpreter in Miniconda3.\n", + " For best results, please verify that your PYTHONPATH only points to\n", + " directories of packages that are compatible with the Python interpreter\n", + " in Miniconda3: /usr/local\n", + "PREFIX=/usr/local\n", + "Unpacking payload ...\n", + "Collecting package metadata (current_repodata.json): - \b\b\\ \b\bdone\n", + "Solving environment: / \b\b- \b\b\\ \b\bdone\n", + "\n", + "# All requested packages already installed.\n", + "\n", + "installation finished.\n", + "WARNING:\n", + " You currently have a PYTHONPATH environment variable set. This may cause\n", + " unexpected behavior when running the Python interpreter in Miniconda3.\n", + " For best results, please verify that your PYTHONPATH only points to\n", + " directories of packages that are compatible with the Python interpreter\n", + " in Miniconda3: /usr/local\n", + "PREFIX=/usr/local\n", + "Unpacking payload ...\n", + "Collecting package metadata (current_repodata.json): - \b\b\\ \b\bdone\n", + "Solving environment: / \b\b- \b\b\\ \b\bdone\n", + "\n", + "# All requested packages already installed.\n", + "\n", + "installation finished.\n", + "WARNING:\n", + " You currently have a PYTHONPATH environment variable set. This may cause\n", + " unexpected behavior when running the Python interpreter in Miniconda3.\n", + " For best results, please verify that your PYTHONPATH only points to\n", + " directories of packages that are compatible with the Python interpreter\n", + " in Miniconda3: /usr/local\n", + "1 loop, best of 5: 7.28 s per loop\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "%%timeit\n", + "!conda install -q -y jupyter\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "8BBr6JKFNVOl", + "outputId": "96a6e158-3c56-499e-cde9-2c278b255d9b" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Collecting package metadata (current_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", + " - jupyter\n", + "\n", + "\n", + "The following packages will be downloaded:\n", + "\n", + " package | build\n", + " ---------------------------|-----------------\n", + " argon2-cffi-21.3.0 | pyhd3eb1b0_0 15 KB\n", + " argon2-cffi-bindings-21.2.0| py38h7f8727e_0 33 KB\n", + " asttokens-2.0.5 | pyhd3eb1b0_0 20 KB\n", + " attrs-21.4.0 | pyhd3eb1b0_0 51 KB\n", + " backcall-0.2.0 | pyhd3eb1b0_0 13 KB\n", + " beautifulsoup4-4.11.1 | py38h06a4308_0 185 KB\n", + " bleach-4.1.0 | pyhd3eb1b0_0 123 KB\n", + " ca-certificates-2022.4.26 | h06a4308_0 124 KB\n", + " certifi-2022.5.18.1 | py38h06a4308_0 147 KB\n", + " conda-4.13.0 | py38h06a4308_0 896 KB\n", + " dbus-1.13.18 | hb2f20db_0 504 KB\n", + " debugpy-1.5.1 | py38h295c915_0 1.7 MB\n", + " decorator-5.1.1 | pyhd3eb1b0_0 12 KB\n", + " defusedxml-0.7.1 | pyhd3eb1b0_0 23 KB\n", + " entrypoints-0.4 | py38h06a4308_0 16 KB\n", + " executing-0.8.3 | pyhd3eb1b0_0 18 KB\n", + " expat-2.4.4 | h295c915_0 169 KB\n", + " fontconfig-2.13.1 | h6c09931_0 250 KB\n", + " freetype-2.11.0 | h70c0345_0 618 KB\n", + " glib-2.69.1 | h4ff587b_1 1.7 MB\n", + " gst-plugins-base-1.14.0 | h8213a91_2 4.9 MB\n", + " gstreamer-1.14.0 | h28cd5cc_2 3.2 MB\n", + " icu-58.2 | he6710b0_3 10.5 MB\n", + " importlib_resources-5.2.0 | pyhd3eb1b0_1 21 KB\n", + " ipykernel-6.9.1 | py38h06a4308_0 199 KB\n", + " ipython-8.3.0 | py38h06a4308_0 963 KB\n", + " ipython_genutils-0.2.0 | pyhd3eb1b0_1 27 KB\n", + " ipywidgets-7.6.5 | pyhd3eb1b0_1 105 KB\n", + " jedi-0.18.1 | py38h06a4308_1 982 KB\n", + " jinja2-3.0.3 | pyhd3eb1b0_0 106 KB\n", + " jpeg-9e | h7f8727e_0 240 KB\n", + " jsonschema-4.4.0 | py38h06a4308_0 121 KB\n", + " jupyter-1.0.0 | py38_7 7 KB\n", + " jupyter_client-7.2.2 | py38h06a4308_0 191 KB\n", + " jupyter_console-6.4.3 | pyhd3eb1b0_0 23 KB\n", + " jupyter_core-4.10.0 | py38h06a4308_0 76 KB\n", + " jupyterlab_pygments-0.1.2 | py_0 8 KB\n", + " jupyterlab_widgets-1.0.0 | pyhd3eb1b0_1 109 KB\n", + " libffi-3.3 | he6710b0_2 50 KB\n", + " libpng-1.6.37 | hbc83047_0 278 KB\n", + " libsodium-1.0.18 | h7b6447c_0 244 KB\n", + " libuuid-1.0.3 | h7f8727e_2 17 KB\n", + " libxcb-1.15 | h7f8727e_0 505 KB\n", + " libxml2-2.9.14 | h74e7548_0 718 KB\n", + " markupsafe-2.0.1 | py38h27cfd23_0 22 KB\n", + " matplotlib-inline-0.1.2 | pyhd3eb1b0_2 12 KB\n", + " mistune-0.8.4 |py38h7b6447c_1000 55 KB\n", + " nbclient-0.5.13 | py38h06a4308_0 91 KB\n", + " nbconvert-6.4.4 | py38h06a4308_0 494 KB\n", + " nbformat-5.3.0 | py38h06a4308_0 129 KB\n", + " nest-asyncio-1.5.5 | py38h06a4308_0 16 KB\n", + " notebook-6.4.11 | py38h06a4308_0 4.2 MB\n", + " openssl-1.1.1o | h7f8727e_0 2.5 MB\n", + " packaging-21.3 | pyhd3eb1b0_0 36 KB\n", + " pandocfilters-1.5.0 | pyhd3eb1b0_0 11 KB\n", + " parso-0.8.3 | pyhd3eb1b0_0 70 KB\n", + " pcre-8.45 | h295c915_0 207 KB\n", + " pexpect-4.8.0 | pyhd3eb1b0_3 53 KB\n", + " pickleshare-0.7.5 | pyhd3eb1b0_1003 13 KB\n", + " prometheus_client-0.13.1 | pyhd3eb1b0_0 47 KB\n", + " prompt-toolkit-3.0.20 | pyhd3eb1b0_0 259 KB\n", + " prompt_toolkit-3.0.20 | hd3eb1b0_0 12 KB\n", + " ptyprocess-0.7.0 | pyhd3eb1b0_2 17 KB\n", + " pure_eval-0.2.2 | pyhd3eb1b0_0 14 KB\n", + " pygments-2.11.2 | pyhd3eb1b0_0 759 KB\n", + " pyparsing-3.0.4 | pyhd3eb1b0_0 81 KB\n", + " pyqt-5.9.2 | py38h05f1152_4 4.5 MB\n", + " pyrsistent-0.18.0 | py38heee7806_0 94 KB\n", + " python-dateutil-2.8.2 | pyhd3eb1b0_0 233 KB\n", + " python-fastjsonschema-2.15.1| pyhd3eb1b0_0 29 KB\n", + " pyzmq-22.3.0 | py38h295c915_2 476 KB\n", + " qt-5.9.7 | h5867ecd_1 68.5 MB\n", + " qtconsole-5.3.0 | pyhd3eb1b0_0 93 KB\n", + " qtpy-2.0.1 | pyhd3eb1b0_0 40 KB\n", + " send2trash-1.8.0 | pyhd3eb1b0_1 19 KB\n", + " sip-4.19.13 | py38h295c915_0 279 KB\n", + " soupsieve-2.3.1 | pyhd3eb1b0_0 34 KB\n", + " stack_data-0.2.0 | pyhd3eb1b0_0 22 KB\n", + " terminado-0.13.1 | py38h06a4308_0 30 KB\n", + " testpath-0.5.0 | pyhd3eb1b0_0 81 KB\n", + " tornado-6.1 | py38h27cfd23_0 588 KB\n", + " traitlets-5.1.1 | pyhd3eb1b0_0 84 KB\n", + " typing-extensions-4.1.1 | hd3eb1b0_0 8 KB\n", + " typing_extensions-4.1.1 | pyh06a4308_0 28 KB\n", + " wcwidth-0.2.5 | pyhd3eb1b0_0 26 KB\n", + " webencodings-0.5.1 | py38_1 20 KB\n", + " widgetsnbextension-3.5.2 | py38h06a4308_0 651 KB\n", + " xz-5.2.5 | h7f8727e_1 339 KB\n", + " zeromq-4.3.4 | h2531618_0 331 KB\n", + " zipp-3.8.0 | py38h06a4308_0 15 KB\n", + " zlib-1.2.12 | h7f8727e_2 106 KB\n", + " ------------------------------------------------------------\n", + " Total: 115.7 MB\n", + "\n", + "The following NEW packages will be INSTALLED:\n", + "\n", + " argon2-cffi pkgs/main/noarch::argon2-cffi-21.3.0-pyhd3eb1b0_0\n", + " argon2-cffi-bindi~ pkgs/main/linux-64::argon2-cffi-bindings-21.2.0-py38h7f8727e_0\n", + " asttokens pkgs/main/noarch::asttokens-2.0.5-pyhd3eb1b0_0\n", + " attrs pkgs/main/noarch::attrs-21.4.0-pyhd3eb1b0_0\n", + " backcall pkgs/main/noarch::backcall-0.2.0-pyhd3eb1b0_0\n", + " beautifulsoup4 pkgs/main/linux-64::beautifulsoup4-4.11.1-py38h06a4308_0\n", + " bleach pkgs/main/noarch::bleach-4.1.0-pyhd3eb1b0_0\n", + " dbus pkgs/main/linux-64::dbus-1.13.18-hb2f20db_0\n", + " debugpy pkgs/main/linux-64::debugpy-1.5.1-py38h295c915_0\n", + " decorator pkgs/main/noarch::decorator-5.1.1-pyhd3eb1b0_0\n", + " defusedxml pkgs/main/noarch::defusedxml-0.7.1-pyhd3eb1b0_0\n", + " entrypoints pkgs/main/linux-64::entrypoints-0.4-py38h06a4308_0\n", + " executing pkgs/main/noarch::executing-0.8.3-pyhd3eb1b0_0\n", + " expat pkgs/main/linux-64::expat-2.4.4-h295c915_0\n", + " fontconfig pkgs/main/linux-64::fontconfig-2.13.1-h6c09931_0\n", + " freetype pkgs/main/linux-64::freetype-2.11.0-h70c0345_0\n", + " glib pkgs/main/linux-64::glib-2.69.1-h4ff587b_1\n", + " gst-plugins-base pkgs/main/linux-64::gst-plugins-base-1.14.0-h8213a91_2\n", + " gstreamer pkgs/main/linux-64::gstreamer-1.14.0-h28cd5cc_2\n", + " icu pkgs/main/linux-64::icu-58.2-he6710b0_3\n", + " importlib_resourc~ pkgs/main/noarch::importlib_resources-5.2.0-pyhd3eb1b0_1\n", + " ipykernel pkgs/main/linux-64::ipykernel-6.9.1-py38h06a4308_0\n", + " ipython pkgs/main/linux-64::ipython-8.3.0-py38h06a4308_0\n", + " ipython_genutils pkgs/main/noarch::ipython_genutils-0.2.0-pyhd3eb1b0_1\n", + " ipywidgets pkgs/main/noarch::ipywidgets-7.6.5-pyhd3eb1b0_1\n", + " jedi pkgs/main/linux-64::jedi-0.18.1-py38h06a4308_1\n", + " jinja2 pkgs/main/noarch::jinja2-3.0.3-pyhd3eb1b0_0\n", + " jpeg pkgs/main/linux-64::jpeg-9e-h7f8727e_0\n", + " jsonschema pkgs/main/linux-64::jsonschema-4.4.0-py38h06a4308_0\n", + " jupyter pkgs/main/linux-64::jupyter-1.0.0-py38_7\n", + " jupyter_client pkgs/main/linux-64::jupyter_client-7.2.2-py38h06a4308_0\n", + " jupyter_console pkgs/main/noarch::jupyter_console-6.4.3-pyhd3eb1b0_0\n", + " jupyter_core pkgs/main/linux-64::jupyter_core-4.10.0-py38h06a4308_0\n", + " jupyterlab_pygmen~ pkgs/main/noarch::jupyterlab_pygments-0.1.2-py_0\n", + " jupyterlab_widgets pkgs/main/noarch::jupyterlab_widgets-1.0.0-pyhd3eb1b0_1\n", + " libpng pkgs/main/linux-64::libpng-1.6.37-hbc83047_0\n", + " libsodium pkgs/main/linux-64::libsodium-1.0.18-h7b6447c_0\n", + " libuuid pkgs/main/linux-64::libuuid-1.0.3-h7f8727e_2\n", + " libxcb pkgs/main/linux-64::libxcb-1.15-h7f8727e_0\n", + " libxml2 pkgs/main/linux-64::libxml2-2.9.14-h74e7548_0\n", + " markupsafe pkgs/main/linux-64::markupsafe-2.0.1-py38h27cfd23_0\n", + " matplotlib-inline pkgs/main/noarch::matplotlib-inline-0.1.2-pyhd3eb1b0_2\n", + " mistune pkgs/main/linux-64::mistune-0.8.4-py38h7b6447c_1000\n", + " nbclient pkgs/main/linux-64::nbclient-0.5.13-py38h06a4308_0\n", + " nbconvert pkgs/main/linux-64::nbconvert-6.4.4-py38h06a4308_0\n", + " nbformat pkgs/main/linux-64::nbformat-5.3.0-py38h06a4308_0\n", + " nest-asyncio pkgs/main/linux-64::nest-asyncio-1.5.5-py38h06a4308_0\n", + " notebook pkgs/main/linux-64::notebook-6.4.11-py38h06a4308_0\n", + " packaging pkgs/main/noarch::packaging-21.3-pyhd3eb1b0_0\n", + " pandocfilters pkgs/main/noarch::pandocfilters-1.5.0-pyhd3eb1b0_0\n", + " parso pkgs/main/noarch::parso-0.8.3-pyhd3eb1b0_0\n", + " pcre pkgs/main/linux-64::pcre-8.45-h295c915_0\n", + " pexpect pkgs/main/noarch::pexpect-4.8.0-pyhd3eb1b0_3\n", + " pickleshare pkgs/main/noarch::pickleshare-0.7.5-pyhd3eb1b0_1003\n", + " prometheus_client pkgs/main/noarch::prometheus_client-0.13.1-pyhd3eb1b0_0\n", + " prompt-toolkit pkgs/main/noarch::prompt-toolkit-3.0.20-pyhd3eb1b0_0\n", + " prompt_toolkit pkgs/main/noarch::prompt_toolkit-3.0.20-hd3eb1b0_0\n", + " ptyprocess pkgs/main/noarch::ptyprocess-0.7.0-pyhd3eb1b0_2\n", + " pure_eval pkgs/main/noarch::pure_eval-0.2.2-pyhd3eb1b0_0\n", + " pygments pkgs/main/noarch::pygments-2.11.2-pyhd3eb1b0_0\n", + " pyparsing pkgs/main/noarch::pyparsing-3.0.4-pyhd3eb1b0_0\n", + " pyqt pkgs/main/linux-64::pyqt-5.9.2-py38h05f1152_4\n", + " pyrsistent pkgs/main/linux-64::pyrsistent-0.18.0-py38heee7806_0\n", + " python-dateutil pkgs/main/noarch::python-dateutil-2.8.2-pyhd3eb1b0_0\n", + " python-fastjsonsc~ pkgs/main/noarch::python-fastjsonschema-2.15.1-pyhd3eb1b0_0\n", + " pyzmq pkgs/main/linux-64::pyzmq-22.3.0-py38h295c915_2\n", + " qt pkgs/main/linux-64::qt-5.9.7-h5867ecd_1\n", + " qtconsole pkgs/main/noarch::qtconsole-5.3.0-pyhd3eb1b0_0\n", + " qtpy pkgs/main/noarch::qtpy-2.0.1-pyhd3eb1b0_0\n", + " send2trash pkgs/main/noarch::send2trash-1.8.0-pyhd3eb1b0_1\n", + " sip pkgs/main/linux-64::sip-4.19.13-py38h295c915_0\n", + " soupsieve pkgs/main/noarch::soupsieve-2.3.1-pyhd3eb1b0_0\n", + " stack_data pkgs/main/noarch::stack_data-0.2.0-pyhd3eb1b0_0\n", + " terminado pkgs/main/linux-64::terminado-0.13.1-py38h06a4308_0\n", + " testpath pkgs/main/noarch::testpath-0.5.0-pyhd3eb1b0_0\n", + " tornado pkgs/main/linux-64::tornado-6.1-py38h27cfd23_0\n", + " traitlets pkgs/main/noarch::traitlets-5.1.1-pyhd3eb1b0_0\n", + " typing-extensions pkgs/main/noarch::typing-extensions-4.1.1-hd3eb1b0_0\n", + " typing_extensions pkgs/main/noarch::typing_extensions-4.1.1-pyh06a4308_0\n", + " wcwidth pkgs/main/noarch::wcwidth-0.2.5-pyhd3eb1b0_0\n", + " webencodings pkgs/main/linux-64::webencodings-0.5.1-py38_1\n", + " widgetsnbextension pkgs/main/linux-64::widgetsnbextension-3.5.2-py38h06a4308_0\n", + " zeromq pkgs/main/linux-64::zeromq-4.3.4-h2531618_0\n", + " zipp pkgs/main/linux-64::zipp-3.8.0-py38h06a4308_0\n", + "\n", + "The following packages will be UPDATED:\n", + "\n", + " ca-certificates 2020.1.1-0 --> 2022.4.26-h06a4308_0\n", + " certifi 2019.11.28-py38_0 --> 2022.5.18.1-py38h06a4308_0\n", + " conda 4.8.2-py38_0 --> 4.13.0-py38h06a4308_0\n", + " libffi 3.2.1-hd88cf55_4 --> 3.3-he6710b0_2\n", + " openssl 1.1.1d-h7b6447c_4 --> 1.1.1o-h7f8727e_0\n", + " xz 5.2.4-h14c3975_4 --> 5.2.5-h7f8727e_1\n", + " zlib 1.2.11-h7b6447c_3 --> 1.2.12-h7f8727e_2\n", + "\n", + "\n", + "Preparing transaction: ...working... done\n", + "Verifying transaction: ...working... done\n", + "Executing transaction: ...working... done\n", + "Collecting package metadata (current_repodata.json): ...working... done\n", + "Solving environment: ...working... done\n", + "\n", + "# All requested packages already installed.\n", + "\n", + "Collecting package metadata (current_repodata.json): ...working... done\n", + "Solving environment: ...working... done\n", + "\n", + "# All requested packages already installed.\n", + "\n", + "Collecting package metadata (current_repodata.json): ...working... done\n", + "Solving environment: ...working... done\n", + "\n", + "# All requested packages already installed.\n", + "\n", + "Collecting package metadata (current_repodata.json): ...working... done\n", + "Solving environment: ...working... done\n", + "\n", + "# All requested packages already installed.\n", + "\n", + "Collecting package metadata (current_repodata.json): ...working... done\n", + "Solving environment: ...working... done\n", + "\n", + "# All requested packages already installed.\n", + "\n", + "The slowest run took 4.09 times longer than the fastest. This could mean that an intermediate result is being cached.\n", + "1 loop, best of 5: 5.74 s per loop\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "%%timeit\n", + "!conda install -q -y google-colab -c conda-forge\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "KNvtKbhlNVen", + "outputId": "38f61dbe-31d4-475f-87d8-bfb8b03ca658" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Collecting package metadata (current_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", + " - google-colab\n", + "\n", + "\n", + "The following packages will be downloaded:\n", + "\n", + " package | build\n", + " ---------------------------|-----------------\n", + " aiohttp-3.7.4.post0 | py38h7f8727e_2 553 KB\n", + " async-timeout-3.0.1 | py_1000 11 KB conda-forge\n", + " ca-certificates-2022.5.18.1| ha878542_0 144 KB conda-forge\n", + " cachetools-5.0.0 | pyhd8ed1ab_0 12 KB conda-forge\n", + " certifi-2022.5.18.1 | py38h578d9bd_0 150 KB conda-forge\n", + " conda-4.13.0 | py38h578d9bd_1 994 KB conda-forge\n", + " cryptography-35.0.0 | py38ha5dfef3_0 1.5 MB conda-forge\n", + " google-auth-2.6.6 | pyh6c4a22f_0 84 KB conda-forge\n", + " google-colab-1.0.0 | pyh44b312d_0 77 KB conda-forge\n", + " libblas-3.9.0 | 8_openblas 11 KB conda-forge\n", + " libcblas-3.9.0 | 8_openblas 11 KB conda-forge\n", + " libgfortran-ng-7.5.0 | h14aa051_20 23 KB conda-forge\n", + " libgfortran4-7.5.0 | h14aa051_20 1.2 MB conda-forge\n", + " liblapack-3.9.0 | 8_openblas 11 KB conda-forge\n", + " libopenblas-0.3.12 |pthreads_hb3c22a3_1 8.2 MB conda-forge\n", + " multidict-5.2.0 | py38h7f8727e_2 64 KB\n", + " numpy-1.17.5 | py38h95a1406_0 5.2 MB conda-forge\n", + " pandas-1.0.5 | py38hcb8c335_0 10.5 MB conda-forge\n", + " portpicker-1.3.1 | py38h06a4308_0 260 KB\n", + " pyasn1-0.4.8 | py_0 53 KB conda-forge\n", + " pyasn1-modules-0.2.7 | py_0 60 KB conda-forge\n", + " pyopenssl-22.0.0 | pyhd8ed1ab_0 49 KB conda-forge\n", + " python_abi-3.8 | 2_cp38 4 KB conda-forge\n", + " pytz-2022.1 | pyhd8ed1ab_0 242 KB conda-forge\n", + " pyu2f-0.1.5 | pyhd8ed1ab_0 31 KB conda-forge\n", + " rsa-4.8 | pyhd8ed1ab_0 31 KB conda-forge\n", + " yarl-1.6.3 | py38h27cfd23_0 136 KB\n", + " ------------------------------------------------------------\n", + " Total: 29.6 MB\n", + "\n", + "The following NEW packages will be INSTALLED:\n", + "\n", + " aiohttp pkgs/main/linux-64::aiohttp-3.7.4.post0-py38h7f8727e_2\n", + " async-timeout conda-forge/noarch::async-timeout-3.0.1-py_1000\n", + " cachetools conda-forge/noarch::cachetools-5.0.0-pyhd8ed1ab_0\n", + " google-auth conda-forge/noarch::google-auth-2.6.6-pyh6c4a22f_0\n", + " google-colab conda-forge/noarch::google-colab-1.0.0-pyh44b312d_0\n", + " libblas conda-forge/linux-64::libblas-3.9.0-8_openblas\n", + " libcblas conda-forge/linux-64::libcblas-3.9.0-8_openblas\n", + " libgfortran-ng conda-forge/linux-64::libgfortran-ng-7.5.0-h14aa051_20\n", + " libgfortran4 conda-forge/linux-64::libgfortran4-7.5.0-h14aa051_20\n", + " liblapack conda-forge/linux-64::liblapack-3.9.0-8_openblas\n", + " libopenblas conda-forge/linux-64::libopenblas-0.3.12-pthreads_hb3c22a3_1\n", + " multidict pkgs/main/linux-64::multidict-5.2.0-py38h7f8727e_2\n", + " numpy conda-forge/linux-64::numpy-1.17.5-py38h95a1406_0\n", + " pandas conda-forge/linux-64::pandas-1.0.5-py38hcb8c335_0\n", + " portpicker pkgs/main/linux-64::portpicker-1.3.1-py38h06a4308_0\n", + " pyasn1 conda-forge/noarch::pyasn1-0.4.8-py_0\n", + " pyasn1-modules conda-forge/noarch::pyasn1-modules-0.2.7-py_0\n", + " python_abi conda-forge/linux-64::python_abi-3.8-2_cp38\n", + " pytz conda-forge/noarch::pytz-2022.1-pyhd8ed1ab_0\n", + " pyu2f conda-forge/noarch::pyu2f-0.1.5-pyhd8ed1ab_0\n", + " rsa conda-forge/noarch::rsa-4.8-pyhd8ed1ab_0\n", + " yarl pkgs/main/linux-64::yarl-1.6.3-py38h27cfd23_0\n", + "\n", + "The following packages will be UPDATED:\n", + "\n", + " ca-certificates pkgs/main::ca-certificates-2022.4.26-~ --> conda-forge::ca-certificates-2022.5.18.1-ha878542_0\n", + " conda pkgs/main::conda-4.13.0-py38h06a4308_0 --> conda-forge::conda-4.13.0-py38h578d9bd_1\n", + " cryptography pkgs/main::cryptography-2.8-py38h1ba5~ --> conda-forge::cryptography-35.0.0-py38ha5dfef3_0\n", + " pyopenssl pkgs/main/linux-64::pyopenssl-19.1.0-~ --> conda-forge/noarch::pyopenssl-22.0.0-pyhd8ed1ab_0\n", + "\n", + "The following packages will be SUPERSEDED by a higher-priority channel:\n", + "\n", + " certifi pkgs/main::certifi-2022.5.18.1-py38h0~ --> conda-forge::certifi-2022.5.18.1-py38h578d9bd_0\n", + "\n", + "\n", + "Preparing transaction: ...working... done\n", + "Verifying transaction: ...working... done\n", + "Executing transaction: ...working... done\n", + "Collecting package metadata (current_repodata.json): ...working... done\n", + "Solving environment: ...working... done\n", + "\n", + "# All requested packages already installed.\n", + "\n", + "Collecting package metadata (current_repodata.json): ...working... done\n", + "Solving environment: ...working... done\n", + "\n", + "# All requested packages already installed.\n", + "\n", + "Collecting package metadata (current_repodata.json): ...working... done\n", + "Solving environment: ...working... done\n", + "\n", + "# All requested packages already installed.\n", + "\n", + "Collecting package metadata (current_repodata.json): ...working... done\n", + "Solving environment: ...working... done\n", + "\n", + "# All requested packages already installed.\n", + "\n", + "Collecting package metadata (current_repodata.json): ...working... done\n", + "Solving environment: ...working... done\n", + "\n", + "# All requested packages already installed.\n", + "\n", + "The slowest run took 4.11 times longer than the fastest. This could mean that an intermediate result is being cached.\n", + "1 loop, best of 5: 11.1 s per loop\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "%%timeit\n", + "!python -m ipykernel install --name \"py38\" --user" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "J-WTyVLoNVvJ", + "outputId": "fae417f1-4597-47fc-a58f-14c5b676687e" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Installed kernelspec py38 in /root/.local/share/jupyter/kernels/py38\n", + "Installed kernelspec py38 in /root/.local/share/jupyter/kernels/py38\n", + "Installed kernelspec py38 in /root/.local/share/jupyter/kernels/py38\n", + "Installed kernelspec py38 in /root/.local/share/jupyter/kernels/py38\n", + "Installed kernelspec py38 in /root/.local/share/jupyter/kernels/py38\n", + "Installed kernelspec py38 in /root/.local/share/jupyter/kernels/py38\n", + "1 loop, best of 5: 713 ms per loop\n" + ] + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "H80WJWdPFLFL", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "f3444e05-b91b-4072-aa42-fa699e8d26d4" + }, + "source": [ + "# Reload the web page and execute this cell\n", + "import sys\n", + "print(\"User Current Version:-\", sys.version)" + ], + "execution_count": 1, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "User Current Version:- 3.8.1 (default, Jan 8 2020, 22:29:32) \n", + "[GCC 7.3.0]\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "%%timeit\n", + "%pip install -UI mp-api" + ], + "metadata": { + "id": "21X2DVmvM35d", + "outputId": "a265c66a-8b73-47bd-a86d-26f34e8f5f41", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + } + }, + "execution_count": 2, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n", + "Collecting mp-api\n", + " Downloading mp_api-0.24.0-py3-none-any.whl (63 kB)\n", + "\u001b[K |████████████████████████████████| 63 kB 1.6 MB/s \n", + "\u001b[?25hCollecting setuptools\n", + " Downloading setuptools-62.3.2-py3-none-any.whl (1.2 MB)\n", + "\u001b[K |████████████████████████████████| 1.2 MB 58.0 MB/s \n", + "\u001b[?25hCollecting emmet-core>=0.27.5\n", + " Downloading emmet_core-0.27.6-py3-none-any.whl (218 kB)\n", + "\u001b[K |████████████████████████████████| 218 kB 67.5 MB/s \n", + "\u001b[?25hCollecting mpcontribs-client\n", + " Downloading mpcontribs_client-4.2.10-py3-none-any.whl (21 kB)\n", + "Collecting typing-extensions>=3.7.4.1\n", + " Downloading typing_extensions-4.2.0-py3-none-any.whl (24 kB)\n", + "Collecting monty>=2021.3.12\n", + " Downloading monty-2022.4.26-py3-none-any.whl (65 kB)\n", + "\u001b[K |████████████████████████████████| 65 kB 4.4 MB/s \n", + "\u001b[?25hCollecting pymatgen>=2022.3.7\n", + " Downloading pymatgen-2022.5.26.tar.gz (2.6 MB)\n", + "\u001b[K |████████████████████████████████| 2.6 MB 54.1 MB/s \n", + "\u001b[?25h Installing build dependencies ... \u001b[?25l\u001b[?25hdone\n", + " Getting requirements to build wheel ... \u001b[?25l\u001b[?25hdone\n", + " Installing backend dependencies ... \u001b[?25l\u001b[?25hdone\n", + " Preparing wheel metadata ... \u001b[?25l\u001b[?25hdone\n", + "Collecting requests>=2.23.0\n", + " Downloading requests-2.27.1-py2.py3-none-any.whl (63 kB)\n", + "\u001b[K |████████████████████████████████| 63 kB 1.8 MB/s \n", + "\u001b[?25hCollecting maggma>=0.46.0\n", + " Downloading maggma-0.47.2-py3-none-any.whl (91 kB)\n", + "\u001b[K |████████████████████████████████| 91 kB 11.7 MB/s \n", + "\u001b[?25hCollecting matminer>=0.7.3\n", + " Downloading matminer-0.7.8-py3-none-any.whl (1.4 MB)\n", + "\u001b[K |████████████████████████████████| 1.4 MB 39.5 MB/s \n", + "\u001b[?25hCollecting pydantic==1.8.2\n", + " Downloading pydantic-1.8.2-cp38-cp38-manylinux2014_x86_64.whl (13.7 MB)\n", + "\u001b[K |████████████████████████████████| 13.7 MB 59.3 MB/s \n", + "\u001b[?25hCollecting pybtex~=0.24\n", + " Downloading pybtex-0.24.0-py2.py3-none-any.whl (561 kB)\n", + "\u001b[K |████████████████████████████████| 561 kB 79.0 MB/s \n", + "\u001b[?25hCollecting robocrys>=0.2.7\n", + " Downloading robocrys-0.2.7-py3-none-any.whl (3.8 MB)\n", + "\u001b[K |████████████████████████████████| 3.8 MB 46.4 MB/s \n", + "\u001b[?25hCollecting ipython\n", + " Downloading ipython-8.4.0-py3-none-any.whl (750 kB)\n", + "\u001b[K |████████████████████████████████| 750 kB 61.7 MB/s \n", + "\u001b[?25hCollecting pyIsEmail\n", + " Downloading pyIsEmail-1.4.0-py2.py3-none-any.whl (25 kB)\n", + "Collecting ujson\n", + " Downloading ujson-5.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (45 kB)\n", + "\u001b[K |████████████████████████████████| 45 kB 3.6 MB/s \n", + "\u001b[?25hCollecting flatten-dict\n", + " Downloading flatten_dict-0.4.2-py2.py3-none-any.whl (9.7 kB)\n", + "Collecting service-identity\n", + " Downloading service_identity-21.1.0-py2.py3-none-any.whl (12 kB)\n", + "Collecting jsonschema<4.0\n", + " Downloading jsonschema-3.2.0-py2.py3-none-any.whl (56 kB)\n", + "\u001b[K |████████████████████████████████| 56 kB 5.1 MB/s \n", + "\u001b[?25hCollecting cryptography\n", + " Downloading cryptography-37.0.2-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.1 MB)\n", + "\u001b[K |████████████████████████████████| 4.1 MB 48.1 MB/s \n", + "\u001b[?25hCollecting bravado[fido]\n", + " Downloading bravado-11.0.3-py2.py3-none-any.whl (38 kB)\n", + "Collecting swagger-spec-validator<2.7.4\n", + " Downloading swagger_spec_validator-2.7.3-py2.py3-none-any.whl (27 kB)\n", + "Collecting pyOpenSSL\n", + " Downloading pyOpenSSL-22.0.0-py2.py3-none-any.whl (55 kB)\n", + "\u001b[K |████████████████████████████████| 55 kB 4.6 MB/s \n", + "\u001b[?25hCollecting pandas\n", + " Downloading pandas-1.4.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.7 MB)\n", + "\u001b[K |████████████████████████████████| 11.7 MB 46.3 MB/s \n", + "\u001b[?25hCollecting fido[tls]\n", + " Downloading fido-4.2.2.tar.gz (7.4 kB)\n", + "Collecting boltons\n", + " Downloading boltons-21.0.0-py2.py3-none-any.whl (193 kB)\n", + "\u001b[K |████████████████████████████████| 193 kB 48.9 MB/s \n", + "\u001b[?25hCollecting pint\n", + " Downloading Pint-0.19.2.tar.gz (292 kB)\n", + "\u001b[K |████████████████████████████████| 292 kB 15.0 MB/s \n", + "\u001b[?25h Installing build dependencies ... \u001b[?25l\u001b[?25hdone\n", + " Getting requirements to build wheel ... \u001b[?25l\u001b[?25hdone\n", + " Preparing wheel metadata ... \u001b[?25l\u001b[?25hdone\n", + "Collecting twisted\n", + " Downloading Twisted-22.4.0-py3-none-any.whl (3.1 MB)\n", + "\u001b[K |████████████████████████████████| 3.1 MB 39.1 MB/s \n", + "\u001b[?25hCollecting filetype\n", + " Downloading filetype-1.0.13-py2.py3-none-any.whl (17 kB)\n", + "Collecting plotly\n", + " Downloading plotly-5.8.0-py2.py3-none-any.whl (15.2 MB)\n", + "\u001b[K |████████████████████████████████| 15.2 MB 39.0 MB/s \n", + "\u001b[?25hCollecting pymongo\n", + " Downloading pymongo-4.1.1-cp38-cp38-manylinux2014_x86_64.whl (498 kB)\n", + "\u001b[K |████████████████████████████████| 498 kB 50.7 MB/s \n", + "\u001b[?25hCollecting requests-futures\n", + " Downloading requests_futures-1.0.0-py2.py3-none-any.whl (7.4 kB)\n", + "Collecting tqdm\n", + " Downloading tqdm-4.64.0-py2.py3-none-any.whl (78 kB)\n", + "\u001b[K |████████████████████████████████| 78 kB 7.5 MB/s \n", + "\u001b[?25hCollecting json2html\n", + " Downloading json2html-1.3.0.tar.gz (7.0 kB)\n", + "Collecting spglib>=1.9.9.44\n", + " Downloading spglib-1.16.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (325 kB)\n", + "\u001b[K |████████████████████████████████| 325 kB 58.5 MB/s \n", + "\u001b[?25hCollecting tabulate\n", + " Downloading tabulate-0.8.9-py3-none-any.whl (25 kB)\n", + "Collecting palettable>=3.1.1\n", + " Downloading palettable-3.3.0-py2.py3-none-any.whl (111 kB)\n", + "\u001b[K |████████████████████████████████| 111 kB 59.3 MB/s \n", + "\u001b[?25hCollecting networkx>=2.2\n", + " Downloading networkx-2.8.3-py3-none-any.whl (2.0 MB)\n", + "\u001b[K |████████████████████████████████| 2.0 MB 33.3 MB/s \n", + "\u001b[?25hCollecting scipy>=1.5.0\n", + " Downloading scipy-1.8.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (41.6 MB)\n", + "\u001b[K |████████████████████████████████| 41.6 MB 1.3 MB/s \n", + "\u001b[?25hCollecting sympy\n", + " Downloading sympy-1.10.1-py3-none-any.whl (6.4 MB)\n", + "\u001b[K |████████████████████████████████| 6.4 MB 41.4 MB/s \n", + "\u001b[?25hCollecting ruamel.yaml>=0.17.0\n", + " Downloading ruamel.yaml-0.17.21-py3-none-any.whl (109 kB)\n", + "\u001b[K |████████████████████████████████| 109 kB 75.4 MB/s \n", + "\u001b[?25hCollecting numpy>=1.20.1\n", + " Downloading numpy-1.22.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (16.9 MB)\n", + "\u001b[K |████████████████████████████████| 16.9 MB 40.8 MB/s \n", + "\u001b[?25hCollecting matplotlib>=1.5\n", + " Downloading matplotlib-3.5.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl (11.3 MB)\n", + "\u001b[K |████████████████████████████████| 11.3 MB 40.2 MB/s \n", + "\u001b[?25hCollecting uncertainties>=3.1.4\n", + " Downloading uncertainties-3.1.6-py2.py3-none-any.whl (98 kB)\n", + "\u001b[K |████████████████████████████████| 98 kB 8.1 MB/s \n", + "\u001b[?25hCollecting idna<4,>=2.5; python_version >= \"3\"\n", + " Downloading idna-3.3-py3-none-any.whl (61 kB)\n", + "\u001b[K |████████████████████████████████| 61 kB 8.7 MB/s \n", + "\u001b[?25hCollecting certifi>=2017.4.17\n", + " Downloading certifi-2022.5.18.1-py3-none-any.whl (155 kB)\n", + "\u001b[K |████████████████████████████████| 155 kB 54.5 MB/s \n", + "\u001b[?25hCollecting urllib3<1.27,>=1.21.1\n", + " Downloading urllib3-1.26.9-py2.py3-none-any.whl (138 kB)\n", + "\u001b[K |████████████████████████████████| 138 kB 63.6 MB/s \n", + "\u001b[?25hCollecting charset-normalizer~=2.0.0; python_version >= \"3\"\n", + " Downloading charset_normalizer-2.0.12-py3-none-any.whl (39 kB)\n", + "Collecting boto3>=1.20.41\n", + " Downloading boto3-1.24.2-py3-none-any.whl (132 kB)\n", + "\u001b[K |████████████████████████████████| 132 kB 59.3 MB/s \n", + "\u001b[?25hCollecting dnspython>=1.16.0\n", + " Downloading dnspython-2.2.1-py3-none-any.whl (269 kB)\n", + "\u001b[K |████████████████████████████████| 269 kB 60.1 MB/s \n", + "\u001b[?25hCollecting sshtunnel>=0.1.5\n", + " Downloading sshtunnel-0.4.0-py2.py3-none-any.whl (24 kB)\n", + "Collecting aioitertools>=0.5.1\n", + " Downloading aioitertools-0.10.0-py3-none-any.whl (23 kB)\n", + "Collecting pydash>=4.1.0\n", + " Downloading pydash-5.1.0-py3-none-any.whl (84 kB)\n", + "\u001b[K |████████████████████████████████| 84 kB 3.1 MB/s \n", + "\u001b[?25hCollecting fastapi>=0.42.0\n", + " Downloading fastapi-0.78.0-py3-none-any.whl (54 kB)\n", + "\u001b[K |████████████████████████████████| 54 kB 3.4 MB/s \n", + "\u001b[?25hCollecting mongomock>=3.10.0\n", + " Downloading mongomock-4.0.0-py2.py3-none-any.whl (60 kB)\n", + "\u001b[K |████████████████████████████████| 60 kB 8.2 MB/s \n", + "\u001b[?25hCollecting msgpack>=0.5.6\n", + " Downloading msgpack-1.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (322 kB)\n", + "\u001b[K |████████████████████████████████| 322 kB 64.9 MB/s \n", + "\u001b[?25hCollecting pyzmq==22.3.0\n", + " Downloading pyzmq-22.3.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.1 MB)\n", + "\u001b[K |████████████████████████████████| 1.1 MB 44.0 MB/s \n", + "\u001b[?25hCollecting orjson>=3.6.0\n", + " Downloading orjson-3.7.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (256 kB)\n", + "\u001b[K |████████████████████████████████| 256 kB 61.6 MB/s \n", + "\u001b[?25hCollecting mongogrant>=0.3.1\n", + " Downloading mongogrant-0.3.3-py3-none-any.whl (25 kB)\n", + "Collecting future>=0.18.2\n", + " Downloading future-0.18.2.tar.gz (829 kB)\n", + "\u001b[K |████████████████████████████████| 829 kB 53.0 MB/s \n", + "\u001b[?25hCollecting scikit-learn>=1.1.0\n", + " Downloading scikit_learn-1.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (31.2 MB)\n", + "\u001b[K |████████████████████████████████| 31.2 MB 71.9 MB/s \n", + "\u001b[?25hCollecting six\n", + " Downloading six-1.16.0-py2.py3-none-any.whl (11 kB)\n", + "Collecting latexcodec>=1.0.4\n", + " Downloading latexcodec-2.0.1-py2.py3-none-any.whl (18 kB)\n", + "Collecting PyYAML>=3.01\n", + " Downloading PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (701 kB)\n", + "\u001b[K |████████████████████████████████| 701 kB 46.7 MB/s \n", + "\u001b[?25hCollecting inflect\n", + " Downloading inflect-5.6.0-py3-none-any.whl (33 kB)\n", + "Collecting pubchempy\n", + " Downloading PubChemPy-1.0.4.tar.gz (29 kB)\n", + "Collecting pickleshare\n", + " Downloading pickleshare-0.7.5-py2.py3-none-any.whl (6.9 kB)\n", + "Collecting traitlets>=5\n", + " Downloading traitlets-5.2.2.post1-py3-none-any.whl (106 kB)\n", + "\u001b[K |████████████████████████████████| 106 kB 55.5 MB/s \n", + "\u001b[?25hCollecting backcall\n", + " Downloading backcall-0.2.0-py2.py3-none-any.whl (11 kB)\n", + "Collecting jedi>=0.16\n", + " Downloading jedi-0.18.1-py2.py3-none-any.whl (1.6 MB)\n", + "\u001b[K |████████████████████████████████| 1.6 MB 63.0 MB/s \n", + "\u001b[?25hCollecting matplotlib-inline\n", + " Downloading matplotlib_inline-0.1.3-py3-none-any.whl (8.2 kB)\n", + "Collecting prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0\n", + " Downloading prompt_toolkit-3.0.29-py3-none-any.whl (381 kB)\n", + "\u001b[K |████████████████████████████████| 381 kB 58.0 MB/s \n", + "\u001b[?25hCollecting pexpect>4.3; sys_platform != \"win32\"\n", + " Downloading pexpect-4.8.0-py2.py3-none-any.whl (59 kB)\n", + "\u001b[K |████████████████████████████████| 59 kB 7.1 MB/s \n", + "\u001b[?25hCollecting stack-data\n", + " Downloading stack_data-0.2.0-py3-none-any.whl (21 kB)\n", + "Collecting decorator\n", + " Downloading decorator-5.1.1-py3-none-any.whl (9.1 kB)\n", + "Collecting pygments>=2.4.0\n", + " Downloading Pygments-2.12.0-py3-none-any.whl (1.1 MB)\n", + "\u001b[K |████████████████████████████████| 1.1 MB 52.3 MB/s \n", + "\u001b[?25hCollecting pyasn1-modules\n", + " Downloading pyasn1_modules-0.2.8-py2.py3-none-any.whl (155 kB)\n", + "\u001b[K |████████████████████████████████| 155 kB 60.3 MB/s \n", + "\u001b[?25hCollecting pyasn1\n", + " Downloading pyasn1-0.4.8-py2.py3-none-any.whl (77 kB)\n", + "\u001b[K |████████████████████████████████| 77 kB 6.6 MB/s \n", + "\u001b[?25hCollecting attrs>=19.1.0\n", + " Downloading attrs-21.4.0-py2.py3-none-any.whl (60 kB)\n", + "\u001b[K |████████████████████████████████| 60 kB 9.0 MB/s \n", + "\u001b[?25hCollecting pyrsistent>=0.14.0\n", + " Downloading pyrsistent-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (119 kB)\n", + "\u001b[K |████████████████████████████████| 119 kB 62.6 MB/s \n", + "\u001b[?25hCollecting cffi>=1.12\n", + " Downloading cffi-1.15.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (446 kB)\n", + "\u001b[K |████████████████████████████████| 446 kB 60.1 MB/s \n", + "\u001b[?25hCollecting python-dateutil\n", + " Downloading python_dateutil-2.8.2-py2.py3-none-any.whl (247 kB)\n", + "\u001b[K |████████████████████████████████| 247 kB 61.3 MB/s \n", + "\u001b[?25hCollecting monotonic\n", + " Downloading monotonic-1.6-py2.py3-none-any.whl (8.2 kB)\n", + "Collecting simplejson\n", + " Downloading simplejson-3.17.6-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (139 kB)\n", + "\u001b[K |████████████████████████████████| 139 kB 46.6 MB/s \n", + "\u001b[?25hCollecting bravado-core>=5.16.1\n", + " Downloading bravado_core-5.17.0-py2.py3-none-any.whl (67 kB)\n", + "\u001b[K |████████████████████████████████| 67 kB 5.2 MB/s \n", + "\u001b[?25hCollecting pytz>=2020.1\n", + " Downloading pytz-2022.1-py2.py3-none-any.whl (503 kB)\n", + "\u001b[K |████████████████████████████████| 503 kB 47.4 MB/s \n", + "\u001b[?25hCollecting crochet\n", + " Downloading crochet-2.0.0-py3-none-any.whl (31 kB)\n", + "Collecting yelp_bytes\n", + " Downloading yelp_bytes-0.3.0-py2.py3-none-any.whl (2.9 kB)\n", + "Collecting constantly>=15.1\n", + " Downloading constantly-15.1.0-py2.py3-none-any.whl (7.9 kB)\n", + "Collecting Automat>=0.8.0\n", + " Downloading Automat-20.2.0-py2.py3-none-any.whl (31 kB)\n", + "Collecting hyperlink>=17.1.1\n", + " Downloading hyperlink-21.0.0-py2.py3-none-any.whl (74 kB)\n", + "\u001b[K |████████████████████████████████| 74 kB 3.7 MB/s \n", + "\u001b[?25hCollecting zope.interface>=4.4.2\n", + " Downloading zope.interface-5.4.0-cp38-cp38-manylinux2010_x86_64.whl (259 kB)\n", + "\u001b[K |████████████████████████████████| 259 kB 60.0 MB/s \n", + "\u001b[?25hCollecting incremental>=21.3.0\n", + " Downloading incremental-21.3.0-py2.py3-none-any.whl (15 kB)\n", + "Collecting tenacity>=6.2.0\n", + " Downloading tenacity-8.0.1-py3-none-any.whl (24 kB)\n", + "Collecting mpmath>=0.19\n", + " Downloading mpmath-1.2.1-py3-none-any.whl (532 kB)\n", + "\u001b[K |████████████████████████████████| 532 kB 15.7 MB/s \n", + "\u001b[?25hCollecting ruamel.yaml.clib>=0.2.6; platform_python_implementation == \"CPython\" and python_version < \"3.11\"\n", + " Downloading ruamel.yaml.clib-0.2.6-cp38-cp38-manylinux1_x86_64.whl (570 kB)\n", + "\u001b[K |████████████████████████████████| 570 kB 61.3 MB/s \n", + "\u001b[?25hCollecting fonttools>=4.22.0\n", + " Downloading fonttools-4.33.3-py3-none-any.whl (930 kB)\n", + "\u001b[K |████████████████████████████████| 930 kB 55.7 MB/s \n", + "\u001b[?25hCollecting pyparsing>=2.2.1\n", + " Using cached pyparsing-3.0.9-py3-none-any.whl (98 kB)\n", + "Collecting cycler>=0.10\n", + " Downloading cycler-0.11.0-py3-none-any.whl (6.4 kB)\n", + "Collecting pillow>=6.2.0\n", + " Downloading Pillow-9.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.1 MB)\n", + "\u001b[K |████████████████████████████████| 3.1 MB 48.3 MB/s \n", + "\u001b[?25hCollecting kiwisolver>=1.0.1\n", + " Downloading kiwisolver-1.4.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl (1.2 MB)\n", + "\u001b[K |████████████████████████████████| 1.2 MB 50.8 MB/s \n", + "\u001b[?25hCollecting packaging>=20.0\n", + " Using cached packaging-21.3-py3-none-any.whl (40 kB)\n", + "Collecting botocore<1.28.0,>=1.27.2\n", + " Downloading botocore-1.27.2-py3-none-any.whl (8.8 MB)\n", + "\u001b[K |████████████████████████████████| 8.8 MB 50.9 MB/s \n", + "\u001b[?25hCollecting jmespath<2.0.0,>=0.7.1\n", + " Downloading jmespath-1.0.0-py3-none-any.whl (23 kB)\n", + "Collecting s3transfer<0.7.0,>=0.6.0\n", + " Downloading s3transfer-0.6.0-py3-none-any.whl (79 kB)\n", + "\u001b[K |████████████████████████████████| 79 kB 8.6 MB/s \n", + "\u001b[?25hCollecting paramiko>=2.7.2\n", + " Downloading paramiko-2.11.0-py2.py3-none-any.whl (212 kB)\n", + "\u001b[K |████████████████████████████████| 212 kB 65.2 MB/s \n", + "\u001b[?25hCollecting starlette==0.19.1\n", + " Downloading starlette-0.19.1-py3-none-any.whl (63 kB)\n", + "\u001b[K |████████████████████████████████| 63 kB 2.7 MB/s \n", + "\u001b[?25hCollecting sentinels\n", + " Downloading sentinels-1.0.0.tar.gz (4.1 kB)\n", + "Collecting Flask>=1.0\n", + " Downloading Flask-2.1.2-py3-none-any.whl (95 kB)\n", + "\u001b[K |████████████████████████████████| 95 kB 4.6 MB/s \n", + "\u001b[?25hCollecting Click\n", + " Downloading click-8.1.3-py3-none-any.whl (96 kB)\n", + "\u001b[K |████████████████████████████████| 96 kB 6.7 MB/s \n", + "\u001b[?25hCollecting threadpoolctl>=2.0.0\n", + " Downloading threadpoolctl-3.1.0-py3-none-any.whl (14 kB)\n", + "Collecting joblib>=1.0.0\n", + " Downloading joblib-1.1.0-py2.py3-none-any.whl (306 kB)\n", + "\u001b[K |████████████████████████████████| 306 kB 63.8 MB/s \n", + "\u001b[?25hCollecting parso<0.9.0,>=0.8.0\n", + " Downloading parso-0.8.3-py2.py3-none-any.whl (100 kB)\n", + "\u001b[K |████████████████████████████████| 100 kB 531 kB/s \n", + "\u001b[?25hCollecting wcwidth\n", + " Downloading wcwidth-0.2.5-py2.py3-none-any.whl (30 kB)\n", + "Collecting ptyprocess>=0.5\n", + " Downloading ptyprocess-0.7.0-py2.py3-none-any.whl (13 kB)\n", + "Collecting pure-eval\n", + " Downloading pure_eval-0.2.2-py3-none-any.whl (11 kB)\n", + "Collecting asttokens\n", + " Downloading asttokens-2.0.5-py2.py3-none-any.whl (20 kB)\n", + "Collecting executing\n", + " Downloading executing-0.8.3-py2.py3-none-any.whl (16 kB)\n", + "Collecting pycparser\n", + " Downloading pycparser-2.21-py2.py3-none-any.whl (118 kB)\n", + "\u001b[K |████████████████████████████████| 118 kB 63.1 MB/s \n", + "\u001b[?25hCollecting jsonref\n", + " Downloading jsonref-0.2-py3-none-any.whl (9.3 kB)\n", + "Collecting wrapt\n", + " Downloading wrapt-1.14.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (81 kB)\n", + "\u001b[K |████████████████████████████████| 81 kB 10.9 MB/s \n", + "\u001b[?25hCollecting yelp-encodings\n", + " Downloading yelp_encodings-1.0.0-py3-none-any.whl (2.4 kB)\n", + "Collecting bcrypt>=3.1.3\n", + " Downloading bcrypt-3.2.2-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl (62 kB)\n", + "\u001b[K |████████████████████████████████| 62 kB 1.1 MB/s \n", + "\u001b[?25hCollecting pynacl>=1.0.1\n", + " Downloading PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl (856 kB)\n", + "\u001b[K |████████████████████████████████| 856 kB 49.0 MB/s \n", + "\u001b[?25hCollecting anyio<5,>=3.4.0\n", + " Downloading anyio-3.6.1-py3-none-any.whl (80 kB)\n", + "\u001b[K |████████████████████████████████| 80 kB 10.5 MB/s \n", + "\u001b[?25hCollecting Jinja2>=3.0\n", + " Downloading Jinja2-3.1.2-py3-none-any.whl (133 kB)\n", + "\u001b[K |████████████████████████████████| 133 kB 62.6 MB/s \n", + "\u001b[?25hCollecting itsdangerous>=2.0\n", + " Downloading itsdangerous-2.1.2-py3-none-any.whl (15 kB)\n", + "Collecting Werkzeug>=2.0\n", + " Downloading Werkzeug-2.1.2-py3-none-any.whl (224 kB)\n", + "\u001b[K |████████████████████████████████| 224 kB 48.9 MB/s \n", + "\u001b[?25hCollecting importlib-metadata>=3.6.0; python_version < \"3.10\"\n", + " Downloading importlib_metadata-4.11.4-py3-none-any.whl (18 kB)\n", + "Collecting sniffio>=1.1\n", + " Downloading sniffio-1.2.0-py3-none-any.whl (10 kB)\n", + "Collecting MarkupSafe>=2.0\n", + " Downloading MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (25 kB)\n", + "Collecting zipp>=0.5\n", + " Downloading zipp-3.8.0-py3-none-any.whl (5.4 kB)\n", + "Building wheels for collected packages: pymatgen, fido, pint, json2html, future, pubchempy, sentinels\n", + " Building wheel for pymatgen (PEP 517) ... \u001b[?25l\u001b[?25hdone\n", + " Created wheel for pymatgen: filename=pymatgen-2022.5.26-cp38-cp38-linux_x86_64.whl size=3972372 sha256=8f662d6641293122d208901cdb93e13f1529fb33f57cdb6bae7a2a5a680aebd1\n", + " Stored in directory: /root/.cache/pip/wheels/05/65/89/dae6cc5747424bcc293753e39ffd86263f55a05e2a40c36149\n", + " Building wheel for fido (setup.py) ... \u001b[?25l\u001b[?25hdone\n", + " Created wheel for fido: filename=fido-4.2.2-py2.py3-none-any.whl size=7407 sha256=75c347f292f3a77837d735f259e5cc20b5f68335003e73bfcfbef8a2c924da22\n", + " Stored in directory: /root/.cache/pip/wheels/4f/af/da/c09b871cef0ca9d672a796650f147d4594fa9d85b172539c20\n", + " Building wheel for pint (PEP 517) ... \u001b[?25l\u001b[?25hdone\n", + " Created wheel for pint: filename=Pint-0.19.2-py3-none-any.whl size=231002 sha256=0a940d173809e1ab14de909953bf34c0eb0edca3bc7b4e1db30cc51b8473586f\n", + " Stored in directory: /root/.cache/pip/wheels/98/1d/e0/a44541f5302ac50028a3be0db9417c18092c61f25009d62145\n", + " Building wheel for json2html (setup.py) ... \u001b[?25l\u001b[?25hdone\n", + " Created wheel for json2html: filename=json2html-1.3.0-py3-none-any.whl size=7596 sha256=46c3936e2b6cef526d470fd5d728bf03bafcc60290856354b53cd3dc4a384ea5\n", + " Stored in directory: /root/.cache/pip/wheels/34/1a/a9/0d39b9e11fc97dd947ca4df7f0f0c1f4f2e25727d3c63b7739\n", + " Building wheel for future (setup.py) ... \u001b[?25l\u001b[?25hdone\n", + " Created wheel for future: filename=future-0.18.2-py3-none-any.whl size=491058 sha256=8aaad85308b1867186dc711f9b41d65bec7000bd2abde7f8b290ea7333fe7ae0\n", + " Stored in directory: /root/.cache/pip/wheels/8e/70/28/3d6ccd6e315f65f245da085482a2e1c7d14b90b30f239e2cf4\n", + " Building wheel for pubchempy (setup.py) ... \u001b[?25l\u001b[?25hdone\n", + " Created wheel for pubchempy: filename=PubChemPy-1.0.4-py3-none-any.whl size=13828 sha256=c05278965e21af34e32338561cbc95e45f2ccb0267fb5fdcb586d3677652909f\n", + " Stored in directory: /root/.cache/pip/wheels/b0/8c/ba/3b00b89931153bf5a4eaa8e73bd1b0319a879cc45175326854\n", + " Building wheel for sentinels (setup.py) ... \u001b[?25l\u001b[?25hdone\n", + " Created wheel for sentinels: filename=sentinels-1.0.0-py3-none-any.whl size=3186 sha256=9ad0ce9b59fce994007b5e49d058f5179d4b44725e72423c15599947be80e649\n", + " Stored in directory: /root/.cache/pip/wheels/52/6d/1d/f8b21b7cc5b50cba5e5744c06f71fdac7d7464cb6f35e61abf\n", + "Successfully built pymatgen fido pint json2html future pubchempy sentinels\n", + "\u001b[31mERROR: conda 4.13.0 requires ruamel_yaml_conda>=0.11.14, which is not installed.\u001b[0m\n", + "\u001b[31mERROR: matminer 0.7.8 has requirement jsonschema>=4.5.1, but you'll have jsonschema 3.2.0 which is incompatible.\u001b[0m\n", + "Installing collected packages: setuptools, mpmath, sympy, tqdm, idna, certifi, urllib3, charset-normalizer, requests, future, pymongo, pyrsistent, attrs, six, jsonschema, numpy, pytz, python-dateutil, pandas, spglib, latexcodec, PyYAML, pybtex, tabulate, palettable, networkx, monty, scipy, ruamel.yaml.clib, ruamel.yaml, tenacity, plotly, fonttools, pyparsing, cycler, pillow, kiwisolver, packaging, matplotlib, uncertainties, pymatgen, threadpoolctl, joblib, scikit-learn, matminer, typing-extensions, pydantic, inflect, pubchempy, robocrys, emmet-core, pickleshare, traitlets, backcall, parso, jedi, matplotlib-inline, wcwidth, prompt-toolkit, ptyprocess, pexpect, pure-eval, asttokens, executing, stack-data, decorator, pygments, ipython, dnspython, pyIsEmail, ujson, flatten-dict, pycparser, cffi, cryptography, pyasn1, pyasn1-modules, service-identity, monotonic, simplejson, msgpack, jsonref, swagger-spec-validator, bravado-core, wrapt, constantly, Automat, hyperlink, zope.interface, incremental, twisted, crochet, yelp-encodings, yelp-bytes, pyOpenSSL, fido, bravado, boltons, pint, filetype, requests-futures, json2html, mpcontribs-client, jmespath, botocore, s3transfer, boto3, bcrypt, pynacl, paramiko, sshtunnel, aioitertools, pydash, sniffio, anyio, starlette, fastapi, sentinels, mongomock, pyzmq, orjson, Click, MarkupSafe, Jinja2, itsdangerous, Werkzeug, zipp, importlib-metadata, Flask, mongogrant, maggma, mp-api\n", + "Successfully installed Automat-20.2.0 Click-8.1.3 Flask-2.1.2 Jinja2-3.1.2 MarkupSafe-2.1.1 PyYAML-6.0 Werkzeug-2.1.2 aioitertools-0.10.0 anyio-3.6.1 asttokens-2.0.5 attrs-21.4.0 backcall-0.2.0 bcrypt-3.2.2 boltons-21.0.0 boto3-1.24.2 botocore-1.27.2 bravado-11.0.3 bravado-core-5.17.0 certifi-2022.5.18.1 cffi-1.15.0 charset-normalizer-2.0.12 constantly-15.1.0 crochet-2.0.0 cryptography-37.0.2 cycler-0.11.0 decorator-5.1.1 dnspython-2.2.1 emmet-core-0.27.6 executing-0.8.3 fastapi-0.78.0 fido-4.2.2 filetype-1.0.13 flatten-dict-0.4.2 fonttools-4.33.3 future-0.18.2 hyperlink-21.0.0 idna-3.3 importlib-metadata-4.11.4 incremental-21.3.0 inflect-5.6.0 ipython-8.4.0 itsdangerous-2.1.2 jedi-0.18.1 jmespath-1.0.0 joblib-1.1.0 json2html-1.3.0 jsonref-0.2 jsonschema-4.4.0 kiwisolver-1.4.2 latexcodec-2.0.1 maggma-0.47.2 matminer-0.7.8 matplotlib-3.5.2 matplotlib-inline-0.1.3 mongogrant-0.3.3 mongomock-4.0.0 monotonic-1.6 monty-2022.4.26 mp-api-0.24.0 mpcontribs-client-4.2.10 mpmath-1.2.1 msgpack-1.0.4 networkx-2.8.3 numpy-1.22.4 orjson-3.7.1 packaging-21.3 palettable-3.3.0 pandas-1.4.2 paramiko-2.11.0 parso-0.8.3 pexpect-4.8.0 pickleshare-0.7.5 pillow-9.1.1 pint-0.19.2 plotly-5.8.0 prompt-toolkit-3.0.29 ptyprocess-0.7.0 pubchempy-1.0.4 pure-eval-0.2.2 pyIsEmail-1.4.0 pyOpenSSL-22.0.0 pyasn1-0.4.8 pyasn1-modules-0.2.8 pybtex-0.24.0 pycparser-2.21 pydantic-1.8.2 pydash-5.1.0 pygments-2.12.0 pymatgen-2022.5.26 pymongo-4.1.1 pynacl-1.5.0 pyparsing-3.0.9 pyrsistent-0.18.1 python-dateutil-2.8.2 pytz-2022.1 pyzmq-22.3.0 requests-2.27.1 requests-futures-1.0.0 robocrys-0.2.7 ruamel.yaml-0.17.21 ruamel.yaml.clib-0.2.6 s3transfer-0.6.0 scikit-learn-1.1.1 scipy-1.8.1 sentinels-1.0.0 service-identity-21.1.0 setuptools-62.3.2 simplejson-3.17.6 six-1.16.0 sniffio-1.2.0 spglib-1.16.5 sshtunnel-0.4.0 stack-data-0.2.0 starlette-0.19.1 swagger-spec-validator-2.7.3 sympy-1.10.1 tabulate-0.8.9 tenacity-8.0.1 threadpoolctl-3.1.0 tqdm-4.64.0 traitlets-5.2.2.post1 twisted-22.4.0 typing-extensions-4.2.0 ujson-5.3.0 uncertainties-3.1.6 urllib3-1.26.9 wcwidth-0.2.5 wrapt-1.14.1 yelp-bytes-0.3.0 yelp-encodings-1.0.0 zipp-3.8.0 zope.interface-5.4.0\n" + ] + }, + { + "output_type": "display_data", + "data": { + "application/vnd.colab-display-data+json": { + "pip_warning": { + "packages": [ + "IPython", + "OpenSSL", + "_cffi_backend", + "_openssl", + "asttokens", + "certifi", + "cryptography", + "dateutil", + "decorator", + "executing", + "idna", + "jedi", + "matplotlib_inline", + "numpy", + "pandas", + "parso", + "pexpect", + "pickleshare", + "pkg_resources", + "prompt_toolkit", + "pure_eval", + "pygments", + "pytz", + "requests", + "six", + "stack_data", + "urllib3", + "wcwidth", + "zmq" + ] + } + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n", + "Collecting mp-api\n", + " Using cached mp_api-0.24.0-py3-none-any.whl (63 kB)\n", + "Collecting maggma>=0.46.0\n", + " Using cached maggma-0.47.2-py3-none-any.whl (91 kB)\n", + "Collecting requests>=2.23.0\n", + " Using cached requests-2.27.1-py2.py3-none-any.whl (63 kB)\n", + "Collecting mpcontribs-client\n", + " Using cached mpcontribs_client-4.2.10-py3-none-any.whl (21 kB)\n", + "Processing /root/.cache/pip/wheels/05/65/89/dae6cc5747424bcc293753e39ffd86263f55a05e2a40c36149/pymatgen-2022.5.26-cp38-cp38-linux_x86_64.whl\n", + "Collecting emmet-core>=0.27.5\n", + " Using cached emmet_core-0.27.6-py3-none-any.whl (218 kB)\n", + "Collecting setuptools\n", + " Using cached setuptools-62.3.2-py3-none-any.whl (1.2 MB)\n", + "Collecting monty>=2021.3.12\n", + " Using cached monty-2022.4.26-py3-none-any.whl (65 kB)\n", + "Collecting typing-extensions>=3.7.4.1\n", + " Using cached typing_extensions-4.2.0-py3-none-any.whl (24 kB)\n", + "Collecting numpy>=1.17.3\n", + " Using cached numpy-1.22.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (16.9 MB)\n", + "Collecting msgpack>=0.5.6\n", + " Using cached msgpack-1.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (322 kB)\n", + "Collecting pydash>=4.1.0\n", + " Using cached pydash-5.1.0-py3-none-any.whl (84 kB)\n", + "Collecting jsonschema>=3.1.1\n", + " Downloading jsonschema-4.6.0-py3-none-any.whl (80 kB)\n", + "\u001b[K |████████████████████████████████| 80 kB 3.1 MB/s \n", + "\u001b[?25hCollecting orjson>=3.6.0\n", + " Using cached orjson-3.7.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (256 kB)\n", + "Collecting boto3>=1.20.41\n", + " Using cached boto3-1.24.2-py3-none-any.whl (132 kB)\n", + "Collecting mongogrant>=0.3.1\n", + " Using cached mongogrant-0.3.3-py3-none-any.whl (25 kB)\n", + "Collecting fastapi>=0.42.0\n", + " Using cached fastapi-0.78.0-py3-none-any.whl (54 kB)\n", + "Collecting pydantic>=0.32.2\n", + " Downloading pydantic-1.9.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (12.7 MB)\n", + "\u001b[K |████████████████████████████████| 12.7 MB 22.9 MB/s \n", + "\u001b[?25hCollecting aioitertools>=0.5.1\n", + " Using cached aioitertools-0.10.0-py3-none-any.whl (23 kB)\n", + "Collecting mongomock>=3.10.0\n", + " Using cached mongomock-4.0.0-py2.py3-none-any.whl (60 kB)\n", + "Collecting dnspython>=1.16.0\n", + " Using cached dnspython-2.2.1-py3-none-any.whl (269 kB)\n", + "Collecting sshtunnel>=0.1.5\n", + " Using cached sshtunnel-0.4.0-py2.py3-none-any.whl (24 kB)\n", + "Collecting pymongo>=4.0\n", + " Using cached pymongo-4.1.1-cp38-cp38-manylinux2014_x86_64.whl (498 kB)\n", + "Collecting tqdm>=4.19.6\n", + " Using cached tqdm-4.64.0-py2.py3-none-any.whl (78 kB)\n", + "Collecting pyzmq==22.3.0\n", + " Using cached pyzmq-22.3.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.1 MB)\n", + "Collecting urllib3<1.27,>=1.21.1\n", + " Using cached urllib3-1.26.9-py2.py3-none-any.whl (138 kB)\n", + "Collecting idna<4,>=2.5; python_version >= \"3\"\n", + " Using cached idna-3.3-py3-none-any.whl (61 kB)\n", + "Collecting charset-normalizer~=2.0.0; python_version >= \"3\"\n", + " Using cached charset_normalizer-2.0.12-py3-none-any.whl (39 kB)\n", + "Collecting certifi>=2017.4.17\n", + " Using cached certifi-2022.5.18.1-py3-none-any.whl (155 kB)\n", + "Processing /root/.cache/pip/wheels/4f/af/da/c09b871cef0ca9d672a796650f147d4594fa9d85b172539c20/fido-4.2.2-py2.py3-none-any.whl\n", + "Collecting requests-futures\n", + " Using cached requests_futures-1.0.0-py2.py3-none-any.whl (7.4 kB)\n", + "Collecting boltons\n", + " Using cached boltons-21.0.0-py2.py3-none-any.whl (193 kB)\n", + "Collecting flatten-dict\n", + " Using cached flatten_dict-0.4.2-py2.py3-none-any.whl (9.7 kB)\n", + "Collecting ipython\n", + " Using cached ipython-8.4.0-py3-none-any.whl (750 kB)\n", + "Collecting pandas\n", + " Using cached pandas-1.4.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.7 MB)\n", + "Collecting service-identity\n", + " Using cached service_identity-21.1.0-py2.py3-none-any.whl (12 kB)\n", + "Collecting pyIsEmail\n", + " Using cached pyIsEmail-1.4.0-py2.py3-none-any.whl (25 kB)\n", + "Collecting cryptography\n", + " Using cached cryptography-37.0.2-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.1 MB)\n", + "Collecting twisted\n", + " Using cached Twisted-22.4.0-py3-none-any.whl (3.1 MB)\n", + "Processing /root/.cache/pip/wheels/98/1d/e0/a44541f5302ac50028a3be0db9417c18092c61f25009d62145/Pint-0.19.2-py3-none-any.whl\n", + "Collecting ujson\n", + " Using cached ujson-5.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (45 kB)\n", + "Collecting plotly\n", + " Using cached plotly-5.8.0-py2.py3-none-any.whl (15.2 MB)\n", + "Collecting filetype\n", + " Using cached filetype-1.0.13-py2.py3-none-any.whl (17 kB)\n", + "Collecting swagger-spec-validator<2.7.4\n", + " Using cached swagger_spec_validator-2.7.3-py2.py3-none-any.whl (27 kB)\n", + "Collecting pyOpenSSL\n", + " Using cached pyOpenSSL-22.0.0-py2.py3-none-any.whl (55 kB)\n", + "Collecting bravado[fido]\n", + " Using cached bravado-11.0.3-py2.py3-none-any.whl (38 kB)\n", + "Processing /root/.cache/pip/wheels/34/1a/a9/0d39b9e11fc97dd947ca4df7f0f0c1f4f2e25727d3c63b7739/json2html-1.3.0-py3-none-any.whl\n", + "Collecting palettable>=3.1.1\n", + " Using cached palettable-3.3.0-py2.py3-none-any.whl (111 kB)\n", + "Collecting scipy>=1.5.0\n", + " Using cached scipy-1.8.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (41.6 MB)\n", + "Collecting matplotlib>=1.5\n", + " Using cached matplotlib-3.5.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl (11.3 MB)\n", + "Collecting spglib>=1.9.9.44\n", + " Using cached spglib-1.16.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (325 kB)\n", + "Collecting pybtex\n", + " Using cached pybtex-0.24.0-py2.py3-none-any.whl (561 kB)\n", + "Collecting ruamel.yaml>=0.17.0\n", + " Using cached ruamel.yaml-0.17.21-py3-none-any.whl (109 kB)\n", + "Collecting tabulate\n", + " Using cached tabulate-0.8.9-py3-none-any.whl (25 kB)\n", + "Collecting uncertainties>=3.1.4\n", + " Using cached uncertainties-3.1.6-py2.py3-none-any.whl (98 kB)\n", + "Collecting sympy\n", + " Using cached sympy-1.10.1-py3-none-any.whl (6.4 MB)\n", + "Collecting networkx>=2.2\n", + " Using cached networkx-2.8.3-py3-none-any.whl (2.0 MB)\n", + "Collecting robocrys>=0.2.7\n", + " Using cached robocrys-0.2.7-py3-none-any.whl (3.8 MB)\n", + "Collecting matminer>=0.7.3\n", + " Using cached matminer-0.7.8-py3-none-any.whl (1.4 MB)\n", + "Collecting importlib-resources>=1.4.0; python_version < \"3.9\"\n", + " Downloading importlib_resources-5.7.1-py3-none-any.whl (28 kB)\n", + "Collecting attrs>=17.4.0\n", + " Using cached attrs-21.4.0-py2.py3-none-any.whl (60 kB)\n", + "Collecting pyrsistent!=0.17.0,!=0.17.1,!=0.17.2,>=0.14.0\n", + " Using cached pyrsistent-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (119 kB)\n", + "Collecting botocore<1.28.0,>=1.27.2\n", + " Using cached botocore-1.27.2-py3-none-any.whl (8.8 MB)\n", + "Collecting jmespath<2.0.0,>=0.7.1\n", + " Using cached jmespath-1.0.0-py3-none-any.whl (23 kB)\n", + "Collecting s3transfer<0.7.0,>=0.6.0\n", + " Using cached s3transfer-0.6.0-py3-none-any.whl (79 kB)\n", + "Collecting Click\n", + " Using cached click-8.1.3-py3-none-any.whl (96 kB)\n", + "Collecting Flask>=1.0\n", + " Using cached Flask-2.1.2-py3-none-any.whl (95 kB)\n", + "Collecting starlette==0.19.1\n", + " Using cached starlette-0.19.1-py3-none-any.whl (63 kB)\n", + "Collecting packaging\n", + " Using cached packaging-21.3-py3-none-any.whl (40 kB)\n", + "Processing /root/.cache/pip/wheels/52/6d/1d/f8b21b7cc5b50cba5e5744c06f71fdac7d7464cb6f35e61abf/sentinels-1.0.0-py3-none-any.whl\n", + "Collecting six\n", + " Using cached six-1.16.0-py2.py3-none-any.whl (11 kB)\n", + "Collecting paramiko>=2.7.2\n", + " Using cached paramiko-2.11.0-py2.py3-none-any.whl (212 kB)\n", + "Collecting yelp-bytes\n", + " Using cached yelp_bytes-0.3.0-py2.py3-none-any.whl (2.9 kB)\n", + "Collecting crochet\n", + " Using cached crochet-2.0.0-py3-none-any.whl (31 kB)\n", + "Collecting stack-data\n", + " Using cached stack_data-0.2.0-py3-none-any.whl (21 kB)\n", + "Collecting backcall\n", + " Using cached backcall-0.2.0-py2.py3-none-any.whl (11 kB)\n", + "Collecting pygments>=2.4.0\n", + " Using cached Pygments-2.12.0-py3-none-any.whl (1.1 MB)\n", + "Collecting jedi>=0.16\n", + " Using cached jedi-0.18.1-py2.py3-none-any.whl (1.6 MB)\n", + "Collecting pexpect>4.3; sys_platform != \"win32\"\n", + " Using cached pexpect-4.8.0-py2.py3-none-any.whl (59 kB)\n", + "Collecting decorator\n", + " Using cached decorator-5.1.1-py3-none-any.whl (9.1 kB)\n", + "Collecting pickleshare\n", + " Using cached pickleshare-0.7.5-py2.py3-none-any.whl (6.9 kB)\n", + "Collecting prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0\n", + " Using cached prompt_toolkit-3.0.29-py3-none-any.whl (381 kB)\n", + "Collecting traitlets>=5\n", + " Using cached traitlets-5.2.2.post1-py3-none-any.whl (106 kB)\n", + "Collecting matplotlib-inline\n", + " Using cached matplotlib_inline-0.1.3-py3-none-any.whl (8.2 kB)\n", + "Collecting python-dateutil>=2.8.1\n", + " Using cached python_dateutil-2.8.2-py2.py3-none-any.whl (247 kB)\n", + "Collecting pytz>=2020.1\n", + " Using cached pytz-2022.1-py2.py3-none-any.whl (503 kB)\n", + "Collecting pyasn1-modules\n", + " Using cached pyasn1_modules-0.2.8-py2.py3-none-any.whl (155 kB)\n", + "Collecting pyasn1\n", + " Using cached pyasn1-0.4.8-py2.py3-none-any.whl (77 kB)\n", + "Collecting cffi>=1.12\n", + " Using cached cffi-1.15.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (446 kB)\n", + "Collecting constantly>=15.1\n", + " Using cached constantly-15.1.0-py2.py3-none-any.whl (7.9 kB)\n", + "Collecting zope.interface>=4.4.2\n", + " Using cached zope.interface-5.4.0-cp38-cp38-manylinux2010_x86_64.whl (259 kB)\n", + "Collecting hyperlink>=17.1.1\n", + " Using cached hyperlink-21.0.0-py2.py3-none-any.whl (74 kB)\n", + "Collecting incremental>=21.3.0\n", + " Using cached incremental-21.3.0-py2.py3-none-any.whl (15 kB)\n", + "Collecting Automat>=0.8.0\n", + " Using cached Automat-20.2.0-py2.py3-none-any.whl (31 kB)\n", + "Collecting tenacity>=6.2.0\n", + " Using cached tenacity-8.0.1-py3-none-any.whl (24 kB)\n", + "Collecting pyyaml\n", + " Using cached PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (701 kB)\n", + "Collecting monotonic\n", + " Using cached monotonic-1.6-py2.py3-none-any.whl (8.2 kB)\n", + "Collecting bravado-core>=5.16.1\n", + " Using cached bravado_core-5.17.0-py2.py3-none-any.whl (67 kB)\n", + "Collecting simplejson\n", + " Using cached simplejson-3.17.6-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (139 kB)\n", + "Collecting pillow>=6.2.0\n", + " Using cached Pillow-9.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.1 MB)\n", + "Collecting pyparsing>=2.2.1\n", + " Using cached pyparsing-3.0.9-py3-none-any.whl (98 kB)\n", + "Collecting cycler>=0.10\n", + " Using cached cycler-0.11.0-py3-none-any.whl (6.4 kB)\n", + "Collecting fonttools>=4.22.0\n", + " Using cached fonttools-4.33.3-py3-none-any.whl (930 kB)\n", + "Collecting kiwisolver>=1.0.1\n", + " Using cached kiwisolver-1.4.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl (1.2 MB)\n", + "Collecting latexcodec>=1.0.4\n", + " Using cached latexcodec-2.0.1-py2.py3-none-any.whl (18 kB)\n", + "Collecting ruamel.yaml.clib>=0.2.6; platform_python_implementation == \"CPython\" and python_version < \"3.11\"\n", + " Using cached ruamel.yaml.clib-0.2.6-cp38-cp38-manylinux1_x86_64.whl (570 kB)\n", + "Processing /root/.cache/pip/wheels/8e/70/28/3d6ccd6e315f65f245da085482a2e1c7d14b90b30f239e2cf4/future-0.18.2-py3-none-any.whl\n", + "Collecting mpmath>=0.19\n", + " Using cached mpmath-1.2.1-py3-none-any.whl (532 kB)\n", + "Collecting inflect\n", + " Using cached inflect-5.6.0-py3-none-any.whl (33 kB)\n", + "Processing /root/.cache/pip/wheels/b0/8c/ba/3b00b89931153bf5a4eaa8e73bd1b0319a879cc45175326854/PubChemPy-1.0.4-py3-none-any.whl\n", + "Collecting scikit-learn>=1.1.0\n", + " Using cached scikit_learn-1.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (31.2 MB)\n", + "Collecting zipp>=3.1.0; python_version < \"3.10\"\n", + " Using cached zipp-3.8.0-py3-none-any.whl (5.4 kB)\n", + "Collecting importlib-metadata>=3.6.0; python_version < \"3.10\"\n", + " Using cached importlib_metadata-4.11.4-py3-none-any.whl (18 kB)\n", + "Collecting itsdangerous>=2.0\n", + " Using cached itsdangerous-2.1.2-py3-none-any.whl (15 kB)\n", + "Collecting Werkzeug>=2.0\n", + " Using cached Werkzeug-2.1.2-py3-none-any.whl (224 kB)\n", + "Collecting Jinja2>=3.0\n", + " Using cached Jinja2-3.1.2-py3-none-any.whl (133 kB)\n", + "Collecting anyio<5,>=3.4.0\n", + " Using cached anyio-3.6.1-py3-none-any.whl (80 kB)\n", + "Collecting bcrypt>=3.1.3\n", + " Using cached bcrypt-3.2.2-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl (62 kB)\n", + "Collecting pynacl>=1.0.1\n", + " Using cached PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl (856 kB)\n", + "Collecting yelp-encodings\n", + " Using cached yelp_encodings-1.0.0-py3-none-any.whl (2.4 kB)\n", + "Collecting wrapt\n", + " Using cached wrapt-1.14.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (81 kB)\n", + "Collecting executing\n", + " Using cached executing-0.8.3-py2.py3-none-any.whl (16 kB)\n", + "Collecting asttokens\n", + " Using cached asttokens-2.0.5-py2.py3-none-any.whl (20 kB)\n", + "Collecting pure-eval\n", + " Using cached pure_eval-0.2.2-py3-none-any.whl (11 kB)\n", + "Collecting parso<0.9.0,>=0.8.0\n", + " Using cached parso-0.8.3-py2.py3-none-any.whl (100 kB)\n", + "Collecting ptyprocess>=0.5\n", + " Using cached ptyprocess-0.7.0-py2.py3-none-any.whl (13 kB)\n", + "Collecting wcwidth\n", + " Using cached wcwidth-0.2.5-py2.py3-none-any.whl (30 kB)\n", + "Collecting pycparser\n", + " Using cached pycparser-2.21-py2.py3-none-any.whl (118 kB)\n", + "Collecting jsonref\n", + " Using cached jsonref-0.2-py3-none-any.whl (9.3 kB)\n", + "Collecting joblib>=1.0.0\n", + " Using cached joblib-1.1.0-py2.py3-none-any.whl (306 kB)\n", + "Collecting threadpoolctl>=2.0.0\n", + " Using cached threadpoolctl-3.1.0-py3-none-any.whl (14 kB)\n", + "Collecting MarkupSafe>=2.0\n", + " Using cached MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (25 kB)\n", + "Collecting sniffio>=1.1\n", + " Using cached sniffio-1.2.0-py3-none-any.whl (10 kB)\n", + "\u001b[31mERROR: conda 4.13.0 requires ruamel_yaml_conda>=0.11.14, which is not installed.\u001b[0m\n", + "\u001b[31mERROR: mpcontribs-client 4.2.10 has requirement jsonschema<4.0, but you'll have jsonschema 4.6.0 which is incompatible.\u001b[0m\n", + "\u001b[31mERROR: emmet-core 0.27.6 has requirement pydantic==1.8.2, but you'll have pydantic 1.9.1 which is incompatible.\u001b[0m\n", + "Installing collected packages: numpy, msgpack, pydash, zipp, importlib-resources, attrs, pyrsistent, jsonschema, orjson, jmespath, urllib3, six, python-dateutil, botocore, s3transfer, boto3, idna, charset-normalizer, certifi, requests, Click, pymongo, importlib-metadata, itsdangerous, Werkzeug, MarkupSafe, Jinja2, Flask, mongogrant, typing-extensions, pydantic, sniffio, anyio, starlette, fastapi, aioitertools, pyparsing, packaging, sentinels, mongomock, dnspython, pycparser, cffi, cryptography, bcrypt, pynacl, paramiko, sshtunnel, setuptools, monty, tqdm, pyzmq, maggma, yelp-encodings, yelp-bytes, constantly, zope.interface, hyperlink, incremental, Automat, twisted, wrapt, crochet, pyasn1, pyasn1-modules, service-identity, pyOpenSSL, fido, requests-futures, boltons, flatten-dict, executing, asttokens, pure-eval, stack-data, backcall, pygments, parso, jedi, ptyprocess, pexpect, decorator, pickleshare, wcwidth, prompt-toolkit, traitlets, matplotlib-inline, ipython, pytz, pandas, pyIsEmail, pint, ujson, tenacity, plotly, filetype, pyyaml, swagger-spec-validator, monotonic, jsonref, simplejson, bravado-core, bravado, json2html, palettable, scipy, pillow, cycler, fonttools, kiwisolver, matplotlib, spglib, latexcodec, pybtex, ruamel.yaml.clib, ruamel.yaml, tabulate, future, uncertainties, mpmath, sympy, networkx, pymatgen, mpcontribs-client, joblib, threadpoolctl, scikit-learn, matminer, inflect, pubchempy, robocrys, emmet-core, mp-api\n", + "Successfully installed Automat-20.2.0 Click-8.1.3 Flask-2.1.2 Jinja2-3.1.2 MarkupSafe-2.1.1 Werkzeug-2.1.2 aioitertools-0.10.0 anyio-3.6.1 asttokens-2.0.5 attrs-21.4.0 backcall-0.2.0 bcrypt-3.2.2 boltons-21.0.0 boto3-1.24.2 botocore-1.27.2 bravado-11.0.3 bravado-core-5.17.0 certifi-2022.5.18.1 cffi-1.15.0 charset-normalizer-2.0.12 constantly-15.1.0 crochet-2.0.0 cryptography-37.0.2 cycler-0.11.0 decorator-5.1.1 dnspython-2.2.1 emmet-core-0.27.6 executing-0.8.3 fastapi-0.78.0 fido-4.2.2 filetype-1.0.13 flatten-dict-0.4.2 fonttools-4.33.3 future-0.18.2 hyperlink-21.0.0 idna-3.3 importlib-metadata-4.11.4 importlib-resources-5.7.1 incremental-21.3.0 inflect-5.6.0 ipython-8.4.0 itsdangerous-2.1.2 jedi-0.18.1 jmespath-1.0.0 joblib-1.1.0 json2html-1.3.0 jsonref-0.2 jsonschema-4.6.0 kiwisolver-1.4.2 latexcodec-2.0.1 maggma-0.47.2 matminer-0.7.8 matplotlib-3.5.2 matplotlib-inline-0.1.3 mongogrant-0.3.3 mongomock-4.0.0 monotonic-1.6 monty-2022.4.26 mp-api-0.24.0 mpcontribs-client-4.2.10 mpmath-1.2.1 msgpack-1.0.4 networkx-2.8.3 numpy-1.22.4 orjson-3.7.1 packaging-21.3 palettable-3.3.0 pandas-1.4.2 paramiko-2.11.0 parso-0.8.3 pexpect-4.8.0 pickleshare-0.7.5 pillow-9.1.1 pint-0.19.2 plotly-5.8.0 prompt-toolkit-3.0.29 ptyprocess-0.7.0 pubchempy-1.0.4 pure-eval-0.2.2 pyIsEmail-1.4.0 pyOpenSSL-22.0.0 pyasn1-0.4.8 pyasn1-modules-0.2.8 pybtex-0.24.0 pycparser-2.21 pydantic-1.9.1 pydash-5.1.0 pygments-2.12.0 pymatgen-2022.5.26 pymongo-4.1.1 pynacl-1.5.0 pyparsing-3.0.9 pyrsistent-0.18.1 python-dateutil-2.8.2 pytz-2022.1 pyyaml-6.0 pyzmq-22.3.0 requests-2.27.1 requests-futures-1.0.0 robocrys-0.2.7 ruamel.yaml-0.17.21 ruamel.yaml.clib-0.2.6 s3transfer-0.6.0 scikit-learn-1.1.1 scipy-1.8.1 sentinels-1.0.0 service-identity-21.1.0 setuptools-62.3.2 simplejson-3.17.6 six-1.16.0 sniffio-1.2.0 spglib-1.16.5 sshtunnel-0.4.0 stack-data-0.2.0 starlette-0.19.1 swagger-spec-validator-2.7.3 sympy-1.10.1 tabulate-0.8.9 tenacity-8.0.1 threadpoolctl-3.1.0 tqdm-4.64.0 traitlets-5.2.2.post1 twisted-22.4.0 typing-extensions-4.2.0 ujson-5.3.0 uncertainties-3.1.6 urllib3-1.26.9 wcwidth-0.2.5 wrapt-1.14.1 yelp-bytes-0.3.0 yelp-encodings-1.0.0 zipp-3.8.0 zope.interface-5.4.0\n" + ] + }, + { + "output_type": "display_data", + "data": { + "application/vnd.colab-display-data+json": { + "pip_warning": { + "packages": [ + "IPython", + "OpenSSL", + "_cffi_backend", + "_openssl", + "asttokens", + "certifi", + "cryptography", + "dateutil", + "decorator", + "executing", + "idna", + "jedi", + "matplotlib_inline", + "numpy", + "pandas", + "parso", + "pexpect", + "pickleshare", + "pkg_resources", + "prompt_toolkit", + "pure_eval", + "pygments", + "pytz", + "requests", + "six", + "stack_data", + "urllib3", + "wcwidth", + "zmq" + ] + } + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n", + "Collecting mp-api\n", + " Using cached mp_api-0.24.0-py3-none-any.whl (63 kB)\n", + "Collecting mpcontribs-client\n", + " Using cached mpcontribs_client-4.2.10-py3-none-any.whl (21 kB)\n", + "Collecting maggma>=0.46.0\n", + " Using cached maggma-0.47.2-py3-none-any.whl (91 kB)\n", + "Collecting monty>=2021.3.12\n", + " Using cached monty-2022.4.26-py3-none-any.whl (65 kB)\n", + "Collecting setuptools\n", + " Using cached setuptools-62.3.2-py3-none-any.whl (1.2 MB)\n", + "Collecting requests>=2.23.0\n", + " Using cached requests-2.27.1-py2.py3-none-any.whl (63 kB)\n", + "Collecting emmet-core>=0.27.5\n", + " Using cached emmet_core-0.27.6-py3-none-any.whl (218 kB)\n", + "Collecting typing-extensions>=3.7.4.1\n", + " Using cached typing_extensions-4.2.0-py3-none-any.whl (24 kB)\n", + "Processing /root/.cache/pip/wheels/05/65/89/dae6cc5747424bcc293753e39ffd86263f55a05e2a40c36149/pymatgen-2022.5.26-cp38-cp38-linux_x86_64.whl\n", + "Collecting swagger-spec-validator<2.7.4\n", + " Using cached swagger_spec_validator-2.7.3-py2.py3-none-any.whl (27 kB)\n", + "Collecting twisted\n", + " Using cached Twisted-22.4.0-py3-none-any.whl (3.1 MB)\n", + "Collecting cryptography\n", + " Using cached cryptography-37.0.2-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.1 MB)\n", + "Processing /root/.cache/pip/wheels/4f/af/da/c09b871cef0ca9d672a796650f147d4594fa9d85b172539c20/fido-4.2.2-py2.py3-none-any.whl\n", + "Collecting flatten-dict\n", + " Using cached flatten_dict-0.4.2-py2.py3-none-any.whl (9.7 kB)\n", + "Collecting pyOpenSSL\n", + " Using cached pyOpenSSL-22.0.0-py2.py3-none-any.whl (55 kB)\n", + "Collecting requests-futures\n", + " Using cached requests_futures-1.0.0-py2.py3-none-any.whl (7.4 kB)\n", + "Collecting ujson\n", + " Using cached ujson-5.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (45 kB)\n", + "Collecting bravado[fido]\n", + " Using cached bravado-11.0.3-py2.py3-none-any.whl (38 kB)\n", + "Processing /root/.cache/pip/wheels/34/1a/a9/0d39b9e11fc97dd947ca4df7f0f0c1f4f2e25727d3c63b7739/json2html-1.3.0-py3-none-any.whl\n", + "Collecting pyIsEmail\n", + " Using cached pyIsEmail-1.4.0-py2.py3-none-any.whl (25 kB)\n", + "Collecting jsonschema<4.0\n", + " Using cached jsonschema-3.2.0-py2.py3-none-any.whl (56 kB)\n", + "Collecting filetype\n", + " Using cached filetype-1.0.13-py2.py3-none-any.whl (17 kB)\n", + "Collecting plotly\n", + " Using cached plotly-5.8.0-py2.py3-none-any.whl (15.2 MB)\n", + "Collecting ipython\n", + " Using cached ipython-8.4.0-py3-none-any.whl (750 kB)\n", + "Collecting pandas\n", + " Using cached pandas-1.4.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.7 MB)\n", + "Collecting pymongo\n", + " Using cached pymongo-4.1.1-cp38-cp38-manylinux2014_x86_64.whl (498 kB)\n", + "Collecting boltons\n", + " Using cached boltons-21.0.0-py2.py3-none-any.whl (193 kB)\n", + "Collecting service-identity\n", + " Using cached service_identity-21.1.0-py2.py3-none-any.whl (12 kB)\n", + "Collecting tqdm\n", + " Using cached tqdm-4.64.0-py2.py3-none-any.whl (78 kB)\n", + "Processing /root/.cache/pip/wheels/98/1d/e0/a44541f5302ac50028a3be0db9417c18092c61f25009d62145/Pint-0.19.2-py3-none-any.whl\n", + "Collecting pyzmq==22.3.0\n", + " Using cached pyzmq-22.3.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.1 MB)\n", + "Collecting orjson>=3.6.0\n", + " Using cached orjson-3.7.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (256 kB)\n", + "Collecting msgpack>=0.5.6\n", + " Using cached msgpack-1.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (322 kB)\n", + "Collecting pydash>=4.1.0\n", + " Using cached pydash-5.1.0-py3-none-any.whl (84 kB)\n", + "Collecting numpy>=1.17.3\n", + " Using cached numpy-1.22.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (16.9 MB)\n", + "Collecting pydantic>=0.32.2\n", + " Using cached pydantic-1.9.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (12.7 MB)\n", + "Collecting mongomock>=3.10.0\n", + " Using cached mongomock-4.0.0-py2.py3-none-any.whl (60 kB)\n", + "Collecting fastapi>=0.42.0\n", + " Using cached fastapi-0.78.0-py3-none-any.whl (54 kB)\n", + "Collecting aioitertools>=0.5.1\n", + " Using cached aioitertools-0.10.0-py3-none-any.whl (23 kB)\n", + "Collecting dnspython>=1.16.0\n", + " Using cached dnspython-2.2.1-py3-none-any.whl (269 kB)\n", + "Collecting sshtunnel>=0.1.5\n", + " Using cached sshtunnel-0.4.0-py2.py3-none-any.whl (24 kB)\n", + "Collecting mongogrant>=0.3.1\n", + " Using cached mongogrant-0.3.3-py3-none-any.whl (25 kB)\n", + "Collecting boto3>=1.20.41\n", + " Using cached boto3-1.24.2-py3-none-any.whl (132 kB)\n", + "Collecting certifi>=2017.4.17\n", + " Using cached certifi-2022.5.18.1-py3-none-any.whl (155 kB)\n", + "Collecting urllib3<1.27,>=1.21.1\n", + " Using cached urllib3-1.26.9-py2.py3-none-any.whl (138 kB)\n", + "Collecting charset-normalizer~=2.0.0; python_version >= \"3\"\n", + " Using cached charset_normalizer-2.0.12-py3-none-any.whl (39 kB)\n", + "Collecting idna<4,>=2.5; python_version >= \"3\"\n", + " Using cached idna-3.3-py3-none-any.whl (61 kB)\n", + "Collecting matminer>=0.7.3\n", + " Using cached matminer-0.7.8-py3-none-any.whl (1.4 MB)\n", + "Collecting robocrys>=0.2.7\n", + " Using cached robocrys-0.2.7-py3-none-any.whl (3.8 MB)\n", + "Collecting pybtex~=0.24\n", + " Using cached pybtex-0.24.0-py2.py3-none-any.whl (561 kB)\n", + "Collecting scipy>=1.5.0\n", + " Using cached scipy-1.8.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (41.6 MB)\n", + "Collecting tabulate\n", + " Using cached tabulate-0.8.9-py3-none-any.whl (25 kB)\n", + "Collecting networkx>=2.2\n", + " Using cached networkx-2.8.3-py3-none-any.whl (2.0 MB)\n", + "Collecting matplotlib>=1.5\n", + " Using cached matplotlib-3.5.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl (11.3 MB)\n", + "Collecting uncertainties>=3.1.4\n", + " Using cached uncertainties-3.1.6-py2.py3-none-any.whl (98 kB)\n", + "Collecting palettable>=3.1.1\n", + " Using cached palettable-3.3.0-py2.py3-none-any.whl (111 kB)\n", + "Collecting sympy\n", + " Using cached sympy-1.10.1-py3-none-any.whl (6.4 MB)\n", + "Collecting spglib>=1.9.9.44\n", + " Using cached spglib-1.16.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (325 kB)\n", + "Collecting ruamel.yaml>=0.17.0\n", + " Using cached ruamel.yaml-0.17.21-py3-none-any.whl (109 kB)\n", + "Collecting six\n", + " Using cached six-1.16.0-py2.py3-none-any.whl (11 kB)\n", + "Collecting pyyaml\n", + " Using cached PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (701 kB)\n", + "Collecting zope.interface>=4.4.2\n", + " Using cached zope.interface-5.4.0-cp38-cp38-manylinux2010_x86_64.whl (259 kB)\n", + "Collecting Automat>=0.8.0\n", + " Using cached Automat-20.2.0-py2.py3-none-any.whl (31 kB)\n", + "Collecting incremental>=21.3.0\n", + " Using cached incremental-21.3.0-py2.py3-none-any.whl (15 kB)\n", + "Collecting constantly>=15.1\n", + " Using cached constantly-15.1.0-py2.py3-none-any.whl (7.9 kB)\n", + "Collecting hyperlink>=17.1.1\n", + " Using cached hyperlink-21.0.0-py2.py3-none-any.whl (74 kB)\n", + "Collecting attrs>=19.2.0\n", + " Using cached attrs-21.4.0-py2.py3-none-any.whl (60 kB)\n", + "Collecting cffi>=1.12\n", + " Using cached cffi-1.15.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (446 kB)\n", + "Collecting crochet\n", + " Using cached crochet-2.0.0-py3-none-any.whl (31 kB)\n", + "Collecting yelp-bytes\n", + " Using cached yelp_bytes-0.3.0-py2.py3-none-any.whl (2.9 kB)\n", + "Collecting monotonic\n", + " Using cached monotonic-1.6-py2.py3-none-any.whl (8.2 kB)\n", + "Collecting bravado-core>=5.16.1\n", + " Using cached bravado_core-5.17.0-py2.py3-none-any.whl (67 kB)\n", + "Collecting simplejson\n", + " Using cached simplejson-3.17.6-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (139 kB)\n", + "Collecting python-dateutil\n", + " Using cached python_dateutil-2.8.2-py2.py3-none-any.whl (247 kB)\n", + "Collecting pyrsistent>=0.14.0\n", + " Using cached pyrsistent-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (119 kB)\n", + "Collecting tenacity>=6.2.0\n", + " Using cached tenacity-8.0.1-py3-none-any.whl (24 kB)\n", + "Collecting decorator\n", + " Using cached decorator-5.1.1-py3-none-any.whl (9.1 kB)\n", + "Collecting pickleshare\n", + " Using cached pickleshare-0.7.5-py2.py3-none-any.whl (6.9 kB)\n", + "Collecting pygments>=2.4.0\n", + " Using cached Pygments-2.12.0-py3-none-any.whl (1.1 MB)\n", + "Collecting matplotlib-inline\n", + " Using cached matplotlib_inline-0.1.3-py3-none-any.whl (8.2 kB)\n", + "Collecting backcall\n", + " Using cached backcall-0.2.0-py2.py3-none-any.whl (11 kB)\n", + "Collecting traitlets>=5\n", + " Using cached traitlets-5.2.2.post1-py3-none-any.whl (106 kB)\n", + "Collecting pexpect>4.3; sys_platform != \"win32\"\n", + " Using cached pexpect-4.8.0-py2.py3-none-any.whl (59 kB)\n", + "Collecting jedi>=0.16\n", + " Using cached jedi-0.18.1-py2.py3-none-any.whl (1.6 MB)\n", + "Collecting prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0\n", + " Using cached prompt_toolkit-3.0.29-py3-none-any.whl (381 kB)\n", + "Collecting stack-data\n", + " Using cached stack_data-0.2.0-py3-none-any.whl (21 kB)\n", + "Collecting pytz>=2020.1\n", + " Using cached pytz-2022.1-py2.py3-none-any.whl (503 kB)\n", + "Collecting pyasn1-modules\n", + " Using cached pyasn1_modules-0.2.8-py2.py3-none-any.whl (155 kB)\n", + "Collecting pyasn1\n", + " Using cached pyasn1-0.4.8-py2.py3-none-any.whl (77 kB)\n", + "Processing /root/.cache/pip/wheels/52/6d/1d/f8b21b7cc5b50cba5e5744c06f71fdac7d7464cb6f35e61abf/sentinels-1.0.0-py3-none-any.whl\n", + "Collecting packaging\n", + " Using cached packaging-21.3-py3-none-any.whl (40 kB)\n", + "Collecting starlette==0.19.1\n", + " Using cached starlette-0.19.1-py3-none-any.whl (63 kB)\n", + "Collecting paramiko>=2.7.2\n", + " Using cached paramiko-2.11.0-py2.py3-none-any.whl (212 kB)\n", + "Collecting Click\n", + " Using cached click-8.1.3-py3-none-any.whl (96 kB)\n", + "Collecting Flask>=1.0\n", + " Using cached Flask-2.1.2-py3-none-any.whl (95 kB)\n", + "Collecting jmespath<2.0.0,>=0.7.1\n", + " Using cached jmespath-1.0.0-py3-none-any.whl (23 kB)\n", + "Collecting botocore<1.28.0,>=1.27.2\n", + " Using cached botocore-1.27.2-py3-none-any.whl (8.8 MB)\n", + "Collecting s3transfer<0.7.0,>=0.6.0\n", + " Using cached s3transfer-0.6.0-py3-none-any.whl (79 kB)\n", + "Processing /root/.cache/pip/wheels/8e/70/28/3d6ccd6e315f65f245da085482a2e1c7d14b90b30f239e2cf4/future-0.18.2-py3-none-any.whl\n", + "Collecting scikit-learn>=1.1.0\n", + " Using cached scikit_learn-1.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (31.2 MB)\n", + "Collecting inflect\n", + " Using cached inflect-5.6.0-py3-none-any.whl (33 kB)\n", + "Processing /root/.cache/pip/wheels/b0/8c/ba/3b00b89931153bf5a4eaa8e73bd1b0319a879cc45175326854/PubChemPy-1.0.4-py3-none-any.whl\n", + "Collecting latexcodec>=1.0.4\n", + " Using cached latexcodec-2.0.1-py2.py3-none-any.whl (18 kB)\n", + "Collecting cycler>=0.10\n", + " Using cached cycler-0.11.0-py3-none-any.whl (6.4 kB)\n", + "Collecting pillow>=6.2.0\n", + " Using cached Pillow-9.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.1 MB)\n", + "Collecting pyparsing>=2.2.1\n", + " Using cached pyparsing-3.0.9-py3-none-any.whl (98 kB)\n", + "Collecting kiwisolver>=1.0.1\n", + " Using cached kiwisolver-1.4.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl (1.2 MB)\n", + "Collecting fonttools>=4.22.0\n", + " Using cached fonttools-4.33.3-py3-none-any.whl (930 kB)\n", + "Collecting mpmath>=0.19\n", + " Using cached mpmath-1.2.1-py3-none-any.whl (532 kB)\n", + "Collecting ruamel.yaml.clib>=0.2.6; platform_python_implementation == \"CPython\" and python_version < \"3.11\"\n", + " Using cached ruamel.yaml.clib-0.2.6-cp38-cp38-manylinux1_x86_64.whl (570 kB)\n", + "Collecting pycparser\n", + " Using cached pycparser-2.21-py2.py3-none-any.whl (118 kB)\n", + "Collecting wrapt\n", + " Using cached wrapt-1.14.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (81 kB)\n", + "Collecting yelp-encodings\n", + " Using cached yelp_encodings-1.0.0-py3-none-any.whl (2.4 kB)\n", + "Collecting jsonref\n", + " Using cached jsonref-0.2-py3-none-any.whl (9.3 kB)\n", + "Collecting ptyprocess>=0.5\n", + " Using cached ptyprocess-0.7.0-py2.py3-none-any.whl (13 kB)\n", + "Collecting parso<0.9.0,>=0.8.0\n", + " Using cached parso-0.8.3-py2.py3-none-any.whl (100 kB)\n", + "Collecting wcwidth\n", + " Using cached wcwidth-0.2.5-py2.py3-none-any.whl (30 kB)\n", + "Collecting executing\n", + " Using cached executing-0.8.3-py2.py3-none-any.whl (16 kB)\n", + "Collecting pure-eval\n", + " Using cached pure_eval-0.2.2-py3-none-any.whl (11 kB)\n", + "Collecting asttokens\n", + " Using cached asttokens-2.0.5-py2.py3-none-any.whl (20 kB)\n", + "Collecting anyio<5,>=3.4.0\n", + " Using cached anyio-3.6.1-py3-none-any.whl (80 kB)\n", + "Collecting pynacl>=1.0.1\n", + " Using cached PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl (856 kB)\n", + "Collecting bcrypt>=3.1.3\n", + " Using cached bcrypt-3.2.2-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl (62 kB)\n", + "Collecting Werkzeug>=2.0\n", + " Using cached Werkzeug-2.1.2-py3-none-any.whl (224 kB)\n", + "Collecting Jinja2>=3.0\n", + " Using cached Jinja2-3.1.2-py3-none-any.whl (133 kB)\n", + "Collecting importlib-metadata>=3.6.0; python_version < \"3.10\"\n", + " Using cached importlib_metadata-4.11.4-py3-none-any.whl (18 kB)\n", + "Collecting itsdangerous>=2.0\n", + " Using cached itsdangerous-2.1.2-py3-none-any.whl (15 kB)\n", + "Collecting threadpoolctl>=2.0.0\n", + " Using cached threadpoolctl-3.1.0-py3-none-any.whl (14 kB)\n", + "Collecting joblib>=1.0.0\n", + " Using cached joblib-1.1.0-py2.py3-none-any.whl (306 kB)\n", + "Collecting sniffio>=1.1\n", + " Using cached sniffio-1.2.0-py3-none-any.whl (10 kB)\n", + "Collecting MarkupSafe>=2.0\n", + " Using cached MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (25 kB)\n", + "Collecting zipp>=0.5\n", + " Using cached zipp-3.8.0-py3-none-any.whl (5.4 kB)\n", + "\u001b[31mERROR: conda 4.13.0 requires ruamel_yaml_conda>=0.11.14, which is not installed.\u001b[0m\n", + "\u001b[31mERROR: matminer 0.7.8 has requirement jsonschema>=4.5.1, but you'll have jsonschema 3.2.0 which is incompatible.\u001b[0m\n", + "\u001b[31mERROR: emmet-core 0.27.6 has requirement pydantic==1.8.2, but you'll have pydantic 1.9.1 which is incompatible.\u001b[0m\n", + "Installing collected packages: six, pyyaml, pyrsistent, setuptools, attrs, jsonschema, swagger-spec-validator, zope.interface, Automat, incremental, typing-extensions, constantly, idna, hyperlink, twisted, pycparser, cffi, cryptography, wrapt, crochet, yelp-encodings, yelp-bytes, pyOpenSSL, pyasn1, pyasn1-modules, service-identity, fido, flatten-dict, numpy, scipy, tabulate, networkx, python-dateutil, pytz, pandas, cycler, pillow, pyparsing, packaging, kiwisolver, fonttools, matplotlib, latexcodec, pybtex, tenacity, plotly, monty, future, uncertainties, palettable, mpmath, sympy, spglib, tqdm, ruamel.yaml.clib, ruamel.yaml, certifi, urllib3, charset-normalizer, requests, pymatgen, requests-futures, ujson, monotonic, jsonref, simplejson, msgpack, bravado-core, bravado, json2html, dnspython, pyIsEmail, filetype, decorator, pickleshare, pygments, traitlets, matplotlib-inline, backcall, ptyprocess, pexpect, parso, jedi, wcwidth, prompt-toolkit, executing, pure-eval, asttokens, stack-data, ipython, pymongo, boltons, pint, mpcontribs-client, pyzmq, orjson, pydash, pydantic, sentinels, mongomock, sniffio, anyio, starlette, fastapi, aioitertools, pynacl, bcrypt, paramiko, sshtunnel, Click, Werkzeug, MarkupSafe, Jinja2, zipp, importlib-metadata, itsdangerous, Flask, mongogrant, jmespath, botocore, s3transfer, boto3, maggma, threadpoolctl, joblib, scikit-learn, matminer, inflect, pubchempy, robocrys, emmet-core, mp-api\n", + "Successfully installed Automat-20.2.0 Click-8.1.3 Flask-2.1.2 Jinja2-3.1.2 MarkupSafe-2.1.1 Werkzeug-2.1.2 aioitertools-0.10.0 anyio-3.6.1 asttokens-2.0.5 attrs-21.4.0 backcall-0.2.0 bcrypt-3.2.2 boltons-21.0.0 boto3-1.24.2 botocore-1.27.2 bravado-11.0.3 bravado-core-5.17.0 certifi-2022.5.18.1 cffi-1.15.0 charset-normalizer-2.0.12 constantly-15.1.0 crochet-2.0.0 cryptography-37.0.2 cycler-0.11.0 decorator-5.1.1 dnspython-2.2.1 emmet-core-0.27.6 executing-0.8.3 fastapi-0.78.0 fido-4.2.2 filetype-1.0.13 flatten-dict-0.4.2 fonttools-4.33.3 future-0.18.2 hyperlink-21.0.0 idna-3.3 importlib-metadata-4.11.4 incremental-21.3.0 inflect-5.6.0 ipython-8.4.0 itsdangerous-2.1.2 jedi-0.18.1 jmespath-1.0.0 joblib-1.1.0 json2html-1.3.0 jsonref-0.2 jsonschema-4.6.0 kiwisolver-1.4.2 latexcodec-2.0.1 maggma-0.47.2 matminer-0.7.8 matplotlib-3.5.2 matplotlib-inline-0.1.3 mongogrant-0.3.3 mongomock-4.0.0 monotonic-1.6 monty-2022.4.26 mp-api-0.24.0 mpcontribs-client-4.2.10 mpmath-1.2.1 msgpack-1.0.4 networkx-2.8.3 numpy-1.22.4 orjson-3.7.1 packaging-21.3 palettable-3.3.0 pandas-1.4.2 paramiko-2.11.0 parso-0.8.3 pexpect-4.8.0 pickleshare-0.7.5 pillow-9.1.1 pint-0.19.2 plotly-5.8.0 prompt-toolkit-3.0.29 ptyprocess-0.7.0 pubchempy-1.0.4 pure-eval-0.2.2 pyIsEmail-1.4.0 pyOpenSSL-22.0.0 pyasn1-0.4.8 pyasn1-modules-0.2.8 pybtex-0.24.0 pycparser-2.21 pydantic-1.9.1 pydash-5.1.0 pygments-2.12.0 pymatgen-2022.5.26 pymongo-4.1.1 pynacl-1.5.0 pyparsing-3.0.9 pyrsistent-0.18.1 python-dateutil-2.8.2 pytz-2022.1 pyyaml-6.0 pyzmq-22.3.0 requests-2.27.1 requests-futures-1.0.0 robocrys-0.2.7 ruamel.yaml-0.17.21 ruamel.yaml.clib-0.2.6 s3transfer-0.6.0 scikit-learn-1.1.1 scipy-1.8.1 sentinels-1.0.0 service-identity-21.1.0 setuptools-62.3.2 simplejson-3.17.6 six-1.16.0 sniffio-1.2.0 spglib-1.16.5 sshtunnel-0.4.0 stack-data-0.2.0 starlette-0.19.1 swagger-spec-validator-2.7.3 sympy-1.10.1 tabulate-0.8.9 tenacity-8.0.1 threadpoolctl-3.1.0 tqdm-4.64.0 traitlets-5.2.2.post1 twisted-22.4.0 typing-extensions-4.2.0 ujson-5.3.0 uncertainties-3.1.6 urllib3-1.26.9 wcwidth-0.2.5 wrapt-1.14.1 yelp-bytes-0.3.0 yelp-encodings-1.0.0 zipp-3.8.0 zope.interface-5.4.0\n" + ] + }, + { + "output_type": "display_data", + "data": { + "application/vnd.colab-display-data+json": { + "pip_warning": { + "packages": [ + "IPython", + "OpenSSL", + "_cffi_backend", + "_openssl", + "asttokens", + "certifi", + "cryptography", + "dateutil", + "decorator", + "executing", + "idna", + "jedi", + "matplotlib_inline", + "numpy", + "pandas", + "parso", + "pexpect", + "pickleshare", + "pkg_resources", + "prompt_toolkit", + "pure_eval", + "pygments", + "pytz", + "requests", + "six", + "stack_data", + "urllib3", + "wcwidth", + "zmq" + ] + } + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n", + "Collecting mp-api\n", + " Using cached mp_api-0.24.0-py3-none-any.whl (63 kB)\n", + "Collecting mpcontribs-client\n", + " Using cached mpcontribs_client-4.2.10-py3-none-any.whl (21 kB)\n", + "Processing /root/.cache/pip/wheels/05/65/89/dae6cc5747424bcc293753e39ffd86263f55a05e2a40c36149/pymatgen-2022.5.26-cp38-cp38-linux_x86_64.whl\n", + "Collecting typing-extensions>=3.7.4.1\n", + " Using cached typing_extensions-4.2.0-py3-none-any.whl (24 kB)\n", + "Collecting emmet-core>=0.27.5\n", + " Using cached emmet_core-0.27.6-py3-none-any.whl (218 kB)\n", + "Collecting monty>=2021.3.12\n", + " Using cached monty-2022.4.26-py3-none-any.whl (65 kB)\n", + "Collecting maggma>=0.46.0\n", + " Using cached maggma-0.47.2-py3-none-any.whl (91 kB)\n", + "Collecting setuptools\n", + " Using cached setuptools-62.3.2-py3-none-any.whl (1.2 MB)\n", + "Collecting requests>=2.23.0\n", + " Using cached requests-2.27.1-py2.py3-none-any.whl (63 kB)\n", + "Collecting swagger-spec-validator<2.7.4\n", + " Using cached swagger_spec_validator-2.7.3-py2.py3-none-any.whl (27 kB)\n", + "Collecting jsonschema<4.0\n", + " Using cached jsonschema-3.2.0-py2.py3-none-any.whl (56 kB)\n", + "Collecting pyOpenSSL\n", + " Using cached pyOpenSSL-22.0.0-py2.py3-none-any.whl (55 kB)\n", + "Collecting pymongo\n", + " Using cached pymongo-4.1.1-cp38-cp38-manylinux2014_x86_64.whl (498 kB)\n", + "Collecting pyIsEmail\n", + " Using cached pyIsEmail-1.4.0-py2.py3-none-any.whl (25 kB)\n", + "Processing /root/.cache/pip/wheels/34/1a/a9/0d39b9e11fc97dd947ca4df7f0f0c1f4f2e25727d3c63b7739/json2html-1.3.0-py3-none-any.whl\n", + "Collecting pandas\n", + " Using cached pandas-1.4.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.7 MB)\n", + "Collecting requests-futures\n", + " Using cached requests_futures-1.0.0-py2.py3-none-any.whl (7.4 kB)\n", + "Collecting bravado[fido]\n", + " Using cached bravado-11.0.3-py2.py3-none-any.whl (38 kB)\n", + "Processing /root/.cache/pip/wheels/4f/af/da/c09b871cef0ca9d672a796650f147d4594fa9d85b172539c20/fido-4.2.2-py2.py3-none-any.whl\n", + "Collecting flatten-dict\n", + " Using cached flatten_dict-0.4.2-py2.py3-none-any.whl (9.7 kB)\n", + "Collecting plotly\n", + " Using cached plotly-5.8.0-py2.py3-none-any.whl (15.2 MB)\n", + "Collecting ipython\n", + " Using cached ipython-8.4.0-py3-none-any.whl (750 kB)\n", + "Collecting tqdm\n", + " Using cached tqdm-4.64.0-py2.py3-none-any.whl (78 kB)\n", + "Collecting cryptography\n", + " Using cached cryptography-37.0.2-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.1 MB)\n", + "Collecting twisted\n", + " Using cached Twisted-22.4.0-py3-none-any.whl (3.1 MB)\n", + "Collecting ujson\n", + " Using cached ujson-5.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (45 kB)\n", + "Collecting service-identity\n", + " Using cached service_identity-21.1.0-py2.py3-none-any.whl (12 kB)\n", + "Collecting boltons\n", + " Using cached boltons-21.0.0-py2.py3-none-any.whl (193 kB)\n", + "Collecting filetype\n", + " Using cached filetype-1.0.13-py2.py3-none-any.whl (17 kB)\n", + "Processing /root/.cache/pip/wheels/98/1d/e0/a44541f5302ac50028a3be0db9417c18092c61f25009d62145/Pint-0.19.2-py3-none-any.whl\n", + "Collecting palettable>=3.1.1\n", + " Using cached palettable-3.3.0-py2.py3-none-any.whl (111 kB)\n", + "Collecting scipy>=1.5.0\n", + " Using cached scipy-1.8.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (41.6 MB)\n", + "Collecting networkx>=2.2\n", + " Using cached networkx-2.8.3-py3-none-any.whl (2.0 MB)\n", + "Collecting uncertainties>=3.1.4\n", + " Using cached uncertainties-3.1.6-py2.py3-none-any.whl (98 kB)\n", + "Collecting spglib>=1.9.9.44\n", + " Using cached spglib-1.16.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (325 kB)\n", + "Collecting numpy>=1.20.1\n", + " Using cached numpy-1.22.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (16.9 MB)\n", + "Collecting ruamel.yaml>=0.17.0\n", + " Using cached ruamel.yaml-0.17.21-py3-none-any.whl (109 kB)\n", + "Collecting tabulate\n", + " Using cached tabulate-0.8.9-py3-none-any.whl (25 kB)\n", + "Collecting matplotlib>=1.5\n", + " Using cached matplotlib-3.5.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl (11.3 MB)\n", + "Collecting sympy\n", + " Using cached sympy-1.10.1-py3-none-any.whl (6.4 MB)\n", + "Collecting pybtex\n", + " Using cached pybtex-0.24.0-py2.py3-none-any.whl (561 kB)\n", + "Collecting pydantic==1.8.2\n", + " Using cached pydantic-1.8.2-cp38-cp38-manylinux2014_x86_64.whl (13.7 MB)\n", + "Collecting robocrys>=0.2.7\n", + " Using cached robocrys-0.2.7-py3-none-any.whl (3.8 MB)\n", + "Collecting matminer>=0.7.3\n", + " Using cached matminer-0.7.8-py3-none-any.whl (1.4 MB)\n", + "Collecting dnspython>=1.16.0\n", + " Using cached dnspython-2.2.1-py3-none-any.whl (269 kB)\n", + "Collecting mongomock>=3.10.0\n", + " Using cached mongomock-4.0.0-py2.py3-none-any.whl (60 kB)\n", + "Collecting mongogrant>=0.3.1\n", + " Using cached mongogrant-0.3.3-py3-none-any.whl (25 kB)\n", + "Collecting msgpack>=0.5.6\n", + " Using cached msgpack-1.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (322 kB)\n", + "Collecting orjson>=3.6.0\n", + " Using cached orjson-3.7.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (256 kB)\n", + "Collecting sshtunnel>=0.1.5\n", + " Using cached sshtunnel-0.4.0-py2.py3-none-any.whl (24 kB)\n", + "Collecting fastapi>=0.42.0\n", + " Using cached fastapi-0.78.0-py3-none-any.whl (54 kB)\n", + "Collecting boto3>=1.20.41\n", + " Using cached boto3-1.24.2-py3-none-any.whl (132 kB)\n", + "Collecting aioitertools>=0.5.1\n", + " Using cached aioitertools-0.10.0-py3-none-any.whl (23 kB)\n", + "Collecting pyzmq==22.3.0\n", + " Using cached pyzmq-22.3.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.1 MB)\n", + "Collecting pydash>=4.1.0\n", + " Using cached pydash-5.1.0-py3-none-any.whl (84 kB)\n", + "Collecting charset-normalizer~=2.0.0; python_version >= \"3\"\n", + " Using cached charset_normalizer-2.0.12-py3-none-any.whl (39 kB)\n", + "Collecting certifi>=2017.4.17\n", + " Using cached certifi-2022.5.18.1-py3-none-any.whl (155 kB)\n", + "Collecting urllib3<1.27,>=1.21.1\n", + " Using cached urllib3-1.26.9-py2.py3-none-any.whl (138 kB)\n", + "Collecting idna<4,>=2.5; python_version >= \"3\"\n", + " Using cached idna-3.3-py3-none-any.whl (61 kB)\n", + "Collecting pyyaml\n", + " Using cached PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (701 kB)\n", + "Collecting six\n", + " Using cached six-1.16.0-py2.py3-none-any.whl (11 kB)\n", + "Collecting attrs>=17.4.0\n", + " Using cached attrs-21.4.0-py2.py3-none-any.whl (60 kB)\n", + "Collecting pyrsistent>=0.14.0\n", + " Using cached pyrsistent-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (119 kB)\n", + "Collecting pytz>=2020.1\n", + " Using cached pytz-2022.1-py2.py3-none-any.whl (503 kB)\n", + "Collecting python-dateutil>=2.8.1\n", + " Using cached python_dateutil-2.8.2-py2.py3-none-any.whl (247 kB)\n", + "Collecting simplejson\n", + " Using cached simplejson-3.17.6-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (139 kB)\n", + "Collecting monotonic\n", + " Using cached monotonic-1.6-py2.py3-none-any.whl (8.2 kB)\n", + "Collecting bravado-core>=5.16.1\n", + " Using cached bravado_core-5.17.0-py2.py3-none-any.whl (67 kB)\n", + "Collecting yelp-bytes\n", + " Using cached yelp_bytes-0.3.0-py2.py3-none-any.whl (2.9 kB)\n", + "Collecting crochet\n", + " Using cached crochet-2.0.0-py3-none-any.whl (31 kB)\n", + "Collecting tenacity>=6.2.0\n", + " Using cached tenacity-8.0.1-py3-none-any.whl (24 kB)\n", + "Collecting matplotlib-inline\n", + " Using cached matplotlib_inline-0.1.3-py3-none-any.whl (8.2 kB)\n", + "Collecting decorator\n", + " Using cached decorator-5.1.1-py3-none-any.whl (9.1 kB)\n", + "Collecting pygments>=2.4.0\n", + " Using cached Pygments-2.12.0-py3-none-any.whl (1.1 MB)\n", + "Collecting backcall\n", + " Using cached backcall-0.2.0-py2.py3-none-any.whl (11 kB)\n", + "Collecting jedi>=0.16\n", + " Using cached jedi-0.18.1-py2.py3-none-any.whl (1.6 MB)\n", + "Collecting prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0\n", + " Using cached prompt_toolkit-3.0.29-py3-none-any.whl (381 kB)\n", + "Collecting pexpect>4.3; sys_platform != \"win32\"\n", + " Using cached pexpect-4.8.0-py2.py3-none-any.whl (59 kB)\n", + "Collecting pickleshare\n", + " Using cached pickleshare-0.7.5-py2.py3-none-any.whl (6.9 kB)\n", + "Collecting traitlets>=5\n", + " Using cached traitlets-5.2.2.post1-py3-none-any.whl (106 kB)\n", + "Collecting stack-data\n", + " Using cached stack_data-0.2.0-py3-none-any.whl (21 kB)\n", + "Collecting cffi>=1.12\n", + " Using cached cffi-1.15.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (446 kB)\n", + "Collecting constantly>=15.1\n", + " Using cached constantly-15.1.0-py2.py3-none-any.whl (7.9 kB)\n", + "Collecting Automat>=0.8.0\n", + " Using cached Automat-20.2.0-py2.py3-none-any.whl (31 kB)\n", + "Collecting hyperlink>=17.1.1\n", + " Using cached hyperlink-21.0.0-py2.py3-none-any.whl (74 kB)\n", + "Collecting incremental>=21.3.0\n", + " Using cached incremental-21.3.0-py2.py3-none-any.whl (15 kB)\n", + "Collecting zope.interface>=4.4.2\n", + " Using cached zope.interface-5.4.0-cp38-cp38-manylinux2010_x86_64.whl (259 kB)\n", + "Collecting pyasn1\n", + " Using cached pyasn1-0.4.8-py2.py3-none-any.whl (77 kB)\n", + "Collecting pyasn1-modules\n", + " Using cached pyasn1_modules-0.2.8-py2.py3-none-any.whl (155 kB)\n", + "Processing /root/.cache/pip/wheels/8e/70/28/3d6ccd6e315f65f245da085482a2e1c7d14b90b30f239e2cf4/future-0.18.2-py3-none-any.whl\n", + "Collecting ruamel.yaml.clib>=0.2.6; platform_python_implementation == \"CPython\" and python_version < \"3.11\"\n", + " Using cached ruamel.yaml.clib-0.2.6-cp38-cp38-manylinux1_x86_64.whl (570 kB)\n", + "Collecting packaging>=20.0\n", + " Using cached packaging-21.3-py3-none-any.whl (40 kB)\n", + "Collecting cycler>=0.10\n", + " Using cached cycler-0.11.0-py3-none-any.whl (6.4 kB)\n", + "Collecting pillow>=6.2.0\n", + " Using cached Pillow-9.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.1 MB)\n", + "Collecting fonttools>=4.22.0\n", + " Using cached fonttools-4.33.3-py3-none-any.whl (930 kB)\n", + "Collecting pyparsing>=2.2.1\n", + " Using cached pyparsing-3.0.9-py3-none-any.whl (98 kB)\n", + "Collecting kiwisolver>=1.0.1\n", + " Using cached kiwisolver-1.4.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl (1.2 MB)\n", + "Collecting mpmath>=0.19\n", + " Using cached mpmath-1.2.1-py3-none-any.whl (532 kB)\n", + "Collecting latexcodec>=1.0.4\n", + " Using cached latexcodec-2.0.1-py2.py3-none-any.whl (18 kB)\n", + "Processing /root/.cache/pip/wheels/b0/8c/ba/3b00b89931153bf5a4eaa8e73bd1b0319a879cc45175326854/PubChemPy-1.0.4-py3-none-any.whl\n", + "Collecting inflect\n", + " Using cached inflect-5.6.0-py3-none-any.whl (33 kB)\n", + "Collecting scikit-learn>=1.1.0\n", + " Using cached scikit_learn-1.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (31.2 MB)\n", + "Processing /root/.cache/pip/wheels/52/6d/1d/f8b21b7cc5b50cba5e5744c06f71fdac7d7464cb6f35e61abf/sentinels-1.0.0-py3-none-any.whl\n", + "Collecting Click\n", + " Using cached click-8.1.3-py3-none-any.whl (96 kB)\n", + "Collecting Flask>=1.0\n", + " Using cached Flask-2.1.2-py3-none-any.whl (95 kB)\n", + "Collecting paramiko>=2.7.2\n", + " Using cached paramiko-2.11.0-py2.py3-none-any.whl (212 kB)\n", + "Collecting starlette==0.19.1\n", + " Using cached starlette-0.19.1-py3-none-any.whl (63 kB)\n", + "Collecting botocore<1.28.0,>=1.27.2\n", + " Using cached botocore-1.27.2-py3-none-any.whl (8.8 MB)\n", + "Collecting s3transfer<0.7.0,>=0.6.0\n", + " Using cached s3transfer-0.6.0-py3-none-any.whl (79 kB)\n", + "Collecting jmespath<2.0.0,>=0.7.1\n", + " Using cached jmespath-1.0.0-py3-none-any.whl (23 kB)\n", + "Collecting jsonref\n", + " Using cached jsonref-0.2-py3-none-any.whl (9.3 kB)\n", + "Collecting yelp-encodings\n", + " Using cached yelp_encodings-1.0.0-py3-none-any.whl (2.4 kB)\n", + "Collecting wrapt\n", + " Using cached wrapt-1.14.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (81 kB)\n", + "Collecting parso<0.9.0,>=0.8.0\n", + " Using cached parso-0.8.3-py2.py3-none-any.whl (100 kB)\n", + "Collecting wcwidth\n", + " Using cached wcwidth-0.2.5-py2.py3-none-any.whl (30 kB)\n", + "Collecting ptyprocess>=0.5\n", + " Using cached ptyprocess-0.7.0-py2.py3-none-any.whl (13 kB)\n", + "Collecting executing\n", + " Using cached executing-0.8.3-py2.py3-none-any.whl (16 kB)\n", + "Collecting pure-eval\n", + " Using cached pure_eval-0.2.2-py3-none-any.whl (11 kB)\n", + "Collecting asttokens\n", + " Using cached asttokens-2.0.5-py2.py3-none-any.whl (20 kB)\n", + "Collecting pycparser\n", + " Using cached pycparser-2.21-py2.py3-none-any.whl (118 kB)\n", + "Collecting joblib>=1.0.0\n", + " Using cached joblib-1.1.0-py2.py3-none-any.whl (306 kB)\n", + "Collecting threadpoolctl>=2.0.0\n", + " Using cached threadpoolctl-3.1.0-py3-none-any.whl (14 kB)\n", + "Collecting Jinja2>=3.0\n", + " Using cached Jinja2-3.1.2-py3-none-any.whl (133 kB)\n", + "Collecting importlib-metadata>=3.6.0; python_version < \"3.10\"\n", + " Using cached importlib_metadata-4.11.4-py3-none-any.whl (18 kB)\n", + "Collecting Werkzeug>=2.0\n", + " Using cached Werkzeug-2.1.2-py3-none-any.whl (224 kB)\n", + "Collecting itsdangerous>=2.0\n", + " Using cached itsdangerous-2.1.2-py3-none-any.whl (15 kB)\n", + "Collecting bcrypt>=3.1.3\n", + " Using cached bcrypt-3.2.2-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl (62 kB)\n", + "Collecting pynacl>=1.0.1\n", + " Using cached PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl (856 kB)\n", + "Collecting anyio<5,>=3.4.0\n", + " Using cached anyio-3.6.1-py3-none-any.whl (80 kB)\n", + "Collecting MarkupSafe>=2.0\n", + " Using cached MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (25 kB)\n", + "Collecting zipp>=0.5\n", + " Using cached zipp-3.8.0-py3-none-any.whl (5.4 kB)\n", + "Collecting sniffio>=1.1\n", + " Using cached sniffio-1.2.0-py3-none-any.whl (10 kB)\n", + "\u001b[31mERROR: conda 4.13.0 requires ruamel_yaml_conda>=0.11.14, which is not installed.\u001b[0m\n", + "\u001b[31mERROR: matminer 0.7.8 has requirement jsonschema>=4.5.1, but you'll have jsonschema 3.2.0 which is incompatible.\u001b[0m\n", + "Installing collected packages: pyyaml, setuptools, six, attrs, pyrsistent, jsonschema, swagger-spec-validator, pycparser, cffi, cryptography, pyOpenSSL, pymongo, dnspython, pyIsEmail, json2html, numpy, pytz, python-dateutil, pandas, charset-normalizer, certifi, urllib3, idna, requests, requests-futures, msgpack, simplejson, typing-extensions, monotonic, jsonref, bravado-core, constantly, Automat, hyperlink, incremental, zope.interface, twisted, yelp-encodings, yelp-bytes, wrapt, crochet, pyasn1, pyasn1-modules, service-identity, fido, bravado, flatten-dict, tenacity, plotly, traitlets, matplotlib-inline, decorator, pygments, backcall, parso, jedi, wcwidth, prompt-toolkit, ptyprocess, pexpect, pickleshare, executing, pure-eval, asttokens, stack-data, ipython, tqdm, ujson, boltons, filetype, pint, palettable, scipy, networkx, future, uncertainties, spglib, ruamel.yaml.clib, ruamel.yaml, tabulate, pyparsing, packaging, cycler, pillow, fonttools, kiwisolver, matplotlib, mpmath, sympy, monty, latexcodec, pybtex, pymatgen, mpcontribs-client, pydantic, pubchempy, joblib, threadpoolctl, scikit-learn, matminer, inflect, robocrys, emmet-core, sentinels, mongomock, Click, MarkupSafe, Jinja2, zipp, importlib-metadata, Werkzeug, itsdangerous, Flask, mongogrant, orjson, bcrypt, pynacl, paramiko, sshtunnel, sniffio, anyio, starlette, fastapi, jmespath, botocore, s3transfer, boto3, aioitertools, pyzmq, pydash, maggma, mp-api\n", + "Successfully installed Automat-20.2.0 Click-8.1.3 Flask-2.1.2 Jinja2-3.1.2 MarkupSafe-2.1.1 Werkzeug-2.1.2 aioitertools-0.10.0 anyio-3.6.1 asttokens-2.0.5 attrs-21.4.0 backcall-0.2.0 bcrypt-3.2.2 boltons-21.0.0 boto3-1.24.2 botocore-1.27.2 bravado-11.0.3 bravado-core-5.17.0 certifi-2022.5.18.1 cffi-1.15.0 charset-normalizer-2.0.12 constantly-15.1.0 crochet-2.0.0 cryptography-37.0.2 cycler-0.11.0 decorator-5.1.1 dnspython-2.2.1 emmet-core-0.27.6 executing-0.8.3 fastapi-0.78.0 fido-4.2.2 filetype-1.0.13 flatten-dict-0.4.2 fonttools-4.33.3 future-0.18.2 hyperlink-21.0.0 idna-3.3 importlib-metadata-4.11.4 incremental-21.3.0 inflect-5.6.0 ipython-8.4.0 itsdangerous-2.1.2 jedi-0.18.1 jmespath-1.0.0 joblib-1.1.0 json2html-1.3.0 jsonref-0.2 jsonschema-4.6.0 kiwisolver-1.4.2 latexcodec-2.0.1 maggma-0.47.2 matminer-0.7.8 matplotlib-3.5.2 matplotlib-inline-0.1.3 mongogrant-0.3.3 mongomock-4.0.0 monotonic-1.6 monty-2022.4.26 mp-api-0.24.0 mpcontribs-client-4.2.10 mpmath-1.2.1 msgpack-1.0.4 networkx-2.8.3 numpy-1.22.4 orjson-3.7.1 packaging-21.3 palettable-3.3.0 pandas-1.4.2 paramiko-2.11.0 parso-0.8.3 pexpect-4.8.0 pickleshare-0.7.5 pillow-9.1.1 pint-0.19.2 plotly-5.8.0 prompt-toolkit-3.0.29 ptyprocess-0.7.0 pubchempy-1.0.4 pure-eval-0.2.2 pyIsEmail-1.4.0 pyOpenSSL-22.0.0 pyasn1-0.4.8 pyasn1-modules-0.2.8 pybtex-0.24.0 pycparser-2.21 pydantic-1.9.1 pydash-5.1.0 pygments-2.12.0 pymatgen-2022.5.26 pymongo-4.1.1 pynacl-1.5.0 pyparsing-3.0.9 pyrsistent-0.18.1 python-dateutil-2.8.2 pytz-2022.1 pyyaml-6.0 pyzmq-22.3.0 requests-2.27.1 requests-futures-1.0.0 robocrys-0.2.7 ruamel.yaml-0.17.21 ruamel.yaml.clib-0.2.6 s3transfer-0.6.0 scikit-learn-1.1.1 scipy-1.8.1 sentinels-1.0.0 service-identity-21.1.0 setuptools-62.3.2 simplejson-3.17.6 six-1.16.0 sniffio-1.2.0 spglib-1.16.5 sshtunnel-0.4.0 stack-data-0.2.0 starlette-0.19.1 swagger-spec-validator-2.7.3 sympy-1.10.1 tabulate-0.8.9 tenacity-8.0.1 threadpoolctl-3.1.0 tqdm-4.64.0 traitlets-5.2.2.post1 twisted-22.4.0 typing-extensions-4.2.0 ujson-5.3.0 uncertainties-3.1.6 urllib3-1.26.9 wcwidth-0.2.5 wrapt-1.14.1 yelp-bytes-0.3.0 yelp-encodings-1.0.0 zipp-3.8.0 zope.interface-5.4.0\n" + ] + }, + { + "output_type": "display_data", + "data": { + "application/vnd.colab-display-data+json": { + "pip_warning": { + "packages": [ + "IPython", + "OpenSSL", + "_cffi_backend", + "_openssl", + "asttokens", + "certifi", + "cryptography", + "dateutil", + "decorator", + "executing", + "idna", + "jedi", + "matplotlib_inline", + "numpy", + "pandas", + "parso", + "pexpect", + "pickleshare", + "pkg_resources", + "prompt_toolkit", + "pure_eval", + "pygments", + "pytz", + "requests", + "six", + "stack_data", + "urllib3", + "wcwidth", + "zmq" + ] + } + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n", + "Collecting mp-api\n", + " Using cached mp_api-0.24.0-py3-none-any.whl (63 kB)\n", + "Collecting requests>=2.23.0\n", + " Using cached requests-2.27.1-py2.py3-none-any.whl (63 kB)\n", + "Collecting mpcontribs-client\n", + " Using cached mpcontribs_client-4.2.10-py3-none-any.whl (21 kB)\n", + "Collecting setuptools\n", + " Using cached setuptools-62.3.2-py3-none-any.whl (1.2 MB)\n", + "Collecting monty>=2021.3.12\n", + " Using cached monty-2022.4.26-py3-none-any.whl (65 kB)\n", + "Processing /root/.cache/pip/wheels/05/65/89/dae6cc5747424bcc293753e39ffd86263f55a05e2a40c36149/pymatgen-2022.5.26-cp38-cp38-linux_x86_64.whl\n", + "Collecting typing-extensions>=3.7.4.1\n", + " Using cached typing_extensions-4.2.0-py3-none-any.whl (24 kB)\n", + "Collecting emmet-core>=0.27.5\n", + " Using cached emmet_core-0.27.6-py3-none-any.whl (218 kB)\n", + "Collecting maggma>=0.46.0\n", + " Using cached maggma-0.47.2-py3-none-any.whl (91 kB)\n", + "Collecting idna<4,>=2.5; python_version >= \"3\"\n", + " Using cached idna-3.3-py3-none-any.whl (61 kB)\n", + "Collecting urllib3<1.27,>=1.21.1\n", + " Using cached urllib3-1.26.9-py2.py3-none-any.whl (138 kB)\n", + "Collecting charset-normalizer~=2.0.0; python_version >= \"3\"\n", + " Using cached charset_normalizer-2.0.12-py3-none-any.whl (39 kB)\n", + "Collecting certifi>=2017.4.17\n", + " Using cached certifi-2022.5.18.1-py3-none-any.whl (155 kB)\n", + "Collecting flatten-dict\n", + " Using cached flatten_dict-0.4.2-py2.py3-none-any.whl (9.7 kB)\n", + "Processing /root/.cache/pip/wheels/98/1d/e0/a44541f5302ac50028a3be0db9417c18092c61f25009d62145/Pint-0.19.2-py3-none-any.whl\n", + "Processing /root/.cache/pip/wheels/34/1a/a9/0d39b9e11fc97dd947ca4df7f0f0c1f4f2e25727d3c63b7739/json2html-1.3.0-py3-none-any.whl\n", + "Collecting pandas\n", + " Using cached pandas-1.4.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.7 MB)\n", + "Collecting plotly\n", + " Using cached plotly-5.8.0-py2.py3-none-any.whl (15.2 MB)\n", + "Collecting jsonschema<4.0\n", + " Using cached jsonschema-3.2.0-py2.py3-none-any.whl (56 kB)\n", + "Collecting filetype\n", + " Using cached filetype-1.0.13-py2.py3-none-any.whl (17 kB)\n", + "Collecting requests-futures\n", + " Using cached requests_futures-1.0.0-py2.py3-none-any.whl (7.4 kB)\n", + "Collecting ujson\n", + " Using cached ujson-5.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (45 kB)\n", + "Collecting pymongo\n", + " Using cached pymongo-4.1.1-cp38-cp38-manylinux2014_x86_64.whl (498 kB)\n", + "Collecting pyIsEmail\n", + " Using cached pyIsEmail-1.4.0-py2.py3-none-any.whl (25 kB)\n", + "Collecting tqdm\n", + " Using cached tqdm-4.64.0-py2.py3-none-any.whl (78 kB)\n", + "Collecting swagger-spec-validator<2.7.4\n", + " Using cached swagger_spec_validator-2.7.3-py2.py3-none-any.whl (27 kB)\n", + "Processing /root/.cache/pip/wheels/4f/af/da/c09b871cef0ca9d672a796650f147d4594fa9d85b172539c20/fido-4.2.2-py2.py3-none-any.whl\n", + "Collecting cryptography\n", + " Using cached cryptography-37.0.2-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.1 MB)\n", + "Collecting boltons\n", + " Using cached boltons-21.0.0-py2.py3-none-any.whl (193 kB)\n", + "Collecting ipython\n", + " Using cached ipython-8.4.0-py3-none-any.whl (750 kB)\n", + "Collecting bravado[fido]\n", + " Using cached bravado-11.0.3-py2.py3-none-any.whl (38 kB)\n", + "Collecting pyOpenSSL\n", + " Using cached pyOpenSSL-22.0.0-py2.py3-none-any.whl (55 kB)\n", + "Collecting service-identity\n", + " Using cached service_identity-21.1.0-py2.py3-none-any.whl (12 kB)\n", + "Collecting twisted\n", + " Using cached Twisted-22.4.0-py3-none-any.whl (3.1 MB)\n", + "Collecting matplotlib>=1.5\n", + " Using cached matplotlib-3.5.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl (11.3 MB)\n", + "Collecting networkx>=2.2\n", + " Using cached networkx-2.8.3-py3-none-any.whl (2.0 MB)\n", + "Collecting sympy\n", + " Using cached sympy-1.10.1-py3-none-any.whl (6.4 MB)\n", + "Collecting scipy>=1.5.0\n", + " Using cached scipy-1.8.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (41.6 MB)\n", + "Collecting tabulate\n", + " Using cached tabulate-0.8.9-py3-none-any.whl (25 kB)\n", + "Collecting pybtex\n", + " Using cached pybtex-0.24.0-py2.py3-none-any.whl (561 kB)\n", + "Collecting numpy>=1.20.1\n", + " Using cached numpy-1.22.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (16.9 MB)\n", + "Collecting uncertainties>=3.1.4\n", + " Using cached uncertainties-3.1.6-py2.py3-none-any.whl (98 kB)\n", + "Collecting spglib>=1.9.9.44\n", + " Using cached spglib-1.16.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (325 kB)\n", + "Collecting ruamel.yaml>=0.17.0\n", + " Using cached ruamel.yaml-0.17.21-py3-none-any.whl (109 kB)\n", + "Collecting palettable>=3.1.1\n", + " Using cached palettable-3.3.0-py2.py3-none-any.whl (111 kB)\n", + "Collecting pydantic==1.8.2\n", + " Using cached pydantic-1.8.2-cp38-cp38-manylinux2014_x86_64.whl (13.7 MB)\n", + "Collecting robocrys>=0.2.7\n", + " Using cached robocrys-0.2.7-py3-none-any.whl (3.8 MB)\n", + "Collecting matminer>=0.7.3\n", + " Using cached matminer-0.7.8-py3-none-any.whl (1.4 MB)\n", + "Collecting boto3>=1.20.41\n", + " Using cached boto3-1.24.2-py3-none-any.whl (132 kB)\n", + "Collecting dnspython>=1.16.0\n", + " Using cached dnspython-2.2.1-py3-none-any.whl (269 kB)\n", + "Collecting mongomock>=3.10.0\n", + " Using cached mongomock-4.0.0-py2.py3-none-any.whl (60 kB)\n", + "Collecting fastapi>=0.42.0\n", + " Using cached fastapi-0.78.0-py3-none-any.whl (54 kB)\n", + "Collecting mongogrant>=0.3.1\n", + " Using cached mongogrant-0.3.3-py3-none-any.whl (25 kB)\n", + "Collecting msgpack>=0.5.6\n", + " Using cached msgpack-1.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (322 kB)\n", + "Collecting sshtunnel>=0.1.5\n", + " Using cached sshtunnel-0.4.0-py2.py3-none-any.whl (24 kB)\n", + "Collecting pydash>=4.1.0\n", + " Using cached pydash-5.1.0-py3-none-any.whl (84 kB)\n", + "Collecting orjson>=3.6.0\n", + " Using cached orjson-3.7.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (256 kB)\n", + "Collecting pyzmq==22.3.0\n", + " Using cached pyzmq-22.3.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.1 MB)\n", + "Collecting aioitertools>=0.5.1\n", + " Using cached aioitertools-0.10.0-py3-none-any.whl (23 kB)\n", + "Collecting six<2.0,>=1.12\n", + " Using cached six-1.16.0-py2.py3-none-any.whl (11 kB)\n", + "Collecting python-dateutil>=2.8.1\n", + " Using cached python_dateutil-2.8.2-py2.py3-none-any.whl (247 kB)\n", + "Collecting pytz>=2020.1\n", + " Using cached pytz-2022.1-py2.py3-none-any.whl (503 kB)\n", + "Collecting tenacity>=6.2.0\n", + " Using cached tenacity-8.0.1-py3-none-any.whl (24 kB)\n", + "Collecting pyrsistent>=0.14.0\n", + " Using cached pyrsistent-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (119 kB)\n", + "Collecting attrs>=17.4.0\n", + " Using cached attrs-21.4.0-py2.py3-none-any.whl (60 kB)\n", + "Collecting pyyaml\n", + " Using cached PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (701 kB)\n", + "Collecting yelp-bytes\n", + " Using cached yelp_bytes-0.3.0-py2.py3-none-any.whl (2.9 kB)\n", + "Collecting crochet\n", + " Using cached crochet-2.0.0-py3-none-any.whl (31 kB)\n", + "Collecting cffi>=1.12\n", + " Using cached cffi-1.15.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (446 kB)\n", + "Collecting jedi>=0.16\n", + " Using cached jedi-0.18.1-py2.py3-none-any.whl (1.6 MB)\n", + "Collecting matplotlib-inline\n", + " Using cached matplotlib_inline-0.1.3-py3-none-any.whl (8.2 kB)\n", + "Collecting pygments>=2.4.0\n", + " Using cached Pygments-2.12.0-py3-none-any.whl (1.1 MB)\n", + "Collecting stack-data\n", + " Using cached stack_data-0.2.0-py3-none-any.whl (21 kB)\n", + "Collecting backcall\n", + " Using cached backcall-0.2.0-py2.py3-none-any.whl (11 kB)\n", + "Collecting decorator\n", + " Using cached decorator-5.1.1-py3-none-any.whl (9.1 kB)\n", + "Collecting prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0\n", + " Using cached prompt_toolkit-3.0.29-py3-none-any.whl (381 kB)\n", + "Collecting traitlets>=5\n", + " Using cached traitlets-5.2.2.post1-py3-none-any.whl (106 kB)\n", + "Collecting pexpect>4.3; sys_platform != \"win32\"\n", + " Using cached pexpect-4.8.0-py2.py3-none-any.whl (59 kB)\n", + "Collecting pickleshare\n", + " Using cached pickleshare-0.7.5-py2.py3-none-any.whl (6.9 kB)\n", + "Collecting simplejson\n", + " Using cached simplejson-3.17.6-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (139 kB)\n", + "Collecting monotonic\n", + " Using cached monotonic-1.6-py2.py3-none-any.whl (8.2 kB)\n", + "Collecting bravado-core>=5.16.1\n", + " Using cached bravado_core-5.17.0-py2.py3-none-any.whl (67 kB)\n", + "Collecting pyasn1\n", + " Using cached pyasn1-0.4.8-py2.py3-none-any.whl (77 kB)\n", + "Collecting pyasn1-modules\n", + " Using cached pyasn1_modules-0.2.8-py2.py3-none-any.whl (155 kB)\n", + "Collecting Automat>=0.8.0\n", + " Using cached Automat-20.2.0-py2.py3-none-any.whl (31 kB)\n", + "Collecting zope.interface>=4.4.2\n", + " Using cached zope.interface-5.4.0-cp38-cp38-manylinux2010_x86_64.whl (259 kB)\n", + "Collecting incremental>=21.3.0\n", + " Using cached incremental-21.3.0-py2.py3-none-any.whl (15 kB)\n", + "Collecting hyperlink>=17.1.1\n", + " Using cached hyperlink-21.0.0-py2.py3-none-any.whl (74 kB)\n", + "Collecting constantly>=15.1\n", + " Using cached constantly-15.1.0-py2.py3-none-any.whl (7.9 kB)\n", + "Collecting pillow>=6.2.0\n", + " Using cached Pillow-9.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.1 MB)\n", + "Collecting fonttools>=4.22.0\n", + " Using cached fonttools-4.33.3-py3-none-any.whl (930 kB)\n", + "Collecting kiwisolver>=1.0.1\n", + " Using cached kiwisolver-1.4.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl (1.2 MB)\n", + "Collecting packaging>=20.0\n", + " Using cached packaging-21.3-py3-none-any.whl (40 kB)\n", + "Collecting pyparsing>=2.2.1\n", + " Using cached pyparsing-3.0.9-py3-none-any.whl (98 kB)\n", + "Collecting cycler>=0.10\n", + " Using cached cycler-0.11.0-py3-none-any.whl (6.4 kB)\n", + "Collecting mpmath>=0.19\n", + " Using cached mpmath-1.2.1-py3-none-any.whl (532 kB)\n", + "Collecting latexcodec>=1.0.4\n", + " Using cached latexcodec-2.0.1-py2.py3-none-any.whl (18 kB)\n", + "Processing /root/.cache/pip/wheels/8e/70/28/3d6ccd6e315f65f245da085482a2e1c7d14b90b30f239e2cf4/future-0.18.2-py3-none-any.whl\n", + "Collecting ruamel.yaml.clib>=0.2.6; platform_python_implementation == \"CPython\" and python_version < \"3.11\"\n", + " Using cached ruamel.yaml.clib-0.2.6-cp38-cp38-manylinux1_x86_64.whl (570 kB)\n", + "Collecting inflect\n", + " Using cached inflect-5.6.0-py3-none-any.whl (33 kB)\n", + "Processing /root/.cache/pip/wheels/b0/8c/ba/3b00b89931153bf5a4eaa8e73bd1b0319a879cc45175326854/PubChemPy-1.0.4-py3-none-any.whl\n", + "Collecting scikit-learn>=1.1.0\n", + " Using cached scikit_learn-1.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (31.2 MB)\n", + "Collecting botocore<1.28.0,>=1.27.2\n", + " Using cached botocore-1.27.2-py3-none-any.whl (8.8 MB)\n", + "Collecting jmespath<2.0.0,>=0.7.1\n", + " Using cached jmespath-1.0.0-py3-none-any.whl (23 kB)\n", + "Collecting s3transfer<0.7.0,>=0.6.0\n", + " Using cached s3transfer-0.6.0-py3-none-any.whl (79 kB)\n", + "Processing /root/.cache/pip/wheels/52/6d/1d/f8b21b7cc5b50cba5e5744c06f71fdac7d7464cb6f35e61abf/sentinels-1.0.0-py3-none-any.whl\n", + "Collecting starlette==0.19.1\n", + " Using cached starlette-0.19.1-py3-none-any.whl (63 kB)\n", + "Collecting Click\n", + " Using cached click-8.1.3-py3-none-any.whl (96 kB)\n", + "Collecting Flask>=1.0\n", + " Using cached Flask-2.1.2-py3-none-any.whl (95 kB)\n", + "Collecting paramiko>=2.7.2\n", + " Using cached paramiko-2.11.0-py2.py3-none-any.whl (212 kB)\n", + "Collecting yelp-encodings\n", + " Using cached yelp_encodings-1.0.0-py3-none-any.whl (2.4 kB)\n", + "Collecting wrapt\n", + " Using cached wrapt-1.14.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (81 kB)\n", + "Collecting pycparser\n", + " Using cached pycparser-2.21-py2.py3-none-any.whl (118 kB)\n", + "Collecting parso<0.9.0,>=0.8.0\n", + " Using cached parso-0.8.3-py2.py3-none-any.whl (100 kB)\n", + "Collecting pure-eval\n", + " Using cached pure_eval-0.2.2-py3-none-any.whl (11 kB)\n", + "Collecting executing\n", + " Using cached executing-0.8.3-py2.py3-none-any.whl (16 kB)\n", + "Collecting asttokens\n", + " Using cached asttokens-2.0.5-py2.py3-none-any.whl (20 kB)\n", + "Collecting wcwidth\n", + " Using cached wcwidth-0.2.5-py2.py3-none-any.whl (30 kB)\n", + "Collecting ptyprocess>=0.5\n", + " Using cached ptyprocess-0.7.0-py2.py3-none-any.whl (13 kB)\n", + "Collecting jsonref\n", + " Using cached jsonref-0.2-py3-none-any.whl (9.3 kB)\n", + "Collecting joblib>=1.0.0\n", + " Using cached joblib-1.1.0-py2.py3-none-any.whl (306 kB)\n", + "Collecting threadpoolctl>=2.0.0\n", + " Using cached threadpoolctl-3.1.0-py3-none-any.whl (14 kB)\n", + "Collecting anyio<5,>=3.4.0\n", + " Using cached anyio-3.6.1-py3-none-any.whl (80 kB)\n", + "Collecting Jinja2>=3.0\n", + " Using cached Jinja2-3.1.2-py3-none-any.whl (133 kB)\n", + "Collecting Werkzeug>=2.0\n", + " Using cached Werkzeug-2.1.2-py3-none-any.whl (224 kB)\n", + "Collecting itsdangerous>=2.0\n", + " Using cached itsdangerous-2.1.2-py3-none-any.whl (15 kB)\n", + "Collecting importlib-metadata>=3.6.0; python_version < \"3.10\"\n", + " Using cached importlib_metadata-4.11.4-py3-none-any.whl (18 kB)\n", + "Collecting bcrypt>=3.1.3\n", + " Using cached bcrypt-3.2.2-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl (62 kB)\n", + "Collecting pynacl>=1.0.1\n", + " Using cached PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl (856 kB)\n", + "Collecting sniffio>=1.1\n", + " Using cached sniffio-1.2.0-py3-none-any.whl (10 kB)\n", + "Collecting MarkupSafe>=2.0\n", + " Using cached MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (25 kB)\n", + "Collecting zipp>=0.5\n", + " Using cached zipp-3.8.0-py3-none-any.whl (5.4 kB)\n", + "\u001b[31mERROR: conda 4.13.0 requires ruamel_yaml_conda>=0.11.14, which is not installed.\u001b[0m\n", + "\u001b[31mERROR: matminer 0.7.8 has requirement jsonschema>=4.5.1, but you'll have jsonschema 3.2.0 which is incompatible.\u001b[0m\n", + "Installing collected packages: idna, urllib3, charset-normalizer, certifi, requests, six, flatten-dict, pint, json2html, python-dateutil, numpy, pytz, pandas, tenacity, plotly, setuptools, pyrsistent, attrs, jsonschema, filetype, requests-futures, ujson, pymongo, dnspython, pyIsEmail, tqdm, pyyaml, swagger-spec-validator, yelp-encodings, yelp-bytes, Automat, zope.interface, incremental, typing-extensions, hyperlink, constantly, twisted, wrapt, crochet, pycparser, cffi, cryptography, pyasn1, pyasn1-modules, service-identity, pyOpenSSL, fido, pillow, fonttools, kiwisolver, pyparsing, packaging, cycler, matplotlib, networkx, mpmath, sympy, monty, scipy, tabulate, latexcodec, pybtex, future, uncertainties, spglib, ruamel.yaml.clib, ruamel.yaml, palettable, pymatgen, boltons, parso, jedi, traitlets, matplotlib-inline, pygments, pure-eval, executing, asttokens, stack-data, backcall, decorator, wcwidth, prompt-toolkit, ptyprocess, pexpect, pickleshare, ipython, simplejson, msgpack, monotonic, jsonref, bravado-core, bravado, mpcontribs-client, pydantic, inflect, joblib, threadpoolctl, scikit-learn, matminer, pubchempy, robocrys, emmet-core, jmespath, botocore, s3transfer, boto3, sentinels, mongomock, sniffio, anyio, starlette, fastapi, Click, MarkupSafe, Jinja2, Werkzeug, itsdangerous, zipp, importlib-metadata, Flask, mongogrant, bcrypt, pynacl, paramiko, sshtunnel, pydash, orjson, pyzmq, aioitertools, maggma, mp-api\n", + "Successfully installed Automat-20.2.0 Click-8.1.3 Flask-2.1.2 Jinja2-3.1.2 MarkupSafe-2.1.1 Werkzeug-2.1.2 aioitertools-0.10.0 anyio-3.6.1 asttokens-2.0.5 attrs-21.4.0 backcall-0.2.0 bcrypt-3.2.2 boltons-21.0.0 boto3-1.24.2 botocore-1.27.2 bravado-11.0.3 bravado-core-5.17.0 certifi-2022.5.18.1 cffi-1.15.0 charset-normalizer-2.0.12 constantly-15.1.0 crochet-2.0.0 cryptography-37.0.2 cycler-0.11.0 decorator-5.1.1 dnspython-2.2.1 emmet-core-0.27.6 executing-0.8.3 fastapi-0.78.0 fido-4.2.2 filetype-1.0.13 flatten-dict-0.4.2 fonttools-4.33.3 future-0.18.2 hyperlink-21.0.0 idna-3.3 importlib-metadata-4.11.4 incremental-21.3.0 inflect-5.6.0 ipython-8.4.0 itsdangerous-2.1.2 jedi-0.18.1 jmespath-1.0.0 joblib-1.1.0 json2html-1.3.0 jsonref-0.2 jsonschema-4.6.0 kiwisolver-1.4.2 latexcodec-2.0.1 maggma-0.47.2 matminer-0.7.8 matplotlib-3.5.2 matplotlib-inline-0.1.3 mongogrant-0.3.3 mongomock-4.0.0 monotonic-1.6 monty-2022.4.26 mp-api-0.24.0 mpcontribs-client-4.2.10 mpmath-1.2.1 msgpack-1.0.4 networkx-2.8.3 numpy-1.22.4 orjson-3.7.1 packaging-21.3 palettable-3.3.0 pandas-1.4.2 paramiko-2.11.0 parso-0.8.3 pexpect-4.8.0 pickleshare-0.7.5 pillow-9.1.1 pint-0.19.2 plotly-5.8.0 prompt-toolkit-3.0.29 ptyprocess-0.7.0 pubchempy-1.0.4 pure-eval-0.2.2 pyIsEmail-1.4.0 pyOpenSSL-22.0.0 pyasn1-0.4.8 pyasn1-modules-0.2.8 pybtex-0.24.0 pycparser-2.21 pydantic-1.9.1 pydash-5.1.0 pygments-2.12.0 pymatgen-2022.5.26 pymongo-4.1.1 pynacl-1.5.0 pyparsing-3.0.9 pyrsistent-0.18.1 python-dateutil-2.8.2 pytz-2022.1 pyyaml-6.0 pyzmq-22.3.0 requests-2.27.1 requests-futures-1.0.0 robocrys-0.2.7 ruamel.yaml-0.17.21 ruamel.yaml.clib-0.2.6 s3transfer-0.6.0 scikit-learn-1.1.1 scipy-1.8.1 sentinels-1.0.0 service-identity-21.1.0 setuptools-62.3.2 simplejson-3.17.6 six-1.16.0 sniffio-1.2.0 spglib-1.16.5 sshtunnel-0.4.0 stack-data-0.2.0 starlette-0.19.1 swagger-spec-validator-2.7.3 sympy-1.10.1 tabulate-0.8.9 tenacity-8.0.1 threadpoolctl-3.1.0 tqdm-4.64.0 traitlets-5.2.2.post1 twisted-22.4.0 typing-extensions-4.2.0 ujson-5.3.0 uncertainties-3.1.6 urllib3-1.26.9 wcwidth-0.2.5 wrapt-1.14.1 yelp-bytes-0.3.0 yelp-encodings-1.0.0 zipp-3.8.0 zope.interface-5.4.0\n" + ] + }, + { + "output_type": "display_data", + "data": { + "application/vnd.colab-display-data+json": { + "pip_warning": { + "packages": [ + "IPython", + "OpenSSL", + "_cffi_backend", + "_openssl", + "asttokens", + "certifi", + "cryptography", + "dateutil", + "decorator", + "executing", + "idna", + "jedi", + "matplotlib_inline", + "numpy", + "pandas", + "parso", + "pexpect", + "pickleshare", + "pkg_resources", + "prompt_toolkit", + "pure_eval", + "pygments", + "pytz", + "requests", + "six", + "stack_data", + "urllib3", + "wcwidth", + "zmq" + ] + } + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n", + "Collecting mp-api\n", + " Using cached mp_api-0.24.0-py3-none-any.whl (63 kB)\n", + "Collecting monty>=2021.3.12\n", + " Using cached monty-2022.4.26-py3-none-any.whl (65 kB)\n", + "Collecting typing-extensions>=3.7.4.1\n", + " Using cached typing_extensions-4.2.0-py3-none-any.whl (24 kB)\n", + "Collecting emmet-core>=0.27.5\n", + " Using cached emmet_core-0.27.6-py3-none-any.whl (218 kB)\n", + "Processing /root/.cache/pip/wheels/05/65/89/dae6cc5747424bcc293753e39ffd86263f55a05e2a40c36149/pymatgen-2022.5.26-cp38-cp38-linux_x86_64.whl\n", + "Collecting maggma>=0.46.0\n", + " Using cached maggma-0.47.2-py3-none-any.whl (91 kB)\n", + "Collecting requests>=2.23.0\n", + " Using cached requests-2.27.1-py2.py3-none-any.whl (63 kB)\n", + "Collecting setuptools\n", + " Using cached setuptools-62.3.2-py3-none-any.whl (1.2 MB)\n", + "Collecting mpcontribs-client\n", + " Using cached mpcontribs_client-4.2.10-py3-none-any.whl (21 kB)\n", + "Collecting matminer>=0.7.3\n", + " Using cached matminer-0.7.8-py3-none-any.whl (1.4 MB)\n", + "Collecting pybtex~=0.24\n", + " Using cached pybtex-0.24.0-py2.py3-none-any.whl (561 kB)\n", + "Collecting robocrys>=0.2.7\n", + " Using cached robocrys-0.2.7-py3-none-any.whl (3.8 MB)\n", + "Collecting pydantic==1.8.2\n", + " Using cached pydantic-1.8.2-cp38-cp38-manylinux2014_x86_64.whl (13.7 MB)\n", + "Collecting pandas\n", + " Using cached pandas-1.4.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.7 MB)\n", + "Collecting networkx>=2.2\n", + " Using cached networkx-2.8.3-py3-none-any.whl (2.0 MB)\n", + "Collecting tabulate\n", + " Using cached tabulate-0.8.9-py3-none-any.whl (25 kB)\n", + "Collecting sympy\n", + " Using cached sympy-1.10.1-py3-none-any.whl (6.4 MB)\n", + "Collecting uncertainties>=3.1.4\n", + " Using cached uncertainties-3.1.6-py2.py3-none-any.whl (98 kB)\n", + "Collecting numpy>=1.20.1\n", + " Using cached numpy-1.22.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (16.9 MB)\n", + "Collecting plotly>=4.5.0\n", + " Using cached plotly-5.8.0-py2.py3-none-any.whl (15.2 MB)\n", + "Collecting ruamel.yaml>=0.17.0\n", + " Using cached ruamel.yaml-0.17.21-py3-none-any.whl (109 kB)\n", + "Collecting scipy>=1.5.0\n", + " Using cached scipy-1.8.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (41.6 MB)\n", + "Collecting tqdm\n", + " Using cached tqdm-4.64.0-py2.py3-none-any.whl (78 kB)\n", + "Collecting matplotlib>=1.5\n", + " Using cached matplotlib-3.5.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl (11.3 MB)\n", + "Collecting spglib>=1.9.9.44\n", + " Using cached spglib-1.16.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (325 kB)\n", + "Collecting palettable>=3.1.1\n", + " Using cached palettable-3.3.0-py2.py3-none-any.whl (111 kB)\n", + "Collecting mongogrant>=0.3.1\n", + " Using cached mongogrant-0.3.3-py3-none-any.whl (25 kB)\n", + "Collecting msgpack>=0.5.6\n", + " Using cached msgpack-1.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (322 kB)\n", + "Collecting boto3>=1.20.41\n", + " Using cached boto3-1.24.2-py3-none-any.whl (132 kB)\n", + "Collecting fastapi>=0.42.0\n", + " Using cached fastapi-0.78.0-py3-none-any.whl (54 kB)\n", + "Collecting sshtunnel>=0.1.5\n", + " Using cached sshtunnel-0.4.0-py2.py3-none-any.whl (24 kB)\n", + "Collecting orjson>=3.6.0\n", + " Using cached orjson-3.7.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (256 kB)\n", + "Collecting aioitertools>=0.5.1\n", + " Using cached aioitertools-0.10.0-py3-none-any.whl (23 kB)\n", + "Collecting dnspython>=1.16.0\n", + " Using cached dnspython-2.2.1-py3-none-any.whl (269 kB)\n", + "Collecting jsonschema>=3.1.1\n", + " Using cached jsonschema-4.6.0-py3-none-any.whl (80 kB)\n", + "Collecting pydash>=4.1.0\n", + " Using cached pydash-5.1.0-py3-none-any.whl (84 kB)\n", + "Collecting pyzmq==22.3.0\n", + " Using cached pyzmq-22.3.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.1 MB)\n", + "Collecting mongomock>=3.10.0\n", + " Using cached mongomock-4.0.0-py2.py3-none-any.whl (60 kB)\n", + "Collecting pymongo>=4.0\n", + " Using cached pymongo-4.1.1-cp38-cp38-manylinux2014_x86_64.whl (498 kB)\n", + "Collecting certifi>=2017.4.17\n", + " Using cached certifi-2022.5.18.1-py3-none-any.whl (155 kB)\n", + "Collecting idna<4,>=2.5; python_version >= \"3\"\n", + " Using cached idna-3.3-py3-none-any.whl (61 kB)\n", + "Collecting charset-normalizer~=2.0.0; python_version >= \"3\"\n", + " Using cached charset_normalizer-2.0.12-py3-none-any.whl (39 kB)\n", + "Collecting urllib3<1.27,>=1.21.1\n", + " Using cached urllib3-1.26.9-py2.py3-none-any.whl (138 kB)\n", + "Collecting pyIsEmail\n", + " Using cached pyIsEmail-1.4.0-py2.py3-none-any.whl (25 kB)\n", + "Processing /root/.cache/pip/wheels/4f/af/da/c09b871cef0ca9d672a796650f147d4594fa9d85b172539c20/fido-4.2.2-py2.py3-none-any.whl\n", + "Processing /root/.cache/pip/wheels/98/1d/e0/a44541f5302ac50028a3be0db9417c18092c61f25009d62145/Pint-0.19.2-py3-none-any.whl\n", + "Collecting service-identity\n", + " Using cached service_identity-21.1.0-py2.py3-none-any.whl (12 kB)\n", + "Collecting twisted\n", + " Using cached Twisted-22.4.0-py3-none-any.whl (3.1 MB)\n", + "Processing /root/.cache/pip/wheels/34/1a/a9/0d39b9e11fc97dd947ca4df7f0f0c1f4f2e25727d3c63b7739/json2html-1.3.0-py3-none-any.whl\n", + "Collecting ipython\n", + " Using cached ipython-8.4.0-py3-none-any.whl (750 kB)\n", + "Collecting filetype\n", + " Using cached filetype-1.0.13-py2.py3-none-any.whl (17 kB)\n", + "Collecting swagger-spec-validator<2.7.4\n", + " Using cached swagger_spec_validator-2.7.3-py2.py3-none-any.whl (27 kB)\n", + "Collecting ujson\n", + " Using cached ujson-5.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (45 kB)\n", + "Collecting cryptography\n", + " Using cached cryptography-37.0.2-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.1 MB)\n", + "Collecting bravado[fido]\n", + " Using cached bravado-11.0.3-py2.py3-none-any.whl (38 kB)\n", + "Collecting pyOpenSSL\n", + " Using cached pyOpenSSL-22.0.0-py2.py3-none-any.whl (55 kB)\n", + "Collecting flatten-dict\n", + " Using cached flatten_dict-0.4.2-py2.py3-none-any.whl (9.7 kB)\n", + "Collecting boltons\n", + " Using cached boltons-21.0.0-py2.py3-none-any.whl (193 kB)\n", + "Collecting requests-futures\n", + " Using cached requests_futures-1.0.0-py2.py3-none-any.whl (7.4 kB)\n", + "Processing /root/.cache/pip/wheels/8e/70/28/3d6ccd6e315f65f245da085482a2e1c7d14b90b30f239e2cf4/future-0.18.2-py3-none-any.whl\n", + "Collecting scikit-learn>=1.1.0\n", + " Using cached scikit_learn-1.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (31.2 MB)\n", + "Collecting latexcodec>=1.0.4\n", + " Using cached latexcodec-2.0.1-py2.py3-none-any.whl (18 kB)\n", + "Collecting six\n", + " Using cached six-1.16.0-py2.py3-none-any.whl (11 kB)\n", + "Collecting PyYAML>=3.01\n", + " Using cached PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (701 kB)\n", + "Processing /root/.cache/pip/wheels/b0/8c/ba/3b00b89931153bf5a4eaa8e73bd1b0319a879cc45175326854/PubChemPy-1.0.4-py3-none-any.whl\n", + "Collecting inflect\n", + " Using cached inflect-5.6.0-py3-none-any.whl (33 kB)\n", + "Collecting python-dateutil>=2.8.1\n", + " Using cached python_dateutil-2.8.2-py2.py3-none-any.whl (247 kB)\n", + "Collecting pytz>=2020.1\n", + " Using cached pytz-2022.1-py2.py3-none-any.whl (503 kB)\n", + "Collecting mpmath>=0.19\n", + " Using cached mpmath-1.2.1-py3-none-any.whl (532 kB)\n", + "Collecting tenacity>=6.2.0\n", + " Using cached tenacity-8.0.1-py3-none-any.whl (24 kB)\n", + "Collecting ruamel.yaml.clib>=0.2.6; platform_python_implementation == \"CPython\" and python_version < \"3.11\"\n", + " Using cached ruamel.yaml.clib-0.2.6-cp38-cp38-manylinux1_x86_64.whl (570 kB)\n", + "Collecting fonttools>=4.22.0\n", + " Using cached fonttools-4.33.3-py3-none-any.whl (930 kB)\n", + "Collecting pillow>=6.2.0\n", + " Using cached Pillow-9.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.1 MB)\n", + "Collecting kiwisolver>=1.0.1\n", + " Using cached kiwisolver-1.4.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl (1.2 MB)\n", + "Collecting cycler>=0.10\n", + " Using cached cycler-0.11.0-py3-none-any.whl (6.4 kB)\n", + "Collecting packaging>=20.0\n", + " Using cached packaging-21.3-py3-none-any.whl (40 kB)\n", + "Collecting pyparsing>=2.2.1\n", + " Using cached pyparsing-3.0.9-py3-none-any.whl (98 kB)\n", + "Collecting Flask>=1.0\n", + " Using cached Flask-2.1.2-py3-none-any.whl (95 kB)\n", + "Collecting Click\n", + " Using cached click-8.1.3-py3-none-any.whl (96 kB)\n", + "Collecting s3transfer<0.7.0,>=0.6.0\n", + " Using cached s3transfer-0.6.0-py3-none-any.whl (79 kB)\n", + "Collecting jmespath<2.0.0,>=0.7.1\n", + " Using cached jmespath-1.0.0-py3-none-any.whl (23 kB)\n", + "Collecting botocore<1.28.0,>=1.27.2\n", + " Using cached botocore-1.27.2-py3-none-any.whl (8.8 MB)\n", + "Collecting starlette==0.19.1\n", + " Using cached starlette-0.19.1-py3-none-any.whl (63 kB)\n", + "Collecting paramiko>=2.7.2\n", + " Using cached paramiko-2.11.0-py2.py3-none-any.whl (212 kB)\n", + "Collecting attrs>=17.4.0\n", + " Using cached attrs-21.4.0-py2.py3-none-any.whl (60 kB)\n", + "Collecting importlib-resources>=1.4.0; python_version < \"3.9\"\n", + " Using cached importlib_resources-5.7.1-py3-none-any.whl (28 kB)\n", + "Collecting pyrsistent!=0.17.0,!=0.17.1,!=0.17.2,>=0.14.0\n", + " Using cached pyrsistent-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (119 kB)\n", + "Processing /root/.cache/pip/wheels/52/6d/1d/f8b21b7cc5b50cba5e5744c06f71fdac7d7464cb6f35e61abf/sentinels-1.0.0-py3-none-any.whl\n", + "Collecting crochet\n", + " Using cached crochet-2.0.0-py3-none-any.whl (31 kB)\n", + "Collecting yelp-bytes\n", + " Using cached yelp_bytes-0.3.0-py2.py3-none-any.whl (2.9 kB)\n", + "Collecting pyasn1-modules\n", + " Using cached pyasn1_modules-0.2.8-py2.py3-none-any.whl (155 kB)\n", + "Collecting pyasn1\n", + " Using cached pyasn1-0.4.8-py2.py3-none-any.whl (77 kB)\n", + "Collecting zope.interface>=4.4.2\n", + " Using cached zope.interface-5.4.0-cp38-cp38-manylinux2010_x86_64.whl (259 kB)\n", + "Collecting Automat>=0.8.0\n", + " Using cached Automat-20.2.0-py2.py3-none-any.whl (31 kB)\n", + "Collecting constantly>=15.1\n", + " Using cached constantly-15.1.0-py2.py3-none-any.whl (7.9 kB)\n", + "Collecting incremental>=21.3.0\n", + " Using cached incremental-21.3.0-py2.py3-none-any.whl (15 kB)\n", + "Collecting hyperlink>=17.1.1\n", + " Using cached hyperlink-21.0.0-py2.py3-none-any.whl (74 kB)\n", + "Collecting pygments>=2.4.0\n", + " Using cached Pygments-2.12.0-py3-none-any.whl (1.1 MB)\n", + "Collecting pexpect>4.3; sys_platform != \"win32\"\n", + " Using cached pexpect-4.8.0-py2.py3-none-any.whl (59 kB)\n", + "Collecting traitlets>=5\n", + " Using cached traitlets-5.2.2.post1-py3-none-any.whl (106 kB)\n", + "Collecting matplotlib-inline\n", + " Using cached matplotlib_inline-0.1.3-py3-none-any.whl (8.2 kB)\n", + "Collecting prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0\n", + " Using cached prompt_toolkit-3.0.29-py3-none-any.whl (381 kB)\n", + "Collecting stack-data\n", + " Using cached stack_data-0.2.0-py3-none-any.whl (21 kB)\n", + "Collecting pickleshare\n", + " Using cached pickleshare-0.7.5-py2.py3-none-any.whl (6.9 kB)\n", + "Collecting backcall\n", + " Using cached backcall-0.2.0-py2.py3-none-any.whl (11 kB)\n", + "Collecting jedi>=0.16\n", + " Using cached jedi-0.18.1-py2.py3-none-any.whl (1.6 MB)\n", + "Collecting decorator\n", + " Using cached decorator-5.1.1-py3-none-any.whl (9.1 kB)\n", + "Collecting cffi>=1.12\n", + " Using cached cffi-1.15.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (446 kB)\n", + "Collecting simplejson\n", + " Using cached simplejson-3.17.6-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (139 kB)\n", + "Collecting bravado-core>=5.16.1\n", + " Using cached bravado_core-5.17.0-py2.py3-none-any.whl (67 kB)\n", + "Collecting monotonic\n", + " Using cached monotonic-1.6-py2.py3-none-any.whl (8.2 kB)\n", + "Collecting threadpoolctl>=2.0.0\n", + " Using cached threadpoolctl-3.1.0-py3-none-any.whl (14 kB)\n", + "Collecting joblib>=1.0.0\n", + " Using cached joblib-1.1.0-py2.py3-none-any.whl (306 kB)\n", + "Collecting importlib-metadata>=3.6.0; python_version < \"3.10\"\n", + " Using cached importlib_metadata-4.11.4-py3-none-any.whl (18 kB)\n", + "Collecting Jinja2>=3.0\n", + " Using cached Jinja2-3.1.2-py3-none-any.whl (133 kB)\n", + "Collecting itsdangerous>=2.0\n", + " Using cached itsdangerous-2.1.2-py3-none-any.whl (15 kB)\n", + "Collecting Werkzeug>=2.0\n", + " Using cached Werkzeug-2.1.2-py3-none-any.whl (224 kB)\n", + "Collecting anyio<5,>=3.4.0\n", + " Using cached anyio-3.6.1-py3-none-any.whl (80 kB)\n", + "Collecting pynacl>=1.0.1\n", + " Using cached PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl (856 kB)\n", + "Collecting bcrypt>=3.1.3\n", + " Using cached bcrypt-3.2.2-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl (62 kB)\n", + "Collecting zipp>=3.1.0; python_version < \"3.10\"\n", + " Using cached zipp-3.8.0-py3-none-any.whl (5.4 kB)\n", + "Collecting wrapt\n", + " Using cached wrapt-1.14.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (81 kB)\n", + "Collecting yelp-encodings\n", + " Using cached yelp_encodings-1.0.0-py3-none-any.whl (2.4 kB)\n", + "Collecting ptyprocess>=0.5\n", + " Using cached ptyprocess-0.7.0-py2.py3-none-any.whl (13 kB)\n", + "Collecting wcwidth\n", + " Using cached wcwidth-0.2.5-py2.py3-none-any.whl (30 kB)\n", + "Collecting pure-eval\n", + " Using cached pure_eval-0.2.2-py3-none-any.whl (11 kB)\n", + "Collecting asttokens\n", + " Using cached asttokens-2.0.5-py2.py3-none-any.whl (20 kB)\n", + "Collecting executing\n", + " Using cached executing-0.8.3-py2.py3-none-any.whl (16 kB)\n", + "Collecting parso<0.9.0,>=0.8.0\n", + " Using cached parso-0.8.3-py2.py3-none-any.whl (100 kB)\n", + "Collecting pycparser\n", + " Using cached pycparser-2.21-py2.py3-none-any.whl (118 kB)\n", + "Collecting jsonref\n", + " Using cached jsonref-0.2-py3-none-any.whl (9.3 kB)\n", + "Collecting MarkupSafe>=2.0\n", + " Using cached MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (25 kB)\n", + "Collecting sniffio>=1.1\n", + " Using cached sniffio-1.2.0-py3-none-any.whl (10 kB)\n", + "\u001b[31mERROR: conda 4.13.0 requires ruamel_yaml_conda>=0.11.14, which is not installed.\u001b[0m\n", + "\u001b[31mERROR: mpcontribs-client 4.2.10 has requirement jsonschema<4.0, but you'll have jsonschema 4.6.0 which is incompatible.\u001b[0m\n", + "Installing collected packages: monty, typing-extensions, pymongo, mpmath, sympy, future, attrs, zipp, importlib-resources, pyrsistent, jsonschema, tqdm, numpy, certifi, idna, charset-normalizer, urllib3, requests, six, python-dateutil, pytz, pandas, networkx, tabulate, uncertainties, tenacity, plotly, latexcodec, PyYAML, pybtex, ruamel.yaml.clib, ruamel.yaml, scipy, fonttools, pillow, kiwisolver, cycler, pyparsing, packaging, matplotlib, spglib, palettable, pymatgen, threadpoolctl, joblib, scikit-learn, matminer, pubchempy, inflect, robocrys, pydantic, emmet-core, Click, importlib-metadata, MarkupSafe, Jinja2, itsdangerous, Werkzeug, Flask, mongogrant, msgpack, jmespath, botocore, s3transfer, boto3, sniffio, anyio, starlette, fastapi, pycparser, cffi, cryptography, pynacl, bcrypt, paramiko, sshtunnel, orjson, aioitertools, dnspython, pydash, setuptools, pyzmq, sentinels, mongomock, maggma, pyIsEmail, zope.interface, Automat, constantly, incremental, hyperlink, twisted, wrapt, crochet, yelp-encodings, yelp-bytes, pyasn1, pyasn1-modules, service-identity, pyOpenSSL, fido, pint, json2html, pygments, ptyprocess, pexpect, traitlets, matplotlib-inline, wcwidth, prompt-toolkit, pure-eval, asttokens, executing, stack-data, pickleshare, backcall, parso, jedi, decorator, ipython, filetype, swagger-spec-validator, ujson, simplejson, jsonref, bravado-core, monotonic, bravado, flatten-dict, boltons, requests-futures, mpcontribs-client, mp-api\n", + "Successfully installed Automat-20.2.0 Click-8.1.3 Flask-2.1.2 Jinja2-3.1.2 MarkupSafe-2.1.1 PyYAML-6.0 Werkzeug-2.1.2 aioitertools-0.10.0 anyio-3.6.1 asttokens-2.0.5 attrs-21.4.0 backcall-0.2.0 bcrypt-3.2.2 boltons-21.0.0 boto3-1.24.2 botocore-1.27.2 bravado-11.0.3 bravado-core-5.17.0 certifi-2022.5.18.1 cffi-1.15.0 charset-normalizer-2.0.12 constantly-15.1.0 crochet-2.0.0 cryptography-37.0.2 cycler-0.11.0 decorator-5.1.1 dnspython-2.2.1 emmet-core-0.27.6 executing-0.8.3 fastapi-0.78.0 fido-4.2.2 filetype-1.0.13 flatten-dict-0.4.2 fonttools-4.33.3 future-0.18.2 hyperlink-21.0.0 idna-3.3 importlib-metadata-4.11.4 importlib-resources-5.7.1 incremental-21.3.0 inflect-5.6.0 ipython-8.4.0 itsdangerous-2.1.2 jedi-0.18.1 jmespath-1.0.0 joblib-1.1.0 json2html-1.3.0 jsonref-0.2 jsonschema-4.6.0 kiwisolver-1.4.2 latexcodec-2.0.1 maggma-0.47.2 matminer-0.7.8 matplotlib-3.5.2 matplotlib-inline-0.1.3 mongogrant-0.3.3 mongomock-4.0.0 monotonic-1.6 monty-2022.4.26 mp-api-0.24.0 mpcontribs-client-4.2.10 mpmath-1.2.1 msgpack-1.0.4 networkx-2.8.3 numpy-1.22.4 orjson-3.7.1 packaging-21.3 palettable-3.3.0 pandas-1.4.2 paramiko-2.11.0 parso-0.8.3 pexpect-4.8.0 pickleshare-0.7.5 pillow-9.1.1 pint-0.19.2 plotly-5.8.0 prompt-toolkit-3.0.29 ptyprocess-0.7.0 pubchempy-1.0.4 pure-eval-0.2.2 pyIsEmail-1.4.0 pyOpenSSL-22.0.0 pyasn1-0.4.8 pyasn1-modules-0.2.8 pybtex-0.24.0 pycparser-2.21 pydantic-1.9.1 pydash-5.1.0 pygments-2.12.0 pymatgen-2022.5.26 pymongo-4.1.1 pynacl-1.5.0 pyparsing-3.0.9 pyrsistent-0.18.1 python-dateutil-2.8.2 pytz-2022.1 pyzmq-22.3.0 requests-2.27.1 requests-futures-1.0.0 robocrys-0.2.7 ruamel.yaml-0.17.21 ruamel.yaml.clib-0.2.6 s3transfer-0.6.0 scikit-learn-1.1.1 scipy-1.8.1 sentinels-1.0.0 service-identity-21.1.0 setuptools-62.3.2 simplejson-3.17.6 six-1.16.0 sniffio-1.2.0 spglib-1.16.5 sshtunnel-0.4.0 stack-data-0.2.0 starlette-0.19.1 swagger-spec-validator-2.7.3 sympy-1.10.1 tabulate-0.8.9 tenacity-8.0.1 threadpoolctl-3.1.0 tqdm-4.64.0 traitlets-5.2.2.post1 twisted-22.4.0 typing-extensions-4.2.0 ujson-5.3.0 uncertainties-3.1.6 urllib3-1.26.9 wcwidth-0.2.5 wrapt-1.14.1 yelp-bytes-0.3.0 yelp-encodings-1.0.0 zipp-3.8.0 zope.interface-5.4.0\n" + ] + }, + { + "output_type": "display_data", + "data": { + "application/vnd.colab-display-data+json": { + "pip_warning": { + "packages": [ + "IPython", + "OpenSSL", + "_cffi_backend", + "_openssl", + "asttokens", + "certifi", + "cryptography", + "dateutil", + "decorator", + "executing", + "idna", + "jedi", + "matplotlib_inline", + "numpy", + "pandas", + "parso", + "pexpect", + "pickleshare", + "pkg_resources", + "prompt_toolkit", + "pure_eval", + "pygments", + "pytz", + "requests", + "six", + "stack_data", + "urllib3", + "wcwidth", + "zmq" + ] + } + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n", + "Collecting mp-api\n", + " Using cached mp_api-0.24.0-py3-none-any.whl (63 kB)\n", + "Processing /root/.cache/pip/wheels/05/65/89/dae6cc5747424bcc293753e39ffd86263f55a05e2a40c36149/pymatgen-2022.5.26-cp38-cp38-linux_x86_64.whl\n", + "Collecting emmet-core>=0.27.5\n", + " Using cached emmet_core-0.27.6-py3-none-any.whl (218 kB)\n", + "Collecting requests>=2.23.0\n", + " Using cached requests-2.27.1-py2.py3-none-any.whl (63 kB)\n", + "Collecting setuptools\n", + " Using cached setuptools-62.3.2-py3-none-any.whl (1.2 MB)\n", + "Collecting typing-extensions>=3.7.4.1\n", + " Using cached typing_extensions-4.2.0-py3-none-any.whl (24 kB)\n", + "Collecting maggma>=0.46.0\n", + " Using cached maggma-0.47.2-py3-none-any.whl (91 kB)\n", + "Collecting mpcontribs-client\n", + " Using cached mpcontribs_client-4.2.10-py3-none-any.whl (21 kB)\n", + "Collecting monty>=2021.3.12\n", + " Using cached monty-2022.4.26-py3-none-any.whl (65 kB)\n", + "Collecting palettable>=3.1.1\n", + " Using cached palettable-3.3.0-py2.py3-none-any.whl (111 kB)\n", + "Collecting scipy>=1.5.0\n", + " Using cached scipy-1.8.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (41.6 MB)\n", + "Collecting networkx>=2.2\n", + " Using cached networkx-2.8.3-py3-none-any.whl (2.0 MB)\n", + "Collecting tqdm\n", + " Using cached tqdm-4.64.0-py2.py3-none-any.whl (78 kB)\n", + "Collecting sympy\n", + " Using cached sympy-1.10.1-py3-none-any.whl (6.4 MB)\n", + "Collecting spglib>=1.9.9.44\n", + " Using cached spglib-1.16.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (325 kB)\n", + "Collecting plotly>=4.5.0\n", + " Using cached plotly-5.8.0-py2.py3-none-any.whl (15.2 MB)\n", + "Collecting uncertainties>=3.1.4\n", + " Using cached uncertainties-3.1.6-py2.py3-none-any.whl (98 kB)\n", + "Collecting tabulate\n", + " Using cached tabulate-0.8.9-py3-none-any.whl (25 kB)\n", + "Collecting ruamel.yaml>=0.17.0\n", + " Using cached ruamel.yaml-0.17.21-py3-none-any.whl (109 kB)\n", + "Collecting pybtex\n", + " Using cached pybtex-0.24.0-py2.py3-none-any.whl (561 kB)\n", + "Collecting matplotlib>=1.5\n", + " Using cached matplotlib-3.5.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl (11.3 MB)\n", + "Collecting pandas\n", + " Using cached pandas-1.4.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.7 MB)\n", + "Collecting numpy>=1.20.1\n", + " Using cached numpy-1.22.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (16.9 MB)\n", + "Collecting robocrys>=0.2.7\n", + " Using cached robocrys-0.2.7-py3-none-any.whl (3.8 MB)\n", + "Collecting pydantic==1.8.2\n", + " Using cached pydantic-1.8.2-cp38-cp38-manylinux2014_x86_64.whl (13.7 MB)\n", + "Collecting matminer>=0.7.3\n", + " Using cached matminer-0.7.8-py3-none-any.whl (1.4 MB)\n", + "Collecting idna<4,>=2.5; python_version >= \"3\"\n", + " Using cached idna-3.3-py3-none-any.whl (61 kB)\n", + "Collecting charset-normalizer~=2.0.0; python_version >= \"3\"\n", + " Using cached charset_normalizer-2.0.12-py3-none-any.whl (39 kB)\n", + "Collecting certifi>=2017.4.17\n", + " Using cached certifi-2022.5.18.1-py3-none-any.whl (155 kB)\n", + "Collecting urllib3<1.27,>=1.21.1\n", + " Using cached urllib3-1.26.9-py2.py3-none-any.whl (138 kB)\n", + "Collecting pymongo>=4.0\n", + " Using cached pymongo-4.1.1-cp38-cp38-manylinux2014_x86_64.whl (498 kB)\n", + "Collecting mongomock>=3.10.0\n", + " Using cached mongomock-4.0.0-py2.py3-none-any.whl (60 kB)\n", + "Collecting sshtunnel>=0.1.5\n", + " Using cached sshtunnel-0.4.0-py2.py3-none-any.whl (24 kB)\n", + "Collecting jsonschema>=3.1.1\n", + " Using cached jsonschema-4.6.0-py3-none-any.whl (80 kB)\n", + "Collecting msgpack>=0.5.6\n", + " Using cached msgpack-1.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (322 kB)\n", + "Collecting orjson>=3.6.0\n", + " Using cached orjson-3.7.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (256 kB)\n", + "Collecting pydash>=4.1.0\n", + " Using cached pydash-5.1.0-py3-none-any.whl (84 kB)\n", + "Collecting aioitertools>=0.5.1\n", + " Using cached aioitertools-0.10.0-py3-none-any.whl (23 kB)\n", + "Collecting pyzmq==22.3.0\n", + " Using cached pyzmq-22.3.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.1 MB)\n", + "Collecting dnspython>=1.16.0\n", + " Using cached dnspython-2.2.1-py3-none-any.whl (269 kB)\n", + "Collecting boto3>=1.20.41\n", + " Using cached boto3-1.24.2-py3-none-any.whl (132 kB)\n", + "Collecting mongogrant>=0.3.1\n", + " Using cached mongogrant-0.3.3-py3-none-any.whl (25 kB)\n", + "Collecting fastapi>=0.42.0\n", + " Using cached fastapi-0.78.0-py3-none-any.whl (54 kB)\n", + "Collecting service-identity\n", + " Using cached service_identity-21.1.0-py2.py3-none-any.whl (12 kB)\n", + "Processing /root/.cache/pip/wheels/98/1d/e0/a44541f5302ac50028a3be0db9417c18092c61f25009d62145/Pint-0.19.2-py3-none-any.whl\n", + "Collecting pyOpenSSL\n", + " Using cached pyOpenSSL-22.0.0-py2.py3-none-any.whl (55 kB)\n", + "Collecting bravado[fido]\n", + " Using cached bravado-11.0.3-py2.py3-none-any.whl (38 kB)\n", + "Collecting swagger-spec-validator<2.7.4\n", + " Using cached swagger_spec_validator-2.7.3-py2.py3-none-any.whl (27 kB)\n", + "Processing /root/.cache/pip/wheels/4f/af/da/c09b871cef0ca9d672a796650f147d4594fa9d85b172539c20/fido-4.2.2-py2.py3-none-any.whl\n", + "Collecting boltons\n", + " Using cached boltons-21.0.0-py2.py3-none-any.whl (193 kB)\n", + "Collecting twisted\n", + " Using cached Twisted-22.4.0-py3-none-any.whl (3.1 MB)\n", + "Collecting pyIsEmail\n", + " Using cached pyIsEmail-1.4.0-py2.py3-none-any.whl (25 kB)\n", + "Collecting filetype\n", + " Using cached filetype-1.0.13-py2.py3-none-any.whl (17 kB)\n", + "Processing /root/.cache/pip/wheels/34/1a/a9/0d39b9e11fc97dd947ca4df7f0f0c1f4f2e25727d3c63b7739/json2html-1.3.0-py3-none-any.whl\n", + "Collecting flatten-dict\n", + " Using cached flatten_dict-0.4.2-py2.py3-none-any.whl (9.7 kB)\n", + "Collecting cryptography\n", + " Using cached cryptography-37.0.2-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.1 MB)\n", + "Collecting ujson\n", + " Using cached ujson-5.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (45 kB)\n", + "Collecting ipython\n", + " Using cached ipython-8.4.0-py3-none-any.whl (750 kB)\n", + "Collecting requests-futures\n", + " Using cached requests_futures-1.0.0-py2.py3-none-any.whl (7.4 kB)\n", + "Collecting mpmath>=0.19\n", + " Using cached mpmath-1.2.1-py3-none-any.whl (532 kB)\n", + "Collecting tenacity>=6.2.0\n", + " Using cached tenacity-8.0.1-py3-none-any.whl (24 kB)\n", + "Processing /root/.cache/pip/wheels/8e/70/28/3d6ccd6e315f65f245da085482a2e1c7d14b90b30f239e2cf4/future-0.18.2-py3-none-any.whl\n", + "Collecting ruamel.yaml.clib>=0.2.6; platform_python_implementation == \"CPython\" and python_version < \"3.11\"\n", + " Using cached ruamel.yaml.clib-0.2.6-cp38-cp38-manylinux1_x86_64.whl (570 kB)\n", + "Collecting latexcodec>=1.0.4\n", + " Using cached latexcodec-2.0.1-py2.py3-none-any.whl (18 kB)\n", + "Collecting PyYAML>=3.01\n", + " Using cached PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (701 kB)\n", + "Collecting six\n", + " Using cached six-1.16.0-py2.py3-none-any.whl (11 kB)\n", + "Collecting cycler>=0.10\n", + " Using cached cycler-0.11.0-py3-none-any.whl (6.4 kB)\n", + "Collecting kiwisolver>=1.0.1\n", + " Using cached kiwisolver-1.4.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl (1.2 MB)\n", + "Collecting pyparsing>=2.2.1\n", + " Using cached pyparsing-3.0.9-py3-none-any.whl (98 kB)\n", + "Collecting packaging>=20.0\n", + " Using cached packaging-21.3-py3-none-any.whl (40 kB)\n", + "Collecting python-dateutil>=2.7\n", + " Using cached python_dateutil-2.8.2-py2.py3-none-any.whl (247 kB)\n", + "Collecting pillow>=6.2.0\n", + " Using cached Pillow-9.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.1 MB)\n", + "Collecting fonttools>=4.22.0\n", + " Using cached fonttools-4.33.3-py3-none-any.whl (930 kB)\n", + "Collecting pytz>=2020.1\n", + " Using cached pytz-2022.1-py2.py3-none-any.whl (503 kB)\n", + "Collecting inflect\n", + " Using cached inflect-5.6.0-py3-none-any.whl (33 kB)\n", + "Processing /root/.cache/pip/wheels/b0/8c/ba/3b00b89931153bf5a4eaa8e73bd1b0319a879cc45175326854/PubChemPy-1.0.4-py3-none-any.whl\n", + "Collecting scikit-learn>=1.1.0\n", + " Using cached scikit_learn-1.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (31.2 MB)\n", + "Processing /root/.cache/pip/wheels/52/6d/1d/f8b21b7cc5b50cba5e5744c06f71fdac7d7464cb6f35e61abf/sentinels-1.0.0-py3-none-any.whl\n", + "Collecting paramiko>=2.7.2\n", + " Using cached paramiko-2.11.0-py2.py3-none-any.whl (212 kB)\n", + "Collecting pyrsistent!=0.17.0,!=0.17.1,!=0.17.2,>=0.14.0\n", + " Using cached pyrsistent-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (119 kB)\n", + "Collecting attrs>=17.4.0\n", + " Using cached attrs-21.4.0-py2.py3-none-any.whl (60 kB)\n", + "Collecting importlib-resources>=1.4.0; python_version < \"3.9\"\n", + " Using cached importlib_resources-5.7.1-py3-none-any.whl (28 kB)\n", + "Collecting jmespath<2.0.0,>=0.7.1\n", + " Using cached jmespath-1.0.0-py3-none-any.whl (23 kB)\n", + "Collecting s3transfer<0.7.0,>=0.6.0\n", + " Using cached s3transfer-0.6.0-py3-none-any.whl (79 kB)\n", + "Collecting botocore<1.28.0,>=1.27.2\n", + " Using cached botocore-1.27.2-py3-none-any.whl (8.8 MB)\n", + "Collecting Flask>=1.0\n", + " Using cached Flask-2.1.2-py3-none-any.whl (95 kB)\n", + "Collecting Click\n", + " Using cached click-8.1.3-py3-none-any.whl (96 kB)\n", + "Collecting starlette==0.19.1\n", + " Using cached starlette-0.19.1-py3-none-any.whl (63 kB)\n", + "Collecting pyasn1\n", + " Using cached pyasn1-0.4.8-py2.py3-none-any.whl (77 kB)\n", + "Collecting pyasn1-modules\n", + " Using cached pyasn1_modules-0.2.8-py2.py3-none-any.whl (155 kB)\n", + "Collecting bravado-core>=5.16.1\n", + " Using cached bravado_core-5.17.0-py2.py3-none-any.whl (67 kB)\n", + "Collecting simplejson\n", + " Using cached simplejson-3.17.6-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (139 kB)\n", + "Collecting monotonic\n", + " Using cached monotonic-1.6-py2.py3-none-any.whl (8.2 kB)\n", + "Collecting crochet\n", + " Using cached crochet-2.0.0-py3-none-any.whl (31 kB)\n", + "Collecting yelp-bytes\n", + " Using cached yelp_bytes-0.3.0-py2.py3-none-any.whl (2.9 kB)\n", + "Collecting zope.interface>=4.4.2\n", + " Using cached zope.interface-5.4.0-cp38-cp38-manylinux2010_x86_64.whl (259 kB)\n", + "Collecting Automat>=0.8.0\n", + " Using cached Automat-20.2.0-py2.py3-none-any.whl (31 kB)\n", + "Collecting constantly>=15.1\n", + " Using cached constantly-15.1.0-py2.py3-none-any.whl (7.9 kB)\n", + "Collecting hyperlink>=17.1.1\n", + " Using cached hyperlink-21.0.0-py2.py3-none-any.whl (74 kB)\n", + "Collecting incremental>=21.3.0\n", + " Using cached incremental-21.3.0-py2.py3-none-any.whl (15 kB)\n", + "Collecting cffi>=1.12\n", + " Using cached cffi-1.15.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (446 kB)\n", + "Collecting pickleshare\n", + " Using cached pickleshare-0.7.5-py2.py3-none-any.whl (6.9 kB)\n", + "Collecting backcall\n", + " Using cached backcall-0.2.0-py2.py3-none-any.whl (11 kB)\n", + "Collecting pexpect>4.3; sys_platform != \"win32\"\n", + " Using cached pexpect-4.8.0-py2.py3-none-any.whl (59 kB)\n", + "Collecting stack-data\n", + " Using cached stack_data-0.2.0-py3-none-any.whl (21 kB)\n", + "Collecting prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0\n", + " Using cached prompt_toolkit-3.0.29-py3-none-any.whl (381 kB)\n", + "Collecting decorator\n", + " Using cached decorator-5.1.1-py3-none-any.whl (9.1 kB)\n", + "Collecting pygments>=2.4.0\n", + " Using cached Pygments-2.12.0-py3-none-any.whl (1.1 MB)\n", + "Collecting matplotlib-inline\n", + " Using cached matplotlib_inline-0.1.3-py3-none-any.whl (8.2 kB)\n", + "Collecting jedi>=0.16\n", + " Using cached jedi-0.18.1-py2.py3-none-any.whl (1.6 MB)\n", + "Collecting traitlets>=5\n", + " Using cached traitlets-5.2.2.post1-py3-none-any.whl (106 kB)\n", + "Collecting threadpoolctl>=2.0.0\n", + " Using cached threadpoolctl-3.1.0-py3-none-any.whl (14 kB)\n", + "Collecting joblib>=1.0.0\n", + " Using cached joblib-1.1.0-py2.py3-none-any.whl (306 kB)\n", + "Collecting bcrypt>=3.1.3\n", + " Using cached bcrypt-3.2.2-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl (62 kB)\n", + "Collecting pynacl>=1.0.1\n", + " Using cached PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl (856 kB)\n", + "Collecting zipp>=3.1.0; python_version < \"3.10\"\n", + " Using cached zipp-3.8.0-py3-none-any.whl (5.4 kB)\n", + "Collecting importlib-metadata>=3.6.0; python_version < \"3.10\"\n", + " Using cached importlib_metadata-4.11.4-py3-none-any.whl (18 kB)\n", + "Collecting Werkzeug>=2.0\n", + " Using cached Werkzeug-2.1.2-py3-none-any.whl (224 kB)\n", + "Collecting Jinja2>=3.0\n", + " Using cached Jinja2-3.1.2-py3-none-any.whl (133 kB)\n", + "Collecting itsdangerous>=2.0\n", + " Using cached itsdangerous-2.1.2-py3-none-any.whl (15 kB)\n", + "Collecting anyio<5,>=3.4.0\n", + " Using cached anyio-3.6.1-py3-none-any.whl (80 kB)\n", + "Collecting jsonref\n", + " Using cached jsonref-0.2-py3-none-any.whl (9.3 kB)\n", + "Collecting wrapt\n", + " Using cached wrapt-1.14.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (81 kB)\n", + "Collecting yelp-encodings\n", + " Using cached yelp_encodings-1.0.0-py3-none-any.whl (2.4 kB)\n", + "Collecting pycparser\n", + " Using cached pycparser-2.21-py2.py3-none-any.whl (118 kB)\n", + "Collecting ptyprocess>=0.5\n", + " Using cached ptyprocess-0.7.0-py2.py3-none-any.whl (13 kB)\n", + "Collecting executing\n", + " Using cached executing-0.8.3-py2.py3-none-any.whl (16 kB)\n", + "Collecting pure-eval\n", + " Using cached pure_eval-0.2.2-py3-none-any.whl (11 kB)\n", + "Collecting asttokens\n", + " Using cached asttokens-2.0.5-py2.py3-none-any.whl (20 kB)\n", + "Collecting wcwidth\n", + " Using cached wcwidth-0.2.5-py2.py3-none-any.whl (30 kB)\n", + "Collecting parso<0.9.0,>=0.8.0\n", + " Using cached parso-0.8.3-py2.py3-none-any.whl (100 kB)\n", + "Collecting MarkupSafe>=2.0\n", + " Using cached MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (25 kB)\n", + "Collecting sniffio>=1.1\n", + " Using cached sniffio-1.2.0-py3-none-any.whl (10 kB)\n", + "\u001b[31mERROR: conda 4.13.0 requires ruamel_yaml_conda>=0.11.14, which is not installed.\u001b[0m\n", + "\u001b[31mERROR: mpcontribs-client 4.2.10 has requirement jsonschema<4.0, but you'll have jsonschema 4.6.0 which is incompatible.\u001b[0m\n", + "Installing collected packages: palettable, idna, charset-normalizer, certifi, urllib3, requests, numpy, scipy, networkx, tqdm, mpmath, sympy, spglib, tenacity, plotly, monty, future, uncertainties, tabulate, ruamel.yaml.clib, ruamel.yaml, six, latexcodec, PyYAML, pybtex, cycler, kiwisolver, pyparsing, packaging, python-dateutil, pillow, fonttools, matplotlib, pytz, pandas, pymatgen, pyrsistent, attrs, zipp, importlib-resources, jsonschema, pymongo, threadpoolctl, joblib, scikit-learn, matminer, inflect, pubchempy, robocrys, typing-extensions, pydantic, emmet-core, setuptools, sentinels, mongomock, pycparser, cffi, cryptography, bcrypt, pynacl, paramiko, sshtunnel, msgpack, orjson, pydash, aioitertools, pyzmq, dnspython, jmespath, botocore, s3transfer, boto3, importlib-metadata, Werkzeug, Click, MarkupSafe, Jinja2, itsdangerous, Flask, mongogrant, sniffio, anyio, starlette, fastapi, maggma, pyasn1, pyasn1-modules, service-identity, pint, pyOpenSSL, swagger-spec-validator, simplejson, jsonref, bravado-core, monotonic, zope.interface, Automat, constantly, hyperlink, incremental, twisted, wrapt, crochet, yelp-encodings, yelp-bytes, fido, bravado, boltons, pyIsEmail, filetype, json2html, flatten-dict, ujson, pickleshare, backcall, ptyprocess, pexpect, executing, pure-eval, asttokens, stack-data, wcwidth, prompt-toolkit, decorator, pygments, traitlets, matplotlib-inline, parso, jedi, ipython, requests-futures, mpcontribs-client, mp-api\n", + "Successfully installed Automat-20.2.0 Click-8.1.3 Flask-2.1.2 Jinja2-3.1.2 MarkupSafe-2.1.1 PyYAML-6.0 Werkzeug-2.1.2 aioitertools-0.10.0 anyio-3.6.1 asttokens-2.0.5 attrs-21.4.0 backcall-0.2.0 bcrypt-3.2.2 boltons-21.0.0 boto3-1.24.2 botocore-1.27.2 bravado-11.0.3 bravado-core-5.17.0 certifi-2022.5.18.1 cffi-1.15.0 charset-normalizer-2.0.12 constantly-15.1.0 crochet-2.0.0 cryptography-37.0.2 cycler-0.11.0 decorator-5.1.1 dnspython-2.2.1 emmet-core-0.27.6 executing-0.8.3 fastapi-0.78.0 fido-4.2.2 filetype-1.0.13 flatten-dict-0.4.2 fonttools-4.33.3 future-0.18.2 hyperlink-21.0.0 idna-3.3 importlib-metadata-4.11.4 importlib-resources-5.7.1 incremental-21.3.0 inflect-5.6.0 ipython-8.4.0 itsdangerous-2.1.2 jedi-0.18.1 jmespath-1.0.0 joblib-1.1.0 json2html-1.3.0 jsonref-0.2 jsonschema-4.6.0 kiwisolver-1.4.2 latexcodec-2.0.1 maggma-0.47.2 matminer-0.7.8 matplotlib-3.5.2 matplotlib-inline-0.1.3 mongogrant-0.3.3 mongomock-4.0.0 monotonic-1.6 monty-2022.4.26 mp-api-0.24.0 mpcontribs-client-4.2.10 mpmath-1.2.1 msgpack-1.0.4 networkx-2.8.3 numpy-1.22.4 orjson-3.7.1 packaging-21.3 palettable-3.3.0 pandas-1.4.2 paramiko-2.11.0 parso-0.8.3 pexpect-4.8.0 pickleshare-0.7.5 pillow-9.1.1 pint-0.19.2 plotly-5.8.0 prompt-toolkit-3.0.29 ptyprocess-0.7.0 pubchempy-1.0.4 pure-eval-0.2.2 pyIsEmail-1.4.0 pyOpenSSL-22.0.0 pyasn1-0.4.8 pyasn1-modules-0.2.8 pybtex-0.24.0 pycparser-2.21 pydantic-1.9.1 pydash-5.1.0 pygments-2.12.0 pymatgen-2022.5.26 pymongo-4.1.1 pynacl-1.5.0 pyparsing-3.0.9 pyrsistent-0.18.1 python-dateutil-2.8.2 pytz-2022.1 pyzmq-22.3.0 requests-2.27.1 requests-futures-1.0.0 robocrys-0.2.7 ruamel.yaml-0.17.21 ruamel.yaml.clib-0.2.6 s3transfer-0.6.0 scikit-learn-1.1.1 scipy-1.8.1 sentinels-1.0.0 service-identity-21.1.0 setuptools-62.3.2 simplejson-3.17.6 six-1.16.0 sniffio-1.2.0 spglib-1.16.5 sshtunnel-0.4.0 stack-data-0.2.0 starlette-0.19.1 swagger-spec-validator-2.7.3 sympy-1.10.1 tabulate-0.8.9 tenacity-8.0.1 threadpoolctl-3.1.0 tqdm-4.64.0 traitlets-5.2.2.post1 twisted-22.4.0 typing-extensions-4.2.0 ujson-5.3.0 uncertainties-3.1.6 urllib3-1.26.9 wcwidth-0.2.5 wrapt-1.14.1 yelp-bytes-0.3.0 yelp-encodings-1.0.0 zipp-3.8.0 zope.interface-5.4.0\n" + ] + }, + { + "output_type": "display_data", + "data": { + "application/vnd.colab-display-data+json": { + "pip_warning": { + "packages": [ + "IPython", + "OpenSSL", + "_cffi_backend", + "_openssl", + "asttokens", + "certifi", + "cryptography", + "dateutil", + "decorator", + "executing", + "idna", + "jedi", + "matplotlib_inline", + "numpy", + "pandas", + "parso", + "pexpect", + "pickleshare", + "pkg_resources", + "prompt_toolkit", + "pure_eval", + "pygments", + "pytz", + "requests", + "six", + "stack_data", + "urllib3", + "wcwidth", + "zmq" + ] + } + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n", + "Collecting mp-api\n", + " Using cached mp_api-0.24.0-py3-none-any.whl (63 kB)\n", + "Collecting emmet-core>=0.27.5\n", + " Using cached emmet_core-0.27.6-py3-none-any.whl (218 kB)\n", + "Collecting typing-extensions>=3.7.4.1\n", + " Using cached typing_extensions-4.2.0-py3-none-any.whl (24 kB)\n", + "Collecting setuptools\n", + " Using cached setuptools-62.3.2-py3-none-any.whl (1.2 MB)\n", + "Collecting requests>=2.23.0\n", + " Using cached requests-2.27.1-py2.py3-none-any.whl (63 kB)\n", + "Collecting maggma>=0.46.0\n", + " Using cached maggma-0.47.2-py3-none-any.whl (91 kB)\n", + "Collecting monty>=2021.3.12\n", + " Using cached monty-2022.4.26-py3-none-any.whl (65 kB)\n", + "Collecting mpcontribs-client\n", + " Using cached mpcontribs_client-4.2.10-py3-none-any.whl (21 kB)\n", + "Processing /root/.cache/pip/wheels/05/65/89/dae6cc5747424bcc293753e39ffd86263f55a05e2a40c36149/pymatgen-2022.5.26-cp38-cp38-linux_x86_64.whl\n", + "Collecting pydantic==1.8.2\n", + " Using cached pydantic-1.8.2-cp38-cp38-manylinux2014_x86_64.whl (13.7 MB)\n", + "Collecting matminer>=0.7.3\n", + " Using cached matminer-0.7.8-py3-none-any.whl (1.4 MB)\n", + "Collecting robocrys>=0.2.7\n", + " Using cached robocrys-0.2.7-py3-none-any.whl (3.8 MB)\n", + "Collecting pybtex~=0.24\n", + " Using cached pybtex-0.24.0-py2.py3-none-any.whl (561 kB)\n", + "Collecting idna<4,>=2.5; python_version >= \"3\"\n", + " Using cached idna-3.3-py3-none-any.whl (61 kB)\n", + "Collecting urllib3<1.27,>=1.21.1\n", + " Using cached urllib3-1.26.9-py2.py3-none-any.whl (138 kB)\n", + "Collecting charset-normalizer~=2.0.0; python_version >= \"3\"\n", + " Using cached charset_normalizer-2.0.12-py3-none-any.whl (39 kB)\n", + "Collecting certifi>=2017.4.17\n", + " Using cached certifi-2022.5.18.1-py3-none-any.whl (155 kB)\n", + "Collecting pydash>=4.1.0\n", + " Using cached pydash-5.1.0-py3-none-any.whl (84 kB)\n", + "Collecting boto3>=1.20.41\n", + " Using cached boto3-1.24.2-py3-none-any.whl (132 kB)\n", + "Collecting dnspython>=1.16.0\n", + " Using cached dnspython-2.2.1-py3-none-any.whl (269 kB)\n", + "Collecting aioitertools>=0.5.1\n", + " Using cached aioitertools-0.10.0-py3-none-any.whl (23 kB)\n", + "Collecting orjson>=3.6.0\n", + " Using cached orjson-3.7.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (256 kB)\n", + "Collecting mongomock>=3.10.0\n", + " Using cached mongomock-4.0.0-py2.py3-none-any.whl (60 kB)\n", + "Collecting fastapi>=0.42.0\n", + " Using cached fastapi-0.78.0-py3-none-any.whl (54 kB)\n", + "Collecting numpy>=1.17.3\n", + " Using cached numpy-1.22.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (16.9 MB)\n", + "Collecting pyzmq==22.3.0\n", + " Using cached pyzmq-22.3.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.1 MB)\n", + "Collecting sshtunnel>=0.1.5\n", + " Using cached sshtunnel-0.4.0-py2.py3-none-any.whl (24 kB)\n", + "Collecting msgpack>=0.5.6\n", + " Using cached msgpack-1.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (322 kB)\n", + "Collecting tqdm>=4.19.6\n", + " Using cached tqdm-4.64.0-py2.py3-none-any.whl (78 kB)\n", + "Collecting mongogrant>=0.3.1\n", + " Using cached mongogrant-0.3.3-py3-none-any.whl (25 kB)\n", + "Collecting jsonschema>=3.1.1\n", + " Using cached jsonschema-4.6.0-py3-none-any.whl (80 kB)\n", + "Collecting pymongo>=4.0\n", + " Using cached pymongo-4.1.1-cp38-cp38-manylinux2014_x86_64.whl (498 kB)\n", + "Collecting bravado[fido]\n", + " Using cached bravado-11.0.3-py2.py3-none-any.whl (38 kB)\n", + "Processing /root/.cache/pip/wheels/4f/af/da/c09b871cef0ca9d672a796650f147d4594fa9d85b172539c20/fido-4.2.2-py2.py3-none-any.whl\n", + "Collecting flatten-dict\n", + " Using cached flatten_dict-0.4.2-py2.py3-none-any.whl (9.7 kB)\n", + "Collecting service-identity\n", + " Using cached service_identity-21.1.0-py2.py3-none-any.whl (12 kB)\n", + "Collecting twisted\n", + " Using cached Twisted-22.4.0-py3-none-any.whl (3.1 MB)\n", + "Processing /root/.cache/pip/wheels/34/1a/a9/0d39b9e11fc97dd947ca4df7f0f0c1f4f2e25727d3c63b7739/json2html-1.3.0-py3-none-any.whl\n", + "Collecting boltons\n", + " Using cached boltons-21.0.0-py2.py3-none-any.whl (193 kB)\n", + "Collecting pyIsEmail\n", + " Using cached pyIsEmail-1.4.0-py2.py3-none-any.whl (25 kB)\n", + "Collecting ujson\n", + " Using cached ujson-5.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (45 kB)\n", + "Processing /root/.cache/pip/wheels/98/1d/e0/a44541f5302ac50028a3be0db9417c18092c61f25009d62145/Pint-0.19.2-py3-none-any.whl\n", + "Collecting requests-futures\n", + " Using cached requests_futures-1.0.0-py2.py3-none-any.whl (7.4 kB)\n", + "Collecting plotly\n", + " Using cached plotly-5.8.0-py2.py3-none-any.whl (15.2 MB)\n", + "Collecting cryptography\n", + " Using cached cryptography-37.0.2-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.1 MB)\n", + "Collecting pandas\n", + " Using cached pandas-1.4.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.7 MB)\n", + "Collecting ipython\n", + " Using cached ipython-8.4.0-py3-none-any.whl (750 kB)\n", + "Collecting pyOpenSSL\n", + " Using cached pyOpenSSL-22.0.0-py2.py3-none-any.whl (55 kB)\n", + "Collecting swagger-spec-validator<2.7.4\n", + " Using cached swagger_spec_validator-2.7.3-py2.py3-none-any.whl (27 kB)\n", + "Collecting filetype\n", + " Using cached filetype-1.0.13-py2.py3-none-any.whl (17 kB)\n", + "Collecting scipy>=1.5.0\n", + " Using cached scipy-1.8.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (41.6 MB)\n", + "Collecting tabulate\n", + " Using cached tabulate-0.8.9-py3-none-any.whl (25 kB)\n", + "Collecting matplotlib>=1.5\n", + " Using cached matplotlib-3.5.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl (11.3 MB)\n", + "Collecting uncertainties>=3.1.4\n", + " Using cached uncertainties-3.1.6-py2.py3-none-any.whl (98 kB)\n", + "Collecting ruamel.yaml>=0.17.0\n", + " Using cached ruamel.yaml-0.17.21-py3-none-any.whl (109 kB)\n", + "Collecting sympy\n", + " Using cached sympy-1.10.1-py3-none-any.whl (6.4 MB)\n", + "Collecting spglib>=1.9.9.44\n", + " Using cached spglib-1.16.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (325 kB)\n", + "Collecting palettable>=3.1.1\n", + " Using cached palettable-3.3.0-py2.py3-none-any.whl (111 kB)\n", + "Collecting networkx>=2.2\n", + " Using cached networkx-2.8.3-py3-none-any.whl (2.0 MB)\n", + "Collecting scikit-learn>=1.1.0\n", + " Using cached scikit_learn-1.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (31.2 MB)\n", + "Processing /root/.cache/pip/wheels/8e/70/28/3d6ccd6e315f65f245da085482a2e1c7d14b90b30f239e2cf4/future-0.18.2-py3-none-any.whl\n", + "Processing /root/.cache/pip/wheels/b0/8c/ba/3b00b89931153bf5a4eaa8e73bd1b0319a879cc45175326854/PubChemPy-1.0.4-py3-none-any.whl\n", + "Collecting inflect\n", + " Using cached inflect-5.6.0-py3-none-any.whl (33 kB)\n", + "Collecting six\n", + " Using cached six-1.16.0-py2.py3-none-any.whl (11 kB)\n", + "Collecting PyYAML>=3.01\n", + " Using cached PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (701 kB)\n", + "Collecting latexcodec>=1.0.4\n", + " Using cached latexcodec-2.0.1-py2.py3-none-any.whl (18 kB)\n", + "Collecting s3transfer<0.7.0,>=0.6.0\n", + " Using cached s3transfer-0.6.0-py3-none-any.whl (79 kB)\n", + "Collecting botocore<1.28.0,>=1.27.2\n", + " Using cached botocore-1.27.2-py3-none-any.whl (8.8 MB)\n", + "Collecting jmespath<2.0.0,>=0.7.1\n", + " Using cached jmespath-1.0.0-py3-none-any.whl (23 kB)\n", + "Processing /root/.cache/pip/wheels/52/6d/1d/f8b21b7cc5b50cba5e5744c06f71fdac7d7464cb6f35e61abf/sentinels-1.0.0-py3-none-any.whl\n", + "Collecting packaging\n", + " Using cached packaging-21.3-py3-none-any.whl (40 kB)\n", + "Collecting starlette==0.19.1\n", + " Using cached starlette-0.19.1-py3-none-any.whl (63 kB)\n", + "Collecting paramiko>=2.7.2\n", + " Using cached paramiko-2.11.0-py2.py3-none-any.whl (212 kB)\n", + "Collecting Click\n", + " Using cached click-8.1.3-py3-none-any.whl (96 kB)\n", + "Collecting Flask>=1.0\n", + " Using cached Flask-2.1.2-py3-none-any.whl (95 kB)\n", + "Collecting pyrsistent!=0.17.0,!=0.17.1,!=0.17.2,>=0.14.0\n", + " Using cached pyrsistent-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (119 kB)\n", + "Collecting attrs>=17.4.0\n", + " Using cached attrs-21.4.0-py2.py3-none-any.whl (60 kB)\n", + "Collecting importlib-resources>=1.4.0; python_version < \"3.9\"\n", + " Using cached importlib_resources-5.7.1-py3-none-any.whl (28 kB)\n", + "Collecting simplejson\n", + " Using cached simplejson-3.17.6-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (139 kB)\n", + "Collecting monotonic\n", + " Using cached monotonic-1.6-py2.py3-none-any.whl (8.2 kB)\n", + "Collecting python-dateutil\n", + " Using cached python_dateutil-2.8.2-py2.py3-none-any.whl (247 kB)\n", + "Collecting bravado-core>=5.16.1\n", + " Using cached bravado_core-5.17.0-py2.py3-none-any.whl (67 kB)\n", + "Collecting crochet\n", + " Using cached crochet-2.0.0-py3-none-any.whl (31 kB)\n", + "Collecting yelp-bytes\n", + " Using cached yelp_bytes-0.3.0-py2.py3-none-any.whl (2.9 kB)\n", + "Collecting pyasn1-modules\n", + " Using cached pyasn1_modules-0.2.8-py2.py3-none-any.whl (155 kB)\n", + "Collecting pyasn1\n", + " Using cached pyasn1-0.4.8-py2.py3-none-any.whl (77 kB)\n", + "Collecting constantly>=15.1\n", + " Using cached constantly-15.1.0-py2.py3-none-any.whl (7.9 kB)\n", + "Collecting zope.interface>=4.4.2\n", + " Using cached zope.interface-5.4.0-cp38-cp38-manylinux2010_x86_64.whl (259 kB)\n", + "Collecting Automat>=0.8.0\n", + " Using cached Automat-20.2.0-py2.py3-none-any.whl (31 kB)\n", + "Collecting incremental>=21.3.0\n", + " Using cached incremental-21.3.0-py2.py3-none-any.whl (15 kB)\n", + "Collecting hyperlink>=17.1.1\n", + " Using cached hyperlink-21.0.0-py2.py3-none-any.whl (74 kB)\n", + "Collecting tenacity>=6.2.0\n", + " Using cached tenacity-8.0.1-py3-none-any.whl (24 kB)\n", + "Collecting cffi>=1.12\n", + " Using cached cffi-1.15.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (446 kB)\n", + "Collecting pytz>=2020.1\n", + " Using cached pytz-2022.1-py2.py3-none-any.whl (503 kB)\n", + "Collecting traitlets>=5\n", + " Using cached traitlets-5.2.2.post1-py3-none-any.whl (106 kB)\n", + "Collecting decorator\n", + " Using cached decorator-5.1.1-py3-none-any.whl (9.1 kB)\n", + "Collecting pygments>=2.4.0\n", + " Using cached Pygments-2.12.0-py3-none-any.whl (1.1 MB)\n", + "Collecting pickleshare\n", + " Using cached pickleshare-0.7.5-py2.py3-none-any.whl (6.9 kB)\n", + "Collecting backcall\n", + " Using cached backcall-0.2.0-py2.py3-none-any.whl (11 kB)\n", + "Collecting pexpect>4.3; sys_platform != \"win32\"\n", + " Using cached pexpect-4.8.0-py2.py3-none-any.whl (59 kB)\n", + "Collecting matplotlib-inline\n", + " Using cached matplotlib_inline-0.1.3-py3-none-any.whl (8.2 kB)\n", + "Collecting jedi>=0.16\n", + " Using cached jedi-0.18.1-py2.py3-none-any.whl (1.6 MB)\n", + "Collecting prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0\n", + " Using cached prompt_toolkit-3.0.29-py3-none-any.whl (381 kB)\n", + "Collecting stack-data\n", + " Using cached stack_data-0.2.0-py3-none-any.whl (21 kB)\n", + "Collecting fonttools>=4.22.0\n", + " Using cached fonttools-4.33.3-py3-none-any.whl (930 kB)\n", + "Collecting pyparsing>=2.2.1\n", + " Using cached pyparsing-3.0.9-py3-none-any.whl (98 kB)\n", + "Collecting kiwisolver>=1.0.1\n", + " Using cached kiwisolver-1.4.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl (1.2 MB)\n", + "Collecting cycler>=0.10\n", + " Using cached cycler-0.11.0-py3-none-any.whl (6.4 kB)\n", + "Collecting pillow>=6.2.0\n", + " Using cached Pillow-9.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.1 MB)\n", + "Collecting ruamel.yaml.clib>=0.2.6; platform_python_implementation == \"CPython\" and python_version < \"3.11\"\n", + " Using cached ruamel.yaml.clib-0.2.6-cp38-cp38-manylinux1_x86_64.whl (570 kB)\n", + "Collecting mpmath>=0.19\n", + " Using cached mpmath-1.2.1-py3-none-any.whl (532 kB)\n", + "Collecting joblib>=1.0.0\n", + " Using cached joblib-1.1.0-py2.py3-none-any.whl (306 kB)\n", + "Collecting threadpoolctl>=2.0.0\n", + " Using cached threadpoolctl-3.1.0-py3-none-any.whl (14 kB)\n", + "Collecting anyio<5,>=3.4.0\n", + " Using cached anyio-3.6.1-py3-none-any.whl (80 kB)\n", + "Collecting pynacl>=1.0.1\n", + " Using cached PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl (856 kB)\n", + "Collecting bcrypt>=3.1.3\n", + " Using cached bcrypt-3.2.2-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl (62 kB)\n", + "Collecting Jinja2>=3.0\n", + " Using cached Jinja2-3.1.2-py3-none-any.whl (133 kB)\n", + "Collecting Werkzeug>=2.0\n", + " Using cached Werkzeug-2.1.2-py3-none-any.whl (224 kB)\n", + "Collecting itsdangerous>=2.0\n", + " Using cached itsdangerous-2.1.2-py3-none-any.whl (15 kB)\n", + "Collecting importlib-metadata>=3.6.0; python_version < \"3.10\"\n", + " Using cached importlib_metadata-4.11.4-py3-none-any.whl (18 kB)\n", + "Collecting zipp>=3.1.0; python_version < \"3.10\"\n", + " Using cached zipp-3.8.0-py3-none-any.whl (5.4 kB)\n", + "Collecting jsonref\n", + " Using cached jsonref-0.2-py3-none-any.whl (9.3 kB)\n", + "Collecting wrapt\n", + " Using cached wrapt-1.14.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (81 kB)\n", + "Collecting yelp-encodings\n", + " Using cached yelp_encodings-1.0.0-py3-none-any.whl (2.4 kB)\n", + "Collecting pycparser\n", + " Using cached pycparser-2.21-py2.py3-none-any.whl (118 kB)\n", + "Collecting ptyprocess>=0.5\n", + " Using cached ptyprocess-0.7.0-py2.py3-none-any.whl (13 kB)\n", + "Collecting parso<0.9.0,>=0.8.0\n", + " Using cached parso-0.8.3-py2.py3-none-any.whl (100 kB)\n", + "Collecting wcwidth\n", + " Using cached wcwidth-0.2.5-py2.py3-none-any.whl (30 kB)\n", + "Collecting executing\n", + " Using cached executing-0.8.3-py2.py3-none-any.whl (16 kB)\n", + "Collecting asttokens\n", + " Using cached asttokens-2.0.5-py2.py3-none-any.whl (20 kB)\n", + "Collecting pure-eval\n", + " Using cached pure_eval-0.2.2-py3-none-any.whl (11 kB)\n", + "Collecting sniffio>=1.1\n", + " Using cached sniffio-1.2.0-py3-none-any.whl (10 kB)\n", + "Collecting MarkupSafe>=2.0\n", + " Using cached MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (25 kB)\n", + "\u001b[31mERROR: conda 4.13.0 requires ruamel_yaml_conda>=0.11.14, which is not installed.\u001b[0m\n", + "\u001b[31mERROR: mpcontribs-client 4.2.10 has requirement jsonschema<4.0, but you'll have jsonschema 4.6.0 which is incompatible.\u001b[0m\n", + "Installing collected packages: typing-extensions, pydantic, pyrsistent, attrs, zipp, importlib-resources, jsonschema, tqdm, joblib, numpy, threadpoolctl, scipy, scikit-learn, tenacity, plotly, monty, pytz, six, python-dateutil, pandas, tabulate, PyYAML, latexcodec, pybtex, pyparsing, packaging, fonttools, kiwisolver, cycler, pillow, matplotlib, future, uncertainties, idna, urllib3, charset-normalizer, certifi, requests, ruamel.yaml.clib, ruamel.yaml, mpmath, sympy, spglib, palettable, networkx, pymatgen, pymongo, matminer, pubchempy, inflect, robocrys, emmet-core, setuptools, pydash, jmespath, botocore, s3transfer, boto3, dnspython, aioitertools, orjson, sentinels, mongomock, sniffio, anyio, starlette, fastapi, pyzmq, pycparser, cffi, cryptography, pynacl, bcrypt, paramiko, sshtunnel, msgpack, Click, MarkupSafe, Jinja2, Werkzeug, itsdangerous, importlib-metadata, Flask, mongogrant, maggma, simplejson, monotonic, swagger-spec-validator, jsonref, bravado-core, constantly, zope.interface, Automat, incremental, hyperlink, twisted, wrapt, crochet, yelp-encodings, yelp-bytes, pyOpenSSL, pyasn1, pyasn1-modules, service-identity, fido, bravado, flatten-dict, json2html, boltons, pyIsEmail, ujson, pint, requests-futures, traitlets, decorator, pygments, pickleshare, backcall, ptyprocess, pexpect, matplotlib-inline, parso, jedi, wcwidth, prompt-toolkit, executing, asttokens, pure-eval, stack-data, ipython, filetype, mpcontribs-client, mp-api\n", + "Successfully installed Automat-20.2.0 Click-8.1.3 Flask-2.1.2 Jinja2-3.1.2 MarkupSafe-2.1.1 PyYAML-6.0 Werkzeug-2.1.2 aioitertools-0.10.0 anyio-3.6.1 asttokens-2.0.5 attrs-21.4.0 backcall-0.2.0 bcrypt-3.2.2 boltons-21.0.0 boto3-1.24.2 botocore-1.27.2 bravado-11.0.3 bravado-core-5.17.0 certifi-2022.5.18.1 cffi-1.15.0 charset-normalizer-2.0.12 constantly-15.1.0 crochet-2.0.0 cryptography-37.0.2 cycler-0.11.0 decorator-5.1.1 dnspython-2.2.1 emmet-core-0.27.6 executing-0.8.3 fastapi-0.78.0 fido-4.2.2 filetype-1.0.13 flatten-dict-0.4.2 fonttools-4.33.3 future-0.18.2 hyperlink-21.0.0 idna-3.3 importlib-metadata-4.11.4 importlib-resources-5.7.1 incremental-21.3.0 inflect-5.6.0 ipython-8.4.0 itsdangerous-2.1.2 jedi-0.18.1 jmespath-1.0.0 joblib-1.1.0 json2html-1.3.0 jsonref-0.2 jsonschema-4.6.0 kiwisolver-1.4.2 latexcodec-2.0.1 maggma-0.47.2 matminer-0.7.8 matplotlib-3.5.2 matplotlib-inline-0.1.3 mongogrant-0.3.3 mongomock-4.0.0 monotonic-1.6 monty-2022.4.26 mp-api-0.24.0 mpcontribs-client-4.2.10 mpmath-1.2.1 msgpack-1.0.4 networkx-2.8.3 numpy-1.22.4 orjson-3.7.1 packaging-21.3 palettable-3.3.0 pandas-1.4.2 paramiko-2.11.0 parso-0.8.3 pexpect-4.8.0 pickleshare-0.7.5 pillow-9.1.1 pint-0.19.2 plotly-5.8.0 prompt-toolkit-3.0.29 ptyprocess-0.7.0 pubchempy-1.0.4 pure-eval-0.2.2 pyIsEmail-1.4.0 pyOpenSSL-22.0.0 pyasn1-0.4.8 pyasn1-modules-0.2.8 pybtex-0.24.0 pycparser-2.21 pydantic-1.9.1 pydash-5.1.0 pygments-2.12.0 pymatgen-2022.5.26 pymongo-4.1.1 pynacl-1.5.0 pyparsing-3.0.9 pyrsistent-0.18.1 python-dateutil-2.8.2 pytz-2022.1 pyzmq-22.3.0 requests-2.27.1 requests-futures-1.0.0 robocrys-0.2.7 ruamel.yaml-0.17.21 ruamel.yaml.clib-0.2.6 s3transfer-0.6.0 scikit-learn-1.1.1 scipy-1.8.1 sentinels-1.0.0 service-identity-21.1.0 setuptools-62.3.2 simplejson-3.17.6 six-1.16.0 sniffio-1.2.0 spglib-1.16.5 sshtunnel-0.4.0 stack-data-0.2.0 starlette-0.19.1 swagger-spec-validator-2.7.3 sympy-1.10.1 tabulate-0.8.9 tenacity-8.0.1 threadpoolctl-3.1.0 tqdm-4.64.0 traitlets-5.2.2.post1 twisted-22.4.0 typing-extensions-4.2.0 ujson-5.3.0 uncertainties-3.1.6 urllib3-1.26.9 wcwidth-0.2.5 wrapt-1.14.1 yelp-bytes-0.3.0 yelp-encodings-1.0.0 zipp-3.8.0 zope.interface-5.4.0\n" + ] + }, + { + "output_type": "display_data", + "data": { + "application/vnd.colab-display-data+json": { + "pip_warning": { + "packages": [ + "IPython", + "OpenSSL", + "_cffi_backend", + "_openssl", + "asttokens", + "certifi", + "cryptography", + "dateutil", + "decorator", + "executing", + "idna", + "jedi", + "matplotlib_inline", + "numpy", + "pandas", + "parso", + "pexpect", + "pickleshare", + "pkg_resources", + "prompt_toolkit", + "pure_eval", + "pygments", + "pytz", + "requests", + "six", + "stack_data", + "urllib3", + "wcwidth", + "zmq" + ] + } + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "1min 57s ± 2.61 s per loop (mean ± std. dev. of 7 runs, 1 loop each)\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "from mp_api import MPRester" + ], + "metadata": { + "id": "EeN6dJ1XM5W8" + }, + "execution_count": 1, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "api_key = \"\" #@param {type:\"string\"}" + ], + "metadata": { + "id": "IY77kiFPTNhf" + }, + "execution_count": 4, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "with MPRester(api_key) as mpr:\n", + " results = mpr.summary.search(\n", + " num_sites=(1, 4),\n", + " elements=[\"V\"],\n", + " fields=[\"structure\", \"material_id\", \"energy_above_hull\"],\n", + " )\n", + "results" + ], + "metadata": { + "id": "fKXvCpeCM8JG", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000, + "referenced_widgets": [ + "973ff05919ad4465bc4d8c35e1828087", + "c96edef6af3249f49b742c298c031729", + "50bfaa4b92a54455a7787abf4128c439", + "550713fcf8834e64b833febc665129dd", + "f1dbb356ff754c0086fd60475d48c6c0", + "219c476b1000410688c9aae44d1b94b6", + "6991c9bfdc4c4c439381cce57758a3c5", + "fff36ba6c0a64aeaaa8bedfce6187944", + "8b6f025b1ce44b6d8ecd86c31477add7", + "2577cf88d15c47b791397582e3355973", + "1ec4d810d5c54d148bd9eb228d636b8a" + ] + }, + "outputId": "5349c043-1b5c-463e-8a9e-5edd9c6abe02" + }, + "execution_count": 5, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Retrieving SummaryDoc documents: 0%| | 0/417 [00:00=46.1.0", "setuptools_scm[toml]>=5", "wheel"] +requires = ["setuptools>=46.1.0", "setuptools_scm[toml]>=5"] build-backend = "setuptools.build_meta" [tool.setuptools_scm] diff --git a/reports/figures/matbench-genmetrics.png b/reports/figures/matbench-genmetrics.png new file mode 100644 index 0000000..54419c0 Binary files /dev/null and b/reports/figures/matbench-genmetrics.png differ diff --git a/reports/paper.bib b/reports/paper.bib new file mode 100644 index 0000000..dda98c1 --- /dev/null +++ b/reports/paper.bib @@ -0,0 +1,122 @@ +@article{aykol_network_2019, + title = {Network Analysis of Synthesizable Materials Discovery}, + author = {Aykol, Muratahan and Hegde, Vinay I. and Hung, Linda and Suram, Santosh and Herring, Patrick and Wolverton, Chris and Hummelsh{\o}j, Jens S.}, + year = {2019}, + month = may, + journal = {Nat Commun}, + volume = {10}, + number = {1}, + pages = {2018}, + publisher = {{Nature Publishing Group}}, + issn = {2041-1723}, + doi = {10.1038/s41467-019-10030-5}, + urldate = {2022-11-14}, + abstract = {Assessing the synthesizability of inorganic materials is a grand challenge for accelerating their discovery using computations. Synthesis of a material is a complex process that depends not only on its thermodynamic stability with respect to others, but also on factors from kinetics, to advances in synthesis techniques, to the availability of precursors. This complexity makes the development of a general theory or first-principles approach to synthesizability currently impractical. Here we show how an alternative pathway to predicting synthesizability emerges from the dynamics of the materials stability network: a scale-free network constructed by combining the convex free-energy surface of inorganic materials computed by high-throughput density functional theory and their experimental discovery timelines extracted from citations. The time-evolution of the underlying network properties allows us to use machine-learning to predict the likelihood that hypothetical, computer-generated materials will be amenable to successful experimental synthesis.}, + copyright = {2019 The Author(s)}, + langid = {english}, + keywords = {Design,Inorganic chemistry,synthesis and processing,Theory and computation}, + file = {C\:\\Users\\sterg\\Zotero\\storage\\AZKKCSDJ\\Aykol et al_2019_Network analysis of synthesizable materials discovery.pdf;C\:\\Users\\sterg\\Zotero\\storage\\26BR3D5L\\s41467-019-10030-5.html} +} + +@article{baird_xtal2png_2022, + title = {Xtal2png: {{A Python}} Package for Representing Crystalstructure as {{PNG}} Files}, + shorttitle = {Xtal2png}, + author = {Baird, Sterling G. and Jablonka, Kevin M. and Alverson, Michael D. and Sayeed, Hasan M. and Khan, Mohammed Faris and Seegmiller, Colton and Smit, Berend and Sparks, Taylor D.}, + year = {2022}, + month = aug, + journal = {JOSS}, + volume = {7}, + number = {76}, + pages = {4528}, + issn = {2475-9066}, + doi = {10.21105/joss.04528}, + urldate = {2022-08-05}, + abstract = {The latest advances in machine learning are often in natural language processing such as with long short-term memory networks (LSTMs) and Transformers, or image processing such as with generative adversarial networks (GANs), variational autoencoders (VAEs), and guided diffusion models. xtal2png encodes and decodes crystal structures via PNG images (see e.g. Figure 1) by writing and reading the necessary information for crystal reconstruction (unit cell, atomic elements, atomic coordinates) as a square matrix of numbers. This is akin to making/reading a QR code for crystal structures, where the xtal2png representation is an invertible representation. The ability to feed these images directly into image-based pipelines allows you, as a materials informatics practitioner, to get streamlined results for new state-of-the-art image-based machine learning models applied to crystal structures.}, + langid = {english}, + file = {C\:\\Users\\sterg\\Zotero\\storage\\CGJ99564\\Baird et al_2022_xtal2png.pdf} +} + +@article{jain_commentary_2013, + title = {Commentary: {{The Materials Project}}: {{A}} Materials Genome Approach to Accelerating Materials Innovation}, + shorttitle = {Commentary}, + author = {Jain, Anubhav and Ong, Shyue Ping and Hautier, Geoffroy and Chen, Wei and Richards, William Davidson and Dacek, Stephen and Cholia, Shreyas and Gunter, Dan and Skinner, David and Ceder, Gerbrand and Persson, Kristin A.}, + year = {2013}, + month = jul, + journal = {APL Materials}, + volume = {1}, + number = {1}, + pages = {011002}, + publisher = {{American Institute of Physics}}, + doi = {10.1063/1.4812323}, + urldate = {2022-11-14}, + abstract = {Accelerating the discovery of advanced materials is essential for human welfare and sustainable, clean energy. In this paper, we introduce the Materials Project (www.materialsproject.org), a core program of the Materials Genome Initiative that uses high-throughput computing to uncover the properties of all known inorganic materials. This open dataset can be accessed through multiple channels for both interactive exploration and data mining. The Materials Project also seeks to create open-source platforms for developing robust, sophisticated materials analyses. Future efforts will enable users to perform ``rapid-prototyping'' of new materials in silico, and provide researchers with new avenues for cost-effective, data-driven materials design.}, + file = {C\:\\Users\\sterg\\Zotero\\storage\\CLQCGW93\\Jain et al_2013_Commentary.pdf} +} + +@article{palizhati_agents_2022, + title = {Agents for Sequential Learning Using Multiple-Fidelity Data}, + author = {Palizhati, Aini and Torrisi, Steven B. and Aykol, Muratahan and Suram, Santosh K. and Hummelsh{\o}j, Jens S. and Montoya, Joseph H.}, + year = {2022}, + month = mar, + journal = {Sci Rep}, + volume = {12}, + number = {1}, + pages = {4694}, + publisher = {{Nature Publishing Group}}, + issn = {2045-2322}, + doi = {10.1038/s41598-022-08413-8}, + urldate = {2022-11-14}, + abstract = {Sequential learning for materials discovery is a paradigm where a computational agent solicits new data to simultaneously update a model in service of exploration (finding the largest number of materials that meet some criteria) or exploitation (finding materials with an ideal figure of merit). In real-world discovery campaigns, new data acquisition may be costly and an optimal strategy may involve using and acquiring data with different levels of fidelity, such as first-principles calculation to supplement an experiment. In this work, we introduce agents which can operate on multiple data fidelities, and benchmark their performance on an emulated discovery campaign to find materials with desired band gap values. The fidelities of data come from the results of DFT calculations as low fidelity and experimental results as high fidelity. We demonstrate performance gains of agents which incorporate multi-fidelity data in two contexts: either using a large body of low fidelity data as a prior knowledge base or acquiring low fidelity data in-tandem with experimental data. This advance provides a tool that enables materials scientists to test various acquisition and model hyperparameters to maximize the discovery rate of their own multi-fidelity sequential learning campaigns for materials discovery. This may also serve as a reference point for those who are interested in practical strategies that can be used when multiple data sources are available for active or sequential learning campaigns.}, + copyright = {2022 The Author(s)}, + langid = {english}, + keywords = {Chemistry,Energy science and technology,Engineering,Materials science,Mathematics and computing,Optics and photonics}, + file = {C\:\\Users\\sterg\\Zotero\\storage\\DH8KQM5X\\Palizhati et al_2022_Agents for sequential learning using multiple-fidelity data.pdf;C\:\\Users\\sterg\\Zotero\\storage\\845UQV6C\\s41598-022-08413-8.html} +} + +@article{pedregosa_scikit-learn_2011, + title = {Scikit-Learn: {{Machine Learning}} in {{Python}}}, + shorttitle = {Scikit-Learn}, + author = {Pedregosa, Fabian and Varoquaux, Ga{\"e}l and Gramfort, Alexandre and Michel, Vincent and Thirion, Bertrand and Grisel, Olivier and Blondel, Mathieu and Prettenhofer, Peter and Weiss, Ron and Dubourg, Vincent and Vanderplas, Jake and Passos, Alexandre and Cournapeau, David and Brucher, Matthieu and Perrot, Matthieu and Duchesnay, {\'E}douard}, + year = {2011}, + journal = {Journal of Machine Learning Research}, + volume = {12}, + number = {85}, + pages = {2825--2830}, + issn = {1533-7928}, + urldate = {2022-11-14}, + abstract = {Scikit-learn is a Python module integrating a wide range of state-of-the-art machine learning algorithms for medium-scale supervised and unsupervised problems. This package focuses on bringing machine learning to non-specialists using a general-purpose high-level language. Emphasis is put on ease of use, performance, documentation, and API consistency. It has minimal dependencies and is distributed under the simplified BSD license, encouraging its use in both academic and commercial settings. Source code, binaries, and documentation can be downloaded from http://scikit-learn.sourceforge.net.}, + file = {C\:\\Users\\sterg\\Zotero\\storage\\AT4FWI28\\Pedregosa et al_2011_Scikit-learn.pdf} +} + +@article{tshitoyanUnsupervisedWordEmbeddings2019, + title = {Unsupervised Word Embeddings Capture Latent Knowledge from Materials Science Literature}, + author = {Tshitoyan, Vahe and Dagdelen, John and Weston, Leigh and Dunn, Alexander and Rong, Ziqin and Kononova, Olga and Persson, Kristin A. and Ceder, Gerbrand and Jain, Anubhav}, + year = {2019}, + month = jul, + journal = {Nature}, + volume = {571}, + number = {7763}, + pages = {95--98}, + issn = {0028-0836, 1476-4687}, + doi = {10.1038/s41586-019-1335-8}, + urldate = {2022-08-06}, + langid = {english}, + file = {C\:\\Users\\sterg\\Zotero\\storage\\5UP8VYLB\\Tshitoyan et al. - 2019 - Unsupervised word embeddings capture latent knowle.pdf} +} + +@misc{zhao_physics_2022, + title = {Physics {{Guided Generative Adversarial Networks}} for {{Generations}} of {{Crystal Materials}} with {{Symmetry Constraints}}}, + author = {Zhao, Yong and Siriwardane, Edirisuriya M. Dilanga and Wu, Zhenyao and Hu, Ming and Fu, Nihang and Hu, Jianjun}, + year = {2022}, + month = mar, + number = {arXiv:2203.14352}, + eprint = {2203.14352}, + primaryclass = {cond-mat}, + publisher = {{arXiv}}, + urldate = {2022-06-24}, + abstract = {Discovering new materials is a long-standing challenging task that is critical to the progress of human society. Conventional approaches such as trial-and-error experiments and computational simulations are labor-intensive or costly with their success heavily depending on experts' heuristics. Recently deep generative models have been successfully proposed for materials generation by learning implicit knowledge from known materials datasets, with performance however limited by their confinement to a special material family or failing to incorporate physical rules into the model training process. Here we propose a Physics Guided Crystal Generative Model (PGCGM) for new materials generation, which captures and exploits the pairwise atomic distance constraints among neighbor atoms and symmetric geometric constraints. By augmenting the base atom sites of materials, our model can generates new materials of 20 space groups. With atom clustering and merging on generated crystal structures, our method increases the generator's validity by 8 times compared to one of the baselines and by 143\% compared to the previous CubicGAN along with its superiority in properties distribution and diversity. We further validated our generated candidates by Density Functional Theory (DFT) calculation, which successfully optimized/relaxed 1869 materials out of 2000, of which 39.6\% are with negative formation energy, indicating their stability.}, + archiveprefix = {arxiv}, + langid = {english}, + keywords = {Computer Science - Machine Learning,Condensed Matter - Materials Science}, + file = {C\:\\Users\\sterg\\Zotero\\storage\\FFITBMRW\\Zhao et al. - 2022 - Physics Guided Generative Adversarial Networks for.pdf} +} diff --git a/reports/paper.md b/reports/paper.md new file mode 100644 index 0000000..24d56dc --- /dev/null +++ b/reports/paper.md @@ -0,0 +1,119 @@ +--- +title: 'matbench_genmetrics: A Python library for benchmarking crystal structure generative models using time-based splits of Materials Project structures' +tags: + - Python + - materials informatics + - crystal structure + - generative modeling + - TimeSeriesSplit + - benchmarking +authors: + - name: Sterling G. Baird + orcid: 0000-0002-4491-6876 + equal-contrib: false + corresponding: true + affiliation: "1" # (Multiple affiliations must be quoted) + - name: Joseph Montoya + orcid: 0000-0001-5760-2860 + affiliation: "2" + # Kevin Jablonka? element-coder was a great contribution here, though it exists in another repository + - name: Taylor D. Sparks + orcid: 0000-0001-8020-7711 + equal-contrib: false + affiliation: "1" # (Multiple affiliations must be quoted) +affiliations: + - name: Materials Science & Engineering, University of Utah, USA + index: 1 + - name: Toyota Research Institute, Los Altos, CA, USA + index: 2 +date: 27 May 2023 +bibliography: paper.bib + +# # Optional fields if submitting to a AAS journal too, see this blog post: +# # https://blog.joss.theoj.org/2018/12/a-new-collaboration-with-aas-publishing +# aas-doi: 10.3847/xxxxx <- update this with the DOI from AAS once you know it. +# aas-journal: Astrophysical Journal <- The name of the AAS journal. +--- + +# Summary + +The progress of a machine learning field is both tracked and propelled through the development of robust benchmarks. While significant progress has been made to create standardized, easy-to-use benchmarks for molecular discovery (e.g., Guacamol \cite{brownGuacaMolBenchmarkingModels2019}), this remains a challenge for solid-state material discovery \cite{spekCheckCIFValidationALERTS2020, xie_crystal_2022, zhao_physics_2022}. To address this limitation, we propose `matbench_genmetrics`, an open-source Python library for benchmarking generative models for crystal structures. We incorporate benchmark datasets, splits, and four evaluation metrics inspired by Guacamol [REF] and Crystal Diffusion Variational AutoEncoder (CDVAE) \cite{xieCrystalDiffusionVariational2021}: validity, coverage, novelty, and uniqueness. The evaluation metrics and benchmark classes are implemented in the `matbench-genmetrics.core` namespace package. The datasets and splitting are handled via `matbench_genmetrics.mp_time_split` namespace package using Materials Project crystal structures and time-series cross-validation splits (based on date first reported in literature), respectively. We also plan to incorporate an automated leaderboard, a submission system, and easy-to-use examples for preparation and submission. We believe that `matbench-genmetrics.core` and `matbench_genmetrics.mp_time_split` will provide the standardization and convenience required for rigorous benchmarking of crystal structure generative models. A visual overview of the `matbench_genmetrics` library is provided in [FIGURE]. + + + + +\begin{figure} + \centering + \includegraphics[width=0.48\textwidth]{sections/figs/metrics.png} + \caption{The four metrics of \texttt{matbench-genmetrics} for assessing performance of + materials generative models are validity, coverage, novelty, and uniqueness. Validity + is the comparison of distribution characteristics (space group number) between the + generated materials and the training and test sets. Coverage is the number of matches + between the generated structures and a held-out test set. Novelty is a comparison + between the generated and training structures. Finally, uniqueness is a measure of the + number of repeats within the generated structures (i.e., comparing the set of + generated structures to itself). A time-based split of the Materials Project database + is used to create the train and test sets.} + \label{fig:matbench-genmetrics} +\end{figure} + + + + +# Statement of need + +In the field of materials informatics, benchmarks are often geared towards property prediction with standard metrics such as mean absolute error (MAE) and root mean squared error (RMSE) and random train-test splits [Matbench REF]; however, generative modeling requires domain-specific evaluation metrics. While the field of molecular generative modeling is converging on a set of benchmark datasets and metrics, crystal structure generative modeling currently exhibits little standardization. For example, in the field of molecular generative modeling, there are two widely popular benchmark platforms --- Guacamol [REF] and Moses [REF] --- each with a large following, easy installation and usage instructions, and some form of a leaderboard. By contrast, existing crystal structure generative modeling benchmarks [REFs] are unconverged, difficult to install and use, and lack public leaderboards. While these one-off assessments have been valuable in assessing a model's performance against a subset of related models, a benchmarking platform is needed to promote standardization and robust comparisons. + +In this work, we introduce `matbench-genmetrics`, a materials benchmarking platform for crystal structure generative models. We use concepts from molecular generative modeling benchmarking to create a set of evaluation metrics --- validity, coverage, novelty, and uniqueness --- which are broadly defined as follows: + +- Validity: a measure of how well the generated materials match the distribution of the training dataset +- Coverage: the ability to successfully predict known materials which have been held out +- Novelty: generating structures which are close matches to examples in the training set are penalized +- Uniqueness: the number of repeats within the generated structures + + + +For in-depth descriptions and equations for the four metrics described above, see [LINK]. + + + +The `matbench_genmetrics.core` namespace package provides the following features: +- feature 1 +- feature 2 +- ... + +As a complement to `matbench_genmetrics.core`, we introduce an additional namespace package, `matbench_genmetrics.mp_time_split`, which provides a standardized dataset and cross-validation splits to assess the four evaluation metrics mentioned above. Time-based splits have been used in the past for validating materials informatics models. For example, Jain et al. [@tshitoyanUnsupervisedWordEmbeddings2019] "tested whether [the] model -- if trained at various points in the past -- would have correctly predicted thermoelectric materials reported later in the literature." Likewise, Montoya et al. [@palizhati_agents_2022] "seeded [multi-fidelity agents with the] first 500 experimentally discovered compositions (based on ICSD58 timeline of their first publication) and their corresponding DFT data." Hummelshøj et al. [@aykol_network_2019] describe the difficulties associated with predicting future trends of materials discovery in the time-evolution of a materials stability network. We note that each of these examples used bespoke splitting of the data. Recently, Hu et al. [@zhao_physics_2022] used what they call a rediscovery metric (we refer to this as a coverage metric in line with molecular benchmarking terminology) to evaluate the results of their crystal structure generative model, though this was not using a time-based split. The need to generate millions of structures to replicate small portions of the heldout dataset highlights the difficulty of the task. When used with other benchmarking metrics, time-based coverage can provide the rigor required to effectively evaluate the performance of generative materials discovery models. In the Materials Project database [@jain_commentary_2013], there are records of when experimentally validated compounds were first reported in the literature. By using this metadata in the `matbench_genmetrics.mp_time_split` namespace package, we are able to ask: "how well can we predict what will be discovered in the future?" `matbench_genmetrics.mp_time_split` acts as a convenient, standardized backend for coverage benchmarking metrics. + +The `matbench_genmetrics.mp_time_split` namespace package provides the following features: +- downloading and storing snapshots of Materials Project crystal structures via pymatgen [REF] (experimentally verified, theoretical, or both) +- modification of search criteria to fetch custom datasets +- utilities for post-processing the Materials Project entries +- convenient access to a snapshot dataset +- predefined scikit-learn TimeSeriesSplit cross-validation splits [REF] + + + +We believe that the `matbench_genmetrics` ecosystem is a robust and easy-to-use benchmarking platform that will help propel novel materials discovery and targeted crystal structure inverse design. We hope that practioners of crystal structure generative modeling will adopt `matbench_genmetrics` and submit their results to the planned public leaderboard. + +# Acknowledgements + +S.G.B. and T.D.S. acknowledge support by the National Science Foundation, USA under Grant No. DMR-1651668. + +# References diff --git a/scripts/fingerprint_snapshot.py b/scripts/core/fingerprint_snapshot.py similarity index 86% rename from scripts/fingerprint_snapshot.py rename to scripts/core/fingerprint_snapshot.py index 7098fae..c2b3daf 100644 --- a/scripts/fingerprint_snapshot.py +++ b/scripts/core/fingerprint_snapshot.py @@ -2,9 +2,8 @@ from pathlib import Path from typing import List -from mp_time_split.core import MPTimeSplit - -from matbench_genmetrics.utils.featurize import featurize_comp_struct +from matbench_genmetrics.core.utils.featurize import featurize_comp_struct +from matbench_genmetrics.mp_time_split.splitter import MPTimeSplit mpt = MPTimeSplit(target="energy_above_hull") diff --git a/scripts/load_imagen_pytorch_generated.py b/scripts/core/load_imagen_pytorch_generated.py similarity index 90% rename from scripts/load_imagen_pytorch_generated.py rename to scripts/core/load_imagen_pytorch_generated.py index 51644f0..37108df 100644 --- a/scripts/load_imagen_pytorch_generated.py +++ b/scripts/core/load_imagen_pytorch_generated.py @@ -4,8 +4,8 @@ def main(): from xtal2png import XtalConverter - from matbench_genmetrics.core import MPTSMetrics10, MPTSMetrics1000 - from matbench_genmetrics.utils.plotting import plot_structures_2d + from matbench_genmetrics.core.metrics import MPTSMetrics10, MPTSMetrics1000 + from matbench_genmetrics.core.utils.plotting import plot_structures_2d fold = 0 dummy = False diff --git a/scripts/matbench_genmetrics_100.py b/scripts/core/matbench_genmetrics_100.py similarity index 72% rename from scripts/matbench_genmetrics_100.py rename to scripts/core/matbench_genmetrics_100.py index 6767edd..009aea2 100644 --- a/scripts/matbench_genmetrics_100.py +++ b/scripts/core/matbench_genmetrics_100.py @@ -1,7 +1,7 @@ -from mp_time_split.utils.gen import DummyGenerator from tqdm import tqdm -from matbench_genmetrics.core import MPTSMetrics100 +from matbench_genmetrics.core.metrics import MPTSMetrics100 +from matbench_genmetrics.mp_time_split.utils.gen import DummyGenerator mptm = MPTSMetrics100(dummy=False, verbose=True) for fold in tqdm(mptm.folds): diff --git a/scripts/matbench_genmetrics_basic.py b/scripts/core/matbench_genmetrics_basic.py similarity index 72% rename from scripts/matbench_genmetrics_basic.py rename to scripts/core/matbench_genmetrics_basic.py index 62b7719..ce86995 100644 --- a/scripts/matbench_genmetrics_basic.py +++ b/scripts/core/matbench_genmetrics_basic.py @@ -1,7 +1,7 @@ -from mp_time_split.utils.gen import DummyGenerator from tqdm import tqdm -from matbench_genmetrics.core import MPTSMetrics10 +from matbench_genmetrics.core.metrics import MPTSMetrics10 +from matbench_genmetrics.mp_time_split.utils.gen import DummyGenerator mptm = MPTSMetrics10(dummy=True, verbose=True) for fold in tqdm(mptm.folds): diff --git a/scripts/run_grayskull.py b/scripts/core/run_grayskull.py similarity index 100% rename from scripts/run_grayskull.py rename to scripts/core/run_grayskull.py diff --git a/scripts/train_model.py b/scripts/core/train_model.py similarity index 83% rename from scripts/train_model.py rename to scripts/core/train_model.py index f459449..cc3da8b 100644 --- a/scripts/train_model.py +++ b/scripts/core/train_model.py @@ -6,7 +6,7 @@ import click from IPython.core import ultratb -import matbench_genmetrics +import matbench_genmetrics.core # fallback to debugger on error sys.excepthook = ultratb.FormattedTB(mode="Verbose", color_scheme="Linux", call_pdb=1) @@ -29,7 +29,7 @@ @click.option("--quiet", "log_level", flag_value=logging.WARNING, default=True) @click.option("-v", "--verbose", "log_level", flag_value=logging.INFO) @click.option("-vv", "--very-verbose", "log_level", flag_value=logging.DEBUG) -@click.version_option(matbench_genmetrics.__version__) +@click.version_option(matbench_genmetrics.core.__version__) def main(cfg_path: Path, log_level: int): logging.basicConfig( stream=sys.stdout, @@ -37,8 +37,8 @@ def main(cfg_path: Path, log_level: int): datefmt="%Y-%m-%d %H:%M", format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", ) - # YOUR CODE GOES HERE! Keep the main functionality in src/matbench_genmetrics - # est = matbench_genmetrics.models.Estimator() + # YOUR CODE GOES HERE! Keep the main functionality in src/core + # est = matbench_genmetrics.core.models.Estimator() if __name__ == "__main__": diff --git a/scripts/validity_snapshot.py b/scripts/core/validity_snapshot.py similarity index 87% rename from scripts/validity_snapshot.py rename to scripts/core/validity_snapshot.py index 4c80dab..7916833 100644 --- a/scripts/validity_snapshot.py +++ b/scripts/core/validity_snapshot.py @@ -3,9 +3,9 @@ from typing import List import pandas as pd -from mp_time_split.core import MPTimeSplit -from matbench_genmetrics.utils.featurize import mod_petti_contributions +from matbench_genmetrics.core.utils.featurize import mod_petti_contributions +from matbench_genmetrics.mp_time_split.splitter import MPTimeSplit mpt = MPTimeSplit(target="energy_above_hull") diff --git a/scripts/mp_time_split/data_snapshot.py b/scripts/mp_time_split/data_snapshot.py new file mode 100644 index 0000000..34d8b49 --- /dev/null +++ b/scripts/mp_time_split/data_snapshot.py @@ -0,0 +1,66 @@ +from os import path + +from matminer.utils.io import load_dataframe_from_json, store_dataframe_as_json + +from matbench_genmetrics.mp_time_split.splitter import MPTimeSplit, get_data_home +from matbench_genmetrics.mp_time_split.utils.data import ( + DUMMY_SNAPSHOT_NAME, + SNAPSHOT_NAME, +) + +# %% dummy data +mpt = MPTimeSplit(num_sites=(1, 2), elements=["V"]) +dummy_expt_df = mpt.fetch_data(one_by_one=True) +dummy_data_path = path.join(get_data_home(), DUMMY_SNAPSHOT_NAME) + +store_dataframe_as_json(dummy_expt_df, dummy_data_path, compression=None) +store_dataframe_as_json(dummy_expt_df, dummy_data_path + ".gz", compression="gz") + +dummy_expt_df_check = load_dataframe_from_json(dummy_data_path) + +dummy_match = dummy_expt_df.compare(dummy_expt_df_check) +if not dummy_match.empty: + raise ValueError(f"dummy_expt_df and dummy_expt_df_check unmatched: {dummy_match}") + +# %% full data +mpt = MPTimeSplit(num_sites=(1, 52)) +expt_df = mpt.fetch_data() +data_path = path.join(get_data_home(), SNAPSHOT_NAME) +store_dataframe_as_json(expt_df, data_path, compression=None) +store_dataframe_as_json(expt_df, data_path + ".gz", compression="gz") +expt_df_check = load_dataframe_from_json(dummy_data_path) + +match = dummy_expt_df.compare(dummy_expt_df_check) +if not match.empty: + raise ValueError(f"expt_df and expt_df_check unmatched: {match}") + +1 + 1 + + +# %% Code Graveyard +# expt_df.to_json() +# store_dataframe_as_json(expt_df, data_path, compression="gz") +# with zopen(data_path, "wb") as f: +# data = json.dumps(expt_df.to_json()).encode() +# f.write(data) + +# with open(dummy_data_path, "w") as f: +# json.dumps(dummy_expt_df, cls=MontyEncoder) +# dummy_expt_df.structure = dummy_expt_df.structure.apply(lambda s: s.as_dict()) +# f.write(jsonpickle.encode(dummy_expt_df)) + +# with open(dummy_data_path, "r") as f: +# json_string = f.read() +# dummy_expt_df_check = json.loads(json_string, cls=MontyDecoder) +# dummy_expt_df_check = jsonpickle.decode(json_string) +# dummy_expt_df_check.structure = +# dummy_expt_df_check.structure.apply(Structure.from_dict) + +# with open(dummy_data_path, "w") as f: +# f.write(jsonpickle.encode(dummy_expt_df)) + +# import jsonpickle +# import jsonpickle.ext.pandas as jsonpickle_pandas +# jsonpickle_pandas.register_handlers() + +# https://stackoverflow.com/a/4359298/13697228 diff --git a/scripts/mp_time_split/run_grayskull.py b/scripts/mp_time_split/run_grayskull.py new file mode 100644 index 0000000..1274d96 --- /dev/null +++ b/scripts/mp_time_split/run_grayskull.py @@ -0,0 +1,125 @@ +"""Touch up the conda recipe from grayskull using conda-souschef.""" +import os +from copy import copy +from os import getcwd +from os.path import basename, dirname, join, normpath +from pathlib import Path +from shutil import copyfile +from warnings import warn + +import mp_time_split as module +import numpy as np +from souschef.recipe import Recipe + +# from packaging.version import VERSION_PATTERN + + +name, version = module.__name__, module.__version__ + +replace_underscores_with_hyphens = True + +if replace_underscores_with_hyphens: + name = name.replace("_", "-") + +src_dirname = "src" +if basename(normpath(getcwd())) != src_dirname: + warn( + f"`meta.yaml` will be saved to {join(getcwd(), name)} instead of {join(src_dirname, name)}. If this is not the desired behavior, delete {join(getcwd(), name)}, `cd` to {src_dirname}, and rerun." # noqa: E501 + ) + +# Regex to match PEP440 compliant version strings +# https://stackoverflow.com/a/38020327/13697228 +# _regex = re.compile(r"^\s*" + VERSION_PATTERN + r"\s*$", re.VERBOSE | re.IGNORECASE) + +# if bool(_regex.match(version)): + +version = os.popen("git describe --abbrev=0 --tags").read().replace("\n", "") + +# warn("version is 'unknown', falling back to {version} via git tag") + +os.system(f"grayskull pypi {name}=={version}") + +# Whether to save meta.yaml and LICENSE.txt file to a "scratch" folder for `conda build` +personal_conda_channel = False + +fpath = join(name, "meta.yaml") + +if personal_conda_channel: + fpath2 = join(name, "scratch", "meta.yaml") + Path(dirname(fpath2)).mkdir(exist_ok=True) + +my_recipe = Recipe(load_file=fpath) + +# my_recipe.add_section("outputs") +# my_recipe["outputs"] = {"name": name} +# my_recipe["outputs"].add_section("name")({"name": name.replace("-", "_")}) + +# ensure proper order for conda-forge +keys = list(my_recipe.keys()) + +# https://docs.conda.io/projects/conda-build/en/latest/resources/define-metadata.html +key_order = [ + "package", + "source", + "build", + "requirements", + "test", + "outputs", + "about", + "app", + "extra", +] +unshared_keys = np.setdiff1d(key_order, keys) + +ordered_keys = copy(key_order) +for key in unshared_keys: + ordered_keys.remove(key) + +for key in ordered_keys: + my_recipe.yaml.move_to_end(key) + +my_recipe["build"].add_section({"noarch": "python"}) + +try: + del my_recipe["build"]["skip"] +except Exception as e: + print(e) + warn("Could not delete build: skip section (probably because it didn't exist)") + +try: + del my_recipe["requirements"]["build"] +except Exception as e: + print(e) + warn("Could not delete build section (probably because it didn't exist)") + +min_py_ver = "3.6" +my_recipe["requirements"]["host"].remove("python") +my_recipe["requirements"]["host"].append(f"python >={min_py_ver}") + +my_recipe["requirements"]["run"].remove("python") +my_recipe["requirements"]["run"].append(f"python >={min_py_ver}") + +# remove the `# [py<38]` selector comment +run_section = my_recipe["requirements"]["run"] +idx = run_section.index("importlib-metadata") +my_recipe["requirements"]["run"].remove("importlib-metadata") +my_recipe["requirements"]["run"].append("importlib-metadata") + + +my_recipe["about"]["doc_url"] = "mp-time-split.readthedocs.io" + +# # sometimes package names differ between PyPI and Anaconda but haven't been registered +# # yet on grayskull (e.g. `kaleido`) +# my_recipe["requirements"]["run"].replace("kaleido", "python-kaleido") + +# # It's better to install some packages either exclusively via Anaconda or +# # via custom PyPI installation instructions (see e.g. the selectable table from: +# # https://pytorch.org/get-started/locally/) +# my_recipe["requirements"]["run"].append("pytorch >=1.9.0") +# my_recipe["requirements"]["run"].append("cudatoolkit <11.4") + +my_recipe.save(fpath) + +if personal_conda_channel: + my_recipe.save(fpath2) + copyfile("LICENSE.txt", join(dirname(fpath2), "LICENSE.txt")) diff --git a/scripts/mp_time_split/train_model.py b/scripts/mp_time_split/train_model.py new file mode 100644 index 0000000..0c0357b --- /dev/null +++ b/scripts/mp_time_split/train_model.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python +import logging +import sys +from pathlib import Path + +import click +import mp_time_split +from IPython.core import ultratb + +# fallback to debugger on error +sys.excepthook = ultratb.FormattedTB(mode="Verbose", color_scheme="Linux", call_pdb=1) +# turn UserWarning messages to errors to find the actual cause +# import warnings +# warnings.simplefilter("error") + +_logger = logging.getLogger(__name__) + + +@click.command() +@click.option( + "-c", + "--config", + "cfg_path", + required=True, + type=click.Path(exists=True), + help="path to config file", +) +@click.option("--quiet", "log_level", flag_value=logging.WARNING, default=True) +@click.option("-v", "--verbose", "log_level", flag_value=logging.INFO) +@click.option("-vv", "--very-verbose", "log_level", flag_value=logging.DEBUG) +@click.version_option(mp_time_split.__version__) +def main(cfg_path: Path, log_level: int): + logging.basicConfig( + stream=sys.stdout, + level=log_level, + datefmt="%Y-%m-%d %H:%M", + format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", + ) + # YOUR CODE GOES HERE! Keep the main functionality in src/mp_time_split + # est = mp_time_split.models.Estimator() + + +if __name__ == "__main__": + main() diff --git a/setup.cfg b/setup.cfg index f1cc6c5..85b2d99 100644 --- a/setup.cfg +++ b/setup.cfg @@ -49,17 +49,22 @@ python_requires = >=3.6 # For more information, check out https://semver.org/. install_requires = importlib-metadata; python_version<"3.8" + numpy + pandas + scipy + scikit-learn pymatgen + pyxtal + pystow + element-coder + pymatviz + matminer + pybtex + typing-extensions # smact - # matminer - scipy # hydra-core # torch # torch-geometric - mp-time-split[pyxtal] - pystow - element-coder - pymatviz [options.packages.find] @@ -70,7 +75,8 @@ exclude = [options.extras_require] # Add here additional requirements for extra features, to install with: # `pip install matbench-genmetrics[PDF]` like: -# PDF = ReportLab; RXP +api = + mp-api; python_version>="3.8" dev = conda-souschef @@ -80,27 +86,30 @@ dev = flake8 black ipykernel + pre-commit # Add here test requirements (semicolon/line-separated) testing = setuptools pytest pytest-cov - # pytest-cases + mp-api [options.entry_points] # Add here console scripts like: # console_scripts = -# script_name = matbench_genmetrics.module:function +# script_name = matbench_genmetrics.core.module:function # For example: # console_scripts = -# fibonacci = matbench_genmetrics.skeleton:run +# fibonacci = matbench_genmetrics.core.skeleton:run # And any other entry points, for example: # pyscaffold.cli = # awesome = pyscaffoldext.awesome.extension:AwesomeExtension console_scripts = - matbench-genmetrics = matbench_genmetrics.core:run - matbench_genmetrics = matbench_genmetrics.core:run + matbench-genmetrics = matbench_genmetrics.core.core:run + matbench_genmetrics = matbench_genmetrics.core.core:run + mp-time-split = matbench_genmetrics.mp_time_split.core:run + mp_time_split = matbench_genmetrics.mp_time_split.core:run [tool:pytest] # Specify command line options as you would do when invoking pytest directly. @@ -109,7 +118,10 @@ console_scripts = # CAUTION: --cov flags may prohibit setting breakpoints while debugging. # Comment those flags to avoid this pytest issue. addopts = - --cov matbench_genmetrics --cov-report term-missing + --cov + # maybe unnecessary line, https://github.com/pytest-dev/pytest-cov/issues/289 + # --include matbench_genmetrics.core, matbench_genmetrics.mp_time_split + --cov-report term-missing --verbose norecursedirs = dist @@ -143,11 +155,13 @@ exclude = [pyscaffold] # PyScaffold's parameters when the project was created. # This will be used when updating. Do not change! -version = 4.2.2.post1.dev2+ge50b5e1 -package = matbench_genmetrics +version = 4.4.1 +package = core extensions = dsproject github_actions markdown + namespace no_skeleton pre_commit +namespace = matbench_genmetrics diff --git a/setup.py b/setup.py index f358243..a260dbc 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ Setup file for matbench-genmetrics. Use setup.cfg to configure your project. - This file was generated with PyScaffold 4.2.2.post1.dev2+ge50b5e1. + This file was generated with PyScaffold 4.4.1. PyScaffold helps you to put up the scaffold of your new Python project. Learn more under: https://pyscaffold.org/ """ diff --git a/src/matbench_genmetrics/__init__.py b/src/matbench_genmetrics/core/__init__.py similarity index 100% rename from src/matbench_genmetrics/__init__.py rename to src/matbench_genmetrics/core/__init__.py diff --git a/src/matbench_genmetrics/core.py b/src/matbench_genmetrics/core/metrics.py similarity index 99% rename from src/matbench_genmetrics/core.py rename to src/matbench_genmetrics/core/metrics.py index bae5568..cddabfc 100644 --- a/src/matbench_genmetrics/core.py +++ b/src/matbench_genmetrics/core/metrics.py @@ -8,21 +8,21 @@ from typing import List, Optional import numpy as np -from mp_time_split.core import MPTimeSplit from pymatgen.core.structure import Structure from pystow import ensure_csv from scipy.stats import wasserstein_distance -from matbench_genmetrics import __version__ -from matbench_genmetrics.utils.featurize import ( +from matbench_genmetrics.core import __version__ +from matbench_genmetrics.core.utils.featurize import ( featurize_comp_struct, mod_petti_contributions, ) -from matbench_genmetrics.utils.match import ( +from matbench_genmetrics.core.utils.match import ( ALLOWED_MATCH_TYPES, cdvae_cov_compstruct_match_matrix, get_structure_match_matrix, ) +from matbench_genmetrics.mp_time_split.splitter import MPTimeSplit # causes pytest to fail (tests not found, DLL load error) # from matbench_genmetrics.cdvae.metrics import RecEval, GenEval, OptEval @@ -411,7 +411,6 @@ def __init__( self.recorded_metrics = {} def load_fingerprints(self, dummy=False): - comp_url = DUMMY_COMP_URL if dummy else FULL_COMP_URL struct_url = DUMMY_STRUCT_URL if dummy else FULL_STRUCT_URL comp_name = DUMMY_COMP_NAME if dummy else FULL_COMP_NAME @@ -455,7 +454,6 @@ def load_space_group_and_mod_petti(self, dummy=False): return self.spg_df, self.modpetti_df def get_train_and_val_data(self, fold, include_val=False): - if self.recorded_metrics == {}: self.mpt.load(dummy=self.dummy) ( diff --git a/src/matbench_genmetrics/utils/featurize.py b/src/matbench_genmetrics/core/utils/featurize.py similarity index 98% rename from src/matbench_genmetrics/utils/featurize.py rename to src/matbench_genmetrics/core/utils/featurize.py index f25e1ac..e834cf9 100644 --- a/src/matbench_genmetrics/utils/featurize.py +++ b/src/matbench_genmetrics/core/utils/featurize.py @@ -10,7 +10,7 @@ from matminer.featurizers.structure.sites import SiteStatsFingerprint from pymatgen.core.structure import Structure -from matbench_genmetrics.utils.match import get_tqdm +from matbench_genmetrics.core.utils.match import get_tqdm cnnf = CrystalNNFingerprint.from_preset("ops") ep = ElementProperty.from_preset("magpie") diff --git a/src/matbench_genmetrics/utils/match.py b/src/matbench_genmetrics/core/utils/match.py similarity index 100% rename from src/matbench_genmetrics/utils/match.py rename to src/matbench_genmetrics/core/utils/match.py diff --git a/src/matbench_genmetrics/utils/plotting.py b/src/matbench_genmetrics/core/utils/plotting.py similarity index 100% rename from src/matbench_genmetrics/utils/plotting.py rename to src/matbench_genmetrics/core/utils/plotting.py diff --git a/src/matbench_genmetrics/mp_time_split/__init__.py b/src/matbench_genmetrics/mp_time_split/__init__.py new file mode 100644 index 0000000..823f8fd --- /dev/null +++ b/src/matbench_genmetrics/mp_time_split/__init__.py @@ -0,0 +1,16 @@ +import sys + +if sys.version_info[:2] >= (3, 8): + # TODO: Import directly (no need for conditional) when `python_requires = >= 3.8` + from importlib.metadata import PackageNotFoundError, version # pragma: no cover +else: + from importlib_metadata import PackageNotFoundError, version # pragma: no cover + +try: + # Change here if project is renamed and does not equal the package name + dist_name = "matbench-genmetrics" + __version__ = version(dist_name) +except PackageNotFoundError: # pragma: no cover + __version__ = "unknown" +finally: + del version, PackageNotFoundError diff --git a/src/matbench_genmetrics/mp_time_split/splitter.py b/src/matbench_genmetrics/mp_time_split/splitter.py new file mode 100644 index 0000000..a934841 --- /dev/null +++ b/src/matbench_genmetrics/mp_time_split/splitter.py @@ -0,0 +1,407 @@ +""" +This is a skeleton file that can serve as a starting point for a Python +console script. To run this script uncomment the following lines in the +``[options.entry_points]`` section in ``setup.cfg``:: + console_scripts = + fibonacci = ${package}.skeleton:run +Then run ``pip install .`` (or ``pip install -e .`` for editable mode) +which will install the command ``fibonacci`` inside your current environment. +Besides console scripts, the header (i.e. until ``_logger``...) of this file can +also be used as template for Python modules. +Note: + This file can be renamed depending on your needs or safely removed if not needed. +References: + - https://setuptools.pypa.io/en/latest/userguide/entry_point.html + - https://pip.pypa.io/en/stable/reference/pip_install +""" + +import argparse +import logging +import sys +from hashlib import md5 +from os import environ, path +from pathlib import Path +from shutil import move +from typing import List, Optional, Tuple, Union +from urllib.request import urlretrieve + +import pandas as pd +import pybtex.errors +from matminer.utils.io import load_dataframe_from_json +from typing_extensions import Literal + +from matbench_genmetrics.mp_time_split import __version__ +from matbench_genmetrics.mp_time_split.utils.data import ( + DUMMY_SNAPSHOT_NAME, + SNAPSHOT_NAME, +) +from matbench_genmetrics.mp_time_split.utils.split import AVAILABLE_MODES, mp_time_split + +pybtex.errors.set_strict_mode(False) + +__author__ = "sgbaird" +__copyright__ = "sgbaird" +__license__ = "MIT" +_logger = logging.getLogger(__name__) + +# ---- Python API ---- +# The functions defined in this section can be imported by users in their +# Python scripts/interactive interpreter, e.g. via +# `from ${qual_pkg}.skeleton import fib`, +# when using this Python module as a library. + + +def fib(n): + """Fibonacci example function + + Args: + n (int): integer + Returns: + int: n-th Fibonacci number + """ + assert n > 0 + a, b = 1, 1 + for _i in range(n - 1): + a, b = b, a + b + return a + + +FOLDS = [0, 1, 2, 3, 4] +dummy_checksum_frozen = "6bf42266bd71477a06b24153d4ff7889" +full_checksum_frozen = "57da7fa4d96ffbbc0dd359b1b7423f31" + + +def get_data_home(data_home=None): + """ + Selects the home directory to look for datasets, if the specified home + directory doesn't exist the directory structure is built + + Modified from source: + https://github.com/hackingmaterials/matminer/blob/76a529b769055c729d62f11a419d319d8e2f838e/matminer/datasets/utils.py#L26-L43 # noqa:E501 + + Args: + data_home (str): folder to look in, if None a default is selected + + Returns (str) + """ + + # If user doesn't specify a dataset directory: first check for env var, + # then default to the "matminer/datasets/" package folder + if data_home is None: + data_home = environ.get( + "MP_TIME_DATA", path.join(path.dirname(path.abspath(__file__)), "utils") + ) + + data_home = path.expanduser(data_home) + + return data_home + + +class MPTimeSplit: + def __init__( + self, + num_sites: Optional[Tuple[int, int]] = None, + elements: Optional[List[str]] = None, + exclude_elements: Optional[ + Union[List[str], Literal["noble", "radioactive", "noble+radioactive"]] + ] = None, + use_theoretical: bool = False, + mode: str = "TimeSeriesSplit", + target: str = "energy_above_hull", + save_dir=None, + ) -> None: + if mode not in AVAILABLE_MODES: + raise NotImplementedError( + f"mode={mode} not implemented. Use one of {AVAILABLE_MODES}" + ) + + self.num_sites = num_sites + self.elements = elements + self.exclude_elements = exclude_elements + self.use_theoretical = use_theoretical + self.mode = mode + self.folds = FOLDS + + if save_dir is None: + self.save_dir = get_data_home() + else: + self.save_dir = save_dir + + Path(self.save_dir).mkdir(exist_ok=True, parents=True) + + self.target = target + + def fetch_data(self, one_by_one=False): + try: + from matbench_genmetrics.mp_time_split.utils.api import fetch_data + except ImportError as e: + raise ImportError( + "Failed to import `fetch_data()`. Try `pip install mp_time_split[api]` or `pip install mp-api` to install the optional `mp-api` dependency. Note that this requires Python >=3.8" # noqa: E501 + ) from e + + self.data = fetch_data( + num_sites=self.num_sites, + elements=self.elements, + exclude_elements=self.exclude_elements, + use_theoretical=self.use_theoretical, + one_by_one=one_by_one, + ) + if not isinstance(self.data, pd.DataFrame): + raise ValueError("`self.data` is not a `pd.DataFrame`") + + self.trainval_splits, self.test_split = mp_time_split( + self.data, n_cv_splits=len(FOLDS), mode=self.mode + ) + self.inputs = self.data.structure + self.outputs = getattr(self.data, self.target) + return self.data + + def load(self, url=None, checksum=None, dummy=False, force_download=False): + name = SNAPSHOT_NAME if not dummy else DUMMY_SNAPSHOT_NAME + name = name + ".gz" + data_path = path.join(self.save_dir, name) + + is_on_disk = Path(data_path).is_file() + + if force_download or not is_on_disk: + if dummy and url is None and checksum is None: + # dummy data from figshare for testing + url = "https://figshare.com/ndownloader/files/35592005" + checksum_frozen = dummy_checksum_frozen + elif not dummy and url is None and checksum is None: + # full dataset from figshare for production + url = "https://figshare.com/ndownloader/files/35592011" + checksum_frozen = full_checksum_frozen + elif url is None: + raise ValueError( + f"url should not be None at this point. url: {url}, type: {type(url)}" # noqa: E501 + ) + else: + checksum_frozen = None + + # download to temp file in case interrupted partway + data_path_tmp = data_path + "tmp" + urlretrieve(url, data_path_tmp) + move(data_path_tmp, data_path) + else: + checksum_frozen = None + + checksum = md5(Path(data_path).read_bytes()).hexdigest() + + if checksum_frozen is not None and checksum != checksum_frozen: + raise ValueError( + f"checksum from {url} ({checksum}) does not match what was expected {checksum_frozen})" # noqa: E501 + ) + + expt_df = load_dataframe_from_json(data_path) + self.data = expt_df + self.trainval_splits, self.test_split = mp_time_split( + self.data, n_cv_splits=len(FOLDS), mode=self.mode + ) + self.inputs = self.data.structure + self.outputs = getattr(self.data, self.target) + + return self.data + + def get_train_and_val_data(self, fold): + if self.data is None: + raise NameError("`fetch_data()` must be run first.") + if fold not in FOLDS: + raise ValueError(f"fold={fold} should be one of {FOLDS}") + + # self.y = self.data[] + train_inputs, val_inputs = [ + self.inputs.iloc[tvs] for tvs in self.trainval_splits[fold] + ] + train_outputs, val_outputs = [ + self.outputs.iloc[tvs] for tvs in self.trainval_splits[fold] + ] + return train_inputs, val_inputs, train_outputs, val_outputs + + def get_test_data(self): + if self.data is None: + raise NameError("`fetch_data()` must be run first.") + + train_inputs, test_inputs = [self.inputs.iloc[ts] for ts in self.test_split] + train_outputs, test_outputs = [self.outputs.iloc[ts] for ts in self.test_split] + + return train_inputs, test_inputs, train_outputs, test_outputs + + +# ---- CLI ---- +# The functions defined in this section are wrappers around the main Python +# API allowing them to be called directly from the terminal as a CLI +# executable/script. + + +def parse_args(args): + """Parse command line parameters + Args: + args (List[str]): command line parameters as list of strings + (for example ``["--help"]``). + Returns: + :obj:`argparse.Namespace`: command line parameters namespace + """ + parser = argparse.ArgumentParser( + description="For downloading mp-time-split snapshot." + ) + parser.add_argument( + "--version", + action="version", + version=f"$mp_time_split {__version__}", + ) + parser.add_argument( + "-s", + "--save-dir", + dest="save_dir", + default=".", + help="Directory in which to save json.gz snapshot.", + type=str, + metavar="STRING", + ) + parser.add_argument( + "-v", + "--verbose", + dest="loglevel", + help="set loglevel to INFO", + action="store_const", + const=logging.INFO, + ) + parser.add_argument( + "-vv", + "--very-verbose", + dest="loglevel", + help="set loglevel to DEBUG", + action="store_const", + const=logging.DEBUG, + ) + return parser.parse_args(args) + + +def setup_logging(loglevel): + """Setup basic logging + Args: + loglevel (int): minimum loglevel for emitting messages + """ + logformat = "[%(asctime)s] %(levelname)s:%(name)s:%(message)s" + logging.basicConfig( + level=loglevel, stream=sys.stdout, format=logformat, datefmt="%Y-%m-%d %H:%M:%S" + ) + + +def main(args): + """Wrapper allowing :func:`fib` to be called with string arguments in a CLI fashion + Instead of returning the value from :func:`fib`, it prints the result to the + ``stdout`` in a nicely formatted message. + Args: + args (List[str]): command line parameters as list of strings + (for example ``["--verbose", "./data"]``). + """ + args = parse_args(args) + setup_logging(args.loglevel) + _logger.debug("Beginning download of mp-time-split snapshot") + mpt = MPTimeSplit(save_dir=args.save_dir) + mpt.load() + _logger.info(f"The snapshot is saved at {args.save_dir}") + + +def run(): + """Calls :func:`main` passing the CLI arguments extracted from :obj:`sys.argv` + This function can be used as entry point to create console scripts with setuptools. + """ + main(sys.argv[1:]) + + +if __name__ == "__main__": + # ^ This is a guard statement that will prevent the following code from + # being executed in the case someone imports this file instead of + # executing it as a script. + # https://docs.python.org/3/library/__main__.html + # After installing your project with pip, users can also run your Python + # modules as scripts via the ``-m`` flag, as defined in PEP 338:: + # + # python -m mp_time_split.core 42 + # + run() + +# %% Code Graveyard +# doi_results = mpr.doi.search(nsites=nsites, elements=elements, fields=doi_fields) +# https://github.com/materialsproject/api/issues/612 +# doi_results = [mpr.doi.get_data_by_id(mid) for mid in material_id] +# dict(material_id=material_id, structure=structure, +# theoretical=theoretical), +# dict(f"{field}"=) +# material_id = [] +# structure = [] +# theoretical = [] +# material_id.append(str(r.material_id)) +# structure.append(r.structure) +# theoretical.append(r.theoretical) + +# mpr.provenance.search(nsites=nsites, elements=elements) + +# download MP entries +# doi_fields = ["doi", "bibtex", "task_id"] + + +# n_compounds = df.shape[0] + +# n_splits = 5 +# split_type = "TimeSeriesSplit" + +# def split(df, n_compounds, n_splits, split_type): +# if split_type == "TimeSeriesSplit": +# # TimeSeriesSplit +# tscv = TimeSeriesSplit(gap=0, n_splits=n_splits + 1) +# splits = list(tscv.split(df)) + +# elif split_type == "TimeSeriesOverflow": +# all_index = list(range(n_compounds)) +# tscv = TimeSeriesSplit(gap=0, n_splits=n_splits + 1) +# train_indices = [] +# test_indices = [] +# for tri, _ in tscv.split(df): +# train_indices.append(tri) +# # use remainder of data rather than default `test_index` +# test_indices.append(np.setdiff1d(all_index, tri)) + +# splits = list(zip(train_indices, test_indices)) + +# elif split_type == "TimeKFold": +# kf = KFold(n_splits=n_splits + 2) +# splits = [indices[1] for indices in kf.split(df)] +# splits.pop(-1) + +# running_index = np.empty(0, dtype=int) +# train_indices = [] +# test_indices = [] +# all_index = list(range(n_compounds)) +# for s in splits: +# running_index = np.concatenate((running_index, s)) +# train_indices.append(running_index) +# test_indices.append(np.setdiff1d(all_index, running_index)) + +# splits = list(zip(train_indices, test_indices)) + +# for train_index, test_index in splits: +# print("TRAIN:", train_index, "TEST:", test_index) + +# split(df, n_compounds, n_splits, split_type) +# yield train_index, test_index + +# for train_index, test_index in kf.split(df): +# print("TRAIN:", train_index, "TEST:", test_index) + +# load_dataframe_from_json(data_path) +# with zopen(data_path, "rb") as f: +# self.data = pd.DataFrame.read_json(json.load(f)) + +# with zopen(data_path, "r") as f: +# expt_df = jsonpickle.decode(f.read()) + +# with urlopen("test.com/csv?date=2019-07-17") as f: +# jsonl = f.read().decode('utf-8') +# data_home = environ.get("MP_TIME_DATA", path.dirname(path.abspath(__file__))) + +# with open(data_path, "r") as f: +# expt_df = jsonpickle.decode(f.read()) diff --git a/src/matbench_genmetrics/mp_time_split/utils/api.py b/src/matbench_genmetrics/mp_time_split/utils/api.py new file mode 100644 index 0000000..29a97ef --- /dev/null +++ b/src/matbench_genmetrics/mp_time_split/utils/api.py @@ -0,0 +1,222 @@ +from typing import List, Optional, Tuple, Union + +import pandas as pd + +try: + from mp_api.client import MPRester +except Exception as e: + print(e) + print("Falling back to from mp_api import MPRester") + from mp_api import MPRester + + +from mp_api.client.core.client import DEFAULT_API_KEY +from tqdm import tqdm +from typing_extensions import Literal + +from matbench_genmetrics.mp_time_split.utils.data import ( + get_discovery_dict, + noble, + radioactive, +) + +# ensure match between following and `Literal` type hint for `exclude_elements` +AVAILABLE_EXCLUDE_STRS = ["noble", "radioactive", "noble+radioactive"] + + +def fetch_data( + api_key: Union[str, DEFAULT_API_KEY] = DEFAULT_API_KEY, + fields: Optional[List[str]] = [ + "structure", + "material_id", + "theoretical", + "energy_above_hull", + "formation_energy_per_atom", + ], + num_sites: Optional[Tuple[int, int]] = None, + elements: Optional[List[str]] = None, + exclude_elements: Optional[ + Union[List[str], Literal["noble", "radioactive", "noble+radioactive"]] + ] = None, + use_theoretical: bool = False, + return_both_if_experimental: bool = False, + one_by_one: bool = False, + **search_kwargs, +) -> Union[pd.DataFrame, Tuple[pd.DataFrame, pd.DataFrame]]: + """Retrieve MP data sorted by MPID (theoretical+exptl) or pub year (exptl). + + See `*How do I do a time-split of Materials Project entries? e.g. pre-2018 vs. + post-2018* `_ + + Output ``DataFrame``-s will contain all specified `fields` unless ``fields is + None``, in which case all :func:`MPRester().summary.available_fields` will be + returned. If return experimental data, the additional fields of ``provenance``, + ``discovery`` and ``year`` corresponding to + :func:`emmet.core.provenance.ProvenanceDoc`, a dictionary containing earliest year + and author information, and the earliest year, respectively, will also be returned. + + Parameters + ---------- + api_key : Union[str, DEFAULT_API_KEY] + :func:`mp_api` API Key. On Windows, can set as an environment variable via: + ``setx MP_API_KEY="abc123def456"``. By default: + :func:`mp_api.core.client.DEFAULT_API_KEY` + See also: + https://github.com/materialsproject/api/issues/566#issuecomment-1087941474 + fields : Optional[List[str]] + fields (List[str]): List of fields to project. When searching, it is better to + only ask for the specific fields of interest to reduce the time taken to + retrieve the documents. See the :func:`MPRester().summary.available_fields` + property to see a list of fields to choose from. By default: + ``["structure", "material_id", "theoretical"]``. + num_sites : Tuple[int, int] + Tuple of min and max number of sites used as filtering criteria, e.g. ``(1, + 52)`` meaning at least ``1`` and no more than ``52`` sites. If ``None`` then no + compounds with any number of sites are allowed. By default None. + elements : List[str] + List of element symbols, e.g. ``["Ni", "Fe"]``. If ``None`` then all elements + are allowed. By default None. + exclude_elements : Optional[ + Union[List[str], Literal["noble", "radioactive", + "noble+radioactive"]] + ] + List of element symbols to _exclude_, e.g. ``["Ar", "Ne"]``. If ``None`` then + all elements are allowed. If a supported string value ("noble", "radioactive", + or "noble+radioactive"), then filters out the appropriate elements. By default + None. + use_theoretical : bool, optional + Whether to include both theoretical and experimental compounds or to filter down + to only experimentally-verified compounds, by default False + return_both_if_experimental : bool, optional + Whether to return both the full DataFrame containing theoretical+experimental + (`df`) and the experimental-only DataFrame (`expt_df`) or only `expt_df`, by + default False. This is only applicable if `use_theoretical` is False. + search_kwargs : dict, optional + kwargs: Supported search terms, e.g. nelements_max=3 for the "materials" search + API. Consult the specific API route for valid search terms, + i.e. :func:`MPRester().summary.available_fields` + + Returns + ------- + df : pd.DataFrame + if `use_theoretical` then returns a DataFrame containing both theoretical and + experimental compounds. + expt_df, df : Tuple[pd.DataFrame, pd.DataFrame] + if not `use_theoretical` and `return_both_if_experimental, then returns two + :func:`pd.DataFrame`-s containing theoretical+experimental and + experimental-only. + expt_df : pd.DataFrame + if not `use_theoretical` and not `return_both_if_experimental`, then returns a + :func:`pd.DataFrame` containing the experimental-only compounds. + + Examples + -------- + >>> api_key = "abc123def456" + >>> num_sites = (1, 52) + >>> elements = ["V"] + >>> expt_df = retrieve_data(api_key, num_sites=num_sites, elements=elements) + + >>> df = retrieve_data( + api_key, + num_sites=num_sites, + elements=elements, + use_theoretical=True + ) + + >>> expt_df, df = retrieve_data( + api_key, + num_sites=num_sites, + elements=elements, + use_theoretical=False, + return_both_if_experimental + ) + """ + if fields is not None: + if "material_id" not in fields: + fields.append("material_id") + if not use_theoretical and "theoretical" not in fields: + fields.append("theoretical") + + if exclude_elements is None: + excl_elems = None + elif isinstance(exclude_elements, str): + if exclude_elements not in AVAILABLE_EXCLUDE_STRS: + raise NotImplementedError( + f"Because str passed to `exclude_elements` instead of list of str, expected one of {AVAILABLE_EXCLUDE_STRS}" # noqa: E501 + ) + if exclude_elements == "noble": + excl_elems = noble + elif exclude_elements == "radioactive": + excl_elems = radioactive + elif exclude_elements == "noble+radioactive": + excl_elems = noble + radioactive + else: + excl_elems = exclude_elements + + with MPRester(api_key) as mpr: + results = mpr.summary.search( + num_sites=num_sites, + elements=elements, + exclude_elements=excl_elems, + fields=fields, + **search_kwargs, + ) + + if fields is not None: + field_data = [] + for r in results: + field_data.append({field: getattr(r, field) for field in fields}) + else: + field_data = results + + material_id = [str(fd["material_id"]) for fd in field_data] + + # mvc values get distinguished by a negative sign + index = [ + int(mid.replace("mp-", "").replace("mvc-", "-")) for mid in material_id + ] + df = pd.DataFrame(field_data, index=index) + df = df.sort_index() + + if not use_theoretical: + # REVIEW: whether to use MPID class or str of MPIDs? + # if latter, `expt_df.material_id.apply(str).tolist()` + expt_df = df.query("theoretical == False") + expt_material_id = expt_df.material_id.tolist() + + if not one_by_one: + # https://github.com/materialsproject/api/issues/613 + provenance_results = mpr.provenance.search( + fields=["references", "material_id"] + ) + provenance_ids = [fpr.material_id for fpr in provenance_results] + prov_df = pd.Series( + name="provenance", data=provenance_results, index=provenance_ids + ) + expt_provenance_results = prov_df.loc[expt_material_id] + else: + # slow version + expt_provenance_results = [ + mpr.provenance.get_data_by_id(mid) for mid in tqdm(expt_material_id) + ] + # CrystalSystem not JSON serializable, see + # https://github.com/materialsproject/api/issues/615 + # expt_df["provenance"] = expt_provenance_results + + # extract earliest ICSD year + references = [pr.references for pr in expt_provenance_results] + discovery = get_discovery_dict(references) + year = [disc["year"] for disc in discovery] + # https://stackoverflow.com/a/35387129/13697228 + expt_df = expt_df.assign( + references=references, discovery=discovery, year=year + ) + + expt_df = expt_df.sort_values(by=["year"]) + + if use_theoretical: + return df + elif return_both_if_experimental: + return expt_df, df + else: + return expt_df diff --git a/src/matbench_genmetrics/mp_time_split/utils/data.py b/src/matbench_genmetrics/mp_time_split/utils/data.py new file mode 100644 index 0000000..cb070c5 --- /dev/null +++ b/src/matbench_genmetrics/mp_time_split/utils/data.py @@ -0,0 +1,80 @@ +import re +from typing import List + +import pybtex.errors +from pybtex.database.input import bibtex +from tqdm import tqdm + +pybtex.errors.set_strict_mode(False) + +SNAPSHOT_NAME = "mp_time_summary.json" +DUMMY_SNAPSHOT_NAME = "mp_dummy_time_summary.json" + +noble = ["He", "Ar", "Ne", "Kr", "Xe", "Og", "Rn"] +# fmt: off +radioactive = ["U", "Th", "Ra", "Pu", "Po", "Rn", "Cm", "At", "Bk", "Fr", "Ac", "Am", "Bh", "Cf", "Np", "Ts", "Tc", "Md", "Lr", "Fm", "Hs", "Mt", "No", "Pm", "Rf", "Sg", "Ds", "Cn", "Rg", "Lv", "Og", "Fl", "Nh", "Db", "Es", "Mc", "Pa", "Bi", "Cs"] # noqa: E501 +# fmt: on + + +def get_discovery_dict(references: List[dict]) -> List[dict]: + """Get a dictionary containing earliest bib info for each MP entry. + + Modified from source: + "How do I do a time-split of Materials Project entries? e.g. pre-2018 vs. post-2018" + https://matsci.org/t/42584/4?u=sgbaird, answer by @Joseph_Montoya, Materials Project Alumni + + Parameters + ---------- + provenance_results : List[dict] + List of references results, e.g. taken from from the ``ProvenanceRester`` API + results (:func:`mp_api.provenance`) + + Returns + ------- + discovery, List[dict] + Dictionary containing earliest bib info for each MP entry with keys: ``["year", + "authors", "num_authors"]`` + + Examples + -------- + >>> with MPRester(api_key) as mpr: + ... provenance_results = mpr.provenance.search(num_sites=(1, 4), elements=["V"]) + >>> discovery = get_discovery_dict(provenance_results) + [{'year': 1963, 'authors': ['Raub, E.', 'Fritzsche, W.'], 'num_authors': 2}, {'year': 1925, 'authors': ['Becker, K.', 'Ebert, F.'], 'num_authors': 2}, {'year': 1965, 'authors': ['Giessen, B.C.', 'Grant, N.J.'], 'num_authors': 2}, {'year': 1957, 'authors': ['Philip, T.V.', 'Beck, P.A.'], 'num_authors': 2}, {'year': 1963, 'authors': ['Darby, J.B.jr.'], 'num_authors': 1}, {'year': 1977, 'authors': ['Aksenova, T.V.', 'Kuprina, V.V.', 'Bernard, V.B.', 'Skolozdra, R.V.'], 'num_authors': 4}, {'year': 1964, 'authors': ['Maldonado, A.', 'Schubert, K.'], 'num_authors': 2}, {'year': 1962, 'authors': ['Darby, J.B.jr.', 'Lam, D.J.', 'Norton, L.J.', 'Downey, J.W.'], 'num_authors': 4}, {'year': 1925, 'authors': ['Becker, K.', 'Ebert, F.'], 'num_authors': 2}, {'year': 1959, 'authors': ['Dwight, A.E.'], 'num_authors': 1}] # noqa: E501 + """ + discovery = [] + for refs in tqdm(references): + parser = bibtex.Parser() + refs = "".join(refs) + refs = parser.parse_string(refs) + entries = refs.entries + entries_by_year = [ + (int(entry.fields["year"]), entry) + for _, entry in entries.items() + if "year" in entry.fields and re.match(r"\d{4}", entry.fields["year"]) + ] + if entries_by_year: + entries_by_year = sorted(entries_by_year, key=lambda x: x[0]) + first_report = { + "year": entries_by_year[0][0], + "authors": entries_by_year[0][1].persons["author"], + } + first_report["authors"] = [str(auth) for auth in first_report["authors"]] + first_report["num_authors"] = len(first_report["authors"]) + discovery.append(first_report) + else: + discovery.append(dict(year=None, authors=None, num_authors=None)) + return discovery + + +# def encode_dataframe(df): +# jsonpickle_pandas.register_handlers() +# return jsonpickle.encode(df) + + +# def decode_dataframe_from_string(string): +# jsonpickle_pandas.register_handlers() +# return jsonpickle.decode(string, classes=[Structure]) + + +# %% Code graveyard diff --git a/src/matbench_genmetrics/mp_time_split/utils/gen.py b/src/matbench_genmetrics/mp_time_split/utils/gen.py new file mode 100644 index 0000000..e21f4f5 --- /dev/null +++ b/src/matbench_genmetrics/mp_time_split/utils/gen.py @@ -0,0 +1,23 @@ +try: + from pyxtal import pyxtal +except ImportError as e: + print(e) + print( + "Failed to import pyxtal. Try `pip install mp_time_split[pyxtal]` or `pip install pyxtal`" # noqa: E501 + ) + + +class DummyGenerator: + def __init__(self): + pass + + def fit(self, inputs): + inputs + + def gen(self, n=100): + crystal = pyxtal() + structures = [] + for _ in range(n): + crystal.from_random(3, 99, ["Ba", "Ti", "O"], [1, 1, 3]) + structures.append(crystal.to_pymatgen()) + return structures diff --git a/src/matbench_genmetrics/mp_time_split/utils/mp_dummy_time_summary.json b/src/matbench_genmetrics/mp_time_split/utils/mp_dummy_time_summary.json new file mode 100644 index 0000000..fb359b8 --- /dev/null +++ b/src/matbench_genmetrics/mp_time_split/utils/mp_dummy_time_summary.json @@ -0,0 +1 @@ +{"index": [146, 925, 1282, 1335, 12778, 2540, 316, 1395], "columns": ["structure", "material_id", "theoretical", "energy_above_hull", "formation_energy_per_atom", "references", "discovery", "year"], "data": [[{"@module": "pymatgen.core.structure", "@class": "Structure", "charge": 0, "lattice": {"matrix": [[2.43511876, 0.0, -0.86094488], [-1.21755938, 2.10887451, -0.86094488], [-0.0, -0.0, 2.58283362]], "pbc": [true, true, true], "a": 2.5828336109207948, "b": 2.5828334497508623, "c": 2.58283362, "alpha": 109.47122996959392, "beta": 109.47122870554041, "gamma": 109.47121382749214, "volume": 13.263780153478194}, "sites": [{"species": [{"element": "V", "occu": 1}], "abc": [0.0, 0.0, -0.0], "xyz": [0.0, 0.0, 0.0], "label": "V", "properties": {"magmom": -0.0}}], "@version": null}, "mp-146", false, 0.0, 0.0, ["@article{Karen2005,\n author = \"Karen, P. and Suard, E. and Fauth, F.\",\n title = \"Crystal structure of stoichiometric Y Ba2 Fe3 O9\",\n journal = \"Inorganic Chemistry\",\n year = \"2005\",\n volume = \"44\",\n pages = \"8170-8172\",\n ASTM_id = \"INOCAJ\"\n}\n", "@article{Wexler1952,\n author = \"Wexler, A. and Corak, W.S.\",\n title = \"Superconductivity of vanadium\",\n journal = \"Physical Review (1,1893-132,1963/141,1966-188,1969)\",\n year = \"1952\",\n volume = \"85\",\n pages = \"85-90\",\n ASTM_id = \"PHRVAO\"\n}\n", "@article{Neuburger1936,\n author = \"Neuburger, M.C.\",\n title = \"Praezisionsmessung der Gitterkonstante von reinem Vanadium\",\n journal = \"Zeitschrift fuer Kristallographie, Kristallgeometrie, Kristallphysik, Kristallchemie (-144,1977)\",\n year = \"1936\",\n volume = \"93\",\n pages = \"314-315\",\n ASTM_id = \"ZEKGAX\"\n}\n", "@article{Hull1922,\n author = \"Hull, A.W.\",\n title = \"Crystal structure of common elements\",\n journal = \"Physical Review (1,1893-132,1963/141,1966-188,1969)\",\n year = \"1922\",\n volume = \"20\",\n pages = \"113-113\",\n ASTM_id = \"PHRVAO\"\n}\n", "@article{Smirnov1966,\n author = \"Smirnov, Yu.M. and Finkel', V.A.\",\n title = \"Crystal structure of tantalum, niobium, and vanadium at 110-400 K\",\n journal = \"Soviet Physics - JETP\",\n year = \"1966\",\n volume = \"22\",\n pages = \"750-753\",\n ASTM_id = \"SPHJAR\"\n}\n", "@article{Srivastava2011,\n author = \"Srivastava, A. and Chauhan, M. and Singh, R.K.\",\n title = \"Pressure induced phase transitions in transition metal nitrides: ab initio study\",\n journal = \"Physica Status Solidi B - Basic Solid State Physics\",\n year = \"2011\",\n volume = \"248\",\n pages = \"2793-2800\",\n ASTM_id = \"PSSBBD\"\n}\n", "@article{Finkel'1969,\n author = \"Finkel', V.A. and Glamazda, V.I. and Kovtun, G.B.\",\n title = \"A phase transition in vanadium\",\n journal = \"Zhurnal Eksperimental'noi i Teoreticheskoi Fiziki\",\n year = \"1969\",\n volume = \"57\",\n pages = \"1065-1068\",\n ASTM_id = \"ZETFA7\"\n}\n", "@article{Straumanis1959,\n author = \"Straumanis, M.E.\",\n title = \"Absorption correction in precision determination of lattice parameters\",\n journal = \"Journal of Applied Physics\",\n year = \"1959\",\n volume = \"30\",\n pages = \"1965-1969\",\n ASTM_id = \"JAPIAU\"\n}\n", "@article{Seybolt1953,\n author = \"Seybolt, A.U. and Sumsion, H.T.\",\n title = \"Vanadium-oxygen solid solutions\",\n journal = \"Journal of Metals\",\n year = \"1953\",\n volume = \"5\",\n pages = \"292-299\",\n ASTM_id = \"JOMTAA\"\n}\n", "@article{Sandor1958,\n author = \"Sandor, E. and Wooster, W.A.\",\n title = \"Extra streaks in the X-ray diffraction pattern of vanadium single crystals\",\n journal = \"Nature (London)\",\n year = \"1958\",\n volume = \"182\",\n pages = \"1435-1436\",\n ASTM_id = \"NATUAS\"\n}\n", "@article{Bradford1962,\n author = \"Bradford, S.A. and Carlson, O.N.\",\n title = \"Effect of oxygen on the lattice constant, hardness and ductility of vanadium\",\n journal = \"Transactions of the American Society for Metals\",\n year = \"1962\",\n volume = \"55\",\n pages = \"169-178\",\n ASTM_id = \"TASEA7\"\n}\n", "@article{Beatty1952,\n author = \"Beatty, S.\",\n title = \"Note on the effect of oxygen and nitrogen on the hardness and lattice parameter of high purity vanadium\",\n journal = \"Journal of Metals\",\n year = \"1952\",\n volume = \"4\",\n pages = \"987-988\",\n ASTM_id = \"JOMTAA\"\n}\n", "@article{Carlson1961,\n author = \"Carlson, O.N. and Owen, C.V.\",\n title = \"Preparation of high purity vanadium by the iodide refining process\",\n journal = \"Journal of the Electrochemical Society\",\n year = \"1961\",\n volume = \"108\",\n pages = \"88-93\",\n ASTM_id = \"JESOAN\"\n}\n", "@article{KurtLejaegher2014,\n author = \"Lejaeghere, Kurt and Speybroeck, Veronique Van and Oost, Guido Van and Cottenier, Stefaan\",\n title = \"Error estimates for solid-state density-functional theory predictions: an overview by means of the ground-state elemental crystals\",\n journal = \"Critical Reviews in Solid State and Materials Sciences\",\n year = \"2014\",\n volume = \"39\",\n pages = \"1-24\",\n ASTM_id = \"CCRSDA\"\n}\n", "@article{Evans2009,\n author = \"Evans, M.J. and Kranak, V.F. and Garcia-Garcia, F.J. and Holland, G.P. and Daemen, L.L. and Proffen, T. and Myeong, Lee and Sankey, O.F. and Haeussermann, U.\",\n title = \"Structural and dynamic properties of Ba In Ge H: A rare solid - state indium hydride\",\n journal = \"Inorganic Chemistry\",\n year = \"2009\",\n volume = \"48\",\n pages = \"5602-5604\",\n ASTM_id = \"INOCAJ\"\n}\n", "@article{Khaenko1978,\n author = \"Khaenko, B.V.\",\n title = \"X-ray examination of phase equilibria in V - N system\",\n journal = \"Dopovidi Akademii Nauk Ukrains'koi RSR, Seriya A: Fiziko-Matematichni Ta Tekhnichni Nauki\",\n year = \"1978\",\n volume = \"40\",\n pages = \"275-279\",\n ASTM_id = \"DNUNDU\"\n}\n", "@article{Rudy1963,\n author = \"Rudy, E. and Benesovsky, F. and Toth, L.\",\n title = \"Untersuchung der Dreistoffsysteme der Va- und VIa-Metalle mit Bor und Kohlenstoff\",\n journal = \"Zeitschrift fuer Metallkunde\",\n year = \"1963\",\n volume = \"54\",\n pages = \"345-353\",\n ASTM_id = \"ZEMTAE\"\n}\n", "@article{James1960,\n author = \"James, W.J. and Straumanis, M.E.\",\n title = \"Lattice parameter and expansion coefficient of vanadium\",\n journal = \"Journal of the Electrochemical Society\",\n year = \"1960\",\n volume = \"107\",\n pages = \"69-69\",\n ASTM_id = \"JESOAN\"\n}\n", "@article{Schmitz-Pranghe1968,\n author = \"Schmitz-Pranghe, N. and Duenner, P.\",\n title = \"Gitterstruktur und thermische Ausdehnung der Uebergangsmetalle Scandium, Titan, Vanadin und Mangan\",\n journal = \"Zeitschrift fuer Metallkunde\",\n year = \"1968\",\n volume = \"59\",\n pages = \"377-382\",\n ASTM_id = \"ZEMTAE\"\n}\n", "@article{Vasyutinskii1966,\n author = \"Vasyutinskii, B.M. and Kartmazov, G.N. and Smirnov, Yu.M. and Finkel', V.A.\",\n title = \"High-temperature crystalline structure of niobium and vanadium\",\n journal = \"Physics of Metals and Metallography\",\n year = \"1966\",\n volume = \"21\",\n pages = \"134-135\",\n ASTM_id = \"PHMMA6\"\n}\n", "@article{Jain2013,\nauthor = {Jain, Anubhav and Ong, Shyue Ping and Hautier, Geoffroy and Chen, Wei and Richards, William Davidson and Dacek, Stephen and Cholia, Shreyas and Gunter, Dan and Skinner, David and Ceder, Gerbrand and Persson, Kristin a.},\ndoi = {10.1063/1.4812323},\nissn = {2166532X},\njournal = {APL Materials},\nnumber = {1},\npages = {011002},\ntitle = {{The Materials Project: A materials genome approach to accelerating materials innovation}},\nurl = {http://link.aip.org/link/AMPADS/v1/i1/p011002/s1\\&Agg=doi},\nvolume = {1},\nyear = {2013}\n}\n\n@misc{MaterialsProject,\ntitle = {{Materials Project}},\nurl = {http://www.materialsproject.org}\n}"], {"year": 1922, "authors": ["Hull, A.W."], "num_authors": 1}, 1922], [{"@module": "pymatgen.core.structure", "@class": "Structure", "charge": 0, "lattice": {"matrix": [[0.0, 2.062465, 2.062465], [2.062465, 0.0, 2.062465], [2.062465, 2.062465, 0.0]], "pbc": [true, true, true], "a": 2.9167659749198256, "b": 2.9167659749198256, "c": 2.9167659749198256, "alpha": 60.00000000000001, "beta": 60.00000000000001, "gamma": 60.00000000000001, "volume": 17.546469976096787}, "sites": [{"species": [{"element": "V", "occu": 1}], "abc": [0.0, 0.0, 0.0], "xyz": [0.0, 0.0, 0.0], "label": "V", "properties": {"magmom": 0.005}}, {"species": [{"element": "N", "occu": 1}], "abc": [0.5, 0.5, 0.5], "xyz": [2.062465, 2.062465, 2.062465], "label": "N", "properties": {"magmom": -0.0}}], "@version": null}, "mp-925", false, 0.1901050299999998, -1.1519160225, ["@article{Duwez1950,\n author = \"Duwez, P. and Odell, F.\",\n title = \"Phase relationships in the binary systems of nitrides and carbides of zirconium, columbium, titanium, and vanadium\",\n journal = \"Journal of the Electrochemical Society\",\n year = \"1950\",\n volume = \"97\",\n pages = \"299-304\",\n ASTM_id = \"JESOAN\"\n}\n", "@article{Pflueger1984,\n author = \"Pflueger, J. and Fink, J. and Weber, W. and Bohnen, K.P. and Crecelius, G.\",\n title = \"Dielectric properties of Ti Cx, Ti Nx, V Cx, and V Nx from 1.5 to 40 eV determined by electron-energy-loss spectroscopy\",\n journal = \"Physical Review, Serie 3. B - Condensed Matter (18,1978-)\",\n year = \"1984\",\n volume = \"30\",\n pages = \"1155-1163\",\n ASTM_id = \"PRBMDO\"\n}\n", "@article{Brager1940,\n author = \"Brager, A. and Epelbaum, V.\",\n title = \"An X-ray examination of vavadium nitride II. A precision determination of the unit cube edge of vanadium nitride\",\n journal = \"Acta Physica et Chemica\",\n year = \"1940\",\n volume = \"13\",\n pages = \"600-603\",\n ASTM_id = \"AUSHAF\"\n}\n", "@article{Gatterer1975,\n author = \"Gatterer, J. and Dufek, G. and Ettmayer, P. and Kieffer, R.\",\n title = \"Das kubische Tantalmononitrid (B 1-Typ) und seine Mischbarkeit mit den isotypen Uebergangsmetallnitriden und-carbiden\",\n journal = \"Monatshefte fuer Chemie\",\n year = \"1975\",\n volume = \"106\",\n pages = \"1137-1147\",\n ASTM_id = \"MOCMB7\"\n}\n", "@article{Nowotny1960,\n author = \"Nowotny, H.N. and Benesovsky, F. and Rudy, E.\",\n title = \"Hochschmelzende Systeme mit Hafniumkarbid und -nitrid\",\n journal = \"Monatshefte fuer Chemie\",\n year = \"1960\",\n volume = \"91\",\n pages = \"348-356\",\n ASTM_id = \"MOCMB7\"\n}\n", "@article{Becker1925,\n author = \"Becker, K. and Ebert, F.\",\n title = \"Die Kristallstrukturen einiger binaerer Carbide und Nitride.\",\n journal = \"Zeitschrift fuer Physik\",\n year = \"1925\",\n volume = \"31\",\n pages = \"268-272\",\n ASTM_id = \"ZEPYAA\"\n}\n", "@article{Kieffer1972,\n author = \"Kieffer, R. and Nowotny, H.N. and Ettmayer, P. and Dufek, G.\",\n title = \"Neue Untersuchungen ueber die Mischbarkeit von Uebergangsmetallnitriden und -karbiden\",\n journal = \"Metall (Berlin)\",\n year = \"1972\",\n volume = \"26\",\n pages = \"701-708\",\n ASTM_id = \"MTLLAF\"\n}\n", "@article{Pessall1968,\n author = \"Pessall, N. and Gold, R.E. and Johansen, H.A.\",\n title = \"A study of superconductivity in interstitial compounds\",\n journal = \"Journal of Physics and Chemistry of Solids\",\n year = \"1968\",\n volume = \"29\",\n pages = \"19-38\",\n ASTM_id = \"JPCSAW\"\n}\n", "@article{Liu2014,\n author = \"Liu, Z.T.Y. and Zhou, X. and Khare, S.V. and Gall, D.\",\n title = \"Structural, mechanical and electronic properties of 3d transition metal nitrides in cubic zincblende, rocksalt and cesium chloride structures: a first-principles investigation\",\n journal = \"Journal of Physics: Condensed Matter\",\n year = \"2014\",\n volume = \"26\",\n pages = \"025404-1-025404-10\",\n ASTM_id = \"JCOMEL\"\n}\n", "@article{Kieda1984,\n author = \"Kieda, N. and Uematsu, K. and Mizutani, N. and Kato, M.\",\n title = \"Nitrogen partial pressure-temperature-composition relations of vanadium mononitride (delta-V N)\",\n journal = \"Journal of the Less-Common Metals\",\n year = \"1984\",\n volume = \"99\",\n pages = \"131-135\",\n ASTM_id = \"JCOMAH\"\n}\n", "@article{Srivastava2011,\n author = \"Srivastava, A. and Chauhan, M. and Singh, R.K.\",\n title = \"Pressure induced phase transitions in transition metal nitrides: ab initio study\",\n journal = \"Physica Status Solidi B - Basic Solid State Physics\",\n year = \"2011\",\n volume = \"248\",\n pages = \"2793-2800\",\n ASTM_id = \"PSSBBD\"\n}\n", "@article{Sahnoun2010,\n author = \"Sahnoun, M. and Parlebas, J.C. and Driz, M. and Daul, C.\",\n title = \"Structural and electronic properties of isostructural transition metal nitrides\",\n journal = \"Physica B, Condensed Matter\",\n year = \"2010\",\n volume = \"405\",\n pages = \"3822-3825\",\n ASTM_id = \"PHYBE3\"\n}\n", "@article{Yen1967,\n author = \"Yen, C.M. and Toth, L.E. and Shy, Y.M. and Anderson, D.E. and Rosner, L.G.\",\n title = \"Superconducting Hc-Jc and Tc measurements in the Nb-Ni-N, Nb-Hf-N, and Nb-V-N ternary systems\",\n journal = \"Journal of Applied Physics\",\n year = \"1967\",\n volume = \"38\",\n pages = \"2268-2271\",\n ASTM_id = \"JAPIAU\"\n}\n", "@article{Kubel1987,\n author = \"Kubel, F. and Flack, H.D. and Yvon, K.\",\n title = \"Electron densities in vanadium mononitride. I. High-precision X-ray-diffraction determination of the valence-electron density distribution and atomic displacement parameters\",\n journal = \"Physical Review, Serie 3. B - Condensed Matter (18,1978-)\",\n year = \"1987\",\n volume = \"36\",\n pages = \"1415-1419\",\n ASTM_id = \"PRBMDO\"\n}\n", "@article{Spear1969,\n author = \"Spear, K.E. and Leitnaker, J.M.\",\n title = \"Equilibrium investigations of carbon-rich V (C, N) solutions\",\n journal = \"High Temperature Science\",\n year = \"1969\",\n volume = \"1\",\n pages = \"401-411\",\n ASTM_id = \"HITSAC\"\n}\n", "@article{Lengauer1986,\n author = \"Lengauer, W. and Ettmayer, P.\",\n title = \"Lattice parameters and thermal expansion of delta-V N1 - x from 298 - 1000 K\",\n journal = \"Monatshefte fuer Chemie\",\n year = \"1986\",\n volume = \"117\",\n pages = \"713-719\",\n ASTM_id = \"MOCMB7\"\n}\n", "@article{Lengauer1985,\n author = \"Lengauer, W. and Ettmayer, P.\",\n title = \"Physical and mechanical properties of cubic delta-V N1-x\",\n journal = \"Journal of the Less-Common Metals\",\n year = \"1985\",\n volume = \"109\",\n pages = \"351-359\",\n ASTM_id = \"JCOMAH\"\n}\n", "@article{Timofeeva1972,\n author = \"Timofeeva, I.I. and Shvedova, L.K.\",\n title = \"Microhardness and thermal expansion of transition metal nitrides at 80-300 K\",\n journal = \"Izvestiya Akademii Nauk SSSR, Neorganicheskie Materialy\",\n year = \"1972\",\n volume = \"8\",\n pages = \"1169-1170\",\n ASTM_id = \"IVNMAW\"\n}\n", "@article{Gajbhiye2006,\n author = \"Gajbhiye, N.S. and Ningthoujam, R.S.\",\n title = \"Low temperature synthesis, crystal structure and thermal stability studies of nanocrystalline V N Particles\",\n journal = \"Materials Research Bulletin\",\n year = \"2006\",\n volume = \"41\",\n pages = \"1612-1621\",\n ASTM_id = \"MRBUAC\"\n}\n", "@article{AsviniMeenaatci2013,\n author = \"Asvini Meenaatci, A.T. and Rajeswarapalanichamy, R. and Iyakutti, K.\",\n title = \"Electronic structure, structural stability, mechanical and superconducting properties of group VB nitrides: A first principles study\",\n journal = \"Solid State Sciences\",\n year = \"2013\",\n volume = \"19\",\n pages = \"36-44\",\n ASTM_id = \"SSSCFJ\"\n}\n", "@article{Ettmayer1978,\n author = \"Ettmayer, P. and Schebesta, W. and Vendl, A. and Kieffer, R.\",\n title = \"Beitrag zur Kenntnis des Systems Vanadin - Chrom - Stickstoff\",\n journal = \"Monatshefte fuer Chemie\",\n year = \"1978\",\n volume = \"109\",\n pages = \"929-\",\n ASTM_id = \"MOCMB7\"\n}\n", "@article{Ravi2009,\n author = \"Ravi, C.\",\n title = \"First-principles study of ground-state properties and phase stability of vanadium nitrides\",\n journal = \"Comouter coupling of phase diagrams and thermochemistry\",\n year = \"2009\",\n volume = \"33\",\n pages = \"469-477\",\n ASTM_id = \"CCCTD6\"\n}\n", "@article{Brauer1964,\n author = \"Brauer, G. and Schnell, W.-D.\",\n title = \"Zur Kenntnis des Systems Vanadium-Stickstoff und des reinen Vanadiums\",\n journal = \"Journal of the Less-Common Metals\",\n year = \"1964\",\n volume = \"6\",\n pages = \"326-332\",\n ASTM_id = \"JCOMAH\"\n}\n", "@article{Hasegawa2005,\n author = \"Hasegawa, M. and Yagi, T.\",\n title = \"Systematic study of formation and crystal structure of 3d-transition metal nitrides synthesized in a supercritical nitrogen fluid under 10 GPa and 1800 K using diamond anvil cell and YAG laser heating\",\n journal = \"Journal of Alloys and Compounds\",\n year = \"2005\",\n volume = \"403\",\n pages = \"131-142\",\n ASTM_id = \"JALCEU\"\n}\n", "@article{Hosoya1968,\n author = \"Hosoya, S. and Yamagishi, T. and Tokonami, M.\",\n title = \"Study of electron state in vanadium nitride by intensity measurements of X-Ray diffraction\",\n journal = \"Journal of the Physical Society of Japan\",\n year = \"1968\",\n volume = \"24\",\n pages = \"363-367\",\n ASTM_id = \"JUPSAU\"\n}\n", "@article{Hao2012,\n author = \"Hao, Aimin and Yang, Xiaocui and Zhang, Lixin and Zhang, Qizhou\",\n title = \"First-principles investigations on electronic, elastic and thermodynamic properties of VN under high pressure\",\n journal = \"Advanced Materials Research\",\n year = \"2012\",\n volume = \"550\",\n pages = \"2805-2809\",\n ASTM_id = \"AMREFI\"\n}\n", "@article{Jain2013,\nauthor = {Jain, Anubhav and Ong, Shyue Ping and Hautier, Geoffroy and Chen, Wei and Richards, William Davidson and Dacek, Stephen and Cholia, Shreyas and Gunter, Dan and Skinner, David and Ceder, Gerbrand and Persson, Kristin a.},\ndoi = {10.1063/1.4812323},\nissn = {2166532X},\njournal = {APL Materials},\nnumber = {1},\npages = {011002},\ntitle = {{The Materials Project: A materials genome approach to accelerating materials innovation}},\nurl = {http://link.aip.org/link/AMPADS/v1/i1/p011002/s1\\&Agg=doi},\nvolume = {1},\nyear = {2013}\n}\n\n@misc{MaterialsProject,\ntitle = {{Materials Project}},\nurl = {http://www.materialsproject.org}\n}"], {"year": 1925, "authors": ["Becker, K.", "Ebert, F."], "num_authors": 2}, 1925], [{"@module": "pymatgen.core.structure", "@class": "Structure", "charge": 0, "lattice": {"matrix": [[0.0, 2.080973, 2.080973], [2.080973, 0.0, 2.080973], [2.080973, 2.080973, 0.0]], "pbc": [true, true, true], "a": 2.942940239532227, "b": 2.942940239532227, "c": 2.942940239532227, "alpha": 60.00000000000001, "beta": 60.00000000000001, "gamma": 60.00000000000001, "volume": 18.02309334022026}, "sites": [{"species": [{"element": "V", "occu": 1}], "abc": [0.0, 0.0, 0.0], "xyz": [0.0, 0.0, 0.0], "label": "V", "properties": {"magmom": 0.001}}, {"species": [{"element": "C", "occu": 1}], "abc": [0.5, 0.5, 0.5], "xyz": [2.080973, 2.080973, 2.080973], "label": "C", "properties": {"magmom": -0.0}}], "@version": null}, "mp-1282", false, 0.08810940243055576, -0.4096730237500008, ["@article{Rudy1963,\n author = \"Rudy, E. and Benesovsky, F. and Toth, L.\",\n title = \"Untersuchung der Dreistoffsysteme der Va- und VIa-Metalle mit Bor und Kohlenstoff\",\n journal = \"Zeitschrift fuer Metallkunde\",\n year = \"1963\",\n volume = \"54\",\n pages = \"345-353\",\n ASTM_id = \"ZEMTAE\"\n}\n", "@article{Kieffer1972,\n author = \"Kieffer, R. and Nowotny, H.N. and Ettmayer, P. and Dufek, G.\",\n title = \"Neue Untersuchungen ueber die Mischbarkeit von Uebergangsmetallnitriden und -karbiden\",\n journal = \"Metall (Berlin)\",\n year = \"1972\",\n volume = \"26\",\n pages = \"701-708\",\n ASTM_id = \"MTLLAF\"\n}\n", "@article{Pessall1968,\n author = \"Pessall, N. and Gold, R.E. and Johansen, H.A.\",\n title = \"A study of superconductivity in interstitial compounds\",\n journal = \"Journal of Physics and Chemistry of Solids\",\n year = \"1968\",\n volume = \"29\",\n pages = \"19-38\",\n ASTM_id = \"JPCSAW\"\n}\n", "@article{Norton1949,\n author = \"Norton, J.T. and Mowry, A.L.\",\n title = \"Solubility relationships of the refractory monocarbides\",\n journal = \"Transactions of the American Institute of Mining, Metallurgical and Petroleum Engineers\",\n year = \"1949\",\n volume = \"185\",\n pages = \"133-136\",\n ASTM_id = \"TAIMAF\"\n}\n", "@article{Stuart1970,\n author = \"Stuart, H. and Ridley, N.\",\n title = \"Thermal expansions of some carbides and tessellated stresses in steel\",\n journal = \"Journal of the Iron and Steel Institute (London)\",\n year = \"1970\",\n volume = \"208\",\n pages = \"1087-1092\",\n ASTM_id = \"JISIAX\"\n}\n", "@article{Fedorov1968,\n author = \"Fedorov, T.F. and Popova, N.M. and Gorshkova, L.V. and Skolozdra, R.V. and Kuz'ma, Yu.B.\",\n title = \"Phase equilibria in the sysrtems vanadium - chromiu - carbon, niobium - chromium - carbon, and tantalum - chromium - carbon\",\n journal = \"Soviet powder metallurgy and metal ceramics\",\n year = \"1968\",\n volume = \"7\",\n pages = \"193-197\",\n ASTM_id = \"SPMCAV\"\n}\n", "@article{Rogl1977,\n author = \"Rogl, P. and Naik, S.K. and Rudy, E.\",\n title = \"A constitutional diagram of the system V C0.88 - Hf C0.98 - W C\",\n journal = \"Monatshefte fuer Chemie\",\n year = \"1977\",\n volume = \"108\",\n pages = \"1213-1234\",\n ASTM_id = \"MOCMB7\"\n}\n", "@article{Pflueger1984,\n author = \"Pflueger, J. and Fink, J. and Weber, W. and Bohnen, K.P. and Crecelius, G.\",\n title = \"Dielectric properties of Ti Cx, Ti Nx, V Cx, and V Nx from 1.5 to 40 eV determined by electron-energy-loss spectroscopy\",\n journal = \"Physical Review, Serie 3. B - Condensed Matter (18,1978-)\",\n year = \"1984\",\n volume = \"30\",\n pages = \"1155-1163\",\n ASTM_id = \"PRBMDO\"\n}\n", "@article{Soni2011,\n author = \"Soni, P. and Pagare, G. and Sanyal, S.P.\",\n title = \"Structural, high pressure and elastic properties of transition metal monocarbides: A FP-LAPW study\",\n journal = \"Journal of Physics and Chemistry of Solids\",\n year = \"2011\",\n volume = \"72\",\n pages = \"810-816\",\n ASTM_id = \"JPCSAW\"\n}\n", "@article{Denbnovetskaya1967,\n author = \"Denbnovetskaya, E.N.\",\n title = \"Sintered material and components. Preparation of solid solutions of some complex carbides of the transition metals\",\n journal = \"Soviet powder metallurgy and metal ceramics\",\n year = \"1967\",\n volume = \"6\",\n pages = \"194-197\",\n ASTM_id = \"SPMCAV\"\n}\n", "@article{Ramqvist1968,\n author = \"Ramqvist, L.\",\n title = \"Variation od hardness, resistivity and lattice parameter with carbon content of group 5b metal carbides\",\n journal = \"Jernkontorets Annaler\",\n year = \"1968\",\n volume = \"152\",\n pages = \"465-475\",\n ASTM_id = \"JERNAF\"\n}\n", "@article{Rassaerts1965,\n author = \"Rassaerts, H. and Kieffer, R. and Nowotny, H.N.\",\n title = \"Der Dreistoff: Vanadin - Chrom - Kohlenstoff\",\n journal = \"Monatshefte fuer Chemie\",\n year = \"1965\",\n volume = \"96\",\n pages = \"1536-1542\",\n ASTM_id = \"MOCMB7\"\n}\n", "@article{Nakamura2008,\n author = \"Nakamura, K. and Yashima, M.\",\n title = \"Crystal structure of (NaCl)-type transition metal monocarbides M C (M =V, Ti, Nb, Ta, Hf, Zr), a neutron powder diffraction study\",\n journal = \"Materials Science and Engineering B: Solid-state Materials for Advanced Technology\",\n year = \"2008\",\n volume = \"148\",\n pages = \"69-72\",\n ASTM_id = \"MSBTEK\"\n}\n", "@article{Becker1925,\n author = \"Becker, K. and Ebert, F.\",\n title = \"Die Kristallstrukturen einiger binaerer Carbide und Nitride.\",\n journal = \"Zeitschrift fuer Physik\",\n year = \"1925\",\n volume = \"31\",\n pages = \"268-272\",\n ASTM_id = \"ZEPYAA\"\n}\n", "@article{Spear1969,\n author = \"Spear, K.E. and Leitnaker, J.M.\",\n title = \"Equilibrium investigations of carbon-rich V (C, N) solutions\",\n journal = \"High Temperature Science\",\n year = \"1969\",\n volume = \"1\",\n pages = \"401-411\",\n ASTM_id = \"HITSAC\"\n}\n", "@article{Nowotny1947,\n author = \"Nowotny, H.N. and Kieffer, R.\",\n title = \"Roentgenographische Untersuchungen von Karbidsystemen\",\n journal = \"Metallforschung\",\n year = \"1947\",\n volume = \"2\",\n pages = \"257-265\",\n ASTM_id = \"MEFGAZ\"\n}\n", "@article{Rudy1968,\n author = \"Rudy, E. and Windisch, St. and Brukl, C.E.\",\n title = \"Revision of the vanadium-carbon and niobium-carbon systems\",\n journal = \"Planseeberichte fuer Pulvermetallurgie\",\n year = \"1968\",\n volume = \"16\",\n pages = \"3-33\",\n ASTM_id = \"PLPUA5\"\n}\n", "@article{Duwez1950,\n author = \"Duwez, P. and Odell, F.\",\n title = \"Phase relationships in the binary systems of nitrides and carbides of zirconium, columbium, titanium, and vanadium\",\n journal = \"Journal of the Electrochemical Society\",\n year = \"1950\",\n volume = \"97\",\n pages = \"299-304\",\n ASTM_id = \"JESOAN\"\n}\n", "@article{Gatterer1975,\n author = \"Gatterer, J. and Dufek, G. and Ettmayer, P. and Kieffer, R.\",\n title = \"Das kubische Tantalmononitrid (B 1-Typ) und seine Mischbarkeit mit den isotypen Uebergangsmetallnitriden und-carbiden\",\n journal = \"Monatshefte fuer Chemie\",\n year = \"1975\",\n volume = \"106\",\n pages = \"1137-1147\",\n ASTM_id = \"MOCMB7\"\n}\n", "@article{Jain2013,\nauthor = {Jain, Anubhav and Ong, Shyue Ping and Hautier, Geoffroy and Chen, Wei and Richards, William Davidson and Dacek, Stephen and Cholia, Shreyas and Gunter, Dan and Skinner, David and Ceder, Gerbrand and Persson, Kristin a.},\ndoi = {10.1063/1.4812323},\nissn = {2166532X},\njournal = {APL Materials},\nnumber = {1},\npages = {011002},\ntitle = {{The Materials Project: A materials genome approach to accelerating materials innovation}},\nurl = {http://link.aip.org/link/AMPADS/v1/i1/p011002/s1\\&Agg=doi},\nvolume = {1},\nyear = {2013}\n}\n\n@misc{MaterialsProject,\ntitle = {{Materials Project}},\nurl = {http://www.materialsproject.org}\n}"], {"year": 1925, "authors": ["Becker, K.", "Ebert, F."], "num_authors": 2}, 1925], [{"@module": "pymatgen.core.structure", "@class": "Structure", "charge": 0, "lattice": {"matrix": [[2.93950639, -0.0, 0.0], [0.0, 2.93950639, 0.0], [-0.0, -0.0, 2.93950639]], "pbc": [true, true, true], "a": 2.93950639, "b": 2.93950639, "c": 2.93950639, "alpha": 90.0, "beta": 90.0, "gamma": 90.0, "volume": 25.39938644669207}, "sites": [{"species": [{"element": "V", "occu": 1}], "abc": [0.5, 0.5, 0.5], "xyz": [1.469753195, 1.469753195, 1.469753195], "label": "V", "properties": {"magmom": -1.411}}, {"species": [{"element": "Fe", "occu": 1}], "abc": [-0.0, -0.0, -0.0], "xyz": [0.0, 0.0, 0.0], "label": "Fe", "properties": {"magmom": 2.527}}], "@version": null}, "mp-1335", false, 0.021580906875001915, -0.1281409, ["@article{Dwight1959,\n author = \"Dwight, A.E.\",\n title = \"CsCl-type equiatomic phases in binary alloys of transition elements\",\n journal = \"Transactions of the American Institute of Mining, Metallurgical and Petroleum Engineers\",\n year = \"1959\",\n volume = \"215\",\n pages = \"283-286\",\n ASTM_id = \"TAIMAF\"\n}\n", "@article{Seki1979,\n author = \"Seki, J.I. and Hagiwara, M. and Suzuki, T.\",\n title = \"Metastable order-disorder transition and sigma-phase formation in Fe-V binary alloys\",\n journal = \"Journal of Materials Science\",\n year = \"1979\",\n volume = \"14\",\n pages = \"2404-2410\",\n ASTM_id = \"JMTSAS\"\n}\n", "@article{Philip1957,\n author = \"Philip, T.V. and Beck, P.A.\",\n title = \"CsCl-type ordered structures in binary alloys of transition elements\",\n journal = \"Journal of Metals\",\n year = \"1957\",\n volume = \"9\",\n pages = \"1269-1271\",\n ASTM_id = \"JOMTAA\"\n}\n", "@article{Jain2013,\nauthor = {Jain, Anubhav and Ong, Shyue Ping and Hautier, Geoffroy and Chen, Wei and Richards, William Davidson and Dacek, Stephen and Cholia, Shreyas and Gunter, Dan and Skinner, David and Ceder, Gerbrand and Persson, Kristin a.},\ndoi = {10.1063/1.4812323},\nissn = {2166532X},\njournal = {APL Materials},\nnumber = {1},\npages = {011002},\ntitle = {{The Materials Project: A materials genome approach to accelerating materials innovation}},\nurl = {http://link.aip.org/link/AMPADS/v1/i1/p011002/s1\\&Agg=doi},\nvolume = {1},\nyear = {2013}\n}\n\n@misc{MaterialsProject,\ntitle = {{Materials Project}},\nurl = {http://www.materialsproject.org}\n}"], {"year": 1957, "authors": ["Philip, T.V.", "Beck, P.A."], "num_authors": 2}, 1957], [{"@module": "pymatgen.core.structure", "@class": "Structure", "charge": 0, "lattice": {"matrix": [[3.01657359, -0.0, -0.0], [0.0, 3.01657359, -0.0], [0.0, 0.0, 3.01657359]], "pbc": [true, true, true], "a": 3.01657359, "b": 3.01657359, "c": 3.01657359, "alpha": 90.0, "beta": 90.0, "gamma": 90.0, "volume": 27.449963637467494}, "sites": [{"species": [{"element": "V", "occu": 1}], "abc": [0.0, -0.0, 0.0], "xyz": [0.0, 0.0, 0.0], "label": "V", "properties": {"magmom": 0.919}}, {"species": [{"element": "Os", "occu": 1}], "abc": [0.5, 0.5, 0.5], "xyz": [1.508286795, 1.508286795, 1.508286795], "label": "Os", "properties": {"magmom": -0.186}}], "@version": null}, "mp-12778", false, 0.003738488333333123, -0.23333641500000013, ["@article{Dwight1959,\n author = \"Dwight, A.E.\",\n title = \"(Cs Cl)-type equiatomic phases in binary alloys of transition elements\",\n journal = \"Transactions of the American Institute of Mining, Metallurgical and Petroleum Engineers\",\n year = \"1959\",\n volume = \"215\",\n pages = \"283-286\",\n ASTM_id = \"TAIMAF\"\n}\n", "@article{Jain2013,\nauthor = {Jain, Anubhav and Ong, Shyue Ping and Hautier, Geoffroy and Chen, Wei and Richards, William Davidson and Dacek, Stephen and Cholia, Shreyas and Gunter, Dan and Skinner, David and Ceder, Gerbrand and Persson, Kristin a.},\ndoi = {10.1063/1.4812323},\nissn = {2166532X},\njournal = {APL Materials},\nnumber = {1},\npages = {011002},\ntitle = {{The Materials Project: A materials genome approach to accelerating materials innovation}},\nurl = {http://link.aip.org/link/AMPADS/v1/i1/p011002/s1\\&Agg=doi},\nvolume = {1},\nyear = {2013}\n}\n\n@misc{MaterialsProject,\ntitle = {{Materials Project}},\nurl = {http://www.materialsproject.org}\n}"], {"year": 1959, "authors": ["Dwight, A.E."], "num_authors": 1}, 1959], [{"@module": "pymatgen.core.structure", "@class": "Structure", "charge": 0, "lattice": {"matrix": [[3.00911852, -0.0, 0.0], [0.0, 3.00911852, 0.0], [-0.0, 0.0, 3.00911852]], "pbc": [true, true, true], "a": 3.00911852, "b": 3.00911852, "c": 3.00911852, "alpha": 90.0, "beta": 90.0, "gamma": 90.0, "volume": 27.246949124844207}, "sites": [{"species": [{"element": "V", "occu": 1}], "abc": [0.5, 0.5, 0.5], "xyz": [1.50455926, 1.50455926, 1.50455926], "label": "V", "properties": {"magmom": -0.0}}, {"species": [{"element": "Tc", "occu": 1}], "abc": [0.0, -0.0, 0.0], "xyz": [0.0, 0.0, 0.0], "label": "Tc", "properties": {"magmom": 0.0}}], "@version": null}, "mp-2540", false, 0.0, -0.37240445249999965, ["@article{Koch1968,\n author = \"Koch, C.C. and Love, G.R.\",\n title = \"An investigation of the vanadium-technetium alloy system\",\n journal = \"Journal of the Less-Common Metals\",\n year = \"1968\",\n volume = \"15\",\n pages = \"43-58\",\n ASTM_id = \"JCOMAH\"\n}\n", "@article{Darby1962,\n author = \"Darby, J.B.jr. and Lam, D.J. and Norton, L.J. and Downey, J.W.\",\n title = \"Intermediate phases in binary systems of technetium-99 with several transition elements\",\n journal = \"Journal of the Less-Common Metals\",\n year = \"1962\",\n volume = \"4\",\n pages = \"558-563\",\n ASTM_id = \"JCOMAH\"\n}\n", "@article{Jain2013,\nauthor = {Jain, Anubhav and Ong, Shyue Ping and Hautier, Geoffroy and Chen, Wei and Richards, William Davidson and Dacek, Stephen and Cholia, Shreyas and Gunter, Dan and Skinner, David and Ceder, Gerbrand and Persson, Kristin a.},\ndoi = {10.1063/1.4812323},\nissn = {2166532X},\njournal = {APL Materials},\nnumber = {1},\npages = {011002},\ntitle = {{The Materials Project: A materials genome approach to accelerating materials innovation}},\nurl = {http://link.aip.org/link/AMPADS/v1/i1/p011002/s1\\&Agg=doi},\nvolume = {1},\nyear = {2013}\n}\n\n@misc{MaterialsProject,\ntitle = {{Materials Project}},\nurl = {http://www.materialsproject.org}\n}"], {"year": 1962, "authors": ["Darby, J.B.jr.", "Lam, D.J.", "Norton, L.J.", "Downey, J.W."], "num_authors": 4}, 1962], [{"@module": "pymatgen.core.structure", "@class": "Structure", "charge": 0, "lattice": {"matrix": [[2.85576869, 0.0, 0.0], [-0.0, 2.85576869, -0.0], [-0.0, 0.0, 2.85576869]], "pbc": [true, true, true], "a": 2.85576869, "b": 2.85576869, "c": 2.85576869, "alpha": 90.0, "beta": 90.0, "gamma": 90.0, "volume": 23.289978270600127}, "sites": [{"species": [{"element": "Mn", "occu": 1}], "abc": [-0.0, -0.0, -0.0], "xyz": [0.0, 0.0, 0.0], "label": "Mn", "properties": {"magmom": 0.0}}, {"species": [{"element": "V", "occu": 1}], "abc": [0.5, 0.5, 0.5], "xyz": [1.427884345, 1.427884345, 1.427884345], "label": "V", "properties": {"magmom": -0.0}}], "@version": null}, "mp-316", false, 0.0, -0.284082053965518, ["@article{Darby1963,\n author = \"Darby, J.B.jr.\",\n title = \"The CsCl-type ordered structure in V Mn\",\n journal = \"Transactions of the Metallurgical Society of Aime\",\n year = \"1963\",\n volume = \"227\",\n pages = \"1460-1460\",\n ASTM_id = \"TMSAAB\"\n}\n", "@article{Suzuki1975,\n author = \"Suzuki, T. and Hagiwara, M.\",\n title = \"Cs Cl-type order-disorder transition in delta V Mn solid solutions\",\n journal = \"Transactions of the Japan Institute of Metals\",\n year = \"1975\",\n volume = \"16\",\n pages = \"473-479\",\n ASTM_id = \"TJIMAA\"\n}\n", "@article{Jain2013,\nauthor = {Jain, Anubhav and Ong, Shyue Ping and Hautier, Geoffroy and Chen, Wei and Richards, William Davidson and Dacek, Stephen and Cholia, Shreyas and Gunter, Dan and Skinner, David and Ceder, Gerbrand and Persson, Kristin a.},\ndoi = {10.1063/1.4812323},\nissn = {2166532X},\njournal = {APL Materials},\nnumber = {1},\npages = {011002},\ntitle = {{The Materials Project: A materials genome approach to accelerating materials innovation}},\nurl = {http://link.aip.org/link/AMPADS/v1/i1/p011002/s1\\&Agg=doi},\nvolume = {1},\nyear = {2013}\n}\n\n@misc{MaterialsProject,\ntitle = {{Materials Project}},\nurl = {http://www.materialsproject.org}\n}"], {"year": 1963, "authors": ["Darby, J.B.jr."], "num_authors": 1}, 1963], [{"@module": "pymatgen.core.structure", "@class": "Structure", "charge": 0, "lattice": {"matrix": [[3.00228092, 0.0, -0.0], [0.0, 3.00228092, 0.0], [0.0, -0.0, 3.00393315]], "pbc": [true, true, true], "a": 3.00228092, "b": 3.00228092, "c": 3.00393315, "alpha": 90.0, "beta": 90.0, "gamma": 90.0, "volume": 27.076524365453714}, "sites": [{"species": [{"element": "V", "occu": 1}], "abc": [0.5, 0.5, 0.5], "xyz": [1.50114046, 1.50114046, 1.501966575], "label": "V", "properties": {"magmom": 1.039}}, {"species": [{"element": "Ru", "occu": 1}], "abc": [-0.0, -0.0, 0.0], "xyz": [0.0, 0.0, 0.0], "label": "Ru", "properties": {"magmom": -0.244}}], "@version": null}, "mp-1395", false, 0.0, -0.23369963999999932, ["@article{Raub1963,\n author = \"Raub, E. and Fritzsche, W.\",\n title = \"Die Ruthenium-Vanadium Legierungen\",\n journal = \"Zeitschrift fuer Metallkunde\",\n year = \"1963\",\n volume = \"54\",\n pages = \"21-23\",\n ASTM_id = \"ZEMTAE\"\n}\n", "@article{Marezio1971,\n author = \"Marezio, M. and Dernier, P.D. and Chu, C.W.\",\n title = \"Low-temperature X-ray diffraction studies of near-equiatomic V Ru alloys\",\n journal = \"Physical Review, Serie 3. B - Condensed Matter (18,1978-)\",\n year = \"1971\",\n volume = \"4\",\n pages = \"2825-2826\",\n ASTM_id = \"PRBMDO\"\n}\n", "@article{Jain2013,\nauthor = {Jain, Anubhav and Ong, Shyue Ping and Hautier, Geoffroy and Chen, Wei and Richards, William Davidson and Dacek, Stephen and Cholia, Shreyas and Gunter, Dan and Skinner, David and Ceder, Gerbrand and Persson, Kristin a.},\ndoi = {10.1063/1.4812323},\nissn = {2166532X},\njournal = {APL Materials},\nnumber = {1},\npages = {011002},\ntitle = {{The Materials Project: A materials genome approach to accelerating materials innovation}},\nurl = {http://link.aip.org/link/AMPADS/v1/i1/p011002/s1\\&Agg=doi},\nvolume = {1},\nyear = {2013}\n}\n\n@misc{MaterialsProject,\ntitle = {{Materials Project}},\nurl = {http://www.materialsproject.org}\n}"], {"year": 1963, "authors": ["Raub, E.", "Fritzsche, W."], "num_authors": 2}, 1963]]} diff --git a/src/matbench_genmetrics/mp_time_split/utils/mp_dummy_time_summary.json.gz b/src/matbench_genmetrics/mp_time_split/utils/mp_dummy_time_summary.json.gz new file mode 100644 index 0000000..585a97f Binary files /dev/null and b/src/matbench_genmetrics/mp_time_split/utils/mp_dummy_time_summary.json.gz differ diff --git a/src/matbench_genmetrics/mp_time_split/utils/split.py b/src/matbench_genmetrics/mp_time_split/utils/split.py new file mode 100644 index 0000000..23b9926 --- /dev/null +++ b/src/matbench_genmetrics/mp_time_split/utils/split.py @@ -0,0 +1,337 @@ +from warnings import warn + +import numpy as np +from sklearn.model_selection import KFold, TimeSeriesSplit, train_test_split +from sklearn.model_selection._split import _BaseKFold +from sklearn.utils import indexable +from sklearn.utils.validation import _num_samples + +AVAILABLE_MODES = ["TimeSeriesSplit", "TimeSeriesOverflowSplit", "TimeKFold"] + + +def mp_time_split( + X, + mode="TimeSeriesSplit", + use_trainval_test: bool = True, + n_cv_splits: int = 5, + max_train_size=None, + test_size=None, + gap=0, +): + if mode not in AVAILABLE_MODES: + raise NotImplementedError( + f"mode={mode} not implemented. Use one of {AVAILABLE_MODES}" + ) + + if use_trainval_test: + X_trainval, _ = train_test_split(X, shuffle=False, test_size=0.2) + # ss = ShuffleSplit(n_splits=1, test_size=0.2) + # trainval_index, test_index = ss.split(X) + # if y is None: + # X_trainval, X_test = train_test_split(X, shuffle=False) + # y_trainval = None + # y_test = None + # else: + # X_trainval, X_test, y_trainval, y_test = train_test_split( + # X, y, shuffle=False + # ) + else: + # trainval_index = np.array(list(range(X.shape[0]))) + # test_index = np.array([]) + X_trainval = X + # y_trainval = y + + if mode == "TimeSeriesSplit": + splitter = TimeSeriesSplit( + n_splits=n_cv_splits, + max_train_size=max_train_size, + test_size=test_size, + gap=0, + ) + elif mode == "TimeSeriesOverflowSplit": + splitter = TimeSeriesOverflowSplit( + n_splits=n_cv_splits, + max_train_size=max_train_size, + test_size=test_size, + gap=0, + ) + elif mode == "TimeKFold": + if gap != 0: + raise NotImplementedError( + "non-zero `gap` specified, not implemented for TimeKFold" + ) + if max_train_size is not None: + raise NotImplementedError( + "non-None `max_train_size` specified, not implemented for TimeKFold" + ) + if test_size is not None: + raise NotImplementedError( + "non-None `test_size` specified, not implemented for TimeKFold" + ) + splitter = TimeKFold(n_splits=n_cv_splits) + trainval_splits = list(splitter.split(X_trainval)) + + if use_trainval_test: + num_samples = X.shape[0] + n_trainval = X_trainval.shape[0] + test_split = (np.arange(0, n_trainval), np.arange(n_trainval, num_samples)) + return trainval_splits, test_split + else: + return trainval_splits + + +class TimeSeriesOverflowSplit(_BaseKFold): + """Time Series cross-validator + + TODO: update docstring + + Provides train/test indices to split time series data samples + that are observed at fixed time intervals, in train/test sets. + In each split, test indices must be higher than before, and thus shuffling + in cross validator is inappropriate. + + This cross-validation object is a variation of :class:`KFold`. + In the kth split, it returns first k folds as train set and the + (k+1)th fold as test set. + + Note that unlike standard cross-validation methods, successive + training sets are supersets of those that come before them. + + Read more in the :ref:`User Guide `. + + .. versionadded:: 0.18 + + Parameters + ---------- + n_splits : int, default=5 + Number of splits. Must be at least 2. + + .. versionchanged:: 0.22 + ``n_splits`` default value changed from 3 to 5. + + max_train_size : int, default=None + Maximum size for a single training set. + + test_size : int, default=None + Used to limit the size of the test set. Defaults to + ``n_samples // (n_splits + 1)``, which is the maximum allowed value + with ``gap=0``. + + .. versionadded:: 0.24 + + gap : int, default=0 + Number of samples to exclude from the end of each train set before + the test set. + + .. versionadded:: 0.24 + + Examples + -------- + >>> import numpy as np + >>> from sklearn.model_selection import TimeSeriesSplit + >>> X = np.array([[1, 2], [3, 4], [1, 2], [3, 4], [1, 2], [3, 4]]) + >>> y = np.array([1, 2, 3, 4, 5, 6]) + >>> tscv = TimeSeriesSplit() + >>> print(tscv) + TimeSeriesSplit(gap=0, max_train_size=None, n_splits=5, test_size=None) + >>> for train_index, test_index in tscv.split(X): + ... print("TRAIN:", train_index, "TEST:", test_index) + ... X_train, X_test = X[train_index], X[test_index] + ... y_train, y_test = y[train_index], y[test_index] + TRAIN: [0] TEST: [1] + TRAIN: [0 1] TEST: [2] + TRAIN: [0 1 2] TEST: [3] + TRAIN: [0 1 2 3] TEST: [4] + TRAIN: [0 1 2 3 4] TEST: [5] + >>> # Fix test_size to 2 with 12 samples + >>> X = np.random.randn(12, 2) + >>> y = np.random.randint(0, 2, 12) + >>> tscv = TimeSeriesSplit(n_splits=3, test_size=2) + >>> for train_index, test_index in tscv.split(X): + ... print("TRAIN:", train_index, "TEST:", test_index) + ... X_train, X_test = X[train_index], X[test_index] + ... y_train, y_test = y[train_index], y[test_index] + TRAIN: [0 1 2 3 4 5] TEST: [6 7] + TRAIN: [0 1 2 3 4 5 6 7] TEST: [8 9] + TRAIN: [0 1 2 3 4 5 6 7 8 9] TEST: [10 11] + >>> # Add in a 2 period gap + >>> tscv = TimeSeriesSplit(n_splits=3, test_size=2, gap=2) + >>> for train_index, test_index in tscv.split(X): + ... print("TRAIN:", train_index, "TEST:", test_index) + ... X_train, X_test = X[train_index], X[test_index] + ... y_train, y_test = y[train_index], y[test_index] + TRAIN: [0 1 2 3] TEST: [6 7] + TRAIN: [0 1 2 3 4 5] TEST: [8 9] + TRAIN: [0 1 2 3 4 5 6 7] TEST: [10 11] + + Notes + ----- + The training set has size ``i * n_samples // (n_splits + 1) + + n_samples % (n_splits + 1)`` in the ``i`` th split, + with a test set of size ``n_samples//(n_splits + 1)`` by default, + where ``n_samples`` is the number of samples. + """ + + def __init__(self, n_splits=5, *, max_train_size=None, test_size=None, gap=0): + super().__init__(n_splits, shuffle=False, random_state=None) + self.max_train_size = max_train_size + self.test_size = test_size + self.gap = gap + + def split(self, X, y=None, groups=None): + """Generate indices to split data into training and test set. + + Parameters + ---------- + X : array-like of shape (n_samples, n_features) + Training data, where `n_samples` is the number of samples + and `n_features` is the number of features. + + y : array-like of shape (n_samples,) + Always ignored, exists for compatibility. + + groups : array-like of shape (n_samples,) + Always ignored, exists for compatibility. + + Yields + ------ + train : ndarray + The training set indices for that split. + + test : ndarray + The testing set indices for that split. + """ + X, y, groups = indexable(X, y, groups) + n_samples = _num_samples(X) + n_splits = self.n_splits + n_folds = n_splits + 1 + gap = self.gap + test_size = ( + self.test_size if self.test_size is not None else n_samples // n_folds + ) + + all_index = list(range(n_samples)) + tscv = TimeSeriesSplit( + gap=gap, + n_splits=n_splits, + test_size=test_size, + max_train_size=self.max_train_size, + ) + train_indices = [] + test_indices = [] + for tri, _ in tscv.split(X): + train_indices.append(tri) + # use remainder of data rather than default `test_index` + test_indices.append(np.setdiff1d(all_index, tri)) + + splits = list(zip(train_indices, test_indices)) + + for train_index, test_index in splits: + yield train_index, test_index + + +class TimeKFold(_BaseKFold): + """Time Series K-Folds cross-validator + + TODO: update docstring + + Provides train/test indices to split data in train/test sets. Split + dataset into k consecutive folds (without shuffling by default). + + Each fold is then used once as a validation while the k - 1 remaining + folds form the training set. + + Read more in the :ref:`User Guide `. + + Parameters + ---------- + n_splits : int, default=5 + Number of folds. Must be at least 2. + + .. versionchanged:: 0.22 + ``n_splits`` default value changed from 3 to 5. + + Examples + -------- + >>> import numpy as np + >>> from sklearn.model_selection import KFold + >>> X = np.array([[1, 2], [3, 4], [1, 2], [3, 4]]) + >>> y = np.array([1, 2, 3, 4]) + >>> kf = KFold(n_splits=2) + >>> kf.get_n_splits(X) + 2 + >>> print(kf) + KFold(n_splits=2, random_state=None, shuffle=False) + >>> for train_index, test_index in kf.split(X): + ... print("TRAIN:", train_index, "TEST:", test_index) + ... X_train, X_test = X[train_index], X[test_index] + ... y_train, y_test = y[train_index], y[test_index] + TRAIN: [2 3] TEST: [0 1] + TRAIN: [0 1] TEST: [2 3] + + Notes + ----- + The first ``n_samples % n_splits`` folds have size + ``n_samples // n_splits + 1``, other folds have size + ``n_samples // n_splits``, where ``n_samples`` is the number of samples. + + Randomized CV splitters may return different results for each call of + split. You can make the results identical by setting `random_state` + to an integer. + + See Also + -------- + StratifiedKFold : Takes group information into account to avoid building + folds with imbalanced class distributions (for binary or multiclass + classification tasks). + + GroupKFold : K-fold iterator variant with non-overlapping groups. + + RepeatedKFold : Repeats K-Fold n times. + """ + + def __init__(self, n_splits=5, *, shuffle=False, random_state=None): + if shuffle or random_state is not None: + warn( + "`shuffle` and `random_state` for compatibility only. These are fixed to `False` and `None`, respectively." # noqa: E501 + ) + super().__init__(n_splits=n_splits, shuffle=False, random_state=None) + + def split(self, X, y=None, groups=None): + """Generate indices to split data into training and test set. + + Parameters + ---------- + X : array-like of shape (n_samples, n_features) + Training data, where `n_samples` is the number of samples + and `n_features` is the number of features. + + y : array-like of shape (n_samples,), default=None + The target variable for supervised learning problems. + + groups : array-like of shape (n_samples,), default=None + Group labels for the samples used while splitting the dataset into + train/test set. + + Yields + ------ + train : ndarray + The training set indices for that split. + + test : ndarray + The testing set indices for that split. + """ + X, y, groups = indexable(X, y, groups) + n_samples = _num_samples(X) + # an extra split to ensure that last `text_index` is not empty + kf = KFold(n_splits=self.n_splits + 1) + splits = [indices[1] for indices in kf.split(X)] + splits.pop(-1) + + running_index = np.empty(0, dtype=int) + all_index = list(range(n_samples)) + for s in splits: + running_index = np.concatenate((running_index, s)) + train_index = running_index + test_index = np.setdiff1d(all_index, running_index) + yield train_index, test_index diff --git a/tests/conftest.py b/tests/conftest.py index 23eda21..5bb91dc 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,5 +1,5 @@ """ - Dummy conftest.py for matbench_genmetrics. + Dummy conftest.py for core. If you don't know what this is for, just leave it empty. Read more about conftest.py under: diff --git a/tests/test_matbench_genmetrics.py b/tests/test_matbench_genmetrics.py index bebed8e..12d16f6 100644 --- a/tests/test_matbench_genmetrics.py +++ b/tests/test_matbench_genmetrics.py @@ -4,7 +4,6 @@ import numpy as np import numpy.typing as npt import pytest -from mp_time_split.utils.gen import DummyGenerator from numpy.testing import assert_array_equal from pymatgen.core.lattice import Lattice from pymatgen.core.structure import Structure @@ -12,8 +11,9 @@ PerturbStructureTransformation, ) -from matbench_genmetrics.core import GenMatcher, GenMetrics, MPTSMetrics -from matbench_genmetrics.utils.featurize import cdvae_cov_struct_fingerprints +from matbench_genmetrics.core.metrics import GenMatcher, GenMetrics, MPTSMetrics +from matbench_genmetrics.core.utils.featurize import cdvae_cov_struct_fingerprints +from matbench_genmetrics.mp_time_split.utils.gen import DummyGenerator # from pytest_cases import fixture, parametrize, parametrize_with_cases diff --git a/tests/test_mp_time_split.py b/tests/test_mp_time_split.py new file mode 100644 index 0000000..4819fd9 --- /dev/null +++ b/tests/test_mp_time_split.py @@ -0,0 +1,78 @@ +import sys +from os import path + +import pytest +from matminer.utils.io import load_dataframe_from_json + +from matbench_genmetrics.mp_time_split.splitter import MPTimeSplit, get_data_home +from matbench_genmetrics.mp_time_split.utils.data import DUMMY_SNAPSHOT_NAME + +dummy_data_path = path.join(get_data_home(), DUMMY_SNAPSHOT_NAME) + +num_sites = (1, 2) +elements = ["V"] + + +# def test_data_snapshot(): +# dummy_expt_df_check = load_dataframe_from_json(dummy_data_path) +# mpt = MPTimeSplit(num_sites=(1, 2), elements=["V"]) +# dummy_expt_df = mpt.fetch_data() +# dummy_match = dummy_expt_df.compare(dummy_expt_df_check) +# if not dummy_match.empty: +# raise ValueError( +# f"dummy_expt_df and dummy_expt_df_check unmatched: {dummy_match}" +# ) + + +@pytest.mark.skipif(sys.version_info < (3, 8), reason="requires Python 3.8+") +def test_data_snapshot_one_by_one(): + dummy_expt_df_check = load_dataframe_from_json(dummy_data_path) + mpt = MPTimeSplit(num_sites=num_sites, elements=elements) + dummy_expt_df = mpt.fetch_data(one_by_one=True) + dummy_match = dummy_expt_df.compare(dummy_expt_df_check) + if not dummy_match.empty: + raise ValueError( + f"dummy_expt_df and dummy_expt_df_check unmatched: {dummy_match}" + ) + + +@pytest.mark.skipif(sys.version_info < (3, 8), reason="requires Python 3.8+") +def test_get_train_and_val_data(): + mpt = MPTimeSplit(num_sites=num_sites, elements=elements) + mpt.fetch_data(one_by_one=True) + train_inputs = [] + val_inputs = [] + train_outputs = [] + val_outputs = [] + for fold in mpt.folds: + train_input, val_input, train_output, val_output = mpt.get_train_and_val_data( + fold + ) + train_inputs.append(train_input) + val_inputs.append(val_input) + train_outputs.append(train_output) + val_outputs.append(val_output) + return train_inputs, val_inputs, train_outputs, val_outputs + + +@pytest.mark.skipif(sys.version_info < (3, 8), reason="requires Python 3.8+") +def test_get_test_data(): + mpt = MPTimeSplit(num_sites=num_sites, elements=elements) + mpt.fetch_data(one_by_one=True) + train_inputs, test_inputs, train_outputs, test_outputs = mpt.get_test_data() + return train_inputs, test_inputs, train_outputs, test_outputs + + +def test_load(): + mpt = MPTimeSplit(num_sites=num_sites, elements=elements) + data = mpt.load(dummy=True) + return data + + +if __name__ == "__main__": + # test_data_snapshot() + test_data_snapshot_one_by_one() + data = test_load() + train_inputs, val_inputs, train_outputs, val_outputs = test_get_train_and_val_data() + train_inputs, test_inputs, train_outputs, test_outputs = test_get_test_data() + data diff --git a/tox.ini b/tox.ini index 73304b2..81dd3a5 100644 --- a/tox.ini +++ b/tox.ini @@ -14,6 +14,8 @@ setenv = TOXINIDIR = {toxinidir} passenv = HOME + SETUPTOOLS_* + MP_API_KEY extras = testing commands = @@ -29,6 +31,7 @@ commands = # passenv = # HOMEPATH # PROGRAMDATA +# SETUPTOOLS_* # commands = # pre-commit run --all-files {posargs:--show-diff-on-failure} @@ -42,10 +45,14 @@ skip_install = True changedir = {toxinidir} deps = build: build[virtualenv] +passenv = + SETUPTOOLS_* commands = clean: python -c 'import shutil; [shutil.rmtree(p, True) for p in ("build", "dist", "docs/_build")]' clean: python -c 'import pathlib, shutil; [shutil.rmtree(p, True) for p in pathlib.Path("src").glob("*.egg-info")]' build: python -m build {posargs} +# By default, both `sdist` and `wheel` are built. If your sdist is too big or you don't want +# to make it available, consider running: `tox -e build -- --wheel` [testenv:{docs,doctests,linkcheck}] @@ -53,6 +60,8 @@ description = docs: Invoke sphinx-build to build the docs doctests: Invoke sphinx-build to run doctests linkcheck: Check for broken links in the documentation +passenv = + SETUPTOOLS_* setenv = DOCSDIR = {toxinidir}/docs BUILDDIR = {toxinidir}/docs/_build @@ -78,6 +87,7 @@ passenv = TWINE_USERNAME TWINE_PASSWORD TWINE_REPOSITORY + TWINE_REPOSITORY_URL deps = twine commands = python -m twine check dist/*