code: def data_shape(self):
          
          if not self.header:
              return -1
          try:
              nx = self.header['nx']['value']
              ny = self.header['ny']['value']
              nz = self.header['nz']['value']
          except KeyError:
              return -1
          else:
              return tuple(int(n) for n in (nx, ny, nz))
docs: Shape tuple of the whole data block as determined from `header`.
  
          If no header is available (i.e., before it has been initialized),
          or any of the header entries ``'nx', 'ny', 'nz'`` is missing,
          -1 is returned, which makes reshaping a no-op.
          Otherwise, the returned shape is ``(nx, ny, nz)``.
  
          Note: this is the shape of the data as defined by the header.
          For a non-trivial axis ordering, the shape of actual data will
          be different.
  
          See Also
          --------
          data_storage_shape
          data_axis_order