'Construct a primary HDU.
Parameters
data : array or DELAYED, optional
The data in the HDU.
header : Header instance, optional
The header to be used (as a template).  If ``header`` is `None`, a
minimal header will be provided.
do_not_scale_image_data : bool, optional
If `True`, image data is not scaled using BSCALE/BZERO values
when read. (default: False)
ignore_blank : bool, optional
If `True`, the BLANK header keyword will be ignored if present.
Otherwise, pixels equal to this value will be replaced with
NaNs. (default: False)
uint : bool, optional
Interpret signed integer data where ``BZERO`` is the
central value and ``BSCALE == 1`` as unsigned integer
data.  For example, ``int16`` data with ``BZERO = 32768``
and ``BSCALE = 1`` would be treated as ``uint16`` data.
(default: True)
scale_back : bool, optional
If `True`, when saving changes to a file that contained scaled
image data, restore the data to the original type and reapply the
original BSCALE/BZERO values.  This could lead to loss of accuracy
if scaling back to integer values after performing floating point
operations on the data.  Pseudo-unsigned integers are automatically
rescaled unless scale_back is explicitly set to `False`.
(default: None)'

def __init__(self, data=None, header=None, do_not_scale_image_data=False, ignore_blank=False, uint=True, scale_back=None):

    super(PrimaryHDU, self).__init__(data=data, header=header, do_not_scale_image_data=do_not_scale_image_data, uint=uint, ignore_blank=ignore_blank, scale_back=scale_back)
    if (header is None):
        dim = self._header['NAXIS']
        if (dim == 0):
            dim = ''
        self._header.set('EXTEND', True, after=('NAXIS' + str(dim)))
