def _read_command_line(self): parser = argparse.ArgumentParser() # Make argparse list of options for name in self.p: # Default type: str parser.add_argument('--'+name, default=self.p[name]) args = parser.parse_args() for name in self.p: self.p[name] = str2obj(getattr(args, name))
def _read_command_line(self): parser = argparse.ArgumentParser() # Make argparse list of options for name in self.p: parser.add_argument('--'+name, default=self.p[name]) # Parameter type is not specified. So default type is string. # Convert string to correct object with str2obj() args = parser.parse_args() for name in self.p: self.p[name] = str2obj(getattr(args, name))
def _read_command_line(self): parser = argparse.ArgumentParser() # Make argparse list of options for name in self.p: # Default type: str parser.add_argument('--' + name, default=self.p[name]) args = parser.parse_args() for name in self.p: self.p[name] = str2obj(getattr(args, name))
def options(all, names, prefix='--'): """ Return a list of command-line options and their values. ======= =========================================================== all all[i] holds a list of parameter values in experiment no i names names[i] holds name of parameter no. i prefix an option equals prefix + name (prefix is '--' or '-') return cmd[i] holds -name value pairs of all parameters in experiment no. i ======= =========================================================== """ cmd = [] for experiment in all: cmd.append(' '.join([prefix + name + ' ' + repr(str2obj(value)) \ for name, value in zip(names, experiment)])) return cmd
class ReadCommandLine(ReadInput): def __init__(self, parameters): self.sys_argv = sys.argv[1:] # copy ReadInput.__init__(self, parameters) self._read_command_line() def _read_command_line(self): # make getopt list of options: option_names = [name + "=" for name in self.p] try: options, args = getopt.getopt(self.sys_argv, '', option_names) except getopt.GetoptError, e: print 'Error in command-line option:\n', e sys.exit(1) for option, value in options: for name in self.p: if option == "--" + name: self.p[name] = str2obj(value)
def read_dolfin_prmfile(filename): f = open(filename, 'r') lines = f.readlines() f.close() menus = {} heading = None for line in lines: # check for heading (new submenu): m = dolfin_heading_regex.search(line) if m: heading = m.group(1) menus[heading] = [] # check for parameter definition: m = dolfin_addline_regex.search(line) if m: if not heading: print 'No heading before "add" call - error' sys.exit(1) name = m.group(1).strip() value = m.group(2).strip() if value[0] == '"' and value[-1] == '"': # C++ string, strip "" value = value[1:-1] #if value == 'true': value = True #if value == 'false': value = False # find out if value is float or int or string? value = str2obj(value) if isinstance(value, float): s2t = float elif isinstance(value, bool): s2t = str2bool elif isinstance(value, int): s2t = int elif isinstance(value, basestring): s2t = str menus[heading].append((name, value, s2t)) return menus
def input2values(s): """ Translate a string s with multiple loop syntax into a list of single values (for the corresponding parameter). Multiple loop syntax: '-1 & -3.4 & 20 & 70 & [0:10,1.3] & [0:10] & 11.76' That is, & is delimiter between different values, [0:10,1.3] generates a loop from 0 up to and including 10 with steps 1.3, [0:10] generates the integers 1,2,...,10. Interactive session:: >>> input2values('-1 & -3.4 & 20 & 70 & [0:10,1.3] & [0:10] & 11.76') [-1, -3.3999999999999999, 20, 70, 0, 1.3, 2.6000000000000001, 3.9000000000000004, 5.2000000000000002, 6.5, 7.7999999999999998, 9.0999999999999996, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11.76] >>> p = {'w': '[0.7:1.3,0.1]', 'b': '1 & 0.3 & 0', 'func': 'y & siny'} >>> print input2values(p['w']) [0.69999999999999996, 0.79999999999999993, 0.89999999999999991, 0.99999999999999989, 1.0999999999999999, 1.2, 1.3] >>> print input2values(p['b']) [1, 0.29999999999999999, 0] >>> print input2values(p['func']) ['y', 'siny'] >>> prm_values = [(name, input2values(p[name])) for name in p] >>> prm_values [('b', [1, 0.29999999999999999, 0]), ('func', ['y', 'siny']), ('w', [0.69999999999999996, 0.79999999999999993, 0.89999999999999991, 0.99999999999999989, 1.0999999999999999, 1.2, 1.3])] """ if not isinstance(s, str): return s items = s.split('&') values = [] for i in items: i = i.strip() # white space has no meaning # is i a loop? m = re.search(r'\[(.+):([^,]+),?(.*)\]',i) if m: # the group are numbers, take eval to get right type start = eval(m.group(1)) stop = eval(m.group(2)) try: incr = m.group(3).strip() incr_op = operator.add if incr[0] == '*': incr_op = operator.mul incr = incr[1:] elif incr[0] == '+' or incr[0] == '-': incr = incr[1:] incr = eval(incr) except: incr = 1 r = start while (r <= stop and start <= stop) or \ (r >= stop and start >= stop): values.append(r) r = incr_op(r, incr) else: # just an ordinary item, convert i to right type: values.append(str2obj(i)) # return list only if there are more than one item: if len(values) == 1: return values[0] else: return values
def _read_file(self, infile=sys.stdin): for line in infile: if "=" in line: name, value = line.split("=") self.p[name.strip()] = str2obj(value.strip())
def _prompt_user(self): for name in self.p: self.p[name] = str2obj(raw_input("Give " + name + ": "))
def _read_from_GUI(self, event=None): for name in self.p: self.p[name] = str2obj(self.widget_dict[name].get()) self.root.destroy()
def input2values(s): """ Translate a string s with multiple loop syntax into a list of single values (for the corresponding parameter). Multiple loop syntax: '-1 & -3.4 & 20 & 70 & [0:10,1.3] & [0:10] & 11.76' That is, & is delimiter between different values, [0:10,1.3] generates a loop from 0 up to and including 10 with steps 1.3, [0:10] generates the integers 1,2,...,10. Interactive session:: >>> input2values('-1 & -3.4 & 20 & 70 & [0:10,1.3] & [0:10] & 11.76') [-1, -3.3999999999999999, 20, 70, 0, 1.3, 2.6000000000000001, 3.9000000000000004, 5.2000000000000002, 6.5, 7.7999999999999998, 9.0999999999999996, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11.76] >>> p = {'w': '[0.7:1.3,0.1]', 'b': '1 & 0.3 & 0', 'func': 'y & siny'} >>> print input2values(p['w']) [0.69999999999999996, 0.79999999999999993, 0.89999999999999991, 0.99999999999999989, 1.0999999999999999, 1.2, 1.3] >>> print input2values(p['b']) [1, 0.29999999999999999, 0] >>> print input2values(p['func']) ['y', 'siny'] >>> prm_values = [(name, input2values(p[name])) for name in p] >>> prm_values [('b', [1, 0.29999999999999999, 0]), ('func', ['y', 'siny']), ('w', [0.69999999999999996, 0.79999999999999993, 0.89999999999999991, 0.99999999999999989, 1.0999999999999999, 1.2, 1.3])] """ if not isinstance(s, str): return s items = s.split('&') values = [] for i in items: i = i.strip() # white space has no meaning # is i a loop? m = re.search(r'\[(.+):([^,]+),?(.*)\]', i) if m: # the group are numbers, take eval to get right type start = eval(m.group(1)) stop = eval(m.group(2)) try: incr = m.group(3).strip() incr_op = operator.add if incr[0] == '*': incr_op = operator.mul incr = incr[1:] elif incr[0] == '+' or incr[0] == '-': incr = incr[1:] incr = eval(incr) except: incr = 1 r = start while (r <= stop and start <= stop) or \ (r >= stop and start >= stop): values.append(r) r = incr_op(r, incr) else: # just an ordinary item, convert i to right type: values.append(str2obj(i)) # return list only if there are more than one item: if len(values) == 1: return values[0] else: return values
from scitools.misc import str2obj var = str2obj(raw_input('Give value: ')) print 'Got a %s with value %s' % (type(var), var)