#!/usr/bin/env python3 import os import sys from io import StringIO from optparse import OptionParser import damask scriptName = os.path.splitext(os.path.basename(__file__))[0] scriptID = ' '.join([scriptName,damask.version]) #-------------------------------------------------------------------------------------------------- # MAIN #-------------------------------------------------------------------------------------------------- parser = OptionParser(option_class=damask.extendableOption, usage='%prog [geomfile(s)]', description = """ Pack ranges to "a to b" and/or multiples to "n of x". """, version = scriptID) (options, filenames) = parser.parse_args() if filenames == []: filenames = [None] for name in filenames: damask.util.report(scriptName,name) geom = damask.Geom.from_file(StringIO(''.join(sys.stdin.read())) if name is None else name) damask.util.croak(geom) geom.add_comments(scriptID + ' ' + ' '.join(sys.argv[1:])) compressType = None former = start = -1 reps = 0 if name is None: f = sys.stdout else: f= open(name,'w') for current in geom.microstructure.flatten('F'): if abs(current - former) == 1 and (start - current) == reps*(former - current): compressType = 'to' reps += 1 elif current == former and start == former: compressType = 'of' reps += 1 else: if compressType is None: f.write('\n'.join(geom.get_header())+'\n') elif compressType == '.': f.write('{}\n'.format(former)) elif compressType == 'to': f.write('{} to {}\n'.format(start,former)) elif compressType == 'of': f.write('{} of {}\n'.format(reps,former)) compressType = '.' start = current reps = 1 former = current if compressType == '.': f.write('{}\n'.format(former)) elif compressType == 'to': f.write('{} to {}\n'.format(start,former)) elif compressType == 'of': f.write('{} of {}\n'.format(reps,former))