- Notifications
You must be signed in to change notification settings - Fork441
Switch LTI class and subclasses to use ninputs, noutputs, nstates#515
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Switch LTI class and subclasses to use ninputs, noutputs, nstates#515
Uh oh!
There was an error while loading.Please reload this page.
Conversation
coveralls commentedJan 20, 2021 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
Awesome! Looks good to me. |
One more thing I noticed: there are a few mentions of sys.inputs/outputs in docs in xferfunc.py that should probably be fixed. |
374c82f
to5a4c3ab
CompareRebased against master (and apparently fixed up the xferfcn.py docstring, since I can't find sys.inputs in that file anymore). |
sawyerbfuller commentedJan 21, 2021 via email• edited by murrayrm
Loading Uh oh!
There was an error while loading.Please reload this page.
edited by murrayrm
Uh oh!
There was an error while loading.Please reload this page.
May also need to check for self.inputs ? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
One more comment: was it a deliberate choice to leave init keywords as inputs/outputs rather than ninputs/noutputs, eg in lti.py:
definit(self, inputs=1, outputs=1, dt=None):
d614c01
tof633874
Compare
This matches the syntax we use in the |
That makes sense. Thanks! |
control/lti.py Outdated
raise PendingDeprecationWarning( | ||
"The LTI `inputs` attribute will be deprecated in a future " | ||
"release. Use `ninputs` instead.") | ||
return self.ninputs |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
This raises an Exception of the classPendingDeprecationWarning
and never returns self.inputs.
Python 3.8.6 (default, Nov 09 2020, 12:09:06) [GCC] on linuxType "help", "copyright", "credits" or "license" for more information.>>> import control>>> rsys = control.rss(3,3,3)>>> ninputs = rsys.inputsTraceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/ben/src/python-control/control/lti.py", line 64, in inputs raise PendingDeprecationWarning(PendingDeprecationWarning: The LTI `inputs` attribute will be deprecated in a future release. Use `ninputs` instead.>>> ninputsTraceback (most recent call last): File "<stdin>", line 1, in <module>NameError: name 'ninputs' is not defined
raisePendingDeprecationWarning( | |
"The LTI `inputs` attribute will be deprecated in a future " | |
"release. Use `ninputs` instead.") | |
returnself.ninputs | |
warn("The LTI `inputs` attribute will be deprecated in a future " | |
"release. Use `ninputs` instead.", | |
PendingDeprecationWarning,stacklevel=2) | |
returnself.ninputs |
Additionally, either a warning filter needs to be set in order to make the warning visible to end users, or a different category than*DeprecationWarning
needs to be used.
filterwarnings('module',message=".*LTI.*attribute.*deprecated",category=PendingDeprecationWarning)
Python 3.8.6 (default, Nov 09 2020, 12:09:06) [GCC] on linuxType "help", "copyright", "credits" or "license" for more information.>>> import control; rsys = control.rss(3,3,3); ninputs = rsys.inputs<stdin>:1: PendingDeprecationWarning: The LTI `inputs` attribute will be deprecated in a future release. Use `ninputs` instead.>>> ninputs3
- Please add a check using pytest.warns().
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
I've fixed these up and decide to use DeprecationWarning for now (keep things internal to developers) but in a future release (0.9.x) we should change to FutureWarning, which will make it show up for users as well.
bnavigatorJan 24, 2021 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Still using raise
instead ofwarn
. Now we are at:
This raises an Exception of the class
DeprecationWarning
and never returns self.inputs.
Python 3.8.6 (default, Nov 09 2020, 12:09:06) [GCC] on linuxType "help", "copyright", "credits" or "license" for more information.>>> import control; rsys = control.rss(3,3,3); ninputs = rsys.inputsTraceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/ben/src/python-control/control/lti.py", line 64, in inputs raise DeprecationWarning(DeprecationWarning: The LTI `inputs` attribute will be deprecated in a future release. Use `ninputs` instead.>>> ninputsTraceback (most recent call last): File "<stdin>", line 1, in <module>NameError: name 'ninputs' is not defined>>>
control/tests/lti_test.py Outdated
with pytest.raises(DeprecationWarning, match="LTI `inputs`"): | ||
assert sys.inputs == sys.ninputs |
bnavigatorJan 24, 2021 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
The assert .. == part is never evaluated after sys.ninputs throws the exception.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Sorry, was working on multiple changes/branches at once and pushed the wrong version. New one was what was intended.
bed8990
toff5fb39
Compareff5fb39
toeb401a9
Compare
Uh oh!
There was an error while loading.Please reload this page.
This PR changes the
LTI
class and theStateSpace
class (and all derived classes) to useninputs
,noutputs
, andnstates
as the attributes for storing these properties instead ofinputs
,outputs
, andstates
. The former names are consistent with what is used in theInputOutputSystem
class.Following the suggestion of@bnavigator in issue#451, getter and setter functions are used for backward compatibility, but with a
PendingDeprecationWarning
.Note that this PR will generate some small conflicts with#514. I'll rebase based on which one we merge first.[done]