Skip to main content

A full featured python library to read from and write to FITS files.

Project description

fitsio

build wheels/sdist tests

A Python library to read from and write to FITS files.

Description

This is a Python extension written in C and Python. Data are read into numerical Python arrays.

A version of cfitsio is bundled with this package, there is no need to install your own, nor will this conflict with a version you have installed.

Some Features

  • Read from and write to image, binary, and ASCII table extensions.
  • Read arbitrary subsets of table columns and rows without loading all the data to memory.
  • Read image subsets without reading the whole image.
  • Write subsets to existing images.
  • Write and read variable length table columns.
  • Read images and tables using slice notation similar to numpy arrays. (This is like a more powerful memmap, since it is column-aware for tables.)
  • Append rows to an existing table.
  • Delete row sets and row ranges, resize tables, or insert rows.
  • Query the columns and rows in a table.
  • Read and write header keywords.
  • Read and write images in tile-compressed format (RICE, GZIP, PLIO ,HCOMPRESS).
  • Read/write GZIP files directly.
  • Read unix compress (.Z, .zip) and bzip2 (.bz2) files.
  • TDIM information is used to return array columns in the correct shape.
  • Write and read string table columns, including array columns of arbitrary shape.
  • Read and write complex, bool (logical), unsigned integer, signed bytes types.
  • Write checksums into the header and verify them.
  • Insert new columns into tables in-place.
  • Iterate over rows in a table. Data are buffered for efficiency.
  • Python 3 support, including Python 3 strings.

Examples

import fitsio
from fitsio import FITS,FITSHDR

# Often you just want to quickly read or write data without bothering to
# create a FITS object.  In that case, you can use the read and write
# convienience functions.

# read all data from the first hdu that has data
filename='data.fits'
data = fitsio.read(filename)

# read a subset of rows and columns from a table
data = fitsio.read(filename, rows=[35,1001], columns=['x','y'], ext=2)

# read the header
h = fitsio.read_header(filename)
# read both data and header
data,h = fitsio.read(filename, header=True)

# open the file and write a new binary table extension with the data
# array, which is a numpy array with fields, or "recarray".

data = np.zeros(10, dtype=[('id','i8'),('ra','f8'),('dec','f8')])
fitsio.write(filename, data)

# Write an image to the same file. By default a new extension is
# added to the file.  use clobber=True to overwrite an existing file
# instead.  To append rows to an existing table, see below.

fitsio.write(filename, image)

#
# the FITS class gives the you the ability to explore the data, and gives
# more control
#

# open a FITS file for reading and explore
fits=fitsio.FITS('data.fits')

# see what is in here; the FITS object prints itself
print(fits)

file: data.fits
mode: READONLY
extnum hdutype         hduname
0      IMAGE_HDU
1      BINARY_TBL      mytable

# at the python or ipython prompt the fits object will
# print itself
>>> fits
file: data.fits
... etc

# explore the extensions, either by extension number or
# extension name if available
>>> fits[0]

file: data.fits
extension: 0
type: IMAGE_HDU
image info:
  data type: f8
  dims: [4096,2048]

# by name; can also use fits[1]
>>> fits['mytable']

file: data.fits
extension: 1
type: BINARY_TBL
extname: mytable
rows: 4328342
column info:
  i1scalar            u1
  f                   f4
  fvec                f4  array[2]
  darr                f8  array[3,2]
  dvarr               f8  varray[10]
  s                   S5
  svec                S6  array[3]
  svar                S0  vstring[8]
  sarr                S2  array[4,3]

# See bottom for how to get more information for an extension

# [-1] to refers the last HDU
>>> fits[-1]
...

# if there are multiple HDUs with the same name, and an EXTVER
# is set, you can use it.  Here extver=2
#    fits['mytable',2]


# read the image from extension zero
img = fits[0].read()
img = fits[0][:,:]

# read a subset of the image without reading the whole image
img = fits[0][25:35, 45:55]


# read all rows and columns from a binary table extension
data = fits[1].read()
data = fits['mytable'].read()
data = fits[1][:]

# read a subset of rows and columns. By default uses a case-insensitive
# match. The result retains the names with original case.  If columns is a
# sequence, a numpy array with fields, or recarray is returned
data = fits[1].read(rows=[1,5], columns=['index','x','y'])

# Similar but using slice notation
# row subsets
data = fits[1][10:20]
data = fits[1][10:20:2]
data = fits[1][[1,5,18]]

# Using EXTNAME and EXTVER values
data = fits['SCI',2][10:20]

# Slicing with reverse (flipped) striding
data = fits[1][40:25]
data = fits[1][40:25:-5]

