Title: Prepare for removal of dependency on numpy.matrix class by murrayrm · Pull Request #292 · python-control/python-control · GitHub
Open Graph Title: Prepare for removal of dependency on numpy.matrix class by murrayrm · Pull Request #292 · python-control/python-control
X Title: Prepare for removal of dependency on numpy.matrix class by murrayrm · Pull Request #292 · python-control/python-control
Description: This PR prepares for removal the dependency of the control package on the numpy.matrix class, which is planned for deprecation at some point in the future. To handle this, a number of changes have been made: A new StateSpaceMatrix class, derived from numpy.ndarray, was created that is used to store the A, B, C, D matrices for a StateSpace system. This class maintains elements as a 2D matrix, so B[:,1] returns a column matrix (shape = (n, 1)). As an ndarray, this expression would normally return a 1D array. The StateSpaceMatrix class also overrides the * and ^ operators to give matrix multiplication and matrix powers (same as numpy.matlab does). This gives better compatibility with (user) code that was using those constructs to operate directly on matrices associated with a system. A new unit test file for the class is also included. There is also a function ssmatrix() that can be used to create a StateSpaceMatrix object (similar to the use of numpy.array to create an numpy.ndarray object). Functions that used to return numpy.matrix objects now return a user-configurable type, set using the use_numpy_matrix or set_ss_matrix_type functions. By default the return type is currently numpy.matrix (for backward compatibility), but calling use_numpy_matrix(False) changes the return type to StateSpaceMatrix. Using set_ss_matrix_type, it is possible to use other subclasses derived from numpy.ndarray (including ndarray itself). A UserWarning is issued whenever numpy.matrix is set or used as the output type. The code in the package as been updated to remove unneeded dependencies on the numpy.matrix class. This mainly involved changing numpy.matrix to numpy.array, but in some cases some additional changes were needed because of the differences between matrices and numpy. With the exception of extracting elements of submatrices, the main package code does not explicitly use the functionality of the StateSpaceMatrix class, so the main use of this class is to provide some backward compatibility for user code that users * and ^ operators (which is fairly common in my own code). All unit test code (in control/tests) has been scrubbed of unnecessary dependence on the numpy.matrix class (except for testing that warning messages are generated and a few other checks for backward compatibility). I did some PEP8 cleaning on statesp.py since there were lots of changes in this file already. The changes were tested with the old unit test files, the new unit test files, and all examples and everything continues to work across all of those variants. Net impact of this PR is that all numpy.matrix deprecation warnings can be removed by calling use_numpy_matrix(False), addressing issue #233. This behavior can be made the default in a future release or when numpy.matrix goes away. There are two situations in which the numpy.matrix deprecation warning can still appear: For backward compatibility, I set things up so that if you pass the StateSpaceMatrix constructor a string then it will call numpy.matrix. This allows all old examples to work without change (but does generate a warning message). It's possible that if a user creates a numpy.matrix object to one of the python-control functions that it could end up generating a copy and that could trigger a warning message. I figure that is the user's fault -:). (Note: this description was updated on 8 Jun 2019 to reflect the changes made in response to comments and responses below.)
Open Graph Description: This PR prepares for removal the dependency of the control package on the numpy.matrix class, which is planned for deprecation at some point in the future. To handle this, a number of changes have...
X Description: This PR prepares for removal the dependency of the control package on the numpy.matrix class, which is planned for deprecation at some point in the future. To handle this, a number of changes have...
Opengraph URL: https://github.com/python-control/python-control/pull/292
X: @github
Domain: github.com
| route-pattern | /:user_id/:repository/pull/:id/checks(.:format) |
| route-controller | pull_requests |
| route-action | checks |
| fetch-nonce | v2:828c63af-1f89-e7d1-f829-69ba6b889327 |
| current-catalog-service-hash | 87dc3bc62d9b466312751bfd5f889726f4f1337bdff4e8be7da7c93d6c00a25a |
| request-id | 8F20:19E52A:5FBFCF3:832B583:697CE2E4 |
| html-safe-nonce | 37305e0bb1c0c837dfd9f623cc465601579a2c4a574977f08b2beef16e91900c |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI4RjIwOjE5RTUyQTo1RkJGQ0YzOjgzMkI1ODM6Njk3Q0UyRTQiLCJ2aXNpdG9yX2lkIjoiNjU4MDIyMjUwMTUwOTE5NDQ2OCIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | 62e5a3dadbd8f848614affb57b8b7975801b351a5bdb3d397d2ff6e34257f9dd |
| hovercard-subject-tag | pull_request:270996435 |
| github-keyboard-shortcuts | repository,pull-request-list,pull-request-conversation,pull-request-files-changed,checks,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/python-control/python-control/pull/292/checks |
| twitter:image | https://avatars.githubusercontent.com/u/293362?s=400&v=4 |
| twitter:card | summary_large_image |
| og:image | https://avatars.githubusercontent.com/u/293362?s=400&v=4 |
| og:image:alt | This PR prepares for removal the dependency of the control package on the numpy.matrix class, which is planned for deprecation at some point in the future. To handle this, a number of changes have... |
| og:site_name | GitHub |
| og:type | object |
| hostname | github.com |
| expected-hostname | github.com |
| None | 5f20df5019a7f846ce01350c443b1b5209bcc8b08d1ff80f92fdef440a0c7c89 |
| turbo-cache-control | no-preview |
| go-import | github.com/python-control/python-control git https://github.com/python-control/python-control.git |
| octolytics-dimension-user_id | 2285872 |
| octolytics-dimension-user_login | python-control |
| octolytics-dimension-repository_id | 22791752 |
| octolytics-dimension-repository_nwo | python-control/python-control |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 22791752 |
| octolytics-dimension-repository_network_root_nwo | python-control/python-control |
| turbo-body-classes | logged-out env-production page-responsive full-width full-width-p-0 |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 0f08fae6208283a46e6e5febf9878b9cdddfaa23 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width