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,