# all rows of column 'x'
data = fits[1]['x'][:]

# Read a few columns at once. This is more efficient than separate read for
# each column
data = fits[1]['x','y'][:]

# General column and row subsets.
columns=['index','x','y']
rows = [1, 5]
data = fits[1][columns][rows]

# data are returned in the order requested by the user
# and duplicates are preserved
rows = [2, 2, 5]
data = fits[1][columns][rows]

# iterate over rows in a table hdu
# faster if we buffer some rows, let's buffer 1000 at a time
fits=fitsio.FITS(filename,iter_row_buffer=1000)
for row in fits[1]:
    print(row)

# iterate over HDUs in a FITS object
for hdu in fits:
    data=hdu.read()

# Note dvarr shows type varray[10] and svar shows type vstring[8]. These
# are variable length columns and the number specified is the maximum size.
# By default they are read into fixed-length fields in the output array.
# You can over-ride this by constructing the FITS object with the vstorage
# keyword or specifying vstorage when reading.  Sending vstorage='object'
# will store the data in variable size object fields to save memory; the
# default is vstorage='fixed'.  Object fields can also be written out to a
# new FITS file as variable length to save disk space.

fits = fitsio.FITS(filename,vstorage='object')
# OR
data = fits[1].read(vstorage='object')
print(data['dvarr'].dtype)
    dtype('object')


# you can grab a FITS HDU object to simplify notation
hdu1 = fits[1]
data = hdu1['x','y'][35:50]

# get rows that satisfy the input expression.  See "Row Filtering
# Specification" in the cfitsio manual (note no temporary table is
# created in this case, contrary to the cfitsio docs)
w=fits[1].where("x > 0.25 && y < 35.0")
data = fits[1][w]

# read the header
h = fits[0].read_header()
print(h['BITPIX'])
    -64

fits.close()


# now write some data
fits = FITS('test.fits','rw')


# create a rec array.  Note vstr
# is a variable length string
nrows=35
data = np.zeros(nrows, dtype=[('index','i4'),('vstr','O'),('x','f8'),
                              ('arr','f4',(3,4))])
data['index'] = np.arange(nrows,dtype='i4')
data['x'] = np.random.random(nrows)
data['vstr'] = [str(i) for i in xrange(nrows)]
data['arr'] = np.arange(nrows*3*4,dtype='f4').reshape(nrows,3,4)

# create a new table extension and write the data
fits.write(data)

# can also be a list of ordinary arrays if you send the names
array_list=[xarray,yarray,namearray]
names=['x','y','name']
fits.write(array_list, names=names)

# similarly a dict of arrays
fits.write(dict_of_arrays)
fits.write(dict_of_arrays, names=names) # control name order

# append more rows to the table.  The fields in data2 should match columns
# in the table.  missing columns will be filled with zeros
fits[-1].append(data2)

# insert a new column into a table
fits[-1].insert_column('newcol', data)

# insert with a specific colnum
fits[-1].insert_column('newcol', data, colnum=2)

# overwrite rows
fits[-1].write(data)

# overwrite starting at a particular row. The table will grow if needed
fits[-1].write(data, firstrow=350)


# create an image
img=np.arange(2*3,dtype='i4').reshape(2,3)

# write an image in a new HDU (if this is a new file, the primary HDU)
fits.write(img)

# write an image with rice compression
fits.write(img, compress='rice')

# control the compression
fimg=np.random.normal(size=2*3).reshape(2, 3)
fits.write(img, compress='rice', qlevel=16, qmethod='SUBTRACTIVE_DITHER_2')

# lossless gzip compression for integers or floating point
fits.write(img, compress='gzip', qlevel=None)
fits.write(fimg, compress='gzip', qlevel=None)

# overwrite the image
fits[ext].write(img2)

# write into an existing image, starting at the location [300,400]
# the image will be expanded if needed
fits[ext].write(img3, start=[300,400])

# change the shape of the image on disk
fits[ext].reshape([250,100])

# add checksums for the data
fits[-1].write_checksum()

# can later verify data integridy
fits[-1].verify_checksum()

# you can also write a header at the same time.  The header can be
#   - a simple dict (no comments)
#   - a list of dicts with 'name','value','comment' fields
#   - a FITSHDR object

hdict = {'somekey': 35, 'location': 'kitt peak'}
fits.write(data, header=hdict)
hlist = [{'name':'observer', 'value':'ES', 'comment':'who'},
         {'name':'location','value':'CTIO'},
         {'name':'photometric','value':True}]
fits.write(data, header=hlist)
hdr=FITSHDR(hlist)
fits.write(data, header=hdr)

