cpp-protein-encoders


Namecpp-protein-encoders JSON
Version 0.0.1 PyPI version JSON
download
home_pageNone
SummaryFast Python-wrapped C++ basic encoders for protein sequences
upload_time2024-07-22 04:15:17
maintainerNone
docs_urlNone
authorNone
requires_python>=3.9
licenseMIT License Copyright (c) 2024 Jonathan Parkinson Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
keywords tokenizer protein tokenizer fast protein tokenizer protein encoder fast protein encoder
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # cpp_protein_encoders

To use them as input to an ML model, protein sequences have to
be encoded (e.g. one-hot encoding, etc.) It's *very* easy to write
Python code to do this, but if you do this often enough, at some point
you'll realize you have multiple redundant code blocks in different
projects that all do the same thing. For this reason, it's convenient
to have a single simple plugin tool to do basic protein encoding wherever
you need it. `cpp_protein_encoders` provides a simple,
fast and flexible tool for common encoding schemes (I'll add
more over time if I find any others I am using frequently -- please
feel free to suggest any that you would find useful.)

Currently supported schemes include:

- One-hot encoding with either a 2d or 3d array as output, using either the
basic 20 amino acid alphabet, or the basic alphabet plus gaps, or an extended
alphabet including unusual symbols (B, J, O, U, X, Z).
- Integer encoding, using either the basic 20 amino acid alphabet, or the basic alphabet plus gaps, or an extended
alphabet including unusual symbols (B, J, O, U, X, Z). Integer encoding is
useful for LightGBM (gradient boosted trees) and some clustering schemes.
- Substitution matrix encoding using a 21 letter alphabet (standard AAs plus
gaps) with various percent homologies and two encoding schemes supported.

`cpp_protein_encoders` encodes sequences as numpy arrays. Why not as
PyTorch / Jax / Tensorflow? There are two reasons for this. First, numpy is
much more universal. A numpy array is easily converted to e.g. a PyTorch
(or other framework) array in-place with negligible overhead. Moreover,
you may need to use encoded sequences as input to a library like LightGBM,
XGBoost or xGPR that takes numpy arrays as input.

Second, by using numpy we ensure this package has only a single
dependency -- numpy -- which is *relatively* lightweight (the same cannot
be said for PyTorch or Tensorflow).

Since this package is (at this time) small and simple,
documentation is relatively brief and is below.

### Performance

