docs: def _stack_bands(one, other):
      # type: (_Raster, _Raster) -> _Raster
      """Merges two rasters with non overlapping bands by stacking the bands.
  
      """
      assert set(one.band_names).intersection(set(other.band_names)) == set()
  
      # We raise an error in the bands are the same. See above.
      if one.band_names == other.band_names:
          raise ValueError("rasters have the same bands, use another merge strategy")
  
      # Apply "or" to the mask in the same way rasterio does, see
      # https://mapbox.github.io/rasterio/topics/masks.html#dataset-masks
      # In other words, mask the values that are already masked in either
      # of the two rasters, since one mask per band is not supported
      new_mask = np.ma.getmaskarray(one.image)[0] | np.ma.getmaskarray(other.image)[0]
  
      # Concatenate the data along the band axis and apply the mask
      new_image = np.ma.masked_array(
          np.concatenate([
              one.image.data,
              other.image.data
          ]),
          mask=[new_mask] * (one.image.shape[0] + other.image.shape[0])
      )
      new_bands = one.band_names + other.band_names
  
      # We don't copy image and mask here, due to performance issues,
      # this output should not use without eventually being copied
      # In this context we are copying the object in the end of merge_all merge_first and merge
      return _Raster(image=new_image, band_names=new_bands)