code: def skimage_radon_forward(volume, geometry, range, out=None):
      
      # Lazy import due to significant import time
      from skimage.transform import radon
  
      # Check basic requirements. Fully checking should be in wrapper
      assert volume.shape[0] == volume.shape[1]
  
      theta = skimage_theta(geometry)
      skimage_range = skimage_sinogram_space(geometry, volume.space, range)
  
      # Rotate volume from (x, y) to (rows, cols)
      sino_arr = radon(np.rot90(volume.asarray(), 1),
                       theta=theta, circle=False)
      sinogram = skimage_range.element(sino_arr.T)
  
      if out is None:
          out = range.element()
  
      out.sampling(clamped_interpolation(skimage_range, sinogram))
  
      scale = volume.space.cell_sides[0]
  
      out *= scale
  
      return out
docs: Calculate forward projection using skimage.
  
      Parameters
      ----------
      volume : `DiscreteLpElement`
          The volume to project
      geometry : `Geometry`
          The projection geometry to use
      range : `DiscreteLp`
          range of this projection (sinogram space)
      out : ``range`` element, optional
          An element in range that the result should be written to
  
      Returns
      -------
      sinogram : ``range`` element
          Sinogram given by the projection.