- #!/usr/bin/env python 
-   
- from __future__ import print_function 
-   
- desc = '''Generate the difference of two YAML files into a new YAML file (works on 
- pair of directories too).  A new attribute 'Added' is set to True or False 
- depending whether the entry is added or removed from the first input to the 
- next. 
-   
- The tools requires PyYAML.''' 
-   
- import yaml 
- # Try to use the C parser. 
- try: 
-     from yaml import CLoader as Loader 
- except ImportError: 
-     from yaml import Loader 
-   
- import optrecord 
- import argparse 
- from collections import defaultdict 
-   
- if __name__ == '__main__': 
-     parser = argparse.ArgumentParser(description=desc) 
-     parser.add_argument( 
-         'yaml_dir_or_file_1', 
-         help='An optimization record file or a directory searched for optimization ' 
-              'record files that are used as the old version for the comparison') 
-     parser.add_argument( 
-         'yaml_dir_or_file_2', 
-         help='An optimization record file or a directory searched for optimization ' 
-              'record files that are used as the new version for the comparison') 
-     parser.add_argument( 
-         '--jobs', 
-         '-j', 
-         default=None, 
-         type=int, 
-         help='Max job count (defaults to %(default)s, the current CPU count)') 
-     parser.add_argument( 
-         '--max-size', 
-         '-m', 
-         default=100000, 
-         type=int, 
-         help='Maximum number of remarks stored in an output file') 
-     parser.add_argument( 
-         '--no-progress-indicator', 
-         '-n', 
-         action='store_true', 
-         default=False, 
-         help='Do not display any indicator of how many YAML files were read.') 
-     parser.add_argument('--output', '-o', default='diff{}.opt.yaml') 
-     args = parser.parse_args() 
-   
-     files1 = optrecord.find_opt_files(args.yaml_dir_or_file_1) 
-     files2 = optrecord.find_opt_files(args.yaml_dir_or_file_2) 
-   
-     print_progress = not args.no_progress_indicator 
-     all_remarks1, _, _ = optrecord.gather_results(files1, args.jobs, print_progress) 
-     all_remarks2, _, _ = optrecord.gather_results(files2, args.jobs, print_progress) 
-   
-     added = set(all_remarks2.values()) - set(all_remarks1.values()) 
-     removed = set(all_remarks1.values()) - set(all_remarks2.values()) 
-   
-     for r in added: 
-         r.Added = True 
-     for r in removed: 
-         r.Added = False 
-   
-     result = list(added | removed) 
-     for r in result: 
-         r.recover_yaml_structure() 
-   
-     for i in range(0, len(result), args.max_size): 
-         with open(args.output.format(i / args.max_size), 'w') as stream: 
-             yaml.dump_all(result[i:i + args.max_size], stream) 
-