'Returns the base array of self that "raw data array" that is the
array in the format that it was first read from a file before it was
sliced or viewed as a different type in any way.
This is determined by walking through the bases until finding one that
has at least the same number of bytes as self, plus the heapsize.  This
may be the immediate .base but is not always.  This is used primarily
for variable-length array support which needs to be able to find the
heap (the raw data *may* be larger than nbytes + heapsize if it
contains a gap or padding).
May return ``None`` if no array resembling the "raw data" according to
the stated criteria can be found.'

def _get_raw_data(self):

    raw_data_bytes = (self.nbytes + self._heapsize)
    base = self
    while (hasattr(base, 'base') and (base.base is not None)):
        base = base.base
        if (hasattr(base, 'nbytes') and (base.nbytes >= raw_data_bytes)):
            return base
