Skip to main content

A package for distributing the HEASOFT / XSPEC model library.

Project description

xspectrampoline

Installing the XSPEC model library can be as easy as

pip install xspectrampoline

and that's what this package provides.

Usage

This package is indented only for providing the XSPEC model binaries, and is not a wrapper around the model library. The minimal wrapper code that exists is code you would have to write anyway, but beyond that there may are too many ways the models could be put together for Python usage. That's an exercise left to the reader.

Whilst you think about that, here's how you can use xspectrampoline

# Importing calls FNINIT in the libXS
import xspectrampoline

# Get a handle to the minimal wrapper
lib_xspec = xspectrampoline.get_libraries()

# Get the function by the symbol name
powerlaw = lib_xspec.get_model("C_powerlaw")

# Setup an energy, parameter, and output arrays
energy = np.linspace(0.01, 10.0, 100, dtype=np.float64)
parameters = np.array([3.0], dtype=np.float64)
output = np.zeros(len(energy) - 1, dtype=np.float64)
error = np.zeros(len(energy) - 1, dtype=np.float64)

# Invoke the model
powerlaw(energy, parameters, output, error)

# Then do things with `output`
...

Overwriting which libraries are used

By default xspectrampoline bundles everything that is needed to use the XSPEC model library. But what if you already have HEASOFT / XSPEC installed and want to use your local version? xspectrampoline checks if the HEADAS environment variable is set and determines the library locations accordingly. If you want to use your local version, just make sure HEADAS points to the right location and your linker paths are configured via headinit.

xspectrampoline sets the HEADAS environment variable if it's not already set. You can also access the path it uses to resolve the libraries using

import xspectrampoline

headas_path = xspectrampoline.get_HEADAS()
print(headas_path)

How does it work

This package is possible all thanks to Julia's BinaryBuilder.jl who have done all the hard work for making compiled libraries relatively easy to share around. The XSPEC model library was cross compiled into LibXSPEC_jll.jl for Linux and MacOS, and xspectrampoline is basically those artifacts bundled for distribution with Python.

For developers

To bundle things locally, ensure you have setuptools, wheel, and build installed:

python3 -m pip install --upgrade setuptool wheel build

You can then use the Makefile targets to automate the build commands. The Makefile fetches the BinaryBuilder.jl artifacts, unpacks them, and runs the necessary Python packaging commands to create the wheels. Those will then be available under ./dist in your local directory.

make

You can test the packaging by installing from the wheel:

python -m pip install ./dist/xspectrampoline-0.1.0-py3-none-linux_x86_64.whl

selecting the correct platform tag as needed.

There are also handy targets for doing this:

make install    # install the wheel on your system

make clean      # delete all files (include dist) that were generating during
                # the packaging process

Testing locally

Because you need to test the locally installed version of xspectrampoline, you need to make sure you run pytest outside of the root directory. After you've installed the wheel, the easiest way to do this is

cd test && pytest -vvv .

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

xspectrampoline-0.1.5-py3-none-manylinux_2_24_x86_64.whl (63.5 MB view details)

Uploaded Python 3manylinux: glibc 2.24+ x86-64

xspectrampoline-0.1.5-py3-none-macosx_15_0_arm64.whl (10.3 MB view details)

Uploaded Python 3macOS 15.0+ ARM64

xspectrampoline-0.1.5-py3-none-macosx_14_0_x86_64.whl (11.8 MB view details)

Uploaded Python 3macOS 14.0+ x86-64

xspectrampoline-0.1.5-py3-none-macosx_14_0_arm64.whl (10.3 MB view details)

Uploaded Python 3macOS 14.0+ ARM64

File details

Details for the file xspectrampoline-0.1.5-py3-none-manylinux_2_24_x86_64.whl.

File metadata

File hashes

Hashes for xspectrampoline-0.1.5-py3-none-manylinux_2_24_x86_64.whl
Algorithm Hash digest
SHA256 fd1437c43b4d9bbb7006be88bd6edf716b56d41153ce6fd20992b4fcaa28fd9c
MD5 b5038abca3df192baab6cd8134cf0112
BLAKE2b-256 15643fdb22eb2d7e3948909826f41a20fef996e28d71f35746cb687bb943d567

See more details on using hashes here.

File details

Details for the file xspectrampoline-0.1.5-py3-none-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for xspectrampoline-0.1.5-py3-none-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 7e2e9c9c5e61d1b172b9bdb1260b07703f238eb87365b3acc0250ac0a475a423
MD5 75bd03fd30e2a00e665bdd1634fd8da7
BLAKE2b-256 afc28cd05e524dedd9057e28e2ac9fef6b273bf66ad0a16310be5267b58e2b0f

See more details on using hashes here.

File details

Details for the file xspectrampoline-0.1.5-py3-none-macosx_14_0_x86_64.whl.

File metadata

File hashes

Hashes for xspectrampoline-0.1.5-py3-none-macosx_14_0_x86_64.whl
Algorithm Hash digest
SHA256 03912b247d89e571bcb817a5e6f93312c281276466ddd5829d10de2fc3cc079e
MD5 561f8a6dfbba4784bf7e420a3ecc140d
BLAKE2b-256 f0e08bcff6172d8b4127e55816e40b45320445625e81b30d53f971e61ce334e4

See more details on using hashes here.

File details

Details for the file xspectrampoline-0.1.5-py3-none-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for xspectrampoline-0.1.5-py3-none-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 2210c4b5cf56f746779e5744bfb592d7abf90db517fffe2c2149f1e9622c007d
MD5 8dc4e464a9483f8bfde63e032bf46551
BLAKE2b-256 210c6cd43a50cc2d43666d696f68495b7cdfd25d13067f5ed65e7a752b55785b

See more details on using hashes here.

Supported by

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