René's URL Explorer Experiment


Title: Disk margin calculations by josiahdelange · Pull Request #1146 · python-control/python-control · GitHub

Open Graph Title: Disk margin calculations by josiahdelange · Pull Request #1146 · python-control/python-control

X Title: Disk margin calculations by josiahdelange · Pull Request #1146 · python-control/python-control

Description: Am relatively new to this toolbox, have been using it here and there and found #726. This is an initial prototype Python implementation of disk margins, built on top of python-control and slycot. The code should work both for SISO and MIMO systems, the latter of which requires slycot (for SLICOT's AB13MD) to compute the upper bound of $\mu$ at each discrete frequency. The function disk_margins computes disk margins (and corresponding disk-based gain/phase margins), optionally returning the whole frequency-dependent vectors for further plotting. It's been verified against the example SISO loop transfer functions in the published paper and the "spinning satellite" MIMO example from the MathWorks documentation. I also confirmed SISO disk margins match the relevant output of existing function stability_margins corresponding to the Nyquist plot's distance to -1. All seem to match within a few significant digits, so the general behavior seems correct. Might be good to get another set of eyes to double check/test further. I tried to base as much as possible (e.g. style conventions) on existing code in control/margins.py. Example usage (see examples/disk_margin.py): import os, sys, math import numpy as np import control import math import matplotlib import matplotlib.pyplot as plt from warnings import warn import numpy as np import scipy as sp # Frequencies of interest omega = np.logspace(-1, 3, 1001) # Laplace variable s = control.tf('s') # MIMO loop transfer gain for the spinning satellite example # https://www.mathworks.com/help/robust/ug/mimo-stability-margins-for-spinning-satellite.html P = control.ss([[0, 10],[-10, 0]], np.eye(2), [[1, 10], [-10, 1]], [[0, 0],[0, 0]]) # plant C = control.ss([],[],[], [[1, -2], [0, 1]]) # controller L = P*C # output loop gain print(f"------------- Sensitivity function (S) -------------") DM, GM, PM = control.disk_margins(L, omega, skew = 1.0, returnall = True) # S-based (S) print(f"min(DM) = {min(DM)} (omega = {omega[np.argmin(DM)]})") print(f"GM = {GM[np.argmin(DM)]} dB") print(f"PM = {PM[np.argmin(DM)]} deg") print(f"min(GM) = {min(GM)} dB") print(f"min(PM) = {min(PM)} deg\n") plt.figure(3) plt.subplot(3,3,1) plt.semilogx(omega, DM, label='$\\alpha$') plt.legend() plt.title('Disk Margin') plt.grid() plt.xlim([omega[0], omega[-1]]) plt.ylim([0, 2]) plt.figure(3) plt.subplot(3,3,4) plt.semilogx(omega, GM, label='$\\gamma_{m}$') plt.ylabel('Gain Margin (dB)') plt.legend() plt.title('Gain-Only Margin') plt.grid() plt.xlim([omega[0], omega[-1]]) plt.ylim([0, 40]) plt.figure(3) plt.subplot(3,3,7) plt.semilogx(omega, PM, label='$\\phi_{m}$') plt.ylabel('Phase Margin (deg)') plt.legend() plt.title('Phase-Only Margin') plt.grid() plt.xlim([omega[0], omega[-1]]) plt.ylim([0, 90]) print(f"------------- Complementary sensitivity function (T) -------------") DM, GM, PM = control.disk_margins(L, omega, skew = -1.0, returnall = True) # T-based (T) print(f"min(DM) = {min(DM)} (omega = {omega[np.argmin(DM)]})") print(f"GM = {GM[np.argmin(DM)]} dB") print(f"PM = {PM[np.argmin(DM)]} deg") print(f"min(GM) = {min(GM)} dB") print(f"min(PM) = {min(PM)} deg\n") plt.figure(3) plt.subplot(3,3,2) plt.semilogx(omega, DM, label='$\\alpha$') plt.legend() plt.title('Disk Margin') plt.grid() plt.xlim([omega[0], omega[-1]]) plt.ylim([0, 2]) plt.figure(3) plt.subplot(3,3,5) plt.semilogx(omega, GM, label='$\\gamma_{m}$') plt.ylabel('Gain Margin (dB)') plt.legend() plt.title('Gain-Only Margin') plt.grid() plt.xlim([omega[0], omega[-1]]) plt.ylim([0, 40]) plt.figure(3) plt.subplot(3,3,8) plt.semilogx(omega, PM, label='$\\phi_{m}$') plt.ylabel('Phase Margin (deg)') plt.legend() plt.title('Phase-Only Margin') plt.grid() plt.xlim([omega[0], omega[-1]]) plt.ylim([0, 90]) print(f"------------- Balanced sensitivity function (S - T) -------------") DM, GM, PM = control.disk_margins(L, omega, skew = 0.0, returnall = True) # balanced (S - T) print(f"min(DM) = {min(DM)} (omega = {omega[np.argmin(DM)]})") print(f"GM = {GM[np.argmin(DM)]} dB") print(f"PM = {PM[np.argmin(DM)]} deg") print(f"min(GM) = {min(GM)} dB") print(f"min(PM) = {min(PM)} deg\n") plt.figure(3) plt.subplot(3,3,3) plt.semilogx(omega, DM, label='$\\alpha$') plt.legend() plt.title('Disk Margin') plt.grid() plt.xlim([omega[0], omega[-1]]) plt.ylim([0, 2]) plt.figure(3) plt.subplot(3,3,6) plt.semilogx(omega, GM, label='$\\gamma_{m}$') plt.ylabel('Gain Margin (dB)') plt.legend() plt.title('Gain-Only Margin') plt.grid() plt.xlim([omega[0], omega[-1]]) plt.ylim([0, 40]) plt.figure(3) plt.subplot(3,3,9) plt.semilogx(omega, PM, label='$\\phi_{m}$') plt.ylabel('Phase Margin (deg)') plt.legend() plt.title('Phase-Only Margin') plt.grid() plt.xlim([omega[0], omega[-1]]) plt.ylim([0, 90]) Output: ------------- Sensitivity function (S) ------------- min(DM) = 0.3697398698410271 (omega = 0.1) GM = 2.732761944304522 dB PM = 21.30709883385843 deg min(GM) = 2.732761944304522 dB min(PM) = 21.30709883385843 deg ------------- Complementary sensitivity function (T) ------------- min(DM) = 0.3683035923739884 (omega = 0.1) GM = 2.7236493433653735 dB PM = 21.223368586091564 deg min(GM) = 2.7236493433653735 dB min(PM) = 21.223368586091564 deg ------------- Balanced sensitivity function (S - T) ------------- min(DM) = 0.3769872636944355 (omega = 0.1) GM = 3.3140985364257256 dB PM = 21.349285542574695 deg min(GM) = 3.3140985364257256 dB min(PM) = 21.349285542574695 deg The example script also shows how to plot the allowable/stable region of gain and phase variations which will not destabilize the loop, in a local function plot_allowable_region, e.g. . . . DM_plot = [] DM_plot.append(control.disk_margins(L, omega, skew = -1.0)[0]) # T-based (T) DM_plot.append(control.disk_margins(L, omega, skew = 0.0)[0]) # balanced (S - T) DM_plot.append(control.disk_margins(L, omega, skew = 1.0)[0]) # S-based (S) plt.figure(30) plot_allowable_region(DM_plot, skew = [-1.0, 0.0, 1.0])

