Hello community, here is the log from the commit of package python-Transplant for openSUSE:Factory checked in at 2019-07-24 20:37:11 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-Transplant (Old) and /work/SRC/openSUSE:Factory/.python-Transplant.new.4126 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-Transplant" Wed Jul 24 20:37:11 2019 rev:4 rq:718208 version:0.8.10 Changes: -------- --- /work/SRC/openSUSE:Factory/python-Transplant/python-Transplant.changes 2019-01-08 12:28:20.896280705 +0100 +++ /work/SRC/openSUSE:Factory/.python-Transplant.new.4126/python-Transplant.changes 2019-07-24 20:37:12.630563058 +0200 @@ -1,0 +2,6 @@ +Wed Jul 24 10:17:08 UTC 2019 - Tomáš Chvátal <tchva...@suse.com> + +- Update to 0.8.10: + * fixes (benign) Matlab crash on exit + +------------------------------------------------------------------- Old: ---- Transplant-0.8.8.tar.gz New: ---- LICENSE Transplant-0.8.10.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-Transplant.spec ++++++ --- /var/tmp/diff_new_pack.3xiKlA/_old 2019-07-24 20:37:13.066563010 +0200 +++ /var/tmp/diff_new_pack.3xiKlA/_new 2019-07-24 20:37:13.070563010 +0200 @@ -1,7 +1,7 @@ # # spec file for package python-Transplant # -# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany. +# 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 @@ -19,28 +19,30 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} %define skip_python2 1 Name: python-Transplant -Version: 0.8.8 +Version: 0.8.10 Release: 0 Summary: Python module for calling out to Matlab License: BSD-3-Clause Group: Development/Languages/Python -Url: https://github.com/bastibe/transplant +URL: https://github.com/bastibe/transplant Source: https://files.pythonhosted.org/packages/source/T/Transplant/Transplant-%{version}.tar.gz +Source99: https://raw.githubusercontent.com/bastibe/transplant/master/LICENSE BuildRequires: %{python_module devel >= 3.4} BuildRequires: %{python_module setuptools} +BuildRequires: fdupes BuildRequires: python-rpm-macros +Requires: python-msgpack-python +Requires: python-numpy +Requires: python-pyzmq +BuildArch: noarch # SECTION test requirements BuildRequires: %{python_module msgpack-python} BuildRequires: %{python_module numpy} +BuildRequires: %{python_module pytest-runner} BuildRequires: %{python_module pytest} BuildRequires: %{python_module pyzmq} +BuildRequires: %{python_module scipy} # /SECTION -BuildRequires: fdupes -Requires: python-msgpack-python -Requires: python-numpy -Requires: python-pyzmq -BuildArch: noarch - %python_subpackages %description @@ -54,6 +56,7 @@ %prep %setup -q -n Transplant-%{version} +cp %{SOURCE99} . %build %python_build @@ -62,8 +65,13 @@ %python_install %python_expand %fdupes %{buildroot}%{$python_sitelib} +%check +# tests sadly need matlab install +#%%python_exec setup.py test + %files %{python_files} -%doc README.md +%license LICENSE +%doc README.rst %{python_sitelib}/* %changelog ++++++ Transplant-0.8.8.tar.gz -> Transplant-0.8.10.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Transplant-0.8.8/PKG-INFO new/Transplant-0.8.10/PKG-INFO --- old/Transplant-0.8.8/PKG-INFO 2018-11-29 14:52:55.000000000 +0100 +++ new/Transplant-0.8.10/PKG-INFO 2019-07-01 16:27:54.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 1.2 Name: Transplant -Version: 0.8.8 +Version: 0.8.10 Summary: Call Matlab from Python (requires Matlab) Home-page: https://github.com/bastibe/transplant Author: Bastian Bechtold @@ -289,7 +289,7 @@ zeromq if you use conda. 2. Install Transplant using ``pip install transplant``. This will - install ``pyzmq``, ``numpy`` and ``msgpack-python`` as + install ``pyzmq``, ``numpy`` and ``msgpack`` as dependencies. If you want to run Transplant over the network, the remote Matlab has @@ -392,6 +392,10 @@ * Does Transplant work in Python 2.7? No, it does not. + * How to integrate Transplant with Jupyter? + Use the provided ``transplant_magic.py``, to get %%matlab cell + magic. + SIMILAR PROGRAMS ---------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Transplant-0.8.8/README.md new/Transplant-0.8.10/README.md --- old/Transplant-0.8.8/README.md 2018-11-29 14:09:57.000000000 +0100 +++ new/Transplant-0.8.10/README.md 1970-01-01 01:00:00.000000000 +0100 @@ -1,419 +0,0 @@ -TRANSPLANT -========== - -Transplant is an easy way of calling Matlab from Python. - -```python - import transplant - matlab = transplant.Matlab() - # call Matlab functions: - length = matlab.numel([1, 2, 3]) - magic = matlab.magic(2) - spectrum = matlab.fft(numpy.random.randn(100)) - # inject variables into Matlab: - matlab.signal = numpy.zeros(100) -``` - -Python lists are converted to cell arrays in Matlab, dicts are -converted to Maps, and numpy ND-Arrays are converted do native Matlab -matrices. - -All Matlab functions and objects can be accessed from Python. - - -RECENT CHANGES --------------- - -- Should now reliably raise an error if Matlab dies unexpectedly. -- Keyword arguments are now automatically translated to string-value - pairs in Matlab. -- `close` was renamed `exit`. Even though Python typically uses - `close` to close files and connections, this conflicts with Matlab's - own `close` function. -- Matlab will now start Matlab at the current working directory. -- Transplant can now be installed through `pip install transplant`. -- You can now use `jvm=False` and `desktop=False` to auto-supply - common command line arguments for Matlab. - - -STARTING MATLAB ----------------- - -```python -matlab = transplant.Matlab() -``` - -Will start a Matlab session and connect to it. This will take a few -seconds while Matlab starts up. All of Matlab's output will go to the -standard output and will appear interspersed with Python output. -Standard input is suppressed to make REPLs work, so Matlab's `input` -function will not work. - -By default, this will try to call `matlab` on the command line. If you -want to use a different version of Matlab, or `matlab` is not in PATH, -use `Matlab(executable='/path/to/matlab')`. - -By default, Matlab is called with `-nodesktop` and `-nosplash` (and -`-minimize` on Windows), so no IDE or splash screen show up. You can -change this by setting `desktop=True`. - -You can start Matlab without loading the Java-based GUI system -(`'-nojvm'`) by setting `jvm=False`. This will speed up startup -considerably, but you won't be able to open figures any more. - -If you want to start Matlab with additional command line arguments, -you can supply them like this: `Matlab(arguments=['-c licensefile'])`. - -By default, Matlab will be started on the local machine. To start -Matlab on a different computer, supply the IP address of that -computer: `Matlab(address='172.168.1.5')`. This only works if that -computer is reachable through `ssh`, Matlab is available on the other -computer's command line, and transplant is in the other Matlab's path. - -Note that due to a limitation of Matlab on Windows, command line -output from Matlab running on Windows isn't visible to Transplant. - - -CALLING MATLAB --------------- - -```python -matlab.disp("Hello, World") -``` - -Will call Matlab's `disp` function with the argument `'Hello, World'`. -It is equivalent to `disp('Hello, World')` in Matlab. Return values -will be returned to Python, and errors will be converted to Python -errors (Matlab stack traces will be given, too!). - -Input arguments are converted to Matlab data structures: - -| Python Argument | Matlab Type | -| ------------------------------- | --------------------------- | -| `str` | `char` vector | -| `float` | `double` scalar | -| `int` | an `int{8,16,32,64}` scalar | -| `True`/`False` | `logical` scalar | -| `None` | `[]` | -| `list` | `cell` | -| `dict` | `containers.Map` | -| `transplant.MatlabStruct(dict)` | `struct` | -| `numpy.ndarray` | `double` matrix | -| `scipy.sparse` | `sparse` matrix | -| proxy object | original object | - -Return values are treated similarly: - -| Matlab Return Value | Python Type | -| ---------------------------- | --------------- | -| `char` vector | `str` | -| numeric scalar | number | -| `logical` scalar | `True`/`False` | -| `[]` | `None` | -| `cell` | `list` | -| `struct` or `containers.Map` | `dict` | -| numeric matrix | `numpy.ndarray` | -| sparse matrix | `scipy.sparse` | -| function | proxy function | -| object | proxy object | - -If the function returns a function handle or an object, a matching -Python functions/objects will be created that forwards every access to -Matlab. Objects can also be handed back to Matlab and will work as -intended. - -```python -f = matlab.figure() # create a Figure object -f.Visible = 'off' # modify a property of the Figure object -matlab.set(f, 'Visible', 'on') # pass the Figure object to a function -``` - -In Matlab, some functions behave differently depending on the number -of output arguments. By default, Transplant uses the Matlab function -`nargout` to figure out the number of return values for a function. If -`nargout` can not determine the number of output arguments either, -Matlab functions will return the value of `ans` after the function -call. - -In some cases, `nargout` will report a wrong number of output -arguments. For example `nargout profile` will say `1`, but `x = -profile('on')` will raise an error that too few output arguments were -used. To fix this, every function has a keyword argument `nargout`, -which can be used in these cases: `matlab.profile('on', nargout=0)` -calls `profile on` with no output arguments. `s, f, t, p = -matlab.spectrogram(numpy.random.randn(1000), nargout=4)` returns all -four output arguments of `spectrogram`. - -When working with plots, note that the Matlab program does not wait -for drawing on its own. Use `matlab.drawnow()` to make figures appear. - -Note that functions are not called in the base workspace. Functions -that access the current non-lexical workspace (this is very rare) will -therefore not work as expected. For example, `matlab.truth = 42`, -`matlab.exist('truth')` will not find the `truth` variable. Use -`matlab.evalin('base', "exist('truth')", nargout=1)` instead in this -case. - -If you hit Ctrl-C, the `KeyboardInterrupt` will be applied to both -Python and Matlab, stopping any currently running function. Due to a -limitation of Matlab, the error and stack trace of that function will -be lost. - - -MATRIX DIMENSIONS ------------------ - -The way multidimensional arrays are indexed in Matlab and Python are -fundamentally different. Thankfully, the two-dimensional case works as -expected: - - Python | Matlab - --------------------------+------------------------ - array([[ 1, 2, 3], | 1 2 3 - [ 10, 20, 30]]) | 10 20 30 - -In both languages, this array has the shape `(2, 3)`. - -With higher-dimension arrays, this becomes harder. The next array is -again identical: - - Python | Matlab - --------------------------+------------------------ - array([[[ 1, 2], | (:,:,1) = - [ 3, 4]], | 1 3 - | 10 30 - [[ 10, 20], | 100 300 - [ 30, 40]], | (:,:,2) = - | 2 4 - [[100, 200], | 20 40 - [300, 400]]]) | 200 400 - -Even though they look different, they both have the same shape `(3, 2, -2)`, and are indexed in the same way. The element at position `a, b, -c` in Python is the same as the element at position `a+1, b+1, c+1` in -Matlab (`+1` due to zero-based/one-based indexing). - -You can think about the difference in presentation like this: Python -displays multidimensional arrays as `[n,:,:]`, whereas Matlab displays -them as `(:,:,n)`. - - -STOPPING MATLAB ---------------- - -Matlab processes end when the `Matlab` instance goes out of scope or -is explicitly closed using the `exit` method. Alternatively, the -`Matlab` class can be used as a context manager, which will properly -clean up after itself. - -If you are not using the context manager or the `exit` method, you -will notice that some Matlab processes don't die when you expect them -to die. If you are running the regular `python` interpreter, chances -are that the Matlab process is still referenced to in -`sys.last_traceback`, which holds the value of the last exception that -was raised. Your Matlab process will die once the next exception is -raised. - -If you are running `ipython`, though, all bets are off. I have noticed -that `ipython` keeps all kinds of references to all kinds of things. -Sometimes, `%reset` will clear them, sometimes it won't. Sometimes -they only go away when `ipython` quits. And sometimes, even stopping -`ipython` doesn't kill it (how is this even possible?). This can be -quite annoying. Use the `exit` method or the context manager to make -sure the processes are stopped correctly. - - -INSTALLATION ------------- - -1. Install the zeromq library on your computer and add it to your - PATH. Alternatively, Transplant automatically uses `conda`'s zeromq - if you use conda. - -2. Install Transplant using `pip install transplant`. This will - install `pyzmq`, `numpy` and `msgpack-python` as dependencies. - -If you want to run Transplant over the network, the remote Matlab has -to have access to *ZMQ.m* and *transplant_remote.m* and the zeromq -library and has to be reachable through SSH. - -INSTALLATION GUIDE FOR LINUX ----------------------------- - -1. Install the latest version of zeromq through your package manager. - Install version 4 (often called 5). - -2. Make sure that Matlab is using the system's version of libstdc++. - If it is using an incompatible version, starting Transplant might - fail with an error like `GLIBCXX_3.4.21 not found`. If you - experience this, disable Matlab's own libstdc++ either by - removing/renaming $MATLABROOT/sys/os/glnxa64/libstdc++, or by - installing `matlab-support` (if you are running Ubuntu). - - -INSTALLATION GUIDE FOR WINDOWS ------------------------------ - -1. Install the latest version of zeromq from here: - http://zeromq.org/distro:microsoft-windows OR through conda. - -2. Install a compiler. See here for a list of supported compilers: - http://uk.mathworks.com/support/compilers/R2017a/ - Matlab needs a compiler in order to load and use the ZeroMQ library - using `loadlibrary`. - - -HOW DOES IT WORK? ------------------ - -Transplant opens Matlab as a subprocess (optionally over SSH), then -connects to it via [0MQ](http://zeromq.org/) in a request-response -pattern. Matlab then runs the _transplant_ remote and starts listening -for messages. Now, Python can send messages to Matlab, and Matlab will -respond. Roundtrip time for sending/receiving and encoding/decoding -values from Python to Matlab and back is about 2 ms. - -All messages are Msgpack-encoded or JSON-encoded objects. You can -choose between Msgpack (faster) and JSON (slower, human-readable) -using the `msgformat` attribute of the `Matlab` constructor. There are -seven messages types used by Python: - -* `set_global` and `get_global` set and retrieve a global variable. -* `del_proxy` removes a cached object. -* `call` calls a Matlab function with some function arguments and - returns the result. -* `die` tells Matlab to shut down. - -Matlab can then respond with one of three message types: - -* `ack` for successful execution. -* `value` for return values. -* `error` if there was an error during execution. - -In addition to the regular Msgpack/JSON data types, _transplant_ uses -specially formatted Msgpack/JSON arrays for transmitting numerical -matrices as binary data. A numerical 2x2 32-bit integer matrix -containing `[[1, 2], [3, 4]]` would be encoded as -`["__matrix__", "int32", [2, 2], "AQAAAAIAAAADAAAABAAAA==\n"]`, where -`"int32"` is the data type, `[2, 2]` is the matrix shape and the long -string is the base64-encoded matrix content. This allows for efficient -data exchange and prevents rounding errors due to JSON serialization. -In Msgpack, the data is not base64-encoded. - -When Matlab returns a function handle, it is encoded as -`["__function__", func2str(f)]`. When Matlab returns an object, it -caches its value and returns `["__object__", cache_idx]`. These arrays -are translated back to their original Matlab values if passed to -Matlab. - -Note that this project includes a Msgpack serializer/parser, a JSON -serializer/parser, and a Base64 encoder/decoder in pure Matlab. - - -FAQ ---- - -* I get errors with integer numbers - Many Matlab functions crash if called with integers. Convert your - numbers to `float` in Python to fix this problem. - -* How do I pass structs to Matlab? - Since Matlab structs can't use arbitrary keys, all Python - dictionaries are converted to Matlab `containers.Map` instead of - structs. Wrap your dicts in `transplant.MatlabStruct` in Python to - have them converted to structs. Note that this will change all - invalid keys to whatever Matlab thinks is an appropriate key name - using `matlab.lang.makeValidName`. - -* I get errors like `GLIBCXX_3.4.21 not found` - Matlab's version of libstdc++ is incompatible with your OS's - version. See INSTALLATION GUIDE FOR LINUX for details. - -* Does Transplant work in Python 2.7? - No, it does not. - - -SIMILAR PROGRAMS ----------------- - -I know of two programs that try to do similar things as Transplant: - -- Mathwork's own [MATLAB Engine API for Python][MEfP] provides a - CPython extension for calling Matlab code from some versions of - Python. In my experience, it is significantly slower than - Transplant, less feature-complete (no support for non-scalar - structs, objects, methods, packages, numpy), and more cumbersome to - use (all arguments and return values need to be wrapped in a - `matlab.double` instead of Numpy Arrays). For a comparison of the - two, here are two blog posts on the topic: - [Intro to Transplant][bde1], [Transplant speed][bde2]. -- Oct2Py calls Octave from Python. It is very similar to Transplant, - but uses Octave instead of Matlab. This has huge benefits in startup - time, but of course doesn't support all Matlab code. - -[MEfP]: http://mathworks.com/help/matlab/matlab-engine-for-python.html -[bde1]: http://bastibe.de/2016-06-21-transplant-revisited.html -[bde2]: http://bastibe.de/2015-11-03-matlab-engine-performance.html - -KNOWN ISSUES -------------- - -Transplant is a side project of mine that I use for running -cross-language experiments on a small compute cluster. As such, my -usage of Transplant is very narrow, and I do not see bugs that don't -happen in my typical usage. That said, I have used Transplant for -hundreds of hours, and hundreds of Gigabytes of data without errors. - -If you find a bug, or would like to discuss a new feature, or would -like to contribute code, please open an issue on Github. - -I do not have a Windows machine to test Transplant. Windows support -might contain bugs, but at least one user has used it on Windows in -the past. If you are hitting problems on Windows, please open an issue -on Github. - -Running Transplant over the network might contain bugs. If you are -hitting problems, please open an issue on Github. - -Finally, I would like to remind you that I am developing this project -for free, and in my spare time. While I try to be as accomodating as -possible, I can not guarantee a timely response to issues. Publishing -Open Source Software on Github does not imply an obligation to *fix -your problem right now*. Please be civil. - - -LICENSE -------- - -MATLAB (R) is copyright of the Mathworks - -Copyright (c) 2014-2018 Bastian Bechtold -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the - distribution. - -3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Transplant-0.8.8/README.rst new/Transplant-0.8.10/README.rst --- old/Transplant-0.8.8/README.rst 2018-11-29 13:39:06.000000000 +0100 +++ new/Transplant-0.8.10/README.rst 2019-04-25 13:52:29.000000000 +0200 @@ -281,7 +281,7 @@ zeromq if you use conda. 2. Install Transplant using ``pip install transplant``. This will - install ``pyzmq``, ``numpy`` and ``msgpack-python`` as + install ``pyzmq``, ``numpy`` and ``msgpack`` as dependencies. If you want to run Transplant over the network, the remote Matlab has @@ -384,6 +384,10 @@ * Does Transplant work in Python 2.7? No, it does not. +* How to integrate Transplant with Jupyter? + Use the provided ``transplant_magic.py``, to get %%matlab cell + magic. + SIMILAR PROGRAMS ---------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Transplant-0.8.8/Transplant.egg-info/PKG-INFO new/Transplant-0.8.10/Transplant.egg-info/PKG-INFO --- old/Transplant-0.8.8/Transplant.egg-info/PKG-INFO 2018-11-29 14:52:55.000000000 +0100 +++ new/Transplant-0.8.10/Transplant.egg-info/PKG-INFO 2019-07-01 16:27:54.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 1.2 Name: Transplant -Version: 0.8.8 +Version: 0.8.10 Summary: Call Matlab from Python (requires Matlab) Home-page: https://github.com/bastibe/transplant Author: Bastian Bechtold @@ -289,7 +289,7 @@ zeromq if you use conda. 2. Install Transplant using ``pip install transplant``. This will - install ``pyzmq``, ``numpy`` and ``msgpack-python`` as + install ``pyzmq``, ``numpy`` and ``msgpack`` as dependencies. If you want to run Transplant over the network, the remote Matlab has @@ -392,6 +392,10 @@ * Does Transplant work in Python 2.7? No, it does not. + * How to integrate Transplant with Jupyter? + Use the provided ``transplant_magic.py``, to get %%matlab cell + magic. + SIMILAR PROGRAMS ---------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Transplant-0.8.8/Transplant.egg-info/SOURCES.txt new/Transplant-0.8.10/Transplant.egg-info/SOURCES.txt --- old/Transplant-0.8.8/Transplant.egg-info/SOURCES.txt 2018-11-29 14:52:55.000000000 +0100 +++ new/Transplant-0.8.10/Transplant.egg-info/SOURCES.txt 2019-07-01 16:27:54.000000000 +0200 @@ -1,5 +1,5 @@ -README.md README.rst +setup.cfg setup.py Transplant.egg-info/PKG-INFO Transplant.egg-info/SOURCES.txt diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Transplant-0.8.8/Transplant.egg-info/requires.txt new/Transplant-0.8.10/Transplant.egg-info/requires.txt --- old/Transplant-0.8.8/Transplant.egg-info/requires.txt 2018-11-29 14:52:55.000000000 +0100 +++ new/Transplant-0.8.10/Transplant.egg-info/requires.txt 2019-07-01 16:27:54.000000000 +0200 @@ -1,3 +1,3 @@ numpy pyzmq -msgpack-python +msgpack diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Transplant-0.8.8/setup.cfg new/Transplant-0.8.10/setup.cfg --- old/Transplant-0.8.8/setup.cfg 2018-11-29 14:52:55.000000000 +0100 +++ new/Transplant-0.8.10/setup.cfg 2019-07-01 16:27:54.000000000 +0200 @@ -1,3 +1,6 @@ +[aliases] +test = pytest + [egg_info] tag_build = tag_date = 0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Transplant-0.8.8/setup.py new/Transplant-0.8.10/setup.py --- old/Transplant-0.8.8/setup.py 2018-11-29 14:45:42.000000000 +0100 +++ new/Transplant-0.8.10/setup.py 2019-07-01 16:27:48.000000000 +0200 @@ -13,7 +13,7 @@ setup( name='Transplant', - version='0.8.8', + version='0.8.10', description='Call Matlab from Python (requires Matlab)', author='Bastian Bechtold', author_email='ba...@bastibe.de', @@ -38,7 +38,9 @@ 'Programming Language :: Python :: 3.7', ], license='BSD 3-clause', - install_requires=['numpy', 'pyzmq', 'msgpack-python'], + install_requires=['numpy', 'pyzmq', 'msgpack'], + setup_requires=['pytest-runner'], + tests_require=['pytest', 'scipy'], python_requires='>=3.4', requires=['matlab', 'libzmq'], long_description=open('README.rst').read(), diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Transplant-0.8.8/transplant/transplant_master.py new/Transplant-0.8.10/transplant/transplant_master.py --- old/Transplant-0.8.8/transplant/transplant_master.py 2018-11-29 14:44:21.000000000 +0100 +++ new/Transplant-0.8.10/transplant/transplant_master.py 2019-07-01 16:26:19.000000000 +0200 @@ -94,6 +94,9 @@ def _del_proxy(self, handle): """Tell the remote to forget about this proxy object.""" + # ignore if remote already shut down: + if self.socket.closed: + return self.send_message('del_proxy', handle=handle) def __getattr__(self, name): @@ -153,7 +156,7 @@ self._wait_socket(zmq.POLLIN) if self.msgformat == 'msgpack': - response = msgpack.unpackb(self.socket.recv(flags=zmq.NOBLOCK), encoding='utf-8') + response = msgpack.unpackb(self.socket.recv(flags=zmq.NOBLOCK), raw=False, max_bin_len=2**31-1) else: response = self.socket.recv_json(flags=zmq.NOBLOCK) @@ -277,7 +280,7 @@ if isinstance(data, str): out = np.fromstring(base64.b64decode(data.encode()), dtype) else: - out = np.fromstring(data, dtype) + out = np.frombuffer(data, dtype) shape = [int(n) for n in shape]; # numpy requires integer indices return out.reshape(*shape) @@ -317,7 +320,8 @@ row, col, value = (self._decode_matrix(d).ravel() if d is not None else [] for d in data[2:]) - return scipy.sparse.coo_matrix((value, (row, col)), shape=data[1]) + shape = (int(d) for d in data[1]) # convert shape to int + return scipy.sparse.coo_matrix((value, (row, col)), shape=shape) def _encode_proxy(self, data): """Encode a ProxyObject as a special list. @@ -583,7 +587,7 @@ self.process.send_signal(SIGINT) # receive outstanding message to get ZMQ back in the right state if self.msgformat == 'msgpack': - response = msgpack.unpackb(self.socket.recv(), encoding='utf-8') + response = msgpack.unpackb(self.socket.recv(), raw=False, max_bin_len=2**31-1) else: response = self.socket.recv_json() # continue with the exception @@ -715,7 +719,7 @@ except: return [] - search_dirs = re.compile('SEARCH_DIR\(([^)]*)\)').findall(output) + search_dirs = re.compile(r'SEARCH_DIR\(([^)]*)\)').findall(output) return [d.strip(' "') for d in search_dirs] def _read_ldsoconf(self, file): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Transplant-0.8.8/transplant/transplant_remote.m new/Transplant-0.8.10/transplant/transplant_remote.m --- old/Transplant-0.8.8/transplant/transplant_remote.m 2017-08-09 10:32:20.000000000 +0200 +++ new/Transplant-0.8.10/transplant/transplant_remote.m 2019-04-25 13:52:29.000000000 +0200 @@ -34,7 +34,7 @@ % since the onCleanup prevents direct exit, quit here after revival before % a new onCleanup is created: if should_die - quit('force') + return end try