# you can add individual keys to an existing HDU
fits[1].write_key(name, value, comment="my comment")

# Write multiple header keys to an existing HDU. Here records
# is the same as sent with header= above
fits[1].write_keys(records)

# write special COMMENT fields
fits[1].write_comment("observer JS")
fits[1].write_comment("we had good weather")

# write special history fields
fits[1].write_history("processed with software X")
fits[1].write_history("re-processed with software Y")

fits.close()

# using a context, the file is closed automatically after leaving the block
with FITS('path/to/file') as fits:
    data = fits[ext].read()

    # you can check if a header exists using "in":
    if 'blah' in fits:
        data=fits['blah'].read()
    if 2 in f:
        data=fits[2].read()

# methods to get more information about extension.  For extension 1:
f[1].get_info()             # lots of info about the extension
f[1].has_data()             # returns True if data is present in extension
f[1].get_extname()
f[1].get_extver()
f[1].get_extnum()           # return zero-offset extension number
f[1].get_exttype()          # 'BINARY_TBL' or 'ASCII_TBL' or 'IMAGE_HDU'
f[1].get_offsets()          # byte offsets (header_start, data_start, data_end)
f[1].is_compressed()        # for images. True if tile-compressed
f[1].get_colnames()         # for tables
f[1].get_colname(colnum)    # for tables find the name from column number
f[1].get_nrows()            # for tables
f[1].get_rec_dtype()        # for tables
f[1].get_rec_column_descr() # for tables
f[1].get_vstorage()         # for tables, storage mechanism for variable
                            # length columns

# public attributes you can feel free to change as needed
f[1].lower           # If True, lower case colnames on output
f[1].upper           # If True, upper case colnames on output
f[1].case_sensitive  # if True, names are matched case sensitive

Installation

The easiest way is using pip or conda. To get the latest release

pip install fitsio

# update fitsio (and everything else)
pip install fitsio --upgrade

# if pip refuses to update to a newer version
pip install fitsio --upgrade --ignore-installed

# if you only want to upgrade fitsio
pip install fitsio --no-deps --upgrade --ignore-installed

# for conda, use conda-forge
conda install -c conda-forge fitsio

You can also get the latest source tarball release from

https://pypi.python.org/pypi/fitsio

or the bleeding edge source from GitHub or use git. To check out the code for the first time

git clone https://github.com/esheldon/fitsio.git

Or at a later time to update to the latest

cd fitsio
git update

To install, run

pip install .

Requirements

  • python >=3.10
  • a C compiler and build tools (make, patch, etc. for linux/osx; cmake, nmake, patch, etc. for windows)
  • numpy (See the note below. Generally, numpy 1.11 or later is better.)

Do not use numpy 1.10.0 or 1.10.1

There is a serious performance regression in numpy 1.10 that results in fitsio running tens to hundreds of times slower. A fix may be forthcoming in a later release. Please comment on GitHub issue numpy/issues/6467 here if this has already impacted your work

Tests

The unit tests should all pass for full support.

pytest fitsio

Some tests may fail if certain libraries are not available, such as bzip2. This failure only implies that bzipped files cannot be read, without affecting other functionality.

Linting and Code Formatting

We use the pre-commit framework for linting and code formatting. To run the linting and code formatting, use the following command

pre-commit run -a

Notes on Usage and Features

cfitsio bundling

We bundle cfitsio partly because many deployed versions of cfitsio in the wild do not have support for interesting features like tiled image compression. Bundling a version that meets our needs is a safe alternative.

Array Ordering

Since numpy uses C order, FITS uses fortran order, we have to write the TDIM and image dimensions in reverse order, but write the data as is. Then we need to also reverse the dims as read from the header when creating the numpy dtype, but read as is.

distutils vs setuptools

As of version 1.0.0, fitsio has been transitioned to setuptools for packaging and installation. There are many reasons to do this (and to not do this). However, at a practical level, what this means for you is that you may have trouble uninstalling older versions with pip via pip uninstall fitsio. If you do, the best thing to do is to manually remove the files manually. See this stackoverflow question for example.

Python 3 Strings

As of version 1.0.0, fitsio now supports Python 3 strings natively. This support means that for Python 3, native strings are read from and written correctly to FITS files. All byte string columns are treated as ASCII-encoded unicode strings as well. For FITS files written with a previous version of fitsio, the data in Python 3 will now come back as a string and not a byte string. Note that this support is not the same as full unicode support. Internally, fitsio only supports the ASCII character set.

Thread Safety and Python Free Threading

