source: coopr.pyomo/stable/2.3/coopr/pyomo/tests/unit/test_con.py @ 2433

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

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

........

r2399 | wehart | 2010-02-24 11:36:56 -0700 (Wed, 24 Feb 2010) | 2 lines


Adding a work-around when pstats cannot be imported.

........

r2400 | wehart | 2010-02-24 14:51:08 -0700 (Wed, 24 Feb 2010) | 2 lines


Misc documentation updates.

........

r2408 | wehart | 2010-02-28 05:41:04 -0700 (Sun, 28 Feb 2010) | 3 lines


Allow an earlier version of Python. I'm still not sure this is a good idea,
but it's necessary for Jython.

........

r2409 | wehart | 2010-02-28 05:42:33 -0700 (Sun, 28 Feb 2010) | 7 lines


Rework of profiling imports.


Refinement of Pyomo command-line parsing, which is more
specific now.


Adding automatic import of pyomo to package.

........

r2415 | jwatson | 2010-03-08 20:53:13 -0700 (Mon, 08 Mar 2010) | 3 lines


Significantly improved performance of PyomoModel? _clear_attribute method, mainly by eliminate unnecessary calls to it through _setattr_exec_.

........

r2416 | jwatson | 2010-03-09 16:45:22 -0700 (Tue, 09 Mar 2010) | 5 lines


Modified the AMPL dat file parser to instantiate the lexer and yaccer objects only once, for the lifetime of the module.


They were being inadvertently created at each invocation, which pyomo users wouldn't notice. But PySP users, who can be creating 1K or more instances, do!

........

r2422 | wehart | 2010-03-11 16:01:09 -0700 (Thu, 11 Mar 2010) | 3 lines


Rework of unit tests to (a) import pyutilib.th as 'unittest' and
(b) employ test skipping.

........

r2430 | wehart | 2010-03-11 23:38:22 -0700 (Thu, 11 Mar 2010) | 2 lines


Reworking class decorators.

........

