{"id":29633432,"url":"https://github.com/mikeswang/triumvirate","last_synced_at":"2026-03-14T00:36:24.736Z","repository":{"id":65923037,"uuid":"355723559","full_name":"MikeSWang/Triumvirate","owner":"MikeSWang","description":"A Python/C++ package for three-point clustering measurements in LSS analyses","archived":false,"fork":false,"pushed_at":"2025-10-14T19:23:13.000Z","size":15616,"stargazers_count":21,"open_issues_count":4,"forks_count":4,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-10-16T17:36:08.984Z","etag":null,"topics":["clustering-statistics","cpp","cuda","cython","hip","large-scale-structure-cosmology","python"],"latest_commit_sha":null,"homepage":"https://mikeswang.github.io/Triumvirate/","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MikeSWang.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":".github/CONTRIBUTING.md","funding":null,"license":null,"code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":".github/SECURITY.md","support":".github/SUPPORT.md","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":"2021-04-08T01:01:18.000Z","updated_at":"2025-10-14T19:23:15.000Z","dependencies_parsed_at":"2023-12-18T15:07:47.605Z","dependency_job_id":"25b9ed8f-6ed6-4c3f-b67b-68442e8e5d0c","html_url":"https://github.com/MikeSWang/Triumvirate","commit_stats":null,"previous_names":[],"tags_count":21,"template":false,"template_full_name":null,"purl":"pkg:github/MikeSWang/Triumvirate","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MikeSWang%2FTriumvirate","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MikeSWang%2FTriumvirate/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MikeSWang%2FTriumvirate/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MikeSWang%2FTriumvirate/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MikeSWang","download_url":"https://codeload.github.com/MikeSWang/Triumvirate/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MikeSWang%2FTriumvirate/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":280684005,"owners_count":26372970,"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-23T02:00:06.710Z","response_time":142,"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":["clustering-statistics","cpp","cuda","cython","hip","large-scale-structure-cosmology","python"],"created_at":"2025-07-21T14:02:31.014Z","updated_at":"2025-10-23T19:56:32.714Z","avatar_url":"https://github.com/MikeSWang.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n\u003cimg src=\"docs/source/_static/image/Triumvirate.png\" alt=Triumvirate-Logo width=67%\u003e\n\u003c/p\u003e\n\n# Three-Point Clustering Statistics in LSS\n\n[![Release](https://img.shields.io/github/v/release/MikeSWang/Triumvirate?display_name=tag\u0026sort=semver\u0026logo=Git)](https://github.com/MikeSWang/Triumvirate/releases/latest)\n[![CI](https://img.shields.io/github/actions/workflow/status/MikeSWang/Triumvirate/ci.yml?label=ci\u0026logo=GitHubActions)](https://github.com/MikeSWang/Triumvirate/actions/workflows/ci.yml)\n[![Docs](https://img.shields.io/readthedocs/triumvirate/latest?logo=ReadtheDocs)](https://readthedocs.org/projects/triumvirate/builds/)\n[![pre-commit.ci-Status](https://results.pre-commit.ci/badge/github/MikeSWang/Triumvirate/main.svg)](https://results.pre-commit.ci/latest/github/MikeSWang/Triumvirate/main)\n[![Codacy-Badge](https://app.codacy.com/project/badge/Grade/009fa0a74d5c400bbe383bd8b3249a5b)](https://app.codacy.com/gh/MikeSWang/Triumvirate/dashboard?utm_campaign=Badge_grade)\n\n``Triumvirate`` is a Python/C++ software package for measuring three-point (and\ntwo-point) clustering statistics and performing survey window convolution in\nlarge-scale structure (LSS) cosmological analyses.\n\n\n## Documentation\n\n[![Documentation](https://img.shields.io/badge/Read%20the%20Docs-latest-informational?logo=ReadtheDocs)](https://triumvirate.readthedocs.io/en/latest/)\n\nComprehensive documentation including the [scientific background](\nhttps://triumvirate.readthedocs.io/en/latest/background.html),\n[installation instructions](\nhttps://triumvirate.readthedocs.io/en/latest/installation.html),\n[tutorials](https://triumvirate.readthedocs.io/en/latest/tutorials.html) and\n[API reference](https://triumvirate.readthedocs.io/en/latest/apiref.html)\ncan be found at [triumvirate.readthedocs.io](\nhttps://triumvirate.readthedocs.io/en/latest/).\n\n\n## Installation\n\n### Python package\n\n[![PyPI](https://img.shields.io/pypi/v/Triumvirate?logo=PyPI\u0026color=informational)](https://pypi.org/project/Triumvirate)\n[![Conda](https://img.shields.io/conda/v/msw/triumvirate?logo=Anaconda\u0026color=informational)](https://anaconda.org/msw/triumvirate)\n\n``Triumvirate`` as a Python package is distributed through [PyPI](\nhttps://pypi.org/project/Triumvirate) and [Conda](\nhttps://anaconda.org/msw/triumvirate). Instructions for installation\ncan be found on the [Installation](\nhttps://triumvirate.readthedocs.io/en/latest/installation.html#python-package)\npage in the documentation.\n\n### GPU variants\n\n[![PyPI](https://img.shields.io/pypi/v/Triumvirate-CUDA?logo=PyPI\u0026color=informational)](https://pypi.org/project/Triumvirate-CUDA)\n[![Conda](https://img.shields.io/conda/v/msw/triumvirate-cuda?logo=Anaconda\u0026color=informational)](https://anaconda.org/msw/triumvirate-cuda)\n\nCUDA variants of the Python package are/will be made available as\n``Triumvirate-CUDA`` on [PyPI](https://pypi.org/project/Triumvirate-CUDA)\nand ``triumvirate-cuda`` through [Conda](\nhttps://anaconda.org/msw/triumvirate-cuda).\n\n### C++ library \u0026 program\n\n``Triumvirate`` as either a static library or a binary executable can be\nbuilt using `make`. Instructions for compilation can be found on the\n[Installation](\nhttps://triumvirate.readthedocs.io/en/latest/installation.html#c-library-program)\npage in the documentation.\n\n### Development mode\n\nBoth the Python package and the C++ library/program can be set up in\ndevelopment mode with `make`, provided that dependency requirements are\nsatisfied (GSL and FFTW3 libraries are mandatory while an OpenMP library\nis optional).\n\nFirst `git clone` the desired branch/release from the GitHub repository and\nchange into the repository directory path:\n\n```sh\ngit clone git@github.com:MikeSWang/Triumvirate.git --branch \u003cbranch-or-release\u003e\ncd Triumvirate\n```\n\nThen, execute in shell:\n\n```sh\nmake clean\nmake ([py|cpp]install)|(cpp[libinstall|appbuild]) [useomp=(true|1)] [usecuda=(true|1)] [usehdf5=(true|1)]\n```\n\nwhere ``cpplibinstall`` or ``cppappbuild`` respectively builds the C++\nstatic library or binary executable only, ``cppinstall`` builds both,\n``pyinstall`` builds the Python package only, and ``install`` builds\nall of the above. To enable OpenMP parallelisation, append ``useomp=true``\nor ``useomp=1`` to the end of the second line as shown above. To enable\nCUDA support, append ``usecuda=true`` or ``usecuda=1`` to the end of the\nsecond line as shown above. To enable HDF5 file format support, append\n``usehdf5=true`` or ``usehdf5=1`` to the end of the second line as shown above.\n\n\u003e [!NOTE]\n\u003e The latest release is on the [``main``](\n\u003e https://github.com/MikeSWang/Triumvirate/tree/main) branch. The default\n\u003e [``Makefile``](./Makefile) (located at the repository directory root) should\n\u003e work in most build environments, but may need to be modified as appropriate.\n\n\u003e [!NOTE]\n\u003e See the [Installation](\n\u003e https://triumvirate.readthedocs.io/en/latest/installation.html#dependencies)\n\u003e page in the documentation for more details about dependency requirements.\n\n\u003e [!IMPORTANT]\n\u003e If enabling OpenMP, ensure the C++ compiler used supports it and is\n\u003e configured accordingly. The default [``Makefile``](./Makefile) (located at\n\u003e the repository directory root) assumes the GCC compiler and OpenMP library.\n\u003e See the [Installation](\n\u003e https://triumvirate.readthedocs.io/en/latest/installation.html#openmp-support)\n\u003e page in the documentation for more details.\n\n\u003e [!IMPORTANT]\n\u003e If enabling CUDA capability, ensure there is a CUDA-capable GPU with the\n\u003e appropriate driver installed. For atypical CUDA Toolkit paths, you may\n\u003e need to append the header and library paths to ``DEP_INCLUDES`` and\n\u003e ``DEP_LDFLAGS`` in the default [``Makefile``](./Makefile) (located at the\n\u003e repository directory root). See the [Installation](\n\u003e https://triumvirate.readthedocs.io/en/latest/installation.html#cuda-support)\n\u003e page in the documentation for more details.\n\n\u003e [!IMPORTANT]\n\u003e If enabling HDF5 format support, ensure the HDF5 library is available for\n\u003e linking. If your HDF5 library is MPI-enabled, ensure your compiler is\n\u003e compatible, or switch to a non-parallel HDF5 library.\n\n\u003e [!TIP]\n\u003e Pass option ``-j[N] -O`` to `make` to run multiple concurrent jobs\n\u003e for parallel building (optional parameter ``N`` is the number of\n\u003e parallel jobs; see [GNU Make Manual](\n\u003e https://www.gnu.org/software/make/manual/html_node/Options-Summary.html)).\n\n\n## Attribution\n\n[![JOSS](https://joss.theoj.org/papers/10.21105/joss.05571/status.svg)](https://doi.org/10.21105/joss.05571)\n[![JCAP](https://img.shields.io/badge/10.1088%2F1475--7516%2F2025%2F06%2F031-grey?logo=doi)](https://doi.org/10.1088/1475-7516/2025/06/031)\n[![MNRAS](https://img.shields.io/badge/10.1093%2Fmnras%2Fsty3249-grey?logo=doi)](https://doi.org/10.1093/mnras/sty3249)\n[![MNRAS](https://img.shields.io/badge/10.1093%2Fmnras%2Fstx2333-grey?logo=doi)](https://doi.org/10.1093/mnras/stx2333)\n\n[![arXiv](https://img.shields.io/badge/arXiv-2304.03643-b31b1b)](https://arxiv.org/abs/2304.03643)\n[![arXiv](https://img.shields.io/badge/arXiv-2411.14947-b31b1b)](https://arxiv.org/abs/2411.14947)\n[![Zenodo](https://img.shields.io/badge/zenodo-10.5281%2Fzenodo.10072128-1682D4)](https://doi.org/10.5281/zenodo.10072128)\n\nTo acknowledge the use of ``Triumvirate`` in your published research, please\ncite the relevant publications linked above; for convenience, you can refer to\nthe files [``CITATION.cff``](./CITATION.cff) and [``CITATION.md``](\n./CITATION.md) for the relevant information in different formats.\n\n\n## Acknowledgement\n\n\u003cimg src=\"docs/source/_static/image/ERC-Logo-Flag.png#gh-light-mode-only\" alt=\"ERC\" width=\"40%\"\u003e\n\u003cimg src=\"docs/source/_static/image/ERC-Logo-Flag-Dark.png#gh-dark-mode-only\" alt=\"ERC\" width=\"40%\"\u003e\n\nThis project has received funding from the European Research Council (ERC)\nunder the European Union's Horizon 2020 research and innovation programme\n(Grant agreement ID: [853291](https://doi.org/10.3030/853291)).\n\nKey underlying numerical algorithms were originally developed by\nNaonori S Sugiyama, and are available in the GitHub repository [``hitomi``](\nhttps://github.com/naonori/hitomi).\n\nWe thank the JOSS reviewers, William Coulton\n([\u0026commat;wcoulton](https://github.com/wcoulton)) and Alfonso Veropalumbo\n([\u0026commat;alfonso-veropalumbo](https://github.com/alfonso-veropalumbo)), for\ntheir valuable feedback and suggestions (openjournals/joss-reviews#5571),\nwhich have improved the functionality and documentation of the code.\n\n\n## Contributing/Development\n\n![Platforms](https://img.shields.io/conda/pn/msw/triumvirate)\n![Python-Version](https://img.shields.io/python/required-version-toml?tomlFilePath=https%3A%2F%2Fgithub.com%2FMikeSWang%2FTriumvirate%2Fraw%2Fmain%2Fdeploy%2Fpkg%2Fpyproject%2F.pyproject.toml\u0026logo=python)\n![C++-Standard](https://img.shields.io/badge/std-c%2B%2B17-informational?logo=cplusplus)\n\n[![Release-Date](https://img.shields.io/github/release-date-pre/MikeSWang/Triumvirate)](https://github.com/MikeSWang/Triumvirate/releases/latest)\n![Commits-Since](https://img.shields.io/github/commits-since/MikeSWang/Triumvirate/latest/main)\n\n[![Build-Issues](https://img.shields.io/github/issues/MikeSWang/Triumvirate/build)](https://github.com/MikeSWang/Triumvirate/issues?q=is%3Aopen+is%3Aissue+label%3Abuild)\n[![Bug-Issues](https://img.shields.io/github/issues/MikeSWang/Triumvirate/bug)](https://github.com/MikeSWang/Triumvirate/issues?q=is%3Aopen+is%3Aissue+label%3Abug)\n[![Feature-Issues](https://img.shields.io/github/issues/MikeSWang/Triumvirate/feature)](https://github.com/MikeSWang/Triumvirate/issues?q=is%3Aopen+is%3Aissue+label%3Afeature)\n[![Pull-Requests](https://img.shields.io/github/issues-pr/MikeSWang/Triumvirate)](https://github.com/MikeSWang/Triumvirate/pulls)\n\n[![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit)](https://github.com/pre-commit/pre-commit)\n\n[![Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MikeSWang/Triumvirate?hide_repo_select=true\u0026ref=main)\n\nUser feedback and contributions are very welcome. Please refer to the\n[contribution guidelines](./.github/CONTRIBUTING.md).\n\n\n## Discussions \u0026 Wiki\n\n[![Discussions](https://img.shields.io/github/discussions/MikeSWang/Triumvirate)](https://github.com/MikeSWang/Triumvirate/discussions)\n\nA [community forum](https://github.com/MikeSWang/Triumvirate/discussions)\nfor users and developers exists, where you can receive\nannouncements, post questions, share ideas and get updates.\n\nA [wiki site](https://github.com/MikeSWang/Triumvirate/wiki) collects wisdoms\nfor specific use cases and user environments.\n\n\n## Releases\n\nRelease notes are included in the [change log](./CHANGELOG.md).\n\n\n## Licence\n\n[![Licence](https://img.shields.io/github/license/MikeSWang/Triumvirate?label=licence\u0026style=flat-square\u0026color=informational)](https://github.com/MikeSWang/Triumvirate/blob/main/LICENCE)\n\n``Triumvirate`` is made freely available under the [GPLv3+ licence](\nhttps://www.gnu.org/licenses/gpl-3.0.en.html).\nPlease see [``LICENCE``](./LICENCE) (located at the repository directory root)\nfor full terms and conditions.\n\n\u0026copy; 2023 Mike S Wang \u0026 Naonori S Sugiyama\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmikeswang%2Ftriumvirate","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmikeswang%2Ftriumvirate","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmikeswang%2Ftriumvirate/lists"}