source: coopr.pyomo/stable/2.2/coopr/pyomo/tests/unit/test_modeldata.py @ 2230

Last change on this file since 2230 was 2230, checked in by wehart, 11 years ago

Merged revisions 2208-2229 via svnmerge from
https://software.sandia.gov/svn/public/coopr/coopr.pyomo/trunk

........

r2209 | jwatson | 2010-01-30 17:01:12 -0700 (Sat, 30 Jan 2010) | 3 lines


Fix to new LP writer to output variable label, instead of name. The name has embedded quotes, which hoses all kinds of things. The label doesn't.

........

r2210 | jwatson | 2010-01-30 20:11:21 -0700 (Sat, 30 Jan 2010) | 3 lines


Additional minor fixings to make new LP writer work with PH - which it now does.

........

r2211 | jwatson | 2010-01-30 20:17:19 -0700 (Sat, 30 Jan 2010) | 3 lines


Suppressing warning for "constant constraint" when writing LP files - this happens all the time in PH and other contexts, where variable fixing is active.

........

r2213 | wehart | 2010-01-30 23:03:26 -0700 (Sat, 30 Jan 2010) | 2 lines


Adding the ability to process multiple *.dat files on the Pyomo command line

........

r2214 | wehart | 2010-01-31 14:44:12 -0700 (Sun, 31 Jan 2010) | 3 lines


Reworking the canonical expression definition to include a
dictionary from variable ID -> _VarValue object.

........

r2217 | wehart | 2010-01-31 21:48:34 -0700 (Sun, 31 Jan 2010) | 2 lines


Update to NL file writer, after recent changes in the canonical representation.

........

r2218 | wehart | 2010-01-31 22:11:59 -0700 (Sun, 31 Jan 2010) | 7 lines


Reworking the symbol_map generated for the NL file.


Fixing the use of this within PyomoModel? when loading data.


Adding logic to specify the 'solver' option when an optimization interface
is specified (e.g. asl:cplexamp).

........

r2226 | wehart | 2010-01-31 22:27:19 -0700 (Sun, 31 Jan 2010) | 2 lines


Removing some debugging IO.

........

r2227 | wehart | 2010-02-01 14:40:08 -0700 (Mon, 01 Feb 2010) | 7 lines


This is a major rework of the ModelData? logic. I've extracted the
actual operations for data loading into different plugins. These
plugins share a common code base for processing the data into a form that
Pyomo can use, but that logic is now separate from the ModelData? class itself.
This will provide a path-forward for cleaning up this code, as well as
modularizing the parsing of AMPL *.dat files.

........

r2228 | jwatson | 2010-02-01 14:49:40 -0700 (Mon, 01 Feb 2010) | 3 lines


Final fix to LP writer to (optionally) account for the models in which a variable originates - the PySP extensive form writer now passes all tests.

........

