code: def connectivity(self, bus):
          
          if not self.n:
              return
          n = self.nb
          fr = self.a1
          to = self.a2
          os = [0] * self.n
  
          # find islanded buses
          diag = list(
              matrix(
                  spmatrix(self.u, to, os, (n, 1), 'd') +
                  spmatrix(self.u, fr, os, (n, 1), 'd')))
          nib = bus.n_islanded_buses = diag.count(0)
          bus.islanded_buses = []
          for idx in range(n):
              if diag[idx] == 0:
                  bus.islanded_buses.append(idx)
  
          # find islanded areas
          temp = spmatrix(
              list(self.u) * 4, fr + to + fr + to, to + fr + fr + to, (n, n),
              'd')
          cons = temp[0, :]
          nelm = len(cons.J)
          conn = spmatrix([], [], [], (1, n), 'd')
          bus.island_sets = []
          idx = islands = 0
          enum = 0
  
          while 1:
              while 1:
                  cons = cons * temp
                  cons = sparse(cons)  # remove zero values
                  new_nelm = len(cons.J)
                  if new_nelm == nelm:
                      break
                  nelm = new_nelm
              if len(cons.J) == n:  # all buses are interconnected
                  return
              bus.island_sets.append(list(cons.J))
              conn += cons
              islands += 1
              nconn = len(conn.J)
              if nconn >= (n - nib):
                  bus.island_sets = [i for i in bus.island_sets if i != []]
                  break
  
              for element in conn.J[idx:]:
                  if not diag[idx]:
                      enum += 1  # skip islanded buses
                  if element <= enum:
                      idx += 1
                      enum += 1
                  else:
                      break
  
              cons = temp[enum, :]
docs: check connectivity of network using Goderya's algorithm