code: def sart_projection_update(
      image, theta, projection, projection_shift=0.0
  ):
      """
      Compute update to a reconstruction estimate from a single projection
      using bilinear interpolation.
  
      Parameters
      ----------
      image : 2D array, dtype=float
          Current reconstruction estimate
      theta : float
          Angle of the projection
      projection : 1D array, dtype=float
          Projected values, taken from the sinogram
      projection_shift : float
          Shift the position of the projection by this many pixels before
          using it to compute an update to the reconstruction estimate
  
      Returns
      -------
      image_update : 2D array, dtype=float
          Array of same shape as ``image`` containing updates that should be
          added to ``image`` to improve the reconstruction estimate
      """
      image_update = np.zeros_like(image)
      for i in range(projection.shape[0]):
          ray_position = i + projection_shift
          bilinear_ray_update(
              image, image_update, theta, ray_position, projection[i]
          )
      return image_update
  
imports: import numpy
  from numpy import cos, sin, floor, ceil, sqrt
label_desc: Use image node_id 3 for calling a global function with example usage: sart_projection_update(image, theta, projection, projection_shift) and returns: image_update