René's URL Explorer Experiment


Title: Sisotool and dynamic root locus zoom by icam0 · Pull Request #209 · python-control/python-control · GitHub

Open Graph Title: Sisotool and dynamic root locus zoom by icam0 · Pull Request #209 · python-control/python-control

X Title: Sisotool and dynamic root locus zoom by icam0 · Pull Request #209 · python-control/python-control

Description: This pull request introduces two new features to the python-control package. A matlab inspired sisotool and dynamic recomputing of the root locus plot when zooming. Sisotool In the pictures below a comparison can be seen between the matlab sisotool, the sisotool for matlplotlib 1.x.x and matlplotlib 2.x.x respectively. matlab matplotlib 1.x.x matplotlib 2.x.x The function is essentially a wrapper around the rootlocus, bode and step response functions. When a click is made on the rootlocus plot, the purple point(s) are moved and the other plots are updated as well. Note that a decision was made to keep most of the rootlocus plot update logic inside the rootlocus file and the logic behind updating the other 2 plots in _sisotoolupdate in sisotool.py. Also, use was made of **kwargs whenever neccessary in order to not confuse the end user with parameters in functions without documenting them. Also, this was tested on python 2.7, 3.3 and 3.6 and matplotlib 1.5.3 and 2.2.2 on mac os x. It would be greatly appreciated if more testers can try this on their machine. **Dynamic zooming of the root locus plot ** Firstly, I want to point out an error in existing code in the following code snippet from _default_gains: while (indexes_too_far[0].size > 0) and (kvect.size < 5000): for index in indexes_too_far[0]: new_gains = np.linspace(kvect[index], kvect[index+1], 5) new_points = _RLFindRoots(num, den, new_gains[1:4]) kvect = np.insert(kvect, index+1, new_gains[1:4]) mymat = np.insert(mymat, index+1, new_points, axis=0) Every iteration, 3 points are inserted at the index where the distance between 2 points is too large. What goes wrong however, is that the indexes are not updated. So when for example indexes_too_far = [0,1,2] and in the first iteration 3 points in between 0 and 1 are inserted. The next iteration the points will be inserted in between 1 and 2. However, this point has shifted its index with 3. This is fixed by the following: while (len(indexes_too_far) > 0) and (kvect.size < 5000): for counter,index in enumerate(indexes_too_far): index = index + counter*3 new_gains = np.linspace(kvect[index], kvect[index + 1], 5) new_points = _RLFindRoots(num, den, new_gains[1:4]) kvect = np.insert(kvect, index + 1, new_gains[1:4]) mymat = np.insert(mymat, index + 1, new_points, axis=0) Now a new function _indexes_filt is added which also takes into account if the user is zoomed in on a part of the plot and adds more points to indexes_too_far. If no initial points are within the zoom view, it detects at which point one of the points crosses an xlim or ylim of the zoombox and then more points are added until the zoom tolerance requirements are met. This pull request also includes the #199 and #204 pull requests, because they are an integral part of the sisotool as well. Please note that the Travis CI build sometimes fails due to issue #194 . I was able to get the build passing (https://travis-ci.org/icam0/python-control/builds/387446241) by restarting 2 subbuilds once.

Open Graph Description: This pull request introduces two new features to the python-control package. A matlab inspired sisotool and dynamic recomputing of the root locus plot when zooming. Sisotool In the pictures below a...

X Description: This pull request introduces two new features to the python-control package. A matlab inspired sisotool and dynamic recomputing of the root locus plot when zooming. Sisotool In the pictures below a...

Opengraph URL: https://github.com/python-control/python-control/pull/209

X: @github

direct link

Domain: github.com

