code: def potential_jumps( self ):
          
          jumps = []
          if self.number_of_occupied_sites <= self.number_of_sites / 2:
              for occupied_site in self.occupied_sites():
                  unoccupied_neighbours = [ site for site in [ self.site_with_id( n ) for n in occupied_site.neighbours ] if not site.is_occupied ]
                  for vacant_site in unoccupied_neighbours:
                      jumps.append( jump.Jump( occupied_site, vacant_site, self.nn_energy, self.cn_energies, self.jump_lookup_table ) )
          else:
              for vacant_site in self.vacant_sites():
                  occupied_neighbours = [ site for site in [ self.site_with_id( n ) for n in vacant_site.neighbours ] if site.is_occupied ]
                  for occupied_site in occupied_neighbours:
                      jumps.append( jump.Jump( occupied_site, vacant_site, self.nn_energy, self.cn_energies, self.jump_lookup_table ) )
          return jumps
docs: All nearest-neighbour jumps not blocked by volume exclusion 
          (i.e. from occupied to neighbouring unoccupied sites).
  
          Args:
              None
  
          Returns:
              (List(Jump)): List of possible jumps.