Changeset 2279


Ignore:
Timestamp:
Feb 8, 2010 8:07:14 AM (10 years ago)
Author:
wehart
Message:

Adding support for a basic 'import' command.

Location:
coopr.pyomo/trunk/coopr/pyomo
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • coopr.pyomo/trunk/coopr/pyomo/base/param.py

    r2142 r2279  
    282282           raise ValueError, "Invalid value "+str(value)+" for parameter "+self.name
    283283        return False
     284
     285    def data(self):
     286        tmp = {}
     287        for key in self.keys():
     288            tmp[key] = self._paramval[key].value
     289        return tmp
    284290       
    285291
  • coopr.pyomo/trunk/coopr/pyomo/data/parse_datacmds.py

    r2278 r2279  
    5656    "QUOTEDSTRING",
    5757    "FILENAME",
     58    "EQ",
    5859    "TR",
    5960    "NONWORD",
     
    6869t_COLON     = r":"
    6970t_COLONEQ   = r":="
     71t_EQ        = r"="
    7072t_TR        = r"\(tr\)"
    7173#t_LT        = r"<"
     
    150152
    151153def p_importdecl(p):
    152     '''importdecl : filename items
     154    '''importdecl : filename import_options
    153155                  | filename
    154     '''
    155     p[0] = p[1]
     156                  | filename import_options COLON indices variable variable_options
     157                  | filename COLON indices variable variable_options
     158    '''
     159    p[0] = p[1]
     160
     161def p_import_options(p):
     162    '''import_options : WORD EQ STRING import_options
     163                      | WORD EQ QUOTEDSTRING import_options
     164                      | WORD EQ STRING
     165                      | WORD EQ QUOTEDSTRING
     166    '''
     167    if len(p) == 3:
     168        p[0] = [p[1], p[3]]
     169    else:
     170        p[0] = [p[1], p[3]] + p[4]
     171
     172def p_variable_options(p):
     173    '''variable_options : variable variable_options
     174                        | variable
     175    '''
     176    if len(p) == 2:
     177        p[0] = [p[1]]
     178    else:
     179        p[0] = [p[1]] + p[2]
     180
     181def p_variable(p):
     182    '''variable : WORD
     183                | WORD COLON WORD
     184    '''
     185    p[0] = p[1:]
     186
     187def p_indices(p):
     188    '''indices : LBRACKET WORD index_list RBRACKET'''
     189    p[0] = p[1:]
     190
     191def p_index_list(p):
     192    '''index_list : COMMA WORD index_list
     193                  |
     194    '''
     195    p[0] = p[1:]
    156196
    157197def p_items(p):
  • coopr.pyomo/trunk/coopr/pyomo/tests/unit/test_modeldata.py

    r2278 r2279  
    287287
    288288    def test_tableA(self):
     289        """Importing a single column of data"""
    289290        pyutilib.misc.setup_redirect(currdir+'importA.dat')
    290291        print "import "+os.path.abspath(example_dir+'A.tab')+" ;"
     
    296297        os.remove(currdir+'importA.dat')
    297298
     299    def test_tableB(self):
     300        """Same as test_tableA"""
     301        pyutilib.misc.setup_redirect(currdir+'importB.dat')
     302        print "import "+os.path.abspath(example_dir+'B.tab')+" ;"
     303        pyutilib.misc.reset_redirect()
     304        model=Model()
     305        model.B = Set()
     306        instance = model.create(currdir+'importB.dat')
     307        self.failUnlessEqual(instance.B.data(), set([1, 2, 3]))
     308        os.remove(currdir+'importB.dat')
     309
     310    def Xtest_tableC(self):
     311        """Importing a multi-column table, where all columns are
     312        treated as values for a set with tuple values."""
     313        pyutilib.misc.setup_redirect(currdir+'importC.dat')
     314        print "import "+os.path.abspath(example_dir+'C.tab')+" : C:A,B ;"
     315        pyutilib.misc.reset_redirect()
     316        model=Model()
     317        model.A = Set()
     318        model.B = Set()
     319        model.C = model.A * model.B
     320        instance = model.create(currdir+'importC.dat')
     321        self.failUnlessEqual(instance.A.data(), set(['A1', 'A2', 'A3']))
     322        self.failUnlessEqual(instance.B.data(), set([1, 2, 3]))
     323        self.failUnlessEqual(instance.C.data(), set([('A1',1), ('A2',2), ('A3',3)]))
     324        os.remove(currdir+'importC.dat')
     325
     326    def test_tableS(self):
     327        """Importing a table, but only reporting the values for the non-index
     328        parameter columns.  The first column is assumed to represent an
     329        index column.  A missing value is represented in the column data."""
     330        pyutilib.misc.setup_redirect(currdir+'importS.dat')
     331        print "import "+os.path.abspath(example_dir+'S.tab')+" ;"
     332        pyutilib.misc.reset_redirect()
     333        model=Model()
     334        model.A = Set(initialize=['A1','A2','A3','A4'])
     335        model.S = Param(model.A)
     336        instance = model.create(currdir+'importS.dat')
     337        self.failUnlessEqual(instance.A.data(), set(['A1','A2','A3','A4']))
     338        self.failUnlessEqual(instance.S.data(), {'A1':3.3,'A3':3.5})
     339        os.remove(currdir+'importS.dat')
     340
     341    def test_tableXW(self):
     342        """Importing a table, but only reporting the values for the non-index
     343        parameter columns.  The first column is assumed to represent an
     344        index column."""
     345        pyutilib.misc.setup_redirect(currdir+'importXW.dat')
     346        print "import "+os.path.abspath(example_dir+'XW.tab')+" ;"
     347        pyutilib.misc.reset_redirect()
     348        model=Model()
     349        model.A = Set(initialize=['A1','A2','A3','A4'])
     350        model.X = Param(model.A)
     351        model.W = Param(model.A)
     352        instance = model.create(currdir+'importXW.dat')
     353        self.failUnlessEqual(instance.A.data(), set(['A1','A2','A3','A4']))
     354        self.failUnlessEqual(instance.X.data(), {'A1':3.3,'A2':3.4,'A3':3.5})
     355        self.failUnlessEqual(instance.W.data(), {'A1':4.3,'A2':4.4,'A3':4.5})
     356        os.remove(currdir+'importXW.dat')
     357
     358    def test_tableY(self):
     359        """Same as tableXW."""
     360        pyutilib.misc.setup_redirect(currdir+'importY.dat')
     361        print "import "+os.path.abspath(example_dir+'Y.tab')+" ;"
     362        pyutilib.misc.reset_redirect()
     363        model=Model()
     364        model.A = Set(initialize=['A1','A2','A3','A4'])
     365        model.Y = Param(model.A)
     366        instance = model.create(currdir+'importY.dat')
     367        self.failUnlessEqual(instance.A.data(), set(['A1','A2','A3','A4']))
     368        self.failUnlessEqual(instance.Y.data(), {'A1':3.3,'A2':3.4,'A3':3.5})
     369        os.remove(currdir+'importY.dat')
     370
    298371
    299372if __name__ == "__main__":
Note: See TracChangeset for help on using the changeset viewer.