docs: def inverse_transform(self, Y, columns=None):
          """Transform input data `Y` to ambient data space defined by `self.data`
  
          Takes data in the same reduced space as `self.data_nu` and transforms
          it to be in the same ambient space as `self.data`.
  
          Parameters
          ----------
          Y : array-like, shape=[n_samples_y, n_pca]
              n_features must be the same as `self.data_nu`.
          columns : list-like
              list of integers referring to column indices in the original data
              space to be returned. Avoids recomputing the full matrix where only
              a few dimensions of the ambient space are of interest
  
          Returns
          -------
          Inverse transformed data, shape=[n_samples_y, n_features]
  
          Raises
          ------
          ValueError : if Y.shape[1] != self.data_nu.shape[1]
          """
          try:
              if not hasattr(self, "data_pca"):
                  # no pca performed
                  try:
                      if Y.shape[1] != self.data_nu.shape[1]:
                          # shape is wrong
                          raise ValueError
                  except IndexError:
                      # len(Y.shape) < 2
                      raise ValueError
                  if columns is None:
                      return Y
                  else:
                      columns = np.array([columns]).flatten()
                      return Y[:, columns]
              else:
                  if columns is None:
                      return self.data_pca.inverse_transform(Y)
                  else:
                      # only return specific columns
                      columns = np.array([columns]).flatten()
                      Y_inv = np.dot(Y, self.data_pca.components_[:, columns])
                      if hasattr(self.data_pca, "mean_"):
                          Y_inv += self.data_pca.mean_[columns]
                      return Y_inv
          except ValueError:
              # more informative error
              raise ValueError("data of shape {} cannot be inverse transformed"
                               " from graph built on data of shape {}".format(
                                   Y.shape, self.data_nu.shape))