pixell is a library for loading, manipulating and analyzing maps stored in rectangular pixelization. It is mainly targeted for use with maps of the sky (e.g. CMB intensity and polarization maps, stacks of 21 cm intensity maps, binned galaxy positions or shear) in cylindrical projection, but its core functionality is more general. It extends numpy’s ndarray to an ndmap class that associates a World Coordinate System (WCS) with a numpy array. It includes tools for Fourier transforms (through numpy or pyfft) and spherical harmonic transforms (through ducc0) of such maps and tools for visualization (through the Python Image Library).
gcc/gfortran or Intel compilers (clang might not work out of the box), if compiling from source
ducc0, healpy, Cython, astropy, numpy, scipy, matplotlib, pyyaml, h5py, Pillow (Python Image Library)
On MacOS, and other systems with non-traditional environments, you should specify the following standard environment variables:
CC: C compiler (example: gcc)
CXX: C++ compiler (example: g++)
FC: Fortran compiler (example: gfortran)
We recommend using gcc installed from Homebrew to access these compilers on MacOS, and you should make sure to point e.g. $CC to the full path of your gcc installation, as the gcc name usually points to the Apple clang install by default.
Runtime threading behaviour
Certain parts of pixell are parallelized using OpenMP, with the underlying ducc0 library using pthreads. By default, these libraries use the number of cores on your system to determine the number of threads to use. If you wish to override this behaviour, you can use two environment variables:
OMP_NUM_THREADS will set both the number of pixell threads and ducc0 threads.
DUCC0_NUM_THREADS will set the number of threads for the ducc0 library to use, overwriting OMP_NUM_THREADS if both are set. pixell behaviour is not affected.
If you are using a modern chip (e.g. Apple M series chips, Intel 12th Gen or newer) that have both efficiency and performance cores, you may wish to set OMP_NUM_THREADS to the number of performance cores in your system. This will ensure that the efficiency cores are not used for the parallelized parts of pixell and ducc0.
Make sure your pip tool is up-to-date. To install pixell, run:
$ pip install pixell --user $ test-pixell
This will install a pre-compiled binary suitable for your system (only Linux and Mac OS X with Python>=3.7 are supported). Note that you need ~/.local/bin to be in your PATH for the latter test-pixell to work.
If you require more control over your installation, e.g. using Intel compilers, please see the section below on compiling from source. The test-pixell command will run a suite of unit tests.
Compiling from source (advanced / development workflow)
For compilation instructions specific to NERSC/cori, see NERSC.
For all other, below are general instructions.
First, download the source distribution or git clone this repository. You can work from master or checkout one of the released version tags (see the Releases section on Github). Then change into the cloned/source directory.
If not using Intel compilers (see below), build the package using
$ python setup.py build_ext -i
You may now test the installation:
$ py.test pixell/tests/
If the tests pass, you can install the package (optionally with -e if you would like to edit the files after installation)
$ python setup.py install --user
Intel compilers require you to modify the build step above as follows
$ python setup.py build_ext -i --fcompiler=intelem --compiler=intelem
On some systems, further specification might be required (make sure to get a fresh copy of the repository before trying out a new install method), e.g.:
$ LDSHARED="icc -shared" LD=icc LINKCC=icc CC=icc python setup.py build_ext -i --fcompiler=intelem --compiler=intelem
If you have write access to this repository, please:
create a new branch
push your changes to that branch
merge or rebase to get in sync with master
submit a pull request on github
If you do not have write access, create a fork of this repository and proceed as described above. For more details, see Contributing.
Changes relative to 0.19.2 include:
More miscellaneous fixes after transition to ducc0
More work on wavelets
We now provide MacOS x86_64 wheels
Improved build system that respects choices of CC, CXX, and FC
Changes relative to 0.19.0 include:
Important bugfixes for the migration from libsharp2 to ducc0
Improved SHT unit tests
Changes relative to 0.17.3 include:
Migrate fully from libsharp2 to ducc0 (for curved sky functions)
Temporary suspension of MacOS pip binaries (use pip install pixell==0.17.3 for Macs in the meantime)
Changes relative to 0.17.2 include:
More support for fejer1
Changes relative to 0.17.1 include:
Build for Python 3.11
Changes relative to 0.16.0 include:
Bilinear map-making pixel window function
Miscellaneous new functions and API improvements
Miscellaneous bug fixes
Fixes for Apple Silicon
Changes relative to 0.15.3 include:
Fast C-based source simulation
Fast vectorized radial profile binning
Fixes and improvements to HDF5 I/O
Fixes to OSX support
Changes relative to 0.15.1 include:
New wheels that fix numpy binary incompatibility errors
Changes relative to 0.14.3 include:
More flexible enmap.read_map_geometry
Add Python 3.10 support, drop Python 3.6 support
Changes relative to 0.14.2 include:
Updates to enmap.insert, UHTs and WCS string accuracy
Changes relative to 0.14.1 include:
An important bugfix for enmap.downgrade when the op argument is passed. This bug has been present since v0.14.0 and in commits on master since Aug 12, 2021.
Changes relative to 0.13.2 include:
A breaking change to map2alm where it no longer approximates WCS if ring weights are unavailable
Miscellaneous bug fixes
ducc0 FFT support and fast rotate_alm
Tiled map support
New healpix <-> rectpix reprojection API
Changes relative to 0.13.1 include:
Added binaries for MacOS 11 Big Sur
Changes relative to 0.13.0 include:
Fixes to the MacOS wheel building
Changes relative to 0.12.1 include:
Matched filtering in a new analysis module
Conjugate gradients solver
Discrete cosine transforms
Miscellaneous bug fixes
Changes relative to 0.12.0 include:
Patch to fix numpy binary incompatibility issues caused by changes to the numpy C API. We now require numpy >1.20.
Changes relative to 0.11.2 include:
We now use libsharp2 instead of libsharp, which has signficantly faster SHTs
Major breaking change: the meaning of the “iau” flag has been corrected and reversed. The default behaviour of map2harm and other functions using this flag will be different.
Unified harmonic transforms module
postage_stamp removed in favor of thumbnails
Adjoint harmonic transforms
Changes relative to 0.11.0 include:
Bug-fix for distance_transform when using rmax
Changes relative to 0.10.3 include:
Bug-fix for enmap.project that led to crashes
Improvements to fft and ifft overhead
alm filtering API improvements
Changes to CMB dipole parameter
Allow lmax!=mmax in curvedsky routines
Python 3.9 builds and Github actions instead of Travis
Changes relative to 0.10.2 include:
Bug fix for automatic IAU -> COSMO, recognizes POLCCONV instead of POLCONV.
Changes relative to 0.9.6 include:
Automatically converts maps recognized to be in IAU polarization convention (through the FITS header) to COSMO convention by flipping the sign of U
Fixes a centering issue in reproject.thumbnails
Optimizes posmap for separable projections and pixsizemap for cylindrical projections making these functions orders of magnitude faster for CAR (and other projections)
A test script test-pixell is distributed with the package
Changes relative to 0.6.0 include:
Ability to read compressed FITS images
Fixed a bug to make aberration and modulation accurate to all orders
Expanded alm2cl to handle full cross-spectra and broadcasting
Changes relative to 0.5.2 include:
Improvements in accuracy for map extent, area and Fourier wavenumbers
Spherical harmonic treatment consistent with healpy
Additional helper functions, e.g enmap.insert
Helper arguments, e.g. physical normalization for enmap.fft
Bug fixes e.g. in rand_alm
Improved installation procedure and documentation
API for most modules is close to converged
Significant number of bug fixes and new features
Versioning system implemented through versioneer and bumpversion
Automated pixel level tests for discovering effects of low-level changes
First release on PyPI.
Release history Release notifications | RSS feed
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Hashes for pixell-0.21.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Hashes for pixell-0.21.1-cp311-cp311-macosx_10_9_x86_64.whl
Hashes for pixell-0.21.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Hashes for pixell-0.21.1-cp310-cp310-macosx_10_9_x86_64.whl
Hashes for pixell-0.21.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Hashes for pixell-0.21.1-cp39-cp39-macosx_10_9_x86_64.whl
Hashes for pixell-0.21.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Hashes for pixell-0.21.1-cp38-cp38-macosx_10_9_x86_64.whl
Hashes for pixell-0.21.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl