Beispiel #1
0
class WDumpSegs(WESTTool):
    prog = 'w_dumpsegs'
    description = '''\
Dump segment data as text. This is very inefficient, so this tool should be used
as a last resort (use hdfview/h5ls to look at data, and access HDF5 directly for
significant analysis tasks). 
'''

    def __init__(self):
        super(WDumpSegs, self).__init__()
        self.data_reader = WESTDataReader()
        self.n_iter = None
        self.output_file = None
        self.print_pcoords = False

    def add_args(self, parser):
        self.data_reader.add_args(parser)

        parser.add_argument(
            '-p',
            '--print-pcoords',
            dest='print_pcoords',
            action='store_true',
            help='print initial and final progress coordinates for each segment'
        )
        parser.add_argument(
            '-i',
            '--iteration',
            dest='n_iter',
            type=int,
            help=
            'Use data from iteration N_ITER (default: last complete iteration)'
        )
        parser.add_argument(
            '-o',
            '--output',
            dest='output_file',
            help=
            'Store output in OUTPUT_FILE (default: write to standard output).')

    def process_args(self, args):
        self.data_reader.process_args(args)
        self.data_reader.open()
        self.n_iter = args.n_iter or self.data_reader.current_iteration - 1
        self.output_file = open(args.output_file,
                                'wt') if args.output_file else sys.stdout
        self.print_pcoords = args.print_pcoords

    def go(self):
        segments = self.data_reader.get_segments(self.n_iter)

        max_seg_id_len = len(str(max(segment.seg_id for segment in segments)))
        max_status_name_len = max(
            list(map(len, iter(Segment.status_names.values()))))
        max_endpoint_type_len = max(
            list(map(len, iter(Segment.endpoint_type_names.values()))))
        max_n_parents_len = len(
            str(max(len(segment.wtg_parent_ids) for segment in segments)))

        report_line = (
            '{segment.n_iter:d}  {segment.seg_id:{max_seg_id_len}d}  {segment.weight:20.14g}'
            + '  {status_name:{max_status_name_len}s} ({segment.status})' +
            '  {segment.walltime:<12.6g} {segment.cputime:<12.6g}' +
            '  {endpoint_type_name:{max_endpoint_type_len}s} ({segment.endpoint_type})'
            +
            '  {n_parents:{max_n_parents_len}d} {segment.parent_id:{max_seg_id_len}d} {parents_str}'
            + '\n')
        pcoord_lines = (
            '  pcoord[0]  = {init_pcoord}\n  pcoord[-1] = {final_pcoord}' +
            '\n')
        for (_seg_id, segment) in enumerate(segments):
            parents_str = '[' + ', '.join(
                map(str, sorted(segment.wtg_parent_ids))) + ']'
            init_pcoord_str = '[' + ', '.join(
                '{pcval:<12.6g}'.format(pcval=float(pce))
                for pce in segment.pcoord[0]) + ']'
            final_pcoord_str = '[' + ', '.join(
                '{pcval:<12.6g}'.format(pcval=float(pce))
                for pce in segment.pcoord[-1]) + ']'
            self.output_file.write(
                report_line.format(
                    segment=segment,
                    status_name=segment.status_names[segment.status],
                    endpoint_type_name=segment.endpoint_type_names[
                        segment.endpoint_type],
                    parents_str=parents_str,
                    n_parents=len(segment.wtg_parent_ids),
                    max_seg_id_len=max_seg_id_len,
                    max_status_name_len=max_status_name_len,
                    max_endpoint_type_len=max_endpoint_type_len,
                    max_n_parents_len=max_n_parents_len))
            if self.print_pcoords:
                self.output_file.write(
                    pcoord_lines.format(init_pcoord=init_pcoord_str,
                                        final_pcoord=final_pcoord_str))
Beispiel #2
0
class WDumpSegs(WESTTool):
    prog='w_dumpsegs'
    description = '''\
Dump segment data as text. This is very inefficient, so this tool should be used
as a last resort (use hdfview/h5ls to look at data, and access HDF5 directly for
significant analysis tasks). 
'''
    
    def __init__(self):
        super(WDumpSegs,self).__init__()
        self.data_reader = WESTDataReader()
        self.n_iter = None
        self.output_file = None
        self.print_pcoords = False
    
    def add_args(self, parser):
        self.data_reader.add_args(parser)


        parser.add_argument('-p', '--print-pcoords', dest='print_pcoords', action='store_true',
                            help='print initial and final progress coordinates for each segment')
        parser.add_argument('-i', '--iteration', dest='n_iter', type=int,
                            help='Use data from iteration N_ITER (default: last complete iteration)')
        parser.add_argument('-o', '--output', dest='output_file',
                            help='Store output in OUTPUT_FILE (default: write to standard output).')
        

    def process_args(self, args):
        self.data_reader.process_args(args)
        self.data_reader.open()
        self.n_iter = args.n_iter or self.data_reader.current_iteration-1
        self.output_file = open(args.output_file, 'wt') if args.output_file else sys.stdout
        self.print_pcoords = args.print_pcoords
    
    def go(self):
        segments = self.data_reader.get_segments(self.n_iter)
        
        max_seg_id_len = len(str(max(segment.seg_id for segment in segments)))
        max_status_name_len = max(map(len,Segment.status_names.itervalues()))
        max_endpoint_type_len = max(map(len,Segment.endpoint_type_names.itervalues()))
        max_n_parents_len = len(str(max(len(segment.wtg_parent_ids) for segment in segments)))
        
        report_line = ( '{segment.n_iter:d}  {segment.seg_id:{max_seg_id_len}d}  {segment.weight:20.14g}' 
                        +'  {status_name:{max_status_name_len}s} ({segment.status})'
                        +'  {segment.walltime:<12.6g} {segment.cputime:<12.6g}'
                        +'  {endpoint_type_name:{max_endpoint_type_len}s} ({segment.endpoint_type})'
                        +'  {n_parents:{max_n_parents_len}d} {segment.parent_id:{max_seg_id_len}d} {parents_str}' 
                        +'\n')
        pcoord_lines = ('  pcoord[0]  = {init_pcoord}\n  pcoord[-1] = {final_pcoord}'
                        +'\n')
        for (_seg_id, segment) in enumerate(segments):    
            parents_str = '['+', '.join(map(str,sorted(segment.wtg_parent_ids)))+']'
            init_pcoord_str = '[' + ', '.join('{pcval:<12.6g}'.format(pcval=float(pce)) for pce in segment.pcoord[0]) + ']'
            final_pcoord_str = '[' + ', '.join('{pcval:<12.6g}'.format(pcval=float(pce)) for pce in segment.pcoord[-1]) + ']'
            self.output_file.write(report_line.format(segment=segment, 
                                                 status_name = segment.status_names[segment.status],
                                                 endpoint_type_name = segment.endpoint_type_names[segment.endpoint_type],
                                                 parents_str = parents_str,
                                                 n_parents = len(segment.wtg_parent_ids),
                                                 max_seg_id_len=max_seg_id_len,
                                                 max_status_name_len=max_status_name_len,
                                                 max_endpoint_type_len=max_endpoint_type_len,
                                                 max_n_parents_len=max_n_parents_len))
            if self.print_pcoords:
                self.output_file.write(pcoord_lines.format(init_pcoord = init_pcoord_str,final_pcoord = final_pcoord_str))