code: def _collapse_addresses_internal(addresses):
      
      # First merge
      to_merge = list(addresses)
      subnets = {}
      while to_merge:
          net = to_merge.pop()
          supernet = net.supernet()
          existing = subnets.get(supernet)
          if existing is None:
              subnets[supernet] = net
          elif existing != net:
              # Merge consecutive subnets
              del subnets[supernet]
              to_merge.append(supernet)
      # Then iterate over resulting networks, skipping subsumed subnets
      last = None
      for net in sorted(subnets.values()):
          if last is not None:
              # Since they are sorted,
              # last.network_address <= net.network_address is a given.
              if last.broadcast_address >= net.broadcast_address:
                  continue
          yield net
          last = net
docs: Loops through the addresses, collapsing concurrent netblocks.
  
      Example:
  
          ip1 = IPv4Network('192.0.2.0/26')
          ip2 = IPv4Network('192.0.2.64/26')
          ip3 = IPv4Network('192.0.2.128/26')
          ip4 = IPv4Network('192.0.2.192/26')
  
          _collapse_addresses_internal([ip1, ip2, ip3, ip4]) ->
            [IPv4Network('192.0.2.0/24')]
  
          This shouldn't be called directly; it is called via
            collapse_addresses([]).
  
      Args:
          addresses: A list of IPv4Network's or IPv6Network's
  
      Returns:
          A list of IPv4Network's or IPv6Network's depending on what we were
          passed.