Changeset 2306


Ignore:
Timestamp:
Feb 9, 2010 10:58:42 PM (10 years ago)
Author:
wehart
Message:

Adding tests for importing CSV files.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • coopr.pyomo/trunk/coopr/pyomo/tests/unit/test_modeldata.py

    r2302 r2306  
    1515currdir=dirname(abspath(__file__))+os.sep
    1616example_dir=coopr_dir+os.sep+".."+os.sep+"examples"+os.sep+"pyomo"+os.sep+"tutorials"+os.sep+"tab"+os.sep
     17csv_dir=coopr_dir+os.sep+".."+os.sep+"examples"+os.sep+"pyomo"+os.sep+"tutorials"+os.sep+"csv"+os.sep
    1718tutorial_dir=coopr_dir+os.sep+".."+os.sep+"examples"+os.sep+"pyomo"+os.sep+"tutorials"+os.sep
    1819
     
    277278
    278279
    279 class TestImport(unittest.TestCase):
     280class TestTextImport(unittest.TestCase):
    280281
    281282    def test_tableA1(self):
     
    495496
    496497
    497 
    498 class TestSpreadsheet(unittest.TestCase):
    499 
    500     def run(self, result=None):
    501         """ Disable the tests if win32com is not available """
    502         if not _win32com:
    503            return
    504         unittest.TestCase.run(self,result)
     498class TestCsvImport(unittest.TestCase):
    505499
    506500    def test_tableA1(self):
    507501        """Importing a single column of data"""
    508502        pyutilib.misc.setup_redirect(currdir+'importA1.dat')
    509         print "import "+os.path.abspath(tutorial_dir+'excel.xls')+" range=Atable format=set: A;"
     503        print "import "+os.path.abspath(csv_dir+'A.csv')+" format=set: A;"
    510504        pyutilib.misc.reset_redirect()
    511505        model=Model()
     
    518512        """Importing a single column of data"""
    519513        pyutilib.misc.setup_redirect(currdir+'importA2.dat')
    520         print "import "+os.path.abspath(tutorial_dir+'excel.xls')+" range=Atable ;"
     514        print "import "+os.path.abspath(csv_dir+'A.csv')+" ;"
    521515        pyutilib.misc.reset_redirect()
    522516        model=Model()
     
    532526        """Importing a single column of data"""
    533527        pyutilib.misc.setup_redirect(currdir+'importA3.dat')
    534         print "import "+os.path.abspath(tutorial_dir+'excel.xls')+" range=Atable : A ;"
     528        print "import "+os.path.abspath(csv_dir+'A.csv')+" : A ;"
    535529        pyutilib.misc.reset_redirect()
    536530        model=Model()
     
    546540        """Same as test_tableA"""
    547541        pyutilib.misc.setup_redirect(currdir+'importB.dat')
    548         print "import "+os.path.abspath(tutorial_dir+'excel.xls')+" range=Btable format=set:B;"
     542        print "import "+os.path.abspath(csv_dir+'B.csv')+" format=set:B;"
    549543        pyutilib.misc.reset_redirect()
    550544        model=Model()
     
    558552        treated as values for a set with tuple values."""
    559553        pyutilib.misc.setup_redirect(currdir+'importC.dat')
    560         print "import "+os.path.abspath(tutorial_dir+'excel.xls')+" range=Ctable format=set: C ;"
     554        print "import "+os.path.abspath(csv_dir+'C.csv')+" format=set: C ;"
    561555        pyutilib.misc.reset_redirect()
    562556        model=Model()
     
    569563        """Importing a 2D array of data as a set."""
    570564        pyutilib.misc.setup_redirect(currdir+'importD.dat')
    571         print "import "+os.path.abspath(tutorial_dir+'excel.xls')+" range=Dtable format=set_array: C ;"
     565        print "import "+os.path.abspath(csv_dir+'D.csv')+" format=set_array: C ;"
    572566        pyutilib.misc.reset_redirect()
    573567        model=Model()
     
    580574        """Importing a single parameter"""
    581575        pyutilib.misc.setup_redirect(currdir+'importZ.dat')
    582         print "import "+os.path.abspath(tutorial_dir+'excel.xls')+" range=Zparam format=param: Z ;"
     576        print "import "+os.path.abspath(csv_dir+'Z.csv')+" format=param: Z ;"
    583577        pyutilib.misc.reset_redirect()
    584578        model=Model()
     
    591585        """Same as tableXW."""
    592586        pyutilib.misc.setup_redirect(currdir+'importY.dat')
    593         print "import "+os.path.abspath(tutorial_dir+'excel.xls')+" range=Ytable : [A] Y;"
     587        print "import "+os.path.abspath(csv_dir+'Y.csv')+" : [A] Y;"
    594588        pyutilib.misc.reset_redirect()
    595589        model=Model()
     
    606600        index column."""
    607601        pyutilib.misc.setup_redirect(currdir+'importXW.dat')
    608         print "import "+os.path.abspath(tutorial_dir+'excel.xls')+" range=XWtable : [A] X W;"
     602        print "import "+os.path.abspath(csv_dir+'XW.csv')+": [A] X W;"
    609603        pyutilib.misc.reset_redirect()
    610604        model=Model()
     
    621615        """Like test_tableXW_1, except that set A is not defined."""
    622616        pyutilib.misc.setup_redirect(currdir+'importXW.dat')
    623         print "import "+os.path.abspath(tutorial_dir+'excel.xls')+" range=XWtable : [A] X W;"
     617        print "import "+os.path.abspath(csv_dir+'XW.csv')+": [A] X W;"
    624618        pyutilib.misc.reset_redirect()
    625619        model=Model()
     
    636630        """Like test_tableXW_1, except that set A is defined in the import statment."""
    637631        pyutilib.misc.setup_redirect(currdir+'importXW.dat')
    638         print "import "+os.path.abspath(tutorial_dir+'excel.xls')+" range=XWtable: A=[A] X W;"
     632        print "import "+os.path.abspath(csv_dir+'XW.csv')+": A=[A] X W;"
    639633        pyutilib.misc.reset_redirect()
    640634        model=Model()
     
    651645        """Like test_tableXW_1, except that set A is defined in the import statment and all values are mapped."""
    652646        pyutilib.misc.setup_redirect(currdir+'importXW.dat')
    653         print "import "+os.path.abspath(tutorial_dir+'excel.xls')+" range=XWtable: B=[A] R=X S=W;"
     647        print "import "+os.path.abspath(csv_dir+'XW.csv')+": B=[A] R=X S=W;"
    654648        pyutilib.misc.reset_redirect()
    655649        model=Model()
     
    666660        """Importing a 2D array of parameters that are transposed."""
    667661        pyutilib.misc.setup_redirect(currdir+'importT.dat')
    668         print "import "+os.path.abspath(tutorial_dir+'excel.xls')+" range=Ttable format=transposed_array : T;"
     662        print "import "+os.path.abspath(csv_dir+'T.csv')+" format=transposed_array : T;"
    669663        pyutilib.misc.reset_redirect()
    670664        model=Model()
     
    679673        """Importing a 2D array of parameters."""
    680674        pyutilib.misc.setup_redirect(currdir+'importU.dat')
    681         print "import "+os.path.abspath(tutorial_dir+'excel.xls')+" range=Utable format=array : U;"
     675        print "import "+os.path.abspath(csv_dir+'U.csv')+" format=array : U;"
    682676        pyutilib.misc.reset_redirect()
    683677        model=Model()
     
    694688        index column.  A missing value is represented in the column data."""
    695689        pyutilib.misc.setup_redirect(currdir+'importS.dat')
    696         print "import "+os.path.abspath(tutorial_dir+'excel.xls')+" range=Stable : [A] S ;"
     690        print "import "+os.path.abspath(csv_dir+'S.csv')+": [A] S ;"
    697691        pyutilib.misc.reset_redirect()
    698692        model=Model()
     
    707701        """Importing a table that has multiple indexing columns"""
    708702        pyutilib.misc.setup_redirect(currdir+'importPO.dat')
    709         print "import "+os.path.abspath(tutorial_dir+'excel.xls')+" range=POtable : J=[A,B] P O;"
     703        print "import "+os.path.abspath(csv_dir+'PO.csv')+" : J=[A,B] P O;"
    710704        pyutilib.misc.reset_redirect()
    711705        model=Model()
     
    720714
    721715
    722 class TestModelData(unittest.TestCase):
     716
     717class TestSpreadsheet(unittest.TestCase):
     718
     719    def run(self, result=None):
     720        """ Disable the tests if win32com is not available """
     721        if not _win32com:
     722           return
     723        unittest.TestCase.run(self,result)
    723724
    724725    def test_tableA1(self):
    725726        """Importing a single column of data"""
    726         md = ModelData()
    727         md.add(os.path.abspath(example_dir+'A.tab'), format='set', set='A')
    728         model=Model()
    729         model.A = Set()
    730         md.read(model)
    731         instance = model.create(md)
     727        pyutilib.misc.setup_redirect(currdir+'importA1.dat')
     728        print "import "+os.path.abspath(tutorial_dir+'excel.xls')+" range=Atable format=set: A;"
     729        pyutilib.misc.reset_redirect()
     730        model=Model()
     731        model.A = Set()
     732        instance = model.create(currdir+'importA1.dat')
    732733        self.failUnlessEqual(instance.A.data(), set(['A1', 'A2', 'A3']))
     734        os.remove(currdir+'importA1.dat')
    733735
    734736    def test_tableA2(self):
    735737        """Importing a single column of data"""
    736         md = ModelData()
    737         md.add(os.path.abspath(example_dir+'A.tab'))
    738         model=Model()
    739         model.A = Set()
    740         try:
    741             md.read(model)
    742             instance = model.create(md)
     738        pyutilib.misc.setup_redirect(currdir+'importA2.dat')
     739        print "import "+os.path.abspath(tutorial_dir+'excel.xls')+" range=Atable ;"
     740        pyutilib.misc.reset_redirect()
     741        model=Model()
     742        model.A = Set()
     743        try:
     744            instance = model.create(currdir+'importA2.dat')
    743745            self.fail("Should fail because no set name is specified")
    744746        except IOError:
    745747            pass
     748        os.remove(currdir+'importA2.dat')
    746749
    747750    def test_tableA3(self):
    748751        """Importing a single column of data"""
    749         md = ModelData()
    750         md.add(os.path.abspath(example_dir+'A.tab'), set='A')
    751         model=Model()
    752         model.A = Set()
    753         try:
    754             md.read(model)
    755             instance = model.create(md)
     752        pyutilib.misc.setup_redirect(currdir+'importA3.dat')
     753        print "import "+os.path.abspath(tutorial_dir+'excel.xls')+" range=Atable : A ;"
     754        pyutilib.misc.reset_redirect()
     755        model=Model()
     756        model.A = Set()
     757        try:
     758            instance = model.create(currdir+'importA3.dat')
    756759            self.fail("Should fail because no index is specified")
    757760        except IOError:
    758761            pass
     762        os.remove(currdir+'importA3.dat')
    759763
    760764    def test_tableB(self):
    761765        """Same as test_tableA"""
    762         md = ModelData()
    763         md.add(os.path.abspath(example_dir+'B.tab'), format='set', set='B')
    764         model=Model()
    765         model.B = Set()
    766         md.read(model)
    767         instance = model.create(md)
     766        pyutilib.misc.setup_redirect(currdir+'importB.dat')
     767        print "import "+os.path.abspath(tutorial_dir+'excel.xls')+" range=Btable format=set:B;"
     768        pyutilib.misc.reset_redirect()
     769        model=Model()
     770        model.B = Set()
     771        instance = model.create(currdir+'importB.dat')
    768772        self.failUnlessEqual(instance.B.data(), set([1, 2, 3]))
     773        os.remove(currdir+'importB.dat')
    769774
    770775    def test_tableC(self):
    771776        """Importing a multi-column table, where all columns are
    772777        treated as values for a set with tuple values."""
    773         md = ModelData()
    774         md.add(os.path.abspath(example_dir+'C.tab'), format='set', set='C')
     778        pyutilib.misc.setup_redirect(currdir+'importC.dat')
     779        print "import "+os.path.abspath(tutorial_dir+'excel.xls')+" range=Ctable format=set: C ;"
     780        pyutilib.misc.reset_redirect()
    775781        model=Model()
    776782        model.C = Set(dimen=2)
    777         md.read(model)
    778         instance = model.create(md)
     783        instance = model.create(currdir+'importC.dat')
    779784        self.failUnlessEqual(instance.C.data(), set([('A1',1), ('A1',2), ('A1',3), ('A2',1), ('A2',2), ('A2',3), ('A3',1), ('A3',2), ('A3',3)]))
     785        os.remove(currdir+'importC.dat')
    780786
    781787    def test_tableD(self):
    782788        """Importing a 2D array of data as a set."""
    783         md = ModelData()
    784         md.add(os.path.abspath(example_dir+'D.tab'), format='set_array', set='C')
     789        pyutilib.misc.setup_redirect(currdir+'importD.dat')
     790        print "import "+os.path.abspath(tutorial_dir+'excel.xls')+" range=Dtable format=set_array: C ;"
     791        pyutilib.misc.reset_redirect()
    785792        model=Model()
    786793        model.C = Set(dimen=2)
    787         md.read(model)
    788         instance = model.create(md)
     794        instance = model.create(currdir+'importD.dat')
    789795        self.failUnlessEqual(instance.C.data(), set([('A1',1), ('A2',2), ('A3',3)]))
     796        os.remove(currdir+'importD.dat')
    790797
    791798    def test_tableZ(self):
    792799        """Importing a single parameter"""
    793         md = ModelData()
    794         md.add(os.path.abspath(example_dir+'Z.tab'), format='param', param='Z')
     800        pyutilib.misc.setup_redirect(currdir+'importZ.dat')
     801        print "import "+os.path.abspath(tutorial_dir+'excel.xls')+" range=Zparam format=param: Z ;"
     802        pyutilib.misc.reset_redirect()
    795803        model=Model()
    796804        model.Z = Param(default=99.0)
    797         md.read(model)
    798         instance = model.create(md)
     805        instance = model.create(currdir+'importZ.dat')
    799806        self.failUnlessEqual(instance.Z.value, 1.1)
     807        os.remove(currdir+'importZ.dat')
    800808
    801809    def test_tableY(self):
    802810        """Same as tableXW."""
    803         md = ModelData()
    804         md.add(os.path.abspath(example_dir+'Y.tab'), index=['A'], param=['Y'])
     811        pyutilib.misc.setup_redirect(currdir+'importY.dat')
     812        print "import "+os.path.abspath(tutorial_dir+'excel.xls')+" range=Ytable : [A] Y;"
     813        pyutilib.misc.reset_redirect()
    805814        model=Model()
    806815        model.A = Set(initialize=['A1','A2','A3','A4'])
    807816        model.Y = Param(model.A)
    808         md.read(model)
    809         instance = model.create(md)
     817        instance = model.create(currdir+'importY.dat')
    810818        self.failUnlessEqual(instance.A.data(), set(['A1','A2','A3','A4']))
    811819        self.failUnlessEqual(instance.Y.data(), {'A1':3.3,'A2':3.4,'A3':3.5})
     820        os.remove(currdir+'importY.dat')
    812821
    813822    def test_tableXW_1(self):
     
    815824        parameter columns.  The first column is assumed to represent an
    816825        index column."""
    817         md = ModelData()
    818         md.add(os.path.abspath(example_dir+'XW.tab'), index=['A'], param=['X','W'])
     826        pyutilib.misc.setup_redirect(currdir+'importXW.dat')
     827        print "import "+os.path.abspath(tutorial_dir+'excel.xls')+" range=XWtable : [A] X W;"
     828        pyutilib.misc.reset_redirect()
    819829        model=Model()
    820830        model.A = Set(initialize=['A1','A2','A3','A4'])
    821831        model.X = Param(model.A)
    822832        model.W = Param(model.A)
    823         md.read(model)
    824         instance = model.create(md)
     833        instance = model.create(currdir+'importXW.dat')
    825834        self.failUnlessEqual(instance.A.data(), set(['A1','A2','A3','A4']))
    826835        self.failUnlessEqual(instance.X.data(), {'A1':3.3,'A2':3.4,'A3':3.5})
    827836        self.failUnlessEqual(instance.W.data(), {'A1':4.3,'A2':4.4,'A3':4.5})
     837        os.remove(currdir+'importXW.dat')
    828838
    829839    def test_tableXW_2(self):
    830840        """Like test_tableXW_1, except that set A is not defined."""
    831         md = ModelData()
    832         md.add(os.path.abspath(example_dir+'XW.tab'), index=['A'], param=['X','W'])
     841        pyutilib.misc.setup_redirect(currdir+'importXW.dat')
     842        print "import "+os.path.abspath(tutorial_dir+'excel.xls')+" range=XWtable : [A] X W;"
     843        pyutilib.misc.reset_redirect()
    833844        model=Model()
    834845        model.A = Set()
    835846        model.X = Param(model.A)
    836847        model.W = Param(model.A)
    837         md.read(model)
    838         instance = model.create(md)
     848        instance = model.create(currdir+'importXW.dat')
    839849        self.failUnlessEqual(instance.A.data(), set())
    840850        self.failUnlessEqual(instance.X.data(), {'A1':3.3,'A2':3.4,'A3':3.5})
    841851        self.failUnlessEqual(instance.W.data(), {'A1':4.3,'A2':4.4,'A3':4.5})
     852        os.remove(currdir+'importXW.dat')
    842853
    843854    def test_tableXW_3(self):
    844855        """Like test_tableXW_1, except that set A is defined in the import statment."""
    845         md = ModelData()
    846         md.add(os.path.abspath(example_dir+'XW.tab'), index_name='A', index=['A'], param=['X','W'])
     856        pyutilib.misc.setup_redirect(currdir+'importXW.dat')
     857        print "import "+os.path.abspath(tutorial_dir+'excel.xls')+" range=XWtable: A=[A] X W;"
     858        pyutilib.misc.reset_redirect()
    847859        model=Model()
    848860        model.A = Set()
    849861        model.X = Param(model.A)
    850862        model.W = Param(model.A)
    851         md.read(model)
    852         instance = model.create(md)
     863        instance = model.create(currdir+'importXW.dat')
    853864        self.failUnlessEqual(instance.A.data(), set(['A1','A2','A3']))
    854865        self.failUnlessEqual(instance.X.data(), {'A1':3.3,'A2':3.4,'A3':3.5})
    855866        self.failUnlessEqual(instance.W.data(), {'A1':4.3,'A2':4.4,'A3':4.5})
     867        os.remove(currdir+'importXW.dat')
    856868
    857869    def test_tableXW_4(self):
    858870        """Like test_tableXW_1, except that set A is defined in the import statment and all values are mapped."""
    859         md = ModelData()
    860         md.add(os.path.abspath(example_dir+'XW.tab'), index_name='B', index=['A'], param=['X','W'], param_name={'X':'R', 'W':'S'})
     871        pyutilib.misc.setup_redirect(currdir+'importXW.dat')
     872        print "import "+os.path.abspath(tutorial_dir+'excel.xls')+" range=XWtable: B=[A] R=X S=W;"
     873        pyutilib.misc.reset_redirect()
    861874        model=Model()
    862875        model.B = Set()
    863876        model.R = Param(model.B)
    864877        model.S = Param(model.B)
    865         md.read(model)
    866         instance = model.create(md)
     878        instance = model.create(currdir+'importXW.dat')
    867879        self.failUnlessEqual(instance.B.data(), set(['A1','A2','A3']))
    868880        self.failUnlessEqual(instance.R.data(), {'A1':3.3,'A2':3.4,'A3':3.5})
    869881        self.failUnlessEqual(instance.S.data(), {'A1':4.3,'A2':4.4,'A3':4.5})
     882        os.remove(currdir+'importXW.dat')
    870883
    871884    def test_tableT(self):
    872885        """Importing a 2D array of parameters that are transposed."""
    873         md = ModelData()
    874         md.add(os.path.abspath(example_dir+'T.tab'), format='transposed_array', param='T')
     886        pyutilib.misc.setup_redirect(currdir+'importT.dat')
     887        print "import "+os.path.abspath(tutorial_dir+'excel.xls')+" range=Ttable format=transposed_array : T;"
     888        pyutilib.misc.reset_redirect()
    875889        model=Model()
    876890        model.A = Set()
    877891        model.B = Set()
    878892        model.T = Param(model.A, model.B)
    879         md.read(model)
    880         instance = model.create(md)
     893        instance = model.create(currdir+'importT.dat')
    881894        self.failUnlessEqual(instance.T.data(), {('A2', 'I1'): 2.3, ('A1', 'I2'): 1.4, ('A1', 'I3'): 1.5, ('A1', 'I4'): 1.6, ('A1', 'I1'): 1.3, ('A3', 'I4'): 3.6, ('A2', 'I4'): 2.6, ('A3', 'I1'): 3.3, ('A2', 'I3'): 2.5, ('A3', 'I2'): 3.4, ('A2', 'I2'): 2.4, ('A3', 'I3'): 3.5})
     895        os.remove(currdir+'importT.dat')
    882896
    883897    def test_tableU(self):
    884898        """Importing a 2D array of parameters."""
    885         md = ModelData()
    886         md.add(os.path.abspath(example_dir+'T.tab'), format='array', param='U')
     899        pyutilib.misc.setup_redirect(currdir+'importU.dat')
     900        print "import "+os.path.abspath(tutorial_dir+'excel.xls')+" range=Utable format=array : U;"
     901        pyutilib.misc.reset_redirect()
    887902        model=Model()
    888903        model.A = Set()
    889904        model.B = Set()
    890905        model.U = Param(model.A, model.B)
    891         md.read(model)
    892         instance = model.create(md)
     906        instance = model.create(currdir+'importU.dat')
    893907        self.failUnlessEqual(instance.U.data(), {('I2', 'A1'): 1.4, ('I3', 'A1'): 1.5, ('I3', 'A2'): 2.5, ('I4', 'A1'): 1.6, ('I3', 'A3'): 3.5, ('I1', 'A2'): 2.3, ('I4', 'A3'): 3.6, ('I1', 'A3'): 3.3, ('I4', 'A2'): 2.6, ('I2', 'A3'): 3.4, ('I1', 'A1'): 1.3, ('I2', 'A2'): 2.4})
     908        os.remove(currdir+'importU.dat')
    894909
    895910    def test_tableS(self):
     
    897912        parameter columns.  The first column is assumed to represent an
    898913        index column.  A missing value is represented in the column data."""
     914        pyutilib.misc.setup_redirect(currdir+'importS.dat')
     915        print "import "+os.path.abspath(tutorial_dir+'excel.xls')+" range=Stable : [A] S ;"
     916        pyutilib.misc.reset_redirect()
     917        model=Model()
     918        model.A = Set(initialize=['A1','A2','A3','A4'])
     919        model.S = Param(model.A)
     920        instance = model.create(currdir+'importS.dat')
     921        self.failUnlessEqual(instance.A.data(), set(['A1','A2','A3','A4']))
     922        self.failUnlessEqual(instance.S.data(), {'A1':3.3,'A3':3.5})
     923        os.remove(currdir+'importS.dat')
     924
     925    def test_tablePO(self):
     926        """Importing a table that has multiple indexing columns"""
     927        pyutilib.misc.setup_redirect(currdir+'importPO.dat')
     928        print "import "+os.path.abspath(tutorial_dir+'excel.xls')+" range=POtable : J=[A,B] P O;"
     929        pyutilib.misc.reset_redirect()
     930        model=Model()
     931        model.J = Set(dimen=2)
     932        model.P = Param(model.J)
     933        model.O = Param(model.J)
     934        instance = model.create(currdir+'importPO.dat')
     935        self.failUnlessEqual(instance.J.data(), set([('A3', 'B3'), ('A1', 'B1'), ('A2', 'B2')]) )
     936        self.failUnlessEqual(instance.P.data(), {('A3', 'B3'): 4.5, ('A1', 'B1'): 4.3, ('A2', 'B2'): 4.4} )
     937        self.failUnlessEqual(instance.O.data(), {('A3', 'B3'): 5.5, ('A1', 'B1'): 5.3, ('A2', 'B2'): 5.4})
     938        os.remove(currdir+'importPO.dat')
     939
     940
     941class TestModelData(unittest.TestCase):
     942
     943    def test_tableA1(self):
     944        """Importing a single column of data"""
     945        md = ModelData()
     946        md.add(os.path.abspath(example_dir+'A.tab'), format='set', set='A')
     947        model=Model()
     948        model.A = Set()
     949        md.read(model)
     950        instance = model.create(md)
     951        self.failUnlessEqual(instance.A.data(), set(['A1', 'A2', 'A3']))
     952
     953    def test_tableA2(self):
     954        """Importing a single column of data"""
     955        md = ModelData()
     956        md.add(os.path.abspath(example_dir+'A.tab'))
     957        model=Model()
     958        model.A = Set()
     959        try:
     960            md.read(model)
     961            instance = model.create(md)
     962            self.fail("Should fail because no set name is specified")
     963        except IOError:
     964            pass
     965
     966    def test_tableA3(self):
     967        """Importing a single column of data"""
     968        md = ModelData()
     969        md.add(os.path.abspath(example_dir+'A.tab'), set='A')
     970        model=Model()
     971        model.A = Set()
     972        try:
     973            md.read(model)
     974            instance = model.create(md)
     975            self.fail("Should fail because no index is specified")
     976        except IOError:
     977            pass
     978
     979    def test_tableB(self):
     980        """Same as test_tableA"""
     981        md = ModelData()
     982        md.add(os.path.abspath(example_dir+'B.tab'), format='set', set='B')
     983        model=Model()
     984        model.B = Set()
     985        md.read(model)
     986        instance = model.create(md)
     987        self.failUnlessEqual(instance.B.data(), set([1, 2, 3]))
     988
     989    def test_tableC(self):
     990        """Importing a multi-column table, where all columns are
     991        treated as values for a set with tuple values."""
     992        md = ModelData()
     993        md.add(os.path.abspath(example_dir+'C.tab'), format='set', set='C')
     994        model=Model()
     995        model.C = Set(dimen=2)
     996        md.read(model)
     997        instance = model.create(md)
     998        self.failUnlessEqual(instance.C.data(), set([('A1',1), ('A1',2), ('A1',3), ('A2',1), ('A2',2), ('A2',3), ('A3',1), ('A3',2), ('A3',3)]))
     999
     1000    def test_tableD(self):
     1001        """Importing a 2D array of data as a set."""
     1002        md = ModelData()
     1003        md.add(os.path.abspath(example_dir+'D.tab'), format='set_array', set='C')
     1004        model=Model()
     1005        model.C = Set(dimen=2)
     1006        md.read(model)
     1007        instance = model.create(md)
     1008        self.failUnlessEqual(instance.C.data(), set([('A1',1), ('A2',2), ('A3',3)]))
     1009
     1010    def test_tableZ(self):
     1011        """Importing a single parameter"""
     1012        md = ModelData()
     1013        md.add(os.path.abspath(example_dir+'Z.tab'), format='param', param='Z')
     1014        model=Model()
     1015        model.Z = Param(default=99.0)
     1016        md.read(model)
     1017        instance = model.create(md)
     1018        self.failUnlessEqual(instance.Z.value, 1.1)
     1019
     1020    def test_tableY(self):
     1021        """Same as tableXW."""
     1022        md = ModelData()
     1023        md.add(os.path.abspath(example_dir+'Y.tab'), index=['A'], param=['Y'])
     1024        model=Model()
     1025        model.A = Set(initialize=['A1','A2','A3','A4'])
     1026        model.Y = Param(model.A)
     1027        md.read(model)
     1028        instance = model.create(md)
     1029        self.failUnlessEqual(instance.A.data(), set(['A1','A2','A3','A4']))
     1030        self.failUnlessEqual(instance.Y.data(), {'A1':3.3,'A2':3.4,'A3':3.5})
     1031
     1032    def test_tableXW_1(self):
     1033        """Importing a table, but only reporting the values for the non-index
     1034        parameter columns.  The first column is assumed to represent an
     1035        index column."""
     1036        md = ModelData()
     1037        md.add(os.path.abspath(example_dir+'XW.tab'), index=['A'], param=['X','W'])
     1038        model=Model()
     1039        model.A = Set(initialize=['A1','A2','A3','A4'])
     1040        model.X = Param(model.A)
     1041        model.W = Param(model.A)
     1042        md.read(model)
     1043        instance = model.create(md)
     1044        self.failUnlessEqual(instance.A.data(), set(['A1','A2','A3','A4']))
     1045        self.failUnlessEqual(instance.X.data(), {'A1':3.3,'A2':3.4,'A3':3.5})
     1046        self.failUnlessEqual(instance.W.data(), {'A1':4.3,'A2':4.4,'A3':4.5})
     1047
     1048    def test_tableXW_2(self):
     1049        """Like test_tableXW_1, except that set A is not defined."""
     1050        md = ModelData()
     1051        md.add(os.path.abspath(example_dir+'XW.tab'), index=['A'], param=['X','W'])
     1052        model=Model()
     1053        model.A = Set()
     1054        model.X = Param(model.A)
     1055        model.W = Param(model.A)
     1056        md.read(model)
     1057        instance = model.create(md)
     1058        self.failUnlessEqual(instance.A.data(), set())
     1059        self.failUnlessEqual(instance.X.data(), {'A1':3.3,'A2':3.4,'A3':3.5})
     1060        self.failUnlessEqual(instance.W.data(), {'A1':4.3,'A2':4.4,'A3':4.5})
     1061
     1062    def test_tableXW_3(self):
     1063        """Like test_tableXW_1, except that set A is defined in the import statment."""
     1064        md = ModelData()
     1065        md.add(os.path.abspath(example_dir+'XW.tab'), index_name='A', index=['A'], param=['X','W'])
     1066        model=Model()
     1067        model.A = Set()
     1068        model.X = Param(model.A)
     1069        model.W = Param(model.A)
     1070        md.read(model)
     1071        instance = model.create(md)
     1072        self.failUnlessEqual(instance.A.data(), set(['A1','A2','A3']))
     1073        self.failUnlessEqual(instance.X.data(), {'A1':3.3,'A2':3.4,'A3':3.5})
     1074        self.failUnlessEqual(instance.W.data(), {'A1':4.3,'A2':4.4,'A3':4.5})
     1075
     1076    def test_tableXW_4(self):
     1077        """Like test_tableXW_1, except that set A is defined in the import statment and all values are mapped."""
     1078        md = ModelData()
     1079        md.add(os.path.abspath(example_dir+'XW.tab'), index_name='B', index=['A'], param=['X','W'], param_name={'X':'R', 'W':'S'})
     1080        model=Model()
     1081        model.B = Set()
     1082        model.R = Param(model.B)
     1083        model.S = Param(model.B)
     1084        md.read(model)
     1085        instance = model.create(md)
     1086        self.failUnlessEqual(instance.B.data(), set(['A1','A2','A3']))
     1087        self.failUnlessEqual(instance.R.data(), {'A1':3.3,'A2':3.4,'A3':3.5})
     1088        self.failUnlessEqual(instance.S.data(), {'A1':4.3,'A2':4.4,'A3':4.5})
     1089
     1090    def test_tableT(self):
     1091        """Importing a 2D array of parameters that are transposed."""
     1092        md = ModelData()
     1093        md.add(os.path.abspath(example_dir+'T.tab'), format='transposed_array', param='T')
     1094        model=Model()
     1095        model.A = Set()
     1096        model.B = Set()
     1097        model.T = Param(model.A, model.B)
     1098        md.read(model)
     1099        instance = model.create(md)
     1100        self.failUnlessEqual(instance.T.data(), {('A2', 'I1'): 2.3, ('A1', 'I2'): 1.4, ('A1', 'I3'): 1.5, ('A1', 'I4'): 1.6, ('A1', 'I1'): 1.3, ('A3', 'I4'): 3.6, ('A2', 'I4'): 2.6, ('A3', 'I1'): 3.3, ('A2', 'I3'): 2.5, ('A3', 'I2'): 3.4, ('A2', 'I2'): 2.4, ('A3', 'I3'): 3.5})
     1101
     1102    def test_tableU(self):
     1103        """Importing a 2D array of parameters."""
     1104        md = ModelData()
     1105        md.add(os.path.abspath(example_dir+'T.tab'), format='array', param='U')
     1106        model=Model()
     1107        model.A = Set()
     1108        model.B = Set()
     1109        model.U = Param(model.A, model.B)
     1110        md.read(model)
     1111        instance = model.create(md)
     1112        self.failUnlessEqual(instance.U.data(), {('I2', 'A1'): 1.4, ('I3', 'A1'): 1.5, ('I3', 'A2'): 2.5, ('I4', 'A1'): 1.6, ('I3', 'A3'): 3.5, ('I1', 'A2'): 2.3, ('I4', 'A3'): 3.6, ('I1', 'A3'): 3.3, ('I4', 'A2'): 2.6, ('I2', 'A3'): 3.4, ('I1', 'A1'): 1.3, ('I2', 'A2'): 2.4})
     1113
     1114    def test_tableS(self):
     1115        """Importing a table, but only reporting the values for the non-index
     1116        parameter columns.  The first column is assumed to represent an
     1117        index column.  A missing value is represented in the column data."""
    8991118        md = ModelData()
    9001119        md.add(os.path.abspath(example_dir+'S.tab'), index=['A'], param=['S'])
Note: See TracChangeset for help on using the changeset viewer.