Hello community, here is the log from the commit of package python-control for openSUSE:Factory checked in at 2019-11-06 14:07:02 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-control (Old) and /work/SRC/openSUSE:Factory/.python-control.new.2990 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-control" Wed Nov 6 14:07:02 2019 rev:1 rq:745475 version:0.8.2 Changes: -------- New Changes file: --- /dev/null 2019-10-24 10:19:07.066239389 +0200 +++ /work/SRC/openSUSE:Factory/.python-control.new.2990/python-control.changes 2019-11-06 14:07:07.736850276 +0100 @@ -0,0 +1,34 @@ +------------------------------------------------------------------- +Mon Nov 4 13:25:48 UTC 2019 - Benjamin Greiner <c...@bnavigator.de> + +- 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 <c...@bnavigator.de> + +- remove python-devel from BuildRequires + +------------------------------------------------------------------- +Tue Jun 25 15:41:59 UTC 2019 - Benjamin Greiner <c...@bnavigator.de> + +- add slycot to BuildRequires for tests + +------------------------------------------------------------------- +Wed Jun 19 12:48:24 UTC 2019 - Benjamin Greiner <c...@bnavigator.de> + +- switch to xvfb-run + +------------------------------------------------------------------- +Wed Jun 19 11:05:31 UTC 2019 - Benjamin Greiner <c...@bnavigator.de> + +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 <c...@bnavigator.de> + +update to version 0.8.2 +- New: ---- control-0.8.2.tar.gz python-control-fixtestaugw.patch python-control-pr317.patch python-control.changes python-control.spec ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-control.spec ++++++ # # spec file for package python-control # # Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany. # # 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/ # %{?!python_module:%define python_module() python-%{**} python3-%{**}} Name: python-control Version: 0.8.2 Release: 0 Summary: Python control systems library License: BSD-3-Clause URL: http://python-control.sourceforge.net Source: https://files.pythonhosted.org/packages/source/c/control/control-%{version}.tar.gz Patch0: python-control-fixtestaugw.patch Patch1: python-control-pr317.patch BuildRequires: %{python_module setuptools} BuildRequires: fdupes BuildRequires: python-rpm-macros Requires: python-numpy Requires: python-scipy Recommends: python-slycot BuildArch: noarch # SECTION test requirements BuildRequires: %{python_module matplotlib-qt5} BuildRequires: %{python_module matplotlib} BuildRequires: %{python_module nose-exclude} BuildRequires: %{python_module nose} BuildRequires: %{python_module numpy} BuildRequires: %{python_module scipy} BuildRequires: %{python_module slycot} BuildRequires: libtcmalloc4 BuildRequires: xvfb-run # /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 %setup -q -n control-%{version} %patch0 -p1 %patch1 -p1 %build %python_build %install %python_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 those tests with the Qt5 backend in a # virtual X server environment %if %{_arch} == i386 export LD_PRELOAD="%{_libdir}/libtcmalloc_minimal.so.4" %endif %{python_expand export PYTHONPATH=%{buildroot}%{$python_sitelib} export MPLBACKEND="Agg" nosetests-%$python_bin_suffix \ --exclude-test control.tests.sisotool_test \ --exclude-test control.tests.rlocus_test export MPLBACKEND="Qt5Agg" export LD_PRELOAD="%{_libdir}/libtcmalloc_minimal.so.4" xvfb-run -a nosetests-%$python_bin_suffix \ control.tests.sisotool_test \ control.tests.rlocus_test } %files %{python_files} %doc ChangeLog README.rst %license LICENSE %{python_sitelib}/control %{python_sitelib}/control-*-py*.egg-info %changelog ++++++ python-control-fixtestaugw.patch ++++++ diff --git a/control/tests/robust_test.py b/control/tests/robust_test.py index 9a3419f..b23f06c 100644 --- a/control/tests/robust_test.py +++ b/control/tests/robust_test.py @@ -245,7 +245,7 @@ class TestAugw(unittest.TestCase): @unittest.skipIf(not slycot_check(), "slycot not installed") def testMimoW123(self): """MIMO plant with all weights""" - from control import augw, ss, append + from control import augw, ss, append, minreal g = ss([[-1., -2], [-3, -4]], [[1., 0.], [0., 1.]], [[1., 0.], [0., 1.]], @@ -295,10 +295,10 @@ class TestAugw(unittest.TestCase): self.siso_almost_equal(w2[1, 1], p[3, 3]) # u->z3 should be w3*g w3g = w3 * g; - self.siso_almost_equal(w3g[0, 0], p[4, 2]) - self.siso_almost_equal(w3g[0, 1], p[4, 3]) - self.siso_almost_equal(w3g[1, 0], p[5, 2]) - self.siso_almost_equal(w3g[1, 1], p[5, 3]) + self.siso_almost_equal(w3g[0, 0], minreal(p[4, 2])) + self.siso_almost_equal(w3g[0, 1], minreal(p[4, 3])) + self.siso_almost_equal(w3g[1, 0], minreal(p[5, 2])) + self.siso_almost_equal(w3g[1, 1], minreal(p[5, 3])) # u->v should be -g self.siso_almost_equal(-g[0, 0], p[6, 2]) self.siso_almost_equal(-g[0, 1], p[6, 3]) ++++++ python-control-pr317.patch ++++++ >From e1e319f844edb2e6a22aa815ca42806d47c6cf5f Mon Sep 17 00:00:00 2001 From: Rory Yorke <rory.yo...@gmail.com> Date: Sun, 23 Jun 2019 14:46:23 +0200 Subject: [PATCH] Use numpy.longdouble instead of numpy.float128 in testing numpy.float128 doesn't exist on all platforms, e.g., Windows 64-bit. When numpy.float128 does exist (e.g., Linux 64-bit), it's typically an alias for numpy.longdouble. --- control/tests/xferfcn_input_test.py | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/control/tests/xferfcn_input_test.py b/control/tests/xferfcn_input_test.py index 0471e885..0d6ca56f 100644 --- a/control/tests/xferfcn_input_test.py +++ b/control/tests/xferfcn_input_test.py @@ -7,7 +7,7 @@ import numpy as np from numpy import int, int8, int16, int32, int64 -from numpy import float, float16, float32, float64, float128 +from numpy import float, float16, float32, float64, longdouble from numpy import all, ndarray, array from control.xferfcn import _clean_part @@ -73,7 +73,7 @@ def test_clean_part_tuple(self): def test_clean_part_all_scalar_types(self): """Test single scalar value for all valid data types.""" - for dtype in [int, int8, int16, int32, int64, float, float16, float32, float64, float128]: + for dtype in [int, int8, int16, int32, int64, float, float16, float32, float64, longdouble]: num = dtype(1) num_ = _clean_part(num) @@ -92,7 +92,7 @@ def test_clean_part_np_array(self): def test_clean_part_all_np_array_types(self): """Test scalar value in numpy array of ndim=0 for all data types.""" - for dtype in [int, int8, int16, int32, int64, float, float16, float32, float64, float128]: + for dtype in [int, int8, int16, int32, int64, float, float16, float32, float64, longdouble]: num = np.array(1, dtype=dtype) num_ = _clean_part(num) @@ -102,7 +102,7 @@ def test_clean_part_all_np_array_types(self): def test_clean_part_all_np_array_types2(self): """Test numpy array for all types.""" - for dtype in [int, int8, int16, int32, int64, float, float16, float32, float64, float128]: + for dtype in [int, int8, int16, int32, int64, float, float16, float32, float64, longdouble]: num = np.array([1, 2], dtype=dtype) num_ = _clean_part(num) @@ -112,7 +112,7 @@ def test_clean_part_all_np_array_types2(self): def test_clean_part_list_all_types(self): """Test list of a single value for all data types.""" - for dtype in [int, int8, int16, int32, int64, float, float16, float32, float64, float128]: + for dtype in [int, int8, int16, int32, int64, float, float16, float32, float64, longdouble]: num = [dtype(1)] num_ = _clean_part(num) assert isinstance(num_, list) @@ -121,7 +121,7 @@ def test_clean_part_list_all_types(self): def test_clean_part_list_all_types2(self): """List of list of numbers of all data types.""" - for dtype in [int, int8, int16, int32, int64, float, float16, float32, float64, float128]: + for dtype in [int, int8, int16, int32, int64, float, float16, float32, float64, longdouble]: num = [dtype(1), dtype(2)] num_ = _clean_part(num) assert isinstance(num_, list) @@ -130,7 +130,7 @@ def test_clean_part_list_all_types2(self): def test_clean_part_tuple_all_types(self): """Test tuple of a single value for all data types.""" - for dtype in [int, int8, int16, int32, int64, float, float16, float32, float64, float128]: + for dtype in [int, int8, int16, int32, int64, float, float16, float32, float64, longdouble]: num = (dtype(1),) num_ = _clean_part(num) assert isinstance(num_, list) @@ -139,7 +139,7 @@ def test_clean_part_tuple_all_types(self): def test_clean_part_tuple_all_types2(self): """Test tuple of a single value for all data types.""" - for dtype in [int, int8, int16, int32, int64, float, float16, float32, float64, float128]: + for dtype in [int, int8, int16, int32, int64, float, float16, float32, float64, longdouble]: num = (dtype(1), dtype(2)) num_ = _clean_part(num) assert isinstance(num_, list) @@ -184,7 +184,7 @@ def test_clean_part_list_list_list_floats(self): def test_clean_part_list_list_array(self): """List of list of numpy arrays for all valid types.""" - for dtype in int, int8, int16, int32, int64, float, float16, float32, float64, float128: + for dtype in int, int8, int16, int32, int64, float, float16, float32, float64, longdouble: num = [[array([1, 1], dtype=dtype), array([2, 2], dtype=dtype)]] num_ = _clean_part(num) @@ -195,7 +195,7 @@ def test_clean_part_list_list_array(self): def test_clean_part_tuple_list_array(self): """Tuple of list of numpy arrays for all valid types.""" - for dtype in int, int8, int16, int32, int64, float, float16, float32, float64, float128: + for dtype in int, int8, int16, int32, int64, float, float16, float32, float64, longdouble: num = ([array([1, 1], dtype=dtype), array([2, 2], dtype=dtype)],) num_ = _clean_part(num) @@ -206,7 +206,7 @@ def test_clean_part_tuple_list_array(self): def test_clean_part_list_tuple_array(self): """List of tuple of numpy array for all valid types.""" - for dtype in int, int8, int16, int32, int64, float, float16, float32, float64, float128: + for dtype in int, int8, int16, int32, int64, float, float16, float32, float64, longdouble: num = [(array([1, 1], dtype=dtype), array([2, 2], dtype=dtype))] num_ = _clean_part(num) @@ -217,7 +217,7 @@ def test_clean_part_list_tuple_array(self): def test_clean_part_tuple_tuples_arrays(self): """Tuple of tuples of numpy arrays for all valid types.""" - for dtype in int, int8, int16, int32, int64, float, float16, float32, float64, float128: + for dtype in int, int8, int16, int32, int64, float, float16, float32, float64, longdouble: num = ((array([1, 1], dtype=dtype), array([2, 2], dtype=dtype)), (array([3, 4], dtype=dtype), array([4, 4], dtype=dtype))) num_ = _clean_part(num) @@ -229,7 +229,7 @@ def test_clean_part_tuple_tuples_arrays(self): def test_clean_part_list_tuples_arrays(self): """List of tuples of numpy arrays for all valid types.""" - for dtype in int, int8, int16, int32, int64, float, float16, float32, float64, float128: + for dtype in int, int8, int16, int32, int64, float, float16, float32, float64, longdouble: num = [(array([1, 1], dtype=dtype), array([2, 2], dtype=dtype)), (array([3, 4], dtype=dtype), array([4, 4], dtype=dtype))] num_ = _clean_part(num) @@ -241,7 +241,7 @@ def test_clean_part_list_tuples_arrays(self): def test_clean_part_list_list_arrays(self): """List of list of numpy arrays for all valid types.""" - for dtype in int, int8, int16, int32, int64, float, float16, float32, float64, float128: + for dtype in int, int8, int16, int32, int64, float, float16, float32, float64, longdouble: num = [[array([1, 1], dtype=dtype), array([2, 2], dtype=dtype)], [array([3, 3], dtype=dtype), array([4, 4], dtype=dtype)]] num_ = _clean_part(num)