<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def uddf(udfunc, x, dx):
 """ Routine to calculate the first derivative of a caller-specified function using a three-point estimation. Use the @spiceypy.utils.callbacks.SpiceUDFUNS dectorator to wrap a given python function that takes one parameter (float) and returns a float. For example:: @spiceypy.utils.callbacks.SpiceUDFUNS def udfunc(et_in):
 pos, new_et = spice.spkpos("MERCURY", et_in, "J2000", "LT+S", "MOON") return new_et deriv = spice.uddf(udfunc, et, 1.0) https://naif.jpl.nasa.gov/pub/naif/toolkit_docs/C/cspice/uddf_c.html :param udfunc: Name of the routine that computes the scalar value of interest. :type udfunc: ctypes.CFunctionType :param x: Independent variable of 'udfunc'. :type x: float :param dx: Interval from 'x' for derivative calculation. :type dx: float :return: Approximate derivative of 'udfunc' at 'x' :rtype: float """

    x = ctypes.c_double(x)
    dx = ctypes.c_double(dx)
    deriv = ctypes.c_double()
    libspice.uddf_c(udfunc, x, dx, ctypes.byref(deriv))
    return deriv.value