Skip to main content

OpenCosmo


CI PyPI - Version Conda Version GitHub License

The OpenCosmo Python Toolkit provides utilities for reading, writing and manipulating data from cosmological simulations produced by the Cosmolgical Physics and Advanced Computing (CPAC) group at Argonne National Laboratory. It can be used to work with smaller quantities data retrieved with the CosmoExplorer, as well as the much larget datasets these queries draw from. The OpenCosmo toolkit integrates with standard tools such as AstroPy, and allows you to manipulate data in a fully-consistent cosmological context.

Installation

The OpenCosmo library is available for Python 3.12 and up on Linux and MacOS (and Windows via WSL). It can be installed easily with pip:

pip install opencosmo

There's a good chance the default version of Python on your system is less than 3.12. Whether or not this is the case, we recommend installing opencosmo into a virtual environment. If you're using Conda, you can create a new environment and install opencosmo into it automatically:

conda create -n opencosmo_env conda-forge::opencosmo
conda activate opencosmo_env

or if you already have a virtual environment to use:

conda install conda-forge::opencosmo

If you plan to use opencosmo in a Jupyter notebook, you can install the ipykernel package to make the environment available as a kernel:

pip install ipykernel # can also be installed with conda
python -m ipykernel install --user --name=opencosmo

Be sure you have run the "activate" command shown above before running the ipykernel command.

Getting Started

To get started, download the "haloproperites.hdf5" from the OpenCosmo Google Drive. This file contains properties of dark-matter halos from a small hydrodynamical simulation run with HACC. You can easily open the data with the open command:

import opencosmo as oc

dataset = oc.open("haloproperties.hdf5")
print(dataset)
OpenCosmo Dataset (length=237441)
Cosmology: FlatLambdaCDM(name=None, H0=<Quantity 67.66 km / (Mpc s)>, Om0=0.3096446816186967, Tcmb0=<Quantity 0. K>, Neff=3.04, m_nu=None, Ob0=0.04897468161869667)
First 10 rows:
block fof_halo_1D_vel_disp fof_halo_center_x ... sod_halo_sfr unique_tag
             km / s               Mpc        ... solMass / yr
int32       float32             float32      ...   float32      int64
----- -------------------- ----------------- ... ------------ ----------
    0            32.088795         1.4680439 ...       -101.0      21674
    0             41.14525        0.19616994 ...       -101.0      44144
    0             73.82962         1.5071135 ...    3.1447952      48226
    0             31.17231         0.7526525 ...       -101.0      58472
    0            23.038841         5.3246417 ...       -101.0      60550
    0            37.071426         0.5153746 ...       -101.0     537760
    0            26.203058         2.1734374 ...       -101.0     542858
    0              78.7636         2.1477687 ...          0.0     548994
    0             37.12636         6.9660196 ...       -101.0     571540
    0             58.09235          6.072006 ...    1.5439711     576648

The open function returns a Dataset object, which can retrieve the relevant data from disk with a simple method call. It also holds metadata about the simulation, such as the comsology. You can easily access the data and cosmology as Astropy objects:

dataset.get_data()
dataset.cosmology

The first will return an astropy table of the data, with all associated units already applied. The second will return the astropy cosmology object that represents the cosmology the simulation was run with.

Basic Querying

Although you can access data directly, opencosmo provides tools for querying and transforming the data in a fully cosmology-aware context. For example, suppose we wanted to plot the concentration-mass relationship for the halos in our simulation above a certain mass. One way to perform this would be as follows:

dataset = dataset
    .filter(oc.col("fof_halo_mass") > 1e13)
    .take(1000, at="random")
    .select(("fof_halo_mass", "sod_halo_cdelta"))

print(dataset)
OpenCosmo Dataset (length=1000)
Cosmology: FlatLambdaCDM(name=None, H0=<Quantity 67.66 km / (Mpc s)>, Om0=0.3096446816186967, Tcmb0=<Quantity 0. K>, Neff=3.04, m_nu=None, Ob0=0.04897468161869667)
First 10 rows:
 fof_halo_mass   sod_halo_cdelta
    solMass
    float32          float32
---------------- ---------------
11220446000000.0       4.5797048
17266723000000.0       7.4097505
51242150000000.0       1.8738283
70097712000000.0       4.2764015
51028305000000.0        2.678151
11960567000000.0       3.9594727
15276915000000.0        5.793542
16002001000000.0       2.4318497
47030307000000.0       3.7146702
15839942000000.0        3.245569

We could then plot the data, or perform further transformations. This is cool on its own, but the real power of opencosmo comes from its ability to work with different data types. Go ahead and download the "haloparticles" file from the OpenCosmo Google Drive and try the following:

import opencosmo as oc

data = oc.open("haloproperties.hdf5", "haloparticles.hdf5")

This will return a data collection that will allow you to query and transform the data as before, but will associate the halos with their particles.

