Apply warping_function to some Input data

        Parameters:
        -----------
        X : array_like, shape = (n_samples, n_features)

        test_data: bool, optional
            Default to False, should set to True when transforming test data

        Returns
        -------
        X_warped : array_like, shape = (n_samples, n_features)
            The warped input data

        Math
        ----
        f(x) = 1 - (1 - x^a)^b

def f(self, X, test_data=False):
        """Apply warping_function to some Input data

        Parameters:
        -----------
        X : array_like, shape = (n_samples, n_features)

        test_data: bool, optional
            Default to False, should set to True when transforming test data

        Returns
        -------
        X_warped : array_like, shape = (n_samples, n_features)
            The warped input data

        Math
        ----
        f(x) = 1 - (1 - x^a)^b
        """
        X_warped = X.copy()
        if test_data:
            X_normalized = (X - self.Xmin) / (self.Xmax - self.Xmin)
        else:
            X_normalized = self.X_normalized

        for i_seq, i_fea in enumerate(self.warping_indices):
            a, b = self.params[i_seq][0], self.params[i_seq][1]
            X_warped[:, i_fea] = 1 - np.power(1 - np.power(X_normalized[:, i_fea], a), b)
        return X_warped