Пример #1
0
    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))
Пример #3
0
    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))
Пример #4
0
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
Пример #5
0
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
Пример #6
0
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)
Пример #7
0
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 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
Пример #9
0
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
Пример #10
0
 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())
Пример #11
0
 def _prompt_user(self):
     for name in self.p:
         self.p[name] = str2obj(raw_input("Give " + name + ": "))
Пример #12
0
 def _read_from_GUI(self, event=None):
     for name in self.p:
         self.p[name] = str2obj(self.widget_dict[name].get())
     self.root.destroy()
Пример #13
0
 def _prompt_user(self):
     for name in self.p:
         self.p[name] = str2obj(raw_input("Give " + name + ": "))
Пример #14
0
 def _read_from_GUI(self, event=None):
     for name in self.p:
         self.p[name] = str2obj(self.widget_dict[name].get())
     self.root.destroy()
Пример #15
0
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
Пример #16
0
from scitools.misc import str2obj
var = str2obj(raw_input('Give value: '))
print 'Got a %s with value %s' % (type(var), var)
Пример #17
0
 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())