def gen_all_current_dipoles(self):
        """Generate all possible current dipoles for the given number of
        electrodes (self.nr_electrodes). Duplicates are removed in the process.

        After Noel and Xu, 1991, for N electrodes, the number of possible
        unique configurations is :math:`N \cdot (N - 1) / 2`. This excludes
        duplicates in the form of switches current/voltages electrodes, as well
        as reciprocal measurements.

        Returns
        -------
        configs: Nx2 numpy.ndarray
            all possible current dipoles A-B
        """
        N = self.nr_electrodes
        celecs = list(range(1, N + 1))
        AB_list = itertools.permutations(celecs, 2)
        AB = np.array([ab for ab in AB_list])
        AB.sort(axis=1)

        # now we need to filter duplicates
        AB = np.unique(AB.view(AB.dtype.descr * 2)).view(AB.dtype).reshape(
            -1, 2)

        return AB
Generate all possible current dipoles for the given number of
        electrodes (self.nr_electrodes). Duplicates are removed in the process.

        After Noel and Xu, 1991, for N electrodes, the number of possible
        unique configurations is :math:`N \cdot (N - 1) / 2`. This excludes
        duplicates in the form of switches current/voltages electrodes, as well
        as reciprocal measurements.

        Returns
        -------
        configs: Nx2 numpy.ndarray
            all possible current dipoles A-B