route-pattern/:user_id/:repository/pull/:id/files(.:format)
route-controllerpull_requests
route-actionfiles
fetch-noncev2:e31c3897-5ce3-8f3e-dea4-ca7c710376fd
current-catalog-service-hashae870bc5e265a340912cde392f23dad3671a0a881730ffdadd82f2f57d81641b
request-idEB28:353CE2:C8F8B1:117F1C6:697B597B
html-safe-noncedcca416c71661b158cdd350d5eb03dd97ab900d8b3e098fb148a9429e2d5417d
visitor-payloadeyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJFQjI4OjM1M0NFMjpDOEY4QjE6MTE3RjFDNjo2OTdCNTk3QiIsInZpc2l0b3JfaWQiOiIxODQzMjIzOTkxODEyODM5ODAzIiwicmVnaW9uX2VkZ2UiOiJpYWQiLCJyZWdpb25fcmVuZGVyIjoiaWFkIn0=
visitor-hmacb63de85a675b9942bf43534cea10284a5df0a2b20a150ac7ae0d6e2b252a9fbf
hovercard-subject-tagpull_request:192259347
github-keyboard-shortcutsrepository,pull-request-list,pull-request-conversation,pull-request-files-changed,copilot
google-site-verificationApib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I
octolytics-urlhttps://collector.github.com/github/collect
analytics-location///pull_requests/show/files
fb:app_id1401488693436528
apple-itunes-appapp-id=1477376905, app-argument=https://github.com/python-control/python-control/pull/209/files
twitter:imagehttps://avatars.githubusercontent.com/u/821612?s=400&v=4
twitter:cardsummary_large_image
og:imagehttps://avatars.githubusercontent.com/u/821612?s=400&v=4
og:image:altThis pull request introduces two new features to the python-control package. A matlab inspired sisotool and dynamic recomputing of the root locus plot when zooming. Sisotool In the pictures below a...
og:site_nameGitHub
og:typeobject
hostnamegithub.com
expected-hostnamegithub.com
None7eed3e20c41f6c464df945b1f353a52c450ca1653f4697d4ebcc58c2adc5868a
turbo-cache-controlno-preview
diff-viewunified
go-importgithub.com/python-control/python-control git https://github.com/python-control/python-control.git
octolytics-dimension-user_id2285872
octolytics-dimension-user_loginpython-control
octolytics-dimension-repository_id22791752
octolytics-dimension-repository_nwopython-control/python-control
octolytics-dimension-repository_publictrue
octolytics-dimension-repository_is_forkfalse
octolytics-dimension-repository_network_root_id22791752
octolytics-dimension-repository_network_root_nwopython-control/python-control
turbo-body-classeslogged-out env-production page-responsive full-width
disable-turbotrue
browser-stats-urlhttps://api.github.com/_private/browser/stats
browser-errors-urlhttps://api.github.com/_private/browser/errors
releaseb059c4725f1b62cc8534bdab4092fd840e833907
ui-targetfull
theme-color#1e2327
color-schemelight dark

Links:

