{"id":19287172,"url":"https://github.com/opendilab/di-treetensor","last_synced_at":"2025-05-16T02:10:07.404Z","repository":{"id":43043521,"uuid":"403097741","full_name":"opendilab/DI-treetensor","owner":"opendilab","description":"Let DI-treetensor help you simplify the structure processing!（树形运算一不小心就逻辑混乱？DI-treetensor快速帮你搞定）","archived":false,"fork":false,"pushed_at":"2024-10-21T09:05:42.000Z","size":78094,"stargazers_count":206,"open_issues_count":3,"forks_count":4,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-04-01T11:04:37.551Z","etag":null,"topics":["deep-learning","numpy","python","pytorch","reinforcement-learning","tensor","tree-structure"],"latest_commit_sha":null,"homepage":"https://opendilab.github.io/DI-treetensor/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/opendilab.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-09-04T15:56:36.000Z","updated_at":"2025-01-17T18:09:44.000Z","dependencies_parsed_at":"2024-11-16T23:01:17.454Z","dependency_job_id":"75e7587a-0636-4619-be75-3af56411ec1c","html_url":"https://github.com/opendilab/DI-treetensor","commit_stats":{"total_commits":151,"total_committers":6,"mean_commits":"25.166666666666668","dds":"0.36423841059602646","last_synced_commit":"356a7f637217d592431fb3e9c81942250f180714"},"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opendilab%2FDI-treetensor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opendilab%2FDI-treetensor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opendilab%2FDI-treetensor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opendilab%2FDI-treetensor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/opendilab","download_url":"https://codeload.github.com/opendilab/DI-treetensor/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247838445,"owners_count":21004580,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["deep-learning","numpy","python","pytorch","reinforcement-learning","tensor","tree-structure"],"created_at":"2024-11-09T22:05:35.811Z","updated_at":"2025-04-08T12:11:02.688Z","avatar_url":"https://github.com/opendilab.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n    \u003ca href=\"https://opendilab.github.io/DI-treetensor/\"\u003e\u003cimg width=\"500px\" height=\"auto\" src=\"https://github.com/opendilab/DI-treetensor/blob/main/docs/source/_static/di-treetensor.svg\"\u003e\u003c/a\u003e\n\u003c/div\u003e\n\n---\n\n[![PyPI](https://img.shields.io/pypi/v/DI-treetensor)](https://pypi.org/project/DI-treetensor/)\n![PyPI - Python Version](https://img.shields.io/pypi/pyversions/DI-treetensor)\n![Loc](https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/HansBug/bcda5612b798ebcd354f35447139a4a5/raw/loc.json)\n![Comments](https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/HansBug/bcda5612b798ebcd354f35447139a4a5/raw/comments.json)\n\n[![Docs Deploy](https://github.com/opendilab/DI-treetensor/workflows/Docs%20Deploy/badge.svg)](https://github.com/opendilab/DI-treetensor/actions?query=workflow%3A%22Docs+Deploy%22)\n[![Code Test](https://github.com/opendilab/DI-treetensor/workflows/Code%20Test/badge.svg)](https://github.com/opendilab/DI-treetensor/actions?query=workflow%3A%22Code+Test%22)\n[![Badge Creation](https://github.com/opendilab/DI-treetensor/workflows/Badge%20Creation/badge.svg)](https://github.com/opendilab/DI-treetensor/actions?query=workflow%3A%22Badge+Creation%22)\n[![Package Release](https://github.com/opendilab/DI-treetensor/workflows/Package%20Release/badge.svg)](https://github.com/opendilab/DI-treetensor/actions?query=workflow%3A%22Package+Release%22)\n[![codecov](https://codecov.io/gh/opendilab/DI-treetensor/branch/main/graph/badge.svg?token=XJVDP4EFAT)](https://codecov.io/gh/opendilab/DI-treetensor)\n\n[![GitHub stars](https://img.shields.io/github/stars/opendilab/DI-treetensor)](https://github.com/opendilab/DI-treetensor/stargazers)\n[![GitHub forks](https://img.shields.io/github/forks/opendilab/DI-treetensor)](https://github.com/opendilab/DI-treetensor/network)\n![GitHub commit activity](https://img.shields.io/github/commit-activity/m/opendilab/DI-treetensor)\n[![GitHub issues](https://img.shields.io/github/issues/opendilab/DI-treetensor)](https://github.com/opendilab/DI-treetensor/issues)\n[![GitHub pulls](https://img.shields.io/github/issues-pr/opendilab/DI-treetensor)](https://github.com/opendilab/DI-treetensor/pulls)\n[![Contributors](https://img.shields.io/github/contributors/opendilab/DI-treetensor)](https://github.com/opendilab/DI-treetensor/graphs/contributors)\n[![GitHub license](https://img.shields.io/github/license/opendilab/DI-treetensor)](https://github.com/opendilab/DI-treetensor/blob/master/LICENSE)\n\n`treetensor` is a generalized tree-based tensor structure mainly developed by [OpenDILab Contributors](https://github.com/opendilab).\n\nAlmost all the operation can be supported in form of trees in a convenient way to simplify the structure processing when the calculation is tree-based.\n\n## Installation\n\nYou can simply install it with `pip` command line from the official PyPI site.\n\n```shell\npip install di-treetensor\n```\n\nFor more information about installation, you can refer to [Installation](https://opendilab.github.io/DI-treetensor/main/tutorials/installation/index.html#).\n\n## Documentation\n\nThe detailed documentation are hosted on [https://opendilab.github.io/DI-treetensor](https://opendilab.github.io/DI-treetensor/).\n\nOnly english version is provided now, the chinese documentation is still under development.\n\n## Quick Start\n\nYou can easily create a tree value object based on `FastTreeValue`.\n\n```python\nimport builtins\nimport os\nfrom functools import partial\n\nimport treetensor.torch as torch\n\nprint = partial(builtins.print, sep=os.linesep)\n\nif __name__ == '__main__':\n    # create a tree tensor\n    t = torch.randn({'a': (2, 3), 'b': {'x': (3, 4)}})\n    print(t)\n    print(torch.randn(4, 5))  # create a normal tensor\n    print()\n\n    # structure of tree\n    print('Structure of tree')\n    print('t.a:', t.a)  # t.a is a native tensor\n    print('t.b:', t.b)  # t.b is a tree tensor\n    print('t.b.x', t.b.x)  # t.b.x is a native tensor\n    print()\n\n    # math calculations\n    print('Math calculation')\n    print('t ** 2:', t ** 2)\n    print('torch.sin(t).cos()', torch.sin(t).cos())\n    print()\n\n    # backward calculation\n    print('Backward calculation')\n    t.requires_grad_(True)\n    t.std().arctan().backward()\n    print('grad of t:', t.grad)\n    print()\n\n    # native operation\n    # all the ops can be used as the original usage of `torch`\n    print('Native operation')\n    print('torch.sin(t.a)', torch.sin(t.a))  # sin of native tensor\n\n```\n\nThe result should be\n\n```text\n\u003cTensor 0x7f0dae602760\u003e\n├── a --\u003e tensor([[-1.2672, -1.5817, -0.3141],\n│                 [ 1.8107, -0.1023,  0.0940]])\n└── b --\u003e \u003cTensor 0x7f0dae602820\u003e\n    └── x --\u003e tensor([[ 1.2224, -0.3445, -0.9980, -0.4085],\n                      [ 1.5956,  0.8825, -0.5702, -0.2247],\n                      [ 0.9235,  0.4538,  0.8775, -0.2642]])\n\ntensor([[-0.9559,  0.7684,  0.2682, -0.6419,  0.8637],\n        [ 0.9526,  0.2927, -0.0591,  1.2804, -0.2455],\n        [ 0.4699, -0.9998,  0.6324, -0.6885,  1.1488],\n        [ 0.8920,  0.4401, -0.7785,  0.5931,  0.0435]])\n\nStructure of tree\nt.a:\ntensor([[-1.2672, -1.5817, -0.3141],\n        [ 1.8107, -0.1023,  0.0940]])\nt.b:\n\u003cTensor 0x7f0dae602820\u003e\n└── x --\u003e tensor([[ 1.2224, -0.3445, -0.9980, -0.4085],\n                  [ 1.5956,  0.8825, -0.5702, -0.2247],\n                  [ 0.9235,  0.4538,  0.8775, -0.2642]])\n\nt.b.x\ntensor([[ 1.2224, -0.3445, -0.9980, -0.4085],\n        [ 1.5956,  0.8825, -0.5702, -0.2247],\n        [ 0.9235,  0.4538,  0.8775, -0.2642]])\n\nMath calculation\nt ** 2:\n\u003cTensor 0x7f0dae602eb0\u003e\n├── a --\u003e tensor([[1.6057, 2.5018, 0.0986],\n│                 [3.2786, 0.0105, 0.0088]])\n└── b --\u003e \u003cTensor 0x7f0dae60c040\u003e\n    └── x --\u003e tensor([[1.4943, 0.1187, 0.9960, 0.1669],\n                      [2.5458, 0.7789, 0.3252, 0.0505],\n                      [0.8528, 0.2059, 0.7699, 0.0698]])\n\ntorch.sin(t).cos()\n\u003cTensor 0x7f0dae621910\u003e\n├── a --\u003e tensor([[0.5782, 0.5404, 0.9527],\n│                 [0.5642, 0.9948, 0.9956]])\n└── b --\u003e \u003cTensor 0x7f0dae6216a0\u003e\n    └── x --\u003e tensor([[0.5898, 0.9435, 0.6672, 0.9221],\n                      [0.5406, 0.7163, 0.8578, 0.9753],\n                      [0.6983, 0.9054, 0.7185, 0.9661]])\n\n\nBackward calculation\ngrad of t:\n\u003cTensor 0x7f0dae60c400\u003e\n├── a --\u003e tensor([[-0.0435, -0.0535, -0.0131],\n│                 [ 0.0545, -0.0064, -0.0002]])\n└── b --\u003e \u003cTensor 0x7f0dae60cbe0\u003e\n    └── x --\u003e tensor([[ 0.0357, -0.0141, -0.0349, -0.0162],\n                      [ 0.0476,  0.0249, -0.0213, -0.0103],\n                      [ 0.0262,  0.0113,  0.0248, -0.0116]])\n\n\nNative operation\ntorch.sin(t.a)\ntensor([[-0.9543, -0.9999, -0.3089],\n        [ 0.9714, -0.1021,  0.0939]], grad_fn=\u003cSinBackward\u003e)\n\n```\n\nFor more quick start explanation and further usage, take a look at:\n\n* [Quick Start](https://opendilab.github.io/DI-treetensor/main/tutorials/quick_start/index.html)\n\n## Extension\n\nIf you need to translate `treevalue` object to runnable source code, you may use the [potc-treevalue](https://github.com/potc-dev/potc-treevalue) plugin with the installation command below\n\n```\npip install DI-treetensor[potc]\n```\n\nIn potc, you can translate the objects to runnable python source code, which can be loaded to objects afterwards by the python interpreter, like the following graph\n\n![potc_system](https://github.com/opendilab/DI-treetensor/blob/main/docs/source/_static/potc-doing.svg)\n\nFor more information, you can refer to\n\n- [potc-dev/potc](https://github.com/potc-dev/potc)\n- [potc-dev/potc-treevalue](https://github.com/potc-dev/potc-treevalue)\n- [potc-dev/potc-torch](https://github.com/potc-dev/potc-torch)\n- [Potc Plugin Installation](https://opendilab.github.io/DI-treetensor/main/tutorials/plugins/index.html#potc-support)\n\n## Contribution\n\nWe appreciate all contributions to improve DI-treetensor, both logic and system designs. Please refer to CONTRIBUTING.md for more guides.\n\nAnd users can join our [slack communication channel](https://join.slack.com/t/opendilab/shared_invite/zt-v9tmv4fp-nUBAQEH1_Kuyu_q4plBssQ), or contact the core developer [HansBug](https://github.com/HansBug) for more detailed discussion.\n\n## License\n\n`DI-treetensor` released under the Apache 2.0 license.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopendilab%2Fdi-treetensor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopendilab%2Fdi-treetensor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopendilab%2Fdi-treetensor/lists"}