{"id":32175913,"url":"https://github.com/ytree-project/ytree","last_synced_at":"2025-10-21T19:51:29.017Z","repository":{"id":37453096,"uuid":"98564214","full_name":"ytree-project/ytree","owner":"ytree-project","description":"A Python package for analyzing tree data and especially merger trees.","archived":false,"fork":false,"pushed_at":"2025-10-07T08:59:03.000Z","size":3693,"stargazers_count":16,"open_issues_count":5,"forks_count":10,"subscribers_count":6,"default_branch":"main","last_synced_at":"2025-10-17T22:54:02.820Z","etag":null,"topics":["analysis","astronomy","astrophysics","data","merger-trees","python","simulations","trees"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ytree-project.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.rst","funding":null,"license":"COPYING.txt","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":"CITATION.rst","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2017-07-27T17:37:08.000Z","updated_at":"2025-10-07T08:59:03.000Z","dependencies_parsed_at":"2025-01-27T16:34:08.316Z","dependency_job_id":"5638e6d6-9e5f-467c-bb05-925c6b1d1d0c","html_url":"https://github.com/ytree-project/ytree","commit_stats":{"total_commits":1260,"total_committers":4,"mean_commits":315.0,"dds":"0.033333333333333326","last_synced_commit":"267d598c556845076d02c21c8c9928c25e67adfa"},"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"purl":"pkg:github/ytree-project/ytree","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ytree-project%2Fytree","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ytree-project%2Fytree/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ytree-project%2Fytree/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ytree-project%2Fytree/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ytree-project","download_url":"https://codeload.github.com/ytree-project/ytree/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ytree-project%2Fytree/sbom","scorecard":{"id":568649,"data":{"date":"2025-07-28","repo":{"name":"github.com/ytree-project/ytree","commit":"27a15945a82bdc372602f629d581a1178b1e50fa"},"scorecard":{"version":"v5.2.1-26-g4feedb85","commit":"4feedb857ab8d82158aa9774bf8054df41992180"},"score":3.4,"checks":[{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/4feedb857ab8d82158aa9774bf8054df41992180/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/python-publish.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/4feedb857ab8d82158aa9774bf8054df41992180/docs/checks.md#token-permissions"}},{"name":"Code-Review","score":0,"reason":"Found 0/5 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/4feedb857ab8d82158aa9774bf8054df41992180/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/4feedb857ab8d82158aa9774bf8054df41992180/docs/checks.md#dangerous-workflow"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/4feedb857ab8d82158aa9774bf8054df41992180/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/python-publish.yml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/ytree-project/ytree/python-publish.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/python-publish.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/ytree-project/ytree/python-publish.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/python-publish.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/ytree-project/ytree/python-publish.yml/main?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/python-publish.yml:20","Warn: pipCommand not pinned by hash: .github/workflows/python-publish.yml:21","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 third-party GitHubAction dependencies pinned","Info:   0 out of   2 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/4feedb857ab8d82158aa9774bf8054df41992180/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/4feedb857ab8d82158aa9774bf8054df41992180/docs/checks.md#cii-best-practices"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/4feedb857ab8d82158aa9774bf8054df41992180/docs/checks.md#vulnerabilities"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/4feedb857ab8d82158aa9774bf8054df41992180/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/4feedb857ab8d82158aa9774bf8054df41992180/docs/checks.md#fuzzing"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/4feedb857ab8d82158aa9774bf8054df41992180/docs/checks.md#packaging"}},{"name":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/4feedb857ab8d82158aa9774bf8054df41992180/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/4feedb857ab8d82158aa9774bf8054df41992180/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/4feedb857ab8d82158aa9774bf8054df41992180/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 30 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/4feedb857ab8d82158aa9774bf8054df41992180/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-20T15:42:39.139Z","repository_id":37453096,"created_at":"2025-08-20T15:42:39.140Z","updated_at":"2025-08-20T15:42:39.140Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":280325299,"owners_count":26311419,"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","status":"online","status_checked_at":"2025-10-21T02:00:06.614Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["analysis","astronomy","astrophysics","data","merger-trees","python","simulations","trees"],"created_at":"2025-10-21T19:51:27.193Z","updated_at":"2025-10-21T19:51:29.010Z","avatar_url":"https://github.com/ytree-project.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ytree\n\n[![CircleCI](https://circleci.com/gh/ytree-project/ytree/tree/main.svg?style=svg)](https://circleci.com/gh/ytree-project/ytree/tree/main)\n[![codecov](https://codecov.io/gh/ytree-project/ytree/branch/main/graph/badge.svg)](https://codecov.io/gh/ytree-project/ytree)\n[![pre-commit.ci status](https://results.pre-commit.ci/badge/github/ytree-project/ytree/main.svg)](https://results.pre-commit.ci/latest/github/ytree-project/ytree/main)\n[![Documentation Status](https://readthedocs.org/projects/ytree/badge/?version=latest)](http://ytree.readthedocs.io/en/latest/?badge=latest)\n[![Supported Python Versions](https://img.shields.io/pypi/pyversions/ytree)](https://pypi.org/project/ytree/)\n[![PyPI version](https://badge.fury.io/py/ytree.svg)](https://badge.fury.io/py/ytree)\n[![Anaconda-Server Badge](https://anaconda.org/conda-forge/ytree/badges/version.svg)](https://anaconda.org/conda-forge/ytree)\n[![DOI](https://joss.theoj.org/papers/10.21105/joss.01881/status.svg)](https://doi.org/10.21105/joss.01881)\n[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.1174373.svg)](https://doi.org/10.5281/zenodo.1174373)\n[![yt-project](https://img.shields.io/static/v1?label=\"works%20with\"\u0026message=\"yt\"\u0026color=\"blueviolet\")](https://yt-project.org)\n\nThis is `ytree`, a [yt](https://github.com/yt-project/yt) extension for\nworking with tree data and especially merger trees.\n\nGenerally speaking, tree data defines a one-directional relationship\nbetween a series of objects. In trees, objects can have one or more\nancestors, but only a single descendent.\n\nStructure formation in cosmology proceeds in a hierarchical fashion,\nwhere dark matter halos grow via mergers with other halos. This type\nof evolution can be conceptualized as a tree, with small branches\nconnecting to successively larger ones, and finally to the trunk. A\nmerger tree describes the growth of halos in a cosmological\nsimulation by linking a halo appearing in a given snapshot to its\ndirect ancestors in a previous snapshot and its descendent in the next\nsnapshot.\n\nMerger trees are computationally expensive to generate and a great\nnumber of codes exist for computing them. However, each of these codes\nsaves the resulting data to a different format. `ytree` is Python\npackage for reading and working with merger tree data from multiple\nformats. If you are already familiar with using\n[yt](https://github.com/yt-project/yt) to analyze snapshots from\ncosmological simulations, then think of `ytree` as the `yt` of merger\ntrees.\n\nTo load a merger tree data set with `ytree` and print the masses of\nall the halos in a single tree, one could do:\n\n```\n\u003e\u003e\u003e import ytree\n\u003e\u003e\u003e a = ytree.load('tree_0_0_0.dat')\n\u003e\u003e\u003e my_tree = a[0]\n\u003e\u003e\u003e print(my_tree['tree', 'mass'].to('Msun'))\n[6.57410072e+14 6.57410072e+14 6.53956835e+14 6.50071942e+14 ...\n 2.60575540e+12 2.17122302e+12 2.17122302e+12] Msun\n```\n\nA list of all currently supported formats can be found in the online\n[documentation](https://ytree.readthedocs.io/en/latest/Arbor.html#loading-merger-tree-data). If\nyou would like to see support added for another format, we would be\nhappy to work with you to make it happen. In principle, any type of\ntree-like data where an object has one or more ancestors and a single\ndescendent can be supported.\n\n## Installation\n\n`ytree` can be installed with pip or conda:\n\n### pip installation\n\n```\npip install ytree\n```\n\n### conda installation\n\n```\nconda install conda-forge::ytree\n```\n\n### source installation\n\nTo get the development version, clone this repository and install like this:\n\n```\ngit clone https://github.com/ytree-project/ytree\ncd ytree\npip install -e .\n```\n\n## Getting Started\n\nThe [ytree documentation](https://ytree.readthedocs.io) will walk you\nthrough installation, get you started analyzing merger trees, and help\nyou become a contributor to the project. Have a look!\n\n## Sample Data\n\nSample data for all merger tree formats supported by `ytree` is available on the\n[yt Hub](https://girder.hub.yt/) in the\n[ytree data](https://girder.hub.yt/#collection/59835a1ee2a67400016a2cda) collection.\n\n## Contributing\n\n`ytree` would be much better with your contribution!  As an extension of\n[the yt Project](https://yt-project.org/), we follow the yt\n[guidelines for contributing](https://github.com/yt-project/yt#contributing).\n\n## Citing `ytree`\n\nIf you use `ytree` in your work, please cite it. Citation instructions\ncan be found [here](https://ytree.readthedocs.io/en/latest/Citing.html).\n\n## Resources\n\n * The latest documentation can be found at\n   https://ytree.readthedocs.io.\n\n * The [ytree\n   paper](https://joss.theoj.org/papers/10.21105/joss.01881) in the\n   [Journal of Open Source Software](https://joss.theoj.org/).\n\n * `ytree` is an extension of [the yt\n   Project](https://yt-project.org/). The [yt-project community\n   resources](https://github.com/yt-project/yt#resources) can be used\n   for ytree-related communication. The `ytree` developers can usually\n   be found on the yt project Slack channel.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fytree-project%2Fytree","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fytree-project%2Fytree","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fytree-project%2Fytree/lists"}