Skip to contenthttps://github.com/python-control/python-control/pull/209/changes#start-of-content
https://github.com/
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fpython-control%2Fpython-control%2Fpull%2F209%2Ffiles
GitHub CopilotWrite better code with AIhttps://github.com/features/copilot
GitHub SparkBuild and deploy intelligent appshttps://github.com/features/spark
GitHub ModelsManage and compare promptshttps://github.com/features/models
MCP RegistryNewIntegrate external toolshttps://github.com/mcp
ActionsAutomate any workflowhttps://github.com/features/actions
CodespacesInstant dev environmentshttps://github.com/features/codespaces
IssuesPlan and track workhttps://github.com/features/issues
Code ReviewManage code changeshttps://github.com/features/code-review
GitHub Advanced SecurityFind and fix vulnerabilitieshttps://github.com/security/advanced-security
Code securitySecure your code as you buildhttps://github.com/security/advanced-security/code-security
Secret protectionStop leaks before they starthttps://github.com/security/advanced-security/secret-protection
Why GitHubhttps://github.com/why-github
Documentationhttps://docs.github.com
Bloghttps://github.blog
Changeloghttps://github.blog/changelog
Marketplacehttps://github.com/marketplace
View all featureshttps://github.com/features
Enterpriseshttps://github.com/enterprise
Small and medium teamshttps://github.com/team
Startupshttps://github.com/enterprise/startups
Nonprofitshttps://github.com/solutions/industry/nonprofits
App Modernizationhttps://github.com/solutions/use-case/app-modernization
DevSecOpshttps://github.com/solutions/use-case/devsecops
DevOpshttps://github.com/solutions/use-case/devops
CI/CDhttps://github.com/solutions/use-case/ci-cd
View all use caseshttps://github.com/solutions/use-case
Healthcarehttps://github.com/solutions/industry/healthcare
Financial serviceshttps://github.com/solutions/industry/financial-services
Manufacturinghttps://github.com/solutions/industry/manufacturing
Governmenthttps://github.com/solutions/industry/government
View all industrieshttps://github.com/solutions/industry
View all solutionshttps://github.com/solutions
AIhttps://github.com/resources/articles?topic=ai
Software Developmenthttps://github.com/resources/articles?topic=software-development
DevOpshttps://github.com/resources/articles?topic=devops
Securityhttps://github.com/resources/articles?topic=security
View all topicshttps://github.com/resources/articles
Customer storieshttps://github.com/customer-stories
Events & webinarshttps://github.com/resources/events
Ebooks & reportshttps://github.com/resources/whitepapers
Business insightshttps://github.com/solutions/executive-insights
GitHub Skillshttps://skills.github.com
Documentationhttps://docs.github.com
Customer supporthttps://support.github.com
Community forumhttps://github.com/orgs/community/discussions
Trust centerhttps://github.com/trust-center
Partnershttps://github.com/partners
GitHub SponsorsFund open source developershttps://github.com/sponsors
Security Labhttps://securitylab.github.com
Maintainer Communityhttps://maintainers.github.com
Acceleratorhttps://github.com/accelerator
Archive Programhttps://archiveprogram.github.com
Topicshttps://github.com/topics
Trendinghttps://github.com/trending
Collectionshttps://github.com/collections
Enterprise platformAI-powered developer platformhttps://github.com/enterprise
GitHub Advanced SecurityEnterprise-grade security featureshttps://github.com/security/advanced-security
Copilot for BusinessEnterprise-grade AI featureshttps://github.com/features/copilot/copilot-business
Premium SupportEnterprise-grade 24/7 supporthttps://github.com/premium-support
Pricinghttps://github.com/pricing
Search syntax tipshttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
documentationhttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fpython-control%2Fpython-control%2Fpull%2F209%2Ffiles
Sign up https://github.com/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fpull_requests%2Fshow%2Ffiles&source=header-repo&source_repo=python-control%2Fpython-control
Reloadhttps://github.com/python-control/python-control/pull/209/changes
Reloadhttps://github.com/python-control/python-control/pull/209/changes
Reloadhttps://github.com/python-control/python-control/pull/209/changes
python-control https://github.com/python-control
python-controlhttps://github.com/python-control/python-control
Notifications https://github.com/login?return_to=%2Fpython-control%2Fpython-control
Fork 447 https://github.com/login?return_to=%2Fpython-control%2Fpython-control
Star 2k https://github.com/login?return_to=%2Fpython-control%2Fpython-control
Code https://github.com/python-control/python-control
Issues 87 https://github.com/python-control/python-control/issues
Pull requests 8 https://github.com/python-control/python-control/pulls
Discussions https://github.com/python-control/python-control/discussions
Actions https://github.com/python-control/python-control/actions
Projects 0 https://github.com/python-control/python-control/projects
Wiki https://github.com/python-control/python-control/wiki
Security 0 https://github.com/python-control/python-control/security
Insights https://github.com/python-control/python-control/pulse
Code https://github.com/python-control/python-control
Issues https://github.com/python-control/python-control/issues
Pull requests https://github.com/python-control/python-control/pulls
Discussions https://github.com/python-control/python-control/discussions
Actions https://github.com/python-control/python-control/actions
Projects https://github.com/python-control/python-control/projects
Wiki https://github.com/python-control/python-control/wiki
Security https://github.com/python-control/python-control/security
Insights https://github.com/python-control/python-control/pulse
Sign up for GitHub https://github.com/signup?return_to=%2Fpython-control%2Fpython-control%2Fissues%2Fnew%2Fchoose
terms of servicehttps://docs.github.com/terms
privacy statementhttps://docs.github.com/privacy
Sign inhttps://github.com/login?return_to=%2Fpython-control%2Fpython-control%2Fissues%2Fnew%2Fchoose
murrayrmhttps://github.com/murrayrm
python-control:masterhttps://github.com/python-control/python-control/tree/master
icam0:sisotool_finalhttps://github.com/icam0/python-control/tree/sisotool_final
Conversation 16 https://github.com/python-control/python-control/pull/209
Commits 25 https://github.com/python-control/python-control/pull/209/commits
Checks 0 https://github.com/python-control/python-control/pull/209/checks
Files changed https://github.com/python-control/python-control/pull/209/files
Please reload this pagehttps://github.com/python-control/python-control/pull/209/changes
Sisotool and dynamic root locus zoom https://github.com/python-control/python-control/pull/209/changes#top
Show all changes 25 commits https://github.com/python-control/python-control/pull/209/files
54583d5 first sisotool chechpoint icam0 May 23, 2018 https://github.com/python-control/python-control/pull/209/commits/54583d52a223430c79998f8d09ebf0cfb5952b7f
2e1bf7d second sisotool checkpoint icam0 May 24, 2018 https://github.com/python-control/python-control/pull/209/commits/2e1bf7d6dc2933e95ea7d097fd7af7f74c3cc732
f4545dd changed matplotlib event handler icam0 May 25, 2018 https://github.com/python-control/python-control/pull/209/commits/f4545dd76a96098867a330b8194abb70649778ff
e3c1f31 improved sisotool readability icam0 May 25, 2018 https://github.com/python-control/python-control/pull/209/commits/e3c1f31de3f0715676b9b30356f327fcf4a114bf
72ffb63 Merge branch 'bode_margins_plot' into sisotool_merge icam0 May 25, 2018 https://github.com/python-control/python-control/pull/209/commits/72ffb63d02f1dec75a689b432b37682cb2f7cbe1
bde60f5 Added display of GM and PM in bode plot. Fixed Hz bug support. Fixed … icam0 May 28, 2018 https://github.com/python-control/python-control/pull/209/commits/bde60f58833e8b4696054227c67e46e02f3aa4d4
bc74a0a Added support for both matplotlib 1.x.x. and 2.x.x and fixed redrawin… icam0 May 29, 2018 https://github.com/python-control/python-control/pull/209/commits/bc74a0a01e2eb075e83211e5a85a08c19a86df81
1e3a925 Added docstring and unittest icam0 May 29, 2018 https://github.com/python-control/python-control/pull/209/commits/1e3a925ccc804348c52a1f50fda460df30d2240d
94a0ea1 removed bug where a pole or zero would be deleted if only 1 of them w… icam0 May 30, 2018 https://github.com/python-control/python-control/pull/209/commits/94a0ea154a7c0b6a3a0b576615aa89f73c37f5be
c0e533e root locus smooth with zoom bug icam0 Jun 2, 2018 https://github.com/python-control/python-control/pull/209/commits/c0e533e219f9ee3ddcfa7ffaaea61ad549bb4465
fe13ae1 Fixed zooming on plot. Now displays smoother root locus plot. icam0 Jun 2, 2018 https://github.com/python-control/python-control/pull/209/commits/fe13ae19fdf9e25679038dda6f8927daf48982e3
2ba8277 Fixed paning on plot and clicking on the root locus plot while zoomed icam0 Jun 3, 2018 https://github.com/python-control/python-control/pull/209/commits/2ba827764aa14534bc2a698e1473b63652115f35
c26187f Added unit test for rootlocus zoom functionality icam0 Jun 3, 2018 https://github.com/python-control/python-control/pull/209/commits/c26187f9d46f1d80353b16d74bd033be260aabf7
9962cea Fixed sisotool unittest icam0 Jun 3, 2018 https://github.com/python-control/python-control/pull/209/commits/9962ceafdcf592f1147287f7dd68a5e15eb9dac0
938ae88 Fixed frequency response unittest icam0 Jun 3, 2018 https://github.com/python-control/python-control/pull/209/commits/938ae886c8d3fbcdf4e8721c6a81944488cad1b0
9f13a77 small change to sisotool test icam0 Jun 3, 2018 https://github.com/python-control/python-control/pull/209/commits/9f13a778cf81c1a42c20b58d609921f5c90dd902
6e06a9c small change to unittests icam0 Jun 3, 2018 https://github.com/python-control/python-control/pull/209/commits/6e06a9cafee486108a167e0b67452ede05ea5d2d
cdb9f42 fixed python 2 integer division error in false gain of rootlocus icam0 Jun 3, 2018 https://github.com/python-control/python-control/pull/209/commits/cdb9f42d0e28a3590d1a0e917ebb6a052f2028d9
90959bd changed root locus test to a numerically more significant one. icam0 Jun 3, 2018 https://github.com/python-control/python-control/pull/209/commits/90959bdc57dc2cc43bf5dc27c87ccae79d766815
70ec8be changed root locus test indices. icam0 Jun 3, 2018 https://github.com/python-control/python-control/pull/209/commits/70ec8be87d5a9077ee5148adb83acf021186d71b
9f50e13 Merge branch 'master' into sisotool_final repagh Jul 9, 2018 https://github.com/python-control/python-control/pull/209/commits/9f50e1356b8e5896031b9f68893ce4239bae829f
3e7cad6 Merge branch 'master' into sisotool_final murrayrm Dec 29, 2018 https://github.com/python-control/python-control/pull/209/commits/3e7cad61eb0c5fd12b391ba65d4cf881344c27ff
43d8b95 Merge branch 'master' into sisotool_final murrayrm Apr 11, 2019 https://github.com/python-control/python-control/pull/209/commits/43d8b954c0bbaf09ea5edd322a881be1627bacc7
03f87a3 Fix small typo from manual merge murrayrm Apr 12, 2019 https://github.com/python-control/python-control/pull/209/commits/03f87a35b683d38a4951119be332ea67a94a31c5
17c4a95 fixed issues identified in review murrayrm Apr 12, 2019 https://github.com/python-control/python-control/pull/209/commits/17c4a95c447f76ae2a6f72e594da3aa3cf4d5741
Clear filters https://github.com/python-control/python-control/pull/209/files
Please reload this pagehttps://github.com/python-control/python-control/pull/209/changes
Please reload this pagehttps://github.com/python-control/python-control/pull/209/changes
__init__.py https://github.com/python-control/python-control/pull/209/changes#diff-a082bea4cb97f2978eb7abd1de48ecde6447923e60eb55409a243b98e1072fa3
freqplot.py https://github.com/python-control/python-control/pull/209/changes#diff-a751fe1009e7b656d19357a39abb58dd88b89052c9d9259c3393a4648b697a16
rlocus.py https://github.com/python-control/python-control/pull/209/changes#diff-6846933c325aaef66d5b0aa46a0ea077a03dcaf1edb4e513d795d8bc938ce2ee
sisotool.py https://github.com/python-control/python-control/pull/209/changes#diff-5b1b1a164f395f3f0ea7bad5761983be0d398ad5462147b1f69de6dd48a52e1d
freqresp_test.py https://github.com/python-control/python-control/pull/209/changes#diff-2683aff019235f249bce1f807365cf2682e0917893484b2c4109bf580f157c77
rlocus_test.py https://github.com/python-control/python-control/pull/209/changes#diff-14191ee376d7e0c4ef10224e6883edc949e6195f7700198a8599b57cf96fd414
sisotool_test.py https://github.com/python-control/python-control/pull/209/changes#diff-b3c0bda12803d07552099104b16bef2d88e8704596539d753460355deeea0c92
control/__init__.pyhttps://github.com/python-control/python-control/pull/209/changes#diff-a082bea4cb97f2978eb7abd1de48ecde6447923e60eb55409a243b98e1072fa3
View file https://github.com/icam0/python-control/blob/17c4a95c447f76ae2a6f72e594da3aa3cf4d5741/control/__init__.py
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/python-control/python-control/pull/209/{{ revealButtonHref }}
https://github.com/python-control/python-control/pull/209/changes#diff-a082bea4cb97f2978eb7abd1de48ecde6447923e60eb55409a243b98e1072fa3
https://github.com/python-control/python-control/pull/209/changes#diff-a082bea4cb97f2978eb7abd1de48ecde6447923e60eb55409a243b98e1072fa3
control/freqplot.pyhttps://github.com/python-control/python-control/pull/209/changes#diff-a751fe1009e7b656d19357a39abb58dd88b89052c9d9259c3393a4648b697a16
View file https://github.com/icam0/python-control/blob/17c4a95c447f76ae2a6f72e594da3aa3cf4d5741/control/freqplot.py
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/python-control/python-control/pull/209/{{ revealButtonHref }}
https://github.com/python-control/python-control/pull/209/changes#diff-a751fe1009e7b656d19357a39abb58dd88b89052c9d9259c3393a4648b697a16
https://github.com/python-control/python-control/pull/209/changes#diff-a751fe1009e7b656d19357a39abb58dd88b89052c9d9259c3393a4648b697a16
https://github.com/python-control/python-control/pull/209/changes#diff-a751fe1009e7b656d19357a39abb58dd88b89052c9d9259c3393a4648b697a16
https://github.com/python-control/python-control/pull/209/changes#diff-a751fe1009e7b656d19357a39abb58dd88b89052c9d9259c3393a4648b697a16
https://github.com/python-control/python-control/pull/209/changes#diff-a751fe1009e7b656d19357a39abb58dd88b89052c9d9259c3393a4648b697a16
https://github.com/python-control/python-control/pull/209/changes#diff-a751fe1009e7b656d19357a39abb58dd88b89052c9d9259c3393a4648b697a16
https://github.com/python-control/python-control/pull/209/changes#diff-a751fe1009e7b656d19357a39abb58dd88b89052c9d9259c3393a4648b697a16
https://github.com/python-control/python-control/pull/209/changes#diff-a751fe1009e7b656d19357a39abb58dd88b89052c9d9259c3393a4648b697a16
https://github.com/python-control/python-control/pull/209/changes#diff-a751fe1009e7b656d19357a39abb58dd88b89052c9d9259c3393a4648b697a16
https://github.com/python-control/python-control/pull/209/changes#diff-a751fe1009e7b656d19357a39abb58dd88b89052c9d9259c3393a4648b697a16
https://github.com/python-control/python-control/pull/209/changes#diff-a751fe1009e7b656d19357a39abb58dd88b89052c9d9259c3393a4648b697a16
https://github.com/python-control/python-control/pull/209/changes#diff-a751fe1009e7b656d19357a39abb58dd88b89052c9d9259c3393a4648b697a16
Please reload this pagehttps://github.com/python-control/python-control/pull/209/changes
https://github.com
Termshttps://docs.github.com/site-policy/github-terms/github-terms-of-service
Privacyhttps://docs.github.com/site-policy/privacy-policies/github-privacy-statement
Securityhttps://github.com/security
Statushttps://www.githubstatus.com/
Communityhttps://github.community/
Docshttps://docs.github.com/
Contacthttps://support.github.com?tags=dotcom-footer

Viewport: width=device-width


URLs of crawlers that visited me.