File size: 7.9 KB
Line 
1#
2# Unit Tests for ModelData objects
3#
4
5import unittest
6import os
7import sys
8from os.path import abspath, dirname
9coopr_dir=dirname(dirname(abspath(__file__)))+os.sep+".."+os.sep+".."
10sys.path.insert(0, coopr_dir)
11from coopr.pyomo import *
12import coopr
13
14currdir=dirname(abspath(__file__))+os.sep
15example_dir=coopr_dir+os.sep+"example"+os.sep+"pyomo"+os.sep+"tutorials"+os.sep+"tab"+os.sep
16
17try:
18  from win32com.client.dynamic import Dispatch
19  _win32com=True
20except:
21  _win32com=False #pragma:nocover
22
23
24class PyomoTableData(unittest.TestCase):
25
26    def run(self, result=None):
27        """ Disable the tests if win32com is not available """
28        if not _win32com:
29           return
30        unittest.TestCase.run(self,result)
31
32    def setUp(self):
33        pass
34
35    def construct(self,filename):
36        pass
37
38    def test_read_set(self):
39        td = TableData(filename=coopr_dir+"\\test\\acro\\unit\\Book1.xls",range="TheRange",set="X")
40        try:
41           td.open()
42           td.read()
43           td.close()
44           self.failUnlessEqual( td.data(), ['set', 'X', ':=', 'A1', 2.0, 3.0, 4.0, 'A5', 6.0, 7.0, 8.0, 'A9', 10.0, 11.0, 12.0, 'A13', 14.0, 15.0, 16.0])
45        except coopr.ApplicationError:
46           pass
47
48    def test_read_set2(self):
49        td = TableData(range="TheRange",set="X")
50        try:
51           td.open(filename=coopr_dir+"\\test\\acro\\unit\\Book1.xls")
52           td.read()
53           td.close()
54           self.failUnlessEqual( td.data(), ['set', 'X', ':=', 'A1', 2.0, 3.0, 4.0, 'A5', 6.0, 7.0, 8.0, 'A9', 10.0, 11.0, 12.0, 'A13', 14.0, 15.0, 16.0])
55        except coopr.ApplicationError:
56           pass
57
58    def test_read_param1(self):
59        td = TableData(filename=coopr_dir+"\\test\\acro\\unit\\Book1.xls",range="TheRange")
60        try:
61          td.open()
62          td.read()
63          td.close()
64          self.failUnlessEqual( td.data(), ['param', ':', 'bb', 'cc', 'dd', ':=', 'A1', 2.0, 3.0, 4.0, 'A5', 6.0, 7.0, 8.0, 'A9', 10.0, 11.0, 12.0, 'A13', 14.0, 15.0, 16.0])
65        except coopr.ApplicationError:
66          pass
67
68    def test_read_param2(self):
69        td = TableData(filename=coopr_dir+"\\test\\acro\\unit\\Book1.xls",range="TheRange",index="X")
70        try:
71          td.open()
72          td.read()
73          td.close()
74          self.failUnlessEqual( td.data(), ['param', ':', 'X', ':', 'bb', 'cc', 'dd', ':=', 'A1', 2.0, 3.0, 4.0, 'A5', 6.0, 7.0, 8.0, 'A9', 10.0, 11.0, 12.0, 'A13', 14.0, 15.0, 16.0])
75        except coopr.ApplicationError:
76          pass
77
78    def test_read_param3(self):
79        td = TableData(filename=coopr_dir+"\\test\\acro\\unit\\Book1.xls",range="TheRange",index="X", param="a")
80        try:
81          td.open()
82          td.read()
83          td.close()
84          self.failUnlessEqual( td.data(), ['param', ':', 'X', ':', 'a', ':=', 'A1', 2.0, 3.0, 4.0, 'A5', 6.0, 7.0, 8.0, 'A9', 10.0, 11.0, 12.0, 'A13', 14.0, 15.0, 16.0])
85        except coopr.ApplicationError:
86          pass
87
88    def test_read_param4(self):
89        td = TableData(filename=coopr_dir+"\\test\\acro\\unit\\Book1.xls",range="TheRange",index="X", param=("a","b"))
90        try:
91          td.open()
92          td.read()
93          td.close()
94          self.failUnlessEqual( td.data(), ['param', ':', 'X', ':', 'a', 'b', ':=', 'A1', 2.0, 3.0, 4.0, 'A5', 6.0, 7.0, 8.0, 'A9', 10.0, 11.0, 12.0, 'A13', 14.0, 15.0, 16.0])
95        except coopr.ApplicationError:
96          pass
97
98    def test_read_array1(self):
99        td = TableData(filename=coopr_dir+"\\test\\acro\\unit\\Book1.xls",range="TheRange",param="X", format="array")
100        try:
101          td.open()
102          td.read()
103          td.close()
104          self.failUnlessEqual( td.data(), ['param', 'X', ':', 'bb', 'cc', 'dd', ':=', 'A1', 2.0, 3.0, 4.0, 'A5', 6.0, 7.0, 8.0, 'A9', 10.0, 11.0, 12.0, 'A13', 14.0, 15.0, 16.0])
105        except coopr.ApplicationError:
106          pass
107
108    def test_read_array2(self):
109        td = TableData(filename=coopr_dir+"\\test\\acro\\unit\\Book1.xls",range="TheRange",param="X",format="transposed_array")
110        try:
111          td.open()
112          td.read()
113          td.close()
114          self.failUnlessEqual( td.data(), ['param', 'X', '(tr)',':', 'bb', 'cc', 'dd', ':=', 'A1', 2.0, 3.0, 4.0, 'A5', 6.0, 7.0, 8.0, 'A9', 10.0, 11.0, 12.0, 'A13', 14.0, 15.0, 16.0])
115        except coopr.ApplicationError:
116          pass
117
118    def test_error1(self):
119        td = TableData(filename="bad")
120        try:
121            td.open()
122            self.fail("Expected IOError because of bad file")
123        except IOError:
124            pass
125
126    def test_error2(self):
127        td = TableData()
128        try:
129            td.open()
130            self.fail("Expected IOError because no file specified")
131        except IOError:
132            pass
133
134    def test_error3(self):
135        td = TableData(filename=currdir+"display.txt")
136        try:
137            td.open()
138            self.fail("Expected IOError because of bad file type")
139        except IOError:
140            pass
141
142    def test_error4(self):
143        td = TableData(filename=currdir+"dummy")
144        try:
145            td.open()
146            self.fail("Expected IOError because of bad file type")
147        except IOError:
148            pass
149
150    def test_error5(self):
151        td = TableData(filename=example_dir+"D.tab", param="D", format="foo")
152        td.open()
153        try:
154            td.read()
155            self.fail("Expected IOError because of bad format")
156        except ValueError:
157            pass
158
159    def test_error7(self):
160        td = TableData(filename=example_dir+"D.tab", set="D", format="foo")
161        td.open()
162        try:
163            td.read()
164            self.fail("Expected IOError because of bad format")
165        except ValueError:
166            pass
167
168
169
170class PyomoModelData(unittest.TestCase):
171
172    def test_md1(self):
173        md = ModelData()
174        md.add(example_dir+"A.tab")
175        try:
176            md.read()
177            self.fail("Must specify a model")
178        except ValueError:
179            pass
180        model=Model()
181        try:
182            md.read(model)
183            self.fail("Expected IOError")
184        except IOError:
185            pass
186        model.A=Set()
187
188    def test_md2(self):
189        md = ModelData()
190        md.add(currdir+"data1.dat")
191        model=Model()
192        model.A=Set()
193        md.read(model)
194
195    def test_md3(self):
196        md = ModelData()
197        md.add(currdir+"data2.dat")
198        model=Model()
199        model.A=Set()
200        try:
201            md.read(model)
202            self.fail("Expected error because of extraneous text")
203        except IOError:
204            pass
205
206    def test_md4(self):
207        md = ModelData()
208        md.add(currdir+"data3.dat")
209        model=Model()
210        model.A=Set()
211        model.B=Set()
212        model.C=Set()
213        md.read(model)
214
215    def test_md5(self):
216        md = ModelData()
217        md.add(currdir+"data4.dat")
218        model=Model()
219        model.A=Set()
220        try:
221            md.read(model)
222        except ValueError:
223            pass
224
225    def test_md6(self):
226        md = ModelData()
227        md.add(currdir+"data5.dat")
228        model=Model()
229        model.A=Set()
230        try:
231            md.read(model)
232        except ValueError:
233            pass
234
235    def test_md7(self):
236        md = ModelData()
237        md.add(currdir+"data1.tab")
238        model=Model()
239        try:
240            md.read(model)
241            self.fail("Expected IOError")
242        except IOError:
243            pass
244
245    def test_md8(self):
246        md = ModelData()
247        md.add(currdir+"data6.dat")
248        model=Model()
249        model.A=Set()
250        try:
251            md.read(model)
252            self.fail("Expected IOError")
253        except IOError:
254            pass
255
256    def test_md9(self):
257        md = ModelData()
258        md.add(currdir+"data7.dat")
259        model=Model()
260        model.A=Set()
261        model.B=Param(model.A)
262        md.read(model)
263
264    def test_md10(self):
265        md = ModelData()
266        md.add(currdir+"data8.dat")
267        model=Model()
268        model.A=Param(within=Boolean)
269        model.B=Param(within=Boolean)
270        md.read(model)
271
272
273if __name__ == "__main__":
274   unittest.main()
275
Note: See TracBrowser for help on using the repository browser.