Skip to main content

A package for cosmology calculations with arbitrary numpy-like APIs

Project description

An efficient implementation of astropy-like cosmology compatible with numpy-like backends, e.g., jax and cupy.

There are two main features leading to superior efficiency to astropy:

  • Integrals of \(E(z)\) and related functions are performed analytically with Pade approximations.

  • Support for jax and cupy backends allow hardware acceleration, just-in-time compilation, and automatic differentiation.

The primary limitations are:

  • Only flat cosmologies are supported with two components with constant equations of state, e.g., FlatwCDM.

  • Approximations to the various integrals generally agree with astropy at the <0.1% level.

  • The astropy units are incompatible with non-numpy backends.

Installation and contribution

wcosmo can be installed via conda-forge, pypi or from source.

$ mamba install -c conda-forge wcosmo
$ pip install wcosmo
$ pip install git+https://github.com/ColmTalbot/wcosmo.git

for development you should follow a standard fork-and-pull workflow.

  • First create a new fork at github.com/UserName/wcosmo.

  • Clone your fork

    $ git clone git@github.com:UserName/wcosmo.git

    or use a GitHub codespace.

  • Install the local version with

    $ python -m pip install .
  • Make any desired edits and push to your fork.

  • Open a pull request into git@github.com:ColmTalbot/wcosmo.git.

Basic usage

To import an astropy-like cosmology

>>> from wcosmo import FlatwCDM
>>> cosmology = FlatwCDM(H0=70, Om0=0.3, w0=-1)
>>> cosmology.luminosity_distance(1)

Explicit usage of astropy units can be freely enabled/disabled. In this case, the values will have the default units for each method.

>>> from wcosmo import FlatwCDM
>>> from wcosmo.utils import disable_units, enable_units
>>> cosmology = FlatwCDM(H0=70, Om0=0.3, w0=-1)

>>> disable_units()
>>> cosmology.luminosity_distance(1)
6607.657732077576

>>> enable_units()
>>> cosmology.luminosity_distance(1)
<Quantity 6607.65773208 Mpc>

GWPopulation

The primary intention for this package is for use with GWPopulation. This code is automatically used in GWPopulation when using either gwpopulation.experimental.cosmo_models.CosmoModel and/or PowerLawRedshift

Changing backend

The backend can be switched automatically using, e.g.,

>>> import gwpopulation
>>> gwpopulation.backend.set_backend("jax")

Manual backend setting can be done as follows:

>>> import jax.numpy as jnp
>>> from jax.scipy.linalg.toeplitz import toeplitz

>>> from wcosmo import wcosmo, utils
>>> wcosmo.xp = jnp
>>> utils.xp = jnp
>>> utils.toeplitz = toeplitz

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

wcosmo-0.3.1.tar.gz (659.0 kB view hashes)

Uploaded Source

Built Distribution

wcosmo-0.3.1-py3-none-any.whl (16.0 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page