data = data
    .filter(oc.col("fof_halo_mass") > 1e13)
    .take(1000, at="random")

for halo in data.halos():
    halo_properties = halo["halo_properties"]
    dm_particles = halo["dm_particles"]
    star_particles = halo["star_particles"]

In each iteration, "halo properties" will be a dictionary containing the properties of the halo (such as its total mass), while "dm_particles" and "star_particles" will be OpenCosmo datasets containing the dark matter and stars associated with the halo, respectively. Because these are just like the dataset object we saw eariler, we can further query and transform the particles as needed for our analysis. For more details on how to use the library, check out the full documentation.

Testing

To run tests, first download the test data from Google Drive. Extract it into test_data/ at the repository root, or set OPENCOSMO_DATA_PATH to an extracted data directory elsewhere. See test/TEST_DATA.md for the expected layout. Then run the tests with pytest:

export OPENCOSMO_DATA_PATH=/path/to/data
# From the repository root
pytest --ignore test/parallel 

Although opencosmo does support multi-core processing via MPI, the default installation does not include the necessary dependencies to work in an MPI environment. If you need these capabilities, check out the guide in our documentation.

Contributing

We welcome bug reports and feature requests from the community. If you would like to contribute to the project, please check out the contributing guide for more information.

Citation

If you use OpenCosmo in your work, please cite the release paper in any publications:

