7 __all__ = [
"checksum", ]
 
   10 exposureTypes = (afwImage.ExposureF, afwImage.ExposureD,)
 
   11 maskedImageTypes = (afwImage.MaskedImageF, afwImage.MaskedImageD,)
 
   12 decoratedImageTypes = (afwImage.DecoratedImageF, afwImage.DecoratedImageD,)
 
   13 imageTypes = (afwImage.ImageF, afwImage.ImageD, afwImage.ImageI,)
 
   19     "CRC32": 
lambda obj: zlib.crc32(pickle.dumps(obj, PROTOCOL)),
 
   20     "MD5": 
lambda obj: hashlib.md5(pickle.dumps(obj, PROTOCOL)).hexdigest(),
 
   25     """!Calculate a checksum of an object 
   27     We have special handling for images (e.g., breaking a MaskedImage into 
   28     its various components), but the object may be any picklable type. 
   30     @param obj  Object for which to calculate the checksum 
   31     @param header  FITS header (PropertyList) to update with checksum values, or None 
   32     @param sumType  Type of checksum to calculate 
   33     @return dict with header keyword,value pairs 
   35     assert sumType 
in sumFunctions, 
"Unknown sumType: %s" % (sumType,)
 
   36     func = sumFunctions[sumType]
 
   40     if isinstance(obj, exposureTypes):
 
   41         obj = obj.getMaskedImage()
 
   42     if isinstance(obj, decoratedImageTypes):
 
   45     if isinstance(obj, maskedImageTypes):
 
   46         results[sumType + 
"_IMAGE"] = func(obj.getImage())
 
   47         results[sumType + 
"_MASK"] = func(obj.getMask())
 
   48         results[sumType + 
"_VARIANCE"] = func(obj.getVariance())
 
   49     elif isinstance(obj, imageTypes):
 
   50         results[sumType + 
"_IMAGE"] = func(obj)
 
   52         results[sumType] = func(obj)
 
   54     if header 
is not None:
 
   55         for k, v 
in results.items():