docs: def get_regions_and_coremasks(self):
          """Generate a set of ordered paired region and core mask representations.
  
          .. note::
              The region and core masks are ordered such that ``(region << 32) |
              core_mask`` is monotonically increasing. Consequently region and
              core masks generated by this method can be used with SCAMP's
              Flood-Fill Core Select (FFSC) method.
  
          Yields
          ------
          (region, core mask)
              Pair of integers which represent a region of a SpiNNaker machine
              and a core mask of selected cores within that region.
          """
          region_code = ((self.base_x << 24) | (self.base_y << 16) |
                         (self.level << 16))
  
          # Generate core masks for any regions which are selected at this level
          # Create a mapping from subregion mask to core numbers
          subregions_cores = collections.defaultdict(lambda: 0x0)
          for core, subregions in enumerate(self.locally_selected):
              if subregions:  # If any subregions are selected on this level
                  subregions_cores[subregions] |= 1 << core
  
          # Order the locally selected items and then yield them
          for (subregions, coremask) in sorted(subregions_cores.items()):
              yield (region_code | subregions), coremask
  
          if self.level < 3:
              # Iterate through the subregions and recurse, we iterate through in
              # the order which ensures that anything we yield is in increasing
              # order.
              for i in (4*x + y for y in range(4) for x in range(4)):
                  subregion = self.subregions[i]
                  if subregion is not None:
                      for (region, coremask) in \
                              subregion.get_regions_and_coremasks():
                          yield (region, coremask)