code: def cube(f):
      
  
      if not isinstance(f, segyio.SegyFile):
          with segyio.open(f) as fl:
              return cube(fl)
  
      ilsort = f.sorting == segyio.TraceSortingFormat.INLINE_SORTING
      fast = f.ilines if ilsort else f.xlines
      slow = f.xlines if ilsort else f.ilines
      fast, slow, offs = len(fast), len(slow), len(f.offsets)
      smps = len(f.samples)
      dims = (fast, slow, smps) if offs == 1 else (fast, slow, offs, smps)
      return f.trace.raw[:].reshape(dims)
docs: Read a full cube from a file
  
      Takes an open segy file (created with segyio.open) or a file name.
  
      If the file is a prestack file, the cube returned has the dimensions
      ``(fast, slow, offset, sample)``. If it is post-stack (only the one
      offset), the dimensions are normalised to ``(fast, slow, sample)``
  
      Parameters
      ----------
  
      f : str or segyio.SegyFile
  
      Returns
      -------
  
      cube : numpy.ndarray
  
      Notes
      -----
  
      .. versionadded:: 1.1