@@ -820,14 +820,8 @@ def test_sys_naming_convention(self):
820
820
self .assertEquals (sys .copy ().name , "copy of sys[0]" )
821
821
822
822
namedsys = ios .NonlinearIOSystem (
823
- updfcn = lambda t , x , u , params : np .array (
824
- np .dot (self .mimo_linsys1 .A , np .reshape (x , (- 1 , 1 ))) \
825
- + np .dot (self .mimo_linsys1 .B , np .reshape (u , (- 1 , 1 )))
826
- ).reshape (- 1 ,),
827
- outfcn = lambda t , x , u , params : np .array (
828
- self .mimo_linsys1 .C * np .reshape (x , (- 1 , 1 )) \
829
- + self .mimo_linsys1 .D * np .reshape (u , (- 1 , 1 ))
830
- ).reshape (- 1 ,),
823
+ updfcn = lambda t , x , u , params : x ,
824
+ outfcn = lambda t , x , u , params : u ,
831
825
inputs = ('u[0]' , 'u[1]' ),
832
826
outputs = ('y[0]' , 'y[1]' ),
833
827
states = self .mimo_linsys1 .states ,
@@ -880,11 +874,59 @@ def test_signals_naming_convention(self):
880
874
state: 'x[i]'
881
875
output: 'y[i]'
882
876
"""
877
+ ct .InputOutputSystem .idCounter = 0
883
878
sys = ct .LinearIOSystem (self .mimo_linsys1 )
879
+ for statename in ["x[0]" , "x[1]" ]:
880
+ self .assertTrue (statename in sys .state_index )
881
+ for inputname in ["u[0]" , "u[1]" ]:
882
+ self .assertTrue (inputname in sys .input_index )
883
+ for outputname in ["y[0]" , "y[1]" ]:
884
+ self .assertTrue (outputname in sys .output_index )
884
885
self .assertEqual (len (sys .state_index ), sys .nstates )
885
886
self .assertEqual (len (sys .input_index ), sys .ninputs )
886
887
self .assertEqual (len (sys .output_index ), sys .noutputs )
887
-
888
+
889
+ namedsys = ios .NonlinearIOSystem (
890
+ updfcn = lambda t , x , u , params : x ,
891
+ outfcn = lambda t , x , u , params : u ,
892
+ inputs = ('u0' ),
893
+ outputs = ('y0' ),
894
+ states = ('x0' ),
895
+ name = 'namedsys' )
896
+ unnamedsys = ct .NonlinearIOSystem (
897
+ lambda t ,x ,u ,params : x , inputs = 1 , outputs = 1 , states = 1
898
+ )
899
+ self .assertTrue ('u0' in namedsys .input_index )
900
+ self .assertTrue ('y0' in namedsys .output_index )
901
+ self .assertTrue ('x0' in namedsys .state_index )
902
+
903
+ # Unnamed/named connections
904
+ un_series = unnamedsys * namedsys
905
+ un_parallel = unnamedsys + namedsys
906
+ un_feedback = unnamedsys .feedback (namedsys )
907
+ un_dup = unnamedsys * namedsys .copy ()
908
+ un_hierarchical = un_series * unnamedsys
909
+ u_neg = - unnamedsys
910
+
911
+ self .assertTrue ("sys[1].x[0]" in un_series .state_index )
912
+ self .assertTrue ("namedsys.x0" in un_series .state_index )
913
+ self .assertTrue ("sys[1].x[0]" in un_parallel .state_index )
914
+ self .assertTrue ("namedsys.x0" in un_series .state_index )
915
+ self .assertTrue ("sys[1].x[0]" in un_feedback .state_index )
916
+ self .assertTrue ("namedsys.x0" in un_feedback .state_index )
917
+ self .assertTrue ("sys[1].x[0]" in un_dup .state_index )
918
+ self .assertTrue ("copy of namedsys.x0" in un_dup .state_index )
919
+ self .assertTrue ("sys[1].x[0]" in un_hierarchical .state_index )
920
+ self .assertTrue ("sys[2].sys[1].x[0]" in un_hierarchical .state_index )
921
+ self .assertTrue ("sys[1].x[0]" in u_neg .state_index )
922
+
923
+ # Same system conflict
924
+ with warnings .catch_warnings (record = True ) as warnval :
925
+ same_name_series = unnamedsys * unnamedsys
926
+ self .assertEquals (len (warnval ), 1 )
927
+ self .assertTrue ("sys[1].x[0]" in same_name_series .state_index )
928
+ self .assertTrue ("copy of sys[1].x[0]" in same_name_series .state_index )
929
+
888
930
def test_named_signals_linearize_inconsistent (self ):
889
931
"""Mare sure that providing inputs or outputs not consistent with
890
932
updfcn or outfcn fail
0 commit comments