File size: 12.1 KB
Line 
1#
2# Unit Tests for Elements of a Model
3#
4# TestSimpleCon                Class for testing single constraint
5# TestArrayCon                Class for testing array of constraint
6#
7
8import os
9import sys
10from os.path import abspath, dirname
11sys.path.insert(0, dirname(dirname(abspath(__file__)))+os.sep+".."+os.sep+"..")
12currdir = dirname(abspath(__file__))+os.sep
13
14from coopr.pyomo.base import IntegerSet
15from coopr.pyomo import *
16from coopr.opt import *
17from coopr.pyomo.base.var import _VarElement
18import pyutilib.th as unittest
19import pyutilib.services
20
21class PyomoModel(unittest.TestCase):
22
23    def setUp(self):
24        self.model = Model()
25
26    def construct(self,filename):
27        self.instance = self.model.create(filename)
28
29
30class TestSimpleCon(PyomoModel):
31
32    def setUp(self):
33        #
34        # Create Model
35        #
36        PyomoModel.setUp(self)
37
38    def tearDown(self):
39        pass
40
41    def test_rule1(self):
42        """Test rule option"""
43        def f(model):
44          ans=0
45          for i in model.x.keys():
46            ans = ans + model.x[i]
47          ans = ans >= 0
48          ans = ans <= 1
49          return ans
50        self.model.x = Var(RangeSet(1,4),initialize=2)
51        self.model.c = Constraint(rule=f)
52        self.instance = self.model.create()
53        try:
54          self.failUnlessEqual(self.instance.c(), 8)
55        except ValueError:
56          pass
57        else:
58          self.fail("test_rule_option")
59        self.instance.x.reset()
60        self.failUnlessEqual(self.instance.c(), 8)
61        self.failUnlessEqual(value(self.instance.c), 8)
62
63    def test_rule2(self):
64        """Test rule option"""
65        def f(model):
66          ans=0
67          for i in model.x.keys():
68            ans = ans + model.x[i]
69          return (0,ans,1)
70        self.model.x = Var(RangeSet(1,4),initialize=2)
71        self.model.c = Constraint(rule=f)
72        self.instance = self.model.create()
73        try:
74          self.failUnlessEqual(self.instance.c(), 8)
75        except ValueError:
76          pass
77        else:
78          self.fail("test_rule_option")
79        self.instance.x.reset()
80        self.failUnlessEqual(self.instance.c(), 8)
81        self.failUnlessEqual(value(self.instance.c), 8)
82
83    def test_rule3(self):
84        """Test rule option"""
85        def f(model):
86          ans=0
87          for i in model.x.keys():
88            ans = ans + model.x[i]
89          return (0,ans,None)
90        self.model.x = Var(RangeSet(1,4),initialize=2)
91        self.model.c = Constraint(rule=f)
92        self.instance = self.model.create()
93        try:
94          self.failUnlessEqual(self.instance.c(), 8)
95        except ValueError:
96          pass
97        else:
98          self.fail("test_rule_option")
99        self.instance.x.reset()
100        self.failUnlessEqual(self.instance.c(), 8)
101        self.failUnlessEqual(value(self.instance.c), 8)
102
103    def test_rule4(self):
104        """Test rule option"""
105        def f(model):
106          ans=0
107          for i in model.x.keys():
108            ans = ans + model.x[i]
109          return (None,ans,1)
110        self.model.x = Var(RangeSet(1,4),initialize=2)
111        self.model.c = Constraint(rule=f)
112        self.instance = self.model.create()
113        try:
114          self.failUnlessEqual(self.instance.c(), 8)
115        except ValueError:
116          pass
117        else:
118          self.fail("test_rule_option")
119        self.instance.x.reset()
120        self.failUnlessEqual(self.instance.c(), 8)
121        self.failUnlessEqual(value(self.instance.c), 8)
122
123    def test_rule5(self):
124        """Test rule option"""
125        def f(model):
126          ans=0
127          for i in model.x.keys():
128            ans = ans + model.x[i]
129          return (ans,1)
130        self.model.x = Var(RangeSet(1,4),initialize=2)
131        self.model.c = Constraint(rule=f)
132        self.instance = self.model.create()
133        try:
134          self.failUnlessEqual(self.instance.c(), 8)
135        except ValueError:
136          pass
137        else:
138          self.fail("test_rule_option")
139        self.instance.x.reset()
140        self.failUnlessEqual(self.instance.c(), 8)
141        self.failUnlessEqual(value(self.instance.c), 8)
142
143    def test_dim(self):
144        """Test dim method"""
145        self.model.c = Constraint()
146        self.instance = self.model.create()
147        self.failUnlessEqual(self.instance.c.dim(),0)
148
149    def test_keys(self):
150        """Test keys method"""
151        self.model.c = Constraint()
152        self.instance = self.model.create()
153        self.failUnlessEqual(self.instance.c.keys(),[])
154
155    def test_len(self):
156        """Test len method"""
157        self.model.c = Constraint()
158        self.instance = self.model.create()
159        self.failUnlessEqual(len(self.instance.c),0)
160        """Test rule option"""
161        def f(model):
162          ans=0
163          for i in model.x.keys():
164            ans = ans + model.x[i]
165          ans = ans == 0
166          return ans
167        self.model.x = Var(RangeSet(1,4),initialize=2)
168        self.model.c = Constraint(rule=f)
169        self.instance = self.model.create()
170        self.failUnlessEqual(len(self.instance.c),1)
171
172
173class TestArrayCon(PyomoModel):
174
175    def setUp(self):
176        #
177        # Create Model
178        #
179        PyomoModel.setUp(self)
180        self.model.A = Set(initialize=[1,2,3,4])
181
182    def tearDown(self):
183        pass
184
185    def test_rule_option1(self):
186        """Test rule option"""
187        def f(i,model):
188          ans=0
189          for j in model.x.keys():
190            ans = ans + model.x[j]
191          ans *= i
192          ans = ans < 0
193          ans = ans > 0
194          return ans
195        self.model.x = Var(RangeSet(1,4),initialize=2)
196        self.model.c = Constraint(self.model.A,rule=f)
197        self.instance = self.model.create()
198        try:
199            self.instance.c[1]()
200            self.fail("Expected ValueError")
201        except ValueError:
202            pass
203        self.instance.x.reset()
204        self.failUnlessEqual(self.instance.c[1](), 8)
205        self.failUnlessEqual(self.instance.c[2](), 16)
206        self.failUnlessEqual(value(self.instance.c[1]), 8)
207        self.failUnlessEqual(value(self.instance.c[2]), 16)
208        self.failUnlessEqual(len(self.instance.c), 4)
209
210    def test_rule_option2(self):
211        """Test rule option"""
212        def f(i,model):
213          if i%2 == 0:
214                return 0
215          ans=0
216          for j in model.x.keys():
217            ans = ans + model.x[j]
218          ans *= i
219          ans = ans < 0
220          ans = ans > 0
221          return ans
222        self.model.x = Var(RangeSet(1,4),initialize=2)
223        self.model.c = Constraint(self.model.A,rule=f)
224        self.instance = self.model.create()
225        try:
226            self.instance.c[1]()
227            self.fail("Expected ValueError")
228        except ValueError:
229            pass
230        self.instance.x.reset()
231        self.failUnlessEqual(self.instance.c[1](), 8)
232        self.failUnlessEqual(value(self.instance.c[1]), 8)
233        self.failUnlessEqual(len(self.instance.c), 2)
234
235    def test_rule_option3(self):
236        """Test rule option"""
237        def f(i,model):
238          if i%2 == 0:
239                return None
240          ans=0
241          for j in model.x.keys():
242            ans = ans + model.x[j]
243          ans *= i
244          ans = ans < 0
245          ans = ans > 0
246          return ans
247        self.model.x = Var(RangeSet(1,4),initialize=2)
248        self.model.c = Constraint(self.model.A,rule=f)
249        self.instance = self.model.create()
250        try:
251            self.instance.c[1]()
252            self.fail("Expected ValueError")
253        except ValueError:
254            pass
255        self.instance.x.reset()
256        self.failUnlessEqual(self.instance.c[1](), 8)
257        self.failUnlessEqual(value(self.instance.c[1]), 8)
258        self.failUnlessEqual(len(self.instance.c), 2)
259
260    def test_rule_option4(self):
261        """Test rule option"""
262        def f(model):
263          res={}
264          for i in [0,1,2]:
265                ans=0
266                for j in model.x.keys():
267                    ans = ans + model.x[j]
268                ans *= i
269                ans = ans < 0
270                ans = ans > 0
271                res[i]=ans
272          return res
273        self.model.x = Var(RangeSet(1,4),initialize=2)
274        self.model.c = Constraint(self.model.A,rule=f)
275        try:
276            self.instance = self.model.create()
277            self.fail("Expected IndexError")
278        except IndexError:
279            pass
280
281    def test_dim(self):
282        """Test dim method"""
283        self.model.c = Constraint(self.model.A)
284        self.instance = self.model.create()
285        self.failUnlessEqual(self.instance.c.dim(),1)
286
287    def test_keys(self):
288        """Test keys method"""
289        self.model.c = Constraint(self.model.A)
290        self.instance = self.model.create()
291        self.failUnlessEqual(len(self.instance.c.keys()),0)
292
293    def test_len(self):
294        """Test len method"""
295        self.model.c = Constraint(self.model.A)
296        self.instance = self.model.create()
297        self.failUnlessEqual(len(self.instance.c),0)
298        """Test rule option"""
299        def f(model):
300          ans=0
301          for i in model.x.keys():
302            ans = ans + model.x[i]
303          ans = ans==2
304          return ans
305        self.model.x = Var(RangeSet(1,4),initialize=2)
306        self.model.c = Constraint(rule=f)
307        self.instance = self.model.create()
308        self.failUnlessEqual(len(self.instance.c),1)
309
310    def test_rule_error1(self):
311        """Verify that errors in the rule dictionary are identified"""
312        def f(model):
313          res={}
314          for i in model.A:
315            if i%2 != 0:
316                ans=0
317                for j in model.x.keys():
318                    ans = ans + model.x[j]
319                ans *= i
320                ans = ans < 0
321                ans = ans > 0
322                res[i]=ans
323          return res
324        self.model.x = Var(RangeSet(1,4),initialize=2)
325        self.model.c = Constraint(self.model.A,rule=f)
326        self.instance = self.model.create()
327        try:
328            self.instance.c[1]()
329            self.fail("Expected ValueError")
330        except ValueError:
331            pass
332        self.instance.x.reset()
333        self.failUnlessEqual(self.instance.c[1](), 8)
334        self.failUnlessEqual(value(self.instance.c[1]), 8)
335        self.failUnlessEqual(len(self.instance.c), 2)
336
337
338
339class Test2DArrayCon(PyomoModel):
340
341    def setUp(self):
342        #
343        # Create Model
344        #
345        PyomoModel.setUp(self)
346        self.model.A = Set(initialize=[1,2])
347
348    def tearDown(self):
349        pass
350
351    def test_rule_option(self):
352        """Test rule option"""
353        def f(i,j,model):
354          ans=0
355          for j in model.x.keys():
356            ans = ans + model.x[j]
357          ans *= i
358          ans = ans < 0
359          ans = ans > 0
360          return ans
361        self.model.x = Var(RangeSet(1,4),initialize=2)
362        self.model.c = Constraint(self.model.A,self.model.A,rule=f)
363        self.instance = self.model.create()
364        try:
365            self.instance.c[1,1]()
366            self.fail("Expected ValueError")
367        except ValueError:
368            pass
369        self.instance.x.reset()
370        self.failUnlessEqual(self.instance.c[1,1](), 8)
371        self.failUnlessEqual(self.instance.c[2,1](), 16)
372        self.failUnlessEqual(value(self.instance.c[1,1]), 8)
373        self.failUnlessEqual(value(self.instance.c[2,1]), 16)
374
375    def test_dim(self):
376        """Test dim method"""
377        self.model.c = Constraint(self.model.A,self.model.A)
378        self.instance = self.model.create()
379        self.failUnlessEqual(self.instance.c.dim(),2)
380
381    def test_keys(self):
382        """Test keys method"""
383        self.model.c = Constraint(self.model.A,self.model.A)
384        self.instance = self.model.create()
385        self.failUnlessEqual(len(self.instance.c.keys()),0)
386
387    def test_len(self):
388        """Test len method"""
389        self.model.c = Constraint(self.model.A,self.model.A)
390        self.instance = self.model.create()
391        self.failUnlessEqual(len(self.instance.c),0)
392        """Test rule option"""
393        def f(model):
394          ans=0
395          for i in model.x.keys():
396            ans = ans + model.x[i]
397          ans = ans==2
398          return ans
399        self.model.x = Var(RangeSet(1,4),initialize=2)
400        self.model.c = Constraint(rule=f)
401        self.instance = self.model.create()
402        self.failUnlessEqual(len(self.instance.c),1)
403
404if __name__ == "__main__":
405   unittest.main()
406
Note: See TracBrowser for help on using the repository browser.