standardize time response return values, return_x/squeeze keyword processing #511
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR is a partial replacement for #507, focused on addressing the issues in #453 relating to time responses:
Update
forced_responseto only return the state trajectory ifreturn_xis True, consistent with all other time response functions (includinginput_output_response). Prior to this,forced_responsealways returned the state vector. In addition to the inconsistency, this was also problematic if the system you were simulating was a transfer function, since the state space depended on the realization and this information islost. Some other smaller changes related to this:return_xusing `config.defaults['forced_response.return_x'] (default = False)config.defaults['forced_response.return_x']to True withuse_legacy_defaultsfor versions < 0.9.0 for backward compatibility.Consolidate processing of time responses through a new internal function
_process_time_responsethat provides uniform processing of thereturn_xandsqueezekeywords. This is mainly in preparation for any future changes in how we handlesqueeze, so that changes only need to be made at one location in the code. The functionality of the code is unchanged, but the processing is a big different:squeezekeyword for time responses is now set inconfig.defaults['control.squeeze_time_response']. This is currently set to True, which means that time responses for systems with a single output are squeezed to a 1D response.impulse_response,initial_response,step_response,forced_response,input_output_response).squeeze='siso'capability that would allow time responses to mirror current frequency response behavior (squeeze=Trueonly removes axes for SISO systems). I left this out for now pending resolution of the frequency response squeeze processing (drafted in Standardize squeeze processing in frequency response functions #507, but needs more thought and effort).Other changes, not directly related to those above