code: def _categorize_file_diffs(self, file_diffs):
          
          # TODO move this into a new validator
          candidate_feature_diffs = []
          valid_init_diffs = []
          inadmissible_files = []
  
          for diff in file_diffs:
              valid, failures = check_from_class(
                  ProjectStructureCheck, diff, self.project)
              if valid:
                  if pathlib.Path(diff.b_path).parts[-1] != '__init__.py':
                      candidate_feature_diffs.append(diff)
                      logger.debug(
                          'Categorized {file} as CANDIDATE FEATURE MODULE'
                          .format(file=diff.b_path))
                  else:
                      valid_init_diffs.append(diff)
                      logger.debug(
                          'Categorized {file} as VALID INIT MODULE'
                          .format(file=diff.b_path))
              else:
                  inadmissible_files.append(diff)
                  logger.debug(
                      'Categorized {file} as INADMISSIBLE; '
                      'failures were {failures}'
                      .format(file=diff.b_path, failures=failures))
  
          logger.info(
              'Admitted {} candidate feature{} '
              'and {} __init__ module{} '
              'and rejected {} file{}'
              .format(len(candidate_feature_diffs),
                      make_plural_suffix(candidate_feature_diffs),
                      len(valid_init_diffs),
                      make_plural_suffix(valid_init_diffs),
                      len(inadmissible_files),
                      make_plural_suffix(inadmissible_files)))
  
          return candidate_feature_diffs, valid_init_diffs, inadmissible_files
docs: Partition file changes into admissible and inadmissible changes