resp-protein-toolkit


Nameresp-protein-toolkit JSON
Version 0.2.0 PyPI version JSON
download
home_pageNone
SummaryBasic toolkit for common protein engineering tasks
upload_time2025-01-21 21:43:06
maintainerNone
docs_urlNone
authorNone
requires_python>=3.9
licenseCopyright 2024 The Regents of the University of California San Diego. All Rights Reserved.
keywords resp protein_engineering
VCS
bugtrack_url
requirements antpack anyio argon2-cffi argon2-cffi-bindings arrow asttokens async-lru attrs Babel beautifulsoup4 biopython bleach categorical_mix certifi cffi charset-normalizer comm contourpy cupy-cuda12x cycler Cython debugpy decorator defusedxml exceptiongroup executing fair-esm fastjsonschema fastrlock filelock fonttools fqdn fsspec h11 httpcore httpx idna ipykernel ipython isoduration jedi Jinja2 joblib json5 jsonpointer jsonschema jsonschema-specifications jupyter-events jupyter-lsp jupyter_client jupyter_core jupyter_server jupyter_server_terminals jupyterlab jupyterlab_pygments jupyterlab_server kiwisolver MarkupSafe matplotlib matplotlib-inline mistune mpmath nbclient nbconvert nbformat nest-asyncio networkx notebook notebook_shim numpy nvidia-cublas-cu12 nvidia-cuda-cupti-cu12 nvidia-cuda-nvrtc-cu12 nvidia-cuda-runtime-cu12 nvidia-cudnn-cu12 nvidia-cufft-cu12 nvidia-curand-cu12 nvidia-cusolver-cu12 nvidia-cusparse-cu12 nvidia-nccl-cu12 nvidia-nvjitlink-cu12 nvidia-nvtx-cu12 overrides packaging pandas pandocfilters parso patsy pexpect pillow platformdirs prometheus_client prompt_toolkit psutil ptyprocess pure-eval pybind11 pycparser Pygments pyparsing python-dateutil python-json-logger pytz PyYAML pyzmq referencing requests rfc3339-validator rfc3986-validator rpds-py scikit-learn scipy Send2Trash six sniffio soupsieve stack-data statsmodels sympy terminado threadpoolctl tinycss2 tomli
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # RESP2

![RESP illustration](./results_and_resources/illustrations/resp_illustration.png)

This repo contains the code for the `resp_protein_toolkit` package. It also contains all
of the code needed to reproduce key experiments from Parkinson / Hard, Ko and Wang 2024.

# Using resp_protein_toolkit

`resp_protein_toolkit` contains tools for key tasks in protein
engineering. It provides fast tools for quickly encoding protein
sequences using some common simple encodings (substitution matrices,
one-hot encoding and integer encoding); uncertainty-aware deep learning
models for classification and regression that you can train on your own
data; and software tools to perform the RESP *in silico* optimization
on your own sequences against your own targets. You can use
`resp_protein_toolkit` to perform all the tasks required for RESP
optimization against a target of interest.

### Installation
```
pip install resp_protein_toolkit
```
The toolkit is prebuilt for most common platforms but will automatically
be compiled from source for more unusual platforms.

### Usage

