code: def derivative_fit(xdata, ydata, neighbors=1):
      
  
      x    = []
      dydx = []
      nmax = len(xdata)-1
  
      for n in range(nmax+1):
          # get the indices of the data to fit
          i1 = max(0, n-neighbors)
          i2 = min(nmax, n+neighbors)
  
          # get the sub data to fit
          xmini = _n.array(xdata[i1:i2+1])
          ymini = _n.array(ydata[i1:i2+1])
  
          slope, intercept = fit_linear(xmini, ymini)
  
          # make x the average of the xmini
          x.append(float(sum(xmini))/len(xmini))
          dydx.append(slope)
  
      return _n.array(x), _n.array(dydx)
docs: loops over the data points, performing a least-squares linear fit of the
      nearest neighbors at each point. Returns an array of x-values and slopes.
  
      xdata should probably be well-ordered.
  
      neighbors   How many data point on the left and right to include.