chytorch


Namechytorch JSON
Version 1.62 PyPI version JSON
download
home_pagehttps://github.com/chython/chytorch
SummaryLibrary for modeling molecules and reactions in torch way
upload_time2024-03-01 12:35:12
maintainer
docs_urlNone
authorRamil Nugmanov
requires_python>=3.8,<3.12
licenseMIT
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            <img src="https://github.com/chython/chytorch/assets/2013465/9e97e99b-060d-4beb-bd8c-80c895ac9b81" width="100" height="100"> Chytorch [kʌɪtɔːrtʃ]
====================

Library for modeling molecules and reactions in torch way.

Installation
------------

Use `pip install chytorch` to install release version.

Or `pip install .` in source code directory to install DEV version.

Pretrained models
-----------------

Chytorch main package doesn't include models zoo.
Each model has its own named package and can be installed separately.
Installed models can be imported as `from chytorch.zoo.<model_name> import Model`.


Usage
-----

`chytorch.nn.MoleculeEncoder` and `chytorch.nn.ReactionEncoder` - core graphormer layers for molecules and reactions.
API is combination of `torch.nn.TransformerEncoderLayer` with `torch.nn.TransformerEncoder`. 

**Batch preparation:**

`chytorch.utils.data.MoleculeDataset` and `chytorch.utils.data.ReactionDataset` - Map-like on-the-fly dataset generators for molecules and reactions.
Supported `chython.MoleculeContainer` and `chython.ReactionContainer` objects, and bytes-packed structures.

`chytorch.utils.data.collate_molecules` and `chytorch.utils.data.collate_reactions` - collate functions for `torch.utils.data.DataLoader`.

Note: torch DataLoader automatically do proper collation since 1.13 release.

Example:

    from chytorch.utils.data import MoleculeDataset, SMILESDataset
    from torch.utils.data import DataLoader

    data = ['CCO', 'CC=O']
    ds = MoleculeDataset(SMILESDataset(data, cache={}))
    dl = DataLoader(ds, batch_size=10)

**Forward call:**

Molecules coded as tensors of:
* atoms numbers shifted by 2 (e.g. hydrogen = 3).
  0 - reserved for padding, 1 - reserved for CLS token, 2 - extra reservation.
* neighbors count, including implicit hydrogens shifted by 2 (e.g. CO = CH3OH = [6, 4]).
  0 - reserved for padding, 1 - extra reservation, 2 - no-neighbors, 3 - one neighbor.
* topological distances' matrix shifted by 2 with upper limit.
  0 - reserved for padding, 1 - reserved for not-connected graph components coding, 2 - self-loop, 3 - connected atoms.

Reactions coded in similar way. Molecules atoms and neighbors matrices just stacked. Distance matrices stacked on diagonal.
Reactions include additional tensor with reaction role codes for each token.
0 - padding, 1 - reaction CLS, 2 - reactants, 3 - products.

    from chytorch.nn import MoleculeEncoder
    
    encoder = MoleculeEncoder()
    for b in dl:
        encoder(b)

**Combine molecules and labels:**

`chytorch.utils.data.chained_collate` - helper for combining different data parts. Useful for tricky input.

    from torch import stack
    from torch.utils.data import DataLoader, TensorDataset
    from chytorch.utils.data import chained_collate, collate_molecules, MoleculeDataset

    dl = DataLoader(TensorDataset(MoleculeDataset(molecules_list), properties_tensor),
        collate_fn=chained_collate(collate_molecules, stack))


**Scheduler:**

`chytorch.optim.lr_scheduler.WarmUpCosine` - Linear warmup followed with cosine-function for 0-pi range rescaled to lr_rate - decrease_coef * lr_rate interval.

**Voting NN with single hidden layer:**

`chytorch.nn.VotingClassifier`, `chytorch.nn.BinaryVotingClassifier` and `chytorch.nn.VotingRegressor` - speed optimized multiple heads for ensemble predictions.

**Helper Modules:**

`chytorch.nn.Slicer` - do tensor slicing. Useful for transformer's CLS token extraction in `torch.nn.Sequence`.

**Data Wrappers:**

In `chytorch.utils.data` module stored different data wrappers for simplifying ML workflows.
All wrappers have `torch.utils.data.Dataset` interface.