[The documentation](https://resp-protein-toolkit.readthedocs.io/en/latest/)
contains details on how to use `resp_protein_toolkit` together with examples
in the form of jupyter notebooks.


# Reproducing experiments from the RESP2 paper

We anticipate that most end users are likely more interested in using the RESP
pipeline for their own data -- if this describes you, see the `resp_protein_toolkit`
section above. If however you are interested *specifically* in reproducing the
experiments from the RESP2 paper, you can use the code in this repo to do so as well
by using the command line interfaces under `run_experiments.py` and under
`absolut_experiments/run_absolut_experiments.py`. These command line interfaces
enable you to reproduce the experiments from the paper in a step-by-step fashion,
first downloading the raw data, then encoding it, then training models on it
and reporting model evaluation results.

### Installation

These experiments were originally run on a Nvidia A6000 GPU with cuda12.3.

To run this package, first clone it:
```
git clone https://github.com/Wang-lab-UCSD/covid_experiments/
cd covid_experiments
```

then create a suitable virtual environment, activate it and install the requirements:
```
pip install -r requirements.txt
```
then install two additional packages:

```
pip install git+https://github.com/jlparkI/uncertaintyAwareDeepLearn@0.0.5
pip install git+https://github.com/jlparkI/xGPR@0.2.0.5
```

Note: the experiments in this repo were run with an older version of xGPR, v0.2.0.5. The older
version is slower and somewhat harder to install than later versions -- the most recent version is
distributed on pypi as a wheel whereas older versions are not -- so we recommend using later versions
(>0.4.0.1) for new projects. The difference in outcome should be negligible; nontheless to reproduce
the experiments here exactly as they were run initially you should use v0.2.0.5 as illustrated above.

These experiments were run with cuda runtime 12.1 locally installed and with cuSOLVER version 11.3.2.

### Reproducing the SARS-Cov2 experiments

To reproduce the SARS-Cov2 experiments from the paper, from the command line, run:
```
python run_experiments.py
```

and you'll see a list of options:
```
usage: run_experiments.py [-h] [--encodeall] [--traintest] [--traintest_llgp] [--id_key_positions] [--evolution] [--evanal]

Use this command line app to run key experiments. Note that this may overwrite the existing results saved in this repo.

options:
  -h, --help          show this help message and exit
  --encodeall         Encodes the amino acid sequence data which is included with the repository. This data contains the sequencing
                      results for the SARS-Cov2 experiments together with the frequency with which each sequence was observed both
                      in the naive library and in the binding bin for each antigen. The encoded data is divided into training and
                      test sets. It contains a variety of encodings (to evaluate the performance of each on the test set) and the
                      calculated enrichment scores for each datapoint, where enrichment is a proxy for binding. The encoded data is
                      saved to the encoded_data folder.
  --traintest         Run train-test evaluations on all models used in the paper, EXCEPT for the SNGP / LLGP. Each model is trained
                      on training set data from the encoded_data folder then evaluated on the test set in the same location. Test
                      set accuracy is saved to results_and_resources/traintest_log.rtxt.
  --traintest_llgp    Run train-test evaluations on the SNGP / LLGP model. This step is identical to --traintest but runs the
                      evaluation for the SNGP / LLGP model only. Since this model is slower to train it is split into a separate
                      step.
  --id_key_positions  This step can be run once models have been trained. In this step, the trained GP model is used to find the
                      most important positions for in-silico search, and these positions are printed to screen.
  --evolution         This step can be run once models have been trained. It uses the trained xGPR / GP model to run the RESP search
                      described in the paper and generate candidates for experimental evaluation. The candidates that are generated
                      are saved to a pickled file under results_and_resources/simulated_annealing.
  --evanal            Analyze the simulated annealing results, discarding problematic candidates to retain only the most promising
                      ones. This step should be run after --evolution since it uses the output of the --evolution step. The final
                      candidates selected for experimental evaluation are saved to results_and_resources/selected_sequences.                                                                                                                
```

For the SARS-Cov2 experiments, the raw data needed to run the remaining experiments
is already included with the repo, although it must be encoded using `--encodeall`
before running the subsequent steps. The subsequent steps will train models on
the encoded raw data and then conduct the RESP optimization sequence to
generate candidates. Each subsequent step is described in detail above. The raw data
for these experiments consists of amino acid sequences together with the frequency
with which each sequence appeared in the naive library and in the binding bin
for each antigen of interest.

Note that to ensure maximum reproducibility the SNGP / LLGP model is run using torch.use_deterministic_algorithms
set to True. This may cause an error unless certain environment variables are set. When running the traintest_llgp
experiment, then, you should first run the following line:
```
export CUBLAS_WORKSPACE_CONFIG=:4096:8
```

### Reproducing the Absolut! synthetic data experiments

The paper also describes experiments on synthetic data from the
[Absolut! database](https://github.com/csi-greifflab/Absolut).

To reproduce these experiments, do the following:
```
cd absolut_experiments
python run_absolut_experiments.py
```

and you will see a list of options as follows:

```
usage: run_absolut_experiments.py [-h] [--retrieve_data] [--encode_data] [--nmll] [--run_test_split] [--run_resp_search]
                                  [--evaluate_resp_candidates]

Use this command line app to run key experiments.

options:
  -h, --help            show this help message and exit
  --retrieve_data       Retrieve the raw data from the Absolut database and save it to the absolut_data folder. This step must be
                        performed before any other steps.
  --encode_data         Encode the retrieved absolut data, encoding all protein sequences as either one-hot or substitution
                        matrices, create a train-test split and save the training and test encoded sequences as .npy files under the
                        absolut_encoded_data folder. Also extracts 90th percentile and 80th percentile sequences to the same
                        location for use in fine-tuning LLMs. These are required for all subsequent steps.
  --nmll                Calculates the negative marginal log-likelihood on the training data for xGPR. This step is not required but
                        can be used to reproduce the hyperparameter tuning procedure originally used for xGPR if desired. The
                        results are printed to screen.
  --run_test_split      Trains xGPR and vBNN models on the training data from absolut_encoded_data and tests them on the test set in
                        the same location. The results of the test set evaluation are written to absolut_results/traintest_log.rtxt,
                        and the trained models are saved to absolut_results for use in subsequent steps.
  --run_resp_search     Generate candidate sequences using the RESP search with the final trained models. The resulting candidate
                        sequences will be saved to the 'absolut_results' folder under files ending in .rtxt; these files can be used
                        as input to Absolut! for scoring. To score these sequences you will need to download and install the
                        Absolut! software package; see https://github.com/csi-greifflab/Absolut for instructions on how to do so.
  --evaluate_resp_candidates
                        Once the candidate sequences have been scored using Absolut!, move the Absolut! output to the
                        'absolut_results/absolut_scores' folder, then use this argument to evaluate these scores and calculate /
                        print success rates for each model and target; the results are printed to screen.
```

These commands are sufficient to reproduce all key steps in the pipeline,
starting from raw data download, and are described in detail above.

The candidates generated by the fine-tuned Evodiff LLM (from Microsoft) and
ProteinMPNN (from the Baker lab) are already saved under
`absolut_experiments/absolut_results/absolut_scores`. If you would like to
fine-tune Evodiff and generate your own candidates using Evodiff, see this
fork of the Evodiff repo for instructions: https://github.com/jlparkI/evodiff_ft.
This is a lightly altered fork of Microsoft's Evodiff repo with only minor changes
intended to facilitate fine-tuning for this project. If you would like to
use ProteinMPNN to generate candidates, see the ProteinMPNN repository:
https://github.com/dauparas/ProteinMPNN . It is beyond the scope of this
repository to cover Evodiff and ProteinMPNN in detail we do not maintain
these models and they are neither part of this package nor the standard
RESP pipeline, but the two repositories linked above will guide you on how
to use them if needed.


### Citations

If using this toolkit in work intended for publication, please cite:

[Parkinson, J., Hard, R. & Wang, W. The RESP AI model accelerates the identification of tight-binding antibodies.
Nat Commun 14, 454 (2023).](https://doi.org/10.1038/s41467-023-36028-8)

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "resp-protein-toolkit",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": null,
    "keywords": "RESP, protein_engineering",
    "author": null,
    "author_email": "Jonathan Parkinson <jlparkinson1@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/c9/1c/711ad6d72be0bd36286b20ded1c34881aa8879b1a9736977dd77304d22dd/resp_protein_toolkit-0.2.0.tar.gz",
    "platform": null,
    "description": "# RESP2\n\n![RESP illustration](./results_and_resources/illustrations/resp_illustration.png)\n\nThis repo contains the code for the `resp_protein_toolkit` package. It also contains all\nof the code needed to reproduce key experiments from Parkinson / Hard, Ko and Wang 2024.\n\n# Using resp_protein_toolkit\n\n`resp_protein_toolkit` contains tools for key tasks in protein\nengineering. It provides fast tools for quickly encoding protein\nsequences using some common simple encodings (substitution matrices,\none-hot encoding and integer encoding); uncertainty-aware deep learning\nmodels for classification and regression that you can train on your own\ndata; and software tools to perform the RESP *in silico* optimization\non your own sequences against your own targets. You can use\n`resp_protein_toolkit` to perform all the tasks required for RESP\noptimization against a target of interest.\n\n### Installation\n```\npip install resp_protein_toolkit\n```\nThe toolkit is prebuilt for most common platforms but will automatically\nbe compiled from source for more unusual platforms.\n\n### Usage\n\n[The documentation](https://resp-protein-toolkit.readthedocs.io/en/latest/)\ncontains details on how to use `resp_protein_toolkit` together with examples\nin the form of jupyter notebooks.\n\n\n# Reproducing experiments from the RESP2 paper\n\nWe anticipate that most end users are likely more interested in using the RESP\npipeline for their own data -- if this describes you, see the `resp_protein_toolkit`\nsection above. If however you are interested *specifically* in reproducing the\nexperiments from the RESP2 paper, you can use the code in this repo to do so as well\nby using the command line interfaces under `run_experiments.py` and under\n`absolut_experiments/run_absolut_experiments.py`. These command line interfaces\nenable you to reproduce the experiments from the paper in a step-by-step fashion,\nfirst downloading the raw data, then encoding it, then training models on it\nand reporting model evaluation results.\n\n### Installation\n\nThese experiments were originally run on a Nvidia A6000 GPU with cuda12.3.\n\nTo run this package, first clone it:\n```\ngit clone https://github.com/Wang-lab-UCSD/covid_experiments/\ncd covid_experiments\n```\n\nthen create a suitable virtual environment, activate it and install the requirements:\n```\npip install -r requirements.txt\n```\nthen install two additional packages:\n\n```\npip install git+https://github.com/jlparkI/uncertaintyAwareDeepLearn@0.0.5\npip install git+https://github.com/jlparkI/xGPR@0.2.0.5\n```\n\nNote: the experiments in this repo were run with an older version of xGPR, v0.2.0.5. The older\nversion is slower and somewhat harder to install than later versions -- the most recent version is\ndistributed on pypi as a wheel whereas older versions are not -- so we recommend using later versions\n(>0.4.0.1) for new projects. The difference in outcome should be negligible; nontheless to reproduce\nthe experiments here exactly as they were run initially you should use v0.2.0.5 as illustrated above.\n\nThese experiments were run with cuda runtime 12.1 locally installed and with cuSOLVER version 11.3.2.\n\n### Reproducing the SARS-Cov2 experiments\n\nTo reproduce the SARS-Cov2 experiments from the paper, from the command line, run:\n```\npython run_experiments.py\n```\n\nand you'll see a list of options:\n```\nusage: run_experiments.py [-h] [--encodeall] [--traintest] [--traintest_llgp] [--id_key_positions] [--evolution] [--evanal]\n\nUse this command line app to run key experiments. Note that this may overwrite the existing results saved in this repo.\n\noptions:\n  -h, --help          show this help message and exit\n  --encodeall         Encodes the amino acid sequence data which is included with the repository. This data contains the sequencing\n                      results for the SARS-Cov2 experiments together with the frequency with which each sequence was observed both\n                      in the naive library and in the binding bin for each antigen. The encoded data is divided into training and\n                      test sets. It contains a variety of encodings (to evaluate the performance of each on the test set) and the\n                      calculated enrichment scores for each datapoint, where enrichment is a proxy for binding. The encoded data is\n                      saved to the encoded_data folder.\n  --traintest         Run train-test evaluations on all models used in the paper, EXCEPT for the SNGP / LLGP. Each model is trained\n                      on training set data from the encoded_data folder then evaluated on the test set in the same location. Test\n                      set accuracy is saved to results_and_resources/traintest_log.rtxt.\n  --traintest_llgp    Run train-test evaluations on the SNGP / LLGP model. This step is identical to --traintest but runs the\n                      evaluation for the SNGP / LLGP model only. Since this model is slower to train it is split into a separate\n                      step.\n  --id_key_positions  This step can be run once models have been trained. In this step, the trained GP model is used to find the\n                      most important positions for in-silico search, and these positions are printed to screen.\n  --evolution         This step can be run once models have been trained. It uses the trained xGPR / GP model to run the RESP search\n                      described in the paper and generate candidates for experimental evaluation. The candidates that are generated\n                      are saved to a pickled file under results_and_resources/simulated_annealing.\n  --evanal            Analyze the simulated annealing results, discarding problematic candidates to retain only the most promising\n                      ones. This step should be run after --evolution since it uses the output of the --evolution step. The final\n                      candidates selected for experimental evaluation are saved to results_and_resources/selected_sequences.                                                                                                                \n```\n\nFor the SARS-Cov2 experiments, the raw data needed to run the remaining experiments\nis already included with the repo, although it must be encoded using `--encodeall`\nbefore running the subsequent steps. The subsequent steps will train models on\nthe encoded raw data and then conduct the RESP optimization sequence to\ngenerate candidates. Each subsequent step is described in detail above. The raw data\nfor these experiments consists of amino acid sequences together with the frequency\nwith which each sequence appeared in the naive library and in the binding bin\nfor each antigen of interest.\n\nNote that to ensure maximum reproducibility the SNGP / LLGP model is run using torch.use_deterministic_algorithms\nset to True. This may cause an error unless certain environment variables are set. When running the traintest_llgp\nexperiment, then, you should first run the following line:\n```\nexport CUBLAS_WORKSPACE_CONFIG=:4096:8\n```\n\n### Reproducing the Absolut! synthetic data experiments\n\nThe paper also describes experiments on synthetic data from the\n[Absolut! database](https://github.com/csi-greifflab/Absolut).\n\nTo reproduce these experiments, do the following:\n```\ncd absolut_experiments\npython run_absolut_experiments.py\n```\n\nand you will see a list of options as follows:\n\n```\nusage: run_absolut_experiments.py [-h] [--retrieve_data] [--encode_data] [--nmll] [--run_test_split] [--run_resp_search]\n                                  [--evaluate_resp_candidates]\n\nUse this command line app to run key experiments.\n\noptions:\n  -h, --help            show this help message and exit\n  --retrieve_data       Retrieve the raw data from the Absolut database and save it to the absolut_data folder. This step must be\n                        performed before any other steps.\n  --encode_data         Encode the retrieved absolut data, encoding all protein sequences as either one-hot or substitution\n                        matrices, create a train-test split and save the training and test encoded sequences as .npy files under the\n                        absolut_encoded_data folder. Also extracts 90th percentile and 80th percentile sequences to the same\n                        location for use in fine-tuning LLMs. These are required for all subsequent steps.\n  --nmll                Calculates the negative marginal log-likelihood on the training data for xGPR. This step is not required but\n                        can be used to reproduce the hyperparameter tuning procedure originally used for xGPR if desired. The\n                        results are printed to screen.\n  --run_test_split      Trains xGPR and vBNN models on the training data from absolut_encoded_data and tests them on the test set in\n                        the same location. The results of the test set evaluation are written to absolut_results/traintest_log.rtxt,\n                        and the trained models are saved to absolut_results for use in subsequent steps.\n  --run_resp_search     Generate candidate sequences using the RESP search with the final trained models. The resulting candidate\n                        sequences will be saved to the 'absolut_results' folder under files ending in .rtxt; these files can be used\n                        as input to Absolut! for scoring. To score these sequences you will need to download and install the\n                        Absolut! software package; see https://github.com/csi-greifflab/Absolut for instructions on how to do so.\n  --evaluate_resp_candidates\n                        Once the candidate sequences have been scored using Absolut!, move the Absolut! output to the\n                        'absolut_results/absolut_scores' folder, then use this argument to evaluate these scores and calculate /\n                        print success rates for each model and target; the results are printed to screen.\n```\n\nThese commands are sufficient to reproduce all key steps in the pipeline,\nstarting from raw data download, and are described in detail above.\n\nThe candidates generated by the fine-tuned Evodiff LLM (from Microsoft) and\nProteinMPNN (from the Baker lab) are already saved under\n`absolut_experiments/absolut_results/absolut_scores`. If you would like to\nfine-tune Evodiff and generate your own candidates using Evodiff, see this\nfork of the Evodiff repo for instructions: https://github.com/jlparkI/evodiff_ft.\nThis is a lightly altered fork of Microsoft's Evodiff repo with only minor changes\nintended to facilitate fine-tuning for this project. If you would like to\nuse ProteinMPNN to generate candidates, see the ProteinMPNN repository:\nhttps://github.com/dauparas/ProteinMPNN . It is beyond the scope of this\nrepository to cover Evodiff and ProteinMPNN in detail we do not maintain\nthese models and they are neither part of this package nor the standard\nRESP pipeline, but the two repositories linked above will guide you on how\nto use them if needed.\n\n\n### Citations\n\nIf using this toolkit in work intended for publication, please cite:\n\n[Parkinson, J., Hard, R. & Wang, W. The RESP AI model accelerates the identification of tight-binding antibodies.\nNat Commun 14, 454 (2023).](https://doi.org/10.1038/s41467-023-36028-8)\n",
    "bugtrack_url": null,
    "license": "Copyright 2024 The Regents of the University of California San Diego. All Rights Reserved.",
    "summary": "Basic toolkit for common protein engineering tasks",
    "version": "0.2.0",
    "project_urls": {
        "Documentation": "https://resp-protein-toolkit.readthedocs.io/en/latest/",
        "Homepage": "https://github.com/Wang-lab-UCSD/RESP2"
    },
    "split_keywords": [
        "resp",
        " protein_engineering"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "eaf3d4a55ab1fae595eedaaf93badb5721534f3ddecd7a98632c6b2fdccc73be",
                "md5": "520a6613065148a248d3692716c96f76",
                "sha256": "cd388c8a0ebc08e60fb044226660b0d6cd6188ffee2557f5a76da9927b2f0a6b"
            },
            "downloads": -1,
            "filename": "resp_protein_toolkit-0.2.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl",
            "has_sig": false,
            "md5_digest": "520a6613065148a248d3692716c96f76",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 374724,
            "upload_time": "2025-01-21T21:42:29",
            "upload_time_iso_8601": "2025-01-21T21:42:29.726329Z",
            "url": "https://files.pythonhosted.org/packages/ea/f3/d4a55ab1fae595eedaaf93badb5721534f3ddecd7a98632c6b2fdccc73be/resp_protein_toolkit-0.2.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "bb4656dd313fb2dde40c2994279b9d03e8d4c6bb9510370872525a642607f040",
                "md5": "9a379d2f546e1bf97860cb8f6cda7d5a",
                "sha256": "50ae95dcd819f13c591f28ef2a35c2d10d878df6565c7f260a7ab5a784c8afaa"
            },
            "downloads": -1,
            "filename": "resp_protein_toolkit-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "9a379d2f546e1bf97860cb8f6cda7d5a",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 370445,
            "upload_time": "2025-01-21T21:42:32",
            "upload_time_iso_8601": "2025-01-21T21:42:32.145828Z",
            "url": "https://files.pythonhosted.org/packages/bb/46/56dd313fb2dde40c2994279b9d03e8d4c6bb9510370872525a642607f040/resp_protein_toolkit-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "3709f5243fb7d369c9338bf3f4f8ade7f4a4bd38db9624c76367b6424d1a0799",
                "md5": "8c70454ffd6406b4f8f65e93d2379677",
                "sha256": "ef61a8d3d23c287a48050a06f7fa936fddc39942dd99e8557ae761a260718c60"
            },
            "downloads": -1,
            "filename": "resp_protein_toolkit-0.2.0-cp310-cp310-win32.whl",
            "has_sig": false,
            "md5_digest": "8c70454ffd6406b4f8f65e93d2379677",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 349647,
            "upload_time": "2025-01-21T21:42:33",
            "upload_time_iso_8601": "2025-01-21T21:42:33.869555Z",
            "url": "https://files.pythonhosted.org/packages/37/09/f5243fb7d369c9338bf3f4f8ade7f4a4bd38db9624c76367b6424d1a0799/resp_protein_toolkit-0.2.0-cp310-cp310-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "7d8bfbedd1653acc75c9f22e274331e216db36d5dd14bad9131b9f7a91225c1a",
                "md5": "ed0b3863942703ca8efbdfbd9df7652a",
                "sha256": "716a0bb02a3426417f925b03f751eba5fbf4d7d1391aee18ecb1025ec59a760b"
            },
            "downloads": -1,
            "filename": "resp_protein_toolkit-0.2.0-cp310-cp310-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "ed0b3863942703ca8efbdfbd9df7652a",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 354774,
            "upload_time": "2025-01-21T21:42:36",
            "upload_time_iso_8601": "2025-01-21T21:42:36.229354Z",
            "url": "https://files.pythonhosted.org/packages/7d/8b/fbedd1653acc75c9f22e274331e216db36d5dd14bad9131b9f7a91225c1a/resp_protein_toolkit-0.2.0-cp310-cp310-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "f124b0f08ad8b68a60020d0cb9d1a0b4285367a1aec60098ebc680b5c76de01a",
                "md5": "475d482c739560401d4070d4887c9765",
                "sha256": "b6f96c9f097dfbbcc86f37a48e5363e7a06a88dca3c4bf4f36694b91cc98c2c9"
            },
            "downloads": -1,
            "filename": "resp_protein_toolkit-0.2.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl",
            "has_sig": false,
            "md5_digest": "475d482c739560401d4070d4887c9765",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 374526,
            "upload_time": "2025-01-21T21:42:38",
            "upload_time_iso_8601": "2025-01-21T21:42:38.599019Z",
            "url": "https://files.pythonhosted.org/packages/f1/24/b0f08ad8b68a60020d0cb9d1a0b4285367a1aec60098ebc680b5c76de01a/resp_protein_toolkit-0.2.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "f500186410733f6c0e58c35290edb0f74d0c2c713a253ee8b8d3cf6cb4e36f41",
                "md5": "868536f420986fa22a7d09d0b2739204",
                "sha256": "f219f63de7a7b16c4417e9fec159c8912e632e736cf6be85e42817a3ea1a724a"
            },
            "downloads": -1,
            "filename": "resp_protein_toolkit-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "868536f420986fa22a7d09d0b2739204",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 370289,
            "upload_time": "2025-01-21T21:42:41",
            "upload_time_iso_8601": "2025-01-21T21:42:41.051253Z",
            "url": "https://files.pythonhosted.org/packages/f5/00/186410733f6c0e58c35290edb0f74d0c2c713a253ee8b8d3cf6cb4e36f41/resp_protein_toolkit-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "efd764fa75ba57a9b4a1e225a36aa6364f07651ae9f8a84c16e8b831fde748d7",
                "md5": "2032ad4260b40a85f46b48d4c916c726",
                "sha256": "069340f95643587d9392e89939e581f64bfc73ba553c31b861bfabd4f7da352d"
            },
            "downloads": -1,
            "filename": "resp_protein_toolkit-0.2.0-cp311-cp311-win32.whl",
            "has_sig": false,
            "md5_digest": "2032ad4260b40a85f46b48d4c916c726",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 349520,
            "upload_time": "2025-01-21T21:42:43",
            "upload_time_iso_8601": "2025-01-21T21:42:43.401114Z",
            "url": "https://files.pythonhosted.org/packages/ef/d7/64fa75ba57a9b4a1e225a36aa6364f07651ae9f8a84c16e8b831fde748d7/resp_protein_toolkit-0.2.0-cp311-cp311-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "c3ade6bb44bc392708375718db1e9376deebc7282c98ab6955fe36b895093f3c",
                "md5": "a5fce94835835ad371c19e04c77c4222",
                "sha256": "0ede209d6e948804e776bac19f175e78d3dde09e3fcdfa5f43da67112040d44d"
            },
            "downloads": -1,
            "filename": "resp_protein_toolkit-0.2.0-cp311-cp311-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "a5fce94835835ad371c19e04c77c4222",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 354655,
            "upload_time": "2025-01-21T21:42:45",
            "upload_time_iso_8601": "2025-01-21T21:42:45.452042Z",
            "url": "https://files.pythonhosted.org/packages/c3/ad/e6bb44bc392708375718db1e9376deebc7282c98ab6955fe36b895093f3c/resp_protein_toolkit-0.2.0-cp311-cp311-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "28565f7dd7540c06f3d94391b2214d2c433e2d996972908f783269b46a254f48",
                "md5": "fd510ac6089d6c86a9da3b0974ab15bf",
                "sha256": "387274493d94c0ecdc3540e6e5c532e5ef7747e65a7d56d165bbf9fb1940aa7d"
            },
            "downloads": -1,
            "filename": "resp_protein_toolkit-0.2.0-cp312-abi3-manylinux_2_17_i686.manylinux2014_i686.whl",
            "has_sig": false,
            "md5_digest": "fd510ac6089d6c86a9da3b0974ab15bf",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 373878,
            "upload_time": "2025-01-21T21:42:46",
            "upload_time_iso_8601": "2025-01-21T21:42:46.978608Z",
            "url": "https://files.pythonhosted.org/packages/28/56/5f7dd7540c06f3d94391b2214d2c433e2d996972908f783269b46a254f48/resp_protein_toolkit-0.2.0-cp312-abi3-manylinux_2_17_i686.manylinux2014_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "f71413cf7a42f9ba0ffeb490749f37ca139fb90eb5f9b939589c4380decf8040",
                "md5": "8fcf7d5ce87c8ba8a37e5177353a962b",
                "sha256": "8a1fb69c90584c8b16824738cfb39b5cad43457885bd3c7177ad44782d10a486"
            },
            "downloads": -1,
            "filename": "resp_protein_toolkit-0.2.0-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "8fcf7d5ce87c8ba8a37e5177353a962b",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 369638,
            "upload_time": "2025-01-21T21:42:49",
            "upload_time_iso_8601": "2025-01-21T21:42:49.180501Z",
            "url": "https://files.pythonhosted.org/packages/f7/14/13cf7a42f9ba0ffeb490749f37ca139fb90eb5f9b939589c4380decf8040/resp_protein_toolkit-0.2.0-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "52057d35cfa86acba91e40b88db22fa0a17b1d7b940a0f92fe4a881f79981a1f",
                "md5": "4d8f645bce67ffcf69709bde7f8de08a",
                "sha256": "a39abb6298db703a6f6319f75ad653f153bc9793e62853875fab145297ff92fc"
            },
            "downloads": -1,
            "filename": "resp_protein_toolkit-0.2.0-cp312-abi3-win32.whl",
            "has_sig": false,
            "md5_digest": "4d8f645bce67ffcf69709bde7f8de08a",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 349322,
            "upload_time": "2025-01-21T21:42:51",
            "upload_time_iso_8601": "2025-01-21T21:42:51.953740Z",
            "url": "https://files.pythonhosted.org/packages/52/05/7d35cfa86acba91e40b88db22fa0a17b1d7b940a0f92fe4a881f79981a1f/resp_protein_toolkit-0.2.0-cp312-abi3-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "da58e3b586aaf93ac734d4c20d1575ffda596df58d2f8744e7a6274818438e90",
                "md5": "49820481fb895f1643e370aa32cda7ff",
                "sha256": "6417da74f6e263b72a726d0db9540466e20497ee07d0e008587d20f86d52c3bf"
            },
            "downloads": -1,
            "filename": "resp_protein_toolkit-0.2.0-cp312-abi3-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "49820481fb895f1643e370aa32cda7ff",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 354475,
            "upload_time": "2025-01-21T21:42:54",
            "upload_time_iso_8601": "2025-01-21T21:42:54.300759Z",
            "url": "https://files.pythonhosted.org/packages/da/58/e3b586aaf93ac734d4c20d1575ffda596df58d2f8744e7a6274818438e90/resp_protein_toolkit-0.2.0-cp312-abi3-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "a35477f3f29e65a0fb5af6ef10942d921d05303d9420d0839595fb3a553de5bf",
                "md5": "13bd24827a319b1e2f30050f8056866b",
                "sha256": "87ebf19635d92e0d5885d1f7ef9a28d20b025740161e8592d2fc6720dc570db2"
            },
            "downloads": -1,
            "filename": "resp_protein_toolkit-0.2.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl",
            "has_sig": false,
            "md5_digest": "13bd24827a319b1e2f30050f8056866b",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 374726,
            "upload_time": "2025-01-21T21:42:57",
            "upload_time_iso_8601": "2025-01-21T21:42:57.231115Z",
            "url": "https://files.pythonhosted.org/packages/a3/54/77f3f29e65a0fb5af6ef10942d921d05303d9420d0839595fb3a553de5bf/resp_protein_toolkit-0.2.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "0ac0f5b8f9a2835038442d5a4d7a938bc1837d20da7dc1bba97601be3f048fd7",
                "md5": "d2545d55507477a4ff09638d56f5fd29",
                "sha256": "40d5c83e9b9ea14971338dc788c4f64349a093c7968153ad8aa9b80cce92e512"
            },
            "downloads": -1,
            "filename": "resp_protein_toolkit-0.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "d2545d55507477a4ff09638d56f5fd29",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 370481,
            "upload_time": "2025-01-21T21:42:59",
            "upload_time_iso_8601": "2025-01-21T21:42:59.076556Z",
            "url": "https://files.pythonhosted.org/packages/0a/c0/f5b8f9a2835038442d5a4d7a938bc1837d20da7dc1bba97601be3f048fd7/resp_protein_toolkit-0.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "1fc441ea36e928ebc60c69e8b567843bc92fbe1a89e07c8a6c12edbafae99f8a",
                "md5": "c3e817eff5419cd8dcd55140b5467aa3",
                "sha256": "7b4094b45785948619fb4ddcf35d6c9059fbd1d9caa6605ebc855450793034f5"
            },
            "downloads": -1,
            "filename": "resp_protein_toolkit-0.2.0-cp39-cp39-win32.whl",
            "has_sig": false,
            "md5_digest": "c3e817eff5419cd8dcd55140b5467aa3",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 350049,
            "upload_time": "2025-01-21T21:43:00",
            "upload_time_iso_8601": "2025-01-21T21:43:00.579110Z",
            "url": "https://files.pythonhosted.org/packages/1f/c4/41ea36e928ebc60c69e8b567843bc92fbe1a89e07c8a6c12edbafae99f8a/resp_protein_toolkit-0.2.0-cp39-cp39-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "0c2a357aa234368d23f76140d3a82068f07b82c3d3e3d71868936c45fc4a9276",
                "md5": "971f63ee933df13f9094dce2237cf8ed",
                "sha256": "fa239bdcea96333b9a5b2dbf4079bd98fd7473f2ae1f0a41804f602235abc2de"
            },
            "downloads": -1,
            "filename": "resp_protein_toolkit-0.2.0-cp39-cp39-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "971f63ee933df13f9094dce2237cf8ed",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 355249,
            "upload_time": "2025-01-21T21:43:03",
            "upload_time_iso_8601": "2025-01-21T21:43:03.064651Z",
            "url": "https://files.pythonhosted.org/packages/0c/2a/357aa234368d23f76140d3a82068f07b82c3d3e3d71868936c45fc4a9276/resp_protein_toolkit-0.2.0-cp39-cp39-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "c91c711ad6d72be0bd36286b20ded1c34881aa8879b1a9736977dd77304d22dd",
                "md5": "7f14fd1c53099b5fdb0b775f200cc907",
                "sha256": "fddc4cf425d33ab6452d21ec7532f9bd7e14c9f61aba4ce0a54fc8b9cdea227f"
            },
            "downloads": -1,
            "filename": "resp_protein_toolkit-0.2.0.tar.gz",
            "has_sig": false,
            "md5_digest": "7f14fd1c53099b5fdb0b775f200cc907",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 2179084,
            "upload_time": "2025-01-21T21:43:06",
            "upload_time_iso_8601": "2025-01-21T21:43:06.199588Z",
            "url": "https://files.pythonhosted.org/packages/c9/1c/711ad6d72be0bd36286b20ded1c34881aa8879b1a9736977dd77304d22dd/resp_protein_toolkit-0.2.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-01-21 21:43:06",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "Wang-lab-UCSD",
    "github_project": "RESP2",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [
        {
            "name": "antpack",
            "specs": []
        },
        {
            "name": "anyio",
            "specs": [
                [
                    "==",
                    "4.4.0"
                ]
            ]
        },
        {
            "name": "argon2-cffi",
            "specs": [
                [
                    "==",
                    "23.1.0"
                ]
            ]
        },
        {
            "name": "argon2-cffi-bindings",
            "specs": [
                [
                    "==",
                    "21.2.0"
                ]
            ]
        },
        {
            "name": "arrow",
            "specs": [
                [
                    "==",
                    "1.3.0"
                ]
            ]
        },
        {
            "name": "asttokens",
            "specs": [
                [
                    "==",
                    "2.4.1"
                ]
            ]
        },
        {
            "name": "async-lru",
            "specs": [
                [
                    "==",
                    "2.0.4"
                ]
            ]
        },
        {
            "name": "attrs",
            "specs": [
                [
                    "==",
                    "23.2.0"
                ]
            ]
        },
        {
            "name": "Babel",
            "specs": [
                [
                    "==",
                    "2.15.0"
                ]
            ]
        },
        {
            "name": "beautifulsoup4",
            "specs": [
                [
                    "==",
                    "4.12.3"
                ]
            ]
        },
        {
            "name": "biopython",
            "specs": [
                [
                    "==",
                    "1.83"
                ]
            ]
        },
        {
            "name": "bleach",
            "specs": [
                [
                    "==",
                    "6.1.0"
                ]
            ]
        },
        {
            "name": "categorical_mix",
            "specs": []
        },
        {
            "name": "certifi",
            "specs": [
                [
                    "==",
                    "2024.12.14"
                ]
            ]
        },
        {
            "name": "cffi",
            "specs": [
                [
                    "==",
                    "1.16.0"
                ]
            ]
        },
        {
            "name": "charset-normalizer",
            "specs": [
                [
                    "==",
                    "3.3.2"
                ]
            ]
        },
        {
            "name": "comm",
            "specs": [
                [
                    "==",
                    "0.2.2"
                ]
            ]
        },
        {
            "name": "contourpy",
            "specs": [
                [
                    "==",
                    "1.2.1"
                ]
            ]
        },
        {
            "name": "cupy-cuda12x",
            "specs": [
                [
                    "==",
                    "13.2.0"
                ]
            ]
        },
        {
            "name": "cycler",
            "specs": [
                [
                    "==",
                    "0.12.1"
                ]
            ]
        },
        {
            "name": "Cython",
            "specs": [
                [
                    "==",
                    "3.0.10"
                ]
            ]
        },
        {
            "name": "debugpy",
            "specs": [
                [
                    "==",
                    "1.8.1"
                ]
            ]
        },
        {
            "name": "decorator",
            "specs": [
                [
                    "==",
                    "5.1.1"
                ]
            ]
        },
        {
            "name": "defusedxml",
            "specs": [
                [
                    "==",
                    "0.7.1"
                ]
            ]
        },
        {
            "name": "exceptiongroup",
            "specs": [
                [
                    "==",
                    "1.2.1"
                ]
            ]
        },
        {
            "name": "executing",
            "specs": [
                [
                    "==",
                    "2.0.1"
                ]
            ]
        },
        {
            "name": "fair-esm",
            "specs": [
                [
                    "==",
                    "2.0.0"
                ]
            ]
        },
        {
            "name": "fastjsonschema",
            "specs": [
                [
                    "==",
                    "2.20.0"
                ]
            ]
        },
        {
            "name": "fastrlock",
            "specs": [
                [
                    "==",
                    "0.8.2"
                ]
            ]
        },
        {
            "name": "filelock",
            "specs": [
                [
                    "==",
                    "3.13.1"
                ]
            ]
        },
        {
            "name": "fonttools",
            "specs": [
                [
                    "==",
                    "4.53.0"
                ]
            ]
        },
        {
            "name": "fqdn",
            "specs": [
                [
                    "==",
                    "1.5.1"
                ]
            ]
        },
        {
            "name": "fsspec",
            "specs": [
                [
                    "==",
                    "2024.2.0"
                ]
            ]
        },
        {
            "name": "h11",
            "specs": [
                [
                    "==",
                    "0.14.0"
                ]
            ]
        },
        {
            "name": "httpcore",
            "specs": [
                [
                    "==",
                    "1.0.5"
                ]
            ]
        },
        {
            "name": "httpx",
            "specs": [
                [
                    "==",
                    "0.27.0"
                ]
            ]
        },
        {
            "name": "idna",
            "specs": [
                [
                    "==",
                    "3.7"
                ]
            ]
        },
        {
            "name": "ipykernel",
            "specs": [
                [
                    "==",
                    "6.29.4"
                ]
            ]
        },
        {
            "name": "ipython",
            "specs": [
                [
                    "==",
                    "8.25.0"
                ]
            ]
        },
        {
            "name": "isoduration",
            "specs": [
                [
                    "==",
                    "20.11.0"
                ]
            ]
        },
        {
            "name": "jedi",
            "specs": [
                [
                    "==",
                    "0.19.1"
                ]
            ]
        },
        {
            "name": "Jinja2",
            "specs": [
                [
                    "==",
                    "3.1.5"
                ]
            ]
        },
        {
            "name": "joblib",
            "specs": [
                [
                    "==",
                    "1.4.2"
                ]
            ]
        },
        {
            "name": "json5",
            "specs": [
                [
                    "==",
                    "0.9.25"
                ]
            ]
        },
        {
            "name": "jsonpointer",
            "specs": [
                [
                    "==",
                    "3.0.0"
                ]
            ]
        },
        {
            "name": "jsonschema",
            "specs": [
                [
                    "==",
                    "4.22.0"
                ]
            ]
        },
        {
            "name": "jsonschema-specifications",
            "specs": [
                [
                    "==",
                    "2023.12.1"
                ]
            ]
        },
        {
            "name": "jupyter-events",
            "specs": [
                [
                    "==",
                    "0.10.0"
                ]
            ]
        },
        {
            "name": "jupyter-lsp",
            "specs": [
                [
                    "==",
                    "2.2.5"
                ]
            ]
        },
        {
            "name": "jupyter_client",
            "specs": [
                [
                    "==",
                    "8.6.2"
                ]
            ]
        },
        {
            "name": "jupyter_core",
            "specs": [
                [
                    "==",
                    "5.7.2"
                ]
            ]
        },
        {
            "name": "jupyter_server",
            "specs": [
                [
                    "==",
                    "2.14.1"
                ]
            ]
        },
        {
            "name": "jupyter_server_terminals",
            "specs": [
                [
                    "==",
                    "0.5.3"
                ]
            ]
        },
        {
            "name": "jupyterlab",
            "specs": [
                [
                    ">=",
                    "4.2.5"
                ]
            ]
        },
        {
            "name": "jupyterlab_pygments",
            "specs": [
                [
                    "==",
                    "0.3.0"
                ]
            ]
        },
        {
            "name": "jupyterlab_server",
            "specs": [
                [
                    "==",
                    "2.27.2"
                ]
            ]
        },
        {
            "name": "kiwisolver",
            "specs": [
                [
                    "==",
                    "1.4.5"
                ]
            ]
        },
        {
            "name": "MarkupSafe",
            "specs": [
                [
                    "==",
                    "2.1.5"
                ]
            ]
        },
        {
            "name": "matplotlib",
            "specs": [
                [
                    "==",
                    "3.9.0"
                ]
            ]
        },
        {
            "name": "matplotlib-inline",
            "specs": [
                [
                    "==",
                    "0.1.7"
                ]
            ]
        },
        {
            "name": "mistune",
            "specs": [
                [
                    "==",
                    "3.0.2"
                ]
            ]
        },
        {
            "name": "mpmath",
            "specs": [
                [
                    "==",
                    "1.3.0"
                ]
            ]
        },
        {
            "name": "nbclient",
            "specs": [
                [
                    "==",
                    "0.10.0"
                ]
            ]
        },
        {
            "name": "nbconvert",
            "specs": [
                [
                    "==",
                    "7.16.4"
                ]
            ]
        },
        {
            "name": "nbformat",
            "specs": [
                [
                    "==",
                    "5.10.4"
                ]
            ]
        },
        {
            "name": "nest-asyncio",
            "specs": [
                [
                    "==",
                    "1.6.0"
                ]
            ]
        },
        {
            "name": "networkx",
            "specs": [
                [
                    "==",
                    "3.2.1"
                ]
            ]
        },
        {
            "name": "notebook",
            "specs": [
                [
                    ">=",
                    "7.2.2"
                ]
            ]
        },
        {
            "name": "notebook_shim",
            "specs": [
                [
                    "==",
                    "0.2.4"
                ]
            ]
        },
        {
            "name": "numpy",
            "specs": [
                [
                    "==",
                    "1.24.4"
                ]
            ]
        },
        {
            "name": "nvidia-cublas-cu12",
            "specs": [
                [
                    "==",
                    "12.1.3.1"
                ]
            ]
        },
        {
            "name": "nvidia-cuda-cupti-cu12",
            "specs": [
                [
                    "==",
                    "12.1.105"
                ]
            ]
        },
        {
            "name": "nvidia-cuda-nvrtc-cu12",
            "specs": [
                [
                    "==",
                    "12.1.105"
                ]
            ]
        },
        {
            "name": "nvidia-cuda-runtime-cu12",
            "specs": [
                [
                    "==",
                    "12.1.105"
                ]
            ]
        },
        {
            "name": "nvidia-cudnn-cu12",
            "specs": [
                [
                    "==",
                    "8.9.2.26"
                ]
            ]
        },
        {
            "name": "nvidia-cufft-cu12",
            "specs": [
                [
                    "==",
                    "11.0.2.54"
                ]
            ]
        },
        {
            "name": "nvidia-curand-cu12",
            "specs": [
                [
                    "==",
                    "10.3.2.106"
                ]
            ]
        },
        {
            "name": "nvidia-cusolver-cu12",
            "specs": [
                [
                    "==",
                    "11.4.5.107"
                ]
            ]
        },
        {
            "name": "nvidia-cusparse-cu12",
            "specs": [
                [
                    "==",
                    "12.1.0.106"
                ]
            ]
        },
        {
            "name": "nvidia-nccl-cu12",
            "specs": [
                [
                    "==",
                    "2.20.5"
                ]
            ]
        },
        {
            "name": "nvidia-nvjitlink-cu12",
            "specs": [
                [
                    "==",
                    "12.1.105"
                ]
            ]
        },
        {
            "name": "nvidia-nvtx-cu12",
            "specs": [
                [
                    "==",
                    "12.1.105"
                ]
            ]
        },
        {
            "name": "overrides",
            "specs": [
                [
                    "==",
                    "7.7.0"
                ]
            ]
        },
        {
            "name": "packaging",
            "specs": [
                [
                    "==",
                    "24.1"
                ]
            ]
        },
        {
            "name": "pandas",
            "specs": [
                [
                    "==",
                    "2.2.2"
                ]
            ]
        },
        {
            "name": "pandocfilters",
            "specs": [
                [
                    "==",
                    "1.5.1"
                ]
            ]
        },
        {
            "name": "parso",
            "specs": [
                [
                    "==",
                    "0.8.4"
                ]
            ]
        },
        {
            "name": "patsy",
            "specs": [
                [
                    "==",
                    "0.5.6"
                ]
            ]
        },
        {
            "name": "pexpect",
            "specs": [
                [
                    "==",
                    "4.9.0"
                ]
            ]
        },
        {
            "name": "pillow",
            "specs": [
                [
                    ">=",
                    "10.3.0"
                ]
            ]
        },
        {
            "name": "platformdirs",
            "specs": [
                [
                    "==",
                    "4.2.2"
                ]
            ]
        },
        {
            "name": "prometheus_client",
            "specs": [
                [
                    "==",
                    "0.20.0"
                ]
            ]
        },
        {
            "name": "prompt_toolkit",
            "specs": [
                [
                    "==",
                    "3.0.47"
                ]
            ]
        },
        {
            "name": "psutil",
            "specs": [
                [
                    "==",
                    "6.0.0"
                ]
            ]
        },
        {
            "name": "ptyprocess",
            "specs": [
                [
                    "==",
                    "0.7.0"
                ]
            ]
        },
        {
            "name": "pure-eval",
            "specs": [
                [
                    "==",
                    "0.2.2"
                ]
            ]
        },
        {
            "name": "pybind11",
            "specs": [
                [
                    "==",
                    "2.12.0"
                ]
            ]
        },
        {
            "name": "pycparser",
            "specs": [
                [
                    "==",
                    "2.22"
                ]
            ]
        },
        {
            "name": "Pygments",
            "specs": [
                [
                    "==",
                    "2.18.0"
                ]
            ]
        },
        {
            "name": "pyparsing",
            "specs": [
                [
                    "==",
                    "3.1.2"
                ]
            ]
        },
        {
            "name": "python-dateutil",
            "specs": [
                [
                    "==",
                    "2.9.0.post0"
                ]
            ]
        },
        {
            "name": "python-json-logger",
            "specs": [
                [
                    "==",
                    "2.0.7"
                ]
            ]
        },
        {
            "name": "pytz",
            "specs": [
                [
                    "==",
                    "2024.1"
                ]
            ]
        },
        {
            "name": "PyYAML",
            "specs": [
                [
                    "==",
                    "6.0.1"
                ]
            ]
        },
        {
            "name": "pyzmq",
            "specs": [
                [
                    "==",
                    "26.0.3"
                ]
            ]
        },
        {
            "name": "referencing",
            "specs": [
                [
                    "==",
                    "0.35.1"
                ]
            ]
        },
        {
            "name": "requests",
            "specs": [
                [
                    "==",
                    "2.32.3"
                ]
            ]
        },
        {
            "name": "rfc3339-validator",
            "specs": [
                [
                    "==",
                    "0.1.4"
                ]
            ]
        },
        {
            "name": "rfc3986-validator",
            "specs": [
                [
                    "==",
                    "0.1.1"
                ]
            ]
        },
        {
            "name": "rpds-py",
            "specs": [
                [
                    "==",
                    "0.18.1"
                ]
            ]
        },
        {
            "name": "scikit-learn",
            "specs": [
                [
                    "==",
                    "1.5.0"
                ]
            ]
        },
        {
            "name": "scipy",
            "specs": [
                [
                    "==",
                    "1.13.1"
                ]
            ]
        },
        {
            "name": "Send2Trash",
            "specs": [
                [
                    "==",
                    "1.8.3"
                ]
            ]
        },
        {
            "name": "six",
            "specs": [
                [
                    "==",
                    "1.16.0"
                ]
            ]
        },
        {
            "name": "sniffio",
            "specs": [
                [
                    "==",
                    "1.3.1"
                ]
            ]
        },
        {
            "name": "soupsieve",
            "specs": [
                [
                    "==",
                    "2.5"
                ]
            ]
        },
        {
            "name": "stack-data",
            "specs": [
                [
                    "==",
                    "0.6.3"
                ]
            ]
        },
        {
            "name": "statsmodels",
            "specs": [
                [
                    "==",
                    "0.14.2"
                ]
            ]
        },
        {
            "name": "sympy",
            "specs": [
                [
                    "==",
                    "1.12"
                ]
            ]
        },
        {
            "name": "terminado",
            "specs": [
                [
                    "==",
                    "0.18.1"
                ]
            ]
        },
        {
            "name": "threadpoolctl",
            "specs": [
                [
                    "==",
                    "3.5.0"
                ]
            ]
        },
        {
            "name": "tinycss2",
            "specs": [
                [
                    "==",
                    "1.3.0"
                ]
            ]
        },
        {
            "name": "tomli",
            "specs": [
                [
                    "==",
                    "2.0.1"
                ]
            ]
        }
    ],
    "lcname": "resp-protein-toolkit"
}
        
Elapsed time: 0.40440s