docs: def gen_dipole_dipole(self,
                            skipc,
                            skipv=None,
                            stepc=1,
                            stepv=1,
                            nr_voltage_dipoles=10,
                            before_current=False,
                            start_skip=0,
                            N=None):
          """Generate dipole-dipole configurations
  
          Parameters
          ----------
          skipc: int
              number of electrode positions that are skipped between electrodes
              of a given dipole
          skipv: int
              steplength between subsequent voltage dipoles. A steplength of 0
              will produce increments by one, i.e., 3-4, 4-5, 5-6 ...
          stepc: int
              steplength between subsequent current dipoles. A steplength of 0
              will produce increments by one, i.e., 3-4, 4-5, 5-6 ...
          stepv: int
              steplength between subsequent voltage dipoles. A steplength of 0
              will produce increments by one, i.e., 3-4, 4-5, 5-6 ...
          nr_voltage_dipoles: int
              the number of voltage dipoles to generate for each current
              injection dipole
          before_current: bool, optional
              if set to True, also generate voltage dipoles in front of current
              dipoles.
          start_skip: int, optional
              how many electrode to skip before/after the first/second current
              electrode.
          N: int, optional
              number of electrodes, must be given if not already known by the
              config instance
  
          Examples
          --------
  
          >>> from reda.configs.configManager import ConfigManager
          >>> config = ConfigManager(nr_of_electrodes=10)
          >>> config.gen_dipole_dipole(skipc=2)
          array([[ 1,  4,  5,  8],
                 [ 1,  4,  6,  9],
                 [ 1,  4,  7, 10],
                 [ 2,  5,  6,  9],
                 [ 2,  5,  7, 10],
                 [ 3,  6,  7, 10]])
  
  
          """
          if N is None and self.nr_electrodes is None:
              raise Exception('You must provide the number of electrodes')
          elif N is None:
              N = self.nr_electrodes
  
          # by default, current voltage dipoles have the same size
          if skipv is None:
              skipv = skipc
  
          configs = []
          # current dipoles
          for a in range(0, N - skipv - skipc - 3, stepc):
              b = a + skipc + 1
              nr = 0
              # potential dipoles before current injection
              if before_current:
                  for n in range(a - start_skip - 1, -1, -stepv):
                      nr += 1
                      if nr > nr_voltage_dipoles:
                          continue
                      m = n - skipv - 1
                      if m < 0:
                          continue
                      quadpole = np.array((a, b, m, n)) + 1
                      configs.append(quadpole)
  
              # potential dipoles after current injection
              nr = 0
              for m in range(b + start_skip + 1, N - skipv - 1, stepv):
                  nr += 1
                  if nr > nr_voltage_dipoles:
                      continue
                  n = m + skipv + 1
                  quadpole = np.array((a, b, m, n)) + 1
                  configs.append(quadpole)
  
          configs = np.array(configs)
          # now add to the instance
          if self.configs is None:
              self.configs = configs
          else:
              self.configs = np.vstack((self.configs, configs))
          return configs