fitsio is a Python wrapper for the cfitsio library and so inherits the constraints on multithreaded programs from cfitsio. Specifically this means that

  • Concurrent reading from FITS files is thread-safe, but every thread must open the FITS file on its own, getting a unique fitsio.FITS object.
  • Concurrent writing to FITS files is NOT thread-safe.
  • fitsio.FITS file objects can be shared between threads for reading, but only one thread can use the file object at a time. You will need to employ a lock from the threading module in order to prevent race conditions. See the example below.

fitsio is compatible with Python free threading, and will not reenable the GIL when imported. However, the constraints above must be respected even when using Python free threading.

Here is an example of using a lock to share a fitsio.FITS file pointer across threads:

import concurrent.futures
import threading
import fitsio


lock = threading.RLock()

def _read_file(fp):
    with lock:
        # do something with fp here
        pass

with fitsio.FITS(fname) as fp:
    with ThreadPoolExecutor(max_workers=10) as exc:
        futs = [
            exc.submit(_read_file, fp) for _ in range(10)
        ]
        for fut in futs:
            res = fut.result()

Free-threading Macros and Locks in the C Wrapper

On Python 3.13 and above, we release the GIL (for GIL-enabled Python builds) or detach the thread state (for free-threading Python builds). Some background information is helpful in understanding how this works.

  • In the Python C API, the GIL and the thread state (i.e., attached or detached) are two separate concepts. A thread that is attached to the Python C runtime can make calls into it, use data from it, etc. In GIL-enabled builds of Python, only one thread can be attached at a time, and the GIL is the lock that enforces this constraint. In free-threading builds of Python, the interpreter must sometimes "stop the world" in order to do key tasks (e.g., garbage collection). Thus threads still must either attach to the runtime or not (but there is no constraint on how many threads can be attached, and thus no GIL). For performance reasons, if a thread is doing I/O or some other long-running computation where it does not need the Python runtime, it is good to detach it so that any "stop the world" tasks are not blocked.
  • The Python C API uses the same functions for these handling both the GIL and the thread state (wrapped in the*_NOGIL macros in the C code.)
  • The cfitsio library can be compiled in such a way that it is "reentrant." Versions of the library that are reentrant allow library functions to be called concurrently by different threads, but only on different FITS file handles. Even in reentrant builds of the cfitsio library, it is not safe to call library functions concurrently on the same FITS file handle. The typical way to manage access to reentrant libraries is via a lock on the data structure returned by the library (i.e., the FITS file handle).
  • When dealing with both the GIL and a lock for reentrant libraries, it is very easy to create deadlocks (i.e., two threads that are each waiting on one another). To help with this, on Python 3.13 or newer, the Python C API provides a lock that is hooked into the Python runtime in such a way that it will not deadlock with the GIL.

The Python Free-Threading Guide is a very useful resource for learning more about the concepts above.

To enforce the threading constraints, we use the following macros in the C layer:

  • LOCK_FITS(x) & UNLOCK_FITS(x): These macros take a pointer to the PyFITSObject object, and for non-reentrant builds, use a global lock to avoid concurrent calls to non-reentrant builds of the cfitsio library. This lock is not reentrant (i.e., every LOCK_FITS call must be paired with an UNLOCK_FITS call). The implementation of this lock uses the one from the Python C API so it will not deadlock with the GIL-related macros below.
  • ALLOW_NOGIL: This macro defines variables needed for handling the GIL/thread state, and it must be used in any C function where the other GIL-related macros below are used.
  • RELEASE_GIL & CAPTURE_GIL: These macros are used to actually release/capture the GIL and/or attach/detach the thread state. Like the locks, these macros are not reentrant and so every RELEASE_GIL call must be paired with a CAPTURE_GIL call.
  • NOGIL(x): This macro wraps a single function call with the release and capture operations, returning the value of the function call. It can be used to make code more concise. You cannot use this macro in between calls to RELEASE_GIL and CAPTURE_GIL.

All of these macros (except NOGIL) must be followed by a semicolon when used in C code (e.g., ALLOW_NOGIL;). You must also take care to properly unlock the global lock and/or release the GIL for all possible execution paths through your function (including branches for error handling). C goto statements can be very helpful for this task.

In the C wrapper of cfitsio on Python 3.13 and above, we always employ a global lock for non-reentrant builds of cfitsio, and we do our best to release the GIL during I/O and/or long-running operations.

TODO

  • HDU groups: does anyone use these? If so open an issue!

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

fitsio-1.4.2.tar.gz (4.2 MB view details)

Uploaded Source

Built Distributions

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

fitsio-1.4.2-cp314-cp314t-win_amd64.whl (719.7 kB view details)

