@@ -653,24 +653,28 @@ def combine_time_responses(response_list, trace_labels=None, title=None):
653653 ntraces = max (1 , base .ntraces )
654654
655655 # Initial pass through trace list to count things up and do error checks
656+ nstates = base .nstates
656657 for response in response_list [1 :]:
657658 # Make sure the time vector is the same
658659 if not np .allclose (base .t , response .t ):
659660 raise ValueError ("all responses must have the same time vector" )
660661
661662 # Make sure the dimensions are all the same
662663 if base .ninputs != response .ninputs or \
663- base .noutputs != response .noutputs or \
664- base .nstates != response .nstates :
664+ base .noutputs != response .noutputs :
665665 raise ValueError ("all responses must have the same number of "
666666 "inputs, outputs, and states" )
667667
668+ if nstates != response .nstates :
669+ warn ("responses have different state dimensions; dropping states" )
670+ nstates = 0
671+
668672 ntraces += max (1 , response .ntraces )
669673
670674 # Create data structures for the new time response data object
671675 inputs = np .empty ((base .ninputs , ntraces , base .t .size ))
672676 outputs = np .empty ((base .noutputs , ntraces , base .t .size ))
673- states = np .empty ((base . nstates , ntraces , base .t .size ))
677+ states = np .empty ((nstates , ntraces , base .t .size ))
674678
675679 # See whether we should create labels or not
676680 if trace_labels is None :
@@ -689,7 +693,8 @@ def combine_time_responses(response_list, trace_labels=None, title=None):
689693 # Single trace
690694 inputs [:, offset , :] = response .u
691695 outputs [:, offset , :] = response .y
692- states [:, offset , :] = response .x
696+ if nstates :
697+ states [:, offset , :] = response .x
693698 offset += 1
694699
695700 # Add on trace label and trace type
@@ -703,7 +708,8 @@ def combine_time_responses(response_list, trace_labels=None, title=None):
703708 for i in range (response .ntraces ):
704709 inputs [:, offset , :] = response .u [:, i , :]
705710 outputs [:, offset , :] = response .y [:, i , :]
706- states [:, offset , :] = response .x [:, i , :]
711+ if nstates :
712+ states [:, offset , :] = response .x [:, i , :]
707713
708714 # Save the trace labels
709715 if generate_trace_labels :
@@ -721,9 +727,10 @@ def combine_time_responses(response_list, trace_labels=None, title=None):
721727 trace_types += [None ] * response .ntraces
722728
723729 return TimeResponseData (
724- base .t , outputs , states , inputs , issiso = base . issiso ,
730+ base .t , outputs , states if nstates else None , inputs ,
725731 output_labels = base .output_labels , input_labels = base .input_labels ,
726- state_labels = base .state_labels , title = title , transpose = base .transpose ,
727- return_x = base .return_x , squeeze = base .squeeze , sysname = base .sysname ,
732+ state_labels = base .state_labels if nstates else None ,
733+ title = title , transpose = base .transpose , return_x = base .return_x ,
734+ issiso = base .issiso , squeeze = base .squeeze , sysname = base .sysname ,
728735 trace_labels = trace_labels , trace_types = trace_types ,
729736 plot_inputs = base .plot_inputs )
0 commit comments