Hello community,

here is the log from the commit of package python-oct2py for openSUSE:Factory 
checked in at 2019-06-02 15:18:05
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-oct2py (Old)
 and      /work/SRC/openSUSE:Factory/.python-oct2py.new.5148 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-oct2py"

Sun Jun  2 15:18:05 2019 rev:2 rq:706408 version:5.0.2

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-oct2py/python-oct2py.changes      
2018-03-29 11:54:38.824464316 +0200
+++ /work/SRC/openSUSE:Factory/.python-oct2py.new.5148/python-oct2py.changes    
2019-06-02 15:18:10.390031775 +0200
@@ -1,0 +2,14 @@
+Wed May 29 20:26:24 UTC 2019 - Todd R <toddrme2...@gmail.com>
+
+- Update to version 5.0.2
+  * Removed the ``executable`` argument to ``Oct2Py`` in favor of using
+    environment variables because we need to instantiate the ``octave``
+    convenience instance at startup.
+  * Add a plot_backend kwarg for eval and clean up default backend selection.
+  * Add support for Pandas DataFrames and Series
+  * Remove unwanted octave-workspace files at exit
+  * Add a backend property to specify the graphics toolkit
+- Disable building for python2 since it has python3-only
+  dependencies
+
+-------------------------------------------------------------------

Old:
----
  oct2py-4.0.6.tar.gz

New:
----
  oct2py-5.0.2.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-oct2py.spec ++++++
--- /var/tmp/diff_new_pack.gJqdT3/_old  2019-06-02 15:18:12.046031058 +0200
+++ /var/tmp/diff_new_pack.gJqdT3/_new  2019-06-02 15:18:12.046031058 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package python-oct2py
 #
-# 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
@@ -12,34 +12,28 @@
 # license that conforms to the Open Source Definition (Version 1.9)
 # published by the Open Source Initiative.
 
-# Please submit bugfixes or comments via http://bugs.opensuse.org/
+# Please submit bugfixes or comments via https://bugs.opensuse.org/
 #
 
 
-# Tests need gui
 %bcond_with     test
 
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
+%define         skip_python2 1
 Name:           python-oct2py
-Version:        4.0.6
+Version:        5.0.2
 Release:        0
 Summary:        Python to GNU Octave bridge
 License:        MIT
 Group:          Development/Languages/Python
 Url:            http://github.com/blink1073/oct2py
 Source:         
https://files.pythonhosted.org/packages/source/o/oct2py/oct2py-%{version}.tar.gz
-BuildRequires:  %{python_module devel}
-BuildRequires:  %{python_module jupyter_octave_kernel >= 0.25}
+BuildRequires:  %{python_module octave-kernel >= 0.30}
 BuildRequires:  %{python_module setuptools}
 BuildRequires:  fdupes
 BuildRequires:  python-rpm-macros
-%if %{with test}
-BuildRequires:  %{python_module pytest}
-BuildRequires:  %{python_module scipy}
-BuildRequires:  python-mock
-%endif
 BuildRequires:  fdupes
-Requires:       python-jupyter_octave_kernel >= 0.25
+Requires:       python-octave-kernel >= 0.30
 BuildArch:      noarch
 
 %python_subpackages
@@ -59,13 +53,12 @@
 %python_install
 %python_expand %fdupes %{buildroot}%{$python_sitelib}
 
-%if %{with test}
-%check
-%python_exec setup.py test
-%endif
+# Tests need gui
+# %%check
+# %%python_exec setup.py test
+# %%endif
 
 %files %{python_files}
-%defattr(-,root,root,-)
 %doc README.rst
 %license LICENSE.txt licenses licenses/mlabwrap.txt licenses/octavemagic.txt 