Sequence encoding is almost never the bottleneck in ML or statistical
analysis (if it is, you're doing something unusual). Still, FWIW, this
package gives roughly an order of magnitude speed improvement over a
naive pure Python approach (more if you are processing numerous
minibatches).

### Installation
```
pip install cpp_protein_encoders
```

### Usage

```python
from cpp_protein_encoders import OneHotProteinEncoder, IntegerProteinEncoder
from cpp_protein_encoders import SubstitutionMatrixEncoder

# Note that all characters are expected to be uppercase.

sequences = ['AAAGGGYYY', 'CCCTTTAAA', 'GGGTTTFF-']
```

When creating a OneHotProteinEncoder or an IntegerProteinEncoder, we
can use either the 'standard' alphabet (basic 20 AAs), the 'gapped'
alphabet (basic 20 AAs + gaps), or the 'expanded' alphabet (gaps +
unusual AAs, see above). If we pass sequences that contain unexpected
characters, an exception will be raised.

```python
encoder1 = OneHotProteinEncoder(alphabet = 'gapped')
encoder2 = IntegerProteinEncoder(alphabet = 'gapped')
```

For substitution matrices, we can select a homology value to indicate
which substitution matrix to use (90% homology, 85%, and so on).
Current options are '95', '90', '85', '75', '62'.
We can also set 'use_standardized_mat' to be True or False. If True,
each AA is encoded using the corresponding row of a scaled Cholesky
decomposition of a distance matrix built using the substitution matrix.
This ensures that the Euclidean distance between any two representations
is equal to the distance between them as determined using the substitution
matrix. This can work well for kernel machines and some NNs. Alternatively,
we can set 'use_standardized_mat' to be False, in which case the AAs are
encoded as the corresponding row of the substitution matrix. This is
unlikely to work well in kernel machines but may work well for some NNs.

```python
encoder3 = SubstitutionMatrixEncoder(homology = '90', use_standardized_mat = True)
```

When encoding, there are two important options:
`max_length` and `flatten_output_array`. `max_length` can be None or
an integer. If None, the maximum length is determined from the input
sequence list and all sequences are if necessary zero-padded to be that
length. If `max_length` is an int, all sequences are if necessary zero-
padded to be `max_length`. (If you specify max length then pass a sequence
that is *longer*, an exception will be raised).

The output array is normally a 3d array of size N x M x A for N sequences,
M amino acids and A alphabet size. If `flatten_output_array` is True,
this is flattened to a 2d array of size N x (M * A). *IMPORTANT*: For
integer encoding, the output array is always a 2d array anyway, so
`flatten_output_array` is not in that case accepted as an option.

```python
first_set = encoder1.encode(sequences, flatten_output_array = False, max_length = None)
second_set = encoder2.encode(sequences, max_length = None)
third_set = encoder3.encode(sequences, flatten_output_array = False, max_length = None)
```

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "cpp-protein-encoders",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": null,
    "keywords": "tokenizer, protein tokenizer, fast protein tokenizer, protein encoder, fast protein encoder",
    "author": null,
    "author_email": "Jonathan Parkinson <jlparkinson1@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/33/6d/f6f07a90d68ecfe1d647c7089c74d74e85562e19840ef1bac409803ab502/cpp_protein_encoders-0.0.1.tar.gz",
    "platform": null,
    "description": "# cpp_protein_encoders\n\nTo use them as input to an ML model, protein sequences have to\nbe encoded (e.g. one-hot encoding, etc.) It's *very* easy to write\nPython code to do this, but if you do this often enough, at some point\nyou'll realize you have multiple redundant code blocks in different\nprojects that all do the same thing. For this reason, it's convenient\nto have a single simple plugin tool to do basic protein encoding wherever\nyou need it. `cpp_protein_encoders` provides a simple,\nfast and flexible tool for common encoding schemes (I'll add\nmore over time if I find any others I am using frequently -- please\nfeel free to suggest any that you would find useful.)\n\nCurrently supported schemes include:\n\n- One-hot encoding with either a 2d or 3d array as output, using either the\nbasic 20 amino acid alphabet, or the basic alphabet plus gaps, or an extended\nalphabet including unusual symbols (B, J, O, U, X, Z).\n- Integer encoding, using either the basic 20 amino acid alphabet, or the basic alphabet plus gaps, or an extended\nalphabet including unusual symbols (B, J, O, U, X, Z). Integer encoding is\nuseful for LightGBM (gradient boosted trees) and some clustering schemes.\n- Substitution matrix encoding using a 21 letter alphabet (standard AAs plus\ngaps) with various percent homologies and two encoding schemes supported.\n\n`cpp_protein_encoders` encodes sequences as numpy arrays. Why not as\nPyTorch / Jax / Tensorflow? There are two reasons for this. First, numpy is\nmuch more universal. A numpy array is easily converted to e.g. a PyTorch\n(or other framework) array in-place with negligible overhead. Moreover,\nyou may need to use encoded sequences as input to a library like LightGBM,\nXGBoost or xGPR that takes numpy arrays as input.\n\nSecond, by using numpy we ensure this package has only a single\ndependency -- numpy -- which is *relatively* lightweight (the same cannot\nbe said for PyTorch or Tensorflow).\n\nSince this package is (at this time) small and simple,\ndocumentation is relatively brief and is below.\n\n### Performance\n\nSequence encoding is almost never the bottleneck in ML or statistical\nanalysis (if it is, you're doing something unusual). Still, FWIW, this\npackage gives roughly an order of magnitude speed improvement over a\nnaive pure Python approach (more if you are processing numerous\nminibatches).\n\n### Installation\n```\npip install cpp_protein_encoders\n```\n\n### Usage\n\n```python\nfrom cpp_protein_encoders import OneHotProteinEncoder, IntegerProteinEncoder\nfrom cpp_protein_encoders import SubstitutionMatrixEncoder\n\n# Note that all characters are expected to be uppercase.\n\nsequences = ['AAAGGGYYY', 'CCCTTTAAA', 'GGGTTTFF-']\n```\n\nWhen creating a OneHotProteinEncoder or an IntegerProteinEncoder, we\ncan use either the 'standard' alphabet (basic 20 AAs), the 'gapped'\nalphabet (basic 20 AAs + gaps), or the 'expanded' alphabet (gaps +\nunusual AAs, see above). If we pass sequences that contain unexpected\ncharacters, an exception will be raised.\n\n```python\nencoder1 = OneHotProteinEncoder(alphabet = 'gapped')\nencoder2 = IntegerProteinEncoder(alphabet = 'gapped')\n```\n\nFor substitution matrices, we can select a homology value to indicate\nwhich substitution matrix to use (90% homology, 85%, and so on).\nCurrent options are '95', '90', '85', '75', '62'.\nWe can also set 'use_standardized_mat' to be True or False. If True,\neach AA is encoded using the corresponding row of a scaled Cholesky\ndecomposition of a distance matrix built using the substitution matrix.\nThis ensures that the Euclidean distance between any two representations\nis equal to the distance between them as determined using the substitution\nmatrix. This can work well for kernel machines and some NNs. Alternatively,\nwe can set 'use_standardized_mat' to be False, in which case the AAs are\nencoded as the corresponding row of the substitution matrix. This is\nunlikely to work well in kernel machines but may work well for some NNs.\n\n```python\nencoder3 = SubstitutionMatrixEncoder(homology = '90', use_standardized_mat = True)\n```\n\nWhen encoding, there are two important options:\n`max_length` and `flatten_output_array`. `max_length` can be None or\nan integer. If None, the maximum length is determined from the input\nsequence list and all sequences are if necessary zero-padded to be that\nlength. If `max_length` is an int, all sequences are if necessary zero-\npadded to be `max_length`. (If you specify max length then pass a sequence\nthat is *longer*, an exception will be raised).\n\nThe output array is normally a 3d array of size N x M x A for N sequences,\nM amino acids and A alphabet size. If `flatten_output_array` is True,\nthis is flattened to a 2d array of size N x (M * A). *IMPORTANT*: For\ninteger encoding, the output array is always a 2d array anyway, so\n`flatten_output_array` is not in that case accepted as an option.\n\n```python\nfirst_set = encoder1.encode(sequences, flatten_output_array = False, max_length = None)\nsecond_set = encoder2.encode(sequences, max_length = None)\nthird_set = encoder3.encode(sequences, flatten_output_array = False, max_length = None)\n```\n",
    "bugtrack_url": null,
    "license": "MIT License  Copyright (c) 2024 Jonathan Parkinson  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:  The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.",
    "summary": "Fast Python-wrapped C++ basic encoders for protein sequences",
    "version": "0.0.1",
    "project_urls": {
        "Documentation": "https://github.com/jlparki/cpp_protein_tokenizers",
        "Homepage": "https://github.com/jlparki/cpp_protein_tokenizers"
    },
    "split_keywords": [
        "tokenizer",
        " protein tokenizer",
        " fast protein tokenizer",
        " protein encoder",
        " fast protein encoder"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "3295c6ea1bdc38fd132d5c4fe8ac5e6ea5cefe22b87ddce1b657793268010beb",
                "md5": "5989449a7200096b8fc4bc0cca709685",
                "sha256": "1de95483cace1732af08a09f6c04b9095571d92d240f1941b501ee1917e0ba3a"
            },
            "downloads": -1,
            "filename": "cpp_protein_encoders-0.0.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl",
            "has_sig": false,
            "md5_digest": "5989449a7200096b8fc4bc0cca709685",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 325945,
            "upload_time": "2024-07-22T04:14:46",
            "upload_time_iso_8601": "2024-07-22T04:14:46.019415Z",
            "url": "https://files.pythonhosted.org/packages/32/95/c6ea1bdc38fd132d5c4fe8ac5e6ea5cefe22b87ddce1b657793268010beb/cpp_protein_encoders-0.0.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "04f8e09dda94d60bc3d44f443f155a64bc60edba7eeb9f1d79472d21830814e7",
                "md5": "ed02427f193f9e72d50309ea7083496a",
                "sha256": "b908380a9d5161e177c12b230840ca383c7859a6c2fa0fb7c546b7c24efda32c"
            },
            "downloads": -1,
            "filename": "cpp_protein_encoders-0.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "ed02427f193f9e72d50309ea7083496a",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 322118,
            "upload_time": "2024-07-22T04:14:48",
            "upload_time_iso_8601": "2024-07-22T04:14:48.178476Z",
            "url": "https://files.pythonhosted.org/packages/04/f8/e09dda94d60bc3d44f443f155a64bc60edba7eeb9f1d79472d21830814e7/cpp_protein_encoders-0.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "09f4f42e7d9d192d94b1bdde5fb26921a7b5591521478de09c67f63c639a8985",
                "md5": "c7a78b564ebb51dab7d29cd72a8aa61e",
                "sha256": "a1f070ea35c69fcc57906166cf50b87c9d650531c9ff8d73d87ac8bc656ff5e8"
            },
            "downloads": -1,
            "filename": "cpp_protein_encoders-0.0.1-cp310-cp310-win32.whl",
            "has_sig": false,
            "md5_digest": "c7a78b564ebb51dab7d29cd72a8aa61e",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 301199,
            "upload_time": "2024-07-22T04:14:50",
            "upload_time_iso_8601": "2024-07-22T04:14:50.110009Z",
            "url": "https://files.pythonhosted.org/packages/09/f4/f42e7d9d192d94b1bdde5fb26921a7b5591521478de09c67f63c639a8985/cpp_protein_encoders-0.0.1-cp310-cp310-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "e0fc1262ed2020710b0417afb554fc356c3c85d132ad0e1b4e2a4c85ffa7791c",
                "md5": "a86f9c9a51f63c51b76a7aaa48fbf35a",
                "sha256": "72f8c474a90efcf1f3ae4e53363d6cbd202bcc2981f4048152d63558397655e2"
            },
            "downloads": -1,
            "filename": "cpp_protein_encoders-0.0.1-cp310-cp310-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "a86f9c9a51f63c51b76a7aaa48fbf35a",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 306353,
            "upload_time": "2024-07-22T04:14:52",
            "upload_time_iso_8601": "2024-07-22T04:14:52.263673Z",
            "url": "https://files.pythonhosted.org/packages/e0/fc/1262ed2020710b0417afb554fc356c3c85d132ad0e1b4e2a4c85ffa7791c/cpp_protein_encoders-0.0.1-cp310-cp310-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "bab023602137c45cf089cce0a1b5ceb488f912d17fbbc304e828a972ae86a53d",
                "md5": "ec2fdcd65bb55a416a446d9491c27d7b",
                "sha256": "646fde8cbe7cf9c24406a873831a3e61108d513ff92f3f0d7b6bd1ab380f13ac"
            },
            "downloads": -1,
            "filename": "cpp_protein_encoders-0.0.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl",
            "has_sig": false,
            "md5_digest": "ec2fdcd65bb55a416a446d9491c27d7b",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 325751,
            "upload_time": "2024-07-22T04:14:53",
            "upload_time_iso_8601": "2024-07-22T04:14:53.878590Z",
            "url": "https://files.pythonhosted.org/packages/ba/b0/23602137c45cf089cce0a1b5ceb488f912d17fbbc304e828a972ae86a53d/cpp_protein_encoders-0.0.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "0c1a34323ad9349a6579e220d975c67025796967421bf7a420b4e994422f6492",
                "md5": "1578b95ffb88141bd0605ea64eb2dc92",
                "sha256": "f908cb18c42cc9b27f6dd8e26124a0416e1f0996c01efdb75aa5c9d1f833f60e"
            },
            "downloads": -1,
            "filename": "cpp_protein_encoders-0.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "1578b95ffb88141bd0605ea64eb2dc92",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 321958,
            "upload_time": "2024-07-22T04:14:55",
            "upload_time_iso_8601": "2024-07-22T04:14:55.892662Z",
            "url": "https://files.pythonhosted.org/packages/0c/1a/34323ad9349a6579e220d975c67025796967421bf7a420b4e994422f6492/cpp_protein_encoders-0.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "93e4972df1d5a7774c03cbcf1c1fd37f3ddbc4dbfb06bd44f3e96f64b090331e",
                "md5": "ad4f89f84b2568a802b37b5c1813396a",
                "sha256": "18d1cf385cb63f62a396ebd97c37eb0efcac3d81cce8ec9188a1162f08fcb08b"
            },
            "downloads": -1,
            "filename": "cpp_protein_encoders-0.0.1-cp311-cp311-win32.whl",
            "has_sig": false,
            "md5_digest": "ad4f89f84b2568a802b37b5c1813396a",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 301094,
            "upload_time": "2024-07-22T04:14:58",
            "upload_time_iso_8601": "2024-07-22T04:14:58.217366Z",
            "url": "https://files.pythonhosted.org/packages/93/e4/972df1d5a7774c03cbcf1c1fd37f3ddbc4dbfb06bd44f3e96f64b090331e/cpp_protein_encoders-0.0.1-cp311-cp311-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "efb7c7eab0579882102cd30a1e857cfff92e110218bf523bb01bbeaeddae233d",
                "md5": "8d3e37a9dc66cdc506e4f142d9fe243d",
                "sha256": "9b8041bb9f01880605a71ad097510ae7cbd4e08e58f15c377dd9ed8dd5c7b4ea"
            },
            "downloads": -1,
            "filename": "cpp_protein_encoders-0.0.1-cp311-cp311-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "8d3e37a9dc66cdc506e4f142d9fe243d",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 306207,
            "upload_time": "2024-07-22T04:15:00",
            "upload_time_iso_8601": "2024-07-22T04:15:00.161599Z",
            "url": "https://files.pythonhosted.org/packages/ef/b7/c7eab0579882102cd30a1e857cfff92e110218bf523bb01bbeaeddae233d/cpp_protein_encoders-0.0.1-cp311-cp311-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "07be0b8efc8ef0a25c2aed7605957f004919e2e214c62627e8be49b7f54cbb21",
                "md5": "58155d698e8a8508196774aaace9b731",
                "sha256": "60ecd38f01dd54fe25a75c5656630a38d059b1c77e18b8a13294ae2c77a4d8cc"
            },
            "downloads": -1,
            "filename": "cpp_protein_encoders-0.0.1-cp312-abi3-manylinux_2_17_i686.manylinux2014_i686.whl",
            "has_sig": false,
            "md5_digest": "58155d698e8a8508196774aaace9b731",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 325065,
            "upload_time": "2024-07-22T04:15:02",
            "upload_time_iso_8601": "2024-07-22T04:15:02.209432Z",
            "url": "https://files.pythonhosted.org/packages/07/be/0b8efc8ef0a25c2aed7605957f004919e2e214c62627e8be49b7f54cbb21/cpp_protein_encoders-0.0.1-cp312-abi3-manylinux_2_17_i686.manylinux2014_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "1ef540ba9125b3141652aea34ef4408ada8c85c8f2ba0b9fa21ac75207c4b7d6",
                "md5": "2f67046462eaaef82c463b1d8e42f66b",
                "sha256": "df4e34b190e01dce35ae691d88ede458b8392608c391918e58230da9cf7933b1"
            },
            "downloads": -1,
            "filename": "cpp_protein_encoders-0.0.1-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "2f67046462eaaef82c463b1d8e42f66b",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 321389,
            "upload_time": "2024-07-22T04:15:04",
            "upload_time_iso_8601": "2024-07-22T04:15:04.243073Z",
            "url": "https://files.pythonhosted.org/packages/1e/f5/40ba9125b3141652aea34ef4408ada8c85c8f2ba0b9fa21ac75207c4b7d6/cpp_protein_encoders-0.0.1-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "0ca90ea4eaf339bbacb50a42206167f4e95e68643a1c08a6b771a1dfa540960f",
                "md5": "ad883dc69f5692fd644095f915b8423e",
                "sha256": "15b3428ec720f5748bbb8fbd12d350c38ce90b935cdcf4916e16b601efed5a5b"
            },
            "downloads": -1,
            "filename": "cpp_protein_encoders-0.0.1-cp312-abi3-win32.whl",
            "has_sig": false,
            "md5_digest": "ad883dc69f5692fd644095f915b8423e",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 300859,
            "upload_time": "2024-07-22T04:15:06",
            "upload_time_iso_8601": "2024-07-22T04:15:06.215884Z",
            "url": "https://files.pythonhosted.org/packages/0c/a9/0ea4eaf339bbacb50a42206167f4e95e68643a1c08a6b771a1dfa540960f/cpp_protein_encoders-0.0.1-cp312-abi3-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "0f9000aba39dad5ab4e0ed49f755b65683c210299c150a7855f51a1ff592580f",
                "md5": "6664e0026c7addebee7fcc87bf4e9c7b",
                "sha256": "ced8d3d8525c6b719f9333985758251ae7d278928b1bf4bab0ccf117fbf95eff"
            },
            "downloads": -1,
            "filename": "cpp_protein_encoders-0.0.1-cp312-abi3-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "6664e0026c7addebee7fcc87bf4e9c7b",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 305892,
            "upload_time": "2024-07-22T04:15:07",
            "upload_time_iso_8601": "2024-07-22T04:15:07.673972Z",
            "url": "https://files.pythonhosted.org/packages/0f/90/00aba39dad5ab4e0ed49f755b65683c210299c150a7855f51a1ff592580f/cpp_protein_encoders-0.0.1-cp312-abi3-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "d971dc7c6f16856f124033d9be3f397a995ca0a3dec9affc5d8a62622b2327ab",
                "md5": "91fa6f7a9745ad01e5ae92f8dec36d64",
                "sha256": "10fbbae073b4c49a01ccce4e085528c103e10122a57dc22ba3b5ce6fd63f732c"
            },
            "downloads": -1,
            "filename": "cpp_protein_encoders-0.0.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl",
            "has_sig": false,
            "md5_digest": "91fa6f7a9745ad01e5ae92f8dec36d64",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 325960,
            "upload_time": "2024-07-22T04:15:09",
            "upload_time_iso_8601": "2024-07-22T04:15:09.687593Z",
            "url": "https://files.pythonhosted.org/packages/d9/71/dc7c6f16856f124033d9be3f397a995ca0a3dec9affc5d8a62622b2327ab/cpp_protein_encoders-0.0.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "e12b644521890e7abaf7450f5a42ca842de9612220dc5ce16c174af0be4c9103",
                "md5": "d1680f95d6f2e7ae81ba40f5f5d14fb1",
                "sha256": "4f77cf46a8517866b62e1851379866bddf050967019a8627883c1cbecd235175"
            },
            "downloads": -1,
            "filename": "cpp_protein_encoders-0.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "d1680f95d6f2e7ae81ba40f5f5d14fb1",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 322235,
            "upload_time": "2024-07-22T04:15:11",
            "upload_time_iso_8601": "2024-07-22T04:15:11.641423Z",
            "url": "https://files.pythonhosted.org/packages/e1/2b/644521890e7abaf7450f5a42ca842de9612220dc5ce16c174af0be4c9103/cpp_protein_encoders-0.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "41583cf994388b6520d604d976900a182ec44608cbcd962b5b0fb3d9760bb8c3",
                "md5": "5de82a4d25b036fc2e73de44b22fd653",
                "sha256": "0df465cd8d3d52c58c3486d0a85e7f2db2e1ae6dbda062f8717161445fb8f351"
            },
            "downloads": -1,
            "filename": "cpp_protein_encoders-0.0.1-cp39-cp39-win32.whl",
            "has_sig": false,
            "md5_digest": "5de82a4d25b036fc2e73de44b22fd653",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 301573,
            "upload_time": "2024-07-22T04:15:13",
            "upload_time_iso_8601": "2024-07-22T04:15:13.899726Z",
            "url": "https://files.pythonhosted.org/packages/41/58/3cf994388b6520d604d976900a182ec44608cbcd962b5b0fb3d9760bb8c3/cpp_protein_encoders-0.0.1-cp39-cp39-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "755e8ab3038be86a028ce9b15f0e2f6c3f8e47e0922c9e219eac7eda7a19ddb2",
                "md5": "e60bf8accea05caec4fab9fc7e3a7cb9",
                "sha256": "55ef77c23563d7a5b08c125fd1c4b8de5330beda68c624424bac8c0a29b9be0e"
            },
            "downloads": -1,
            "filename": "cpp_protein_encoders-0.0.1-cp39-cp39-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "e60bf8accea05caec4fab9fc7e3a7cb9",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 306743,
            "upload_time": "2024-07-22T04:15:15",
            "upload_time_iso_8601": "2024-07-22T04:15:15.926322Z",
            "url": "https://files.pythonhosted.org/packages/75/5e/8ab3038be86a028ce9b15f0e2f6c3f8e47e0922c9e219eac7eda7a19ddb2/cpp_protein_encoders-0.0.1-cp39-cp39-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "336df6f07a90d68ecfe1d647c7089c74d74e85562e19840ef1bac409803ab502",
                "md5": "2e6dd167c7d5cb3b4fc440d2850235a1",
                "sha256": "7dbe7f614ff0de2827e0d4966c4e28f21974f8f700d202324bb402d5cddbdcc4"
            },
            "downloads": -1,
            "filename": "cpp_protein_encoders-0.0.1.tar.gz",
            "has_sig": false,
            "md5_digest": "2e6dd167c7d5cb3b4fc440d2850235a1",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 183786,
            "upload_time": "2024-07-22T04:15:17",
            "upload_time_iso_8601": "2024-07-22T04:15:17.910274Z",
            "url": "https://files.pythonhosted.org/packages/33/6d/f6f07a90d68ecfe1d647c7089c74d74e85562e19840ef1bac409803ab502/cpp_protein_encoders-0.0.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-07-22 04:15:17",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "jlparki",
    "github_project": "cpp_protein_tokenizers",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "cpp-protein-encoders"
}
        
Elapsed time: 0.28819s