docs: def from_files(filenames, strict_type_checks=True):
      """Return an iterator that provides a sequence of Histograms for
  the histograms defined in filenames.
      """
      if strict_type_checks:
          load_whitelist()
  
      all_histograms = OrderedDict()
      for filename in filenames:
          parser = FILENAME_PARSERS[os.path.basename(filename)]
          histograms = parser(filename, strict_type_checks)
  
          # OrderedDicts are important, because then the iteration order over
          # the parsed histograms is stable, which makes the insertion into
          # all_histograms stable, which makes ordering in generated files
          # stable, which makes builds more deterministic.
          if not isinstance(histograms, OrderedDict):
              raise ParserError("Histogram parser did not provide an OrderedDict.")
  
          for name, definition in iteritems(histograms):
              if name in all_histograms:
                  raise ParserError('Duplicate histogram name "%s".' % name)
              all_histograms[name] = definition
  
      # We require that all USE_COUNTER2_* histograms be defined in a contiguous
      # block.
      use_counter_indices = filter(lambda x: x[1].startswith("USE_COUNTER2_"),
                                   enumerate(iterkeys(all_histograms)))
      if use_counter_indices:
          lower_bound = use_counter_indices[0][0]
          upper_bound = use_counter_indices[-1][0]
          n_counters = upper_bound - lower_bound + 1
          if n_counters != len(use_counter_indices):
              raise ParserError("Use counter histograms must be defined in a contiguous block.")
  
      # Check that histograms that were removed from Histograms.json etc.
      # are also removed from the whitelists.
      if whitelists is not None:
          all_whitelist_entries = itertools.chain.from_iterable(whitelists.itervalues())
          orphaned = set(all_whitelist_entries) - set(iterkeys(all_histograms))
          if len(orphaned) > 0:
              msg = 'The following entries are orphaned and should be removed from ' \
                    'histogram-whitelists.json:\n%s'
              raise ParserError(msg % (', '.join(sorted(orphaned))))
  
      for name, definition in iteritems(all_histograms):
          yield Histogram(name, definition, strict_type_checks=strict_type_checks)