docs: def update_particle(self, part, chi=0.729843788, c=2.05):
          """Constriction factor update particle method.
  
          Notes
          -----
          Looks for a list of neighbours attached to a particle and
          uses the particle's best position and that of the best
          neighbour.
          """
          neighbour_pool = [self.population[i] for i in part.neighbours]
          best_neighbour = max(neighbour_pool, key=lambda x: x.best.fitness)
          ce1 = (c * random.uniform(0, 1) for _ in range(len(part)))
          ce2 = (c * random.uniform(0, 1) for _ in range(len(part)))
          ce1_p = map(operator.mul, ce1, map(operator.sub, part.best, part))
          ce2_g = map(operator.mul, ce2, map(
              operator.sub, best_neighbour.best, part))
          chi_list = [chi] * len(part)
          chi_list2 = [1 - chi] * len(part)
          a = map(operator.sub,
                  map(operator.mul, chi_list, map(operator.add, ce1_p, ce2_g)),
                  map(operator.mul, chi_list2, part.speed))
          part.speed = list(map(operator.add, part.speed, a))
          for i, speed in enumerate(part.speed):
              if speed < part.smin:
                  part.speed[i] = part.smin
              elif speed > part.smax:
                  part.speed[i] = part.smax
          part[:] = list(map(operator.add, part, part.speed))
          return