Open Graph Description: Am relatively new to this toolbox, have been using it here and there and found #726. This is an initial prototype Python implementation of disk margins, built on top of python-control and slycot. ...

X Description: Am relatively new to this toolbox, have been using it here and there and found #726. This is an initial prototype Python implementation of disk margins, built on top of python-control and slycot. ...

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

X: @github

direct link

Domain: github.com

route-pattern/:user_id/:repository/pull/:id/files(.:format)
route-controllerpull_requests
route-actionfiles
fetch-noncev2:8b8f1bf5-78f3-cd99-bedb-397af589c5ce
current-catalog-service-hashae870bc5e265a340912cde392f23dad3671a0a881730ffdadd82f2f57d81641b
request-idB564:183EDE:184851F:20BCC94:697A99FF
html-safe-nonce88cba55a0b12cb65b35949c4effe35b6a92f5b4a26d5165603c3b9ef2289f211
visitor-payloadeyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJCNTY0OjE4M0VERToxODQ4NTFGOjIwQkNDOTQ6Njk3QTk5RkYiLCJ2aXNpdG9yX2lkIjoiNTg4NTAxMjEzMTE3MzgwMDQ0NyIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9
visitor-hmac8991ef09bfa03b7a863e38ce22b50c0206183e69d49379831574f6785acddd70
hovercard-subject-tagpull_request:2478921952
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/1146/files
twitter:imagehttps://avatars.githubusercontent.com/u/7785578?s=400&v=4
twitter:cardsummary_large_image
og:imagehttps://avatars.githubusercontent.com/u/7785578?s=400&v=4
og:image:altAm relatively new to this toolbox, have been using it here and there and found #726. This is an initial prototype Python implementation of disk margins, built on top of python-control and slycot. ...
og:site_nameGitHub
og:typeobject
hostnamegithub.com
expected-hostnamegithub.com
Nonef73c0dfa17dfe2bc934284d1387c1cedefe723d2133ede564feefd2cbeb98e55
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
release58b9322bb0d01c6949be2239e39780fa702e604c
ui-targetfull
theme-color#1e2327
color-schemelight dark

