Coverage for python/lsst/afw/fits/pickleFits.py : 22%

Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1from lsst.afw.fits.fitsLib import MemFileManager, ImageWriteOptions, ImageCompressionOptions
3import lsst.afw.table
4import lsst.afw.image
7def reduceToFits(obj):
8 """Pickle to FITS
10 Intended to be used by the ``__reduce__`` method of a class.
12 Parameters
13 ----------
14 obj
15 any object with a ``writeFits`` method taking a
16 `~lsst.afw.fits.MemFileManager` and possibly an
17 `~lsst.afw.fits.ImageWriteOptions`.
19 Returns
20 -------
21 reduced : `tuple` [callable, `tuple`]
22 a tuple in the format returned by `~object.__reduce__`
23 """
24 manager = MemFileManager()
25 options = ImageWriteOptions(ImageCompressionOptions(ImageCompressionOptions.NONE))
26 table = getattr(obj, 'table', None)
27 if isinstance(table, lsst.afw.table.BaseTable):
28 # table objects don't take `options`
29 obj.writeFits(manager)
30 else:
31 # MaskedImage and Exposure both require options for each plane (image, mask, variance)
32 if isinstance(obj, (lsst.afw.image.MaskedImage, lsst.afw.image.Exposure)):
33 obj.writeFits(manager, options, options, options)
34 else:
35 obj.writeFits(manager, options)
36 size = manager.getLength()
37 data = manager.getData()
38 return (unreduceFromFits, (obj.__class__, data, size))
41def unreduceFromFits(cls, data, size):
42 """Unpickle from FITS
44 Unpack data produced by `reduceToFits`. This method is used by the
45 pickling framework and should not need to be called from user code.
47 Parameters
48 ----------
49 cls : `type`
50 the class of object to unpickle. Must have a class-level ``readFits``
51 method taking a `~lsst.afw.fits.MemFileManager`.
52 data : `bytes`
53 an in-memory representation of the object, compatible with
54 `~lsst.afw.fits.MemFileManager`
55 size : `int`
56 the length of `data`
58 Returns
59 -------
60 unpickled : ``cls``
61 the object represented by ``data``
62 """
63 manager = MemFileManager(size)
64 manager.setData(data, size)
65 return cls.readFits(manager)