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.11 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.11. 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. Set environment variable OPENCOSMO_DATA_PATH to the path where the data is stored. 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.


Release files for opencosmo 1.3.12

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.3.12
File
opencosmo-1.3.12-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.3.12-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.14 CPython 3.14 Linux glibc 2.17+ ARM64 Details
opencosmo-1.3.12-cp314-cp314-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 macOS 11.0+ ARM64 Details
opencosmo-1.3.12-cp314-cp314-macosx_10_12_x86_64.whl CPython 3.14 CPython 3.14 macOS 10.12+ x86-64 Details
opencosmo-1.3.12-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.3.12-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ ARM64 Details
opencosmo-1.3.12-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details
opencosmo-1.3.12-cp313-cp313-macosx_10_12_x86_64.whl CPython 3.13 CPython 3.13 macOS 10.12+ x86-64 Details
opencosmo-1.3.12-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.3.12-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ ARM64 Details
opencosmo-1.3.12-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details
opencosmo-1.3.12-cp312-cp312-macosx_10_12_x86_64.whl CPython 3.12 CPython 3.12 macOS 10.12+ x86-64 Details

Total release size: 6.0 MB

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

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

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

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

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

Download URL opencosmo-1.3.12-cp314-cp314-macosx_11_0_arm64.whl
Size 481.5 kB
Tags CPython 3.14 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
ebf02bf312c14c26484497fcc034d5a074155d201c4d6179c21b1f9ce1d31172
BLAKE2b-256 checksum
How to use checksums
57f1e09eca0ec047ec91279ac00b2a2b01f67f796fe2a5ae9f377f52f7f57b08
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.8.2

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

Download URL opencosmo-1.3.12-cp314-cp314-macosx_10_12_x86_64.whl
Size 486.9 kB
Tags CPython 3.14 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
2f3102f8ce2a9aaf478f1a85c3b7581dc1307c2b82b6469e10a3baeda807be8a
BLAKE2b-256 checksum
How to use checksums
8a4ad1254f1c6a050999ad266c32bc522c9fc2725de041d89e48831a5e17f045
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.8.2

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

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

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

Download URL opencosmo-1.3.12-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 518.6 kB
Tags CPython 3.13 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
a1a3de6d2ed8d6ef21fc9f4b75609330e879c12471754e7098d6036ad3599238
BLAKE2b-256 checksum
How to use checksums
92e3494ee4e9d0e4ff3d15d3740b88fdcc52dcd513a2f69a231bc6b11436989f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.8.2

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

Download URL opencosmo-1.3.12-cp313-cp313-macosx_11_0_arm64.whl
Size 481.4 kB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
6bd13fbde3684c70994bf4ef2a47b3e686e46528a672bf73624d289bc563cdd1
BLAKE2b-256 checksum
How to use checksums
68dbab394e592cd4d0c7f337b1b03d0755a54d884db8fd8018371cd5ee65a9db
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.8.2

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

Download URL opencosmo-1.3.12-cp313-cp313-macosx_10_12_x86_64.whl
Size 486.7 kB
Tags CPython 3.13 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
71a20cb524f61e60041140896ad7de6d5e66756ed61c1e437d6589b64204e0fa
BLAKE2b-256 checksum
How to use checksums
dc43afb5756220616b89a481c7c2fb07cbe20c5608c323943b27905167cd8198
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.8.2

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

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

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

Download URL opencosmo-1.3.12-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 519.0 kB
Tags CPython 3.12 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
44e61379b96af1b0750b2916974b0fdba6d0f5e5501046f8946595ff8e1342d0
BLAKE2b-256 checksum
How to use checksums
da205cd427124a056c16b784d0504a7e755aa240ec986b7d6ed452fd006628b5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.8.2

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

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

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

Download URL opencosmo-1.3.12-cp312-cp312-macosx_10_12_x86_64.whl
Size 486.7 kB
Tags CPython 3.12 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
6f9b64fb17de00d8f2e1bdd748f95ff911a939bb787e68c2290ac5333e82568b
BLAKE2b-256 checksum
How to use checksums
e9e6746d3ef4680b0d095087a2390851bbbd9c0417e2cac6582772df771ead63
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

1.4.0

12 release files

This release

1.3.12 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