Convert T label matrices with labels in 0...K_t to a one-hot format

        Here we can view e.g. the $(i,j)$ entries of the $T$ label matrices as
        a _label vector_ emitted by LF j for data point i.

        Args:
            L: a T-length list of [n,m] scipy.sparse label matrices with values
                in {0,1,...,k}

        Returns:
            L_ind: An [n,m*k] dense np.ndarray with values in {0,1}

        Note that no column is required for 0 (abstain) labels.

def _create_L_ind(self, L):
        """Convert T label matrices with labels in 0...K_t to a one-hot format

        Here we can view e.g. the $(i,j)$ entries of the $T$ label matrices as
        a _label vector_ emitted by LF j for data point i.

        Args:
            L: a T-length list of [n,m] scipy.sparse label matrices with values
                in {0,1,...,k}

        Returns:
            L_ind: An [n,m*k] dense np.ndarray with values in {0,1}

        Note that no column is required for 0 (abstain) labels.
        """
        # TODO: Update LabelModel to keep L, L_ind, L_aug as sparse matrices
        # throughout and remove this line.
        if issparse(L[0]):
            L = [L_t.todense() for L_t in L]

        # Make sure converted to numpy here
        L = self._to_numpy(L)

        L_ind = np.ones((self.n, self.m * self.k))
        for yi, y in enumerate(self.task_graph.feasible_set()):
            for t in range(self.t):
                # A[x::y] slices A starting at x at intervals of y
                # e.g., np.arange(9)[0::3] == np.array([0,3,6])
                L_ind[:, yi :: self.k] *= np.where(
                    np.logical_or(L[t] == y[t], L[t] == 0), 1, 0
                )

            # Set LFs that abstained on all feasible label vectors to all 0s
            L_ind[:, yi :: self.k] *= np.where(sum(L) != 0, 1, 0)

        return L_ind