def METHOD_NAME(self):
    """
    Perform some final setup and checks.
    """
    interp_method = self.options['method']
    x_cp_val = self.options['x_cp_val']
    n_cp = self.options['num_cp']
    if x_cp_val is not None:
        if interp_method == 'bsplines':
            msg = "{}: 'x_cp_val' is not a valid option when using method 'bsplines'. "
            msg += "Set 'num_cp' instead."
            raise ValueError(msg.format(self.msginfo))
        if n_cp is not None:
            msg = "{}: It is not valid to set both options 'x_cp_val' and 'num_cp'."
            raise ValueError(msg.format(self.msginfo))
        grid = np.asarray(x_cp_val)
        n_cp = len(grid)
    elif n_cp is not None:
        grid = np.linspace(0, 1.0, n_cp)
    else:
        msg = "{}: Either option 'x_cp_val' or 'num_cp' must be set."
        raise ValueError(msg.format(self.msginfo))
    self._n_cp = n_cp
    opts = {}
    if 'interp_options' in self.options:
        opts = self.options['interp_options']
    vec_size = self.options['vec_size']
    n_interp = len(self.options['x_interp_val'])
    for y_cp_name, y_interp_name, y_cp_val, y_units in self._spline_cache:
        self.add_output(y_interp_name, np.ones((vec_size, n_interp)), units=y_units)
        if y_cp_val is None:
            y_cp_val = np.ones((vec_size, n_cp))
        elif len(y_cp_val.shape) < 2:
            y_cp_val = y_cp_val.reshape((vec_size, n_cp))
        self.add_input(name=y_cp_name, val=y_cp_val, units=y_units)
        self.interp_to_cp[y_interp_name] = y_cp_name
        row = np.repeat(np.arange(n_interp), n_cp)
        col = np.tile(np.arange(n_cp), n_interp)
        rows = np.tile(row, vec_size) + \
            np.repeat(n_interp * np.arange(vec_size), n_interp * n_cp)
        cols = np.tile(col, vec_size) + np.repeat(n_cp * np.arange(vec_size), n_interp * n_cp)
        self.declare_partials(y_interp_name, y_cp_name, rows=rows, cols=cols)
        # Separate data for each vec_size, but we only need to do sizing, so just pass
        # in the first.  Most interps aren't vectorized.
        cp_val = y_cp_val[0, :]
        self.interps[y_interp_name] = InterpND(points=(grid, ), values=cp_val,
                                               method=interp_method,
                                               x_interp=self.options['x_interp_val'],
                                               extrapolate=True, **opts)
    # The scipy methods do not support complex step.
    if self.options['method'].startswith('scipy'):
        self.set_check_partial_options('*', method='fd')