class Interpolator1DCubicSplineDataBundle implements Interpolator1DDataBundle, Serializable {

  public double[][] getSecondDerivativesSensitivities() {
    if (_secondDerivativesSensitivities == null) {
      final double[] x = getKeys();
      final double[] y = getValues();
      final int n = x.length;
      final double[] deltaX = new double[n - 1];
      final double[] deltaYOverDeltaX = new double[n - 1];
      final double[] oneOverDeltaX = new double[n - 1];

      for (int i = 0; i < n - 1; i++) {
        deltaX[i] = x[i + 1] - x[i];
        oneOverDeltaX[i] = 1.0 / deltaX[i];
        deltaYOverDeltaX[i] = (y[i + 1] - y[i]) * oneOverDeltaX[i];
      }

      final DoubleMatrix2D inverseTriDiag = getInverseTridiagonalMatrix(deltaX);
      final DoubleMatrix2D rhsMatrix = getRHSMatrix(oneOverDeltaX);
      _secondDerivativesSensitivities = ((DoubleMatrix2D) OG_ALGEBRA.multiply(inverseTriDiag, rhsMatrix)).getData();
    }
    return _secondDerivativesSensitivities;
  }

  public  Interpolator1DCubicSplineDataBundle(final Interpolator1DDataBundle underlyingData);
  public  Interpolator1DCubicSplineDataBundle(final Interpolator1DDataBundle underlyingData, final double leftGrad, final double rightGrad);

}