Python ISTP loader
An easy to use loader for ISTP-compliant CDF and NetCDF files, as commonly distributed by CDAWeb, AMDA and other space-physics data archives.
Rather than exposing raw variables, PyISTP reads the ISTP metadata conventions (VAR_TYPE, DEPEND_n, *_PTR, LABLAXIS, …) and hands you each data variable together with its resolved axes (time and other support variables), labels and attributes.
Free software: GNU General Public License v3
Documentation: https://pyistp.readthedocs.io.
Features
Loads ISTP-compliant CDF files (via pycdfpp by default, or spacepy).
Loads ISTP-compliant NetCDF files (via netCDF4).
Reads from a file path or directly from an in-memory bytes buffer (handy for data fetched over HTTP).
Supports a separate master/skeleton file holding the metadata while the values come from the data file.
Automatically resolves DEPEND_n support variables into axes, with fallback to the master file.
Converts CDF epoch types and NetCDF CF/Unix time variables to numpy.datetime64[ns].
Lazily materializes variable values (the array is read on first access).
Tolerates many non-ISTP-compliant files (CDAWeb, Cluster/CSA) with warnings rather than failures.
Installation
pip install pyistp
The default CDF backend is pycdfpp; spacepy is used as a fallback if available. NetCDF support requires netCDF4. To force a specific CDF backend, set the PYISTP_CDFLIB environment variable to pycdfpp or spacepy.
Usage
Load a file and inspect its data variables:
import pyistp
istp = pyistp.load(file="wi_k0_mfi_20220101_v01.cdf")
istp.data_variables() # -> ['BGSEc', 'BF1', 'PGSM', ...]
istp.attributes() # global attribute names
var = istp.data_variable("BGSEc")
var.values # numpy array of values (read lazily)
var.axes[0].values # the time axis (numpy.datetime64[ns])
var.attributes # variable attributes
var.labels # component labels, if any
Load directly from a buffer, for instance data fetched over HTTP:
import requests, pyistp
raw = requests.get(
"https://spdf.gsfc.nasa.gov/pub/data/themis/thc/l2/efi/2020/"
"thc_l2_efi_20200101_v01.cdf").content
istp = pyistp.load(buffer=raw)
var = istp.data_variable("thc_eff_dot0_gsm")
import matplotlib.pyplot as plt
plt.plot(var.axes[0].values, var.values)
Use a separate master/skeleton file for the metadata:
istp = pyistp.load(file="data.cdf", master_file="skeleton.cdf")
# or from buffers:
istp = pyistp.load(buffer=data_bytes, master_buffer=skeleton_bytes)
Credits
This package was created with Cookiecutter and the audreyr/cookiecutter-pypackage project template.
Release files for pyistp 0.9.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pyistp-0.9.1.tar.gz | 12.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pyistp-0.9.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 26.4 kB
Release files / pyistp-0.9.1.tar.gz
| Download URL | pyistp-0.9.1.tar.gz |
|---|---|
| Size | 12.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
90ef2e51a464fd3f52c8d653b30f13cc40e6dddf99926e4fd72d61f7fa88bbde
|
|
BLAKE2b-256 checksum How to use checksums |
7416fb7b98e995fb6ea29f72bb2e62befd3e40eda21be0369d62c46819df041a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.10.21
|
Release files / pyistp-0.9.1-py3-none-any.whl
| Download URL | pyistp-0.9.1-py3-none-any.whl |
|---|---|
| Size | 14.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
eadbaa10df630c4b2152d16ed429a0ff87962f937adbe0f33c9bb6ff35a4bf99
|
|
BLAKE2b-256 checksum How to use checksums |
0753ca22270b5a13eb27804f6fd6ad333f08f87ff823bb8f7a56f3f0cfc71898
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.10.21
|