Uploaded CPython 3.14tWindows x86-64

fitsio-1.4.2-cp314-cp314t-musllinux_1_2_x86_64.whl (818.4 kB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

fitsio-1.4.2-cp314-cp314t-manylinux_2_28_x86_64.whl (940.0 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.28+ x86-64

fitsio-1.4.2-cp314-cp314t-macosx_14_0_arm64.whl (753.1 kB view details)

Uploaded CPython 3.14tmacOS 14.0+ ARM64

fitsio-1.4.2-cp314-cp314t-macosx_13_0_x86_64.whl (752.8 kB view details)

Uploaded CPython 3.14tmacOS 13.0+ x86-64

fitsio-1.4.2-cp314-cp314-win_amd64.whl (720.3 kB view details)

Uploaded CPython 3.14Windows x86-64

fitsio-1.4.2-cp314-cp314-musllinux_1_2_x86_64.whl (818.0 kB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ x86-64

fitsio-1.4.2-cp314-cp314-manylinux_2_28_x86_64.whl (920.7 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ x86-64

fitsio-1.4.2-cp314-cp314-macosx_14_0_arm64.whl (752.5 kB view details)

Uploaded CPython 3.14macOS 14.0+ ARM64

fitsio-1.4.2-cp314-cp314-macosx_13_0_x86_64.whl (752.4 kB view details)

Uploaded CPython 3.14macOS 13.0+ x86-64

fitsio-1.4.2-cp313-cp313-win_amd64.whl (704.1 kB view details)

Uploaded CPython 3.13Windows x86-64

fitsio-1.4.2-cp313-cp313-musllinux_1_2_x86_64.whl (818.0 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

fitsio-1.4.2-cp313-cp313-manylinux_2_28_x86_64.whl (920.7 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

fitsio-1.4.2-cp313-cp313-macosx_14_0_arm64.whl (752.4 kB view details)

Uploaded CPython 3.13macOS 14.0+ ARM64

fitsio-1.4.2-cp313-cp313-macosx_13_0_x86_64.whl (752.4 kB view details)

Uploaded CPython 3.13macOS 13.0+ x86-64

fitsio-1.4.2-cp312-cp312-win_amd64.whl (699.6 kB view details)

Uploaded CPython 3.12Windows x86-64

fitsio-1.4.2-cp312-cp312-musllinux_1_2_x86_64.whl (812.1 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

fitsio-1.4.2-cp312-cp312-manylinux_2_28_x86_64.whl (895.7 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

fitsio-1.4.2-cp312-cp312-macosx_14_0_arm64.whl (748.4 kB view details)

Uploaded CPython 3.12macOS 14.0+ ARM64

fitsio-1.4.2-cp312-cp312-macosx_13_0_x86_64.whl (747.8 kB view details)

Uploaded CPython 3.12macOS 13.0+ x86-64

fitsio-1.4.2-cp311-cp311-win_amd64.whl (699.3 kB view details)

Uploaded CPython 3.11Windows x86-64

fitsio-1.4.2-cp311-cp311-musllinux_1_2_x86_64.whl (812.1 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

fitsio-1.4.2-cp311-cp311-manylinux_2_28_x86_64.whl (898.4 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

fitsio-1.4.2-cp311-cp311-macosx_14_0_arm64.whl (748.3 kB view details)

Uploaded CPython 3.11macOS 14.0+ ARM64

fitsio-1.4.2-cp311-cp311-macosx_13_0_x86_64.whl (747.6 kB view details)

Uploaded CPython 3.11macOS 13.0+ x86-64

fitsio-1.4.2-cp310-cp310-win_amd64.whl (699.3 kB view details)

Uploaded CPython 3.10Windows x86-64

fitsio-1.4.2-cp310-cp310-musllinux_1_2_x86_64.whl (812.0 kB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

fitsio-1.4.2-cp310-cp310-manylinux_2_28_x86_64.whl (897.7 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64

fitsio-1.4.2-cp310-cp310-macosx_14_0_arm64.whl (748.3 kB view details)

Uploaded CPython 3.10macOS 14.0+ ARM64

fitsio-1.4.2-cp310-cp310-macosx_13_0_x86_64.whl (747.6 kB view details)

Uploaded CPython 3.10macOS 13.0+ x86-64

File details

Details for the file fitsio-1.4.2.tar.gz.

File metadata

  • Download URL: fitsio-1.4.2.tar.gz
  • Upload date:
  • Size: 4.2 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for fitsio-1.4.2.tar.gz
Algorithm Hash digest
SHA256 92a02f0e63d539d85ca5a185ae0cc8d40029270858275964ee2539ee0136f0c3
MD5 4a282f56b8afef89d228583481357211
BLAKE2b-256 3bfd53bfe8986f7b242fb5b66ddc9344fe67614102f44438415b0a8b32cf7f0a

See more details on using hashes here.

File details

Details for the file fitsio-1.4.2-cp314-cp314t-win_amd64.whl.

File metadata

  • Download URL: fitsio-1.4.2-cp314-cp314t-win_amd64.whl
  • Upload date:
  • Size: 719.7 kB
  • Tags: CPython 3.14t, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for fitsio-1.4.2-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 b4b665264d1ffb500bb0058d4d7fa1a5da3fe82a1d291a1f600253711bccacd2
MD5 9438cafcee51abee89399a70b5a72af4
BLAKE2b-256 41ba31435265ec550af89e89cebad4335e55216fb8f8487d0da37a481cab02b0

See more details on using hashes here.

File details

Details for the file fitsio-1.4.2-cp314-cp314t-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for fitsio-1.4.2-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 b878ec0ad199bc857339fbd58cd76701a636ade3f0947f752846996e3e381236
MD5 2f4a1c77346a900252c512e840246f95
BLAKE2b-256 171004fdb12633307e700127d13e3ff7cf02101367aa315801e327d690b4cf07

See more details on using hashes here.

File details

Details for the file fitsio-1.4.2-cp314-cp314t-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for fitsio-1.4.2-cp314-cp314t-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2d60911c885b848c9837e5e2417ef5efe5ce02e79371ac6461c5ac120cacce6c
MD5 8e3afd9d818be802918b17bfb3431623
BLAKE2b-256 9bf112ca8f1a91a2c5ff06b88b65c936bcaf2427abcd2045d86b6dc50858344e

See more details on using hashes here.

File details

Details for the file fitsio-1.4.2-cp314-cp314t-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for fitsio-1.4.2-cp314-cp314t-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 a4302ae1be2180960c1db26e6d5e88e52af6c7bea36f612ba1c007f6e1da720b
MD5 70ddaf4592fcab6c8530502145a1f187
BLAKE2b-256 158cddd3edb2021137a4143ba801267a5460f283822b06c2a07b29813dbf3c40

See more details on using hashes here.

File details

Details for the file fitsio-1.4.2-cp314-cp314t-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for fitsio-1.4.2-cp314-cp314t-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 54d580b9c7248fb681582d73535c3a91ba4962634edc6abad048f5962bc967f8
MD5 af14cba6835b34edd9c8edab43ff4149
BLAKE2b-256 f1fb9215bcfb9b0c5ddf547981f0281f213c7eb465e0999ae481ccdf7cc27376

See more details on using hashes here.

File details

Details for the file fitsio-1.4.2-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: fitsio-1.4.2-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 720.3 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for fitsio-1.4.2-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 447b27fb1e71eeee3fcbc6c967d280776e8567ce875a49b62c9033040c7004ec
MD5 2fcca17938be0c7d3c879df8aae0e64b
BLAKE2b-256 8a7760733c83117340379d7ecaf99981728462e2168464d895f1b3d36d47d674

See more details on using hashes here.

File details

Details for the file fitsio-1.4.2-cp314-cp314-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for fitsio-1.4.2-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 90c9a71f023199d48ab0578f0ecb89a3e96acbc5e898acb8f9cc73e09251b17b
MD5 f5f190807d90870c6e625e9dd751a124
BLAKE2b-256 c7280943bcabd64b7bc9c69e7b09e2ea5861136ca9477c5fd9d399c3dbeaf450

See more details on using hashes here.

File details

Details for the file fitsio-1.4.2-cp314-cp314-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for fitsio-1.4.2-cp314-cp314-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7a4ce82fe174b129a4f90080de7cb3bbb7524f1c52268410facbd48086fa4d50
MD5 60635b3e08f6d34b860c9b97aa7f169e
BLAKE2b-256 31ae2d48a7e9e093101a2b070592ce87ab6beea0a0778be411e529b2fa3d9967

See more details on using hashes here.

File details

Details for the file fitsio-1.4.2-cp314-cp314-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for fitsio-1.4.2-cp314-cp314-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 8ad8d4a846c51887ff3394856b94dff02b44af0c244b8af3345d064b52cf874d
MD5 ccb1cbca1f706eea5fdcd313564d86e0
BLAKE2b-256 865e94b33cc192b3f46673876fa463cad19f59902a4bc071935ab52d4d78dabf

See more details on using hashes here.

File details

Details for the file fitsio-1.4.2-cp314-cp314-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for fitsio-1.4.2-cp314-cp314-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 b9a0cb316bcac741fc403f757d1e00ca876277b491894be4563d55341cdb8991
MD5 166392cd544e51a452db66a729f58f92
BLAKE2b-256 163d7a6f9f0acacf2fa85eecb1d57433af78f5a207d20e0bfa992bd5e6180238

See more details on using hashes here.

File details

Details for the file fitsio-1.4.2-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: fitsio-1.4.2-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 704.1 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for fitsio-1.4.2-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 f24192d972be9d9889b3debd4e72ba8cf473bdc39b742a55bfdf7c669a4e8393
MD5 c1ad2e449ce8e81701baa94197bf999c
BLAKE2b-256 75bf421e406d7012749a8d1f55251f25655f1cff7556179eede65b2e8d3bff45

See more details on using hashes here.

File details

Details for the file fitsio-1.4.2-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for fitsio-1.4.2-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 0e1652ff0c9fab23f22dc3309edd6755755d2aaaa79e3e492db70b947cc1d4c8
MD5 edef5c5fde295b32d3015dd69067d969
BLAKE2b-256 fc2daf26509323791b9fce7ded6e2f45640afb12c0d3ff766f03a96d2524d2c5

See more details on using hashes here.

File details

Details for the file fitsio-1.4.2-cp313-cp313-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for fitsio-1.4.2-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 91fe0904d9f6a77a3c12f1943e28994c7d8c60a10b98506fbeb16fe9c2422106
MD5 236f58b36f9fb1a11146335d14029a78
BLAKE2b-256 7713c85557035c01150e6b882bcf1b2131a78d767def1906527b2989b3b5d819

See more details on using hashes here.

File details

Details for the file fitsio-1.4.2-cp313-cp313-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for fitsio-1.4.2-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 e1385cb175b09fe0190fa0a9057a1cae15e4a6a316de32a30982cba9b07e3a98
MD5 9a13669401752acef673ec768b8437d8
BLAKE2b-256 3e2b7df3232dbcb78ade5ea3cd80af4da09e78db9dc55fbf34b6d3eb07e5ba32

See more details on using hashes here.

File details

Details for the file fitsio-1.4.2-cp313-cp313-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for fitsio-1.4.2-cp313-cp313-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 43177e44f741178c37c17a2fd2f422f2fb4d4e95ee12447e725d8f5dc8b45b7a
MD5 f5baad79f306b17441575f4993221fb6
BLAKE2b-256 0cc02cc526fcdc14b7d44bd64af8762cdff7db724534efeb9ae165cc0a5462bd

See more details on using hashes here.

File details

Details for the file fitsio-1.4.2-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: fitsio-1.4.2-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 699.6 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for fitsio-1.4.2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 9db81b13ffcf117ca14c09682ec039fb55f898fee408d8a9a8743aaa1bc18092
MD5 bea88274825a997aa67f24f3ff3f1bb0
BLAKE2b-256 9da0c3e617bea23769d002f7650c96cba1020131f0bc65a67c6542753de14244

See more details on using hashes here.

File details

Details for the file fitsio-1.4.2-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for fitsio-1.4.2-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 762e41fac17e546685d4fee4738ec3853e3c40bd15b3444902256e303ef4302a
MD5 a0d65184a2999aa9428e9c154acfaf2e
BLAKE2b-256 df0c00a098bd0fccf95f9d068e00691ba2a67e73505870b40694680453e94ca8

See more details on using hashes here.

File details

Details for the file fitsio-1.4.2-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for fitsio-1.4.2-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 430932e6f684fb5e669c1b6e4d4164c52a055eb04af1a18dfa086f343491f9a2
MD5 1ee9c939e72f63a0831d9a80e5be1c8a
BLAKE2b-256 f3187b1bd9e3242e8c83644b4edad345a2faa01f215b4b65cd5fec88519154fc

See more details on using hashes here.

File details

Details for the file fitsio-1.4.2-cp312-cp312-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for fitsio-1.4.2-cp312-cp312-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 90fa61295df6d33feea53ee0bbbe5917b6acb086a3c731239bb2910ec933420c
MD5 9770e26e4b767959d44fd173e0eeba9e
BLAKE2b-256 ffa3a97d94de3b3f8c19007cea81508114de18906f27478beaed8754fab5c547

See more details on using hashes here.

File details

Details for the file fitsio-1.4.2-cp312-cp312-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for fitsio-1.4.2-cp312-cp312-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 9246b0f973ec09fb6d9b5b83893acbba27cfad3abe60a7587992dc59412960da
MD5 24bac47518816e101f6295b66a0415d4
BLAKE2b-256 690378203d1af4346a9af17196ccdab22f3a0e6550560db18ca4deaa2ed0ad40

See more details on using hashes here.

File details

Details for the file fitsio-1.4.2-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: fitsio-1.4.2-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 699.3 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for fitsio-1.4.2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 33ab244342e09e48e1579413bdd17bf93aadfbebb92c9a641d553daa7f69a81b
MD5 6e4c6382186112137db56d30c9b019ef
BLAKE2b-256 eb65a1d3ad3b964b0b04dc8463b7801bdfa568858ed4fd353e74a88701bf9a92

See more details on using hashes here.

File details

Details for the file fitsio-1.4.2-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for fitsio-1.4.2-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 462a3e7ab88ca28a1ae7d431e2c3f4f520e6a9d3d5c221e5991f293107034aca
MD5 3c11b60923813b8b3f2beca4e0f0a117
BLAKE2b-256 a3049a3f492e2a2f99fa09e2b0fe1d758e7f84307573dcd82e1003628f50c6fb

See more details on using hashes here.

File details

Details for the file fitsio-1.4.2-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for fitsio-1.4.2-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 70a027fc6d1777eb828b92278e8b7c22d0bdf170bd9a351f209443433fbdbe14
MD5 25724899de5c7aa5d132f662e0e4f8e5
BLAKE2b-256 494bfa13d13ff8a0394f8ec159b41168be015181be5a1ba03de502d55d007752

See more details on using hashes here.

File details

Details for the file fitsio-1.4.2-cp311-cp311-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for fitsio-1.4.2-cp311-cp311-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 988c16688749897797a02fdb1735a02fc084ec3070b7bd26db9264fd92bcb2a0
MD5 4065fc0219c87054585868842f0b8a83
BLAKE2b-256 d29d2b15b98a922d8fa3b321b94d992a0df336afcf2776660b6ae0a35247c620

See more details on using hashes here.

File details

Details for the file fitsio-1.4.2-cp311-cp311-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for fitsio-1.4.2-cp311-cp311-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 7ebe00a0ad974ac2c5af376536137c2d02b99de5222c0f6d9b1f7703dda0ac7b
MD5 6277032b76e63bf004402653e88dea1c
BLAKE2b-256 9a66accd264ee809c80a3a28bdb8dcd2cd031d41b6faa98c28151e3da3cf8c4e

See more details on using hashes here.

File details

Details for the file fitsio-1.4.2-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: fitsio-1.4.2-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 699.3 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for fitsio-1.4.2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 6ec670d438c4da9ba28abb688eefc988343bd7ac5f922805d2dff2180f49d7ca
MD5 ea0ffc6fc31717362d970ae50a8828da
BLAKE2b-256 ba5cc3ab002a3148a449d92cbf0452a7196e7a8cc68beba2f5f25932d5bedb1f

See more details on using hashes here.

File details

Details for the file fitsio-1.4.2-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for fitsio-1.4.2-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 009299e7bbd1b2c4b0a9a0d110ac686231b7cdc49bc252494f085c20696ba4a3
MD5 15267bdb2a5c24d34a8254e0a0668982
BLAKE2b-256 dc7272716e53b87ea118929f25aa143be93635ed699ea084e21e3724b401376d

See more details on using hashes here.

File details

Details for the file fitsio-1.4.2-cp310-cp310-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for fitsio-1.4.2-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 56bce6ff0d453141c0d5dc831b7af551c5b92a3c538f7a96ce3221e72bf7ee6a
MD5 a0248b1bdf4c6938794509beba549783
BLAKE2b-256 04dc63b8e6bec7407c2946b1d47da5cb6cf37faf14afe5fc01ce84807441af04

See more details on using hashes here.

File details

Details for the file fitsio-1.4.2-cp310-cp310-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for fitsio-1.4.2-cp310-cp310-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 6ffe6943cfd69c6ab17636489bfec5f8d52b6d542f3c019df1663f150824e3c3
MD5 a5cc5a5a0660f9d565b2caef76e9b63a
BLAKE2b-256 061092cac78fe6b02dbbe5bb317ffce65840e4816d39f91b0add963109c7f2c7

See more details on using hashes here.

File details

Details for the file fitsio-1.4.2-cp310-cp310-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for fitsio-1.4.2-cp310-cp310-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 c36bbf775b5048c02e2bf07ead37dc2c188b6ec4faed693b81e352cc20e72084
MD5 dd27334cbbe31f790f3aff7bd3199831
BLAKE2b-256 ee345b154a4d5d1c1094ac1af7ca921f7b00eb56e111ef52f8f2d08f601634b0

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