licenses/ompc.txt
 %{python_sitelib}/*

++++++ oct2py-4.0.6.tar.gz -> oct2py-5.0.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oct2py-4.0.6/HISTORY.rst new/oct2py-5.0.2/HISTORY.rst
--- old/oct2py-4.0.6/HISTORY.rst        2017-04-08 13:45:42.000000000 +0200
+++ new/oct2py-5.0.2/HISTORY.rst        2019-05-03 17:36:48.000000000 +0200
@@ -3,6 +3,25 @@
 Release History
 ---------------
 
+5.0.0 (2019-05-03)
+++++++++++++++++++
+- Removed the ``executable`` argument to ``Oct2Py`` in favor of using
+environment variables because we need to instantiate the ``octave``
+convenience instance at startup.
+
+4.3.0 (2019-05-02)
+++++++++++++++++++
+- Add a plot_backend kwarg for eval and clean up default backend selection.
+
+4.2.0 (2019-04-28)
+++++++++++++++++++
+- Add support for Pandas DataFrames and Series (#125)
+- Remove unwanted octave-workspace files at exit (#133)
+
+4.1.0 (2019-04-23)
+++++++++++++++++++
+- Add a backend property to specify the graphics toolkit
+
 4.0.5 (2017-04-08)
 ++++++++++++++++++
 - Fixed a thread safety bug when writing matlab files.
@@ -43,12 +62,12 @@
 ++++++++++++++++++
 - Fixed error that caused the session to crash on Windows when Octave
   encountered a syntax error.
-- Added separate width and height specifiers to the `%%octave` magic so 
+- Added separate width and height specifiers to the `%%octave` magic so
   the image can be constrained in one dimension while maintaining its
   aspect ratio.
 - Added an `extract_figures` method to the `Oct2Py` class which
   gives back a list of IPython Image or SVG objects for the created figures.
-- Completely rewrote the internal communication to Octave on 
+- Completely rewrote the internal communication to Octave on
   top of the `octave_kernel`, which enabled the Windows crash fix.
 - Removed the internal `_make_figs.m` file, since that functionality
   is now in `octave_kernel`.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oct2py-4.0.6/Makefile new/oct2py-5.0.2/Makefile
--- old/oct2py-4.0.6/Makefile   2017-04-08 13:47:56.000000000 +0200
+++ new/oct2py-5.0.2/Makefile   2019-05-02 22:12:27.000000000 +0200
@@ -1,10 +1,9 @@
 # Note: This is meant for Oct2Py developer use only
 .PHONY: all clean test cover release gh-pages docs
 
-export NAME=`python setup.py --name 2>/dev/null`
-export VERSION=`python setup.py --version 2>/dev/null`
-export KILL_PROC="from $(NAME) import kill_octave; kill_octave()"
-export GHP_MSG="Generated gh-pages for `git log master -1 --pretty=short 
--abbrev-commit`"
+NAME:=$(shell python setup.py --name 2>/dev/null)
+VERSION:=$(shell python setup.py --version 2>/dev/null)
+KILL_PROC="from ${NAME} import kill_octave; kill_octave()"
 
 all: clean
        python setup.py install
@@ -20,37 +19,25 @@
        pip install -q pytest
        export PYTHONWARNINGS="all"; py.test
        make clean
+       jupyter nbconvert --to notebook --execute 
--ExecutePreprocessor.timeout=60 --stdout example/octavemagic_extension.ipynb > 
/dev/null;
 
 cover: clean
        pip install -q pytest codecov pytest-cov
-       py.test -l --cov-report html --cov=$(NAME)
+       py.test -l --cov-report html --cov=${NAME}
 
 release: clean
        pip install -q wheel
-       git commit -a -m "Release $(VERSION)"; true
-       make gh-pages
+       git commit -a -m "Release ${VERSION}"; true
        python setup.py register
        rm -rf dist
        python setup.py bdist_wheel --universal
        python setup.py sdist
-       git tag v$(VERSION)
+       git tag v${VERSION}
        git push origin --all
        git push origin --tags
        twine upload dist/*
-       printf '\nUpgrade oct2py-feedstock with release and sha256 sum:'
-       shasum -a 256 dist/*.tar.gz
 
 docs: clean
-       pip install -q sphinx-bootstrap-theme numpydoc sphinx ghp-import
+       pip install -q sphinx-rtd-theme numpydoc sphinx
        export SPHINXOPTS=-W; make -C docs html
        export SPHINXOPTS=-W; make -C docs linkcheck
-
-gh-pages:
-       git checkout master
-       git pull origin master
-       cp oct2py/tests/*.m example
-       rm example/script_error.m; true
-       git commit -a -m "Keep examples in sync"; true
-       git push origin; true
-       make docs
-       ghp-import -n -p -m $(GHP_MSG) docs/_build/html
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oct2py-4.0.6/PKG-INFO new/oct2py-5.0.2/PKG-INFO
--- old/oct2py-4.0.6/PKG-INFO   2017-04-08 13:48:26.000000000 +0200
+++ new/oct2py-5.0.2/PKG-INFO   2019-05-06 02:23:52.000000000 +0200
@@ -1,88 +1,95 @@
-Metadata-Version: 1.1
+Metadata-Version: 2.1
 Name: oct2py
-Version: 4.0.6
+Version: 5.0.2
 Summary: Python to GNU Octave bridge --> run m-files from python.
 Home-page: http://github.com/blink1073/oct2py
-Author: Steven Silvester
-Author-email: steven.silves...@ieee.org
+Maintainer: Steven Silvester
+Maintainer-email: steven.silves...@ieee.org
 License: MIT
 Download-URL: http://github.com/blink1073/oct2py
-Description: Oct2Py: Python to GNU Octave Bridge
-        ===================================
-        
-        .. image:: https://badge.fury.io/py/oct2py.png/
-            :target: http://badge.fury.io/py/oct2py
-        
-        .. image:: 
https://codecov.io/github/blink1073/oct2py/coverage.svg?branch=master
-          :target: https://codecov.io/github/blink1073/oct2py?branch=master
-        
-        Oct2Py allows you to seamlessly call M-files and Octave functions from 
Python.
-        It manages the Octave session for you, sharing data behind the scenes 
using
-        MAT files.  Usage is as simple as:
-        
-        .. code-block:: python
-        
-            >>> oc = oct2py.Oct2Py()
-            >>> x = oc.zeros(3,3)
-            >>> print(x, x.dtype)
-            [[ 0.  0.  0.]
-             [ 0.  0.  0.]
-             [ 0.  0.  0.]] float64
-            ...
-        
-        If you want to run legacy m-files, do not have MATLAB®, and do not 
fully
-        trust a code translator, this is your library.
-        
-        
-        Features
-        --------
-        
-        - Supports all Octave datatypes and most Python datatypes and Numpy 
dtypes.
-        - Provides OctaveMagic_ for IPython, including inline plotting in 
notebooks.
-        - Supports cell arrays and structs/struct arrays with arbitrary 
nesting.
-        - Supports sparse matrices.
-        - Builds methods on the fly linked to Octave commands (e.g. `zeros` 
above).
-        - Thread-safety: each Oct2Py object uses an independent Octave session.
-        - Can be used as a context manager.
-        - Supports Unicode characters.
-        - Supports logging of session commands.
-        - Optional timeout command parameter to prevent runaway Octave 
sessions.
-        
-        
-        .. _OctaveMagic: 
http://nbviewer.jupyter.org/github/blink1073/oct2py/blob/master/example/octavemagic_extension.ipynb?create=1
-        
-        
-        Installation
-        ------------
-        You must have GNU Octave installed and in your ``PATH``.
-        You must have the Numpy and Scipy libraries for Python installed.
-        See the installation instructions_ for more details.
-        
-        Once the dependencies have been installed, run:
-        
-        .. code-block:: bash
-        
-            $ pip install oct2py
-        
-        If using conda, it is available on conda-forge:
-        
-        .. code-block:: bash
-           
-           $ conda install -c conda-forge oct2py
-        
-        .. _instructions: 
http://blink1073.github.io/oct2py/source/installation.html
-        
-        
-        Documentation
-        -------------
-        
-        Documentation is available online_.
-        
-        For version information, see the Revision History_.
-        
-        .. _online: http://blink1073.github.io/oct2py/
-        
-        .. _History: 
https://github.com/blink1073/oct2py/blob/master/HISTORY.rst
+Description: Oct2Py: Python to GNU Octave Bridge
+        ===================================
+        
+        .. image:: https://badge.fury.io/py/oct2py.png/
+            :target: http://badge.fury.io/py/oct2py
+        
+        .. image:: 
https://codecov.io/github/blink1073/oct2py/coverage.svg?branch=master
+          :target: https://codecov.io/github/blink1073/oct2py?branch=master
+        
+        .. image:: http://pepy.tech/badge/oct2py
+           :target: http://pepy.tech/project/oct2py
+           :alt: PyPi Download stats
+        
+        Oct2Py allows you to seamlessly call M-files and Octave functions from 
Python.
+        It manages the Octave session for you, sharing data behind the scenes 
using
+        MAT files.  Usage is as simple as:
+        
+        .. code-block:: python
+        
+            >>> oc = oct2py.Oct2Py()
+            >>> x = oc.zeros(3,3)
+            >>> print(x, x.dtype)
+            [[ 0.  0.  0.]
+             [ 0.  0.  0.]
+             [ 0.  0.  0.]] float64
+            ...
+        
+        If you want to run legacy m-files, do not have MATLAB®, and do not 
fully
+        trust a code translator, this is your library.
+        
+        
+        Features
+        --------
+        
+        - Supports all Octave datatypes and most Python datatypes and Numpy 
dtypes.
+        - Provides OctaveMagic_ for IPython, including inline plotting in 
notebooks.
+        - Supports cell arrays and structs/struct arrays with arbitrary 
nesting.
+        - Supports sparse matrices.
+        - Builds methods on the fly linked to Octave commands (e.g. `zeros` 
above).
+        - Thread-safety: each Oct2Py object uses an independent Octave session.
+        - Can be used as a context manager.
+        - Supports Unicode characters.
+        - Supports logging of session commands.
+        - Optional timeout command parameter to prevent runaway Octave 
sessions.
+        
+        
+        .. _OctaveMagic: 
https://nbviewer.jupyter.org/github/blink1073/oct2py/blob/master/example/octavemagic_extension.ipynb?create=1
+        
+        
+        Installation
+        ------------
+        You must have GNU Octave installed and in your ``PATH`` environment 
variable.
+        Alternatively, you can set an ``OCTAVE_EXECUTABLE`` or ``OCTAVE`` 
environment
+        variable that points to ``octave-cli`` executable itself.
+        
+        You must have the Numpy and Scipy libraries for Python installed.
+        See the installation instructions_ for more details.
+        
+        Once the dependencies have been installed, run:
+        
+        .. code-block:: bash
+        
+            $ pip install oct2py
+        
+        If using conda, it is available on conda-forge:
+        
+        .. code-block:: bash
+        
+           $ conda install -c conda-forge oct2py
+        
+        .. _instructions: 
http://blink1073.github.io/oct2py/source/installation.html
+        
+        
+        Documentation
+        -------------
+        
+        Documentation is available online_.
+        
+        For version information, see the Revision History_.
+        
+        .. _online: https://oct2py.readthedocs.io/en/latest/
+        
+        .. _History: 
https://github.com/blink1073/oct2py/blob/master/HISTORY.rst
         
 Platform: Any
 Classifier: Development Status :: 5 - Production/Stable
@@ -96,6 +103,8 @@
 Classifier: Programming Language :: Python :: 3.4
 Classifier: Topic :: Scientific/Engineering
 Classifier: Topic :: Software Development
-Requires: numpy (>= 1.11)
+Requires: numpy (>= 1.12)
 Requires: scipy (>= 0.17)
-Requires: octave_kernel (>= 0.25)
+Requires: octave_kernel (>= 0.30.0)
+Provides-Extra: docs
+Provides-Extra: test
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oct2py-4.0.6/README.rst new/oct2py-5.0.2/README.rst
--- old/oct2py-4.0.6/README.rst 2017-04-08 13:44:50.000000000 +0200
+++ new/oct2py-5.0.2/README.rst 2019-05-05 12:23:11.000000000 +0200
@@ -1,76 +1,83 @@
-Oct2Py: Python to GNU Octave Bridge
-===================================
-
-.. image:: https://badge.fury.io/py/oct2py.png/
-    :target: http://badge.fury.io/py/oct2py
-
-.. image:: 
https://codecov.io/github/blink1073/oct2py/coverage.svg?branch=master
-  :target: https://codecov.io/github/blink1073/oct2py?branch=master
-
-Oct2Py allows you to seamlessly call M-files and Octave functions from Python.
-It manages the Octave session for you, sharing data behind the scenes using
-MAT files.  Usage is as simple as:
-
-.. code-block:: python
-
-    >>> oc = oct2py.Oct2Py()
-    >>> x = oc.zeros(3,3)
-    >>> print(x, x.dtype)
-    [[ 0.  0.  0.]
-     [ 0.  0.  0.]
-     [ 0.  0.  0.]] float64
-    ...
-
-If you want to run legacy m-files, do not have MATLAB®, and do not fully
-trust a code translator, this is your library.
-
-
-Features
---------
-
-- Supports all Octave datatypes and most Python datatypes and Numpy dtypes.
-- Provides OctaveMagic_ for IPython, including inline plotting in notebooks.
-- Supports cell arrays and structs/struct arrays with arbitrary nesting.
-- Supports sparse matrices.
-- Builds methods on the fly linked to Octave commands (e.g. `zeros` above).
-- Thread-safety: each Oct2Py object uses an independent Octave session.
-- Can be used as a context manager.
-- Supports Unicode characters.
-- Supports logging of session commands.
-- Optional timeout command parameter to prevent runaway Octave sessions.
-
-
-.. _OctaveMagic: 
http://nbviewer.jupyter.org/github/blink1073/oct2py/blob/master/example/octavemagic_extension.ipynb?create=1
-
-
-Installation
-------------
-You must have GNU Octave installed and in your ``PATH``.
-You must have the Numpy and Scipy libraries for Python installed.
-See the installation instructions_ for more details.
-
-Once the dependencies have been installed, run:
-
-.. code-block:: bash
-
-    $ pip install oct2py
-
-If using conda, it is available on conda-forge:
-
-.. code-block:: bash
-   
-   $ conda install -c conda-forge oct2py
-
-.. _instructions: http://blink1073.github.io/oct2py/source/installation.html
-
-
-Documentation
--------------
-
-Documentation is available online_.
-
-For version information, see the Revision History_.
-
-.. _online: http://blink1073.github.io/oct2py/
-
-.. _History: https://github.com/blink1073/oct2py/blob/master/HISTORY.rst
+Oct2Py: Python to GNU Octave Bridge
+===================================
+
+.. image:: https://badge.fury.io/py/oct2py.png/
+    :target: http://badge.fury.io/py/oct2py
+
+.. image:: 
https://codecov.io/github/blink1073/oct2py/coverage.svg?branch=master
+  :target: https://codecov.io/github/blink1073/oct2py?branch=master
+
+.. image:: http://pepy.tech/badge/oct2py
+   :target: http://pepy.tech/project/oct2py
+   :alt: PyPi Download stats
+
+Oct2Py allows you to seamlessly call M-files and Octave functions from Python.
+It manages the Octave session for you, sharing data behind the scenes using
+MAT files.  Usage is as simple as:
+
+.. code-block:: python
+
+    >>> oc = oct2py.Oct2Py()
+    >>> x = oc.zeros(3,3)
+    >>> print(x, x.dtype)
+    [[ 0.  0.  0.]
+     [ 0.  0.  0.]
+     [ 0.  0.  0.]] float64
+    ...
+
+If you want to run legacy m-files, do not have MATLAB®, and do not fully
+trust a code translator, this is your library.
+
+
+Features
+--------
+
+- Supports all Octave datatypes and most Python datatypes and Numpy dtypes.
+- Provides OctaveMagic_ for IPython, including inline plotting in notebooks.
+- Supports cell arrays and structs/struct arrays with arbitrary nesting.
+- Supports sparse matrices.
+- Builds methods on the fly linked to Octave commands (e.g. `zeros` above).
+- Thread-safety: each Oct2Py object uses an independent Octave session.
+- Can be used as a context manager.
+- Supports Unicode characters.
+- Supports logging of session commands.
+- Optional timeout command parameter to prevent runaway Octave sessions.
+
+
+.. _OctaveMagic: 
https://nbviewer.jupyter.org/github/blink1073/oct2py/blob/master/example/octavemagic_extension.ipynb?create=1
+
+
+Installation
+------------
+You must have GNU Octave installed and in your ``PATH`` environment variable.
+Alternatively, you can set an ``OCTAVE_EXECUTABLE`` or ``OCTAVE`` environment
+variable that points to ``octave-cli`` executable itself.
+
+You must have the Numpy and Scipy libraries for Python installed.
+See the installation instructions_ for more details.
+
+Once the dependencies have been installed, run:
+
+.. code-block:: bash
+
+    $ pip install oct2py
+
+If using conda, it is available on conda-forge:
+
+.. code-block:: bash
+
+   $ conda install -c conda-forge oct2py
+
+.. _instructions: http://blink1073.github.io/oct2py/source/installation.html
+
+
+Documentation
+-------------
+
+Documentation is available online_.
+
+For version information, see the Revision History_.
+
+.. _online: https://oct2py.readthedocs.io/en/latest/
+
+.. _History: https://github.com/blink1073/oct2py/blob/master/HISTORY.rst
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oct2py-4.0.6/docs/conf.py 
new/oct2py-5.0.2/docs/conf.py
--- old/oct2py-4.0.6/docs/conf.py       2017-04-08 13:44:50.000000000 +0200
+++ new/oct2py-5.0.2/docs/conf.py       2019-05-02 17:14:07.000000000 +0200
@@ -44,17 +44,18 @@
 project = u'Oct2Py'
 copyright = u'2011 - {today.year}, Oct2Py 
contributors'.format(today=datetime.date.today())
 
-import oct2py
+import os
+_version_py = os.path.join('..', 'oct2py', '_version.py')
+version_ns = {}
 
-# The version info for the project you're documenting, acts as replacement for
-# |version| and |release|, also used in various other places throughout the
-# built documents.
-#
-# The short X.Y version.
+with open(_version_py, mode='r') as version_file:
+    exec(version_file.read(), version_ns)
 
-version = oct2py.__version__
+# The short X.Y version.
+version = '%i.%i' % version_ns['version_info'][:2]
 # The full version, including alpha/beta/rc tags.
-release = oct2py.__version__
+release = version_ns['__version__']
+
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
@@ -95,23 +96,9 @@
 
 # The theme to use for HTML and HTML Help pages.  See the documentation for
 # a list of builtin themes.
-import sphinx_bootstrap_theme
-
-html_theme = 'bootstrap'
-
-# Theme options are theme-specific and customize the look and feel of a theme
-# further.  For a list of options available for each theme, see the
-# documentation.
-#html_theme_options = {}
-html_theme_options = {
-    #'navbar_class': 'navbar-inverse',
-    #'navbar_sidebarrel': False,
-    'bootswatch_theme': 'cosmo',
-    'bootstrap_version': '3',
-}
-
-# Add any paths that contain custom themes here, relative to this directory.
-html_theme_path =  sphinx_bootstrap_theme.get_html_theme_path()
+import sphinx_rtd_theme
+html_theme = "sphinx_rtd_theme"
+html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]
 
 # The name for this set of Sphinx documents.  If None, it defaults to
 # "<project> v<release> documentation".
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oct2py-4.0.6/docs/source/demo.rst 
new/oct2py-5.0.2/docs/source/demo.rst
--- old/oct2py-4.0.6/docs/source/demo.rst       2015-06-14 17:57:46.000000000 
+0200
+++ new/oct2py-5.0.2/docs/source/demo.rst       2019-05-02 17:14:07.000000000 
+0200
@@ -22,7 +22,7 @@
     >>> print(oc.upper('xyz'))
     XYZ
     >>> # plotting
-    >>> oc.plot([1,2,3],'-o', linewidth=2)
+    >>> oc.plot([1,2,3],'-o', 'linewidth', 2)
     Press Enter to continue...
 
 .. image:: static/plot.png
@@ -112,7 +112,7 @@
     >>> print(oc.svd(np.array([[1,2], [1,3]])))
     [[ 3.86432845]
      [ 0.25877718]]
-    >>> U, S, V = oc.svd([[1,2], [1,3]])
+    >>> U, S, V = oc.svd([[1,2], [1,3]], nout=3)
     >>> print(U, S, V)
     [[-0.57604844 -0.81741556]
      [-0.81741556  0.57604844]] [[ 3.86432845  0.        ]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oct2py-4.0.6/docs/source/installation.rst 
new/oct2py-5.0.2/docs/source/installation.rst
--- old/oct2py-4.0.6/docs/source/installation.rst       2017-04-08 
13:44:50.000000000 +0200
+++ new/oct2py-5.0.2/docs/source/installation.rst       2019-05-02 
17:14:07.000000000 +0200
@@ -6,8 +6,8 @@
 You must have GNU Octave installed and in your PATH
 (see instructions below).  The library is only known to work with
 Octave 4.0+.
-Additionally, you must have the Numpy and Scipy libraries for Python 
-installed.  
+Additionally, you must have the Numpy and Scipy libraries for Python
+installed.
 The simplest way to get them is to use the Anaconda_ distribution.
 
 Once the dependencies have been installed, run:
@@ -19,7 +19,7 @@
 If using conda, it is available on conda-forge:
 
 .. code-block:: bash
-   
+
    $ conda install -c conda-forge oct2py
 
 
@@ -32,7 +32,7 @@
 - On OSX, the recommended methods are listed on this wiki_.
 
 - On Windows, download the latest MinGW or .NET version_.  Cygwin
-  is *NOT* supported. 
+  is *NOT* supported.
   The MinGW version requires the 7zip_ program for installation.
   Make sure to install gnuplot if prompted.
   Finally, to add Octave to your path. You can do so from the Environmental 
Variables dialog for your version of Windows, or set from the command prompt::
@@ -50,9 +50,9 @@
 - Alternatively, you can specify the path to your Octave executable by 
creating an `OCTAVE_EXECUTABLE` environmental variable.
 
 
-.. _Anaconda: https://www.continuum.io/downloads
+.. _Anaconda: 
https://conda.io/projects/conda/en/latest/user-guide/install/index.html
 .. _pip: http://www.pip-installer.org/en/latest/installing.html
-.. _Octave:  
http://www.gnu.org/software/octave/doc/interpreter/Installation.html
+.. _Octave:  https://octave.org/doc/interpreter/Installation.html
 .. _wiki: http://wiki.octave.org/Octave_for_MacOS_X
 .. _version: 
https://sourceforge.net/projects/octave/files/Octave%20Windows%20binaries/
-.. _7zip: http://portableapps.com/apps/utilities/7-zip_portable
+.. _7zip: https://portableapps.com/apps/utilities/7-zip_portable
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oct2py-4.0.6/oct2py/__init__.py 
new/oct2py-5.0.2/oct2py/__init__.py
--- old/oct2py-4.0.6/oct2py/__init__.py 2017-04-08 13:45:31.000000000 +0200
+++ new/oct2py-5.0.2/oct2py/__init__.py 2019-05-02 17:14:07.000000000 +0200
@@ -29,8 +29,8 @@
 from .demo import demo
 from .speed_check import speed_check
 from .thread_check import thread_check
+from ._version import __version__
 
-__version__ = '4.0.6'
 __all__ = ['Oct2Py', 'Oct2PyError', 'octave', 'Struct', 'Cell', 'StructArray',
            'demo', 'speed_check', 'thread_check', '__version__', 'get_log']
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oct2py-4.0.6/oct2py/_pyeval.m 
new/oct2py-5.0.2/oct2py/_pyeval.m
--- old/oct2py-4.0.6/oct2py/_pyeval.m   2017-04-08 13:44:50.000000000 +0200
+++ new/oct2py-5.0.2/oct2py/_pyeval.m   2019-05-06 02:23:46.000000000 +0200
@@ -33,8 +33,8 @@
     end
 
     % Replace the names at the specified indices with their values.
-    for index=1:length(req.ref_indices)
-      ref_index = req.ref_indices(index);
+    for idx=1:length(req.ref_indices)
+      ref_index = req.ref_indices(idx);
       var_name = req.func_args{ref_index};
       req.func_args{ref_index} = evalin('base', var_name);
     end
@@ -43,7 +43,7 @@
 
     % Use the `ans` response if no output arguments are expected.
     if req.nout == 0
-        
+
         if length(req.func_args)
           feval(req.func_name, req.func_args{:});
         else
@@ -56,12 +56,12 @@
       try
         [result{1:req.nout}] = feval(req.func_name, req.func_args{:});
       catch ME
-        if (strcmp(ME.message, 'element number 1 undefined in return list') != 
1) 
+        if (strcmp(ME.message, 'element number 1 undefined in return list') != 
1)
           error(ME);
         else
           result = get_ans(sentinel);
         end
-          
+
       end
 
     else
@@ -90,7 +90,7 @@
   result = { sentinel };
   err = ME;
   save('-v6', '-mat-binary', output_file, 'result', 'err');
-end 
+end
 
 end  % function
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oct2py-4.0.6/oct2py/_version.py 
new/oct2py-5.0.2/oct2py/_version.py
--- old/oct2py-4.0.6/oct2py/_version.py 1970-01-01 01:00:00.000000000 +0100
+++ new/oct2py-5.0.2/oct2py/_version.py 2019-05-06 02:23:38.000000000 +0200
@@ -0,0 +1,22 @@
+# Copyright (c) Jupyter Development Team.
+# Distributed under the terms of the Modified BSD License.
+
+from collections import namedtuple
+
+VersionInfo = namedtuple('VersionInfo', [
+    'major',
+    'minor',
+    'micro',
+    'releaselevel',
+    'serial'
+])
+
+version_info = VersionInfo(5, 0, 2, 'final', 0)
+
+__version__ = '{}.{}.{}'.format(
+    version_info.major,
+    version_info.minor,
+    version_info.micro,
+    (''
+     if version_info.releaselevel == 'final'
+     else _specifier_[version_info.releaselevel] + str(version_info.serial)))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oct2py-4.0.6/oct2py/core.py 
new/oct2py-5.0.2/oct2py/core.py
--- old/oct2py-4.0.6/oct2py/core.py     2017-04-08 13:44:50.000000000 +0200
+++ new/oct2py-5.0.2/oct2py/core.py     2019-05-05 12:06:39.000000000 +0200
@@ -6,6 +6,7 @@
 
 import logging
 import os
+import os.path as osp
 import tempfile
 import warnings
 
@@ -21,6 +22,9 @@
     _make_user_class, OctavePtr)
 
 
+HERE = osp.realpath(osp.dirname(__file__))
+
+
 class Oct2Py(object):
 
     """Manages an Octave session.
@@ -37,10 +41,6 @@
 
     Parameters
     ----------
-    executable : str, optional
-        Name of the Octave executable, can be a system path.  If this is not
-        given, we look for an OCTAVE_EXECUTABLE environmental variable.
-        The fallback is to call "octave-cli" or "octave".
     logger : logging object, optional
         Optional logger to use for Oct2Py session
     timeout : float, optional
@@ -54,18 +54,21 @@
         a shared memory (tmpfs) path.
     convert_to_float : bool, optional
         If true, convert integer types to float when passing to Octave.
+    backend: string, optional
+        The graphics_toolkit to use for plotting.
     """
 
-    def __init__(self, executable=None, logger=None, timeout=None,
-                 oned_as='row', temp_dir=None, convert_to_float=True):
+    def __init__(self, logger=None, timeout=None,
+                 oned_as='row', temp_dir=None, convert_to_float=True,
+                 backend=None):
         """Start Octave and set up the session.
         """
         self._oned_as = oned_as
-        self._executable = executable
         self._engine = None
         self._logger = None
         self.logger = logger
         self.timeout = timeout
+        self.backend = backend or 'default'
         self.temp_dir = temp_dir or tempfile.mkdtemp()
         self.convert_to_float = convert_to_float
         self._user_classes = dict()
@@ -120,7 +123,7 @@
         >>> y = [1, 2]
         >>> octave.push('y', y)
         >>> octave.pull('y')
-        array([[ 1.,  2.]])
+        array([[1., 2.]])
         >>> octave.push(['x', 'y'], ['spam', [1, 2, 3, 4]])
         >>> octave.pull(['x', 'y'])  # doctest: +SKIP
         [u'spam', array([[1, 2, 3, 4]])]
@@ -167,7 +170,7 @@
           >>> y = [1, 2]
           >>> octave.push('y', y)
           >>> octave.pull('y')
-          array([[ 1.,  2.]])
+          array([[1., 2.]])
           >>> octave.push(['x', 'y'], ['spam', [1, 2, 3, 4]])
           >>> octave.pull(['x', 'y'])  # doctest: +SKIP
           [u'spam', array([[1, 2, 3, 4]])]
@@ -204,7 +207,7 @@
         >>> octave.eval('foo = [1, 2];')
         >>> ptr = octave.get_pointer('foo')
         >>> ptr.value
-        array([[ 1.,  2.]])
+        array([[1., 2.]])
         >>> ptr.address
         'foo'
         >>> # Can be passed as an argument
@@ -287,6 +290,8 @@
         plot_dir: str, optional
             If specificed, save the session's plot figures to the plot
             directory instead of displaying the plot window.
+        plot_backend: str, optional
+            The plotting back end to use.
         plot_name : str, optional
             Saved plots will start with `plot_name` and
             end with "_%%.xxx' where %% is the plot number and
@@ -300,9 +305,9 @@
 
         Notes
         -----
-        The function arguments passed follow Octave calling convention, not 
+        The function arguments passed follow Octave calling convention, not
         Python. That is, all values must be passed as a comma separated list,
-        not using `x=foo` assignment.  
+        not using `x=foo` assignment.
 
         Examples
         --------
@@ -319,9 +324,9 @@
         >>> from oct2py import octave
         >>> x = octave.feval('svd', octave.hilb(3))
         >>> x
-        array([[ 1.40831893],
-               [ 0.12232707],
-               [ 0.00268734]])
+        array([[1.40831893],
+               [0.12232707],
+               [0.00268734]])
         >>> # specify three return values
         >>> (u, v, d) = octave.feval('svd', octave.hilb(3), nout=3)
         >>> u.shape
@@ -339,7 +344,12 @@
             nout = 1
 
         plot_dir = kwargs.get('plot_dir')
-        settings = dict(backend='inline' if plot_dir else None,
+
+        # Choose appropriate plot backend.
+        default_backend = 'inline' if plot_dir else self.backend
+        backend = kwargs.get('plot_backend', default_backend)
+
+        settings = dict(backend=backend,
                         format=kwargs.get('plot_format'),
                         name=kwargs.get('plot_name'),
                         width=kwargs.get('plot_width'),
@@ -347,9 +357,9 @@
                         resolution=kwargs.get('plot_res'))
         self._engine.plot_settings = settings
 
-        dname = os.path.dirname(func_path)
-        fname = os.path.basename(func_path)
-        func_name, ext = os.path.splitext(fname)
+        dname = osp.dirname(func_path)
+        fname = osp.basename(func_path)
+        func_name, ext = osp.splitext(fname)
         if ext and not ext == '.m':
             raise TypeError('Need to give path to .m file')
 
@@ -369,8 +379,8 @@
                           store_as=store_as, plot_dir=plot_dir)
 
     def eval(self, cmds, verbose=True, timeout=None, stream_handler=None,
-             temp_dir=None, plot_dir=None, plot_name='plot', plot_format='svg',
-             plot_width=None, plot_height=None, plot_res=None, 
+             temp_dir=None, plot_dir=None, plot_name='plot', 
plot_format='svg', plot_backend=None,
+             plot_width=None, plot_height=None, plot_res=None,
              nout=0, **kwargs):
         """
         Evaluate an Octave command or commands.
@@ -407,6 +417,8 @@
             The plot with in pixels.
         plot_height: int, optional
             The plot height in pixels.
+        plot_backend: str, optional
+            The plot backend to use.
         plot_res: int, optional
             The plot resolution in pixels per inch.
         **kwargs Deprectated kwargs.
@@ -480,6 +492,7 @@
                               stream_handler=stream_handler,
                               verbose=verbose, plot_dir=plot_dir,
                               plot_name=plot_name, plot_format=plot_format,
+                              plot_backend=plot_backend,
                               plot_width=plot_width, plot_height=plot_height,
                               plot_res=plot_res)
             if resp is not None:
@@ -498,9 +511,6 @@
         if self._engine:
             self._engine.repl.terminate()
 
-        executable = self._executable
-        if executable:
-            os.environ['OCTAVE_EXECUTABLE'] = executable
         if 'OCTAVE_EXECUTABLE' not in os.environ and 'OCTAVE' in os.environ:
             os.environ['OCTAVE_EXECUTABLE'] = os.environ['OCTAVE']
 
@@ -508,8 +518,7 @@
                                     logger=self.logger)
 
         # Add local Octave scripts.
-        here = os.path.realpath(os.path.dirname(__file__))
-        self._engine.eval('addpath("%s");' % here.replace(os.path.sep, '/'))
+        self._engine.eval('addpath("%s");' % HERE.replace(osp.sep, '/'))
 
     def _feval(self, func_name, func_args=(), dname='', nout=0,
               timeout=None, stream_handler=None, store_as='', plot_dir=None):
@@ -520,10 +529,10 @@
             raise Oct2PyError('Session is closed')
 
         # Set up our mat file paths.
-        out_file = os.path.join(self.temp_dir, 'writer.mat')
-        out_file = out_file.replace(os.path.sep, '/')
-        in_file = os.path.join(self.temp_dir, 'reader.mat')
-        in_file = in_file.replace(os.path.sep, '/')
+        out_file = osp.join(self.temp_dir, 'writer.mat')
+        out_file = out_file.replace(osp.sep, '/')
+        in_file = osp.join(self.temp_dir, 'reader.mat')
+        in_file = in_file.replace(osp.sep, '/')
 
         func_args = list(func_args)
         ref_indices = []
@@ -557,6 +566,8 @@
             stream_handler(engine.repl.interrupt())
             raise Oct2PyError('Timed out, interrupting')
         except EOF:
+            if not self._engine:
+                return
             stream_handler(engine.repl.child.before)
             self.restart()
             raise Oct2PyError('Session died, restarting')
@@ -572,9 +583,9 @@
             result = result[0]
 
         # Check for sentinel value.
-        if (isinstance(result, Cell) and 
+        if (isinstance(result, Cell) and
                 result.size == 1 and
-                isinstance(result[0], string_types) and 
+                isinstance(result[0], string_types) and
                 result[0] == '__no_value__'):
             result = None
 
@@ -665,8 +676,13 @@
         resp = self._engine.eval(cmd, silent=True).strip()
         exist = int(resp.split()[-1])
         if exist == 0:
-            msg = 'Value "%s" does not exist in Octave workspace'
-            raise Oct2PyError(msg % name)
+            cmd = 'class(%s)' % name
+            resp = self._engine.eval(cmd, silent=True).strip()
+            if 'error:' in resp:
+                msg = 'Value "%s" does not exist in Octave workspace'
+                raise Oct2PyError(msg % name)
+            else:
+                exist = 2
         return exist
 
     def _isobject(self, name, exist):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oct2py-4.0.6/oct2py/demo.py 
new/oct2py-5.0.2/oct2py/demo.py
--- old/oct2py-4.0.6/oct2py/demo.py     2017-04-08 13:44:50.000000000 +0200
+++ new/oct2py-5.0.2/oct2py/demo.py     2019-04-24 04:36:02.000000000 +0200
@@ -28,7 +28,7 @@
     print(oc.abs(-1))
     print(oc.upper('xyz'))
     # plotting
-    oc.plot([1,2,3],'-o', linewidth=2)
+    oc.plot([1,2,3],'-o', 'linewidth', 2)
     raw_input('Press Enter to continue...')
     oc.close()
     xx = np.arange(-2*np.pi, 2*np.pi, 0.2)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oct2py-4.0.6/oct2py/io.py 
new/oct2py-5.0.2/oct2py/io.py
--- old/oct2py-4.0.6/oct2py/io.py       2017-04-08 13:44:55.000000000 +0200
+++ new/oct2py-5.0.2/oct2py/io.py       2019-05-06 02:23:46.000000000 +0200
@@ -13,6 +13,14 @@
 from scipy.io.matlab.mio5 import MatlabObject, MatlabFunction
 from scipy.sparse import spmatrix
 
+try:
+    from pandas import Series, DataFrame
+except Exception as e:
+    class Series:
+        pass
+    class DataFrame:
+        pass
+
 from .compat import PY2
 from .dynamic import OctaveVariablePtr, OctaveUserClass, OctaveFunctionPtr
 from .utils import Oct2PyError
@@ -112,7 +120,7 @@
 
     Notes
     =====
-    Accessing a record returns a Cell containing the values.  
+    Accessing a record returns a Cell containing the values.
     This class is not meant to be directly created by the user.  It is
     created automatically for structure array values received from Octave.
     The last axis is squeezed if it is of size 1 to simplify element access.
@@ -311,6 +319,14 @@
             out[name] = _encode(view[name], ctf)
         return out
 
+    # Integer objects should be converted to floats
+    if isinstance(data, int):
+        return float(data)
+
+    # Handle pandas series and dataframes
+    if isinstance(data, (DataFrame, Series)):
+        return _encode(data.values, ctf)
+
     # Extract and encode values from dict-like objects.
     if isinstance(data, dict):
         out = dict()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oct2py-4.0.6/oct2py/tests/roundtrip.m 
new/oct2py-5.0.2/oct2py/tests/roundtrip.m
--- old/oct2py-4.0.6/oct2py/tests/roundtrip.m   2017-04-08 13:44:50.000000000 
+0200
+++ new/oct2py-5.0.2/oct2py/tests/roundtrip.m   2019-05-05 12:06:39.000000000 
+0200
@@ -1,5 +1,5 @@
 
-function [x, cls] = roundtrip(y)
+function [x, cls] = roundtrip(y = 1)
 
   % returns the variable it was given, and optionally the class
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oct2py-4.0.6/oct2py/tests/test_datatypes.m 
new/oct2py-5.0.2/oct2py/tests/test_datatypes.m
--- old/oct2py-4.0.6/oct2py/tests/test_datatypes.m      2017-04-08 
13:44:50.000000000 +0200
+++ new/oct2py-5.0.2/oct2py/tests/test_datatypes.m      2019-05-06 
02:23:46.000000000 +0200
@@ -1,7 +1,7 @@
 
 function test = test_datatypes()
 % Test of returning a structure with multiple
-% nesting and multiple return types 
+% nesting and multiple return types
 % Add a UTF char for test: 猫
 
 %%%%%%%%%%%%%%%
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oct2py-4.0.6/oct2py/tests/test_misc.py 
new/oct2py-5.0.2/oct2py/tests/test_misc.py
--- old/oct2py-4.0.6/oct2py/tests/test_misc.py  2017-04-08 13:44:50.000000000 
+0200
+++ new/oct2py-5.0.2/oct2py/tests/test_misc.py  2019-05-02 17:14:07.000000000 
+0200
@@ -13,6 +13,7 @@
     import _thread as thread
 
 import numpy as np
+import pandas as pd
 
 import oct2py
 from oct2py import Oct2Py, Oct2PyError, StructArray, Cell
@@ -134,6 +135,19 @@
         x = self.oc.ones_()
         assert np.allclose(x, np.ones(1))
 
+    def test_pandas_series(self):
+        data = [1,2,3,4,5,6]
+        series = pd.Series(data)
+        self.oc.push('x', series)
+        assert np.allclose(data, self.oc.pull('x'))
+    
+    def test_panda_dataframe(self):
+        data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
+        df = pd.DataFrame(data,
+                     columns=['a', 'b', 'c'])
+        self.oc.push('y', df)
+        assert np.allclose(data, self.oc.pull('y'))
+
     def test_using_exited_session(self):
         with Oct2Py() as oc:
             oc.exit()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oct2py-4.0.6/oct2py/tests/test_numpy.py 
new/oct2py-5.0.2/oct2py/tests/test_numpy.py
--- old/oct2py-4.0.6/oct2py/tests/test_numpy.py 2017-04-08 13:44:50.000000000 
+0200
+++ new/oct2py-5.0.2/oct2py/tests/test_numpy.py 2019-05-03 14:41:30.000000000 
+0200
@@ -23,6 +23,8 @@
         """Send scalar numpy types and make sure we get the same number back.
         """
         for typecode in self.codes:
+            if typecode == 'V':
+                continue
             outgoing = (np.random.randint(-255, 255) + np.random.rand(1))
             if typecode in 'US':
                 outgoing = np.array('spam').astype(typecode)
@@ -42,6 +44,8 @@
         """Send ndarrays and make sure we get the same array back
         """
         for typecode in self.codes:
+            if typecode == 'V':
+                continue
             for ndims in [2, 3, 4]:
                 size = [np.random.randint(1, 10) for i in range(ndims)]
                 outgoing = (np.random.randint(-255, 255, tuple(size)))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oct2py-4.0.6/oct2py/tests/test_roundtrip.py 
new/oct2py-5.0.2/oct2py/tests/test_roundtrip.py
--- old/oct2py-4.0.6/oct2py/tests/test_roundtrip.py     2017-04-08 
13:44:50.000000000 +0200
+++ new/oct2py-5.0.2/oct2py/tests/test_roundtrip.py     2019-05-06 
02:23:46.000000000 +0200
@@ -8,7 +8,7 @@
 
 
 TYPE_CONVERSIONS = [
-    (int, 'int32', np.int32),
+    (int, 'double', np.float64),
     (long, 'int64', np.int64),
     (float, 'double', np.float64),
     (complex, 'double', np.complex128),
@@ -73,7 +73,7 @@
                 assert (np.alltrue(np.isnan(val1)) and
                         np.alltrue(np.isnan(val2)))
             except (AssertionError, NotImplementedError):
-                assert val1 == val2
+                assert np.allclose([val1], [val2])
 
     def helper(self, outgoing, expected_type=None):
         """
@@ -161,7 +161,7 @@
 
         # Handle simple objects.
         for key in self.data.keys():
-            if key not in ['nested', 'sparse', 'cell', 'object', 
'struct_vector']:
+            if key not in ['nested', 'sparse', 'cell', 'object', 
'struct_vector', 'num']:
                 cmd = '{0}(x.{1},y.{1});'.format(func, key)
                 assert self.oc.eval(cmd), key
                 cmd = '{0}(x.nested.{1},y.nested.{1});'.format(func, key)
@@ -202,6 +202,21 @@
             cmd = '{0}(x.nested.struct_vector({1}), 
y.nested.struct_vector({1}))'
             assert self.oc.eval(cmd.format(func, i + 1))
 
+        # Handle the num type
+        x = self.oc.pull('x')
+        y = self.oc.pull('y')
+        for key in self.data['num'].keys():
+            if key == 'int':
+                continue
+            if key == 'NaN':
+                assert np.isnan(x.num[key])
+                assert np.isnan(y.num[key])
+                continue
+            assert np.allclose(x.num[key], y.num[key])
+
+        for key in self.data['num']['int'].keys():
+            assert np.allclose(x.num.int[key], y.num.int[key])
+
 
 class TestBuiltins:
     """Test the exporting of standard Python data types, checking their type.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oct2py-4.0.6/oct2py/tests/test_usage.py 
new/oct2py-5.0.2/oct2py/tests/test_usage.py
--- old/oct2py-4.0.6/oct2py/tests/test_usage.py 2017-04-08 13:44:50.000000000 
+0200
+++ new/oct2py-5.0.2/oct2py/tests/test_usage.py 2019-05-06 02:23:46.000000000 
+0200
@@ -41,7 +41,7 @@
         """
         out = self.oc.ones(1, 2)
         assert np.allclose(out, np.ones((1, 2)))
-        
+
         U, S, V = self.oc.svd([[1, 2], [1, 3]], nout=3)
         assert np.allclose(U, ([[-0.57604844, -0.81741556],
                            [-0.81741556, 0.57604844]]))
@@ -298,3 +298,26 @@
             self.oc.source(os.path.join(here, 'script_error.m'))
         msg = str(exec_info.value)
         assert msg == "Octave evaluation error:\nerror: 'b' undefined near 
line 2 column 3"
+
+    def test_pkg_load(self):
+        self.oc.eval('pkg load signal')
+        t = np.linspace(0, 1, num=100)
+        x = np.cos(2*np.pi*t*3)
+        # on Travis CI this is giving a dimension mismatch error
+        try:
+            y = self.oc.sgolayfilt(x, 3, 5)
+        except Oct2PyError as e:
+            if 'dimensions mismatch' in str(e):
+                return
+        assert y.shape == (1, 100)
+
+    def test_passing_integer_args(self):
+        self.oc.eval("""
+function [res, a, b] = foo(a, b)
+res = a * b;
+end
+""")
+        res, a, b = self.oc.foo(np.nan, 2, nout=3)
+        assert np.isnan(res)
+        assert np.isnan(a)
+        assert b == 2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oct2py-4.0.6/oct2py.egg-info/PKG-INFO 
new/oct2py-5.0.2/oct2py.egg-info/PKG-INFO
--- old/oct2py-4.0.6/oct2py.egg-info/PKG-INFO   2017-04-08 13:48:26.000000000 
+0200
+++ new/oct2py-5.0.2/oct2py.egg-info/PKG-INFO   2019-05-06 02:23:52.000000000 
+0200
@@ -1,88 +1,95 @@
-Metadata-Version: 1.1
+Metadata-Version: 2.1
 Name: oct2py
-Version: 4.0.6
+Version: 5.0.2
 Summary: Python to GNU Octave bridge --> run m-files from python.
 Home-page: http://github.com/blink1073/oct2py
-Author: Steven Silvester
-Author-email: steven.silves...@ieee.org
+Maintainer: Steven Silvester
+Maintainer-email: steven.silves...@ieee.org
 License: MIT
 Download-URL: http://github.com/blink1073/oct2py
-Description: Oct2Py: Python to GNU Octave Bridge
-        ===================================
-        
-        .. image:: https://badge.fury.io/py/oct2py.png/
-            :target: http://badge.fury.io/py/oct2py
-        
-        .. image:: 
https://codecov.io/github/blink1073/oct2py/coverage.svg?branch=master
-          :target: https://codecov.io/github/blink1073/oct2py?branch=master
-        
-        Oct2Py allows you to seamlessly call M-files and Octave functions from 
Python.
-        It manages the Octave session for you, sharing data behind the scenes 
using
-        MAT files.  Usage is as simple as:
-        
-        .. code-block:: python
-        
-            >>> oc = oct2py.Oct2Py()
-            >>> x = oc.zeros(3,3)
-            >>> print(x, x.dtype)
-            [[ 0.  0.  0.]
-             [ 0.  0.  0.]
-             [ 0.  0.  0.]] float64
-            ...
-        
-        If you want to run legacy m-files, do not have MATLAB®, and do not 
fully
-        trust a code translator, this is your library.
-        
-        
-        Features
-        --------
-        
-        - Supports all Octave datatypes and most Python datatypes and Numpy 
dtypes.
-        - Provides OctaveMagic_ for IPython, including inline plotting in 
notebooks.
-        - Supports cell arrays and structs/struct arrays with arbitrary 
nesting.
-        - Supports sparse matrices.
-        - Builds methods on the fly linked to Octave commands (e.g. `zeros` 
above).
-        - Thread-safety: each Oct2Py object uses an independent Octave session.
-        - Can be used as a context manager.
-        - Supports Unicode characters.
-        - Supports logging of session commands.
-        - Optional timeout command parameter to prevent runaway Octave 
sessions.
-        
-        
-        .. _OctaveMagic: 
http://nbviewer.jupyter.org/github/blink1073/oct2py/blob/master/example/octavemagic_extension.ipynb?create=1
-        
-        
-        Installation
-        ------------
-        You must have GNU Octave installed and in your ``PATH``.
-        You must have the Numpy and Scipy libraries for Python installed.
-        See the installation instructions_ for more details.
-        
-        Once the dependencies have been installed, run:
-        
-        .. code-block:: bash
-        
-            $ pip install oct2py
-        
-        If using conda, it is available on conda-forge:
-        
-        .. code-block:: bash
-           
-           $ conda install -c conda-forge oct2py
-        
-        .. _instructions: 
http://blink1073.github.io/oct2py/source/installation.html
-        
-        
-        Documentation
-        -------------
-        
-        Documentation is available online_.
-        
-        For version information, see the Revision History_.
-        
-        .. _online: http://blink1073.github.io/oct2py/
-        
-        .. _History: 
https://github.com/blink1073/oct2py/blob/master/HISTORY.rst
+Description: Oct2Py: Python to GNU Octave Bridge
+        ===================================
+        
+        .. image:: https://badge.fury.io/py/oct2py.png/
+            :target: http://badge.fury.io/py/oct2py
+        
+        .. image:: 
https://codecov.io/github/blink1073/oct2py/coverage.svg?branch=master
+          :target: https://codecov.io/github/blink1073/oct2py?branch=master
+        
+        .. image:: http://pepy.tech/badge/oct2py
+           :target: http://pepy.tech/project/oct2py
+           :alt: PyPi Download stats
+        
+        Oct2Py allows you to seamlessly call M-files and Octave functions from 
Python.
+        It manages the Octave session for you, sharing data behind the scenes 
using
+        MAT files.  Usage is as simple as:
+        
+        .. code-block:: python
+        
+            >>> oc = oct2py.Oct2Py()
+            >>> x = oc.zeros(3,3)
+            >>> print(x, x.dtype)
+            [[ 0.  0.  0.]
+             [ 0.  0.  0.]
+             [ 0.  0.  0.]] float64
+            ...
+        
+        If you want to run legacy m-files, do not have MATLAB®, and do not 
fully
+        trust a code translator, this is your library.
+        
+        
+        Features
+        --------
+        
+        - Supports all Octave datatypes and most Python datatypes and Numpy 
dtypes.
+        - Provides OctaveMagic_ for IPython, including inline plotting in 
notebooks.
+        - Supports cell arrays and structs/struct arrays with arbitrary 
nesting.
+        - Supports sparse matrices.
+        - Builds methods on the fly linked to Octave commands (e.g. `zeros` 
above).
+        - Thread-safety: each Oct2Py object uses an independent Octave session.
+        - Can be used as a context manager.
+        - Supports Unicode characters.
+        - Supports logging of session commands.
+        - Optional timeout command parameter to prevent runaway Octave 
sessions.
+        
+        
+        .. _OctaveMagic: 
https://nbviewer.jupyter.org/github/blink1073/oct2py/blob/master/example/octavemagic_extension.ipynb?create=1
+        
+        
+        Installation
+        ------------
+        You must have GNU Octave installed and in your ``PATH`` environment 
variable.
+        Alternatively, you can set an ``OCTAVE_EXECUTABLE`` or ``OCTAVE`` 
environment
+        variable that points to ``octave-cli`` executable itself.
+        
+        You must have the Numpy and Scipy libraries for Python installed.
+        See the installation instructions_ for more details.
+        
+        Once the dependencies have been installed, run:
+        
+        .. code-block:: bash
+        
+            $ pip install oct2py
+        
+        If using conda, it is available on conda-forge:
+        
+        .. code-block:: bash
+        
+           $ conda install -c conda-forge oct2py
+        
+        .. _instructions: 
http://blink1073.github.io/oct2py/source/installation.html
+        
+        
+        Documentation
+        -------------
+        
+        Documentation is available online_.
+        
+        For version information, see the Revision History_.
+        
+        .. _online: https://oct2py.readthedocs.io/en/latest/
+        
+        .. _History: 
https://github.com/blink1073/oct2py/blob/master/HISTORY.rst
         
 Platform: Any
 Classifier: Development Status :: 5 - Production/Stable
@@ -96,6 +103,8 @@
 Classifier: Programming Language :: Python :: 3.4
 Classifier: Topic :: Scientific/Engineering
 Classifier: Topic :: Software Development
-Requires: numpy (>= 1.11)
+Requires: numpy (>= 1.12)
 Requires: scipy (>= 0.17)
-Requires: octave_kernel (>= 0.25)
+Requires: octave_kernel (>= 0.30.0)
+Provides-Extra: docs
+Provides-Extra: test
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oct2py-4.0.6/oct2py.egg-info/SOURCES.txt 
new/oct2py-5.0.2/oct2py.egg-info/SOURCES.txt
--- old/oct2py-4.0.6/oct2py.egg-info/SOURCES.txt        2017-04-08 
13:48:26.000000000 +0200
+++ new/oct2py-5.0.2/oct2py.egg-info/SOURCES.txt        2019-05-06 
02:23:52.000000000 +0200
@@ -27,6 +27,7 @@
 licenses/ompc.txt
 oct2py/__init__.py
 oct2py/_pyeval.m
+oct2py/_version.py
 oct2py/compat.py
 oct2py/core.py
 oct2py/demo.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oct2py-4.0.6/oct2py.egg-info/requires.txt 
new/oct2py-5.0.2/oct2py.egg-info/requires.txt
--- old/oct2py-4.0.6/oct2py.egg-info/requires.txt       2017-04-08 
13:48:26.000000000 +0200
+++ new/oct2py-5.0.2/oct2py.egg-info/requires.txt       2019-05-06 
02:23:52.000000000 +0200
@@ -1,4 +1,6 @@
-octave_kernel >= 0.25
+octave_kernel>=0.30.0
+numpy>=1.12
+scipy>=0.17
 
 [docs]
 sphinx
@@ -7,6 +9,7 @@
 
 [test]
 pytest
+pandas
 
 [test:python_version == "2.7"]
 mock
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oct2py-4.0.6/setup.py new/oct2py-5.0.2/setup.py
--- old/oct2py-4.0.6/setup.py   2017-04-08 13:44:50.000000000 +0200
+++ new/oct2py-5.0.2/setup.py   2019-05-05 12:06:39.000000000 +0200
@@ -9,11 +9,11 @@
 MAINTAINER_EMAIL = 'steven.silves...@ieee.org'
 URL = 'http://github.com/blink1073/oct2py'
 LICENSE = 'MIT'
-REQUIRES = ["numpy (>= 1.11)", "scipy (>= 0.17)", "octave_kernel (>= 0.25)"]
-INSTALL_REQUIRES = ["octave_kernel >= 0.25"]
+REQUIRES = ["numpy (>= 1.12)", "scipy (>= 0.17)", "octave_kernel (>= 0.30.0)"]
+INSTALL_REQUIRES = ["octave_kernel >= 0.30.0", "numpy >= 1.12", "scipy >= 
0.17"]
 EXTRAS_REQUIRE = {
     'test:python_version == "2.7"': ['mock'],
-    'test': ['pytest'],
+    'test': ['pytest', 'pandas'],
     'docs': ['sphinx', 'sphinx-bootstrap-theme', 'numpydoc']
 }
 PACKAGES = [DISTNAME, '%s.tests' % DISTNAME, '%s/ipython' % DISTNAME,
@@ -38,17 +38,17 @@
     from distutils.core import setup
 
 
-with open('oct2py/__init__.py', 'rb') as fid:
-    for line in fid:
-        line = line.decode('utf-8')
-        if line.startswith('__version__'):
-            version = line.strip().split()[-1][1:-1]
-            break
+import os
+_version_py = os.path.join('.', 'oct2py', '_version.py')
+version_ns = {}
+
+with open(_version_py, mode='r') as version_file:
+    exec(version_file.read(), version_ns)
 
 
 setup(
     name=DISTNAME,
-    version=version,
+    version=version_ns['__version__'],
     maintainer=MAINTAINER,
     maintainer_email=MAINTAINER_EMAIL,
     packages=PACKAGES,


Reply via email to