From 353f5f2baddb6035fc9f09e4e96ad43f3733d2af7109938e38ae14bb4bf4e5fc Mon Sep 17 00:00:00 2001 From: Dirk Mueller Date: Wed, 14 Aug 2024 15:14:05 +0000 Subject: [PATCH] - update to modern python on sle15 * Small docstring fixes for release by @murrayrm in #832 - Update to version 0.9.1 - Update to version 0.8.4 * Improved default time vector for time response * New use_legacy_defaults function to allow compatibility * Allow creation of non-proper transfer functions (bnavigator, rlegnain) * Added ability to set arrow head length and width option * Added ability to 'prewarp' the conversion of continuous to * Added rlocus capability for discrete-time systems * Updated pzmap grid to be compatible with matplotlib updates * Implement loadable string representation (repr) for tf, ss, * Fixed margin computation for discrete time systems * Fixed InterconnectedSystem naming bugs, improved * Fixed LinearIOSystem output bug in output function * Fixed bug in forced_response that overrode squeeze * Use rad/sec for Bode plot in MATLAB bode (was erroneously * Removed deprecated scipy calls and updated to latest numpy * Updated unit tests + switch to pytest (bnavigator, * Return type for eigenvalues in lqe changed to 1D array - Skip a test family on Leap because of segfaults in numpy - moved Pillow requirement to matplotlib package - add pr430-numpy119delete.patch to fix test failures with new numpy - remove ppc workaround and matrix type during tests gh#python-control/python-control#423 - skip mixsyn test on PowerPC boo#1172555 duplicated array test - remove python-devel from BuildRequires - add slycot to BuildRequires for tests OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:numeric/python-control?expand=0&rev=56 --- .gitattributes | 23 ++ .gitignore | 1 + control-0.10.0.tar.gz | 3 + control-pr994-numpy2.patch | 205 ++++++++++++++ python-control-rpmlintrc | 1 + python-control.changes | 531 +++++++++++++++++++++++++++++++++++++ python-control.spec | 92 +++++++ 7 files changed, 856 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 control-0.10.0.tar.gz create mode 100644 control-pr994-numpy2.patch create mode 100644 python-control-rpmlintrc create mode 100644 python-control.changes create mode 100644 python-control.spec diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..9b03811 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,23 @@ +## Default LFS +*.7z filter=lfs diff=lfs merge=lfs -text +*.bsp filter=lfs diff=lfs merge=lfs -text +*.bz2 filter=lfs diff=lfs merge=lfs -text +*.gem filter=lfs diff=lfs merge=lfs -text +*.gz filter=lfs diff=lfs merge=lfs -text +*.jar filter=lfs diff=lfs merge=lfs -text +*.lz filter=lfs diff=lfs merge=lfs -text +*.lzma filter=lfs diff=lfs merge=lfs -text +*.obscpio filter=lfs diff=lfs merge=lfs -text +*.oxt filter=lfs diff=lfs merge=lfs -text +*.pdf filter=lfs diff=lfs merge=lfs -text +*.png filter=lfs diff=lfs merge=lfs -text +*.rpm filter=lfs diff=lfs merge=lfs -text +*.tbz filter=lfs diff=lfs merge=lfs -text +*.tbz2 filter=lfs diff=lfs merge=lfs -text +*.tgz filter=lfs diff=lfs merge=lfs -text +*.ttf filter=lfs diff=lfs merge=lfs -text +*.txz filter=lfs diff=lfs merge=lfs -text +*.whl filter=lfs diff=lfs merge=lfs -text +*.xz filter=lfs diff=lfs merge=lfs -text +*.zip filter=lfs diff=lfs merge=lfs -text +*.zst filter=lfs diff=lfs merge=lfs -text diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..57affb6 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.osc diff --git a/control-0.10.0.tar.gz b/control-0.10.0.tar.gz new file mode 100644 index 0000000..e2423c2 --- /dev/null +++ b/control-0.10.0.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c18b767537f45c7fd07b2e4afe8fbe5964019499b5f52f888edb5d8560bab53 +size 8956376 diff --git a/control-pr994-numpy2.patch b/control-pr994-numpy2.patch new file mode 100644 index 0000000..4f8ee64 --- /dev/null +++ b/control-pr994-numpy2.patch @@ -0,0 +1,205 @@ +From 03df7185bc8a44a345fb926effb38ed6aeb817cc Mon Sep 17 00:00:00 2001 +From: Ben Greiner +Date: Sat, 20 Apr 2024 16:25:33 +0200 +Subject: [PATCH 1/4] Replace np.NaN removed in numpy 2 + +--- + control/tests/timeresp_test.py | 14 +++++++------- + control/timeresp.py | 14 +++++++------- + 2 files changed, 14 insertions(+), 14 deletions(-) + +diff --git a/control/tests/timeresp_test.py b/control/tests/timeresp_test.py +index fb21180b..441f4a7b 100644 +--- a/control/tests/timeresp_test.py ++++ b/control/tests/timeresp_test.py +@@ -173,15 +173,15 @@ def tsystem(self, request): + # System Type 1 - Step response not stationary: G(s)=1/s(s+1) + siso_tf_type1 = TSys(TransferFunction(1, [1, 1, 0])) + siso_tf_type1.step_info = { +- 'RiseTime': np.NaN, +- 'SettlingTime': np.NaN, +- 'SettlingMin': np.NaN, +- 'SettlingMax': np.NaN, +- 'Overshoot': np.NaN, +- 'Undershoot': np.NaN, ++ 'RiseTime': np.nan, ++ 'SettlingTime': np.nan, ++ 'SettlingMin': np.nan, ++ 'SettlingMax': np.nan, ++ 'Overshoot': np.nan, ++ 'Undershoot': np.nan, + 'Peak': np.Inf, + 'PeakTime': np.Inf, +- 'SteadyStateValue': np.NaN} ++ 'SteadyStateValue': np.nan} + + # SISO under shoot response and positive final value + # G(s)=(-s+1)/(s²+s+1) +diff --git a/control/timeresp.py b/control/timeresp.py +index 58207e88..843ae3a8 100644 +--- a/control/timeresp.py ++++ b/control/timeresp.py +@@ -1590,15 +1590,15 @@ def step_info(sysdata, T=None, T_num=None, yfinal=None, params=None, + InfValue = InfValues[i, j] + sgnInf = np.sign(InfValue.real) + +- rise_time: float = np.NaN +- settling_time: float = np.NaN +- settling_min: float = np.NaN +- settling_max: float = np.NaN ++ rise_time: float = np.nan ++ settling_time: float = np.nan ++ settling_min: float = np.nan ++ settling_max: float = np.nan + peak_value: float = np.Inf + peak_time: float = np.Inf +- undershoot: float = np.NaN +- overshoot: float = np.NaN +- steady_state_value: complex = np.NaN ++ undershoot: float = np.nan ++ overshoot: float = np.nan ++ steady_state_value: complex = np.nan + + if not np.isnan(InfValue) and not np.isinf(InfValue): + # RiseTime + +From 38188fbd6d8b95ef0ed5d76e396db43f95bbf488 Mon Sep 17 00:00:00 2001 +From: Ben Greiner +Date: Sat, 20 Apr 2024 16:35:21 +0200 +Subject: [PATCH 2/4] Replace np.Inf removed in numpy 2 + +--- + control/tests/timeresp_test.py | 4 ++-- + control/timeresp.py | 4 ++-- + 2 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/control/tests/timeresp_test.py b/control/tests/timeresp_test.py +index 441f4a7b..bdbbb3e8 100644 +--- a/control/tests/timeresp_test.py ++++ b/control/tests/timeresp_test.py +@@ -179,8 +179,8 @@ def tsystem(self, request): + 'SettlingMax': np.nan, + 'Overshoot': np.nan, + 'Undershoot': np.nan, +- 'Peak': np.Inf, +- 'PeakTime': np.Inf, ++ 'Peak': np.inf, ++ 'PeakTime': np.inf, + 'SteadyStateValue': np.nan} + + # SISO under shoot response and positive final value +diff --git a/control/timeresp.py b/control/timeresp.py +index 843ae3a8..428baf23 100644 +--- a/control/timeresp.py ++++ b/control/timeresp.py +@@ -1594,8 +1594,8 @@ def step_info(sysdata, T=None, T_num=None, yfinal=None, params=None, + settling_time: float = np.nan + settling_min: float = np.nan + settling_max: float = np.nan +- peak_value: float = np.Inf +- peak_time: float = np.Inf ++ peak_value: float = np.inf ++ peak_time: float = np.inf + undershoot: float = np.nan + overshoot: float = np.nan + steady_state_value: complex = np.nan + +From 0b5332bfa9580df81ba2ebc6f9d8f54975fa9cd6 Mon Sep 17 00:00:00 2001 +From: Ben Greiner +Date: Sat, 20 Apr 2024 16:44:45 +0200 +Subject: [PATCH 3/4] replace deprecated numpy.linalg.linalg.LinAlgError with + numpy.linalg.LinAlgError and isort + +--- + control/statesp.py | 30 ++++++++++++++++-------------- + 1 file changed, 16 insertions(+), 14 deletions(-) + +diff --git a/control/statesp.py b/control/statesp.py +index e14a8358..0c2856b1 100644 +--- a/control/statesp.py ++++ b/control/statesp.py +@@ -48,26 +48,27 @@ + """ + + import math ++from copy import deepcopy ++from warnings import warn ++ + import numpy as np +-from numpy import any, asarray, concatenate, cos, delete, \ +- empty, exp, eye, isinf, ones, pad, sin, zeros, squeeze +-from numpy.random import rand, randn +-from numpy.linalg import solve, eigvals, matrix_rank +-from numpy.linalg.linalg import LinAlgError + import scipy as sp + import scipy.linalg +-from scipy.signal import cont2discrete ++from numpy import (any, asarray, concatenate, cos, delete, empty, exp, eye, ++ isinf, ones, pad, sin, squeeze, zeros) ++from numpy.linalg import LinAlgError, eigvals, matrix_rank, solve ++from numpy.random import rand, randn + from scipy.signal import StateSpace as signalStateSpace +-from warnings import warn ++from scipy.signal import cont2discrete + +-from .exception import ControlSlycot, slycot_check, ControlMIMONotImplemented ++from . import config ++from .exception import ControlMIMONotImplemented, ControlSlycot, slycot_check + from .frdata import FrequencyResponseData ++from .iosys import (InputOutputSystem, _process_dt_keyword, ++ _process_iosys_keywords, _process_signal_list, ++ common_timebase, isdtime, issiso) + from .lti import LTI, _process_frequency_response +-from .iosys import InputOutputSystem, common_timebase, isdtime, issiso, \ +- _process_iosys_keywords, _process_dt_keyword, _process_signal_list +-from .nlsys import NonlinearIOSystem, InterconnectedSystem +-from . import config +-from copy import deepcopy ++from .nlsys import InterconnectedSystem, NonlinearIOSystem + + try: + from slycot import ab13dd +@@ -2221,9 +2222,10 @@ def _convert_to_statespace(sys, use_prefix_suffix=False, method=None): + by the calling function. + + """ +- from .xferfcn import TransferFunction + import itertools + ++ from .xferfcn import TransferFunction ++ + if isinstance(sys, StateSpace): + return sys + + +From ebb8a5284c8c4e58ef8efdae656f1e4748b3ba68 Mon Sep 17 00:00:00 2001 +From: Ben Greiner +Date: Sat, 20 Apr 2024 16:49:11 +0200 +Subject: [PATCH 4/4] Replace deprecated numpy row_stack with vstack + +--- + control/rlocus.py | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/control/rlocus.py b/control/rlocus.py +index 631185cc..281fed08 100644 +--- a/control/rlocus.py ++++ b/control/rlocus.py +@@ -21,7 +21,7 @@ + import matplotlib.pyplot as plt + import numpy as np + import scipy.signal # signal processing toolbox +-from numpy import array, imag, poly1d, real, row_stack, zeros_like ++from numpy import array, imag, poly1d, real, vstack, zeros_like + + from . import config + from .exception import ControlMIMONotImplemented +@@ -421,7 +421,7 @@ def _RLFindRoots(nump, denp, kvect): + curroots.sort() + roots.append(curroots) + +- return row_stack(roots) ++ return vstack(roots) + + + def _RLSortRoots(roots): diff --git a/python-control-rpmlintrc b/python-control-rpmlintrc new file mode 100644 index 0000000..f80d2ea --- /dev/null +++ b/python-control-rpmlintrc @@ -0,0 +1 @@ +addFilter("explicit-lib-dependency.*matplotlib") diff --git a/python-control.changes b/python-control.changes new file mode 100644 index 0000000..61ee351 --- /dev/null +++ b/python-control.changes @@ -0,0 +1,531 @@ +------------------------------------------------------------------- +Wed Aug 14 15:13:55 UTC 2024 - Dirk Müller + +- update to modern python on sle15 + +------------------------------------------------------------------- +Mon Apr 29 06:41:41 UTC 2024 - Ben Greiner + +- Skip a flaky plot test + +------------------------------------------------------------------- +Sat Apr 20 15:20:30 UTC 2024 - Ben Greiner + +- Add control-pr994-numpy2.patch + gh#python-control/python-control#994 + +------------------------------------------------------------------- +Fri Apr 5 14:22:32 UTC 2024 - Ben Greiner + +- Update to 0.10.0 + * Multivariable interconnect functionality by @murrayrm in #881 + * Remove NumPy matrix class by @murrayrm in #913 + * I/O system class restructuring by @murrayrm in #916 + * Documentation fixes by @KybernetikJo in #919, #921, #922, #923 + * Add two MRAC siso examples by @KybernetikJo in #914 + * Time response plots by @murrayrm in #920 + * Print a connection table for interconnected systems by + @sawyerbfuller in #925 + * Update frequency response plots to use _response/_plot pattern + by @murrayrm in #924 + * create_statefbk_iosystem and optimal control enhancements by + @murrayrm in #930 + * Add unit test illustrating issue #935 + add method keyword for + tf2ss by @murrayrm in #937 + * Vectorize optimal control cost calculation by @urpok23 in #940 + * Improved speed of ctrb and obsv functions by @Jpickard1 in #941 + * Fix sphinx bug (erroneous use of class template) by @murrayrm + in #943 + * Fix bug in matched transformation + address other issues in + #950 by @murrayrm in #951 + * Fix typo in header of Hinf example by @jrforbes in #946 + * Fix typo in stochresp.py by @alex-damjanovic in #945 + * Fix TimeResponseData.to_pandas() to handle zero state case by + @murrayrm in #958 + * Update pole/zero and root locus plots to use _map/_plot pattern + by @murrayrm in #953 + * Fix CI warnings by @murrayrm in #955 + * Support Python 3.12, bump minimum support according to SPEC 0 + by @bnavigator in #961 + * Fix typos in pzmap.py by @matejkarasek in #962 + * Fix examples to work with SciPy 1.12 by @bnavigator in #965 + * Fix config test for missing old key warning by @bnavigator in + #972 + * Implementation of system norms by @henriks76 in #971, #976 + * Updated gram() to support discrete-time systems by @billtubbs + in #969 + * Update unit test infrastructure by @murrayrm in #981, #986 + * Remove external/ directory by @murrayrm in #983 + * Reimplementation of 2D phase plots by @murrayrm in #980 + * Update readthedocs to Python 3.12 by @murrayrm in #985 + * Fix warning messages in tests; update rlocus/pzmap limits by + @murrayrm in #984 + * Allow passing and saving of params in time responses by + @murrayrm in #982 +- Drop python-control-pr961-py312.patch + +------------------------------------------------------------------- +Sun Feb 4 10:46:16 UTC 2024 - Ben Greiner + +- Add python-control-pr961-py312.patch for python 312 support + gh#python-control/python-control#961 +- Use python-xdist: The tests grew over time and we have 4 flavors + at the moment + +------------------------------------------------------------------- +Mon Jan 29 08:42:53 UTC 2024 - Ben Greiner + +- Use PyQt5 for tests with matplotlib-qt5 (Avoid choice with + unsupported pyside6) + +------------------------------------------------------------------- +Sun Jun 11 15:06:25 UTC 2023 - Ben Greiner + +- Update to 0.9.4 + * Sisotool: Fix Matplotlib deprecation of axis share handling by + @bnavigator in #834 + * Fix Interconnect name clobbering by @henklaak in #857 + * Solve #862 and #864: bode_plot phase wrapping incorrect for + multiple systems by @henklaak in #863 + * Fix root_locus() handling of ax parameter by @henklaak in #871 + * Small fixes based on Caltech CDS 112 course by @murrayrm in + #849 + * Feature print zpk by @henklaak in #869 + * Feature enable doctest by @henklaak in #868 + * Optimization-based and moving horizon estimation by @murrayrm + in #877 + * new examples for Simulink-like interconnection of digital and + nonlinear systems by @sawyerbfuller in #882 + * fix blank bode plot in rootlocus_pid_designer by @sawyerbfuller + in #883 + * bandwidth feature by @SCLiao47 in #889 + * update nyquist_plot for DT transfer functions with poles at 0 + and 1 by @sawyerbfuller in #885 + * Add missing labels when returning TimeResponseData by + @joaoantoniocardoso in #892 + * fix damp command natural frequency printout for discrete poles + on real axis by @sawyerbfuller in #894 + * Add H2 and Hinf synthesis examples by @jrforbes in #895 + * warn if prewarp-frequency is not used by @sawyerbfuller in #900 + * make _convert_to_statespace properly pass signal and system + names by @sawyerbfuller in #884 + * Change name of converted LinearIOSystems by @murrayrm in #903 + * add/cleanup documentation on simulation functions by @murrayrm + in #905 + * fix up some warning messages due to converted systems by + @murrayrm in #907 + * fix bdschur (see issue #911) by @murrayrm in #912 + +------------------------------------------------------------------- +Thu Jan 26 09:40:27 UTC 2023 - Ben Greiner + +- Avoid i586 segfaults with Qt5/Matplotlib: + * Remove i586 malloc workarounds for memory allocation + * Don't test balanced model reduction on 32-bit + +------------------------------------------------------------------- +Sat Dec 31 19:48:37 UTC 2022 - Ben Greiner + +- Update to 0.9.3.post2 + * Improvements in optimal and flatsys modules, updated passivity + module, gain scheduling support, bug fixes + * Handle t_eval for static systems in input_output_response by + @murrayrm in #743 + * add GitHub URL for PyPi by @andriyor in #708 + * Remove Deprecated API calls to Pytest, SciPy <1.3, Python 2 by + @bnavigator in #745 + * Add passivity module, ispassive function, and passivity_test. + Introduces optional dependency cvxopt. by @Mark-Yeatman in #739 + * Slycot source uses setuptools_scm now by @bnavigator in #751 + * Passivity indices and support for discrete time systems. by + @Mark-Yeatman in #750 + * Switch CI to mambaforge and conda-forge channel by @bnavigator + in #757 + * Fix timebase bug in InterconnectedSystem (issue #754) by + @murrayrm in #755 + * fix issue with slycot balred change in state by @bnavigator in + #762 + * Build system and test suite update by @bnavigator in #759 + * fix control.matlab.lsim bug for discrete time system by + @murrayrm in #765 + * Add B-splines and solve_flat_ocp to flatsys by @murrayrm in + #763 + * CI: switch slycot and cvxopt installation order by @murrayrm in + #769 + * Fixed a couple of typos in documentation by @fredrhen in #775 + * Allow new matplotlib 3.6 error message in kwargs tests by + @bnavigator in #777 + * Move sys._update_params(params) before TimeResponseData return + when nstate == 0 by @hyumo in #774 + * Update MANIFEST.in by @bnavigator in #779 + * Improve compatibility of state space representation using LaTeX + by @gonmolina in #780 + * Fix interconnect type conversion bug for StateSpace systems by + @murrayrm in #788 + * fix _isstatic() to use nstates==0 by @murrayrm in #790 + * fix error when an IOSystem is combined with a TransferFunction + system by @sawyerbfuller in #793 + * check for and fix mutable keyword defaults by @murrayrm in #794 + * Fixes for bugs found by pylint by @roryyorke in #795 + * Support Python 3.11 and drop Python 3.7 by @bnavigator in #796 + * Fix find_eqpt when y0 is None by @adswid in #798 + * Preserve signal names upon conversion to discrete-time by + @sawyerbfuller in #797 + * Update benchmarks to help with optimal control tuning by + @murrayrm in #800 + * Update optimal.rst by @htadashi in #802 + * Add collocation method for optimal control problems by + @murrayrm in #799 + * Update README.rst by @sawyerbfuller in #810 + * Update docstring for impulse for discrete sys by @sawyerbfuller + in #812 + * Enable scalar division of state-space objects by @roryyorke in + #811 + * fix gain handling in rlocus and sisotool by @sawyerbfuller in + #809 + * Removed epsilon perturbation value in solve_passivity_LMI. Fix + associated unit test. by @Mark-Yeatman in #814 + * docstring improvements by @sawyerbfuller in #804 + * add zpk() function by @murrayrm in #816 + * Fix readthedocs to use pip-based install by @murrayrm in #817 + * Relax comparison of floats in tests by @bnavigator in #818 + * Add test matrix against operating environments by @murrayrm in + #821 + * Update find_eqpts to handle discrete time systems by @murrayrm + in #824 + * Small fixes and tweaks by @murrayrm in #826 + * update docs to use use numpydoc + linkcode by @murrayrm in #828 + * Add gain scheduling to create_statefbk_iosystem() by @murrayrm + in #827 + * continuous time system support for create_estimator_iosystem by + @murrayrm in #829 + * Small docstring fixes for release by @murrayrm in #832 +- Drop control-pr777-mpl36.patch, upstreamed + +------------------------------------------------------------------- +Fri Dec 23 20:09:25 UTC 2022 - Ben Greiner + +- Add control-pr777-mpl36.patch + gh#python-control/python-control#777 + +------------------------------------------------------------------- +Sun May 29 10:07:56 UTC 2022 - Ben Greiner + +- Update to 0.9.2 + * Improvements in I/O systems, stochastic systems, + optimization-based control, Nyquist plots + * Round to nearest integer decade for default omega vector by + @bnavigator in #688 + * Fix in documentation of ss2tf by @miroslavfikar in #695 + * Interpret str-type args to interconnect as non-sequence by + @roryyorke in #698 + * Fixes to various optimization-based control functions by + @murrayrm in #709 + * I/O system enhancements by @murrayrm in #710 + * Optimal control enhancements by @murrayrm in #712 + * Keyword argument checking by @murrayrm in #713 + * Stochastic systems additions by @murrayrm in #714 + * Updated system class functionality by @murrayrm in #721 + * Bug fix and improvements to Nyquist plots by @murrayrm in #722 + * Add linform to compute linear system L-infinity norm by + @roryyorke in #729 + * Improvements to Nichols chart plotting by @roryyorke in #723 + * Add envs to gitignore by @s35t in #731 + * Fix README.rst for twine by @murrayrm in #738 +- Drop 688.patch fixed upstream + +------------------------------------------------------------------- +Sat Feb 12 18:42:24 UTC 2022 - Ben Greiner + +- skip segfaulting test on i586 + +------------------------------------------------------------------- +Thu Feb 10 10:27:34 UTC 2022 - Guillaume GARDET + +- Backport patch to fix build on aarch64: + * 688.patch + +------------------------------------------------------------------- +Fri Dec 31 19:31:35 UTC 2021 - Ben Greiner + +- Require Python >= 3.7: Disable Leap backport build. It keeps + failing due to unresolvable PyVirtualDisplay. We officially do + not support Python 3.6 in upstream anymore. + +------------------------------------------------------------------- +Fri Dec 31 18:27:11 UTC 2021 - Ben Greiner + +- Update to version 0.9.1 + * Version 0.9.1 is a minor release that includes new + functionality for discrete time systems (dlqr, dlqe, drss), + flat systems (optimization and constraints), a new time + response data class, and many individual improvements and bug + fixes. + **New features:** + * Add optimization to flat systems trajectory generation (#569 by + murrayrm) + * Return a discrete time system with drss() (#589 by bnavigator) + * A first implementation of the singular value plot (#593 by + forgi86) + * Include InfValue into settling min/max calculation for + step_info (#600 by bnavigator) + * New time response data class (#649 by murrayrm) + * Check for unused subsystem signals in InterconnectedSystem + (#652 by roryyorke) + * New PID design function built on sisotool (#662 by + sawyerbfuller) + * Modify discrete-time contour for Nyquist plots to indent around + poles (#668 by sawyerbfuller) + * Additional I/O system type conversions (#672 by murrayrm) + * Remove Python 2.7 support and leverage @ operator (#679 by + bnavigator) + * Discrete time LQR and LQE (#670 by sawyerbfuller, murrayrm) + **Improvements, bug fixes:** + * Change step_info undershoot percentage calculation (#590 by + juanodecc) + * IPython LaTeX output only generated for small systems (#607 by + roryyorke) + * Fix warnings generated by sisotool (#608 by roryyorke) + * Discrete time LaTeX repr of StateSpace systems (#609 by + bnavigator) + * Updated rlocus.py to remove warning by sisotool() with + rlocus_grid=True (#616 by nirjhar-das) + * Refine automatic contour determination in Nyquist plot (#620 by + bnavigator) + * Fix damp method for discrete time systems with a negative + real-valued pole (#647 by vincentchoqueuse) + * Plot Nyquist frequency correctly in Bode plot in Hz (#651 by + murrayrm) + * Return frequency response for 0 and 1-state systems directly + (#663 by bnavigator) + * Fixed prewarp not working in c2d and sample_system, margin + docstring improvements (#669 by sawyerbfuller) + * Improved lqe calling functionality (#673 by murrayrm) + * Vectorize FRD feedback function (#680 by bnavigator) + * BUG: extrapolation in ufun throwing errors (#682 by + miroslavfikar) + * Allow use of SciPy for LQR, LQE (#683 by murrayrm) + * Improve forced_response and its documentation (#588 by + bnavigator) + * Add documentation about use of axis('equal') in pzmap, rlocus + (#685 by murrayrm) + **Additional changes:** + * Replace Travis badge with GHA workflows, add PyPI and conda + badges (#584 by bnavigator) + * Don't install toplevel benchmarks package (#585 by bnavigator) + * LTI squeeze: ndarray.ndim == 0 is also a scalar (#595 by + bnavigator) + * xfail testmarkovResults until #588 is merged (#601 by + bnavigator) + * Remove from readme.rst that you need a fortran compiler (#602 + by sawyerbfuller) + * Remove statement that slycot only on linux (#603 by + sawyerbfuller) + * Allow float precision in result assertions (#615 by bnavigator) + * Improved unit test coverage for root_locus: dtime and sisotool + (#617 by bnavigator) + * Add DefaultDict for deprecation handling (#619 by bnavigator) + * Documentation updates (#633 by murrayrm) + * Various docstring edits + fixed plot legends on cruise control + example (#643 by billtubbs) + * Ease test tolerance on timeseries (#659 by bnavigator) + * Use conda-forge for numpy (CI fix) (#667 by bnavigator) + * Fix doc escape (#674 by bnavigator) + * Remove duplicate Slycot error handling, require Slycot >=0.4 + (#678 by bnavigator) + +------------------------------------------------------------------- +Sun Mar 21 10:13:42 UTC 2021 - Ben Greiner + +- Update to version 0.9.0 + * Version 0.9.0 of the Python Control Toolbox + (python-control) contains a number of enhanced features + and changes to functions. Some of these changes may + require modifications to existing user code and, in + addition, some default settings have changed that may + affect the appearance of plots or operation of certain + functions. + * Significant new additions including improvements in the + I/O systems modules that allow automatic interconnection + of signals having the same name (via the interconnect + function), generation and plotting of describing functions + for closed loop systems with static nonlinearities, and a + new optimal control module that allows basic computation + of optimal controls (including model predictive + controllers). Some of the changes that may break use code + include the deprecation of the NumPy matrix type (2D NumPy + arrays are used instead), changes in the return value for + Nyquist plots (now returns number of encirclements rather + than the frequency response), switching the default + timebase of systems to be 0 rather than None (no + timebase), and changes in the processing of return values + for time and frequency responses (to make them more + consistent). In many cases, the earlier behavior can be + restored by calling use_legacy_defaults('0.8.4'). + New Features: + * Optimal control module, including rudimentary MPC + control (#549 by murrayrm) + * Describing functions plots (#521 by murrayrm) + * MIMO impulse and step response (#514 by murrayrm) + * I/O system improvements: + * linearize() retains signal names plus new interconnect() + function (#497 by murrayrm) + * Add summing junction + implicit signal interconnection (#517 + by murrayrm) + * Implementation of initial_phase, wrap_phase keywords for + bode_plot (#494 by murrayrm) + * Added IPython LaTeX representation method for StateSpace + objects (#450 by roryyorke) + * New dynamics() and output() methods in StateSpace (#566 by + sawyerbfuller) + * FRD systems can now be created from a discrete time LTI system + (#568 by bnavigator) + * Cost and constraints are now allowed for + flatsys.point_to_point() (#569 by murrayrm) + +------------------------------------------------------------------ +Thu Jan 21 23:09:04 UTC 2021 - Benjamin Greiner + +- Skip python36 because of scipy 1.6.0 + +------------------------------------------------------------------- +Mon Dec 28 20:31:00 UTC 2020 - Benjamin Greiner + +- Update to version 0.8.4 + * Improved default time vector for time response + functions (bnavigator, sawyerbfuller) + * New use_legacy_defaults function to allow compatibility + with previous versions (sawyerbfuller) + * Allow creation of non-proper transfer functions + (bnavigator, rlegnain) + * Added ability to set arrow head length and width option + in nyquist_plot (geekonloose) + * Added ability to 'prewarp' the conversion of continuous to + discrete-time systems (sawyerbfuller) + * Added rlocus capability for discrete-time systems + (sawyerbfuller) + * Updated pzmap grid to be compatible with matplotlib updates + (bnavigator) + * Implement loadable string representation (repr) for tf, ss, + and frd (repagh) + * Fixed margin computation for discrete time systems + (bnavigator) + * Fixed indexing bug in bdalg.connect (sawyerbfuller) + * Fixed InterconnectedSystem naming bugs, improved + conventions (samlaf) + * Fixed LinearIOSystem output bug in output function + (francescoseccamonte) + * Fixed bug in forced_response that overrode squeeze + parameter (bnavigator) + * Use rad/sec for Bode plot in MATLAB bode (was erroneously + defaulting to Hertz) (paulvicioso) + * Removed deprecated scipy calls and updated to latest numpy + (bnavigator) + * Multiple documentation updates (bnavigator, laurensvalk) + * New and improved examples for sisotool, pvtol (repagh, samlaf) + * The rlocus function no longer automatically creates a new + figure + * Updated unit tests + switch to pytest (bnavigator, + sawyerbfuller) + * Return type for eigenvalues in lqe changed to 1D array + (matches lqr) + * Small fixes + documentation updates to markov +- Remove forbidden arch macros in noarch package +- Drop patches merged upstream + * pr365-copy-PR-320-for-robust_array_test.patch + * pr366-ease-precision-tolerance.patch + * pr380-fix-pytest-discovery.patch + * pr430-numpy119delete.patch + +------------------------------------------------------------------- +Sun Oct 11 18:39:38 UTC 2020 - Benjamin Greiner + +- Skip a test family on Leap because of segfaults in numpy + +------------------------------------------------------------------- +Thu Jul 23 09:56:18 UTC 2020 - Benjamin Greiner + +- moved Pillow requirement to matplotlib package + +------------------------------------------------------------------- +Mon Jul 20 17:48:34 UTC 2020 - Benjamin Greiner + +- explicitely require Pillow for tests because of matplotlib + +------------------------------------------------------------------- +Thu Jul 9 18:56:06 UTC 2020 - Benjamin Greiner + +- add pr430-numpy119delete.patch to fix test failures with new numpy + +------------------------------------------------------------------- +Tue Jun 30 12:21:40 UTC 2020 - Benjamin Greiner + +- remove ppc workaround +- remove _service file + +------------------------------------------------------------------- +Fri Jun 26 15:29:50 UTC 2020 - Benjamin Greiner + +- move to pytest, ignore deprecation warnings for scipy functions + and matrix type during tests gh#python-control/python-control#423 +- fix invalid test discovery by pr380-fix-pytest-discovery.patch + gh#python-control/python-control#380 +- skip mixsyn test on PowerPC boo#1172555 + +------------------------------------------------------------------- +Sat Jan 18 01:18:39 UTC 2020 - Benjamin Greiner + +- update to version 0.8.3 +- remove patches that were merged upstream: + python-control-fixtestaugw.patch + python-control-pr317.patch + python-control-pr345.patch +- pr365-copy-PR-320-for-robust_array_test.patch + upstream PR#365 the former fixtestaugw patch for the new + duplicated array test +- pr366-ease-precision-tolerance.patch + upstream PR#366 to pass the checks on more architectures +- remove Python 2 package +- run all tests in xvfb env and prealloc differently for i586 + architecture + +------------------------------------------------------------------- +Wed Nov 27 18:13:20 UTC 2019 - Benjamin Greiner + +- python-control-pr345.patch: PR#345 to fix fails on some + architectures because of machine precision + +------------------------------------------------------------------- +Mon Nov 4 13:25:48 UTC 2019 - Benjamin Greiner + +- fix segfault: run only those tests that require xvfb with xvfb-run +- fix i586 build fail: add upstream PR#317 to replace float128 + +------------------------------------------------------------------- +Thu Jun 27 13:12:31 UTC 2019 - Benjamin Greiner + +- remove python-devel from BuildRequires + +------------------------------------------------------------------- +Tue Jun 25 15:41:59 UTC 2019 - Benjamin Greiner + +- add slycot to BuildRequires for tests + +------------------------------------------------------------------- +Wed Jun 19 12:48:24 UTC 2019 - Benjamin Greiner + +- switch to xvfb-run + +------------------------------------------------------------------- +Wed Jun 19 11:05:31 UTC 2019 - Benjamin Greiner + +make v0.8.2 spec test suite compliant +- specify Qt5Agg as Matplotlib backend +- add X11 to build system so that Qt5 tests pass +- reorganize spec file + +------------------------------------------------------------------- +Mon May 13 19:16:19 UTC 2019 - Benjamin Greiner + +update to version 0.8.2 +- diff --git a/python-control.spec b/python-control.spec new file mode 100644 index 0000000..90ef7e4 --- /dev/null +++ b/python-control.spec @@ -0,0 +1,92 @@ +# +# spec file for package python-control +# +# Copyright (c) 2024 SUSE LLC +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via https://bugs.opensuse.org/ +# + + +%{?sle15_python_module_pythons} +Name: python-control +Version: 0.10.0 +Release: 0 +Summary: Python control systems library +License: BSD-3-Clause +URL: https://python-control.org +Source: https://files.pythonhosted.org/packages/source/c/control/control-%{version}.tar.gz +Source1: %{name}-rpmlintrc +# PATCH-FIX-UPSTREAM control-pr994-numpy2.patch gh#python-control/python-control#994 +Patch1: control-pr994-numpy2.patch +BuildRequires: %{python_module base >= 3.8} +BuildRequires: %{python_module pip} +BuildRequires: %{python_module setuptools_scm} +BuildRequires: %{python_module setuptools} +BuildRequires: %{python_module wheel} +BuildRequires: fdupes +BuildRequires: python-rpm-macros +Requires: python-matplotlib +Requires: python-numpy +Requires: python-scipy >= 1.3 +Recommends: python-slycot +BuildArch: noarch +# SECTION test requirements +BuildRequires: %{python_module matplotlib-qt} +BuildRequires: %{python_module matplotlib} +BuildRequires: %{python_module numpy} +BuildRequires: %{python_module pytest-timeout} +BuildRequires: %{python_module pytest-xdist} +BuildRequires: %{python_module pytest-xvfb} +BuildRequires: %{python_module pytest} +BuildRequires: %{python_module qt5} +BuildRequires: %{python_module scipy >= 1.3} +BuildRequires: %{python_module slycot} +# /SECTION +%python_subpackages + +%description +The Python Control Systems Library is a Python module that implements basic +operations for analysis and design of feedback control systems. + +%prep +%autosetup -p1 -n control-%{version} +# remove shebang from testfiles which could be theoretically run standalone, but we don't do this +sed -i '1{\@^#!/usr/bin/env@ d}' control/tests/*.py + +%build +%pyproject_wheel + +%install +%pyproject_install +%python_expand %fdupes %{buildroot}%{$python_sitelib} + +%check +# The default Agg backend does not define the toolbar attribute in the Figure +# Manager used by some tests, so we run the tests with the Qt5 backend +export MPLBACKEND="Qt5Agg" +# precision issues +donttest="test_lti_nlsys_response" +# flaky precision issues +donttest="$donttest or test_response_plot_kwargs" +# gh#python-control/python-control#838 +[ "${RPM_ARCH}" != "x86_64" ] && donttest="$donttest or (test_optimal_doc and shooting-3-u0-None)" +# causes i586 segfaults in matplotlib after successful balanced model reduction tests +[ $(getconf LONG_BIT) -eq 32 ] && donttest="$donttest or testBalredMatchDC" +%pytest -n auto -k "not (${donttest})" + +%files %{python_files} +%doc ChangeLog README.rst +%license LICENSE +%{python_sitelib}/control +%{python_sitelib}/control-%{version}.dist-info + +%changelog