docs: def spkcpo(target, et, outref, refloc, abcorr, obspos, obsctr, obsref):
      """
      Return the state of a specified target relative to an "observer,"
      where the observer has constant position in a specified reference
      frame. The observer's position is provided by the calling program
      rather than by loaded SPK files.
  
      http://naif.jpl.nasa.gov/pub/naif/toolkit_docs/C/cspice/spkcpo_c.html
  
      :param target: Name of target ephemeris object.
      :type target: str
      :param et: Observation epoch.
      :type et: float
      :param outref: Reference frame of output state.
      :type outref: str
      :param refloc: Output reference frame evaluation locus.
      :type refloc: str
      :param abcorr: Aberration correction.
      :type abcorr: str
      :param obspos: Observer position relative to center of motion.
      :type obspos: 3-Element Array of floats
      :param obsctr: Center of motion of observer.
      :type obsctr: str
      :param obsref: Frame of observer position.
      :type obsref: str
      :return:
              State of target with respect to observer,
              One way light time between target and observer.
      :rtype: tuple
      """
      target = stypes.stringToCharP(target)
      et = ctypes.c_double(et)
      outref = stypes.stringToCharP(outref)
      refloc = stypes.stringToCharP(refloc)
      abcorr = stypes.stringToCharP(abcorr)
      obspos = stypes.toDoubleVector(obspos)
      obsctr = stypes.stringToCharP(obsctr)
      obsref = stypes.stringToCharP(obsref)
      state = stypes.emptyDoubleVector(6)
      lt = ctypes.c_double()
      libspice.spkcpo_c(target, et, outref, refloc, abcorr, obspos, obsctr,
                        obsref, state, ctypes.byref(lt))
      return stypes.cVectorToPython(state), lt.value