1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
|
import os
import tempfile
import pytest
from ..fitslib import read_header, FITS
from ..fits_exceptions import FITSFormatError
def test_header_junk():
"""
test lenient treatment of garbage written by IDL mwrfits
"""
data = b"""SIMPLE = T /Primary Header created by MWRFITS v1.11 BITPIX = 16 / NAXIS = 0 / EXTEND = T /Extensions may be present BLAT = 1 /integer FOO = 1.00000 /float (or double?) BAR@ = NAN /float NaN BI.Z = NaN /double NaN BAT = INF /1.0 / 0.0 BOO = -INF /-1.0 / 0.0 QUAT = ' ' /blank string QUIP = '1.0 ' /number in quotes QUIZ = ' 1.0 ' /number in quotes with a leading space QUI\xf4\x04 = 'NaN ' /NaN in quotes HIERARCH QU.@D = 'Inf ' END """ # noqa
with tempfile.TemporaryDirectory() as tmpdir:
fname = os.path.join(tmpdir, 'test.fits')
with open(fname, 'wb') as fobj:
fobj.write(data)
h = read_header(fname)
# these keys are not hierarch but we can parse the name and then
# leave the value as a string, so we do that.
assert h['bar@'] == 'NAN', 'NAN garbage'
assert h['bi.z'] == 'NaN', 'NaN garbage'
assert h['bat'] == 'INF', 'INF garbage'
assert h['boo'] == '-INF', '-INF garbage'
assert h['quat'] == '', 'blank'
assert h['quip'] == '1.0', '1.0 in quotes'
assert h['quiz'] == ' 1.0', '1.0 in quotes'
# the key in the header is 'QUI' + two non-ascii chars and gets
# translated to `QUI__`
assert h['qui__'] == 'NaN', 'NaN in quotes'
# this key is `HIERARCH QU.@D` in the header and so gets read as is
assert h['qu.@d'] == 'Inf', 'Inf in quotes'
def test_Header_Junk_Non_Ascii():
data = b"SIMPLE = T / file does conform to FITS standard BITPIX = 16 / number of bits per data pixel NAXIS = 0 / number of data axes EXTEND = T / FITS dataset may contain extensions COMMENT FITS (Flexible Image Transport System) format is defined in 'AstronomyCOMMENT and Astrophysics', volume 376, page 359; bibcode: 2001A&A...376..359H @\x0f@\x0f \x02\x05\x18@\x02\x02\xc5@\x0c\x03\xf3@\x080\x02\x03\xbc@\x0f@@@@@@@@ END " # noqa
with tempfile.TemporaryDirectory() as tmpdir:
fname = os.path.join(tmpdir, 'test.fits')
with open(fname, 'wb') as fobj:
fobj.write(data)
h = read_header(fname)
assert h["@_@_"] is None
def test_missing_xtension_keyword():
"""
Misformatted header with extension not properly marked with
XTENSION
"""
data = b"""SIMPLE = T / This is a FITS file BITPIX = 8 / NAXIS = 0 / EXTEND = T / This file may contain FITS extensions NEXTEND = 7 / Number of extensions END SIMPLE = T / file does conform to FITS standard BITPIX = 32 / number of bits per data pixel NAXIS = 2 / number of data axes NAXIS1 = 30 / length of data axis 1 NAXIS2 = 30 / length of data axis 2 EXTEND = T / FITS dataset may contain extensions END """ # noqa
with tempfile.TemporaryDirectory() as tmpdir:
fname = os.path.join(tmpdir, 'test.fits')
with open(fname, 'wb') as fobj:
fobj.write(data)
with pytest.raises(FITSFormatError):
with FITS(fname) as fits:
print(fits)
|