* `SizedList` - list wrapper with `size()` method. Useful with `torch.utils.data.TensorDataset`. 
* `SMILESDataset` - on-the-fly smiles to `chython.MoleculeContainer` or `chython.ReactionContainer` parser.
* `LMDBMapper` - LMDB KV storage to dataset mapper.
* `PostgresMapper` - Postgres DB table to dataset mapper.
* `SMILESTokenizerDataset` - on-the-fly generator of tokenized SMILES.
* `TensorUnpack`, `StructUnpack`, `PickleUnpack` - bytes to tensor/object unpackers


Publications
------------

[1](https://doi.org/10.1021/acs.jcim.2c00344) Bidirectional Graphormer for Reactivity Understanding: Neural Network Trained to Reaction Atom-to-Atom Mapping Task


            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/chython/chytorch",
    "name": "chytorch",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.8,<3.12",
    "maintainer_email": "",
    "keywords": "",
    "author": "Ramil Nugmanov",
    "author_email": "nougmanoff@protonmail.com",
    "download_url": "",
    "platform": null,
    "description": "<img src=\"https://github.com/chython/chytorch/assets/2013465/9e97e99b-060d-4beb-bd8c-80c895ac9b81\" width=\"100\" height=\"100\"> Chytorch [k\u028c\u026at\u0254\u02d0rt\u0283]\n====================\n\nLibrary for modeling molecules and reactions in torch way.\n\nInstallation\n------------\n\nUse `pip install chytorch` to install release version.\n\nOr `pip install .` in source code directory to install DEV version.\n\nPretrained models\n-----------------\n\nChytorch main package doesn't include models zoo.\nEach model has its own named package and can be installed separately.\nInstalled models can be imported as `from chytorch.zoo.<model_name> import Model`.\n\n\nUsage\n-----\n\n`chytorch.nn.MoleculeEncoder` and `chytorch.nn.ReactionEncoder` - core graphormer layers for molecules and reactions.\nAPI is combination of `torch.nn.TransformerEncoderLayer` with `torch.nn.TransformerEncoder`. \n\n**Batch preparation:**\n\n`chytorch.utils.data.MoleculeDataset` and `chytorch.utils.data.ReactionDataset` - Map-like on-the-fly dataset generators for molecules and reactions.\nSupported `chython.MoleculeContainer` and `chython.ReactionContainer` objects, and bytes-packed structures.\n\n`chytorch.utils.data.collate_molecules` and `chytorch.utils.data.collate_reactions` - collate functions for `torch.utils.data.DataLoader`.\n\nNote: torch DataLoader automatically do proper collation since 1.13 release.\n\nExample:\n\n    from chytorch.utils.data import MoleculeDataset, SMILESDataset\n    from torch.utils.data import DataLoader\n\n    data = ['CCO', 'CC=O']\n    ds = MoleculeDataset(SMILESDataset(data, cache={}))\n    dl = DataLoader(ds, batch_size=10)\n\n**Forward call:**\n\nMolecules coded as tensors of:\n* atoms numbers shifted by 2 (e.g. hydrogen = 3).\n  0 - reserved for padding, 1 - reserved for CLS token, 2 - extra reservation.\n* neighbors count, including implicit hydrogens shifted by 2 (e.g. CO = CH3OH = [6, 4]).\n  0 - reserved for padding, 1 - extra reservation, 2 - no-neighbors, 3 - one neighbor.\n* topological distances' matrix shifted by 2 with upper limit.\n  0 - reserved for padding, 1 - reserved for not-connected graph components coding, 2 - self-loop, 3 - connected atoms.\n\nReactions coded in similar way. Molecules atoms and neighbors matrices just stacked. Distance matrices stacked on diagonal.\nReactions include additional tensor with reaction role codes for each token.\n0 - padding, 1 - reaction CLS, 2 - reactants, 3 - products.\n\n    from chytorch.nn import MoleculeEncoder\n    \n    encoder = MoleculeEncoder()\n    for b in dl:\n        encoder(b)\n\n**Combine molecules and labels:**\n\n`chytorch.utils.data.chained_collate` - helper for combining different data parts. Useful for tricky input.\n\n    from torch import stack\n    from torch.utils.data import DataLoader, TensorDataset\n    from chytorch.utils.data import chained_collate, collate_molecules, MoleculeDataset\n\n    dl = DataLoader(TensorDataset(MoleculeDataset(molecules_list), properties_tensor),\n        collate_fn=chained_collate(collate_molecules, stack))\n\n\n**Scheduler:**\n\n`chytorch.optim.lr_scheduler.WarmUpCosine` - Linear warmup followed with cosine-function for 0-pi range rescaled to lr_rate - decrease_coef * lr_rate interval.\n\n**Voting NN with single hidden layer:**\n\n`chytorch.nn.VotingClassifier`, `chytorch.nn.BinaryVotingClassifier` and `chytorch.nn.VotingRegressor` - speed optimized multiple heads for ensemble predictions.\n\n**Helper Modules:**\n\n`chytorch.nn.Slicer` - do tensor slicing. Useful for transformer's CLS token extraction in `torch.nn.Sequence`.\n\n**Data Wrappers:**\n\nIn `chytorch.utils.data` module stored different data wrappers for simplifying ML workflows.\nAll wrappers have `torch.utils.data.Dataset` interface.\n\n* `SizedList` - list wrapper with `size()` method. Useful with `torch.utils.data.TensorDataset`. \n* `SMILESDataset` - on-the-fly smiles to `chython.MoleculeContainer` or `chython.ReactionContainer` parser.\n* `LMDBMapper` - LMDB KV storage to dataset mapper.\n* `PostgresMapper` - Postgres DB table to dataset mapper.\n* `SMILESTokenizerDataset` - on-the-fly generator of tokenized SMILES.\n* `TensorUnpack`, `StructUnpack`, `PickleUnpack` - bytes to tensor/object unpackers\n\n\nPublications\n------------\n\n[1](https://doi.org/10.1021/acs.jcim.2c00344) Bidirectional Graphormer for Reactivity Understanding: Neural Network Trained to Reaction Atom-to-Atom Mapping Task\n\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Library for modeling molecules and reactions in torch way",
    "version": "1.62",
    "project_urls": {
        "Homepage": "https://github.com/chython/chytorch"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "15af6cb6636c21189731b6e817b80f81fa05dd974972ab1d0fd46de1e1344ecc",
                "md5": "da77cde96fea712365cce866f150d19c",
                "sha256": "4444f7d0d43246d11f436873b911a135208bde2d1a3c26957f01d13055eafbde"
            },
            "downloads": -1,
            "filename": "chytorch-1.62-cp310-cp310-macosx_12_0_x86_64.whl",
            "has_sig": false,
            "md5_digest": "da77cde96fea712365cce866f150d19c",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8,<3.12",
            "size": 173575,
            "upload_time": "2024-03-01T12:35:12",
            "upload_time_iso_8601": "2024-03-01T12:35:12.162689Z",
            "url": "https://files.pythonhosted.org/packages/15/af/6cb6636c21189731b6e817b80f81fa05dd974972ab1d0fd46de1e1344ecc/chytorch-1.62-cp310-cp310-macosx_12_0_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "5d429859094f61ad3d35af0d421c157e763daf15d4d1fc6b404524390452cfe3",
                "md5": "bea7219a5d434f3351d3f438df696948",
                "sha256": "0726bbc613d2bbd1b0b89f344b8a7c3595996ed75b257bff831b88ff77980beb"
            },
            "downloads": -1,
            "filename": "chytorch-1.62-cp310-cp310-manylinux_2_31_x86_64.whl",
            "has_sig": false,
            "md5_digest": "bea7219a5d434f3351d3f438df696948",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8,<3.12",
            "size": 547717,
            "upload_time": "2024-03-01T12:35:02",
            "upload_time_iso_8601": "2024-03-01T12:35:02.335507Z",
            "url": "https://files.pythonhosted.org/packages/5d/42/9859094f61ad3d35af0d421c157e763daf15d4d1fc6b404524390452cfe3/chytorch-1.62-cp310-cp310-manylinux_2_31_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "d67e4f3e8bd9865b8243ad76cce8bf9c963f7dfc3fc906f856d89f3237a6c3fb",
                "md5": "edc53c42476488726d1aeecc6a3f5029",
                "sha256": "e6f8d529e398b7a0f3177666a6348368579bc0c46d91cb7972981d349e75965e"
            },
            "downloads": -1,
            "filename": "chytorch-1.62-cp310-cp310-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "edc53c42476488726d1aeecc6a3f5029",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8,<3.12",
            "size": 164137,
            "upload_time": "2024-03-01T12:36:22",
            "upload_time_iso_8601": "2024-03-01T12:36:22.358092Z",
            "url": "https://files.pythonhosted.org/packages/d6/7e/4f3e8bd9865b8243ad76cce8bf9c963f7dfc3fc906f856d89f3237a6c3fb/chytorch-1.62-cp310-cp310-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "90729d076ff9559d872cee151b97ee9a5881fb0a89776c5f6f5a713fe7ae9cc1",
                "md5": "dadd5352436ab48a277945806e1d112e",
                "sha256": "dd635dbc4df516e338d99c11d0e12f9b691fbb4537373b9ba759676cac8f48cb"
            },
            "downloads": -1,
            "filename": "chytorch-1.62-cp311-cp311-macosx_12_0_x86_64.whl",
            "has_sig": false,
            "md5_digest": "dadd5352436ab48a277945806e1d112e",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8,<3.12",
            "size": 249957,
            "upload_time": "2024-03-01T12:35:12",
            "upload_time_iso_8601": "2024-03-01T12:35:12.970558Z",
            "url": "https://files.pythonhosted.org/packages/90/72/9d076ff9559d872cee151b97ee9a5881fb0a89776c5f6f5a713fe7ae9cc1/chytorch-1.62-cp311-cp311-macosx_12_0_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "760817018e0c300e2d4d80744388bb787664720f21aee785ee5f02f393460f3a",
                "md5": "1ce9a36994e1b7a6e791e662d30bffb3",
                "sha256": "5269e9f6895be6db86b02f6c4e93b17dbbffaab7b4f8aa5183a60a07f63e5b3f"
            },
            "downloads": -1,
            "filename": "chytorch-1.62-cp311-cp311-manylinux_2_31_x86_64.whl",
            "has_sig": false,
            "md5_digest": "1ce9a36994e1b7a6e791e662d30bffb3",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8,<3.12",
            "size": 583651,
            "upload_time": "2024-03-01T12:35:01",
            "upload_time_iso_8601": "2024-03-01T12:35:01.572075Z",
            "url": "https://files.pythonhosted.org/packages/76/08/17018e0c300e2d4d80744388bb787664720f21aee785ee5f02f393460f3a/chytorch-1.62-cp311-cp311-manylinux_2_31_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "c7b61c0e366037720b766e4aeb4b8135c4253bc5af1829582c5c0ada94404d63",
                "md5": "340a2dc9f8e0c487ddfe26123d7a5d97",
                "sha256": "78f9e804a5661012de2b5d546ae03de47d2afc7513cf181fbeb9eea593aa9a9a"
            },
            "downloads": -1,
            "filename": "chytorch-1.62-cp311-cp311-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "340a2dc9f8e0c487ddfe26123d7a5d97",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8,<3.12",
            "size": 163973,
            "upload_time": "2024-03-01T12:36:06",
            "upload_time_iso_8601": "2024-03-01T12:36:06.542767Z",
            "url": "https://files.pythonhosted.org/packages/c7/b6/1c0e366037720b766e4aeb4b8135c4253bc5af1829582c5c0ada94404d63/chytorch-1.62-cp311-cp311-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "125d0d62f6ec2fbe5a0036860eb25820f72e64ff8f5d8ff9d15590b1e657c5af",
                "md5": "28c9234b2bd8c49ffd9a502dc2b62fae",
                "sha256": "ba1415d69c716d023aa08f26568314a7882617ad5c52c3156df2559ae22c2547"
            },
            "downloads": -1,
            "filename": "chytorch-1.62-cp38-cp38-macosx_12_0_x86_64.whl",
            "has_sig": false,
            "md5_digest": "28c9234b2bd8c49ffd9a502dc2b62fae",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8,<3.12",
            "size": 173480,
            "upload_time": "2024-03-01T12:35:14",
            "upload_time_iso_8601": "2024-03-01T12:35:14.738305Z",
            "url": "https://files.pythonhosted.org/packages/12/5d/0d62f6ec2fbe5a0036860eb25820f72e64ff8f5d8ff9d15590b1e657c5af/chytorch-1.62-cp38-cp38-macosx_12_0_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "54165702157587108c7302bee48a18de75e53dc0d627a8c86db535f95268801f",
                "md5": "a7471852caf6c34c5a0819fd81089c33",
                "sha256": "91c3a64b4eccb8c59934d21a26741f79550b03df7775d1cf80129376c69efcf9"
            },
            "downloads": -1,
            "filename": "chytorch-1.62-cp38-cp38-manylinux_2_31_x86_64.whl",
            "has_sig": false,
            "md5_digest": "a7471852caf6c34c5a0819fd81089c33",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8,<3.12",
            "size": 564342,
            "upload_time": "2024-03-01T12:34:58",
            "upload_time_iso_8601": "2024-03-01T12:34:58.477494Z",
            "url": "https://files.pythonhosted.org/packages/54/16/5702157587108c7302bee48a18de75e53dc0d627a8c86db535f95268801f/chytorch-1.62-cp38-cp38-manylinux_2_31_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "d23bd14fde65feac8ec2337e485207596d18cf74adcdd5401e6d418925dda444",
                "md5": "12b4971f4c880357cb9b46fd73b9c223",
                "sha256": "b3d6dfbc1e244a9148c3af05faf552066971cd7501c226564e47f11823c893c5"
            },
            "downloads": -1,
            "filename": "chytorch-1.62-cp38-cp38-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "12b4971f4c880357cb9b46fd73b9c223",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8,<3.12",
            "size": 164827,
            "upload_time": "2024-03-01T12:36:08",
            "upload_time_iso_8601": "2024-03-01T12:36:08.545451Z",
            "url": "https://files.pythonhosted.org/packages/d2/3b/d14fde65feac8ec2337e485207596d18cf74adcdd5401e6d418925dda444/chytorch-1.62-cp38-cp38-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "7f0a286752e1a213e26deb2bff8c516070b58f07a4acb8b34e61f3be2b55c4a2",
                "md5": "83b41394f57c1fd7a0d5a92634280c2a",
                "sha256": "549dd76d6d49017fba9dbdc81ffc0d2d7614cf7328f1d837d1a0df996b7ff9d4"
            },
            "downloads": -1,
            "filename": "chytorch-1.62-cp39-cp39-macosx_12_0_x86_64.whl",
            "has_sig": false,
            "md5_digest": "83b41394f57c1fd7a0d5a92634280c2a",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.8,<3.12",
            "size": 174211,
            "upload_time": "2024-03-01T12:35:11",
            "upload_time_iso_8601": "2024-03-01T12:35:11.318605Z",
            "url": "https://files.pythonhosted.org/packages/7f/0a/286752e1a213e26deb2bff8c516070b58f07a4acb8b34e61f3be2b55c4a2/chytorch-1.62-cp39-cp39-macosx_12_0_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ccba214daa8f3b924b9ca99d0c0671ca6ba9483fc689f6515680b0d6ee7aadc9",
                "md5": "7f426635951d70600704542c4e01207e",
                "sha256": "5d7a698db9f6a58c149cb2c8f990bc57e743caab3cbb46152f6902dda6e642a6"
            },
            "downloads": -1,
            "filename": "chytorch-1.62-cp39-cp39-manylinux_2_31_x86_64.whl",
            "has_sig": false,
            "md5_digest": "7f426635951d70600704542c4e01207e",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.8,<3.12",
            "size": 550771,
            "upload_time": "2024-03-01T12:35:05",
            "upload_time_iso_8601": "2024-03-01T12:35:05.339645Z",
            "url": "https://files.pythonhosted.org/packages/cc/ba/214daa8f3b924b9ca99d0c0671ca6ba9483fc689f6515680b0d6ee7aadc9/chytorch-1.62-cp39-cp39-manylinux_2_31_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "4dc16753434be5c31bb8822c7bbc1324a5d71bad3a32a4ef19b0a3aec273220e",
                "md5": "7e447e7a51679284f7e58c60abd39c5f",
                "sha256": "169fc3910e835e2c87f790569ebf58fcb4a46165b1cddbc36b28a18c306cf5be"
            },
            "downloads": -1,
            "filename": "chytorch-1.62-cp39-cp39-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "7e447e7a51679284f7e58c60abd39c5f",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.8,<3.12",
            "size": 164711,
            "upload_time": "2024-03-01T12:35:54",
            "upload_time_iso_8601": "2024-03-01T12:35:54.419596Z",
            "url": "https://files.pythonhosted.org/packages/4d/c1/6753434be5c31bb8822c7bbc1324a5d71bad3a32a4ef19b0a3aec273220e/chytorch-1.62-cp39-cp39-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-03-01 12:35:12",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "chython",
    "github_project": "chytorch",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "chytorch"
}
        
Elapsed time: 0.19884s