Links:

Skip to contenthttps://github.com/python-control/python-control/pull/1146/files#start-of-content
https://github.com/
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fpython-control%2Fpython-control%2Fpull%2F1146%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%2F1146%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/1146/files
Reloadhttps://github.com/python-control/python-control/pull/1146/files
Reloadhttps://github.com/python-control/python-control/pull/1146/files
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:mainhttps://github.com/python-control/python-control/tree/main
josiahdelange:jdelange/disk-marginshttps://github.com/josiahdelange/python-control/tree/jdelange/disk-margins
Conversation 39 https://github.com/python-control/python-control/pull/1146
Commits 40 https://github.com/python-control/python-control/pull/1146/commits
Checks 14 https://github.com/python-control/python-control/pull/1146/checks
Files changed https://github.com/python-control/python-control/pull/1146/files
Please reload this pagehttps://github.com/python-control/python-control/pull/1146/files
Disk margin calculations https://github.com/python-control/python-control/pull/1146/files#top
Show all changes 40 commits https://github.com/python-control/python-control/pull/1146/files
f6dada2 Initial version of disk margin calculation and example/test script josiahdelange Jan 11, 2025 https://github.com/python-control/python-control/pull/1146/commits/f6dada2b7fb5a683169abb05faddd23d818a1389
bdb82a5 Merge remote-tracking branch 'origin' into jdelange/disk-margins josiahdelange Jan 11, 2025 https://github.com/python-control/python-control/pull/1146/commits/bdb82a5861a3bef31a09baeb67096483c4961575
e46f824 Comment updates: update margins.py header, clarify import exception h… josiahdelange Jan 11, 2025 https://github.com/python-control/python-control/pull/1146/commits/e46f824dd924b9b7ad2adfb283333341a18de819
1e3af88 More work in progress on disk margin calculation, adding new prototyp… josiahdelange Jan 12, 2025 https://github.com/python-control/python-control/pull/1146/commits/1e3af88cc9bfaf7ad3a27986b65ebf5458a6e644
ba15789 Add disk_margin_plot to subroutine list in comment header in margins.py josiahdelange Jan 12, 2025 https://github.com/python-control/python-control/pull/1146/commits/ba157895fee83ecc15bd5c1bcd8f56f4e50778a5
e47ae02 Follow-on to ba157895fee83ecc15bd5c1bcd8f56f4e50778a5, add disk_margi… josiahdelange Jan 12, 2025 https://github.com/python-control/python-control/pull/1146/commits/e47ae02dad355468eafa1005fd580fc866b58725
20686fe Merge branch 'python-control:main' into jdelange/disk-margins josiahdelange Jan 13, 2025 https://github.com/python-control/python-control/pull/1146/commits/20686fe64193a4a6f71b17011fd84846d686260d
f84221d More work in progress on disk_margin_plot. Corrected a typo/bug in the josiahdelange Jan 14, 2025 https://github.com/python-control/python-control/pull/1146/commits/f84221dcb1dbd5c978eef0f61be32d263b6fba37
edf8040 Merge branch 'jdelange/disk-margins' of github.com:josiahdelange/pyth… josiahdelange Jan 14, 2025 https://github.com/python-control/python-control/pull/1146/commits/edf8040ce86b519bbff4fbbde230db06ad4237a8
9d55419 Merge remote-tracking branch 'origin/main' into jdelange/disk-margins josiahdelange Apr 12, 2025 https://github.com/python-control/python-control/pull/1146/commits/9d554196eef327bd63f591395db5bedfaf36190d
2cf1545 Further progress/debugging on disk margin calculation + plot utility josiahdelange Apr 21, 2025 https://github.com/python-control/python-control/pull/1146/commits/2cf1545244b64f309fae6c3f56a65e4aae68bebb
bbf37f0 Merge remote-tracking branch 'origin/main' into jdelange/disk-margins josiahdelange Apr 21, 2025 https://github.com/python-control/python-control/pull/1146/commits/bbf37f0afd1e0ffcc462f6ddce89895a51063813
c3efe75 Clean up docstring/code for disk_margin_plot josiahdelange Apr 21, 2025 https://github.com/python-control/python-control/pull/1146/commits/c3efe756180e6d863fb42c7b5a6fa09dbfe3a8c5
63c8523 Clean up docstring/code for disk_margin_plot josiahdelange Apr 21, 2025 https://github.com/python-control/python-control/pull/1146/commits/63c8523303bb68745540a6e2c9f7344c44393ade
cffc3e5 Remove debugging statements, update comments, add unit tests. josiahdelange Apr 23, 2025 https://github.com/python-control/python-control/pull/1146/commits/cffc3e505bb8af9e8d634fe4a977018bd9716d9a
91517f9 Minor change to fix logic to find minimum across DGM, DPM numpy vectors josiahdelange Apr 24, 2025 https://github.com/python-control/python-control/pull/1146/commits/91517f9c7eea26327abd1db9a1ab7afdd2b10e95
86329e0 Rename disk margin example, since unit tests are now written in contr… josiahdelange Apr 24, 2025 https://github.com/python-control/python-control/pull/1146/commits/86329e08024f357ee8b9c06ced5842b4a31c27a4
d92fb20 Remove unneeded dependencies from margins.py, used for debugging josiahdelange Apr 24, 2025 https://github.com/python-control/python-control/pull/1146/commits/d92fb2045a786581741ddb703819f7ae5865a323
b2a2edc Minor updates to docstrings josiahdelange Apr 24, 2025 https://github.com/python-control/python-control/pull/1146/commits/b2a2edc620f26fed6e897f0269618899c3b2562b
1f0ee52 Undo d92fb2045a786581741ddb703819f7ae5865a323 josiahdelange Apr 24, 2025 https://github.com/python-control/python-control/pull/1146/commits/1f0ee52af1c41a2d486ad91ac5e91211cde2a3aa
ba41e8c Minor tweaks to plots in example script for readability josiahdelange Apr 24, 2025 https://github.com/python-control/python-control/pull/1146/commits/ba41e8c585b11309d0844b685b1676dbe760fd4c
14eb315 Fix typo in disk_margin_plot. josiahdelange Apr 24, 2025 https://github.com/python-control/python-control/pull/1146/commits/14eb315b69fb7e1257994a468c512879e367094e
0bebc1d Fix mag2db import hack/workaround and trim down disk_margin docstring. josiahdelange Apr 25, 2025 https://github.com/python-control/python-control/pull/1146/commits/0bebc1de9b2ebe28cd26d70ebcefd485bc057fea
87714bd Add input handling to disk_margin, clean up column width/comments josiahdelange Apr 26, 2025 https://github.com/python-control/python-control/pull/1146/commits/87714bdaa3c7b23fa34990649242d602b51b0d0f
c17910f Move disk_margin_plot out of the library into the example script josiahdelange Apr 26, 2025 https://github.com/python-control/python-control/pull/1146/commits/c17910ff1e27b2db56661f70592c962680f538e1
5f34a7b Recommended changes from the linter josiahdelange Apr 26, 2025 https://github.com/python-control/python-control/pull/1146/commits/5f34a7bea410715ee1389a36cd8de3e7001ebf34
f0e2d74 Follow-on to 5f34a7bea410715ee1389a36cd8de3e7001ebf34 josiahdelange Apr 26, 2025 https://github.com/python-control/python-control/pull/1146/commits/f0e2d746a350f0a10c2a8883236f96a6bc6a373f
a5fcb91 Add disk_margins to function list josiahdelange Apr 26, 2025 https://github.com/python-control/python-control/pull/1146/commits/a5fcb91606c4f2e5223997f57d70a1aaff6dbd10
077d538 Whittle down the docstring from disk_margins josiahdelange Apr 26, 2025 https://github.com/python-control/python-control/pull/1146/commits/077d538df502ee269b8e23fe172f392509c5c22c
8f0c037 Put more comments in the disk margin example, add example to document… josiahdelange Apr 26, 2025 https://github.com/python-control/python-control/pull/1146/commits/8f0c037e0b72ac174764dd9a8feb94b251d9180c
ce80819 Fixing docstrings josiahdelange Apr 26, 2025 https://github.com/python-control/python-control/pull/1146/commits/ce80819300de7be5051f2ebed9d87b5793b2257d
397efab Corrected expected values for 'no-slycot' condition in newly-added un… josiahdelange Apr 26, 2025 https://github.com/python-control/python-control/pull/1146/commits/397efabbe7ff9dcc11f2c4309ba73d63ed44d742
cc02712 Attempt #2 at 397efabbe7ff9dcc11f2c4309ba73d63ed44d742, based on lint… josiahdelange Apr 26, 2025 https://github.com/python-control/python-control/pull/1146/commits/cc027126538301bd9b0fef625ad4f40303886d16
e8897f6 Address @murrayrm review comments. josiahdelange Apr 29, 2025 https://github.com/python-control/python-control/pull/1146/commits/e8897f6fb57d1c9f7b7409055383083cdb59ae68
579f24b Update formatting per PEP8/@murrayrm review comments. Add additional… josiahdelange Apr 29, 2025 https://github.com/python-control/python-control/pull/1146/commits/579f24b709cc07ec3349ac2c397db9c725bb47b4
fe79760 Follow-on to e8897f6fb57d1c9f7b7409055383083cdb59ae68: remove now-unn… josiahdelange Apr 29, 2025 https://github.com/python-control/python-control/pull/1146/commits/fe79760dcaafe6ada55dd40390e2b0e6a08b2b52
b85147e Update formatting per @murrayrm review comments josiahdelange Jun 22, 2025 https://github.com/python-control/python-control/pull/1146/commits/b85147e7020c6a1e6bad9713cff5fed68e6c1de0
7186406 Merge branch 'python-control:main' into jdelange/disk-margins josiahdelange Jun 22, 2025 https://github.com/python-control/python-control/pull/1146/commits/7186406b5b62f754750817a060249e48c280d533
eb3af29 Remove temporarily-added string from docstring josiahdelange Jun 22, 2025 https://github.com/python-control/python-control/pull/1146/commits/eb3af29c6cb17e399e50e46ab275e6f5b3bba74c
bb06c9e Minor tweak to docstring to fit the word 'function' back into the des… josiahdelange Jun 22, 2025 https://github.com/python-control/python-control/pull/1146/commits/bb06c9edc4670f94ad9551050d75cb3d47d2ec81
Clear filters https://github.com/python-control/python-control/pull/1146/files
Please reload this pagehttps://github.com/python-control/python-control/pull/1146/files
Please reload this pagehttps://github.com/python-control/python-control/pull/1146/files
margins.py https://github.com/python-control/python-control/pull/1146/files#diff-f6d94f1ff38967f73b006c0d051f68e0a86db247c36c226c6035f9615ad80088
margin_test.py https://github.com/python-control/python-control/pull/1146/files#diff-3c7b07fb37cfb63b385fb29c6c8086a3d55689d3249ff6c48434bee5764946bd
disk_margins.rst https://github.com/python-control/python-control/pull/1146/files#diff-2ecc3ca54b1aa7500a67b2058241780ca65ee8bcf2f3a7d8975e9eef6a1fa272
functions.rst https://github.com/python-control/python-control/pull/1146/files#diff-b6df90171a7b358fdf3cb7ec04a4c0731911997c09db1651ddcd4de2948528fb
disk_margins.py https://github.com/python-control/python-control/pull/1146/files#diff-bae60ad38d5f00e05f039c9bdd4a21fa2f3828574983e8dd93119a601ba3b81e
control/margins.pyhttps://github.com/python-control/python-control/pull/1146/files#diff-f6d94f1ff38967f73b006c0d051f68e0a86db247c36c226c6035f9615ad80088
View file https://github.com/josiahdelange/python-control/blob/bb06c9edc4670f94ad9551050d75cb3d47d2ec81/control/margins.py
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/python-control/python-control/pull/1146/{{ revealButtonHref }}
https://github.com/python-control/python-control/pull/1146/files#diff-f6d94f1ff38967f73b006c0d051f68e0a86db247c36c226c6035f9615ad80088
https://github.com/python-control/python-control/pull/1146/files#diff-f6d94f1ff38967f73b006c0d051f68e0a86db247c36c226c6035f9615ad80088
https://github.com/python-control/python-control/pull/1146/files#diff-f6d94f1ff38967f73b006c0d051f68e0a86db247c36c226c6035f9615ad80088
https://github.com/python-control/python-control/pull/1146/files#diff-f6d94f1ff38967f73b006c0d051f68e0a86db247c36c226c6035f9615ad80088
https://github.com/python-control/python-control/pull/1146/files#diff-f6d94f1ff38967f73b006c0d051f68e0a86db247c36c226c6035f9615ad80088
Please reload this pagehttps://github.com/python-control/python-control/pull/1146/files
control/tests/margin_test.pyhttps://github.com/python-control/python-control/pull/1146/files#diff-3c7b07fb37cfb63b385fb29c6c8086a3d55689d3249ff6c48434bee5764946bd
View file https://github.com/josiahdelange/python-control/blob/bb06c9edc4670f94ad9551050d75cb3d47d2ec81/control/tests/margin_test.py
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/python-control/python-control/pull/1146/{{ revealButtonHref }}
https://github.com/python-control/python-control/pull/1146/files#diff-3c7b07fb37cfb63b385fb29c6c8086a3d55689d3249ff6c48434bee5764946bd
https://github.com/python-control/python-control/pull/1146/files#diff-3c7b07fb37cfb63b385fb29c6c8086a3d55689d3249ff6c48434bee5764946bd
https://github.com/python-control/python-control/pull/1146/files#diff-3c7b07fb37cfb63b385fb29c6c8086a3d55689d3249ff6c48434bee5764946bd
doc/examples/disk_margins.rsthttps://github.com/python-control/python-control/pull/1146/files#diff-2ecc3ca54b1aa7500a67b2058241780ca65ee8bcf2f3a7d8975e9eef6a1fa272
View file https://github.com/josiahdelange/python-control/blob/bb06c9edc4670f94ad9551050d75cb3d47d2ec81/doc/examples/disk_margins.rst
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/python-control/python-control/pull/1146/{{ revealButtonHref }}
doc/functions.rsthttps://github.com/python-control/python-control/pull/1146/files#diff-b6df90171a7b358fdf3cb7ec04a4c0731911997c09db1651ddcd4de2948528fb
View file https://github.com/josiahdelange/python-control/blob/bb06c9edc4670f94ad9551050d75cb3d47d2ec81/doc/functions.rst
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/python-control/python-control/pull/1146/{{ revealButtonHref }}
https://github.com/python-control/python-control/pull/1146/files#diff-b6df90171a7b358fdf3cb7ec04a4c0731911997c09db1651ddcd4de2948528fb
https://github.com/python-control/python-control/pull/1146/files#diff-b6df90171a7b358fdf3cb7ec04a4c0731911997c09db1651ddcd4de2948528fb
Please reload this pagehttps://github.com/python-control/python-control/pull/1146/files
Please reload this pagehttps://github.com/python-control/python-control/pull/1146/files
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.