@article{wells2026_opencosmo,
      title={OpenCosmo: Community Portal and Analysis Framework for Flagship Cosmological Simulations}, 
      author={Patrick R. Wells and Michael Buelhmann and Patricia Larsen and William M. Hicks and Manpreet Dhillon and Idunnuoluwa A. Adeniji and Katrin Heitmann and Salman Habib and Benoit Côté and Thomas Uram and Gideon McFarland and Andrew Hearin and Ezar Shinabro and Michael E. Papka},
      year={2026},
      eprint={2607.16059},
      archivePrefix={arXiv},
      primaryClass={astro-ph.IM},
      url={https://arxiv.org/abs/2607.16059}, 
}

Release files for opencosmo 1.4.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for opencosmo 1.4.0
File
opencosmo-1.4.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.17+ x86-64 Details
opencosmo-1.4.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.14 CPython 3.14 Linux glibc 2.17+ ARM64 Details
opencosmo-1.4.0-cp314-cp314-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 macOS 11.0+ ARM64 Details
opencosmo-1.4.0-cp314-cp314-macosx_10_12_x86_64.whl CPython 3.14 CPython 3.14 macOS 10.12+ x86-64 Details
opencosmo-1.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ x86-64 Details
opencosmo-1.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ ARM64 Details
opencosmo-1.4.0-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details
opencosmo-1.4.0-cp313-cp313-macosx_10_12_x86_64.whl CPython 3.13 CPython 3.13 macOS 10.12+ x86-64 Details
opencosmo-1.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ x86-64 Details
opencosmo-1.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ ARM64 Details
opencosmo-1.4.0-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details
opencosmo-1.4.0-cp312-cp312-macosx_10_12_x86_64.whl CPython 3.12 CPython 3.12 macOS 10.12+ x86-64 Details

Total release size: 7.2 MB

Release files / opencosmo-1.4.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL opencosmo-1.4.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 620.9 kB
Tags CPython 3.14 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
af22cf4e12c75d8159c9c7789e6c642221c782cbc413a9cfa7a5c1e4e402a626
BLAKE2b-256 checksum
How to use checksums
a7ab24264389b19df63fd3ffb1975769888f28baf7fbb663c0ae7c037ab08fd5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.8.2

Release files / opencosmo-1.4.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL opencosmo-1.4.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 613.0 kB
Tags CPython 3.14 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
f445962866b706c677240b73f994fe906718fcdb2cfbb851ffa306f13f144c95
BLAKE2b-256 checksum
How to use checksums
392ada0ef07e3cb5b5d72e73c3cf6982f67989b3f5dac26acabc46db4c8be9e5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.8.2

Release files / opencosmo-1.4.0-cp314-cp314-macosx_11_0_arm64.whl

Download URL opencosmo-1.4.0-cp314-cp314-macosx_11_0_arm64.whl
Size 576.5 kB
Tags CPython 3.14 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
700af78db4b14b714739ed848e1658a96246ed05aabe615beabe248821973db8
BLAKE2b-256 checksum
How to use checksums
9a61d00d485034bb84c0b9773b94a0399ea7f8024ac57820b52e84d3e54af093
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.8.2

Release files / opencosmo-1.4.0-cp314-cp314-macosx_10_12_x86_64.whl

Download URL opencosmo-1.4.0-cp314-cp314-macosx_10_12_x86_64.whl
Size 581.8 kB
Tags CPython 3.14 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
fa832baa6be1162f6042a30ef6561eb3cd0a884864f051d617d9c46435dfbe46
BLAKE2b-256 checksum
How to use checksums
9cccf7e83edb9cc872faad47dedab76ac6b5091d32edcf11c8dca9b16dbfe442
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.8.2

Release files / opencosmo-1.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL opencosmo-1.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 621.0 kB
Tags CPython 3.13 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
34840f9a193891af8ab3e3481d9e132fd47db6a09ec9d930a84e8735d7eb75f2
BLAKE2b-256 checksum
How to use checksums
af3a070cecdca05ffaa523531de9f16f079baf77e8e90ad2bd492d559a986aef
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.8.2

Release files / opencosmo-1.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL opencosmo-1.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 612.8 kB
Tags CPython 3.13 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
8750cd6811882f32b7475dd0145b73d7163be342f2937c1fa3c4e3e1b124448f
BLAKE2b-256 checksum
How to use checksums
67606c0e68f0109026cd1a55189a9022ea216e7d89018fa69144bbc3b17abe52
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.8.2

Release files / opencosmo-1.4.0-cp313-cp313-macosx_11_0_arm64.whl

Download URL opencosmo-1.4.0-cp313-cp313-macosx_11_0_arm64.whl
Size 575.7 kB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
b5dabf1c4dc3a4688411f91e819c81b4f3c0aa03c6893d7a4730ecf5088836af
BLAKE2b-256 checksum
How to use checksums
35bf4a612e7594809b95b8832a7b558b55aabea6f51b99937ed14cf2e7a16bb9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.8.2

Release files / opencosmo-1.4.0-cp313-cp313-macosx_10_12_x86_64.whl

Download URL opencosmo-1.4.0-cp313-cp313-macosx_10_12_x86_64.whl
Size 581.5 kB
Tags CPython 3.13 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
406f260ed93032490352867d7b02bf2b6799a39fc34d5eb624226d5f33de38e6
BLAKE2b-256 checksum
How to use checksums
52efccadfa28ec08fd161635e566addc3fcf9b99e1e54da1beafaffa1c721b64
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.8.2

Release files / opencosmo-1.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL opencosmo-1.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 620.4 kB
Tags CPython 3.12 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
7d9c2fd2002b0b7343db47d632545a51b5f898cd404f817ead05016c2c201244
BLAKE2b-256 checksum
How to use checksums
a38491803652d33337501f40a94a99cf753720fffdd0d41f94eb1ad01e275ed8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.8.2

Release files / opencosmo-1.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL opencosmo-1.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 612.5 kB
Tags CPython 3.12 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
10e60246f972aac224922961192b21e21b87ae768e597428a26ece260a579414
BLAKE2b-256 checksum
How to use checksums
39ab27e40b76cb66e010346d36311eca00ae41e5164f87a6bf0f545ea4a65232
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.8.2

Release files / opencosmo-1.4.0-cp312-cp312-macosx_11_0_arm64.whl

Download URL opencosmo-1.4.0-cp312-cp312-macosx_11_0_arm64.whl
Size 576.0 kB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
a51db94bb95704dd2e9810c2fd0a9382ad32893be56c60a042c5e9deff077e08
BLAKE2b-256 checksum
How to use checksums
10a9fc535d63458e0ae255cf991119e339c3071bd26304fe8b29a952a68845fa
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.8.2

Release files / opencosmo-1.4.0-cp312-cp312-macosx_10_12_x86_64.whl

Download URL opencosmo-1.4.0-cp312-cp312-macosx_10_12_x86_64.whl
Size 581.7 kB
Tags CPython 3.12 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
5b820e83ea2db1a0b2d5ef949b8e9ad6ca24bd1a8c8c73beb5de1f0ea8e65ad4
BLAKE2b-256 checksum
How to use checksums
4865b248444aa3ec9aa68c26865270403536e9817fd17bce30e5607aa1e5eb4c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.8.2

Release history Release notifications | RSS feed

1.4.1

12 release files

This release

1.4.0 This release

12 release files

1.3.9

12 release files

1.3.8

12 release files

1.3.7

12 release files

1.3.5

12 release files

1.3.1

12 release files

1.2.7

2 release files

1.2.6

2 release files

1.2.5

2 release files

1.2.4

2 release files

1.2.3

2 release files

1.2.2

2 release files

1.2.1

2 release files

1.2.0

2 release files

1.1.5

2 release files

1.1.4

2 release files

1.1.3

2 release files

1.1.2

2 release files

1.1.1

2 release files

1.1.0

2 release files

1.0.4

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

0.9.6

2 release files

0.9.5

2 release files

0.9.4

2 release files

0.9.3

2 release files

0.9.2

2 release files

0.9.1

2 release files

0.9.0

2 release files

0.8.1

2 release files

0.8.0

2 release files

0.7.3

2 release files

0.7.2

2 release files

0.7.1

2 release files

0.7.0

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page