docs: def exvp_scalar(x, y, x0, y0, c2, c4, theta0, ff):
      """Convert virtual pixel to real pixel.
  
      Parameters
      ----------
      x : array-like of floats
          X coordinate (pixel).
      y : array-like of floats
          Y coordinate (pixel).
      x0 : float
          X coordinate of reference pixel, in units of 1E3.
      y0 : float
          Y coordinate of reference pixel, in units of 1E3.
      c2 : float
          Coefficient corresponding to the term r**2 in distortion
          equation, in units of 1E4.
      c4 : float
          Coefficient corresponding to the term r**4 in distortion
          equation, in units of 1E9
      theta0 : float
          Additional rotation angle (radians).
      ff : float
          Scaling factor to be applied to the Y axis.
  
      Returns
      -------
      xdist, ydist : tuple of floats
          Distorted coordinates.
  
      """
  
      # plate scale: 0.1944 arcsec/pixel
      # conversion factor (in radian/pixel)
      factor = 0.1944 * np.pi/(180.0*3600)
      # distance from image center (pixels)
      r_pix = np.sqrt((x - x0*1000)**2 + (y - y0*1000)**2)
      # distance from imagen center (radians)
      r_rad = factor * r_pix
      # radial distortion: this number is 1.0 for r=0 and increases
      # slightly (reaching values around 1.033) for r~sqrt(2)*1024
      # (the distance to the corner of the detector measured from the
      # center)
      rdist = (1 +
               c2 * 1.0E4 * r_rad**2 +
               c4 * 1.0E9 * r_rad**4)
      # angle measured from the Y axis towards the X axis
      theta = np.arctan((x - x0*1000)/(y - y0*1000))
      if y < y0*1000:
          theta = theta - np.pi
      # distorted coordinates
      xdist = (rdist * r_pix * np.sin(theta+theta0)) + x0*1000
      ydist = (ff * rdist * r_pix * np.cos(theta+theta0)) + y0*1000
  
      return xdist, ydist