|
50 | 50 | fromscipy.linalgimporteigvals,solve
|
51 | 51 | fromscipyimportzeros,dot
|
52 | 52 | fromcontrol.mateqnimportlyap,dlyap,care,dare
|
53 |
| -fromcontrol.exceptionimportslycot_check |
| 53 | +fromcontrol.exceptionimportslycot_check,ControlArgument |
54 | 54 |
|
55 | 55 | @unittest.skipIf(notslycot_check(),"slycot not installed")
|
56 | 56 | classTestMatrixEquations(unittest.TestCase):
|
@@ -243,6 +243,62 @@ def test_dare_g(self):
|
243 | 243 | lam=eigvals(A-B.dot(G),E)
|
244 | 244 | assert_array_less(abs(lam),1.0)
|
245 | 245 |
|
| 246 | +deftest_raise(self): |
| 247 | +""" Test exception raise for invalid inputs """ |
| 248 | + |
| 249 | +# correct shapes and forms |
| 250 | +A=array([[1,0], [-1,-1]]) |
| 251 | +Q=array([[2,1], [1,2]]) |
| 252 | +C=array([[1,0], [0,1]]) |
| 253 | +E=array([[2,1], [1,2]]) |
| 254 | + |
| 255 | +# these fail |
| 256 | +Afq=array([[1,0,0], [-1,-1,0]]) |
| 257 | +Qfq=array([[2,1,0], [1,2,0]]) |
| 258 | +Qfs=array([[2,1], [-1,2]]) |
| 259 | +Cfd=array([[1,0,0], [0,1,0]]) |
| 260 | +Efq=array([[2,1,0], [1,2,0]]) |
| 261 | + |
| 262 | +forcdlyapin [lyap,dlyap]: |
| 263 | +assert_raises(ControlArgument,cdlyap,Afq,Q) |
| 264 | +assert_raises(ControlArgument,cdlyap,A,Qfq) |
| 265 | +assert_raises(ControlArgument,cdlyap,A,Qfs) |
| 266 | +assert_raises(ControlArgument,cdlyap,Afq,Q,C) |
| 267 | +assert_raises(ControlArgument,cdlyap,A,Qfq,C) |
| 268 | +assert_raises(ControlArgument,cdlyap,A,Q,Cfd) |
| 269 | +assert_raises(ControlArgument,cdlyap,A,Qfq,None,E) |
| 270 | +assert_raises(ControlArgument,cdlyap,A,Q,None,Efq) |
| 271 | +assert_raises(ControlArgument,cdlyap,A,Qfs,None,E) |
| 272 | +assert_raises(ControlArgument,cdlyap,A,Q,C,E) |
| 273 | + |
| 274 | +B=array([[1,0], [0,1]]) |
| 275 | +Bf=array([[1,0], [0,1], [1,1]]) |
| 276 | +R=Q |
| 277 | +Rfs=Qfs |
| 278 | +Rfq=Qfq |
| 279 | +S=array([[0,0], [0,0]]) |
| 280 | +Sf=array([[0,0,0], [0,0,0]]) |
| 281 | +E=array([[2,1], [1,2]]) |
| 282 | +Ef=array([[2,1], [1,2], [1,2]]) |
| 283 | + |
| 284 | +assert_raises(ControlArgument,care,Afq,B,Q) |
| 285 | +assert_raises(ControlArgument,care,A,B,Qfq) |
| 286 | +assert_raises(ControlArgument,care,A,Bf,Q) |
| 287 | +assert_raises(ControlArgument,care,1,B,1) |
| 288 | +assert_raises(ControlArgument,care,A,B,Qfs) |
| 289 | +assert_raises(ValueError,dare,A,B,Q,Rfs) |
| 290 | +forcdarein [care,dare]: |
| 291 | +assert_raises(ControlArgument,cdare,Afq,B,Q,R,S,E) |
| 292 | +assert_raises(ControlArgument,cdare,A,B,Qfq,R,S,E) |
| 293 | +assert_raises(ControlArgument,cdare,A,Bf,Q,R,S,E) |
| 294 | +assert_raises(ControlArgument,cdare,A,B,Q,R,S,Ef) |
| 295 | +assert_raises(ControlArgument,cdare,A,B,Q,Rfq,S,E) |
| 296 | +assert_raises(ControlArgument,cdare,A,B,Q,R,Sf,E) |
| 297 | +assert_raises(ControlArgument,cdare,A,B,Qfs,R,S,E) |
| 298 | +assert_raises(ControlArgument,cdare,A,B,Q,Rfs,S,E) |
| 299 | +assert_raises(ControlArgument,cdare,A,B,Q,R,S) |
| 300 | + |
| 301 | + |
246 | 302 | defsuite():
|
247 | 303 | returnunittest.TestLoader().loadTestsFromTestCase(TestMatrixEquations)
|
248 | 304 |
|
|