summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOle Streicher <ole@aip.de>2022-01-03 08:52:27 +0100
committerOle Streicher <ole@aip.de>2022-01-03 08:52:27 +0100
commit4deef5926a92abf01e2e3d04e6067dbc625e1bad (patch)
tree5ece915e27d3e704765506adb2681b49edc76a5f
parent2241ffbbe69f1a9c17608ae9d16ba5b34414ed3d (diff)
New upstream version 0.4.0
-rw-r--r--.github/workflows/ci_workflows.yml53
-rw-r--r--.github/workflows/publish.yml48
-rw-r--r--.gitignore63
-rw-r--r--CHANGES.md7
-rw-r--r--MANIFEST.in3
-rw-r--r--PKG-INFO415
-rw-r--r--README.rst13
-rw-r--r--pyproject.toml5
-rw-r--r--pytest_arraydiff.egg-info/PKG-INFO415
-rw-r--r--pytest_arraydiff.egg-info/SOURCES.txt7
-rw-r--r--pytest_arraydiff.egg-info/requires.txt4
-rwxr-xr-xpytest_arraydiff/__init__.py4
-rwxr-xr-xpytest_arraydiff/plugin.py32
-rw-r--r--pytest_arraydiff/version.py5
-rw-r--r--setup.cfg50
-rwxr-xr-xsetup.py39
-rw-r--r--tests/test_pytest_arraydiff.py24
-rw-r--r--tox.ini32
18 files changed, 720 insertions, 499 deletions
diff --git a/.github/workflows/ci_workflows.yml b/.github/workflows/ci_workflows.yml
new file mode 100644
index 0000000..286cdb6
--- /dev/null
+++ b/.github/workflows/ci_workflows.yml
@@ -0,0 +1,53 @@
+name: CI
+
+on:
+ pull_request:
+ push:
+ schedule:
+ # Run every Sunday at 06:53 UTC
+ - cron: 53 6 * * 0
+
+jobs:
+ tests:
+ runs-on: ${{ matrix.os }}
+ strategy:
+ fail-fast: false
+ matrix:
+ include:
+ - os: ubuntu-latest
+ python-version: 3.7
+ toxenv: py37-test-pytest46
+ - os: windows-latest
+ python-version: 3.7
+ toxenv: py37-test-pytest50
+ - os: macos-latest
+ python-version: 3.8
+ toxenv: py38-test-pytest52
+ - os: ubuntu-latest
+ python-version: 3.8
+ toxenv: py38-test-pytest53
+ - os: windows-latest
+ python-version: 3.9
+ toxenv: py39-test-pytest60
+ - os: macos-latest
+ python-version: 3.9
+ toxenv: py39-test-pytest61
+ - os: ubuntu-latest
+ python-version: '3.10'
+ toxenv: py310-test-pytest62
+ - os: ubuntu-latest
+ python-version: '3.10'
+ toxenv: py310-test-pytestdev
+
+ steps:
+ - uses: actions/checkout@v2
+ with:
+ fetch-depth: 0
+ - name: Set up Python ${{ matrix.python-version }}
+ uses: actions/setup-python@v2
+ with:
+ python-version: ${{ matrix.python-version }}
+ - name: Install tox
+ run: python -m pip install tox
+ - name: Run tox
+ run: tox -v -e ${{ matrix.toxenv }}
diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
new file mode 100644
index 0000000..2631bf7
--- /dev/null
+++ b/.github/workflows/publish.yml
@@ -0,0 +1,48 @@
+name: Release
+
+on:
+ pull_request:
+ push:
+ tags:
+ - '*'
+
+jobs:
+ build-n-publish:
+ name: Build and publish Python 🐍 distributions 📦 to PyPI
+ runs-on: ubuntu-latest
+ if: ((github.event_name == 'push' && startsWith(github.ref, 'refs/tags')) || contains(github.event.pull_request.labels.*.name, 'Build wheels'))
+
+ steps:
+ - uses: actions/checkout@v2
+ with:
+ fetch-depth: 0
+ - uses: actions/setup-python@v2
+ with:
+ python-version: 3.8
+
+ - name: Install python-build and twine
+ run: python -m pip install pip build "twine>=3.3" -U
+
+ - name: Build package
+ run: python -m build --sdist --wheel .
+
+ - name: List result
+ run: ls -l dist
+
+ - name: Check long_description
+ run: python -m twine check --strict dist/*
+
+ # FIXME: pytest not found
+ #- name: Test package
+ # run: |
+ # cd ..
+ # python -m venv testenv
+ # testenv/bin/pip install pytest pytest-arraydiff/dist/*.whl
+ # testenv/bin/pytest pytest-arraydiff/tests --arraydiff
+
+ - name: Publish distribution 📦 to PyPI
+ if: startsWith(github.ref, 'refs/tags')
+ uses: pypa/gh-action-pypi-publish@release/v1
+ with:
+ user: __token__
+ password: ${{ secrets.pypi_password }}
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..fca8de1
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,63 @@
+# Compiled files
+*.py[cod]
+*.a
+*.o
+*.so
+*.pyd
+__pycache__
+
+# Ignore .c files by default to avoid including generated code. If you want to
+# add a non-generated .c extension, use `git add -f filename.c`.
+*.c
+
+# Other generated files
+MANIFEST
+
+# Sphinx
+_build
+_generated
+docs/api
+docs/generated
+
+# Packages/installer info
+*.egg
+*.egg-info
+dist
+build
+eggs
+.eggs
+parts
+bin
+var
+sdist
+develop-eggs
+.installed.cfg
+distribute-*.tar.gz
+
+# Other
+.cache
+.tox
+.*.swp
+.*.swo
+*~
+.project
+.pydevproject
+.settings
+.coverage
+cover
+htmlcov
+.pytest_cache
+
+# Env
+.venv
+venv
+.env
+
+# Mac OSX
+.DS_Store
+
+# PyCharm
+.idea
+
+*/version.py
+pip-wheel-metadata/
diff --git a/CHANGES.md b/CHANGES.md
index 052369a..49faa1f 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,3 +1,10 @@
+0.4 (2021-12-31)
+----------------
+
+- Minimum Python version is now 3.7. [#30]
+
+- Various infrastructure updates.
+
0.3 (2018-12-05)
----------------
diff --git a/MANIFEST.in b/MANIFEST.in
index 73a6b90..d56a613 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -2,5 +2,8 @@ include LICENSE
include README.rst
include CHANGES.md
include tox.ini
+include pyproject.toml
+include setup.cfg
+include setup.py
recursive-include tests *.py *.fits *.txt
diff --git a/PKG-INFO b/PKG-INFO
index 292b52e..2a54e1f 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,214 +1,219 @@
-Metadata-Version: 1.1
+Metadata-Version: 2.1
Name: pytest-arraydiff
-Version: 0.3
+Version: 0.4.0
Summary: pytest plugin to help with comparing array output from tests
-Home-page: https://github.com/astrofrog/pytest-arraydiff
-Author: Thomas Robitaille
-Author-email: thomas.robitaille@gmail.com
+Home-page: https://github.com/astropy/pytest-arraydiff
+Author: The Astropy Developers
+Author-email: astropy.team@gmail.com
License: BSD
-Description: |Travis Build Status| |AppVeyor Build status| |Coverage|
-
- About
- -----
-
- This is a `py.test <http://pytest.org>`__ plugin to facilitate the
- generation and comparison of data arrays produced during tests, in particular
- in cases where the arrays are too large to conveniently hard-code them
- in the tests (e.g. ``np.testing.assert_allclose(x, [1, 2, 3])``).
-
- The basic idea is that you can write a test that generates a Numpy array (or
- other related objects depending on the format). You can then either run the
- tests in a mode to **generate** reference files from the arrays, or you can run
- the tests in **comparison** mode, which will compare the results of the tests to
- the reference ones within some tolerance.
-
- At the moment, the supported file formats for the reference files are:
-
- - A plain text-based format (baed on Numpy ``loadtxt`` output)
- - The FITS format (requires `astropy <http://www.astropy.org>`__). With this
- format, tests can return either a Numpy array for a FITS HDU object.
-
- For more information on how to write tests to do this, see the **Using**
- section below.
-
- Installing
- ----------
-
- This plugin is compatible with Python 2.7, and 3.5 and later, and
- requires `pytest <http://pytest.org>`__ and
- `numpy <http://www.numpy.org>`__ to be installed.
-
- To install, you can do::
-
- pip install pytest-arraydiff
-
- You can check that the plugin is registered with pytest by doing::
-
- py.test --version
-
- which will show a list of plugins::
-
- This is pytest version 2.7.1, imported from ...
- setuptools registered plugins:
- pytest-arraydiff-0.1 at ...
-
- Using
- -----
-
- To use, you simply need to mark the function where you want to compare
- arrays using ``@pytest.mark.array_compare``, and make sure that the
- function returns a plain Numpy array::
-
- python
- import pytest
- import numpy as np
-
- @pytest.mark.array_compare
- def test_succeeds():
- return np.arange(3 * 5 * 4).reshape((3, 5, 4))
-
- To generate the reference data files, run the tests with the
- ``--arraydiff-generate-path`` option with the name of the directory
- where the generated files should be placed::
-
- py.test --arraydiff-generate-path=reference
-
- If the directory does not exist, it will be created. The directory will
- be interpreted as being relative to where you are running ``py.test``.
- Make sure you manually check the reference arrays to ensure they are
- correct.
-
- Once you are happy with the generated data files, you should move them
- to a sub-directory called ``reference`` relative to the test files (this
- name is configurable, see below). You can also generate the baseline
- arrays directly in the right directory.
-
- You can then run the tests simply with::
-
- py.test --arraydiff
-
- and the tests will pass if the arrays are the same. If you omit the
- ``--arraydiff`` option, the tests will run but will only check that the
- code runs without checking the output arrays.
-
- Options
- -------
-
- The ``@pytest.mark.array_compare`` marker take an argument to specify
- the format to use for the reference files:
-
- .. code:: python
-
- @pytest.mark.array_compare(file_format='text')
- def test_array():
- ...
-
- The default file format can also be specified using the
- ``--arraydiff-default-format=<format>`` flag when running ``py.test``,
- and ``<format>`` should be either ``fits`` or ``text``.
-
- The supported formats at this time are ``text`` and ``fits``, and
- contributions for other formats are welcome. The default format is
- ``text``.
-
- Another argument is the relative tolerance for floating point values
- (which defaults to 1e-7):
-
- .. code:: python
-
- @pytest.mark.array_compare(rtol=20)
- def test_array():
- ...
-
- You can also pass keyword arguments to the writers using the
- ``write_kwargs``. For the ``text`` format, these arguments are passed to
- ``savetxt`` while for the ``fits`` format they are passed to Astropy's
- ``fits.writeto`` function.
-
- .. code:: python
-
- @pytest.mark.array_compare(file_format='fits', write_kwargs={'output_verify': 'silentfix'})
- def test_array():
- ...
-
- Other options include the name of the reference directory (which
- defaults to ``reference`` ) and the filename for the reference file
- (which defaults to the name of the test with a format-dependent
- extension).
-
- .. code:: python
-
- @pytest.mark.array_compare(reference_dir='baseline_arrays',
- filename='other_name.fits')
- def test_array():
- ...
-
- The reference directory in the decorator above will be interpreted as
- being relative to the test file. Note that the baseline directory can
- also be a URL (which should start with ``http://`` or ``https://`` and
- end in a slash).
-
- Finally, you can also set a custom baseline directory globally when
- running tests by running ``py.test`` with::
-
- py.test --arraydiff --arraydiff-reference-path=baseline_arrays
-
- This directory will be interpreted as being relative to where the tests
- are run. In addition, if both this option and the ``reference_dir``
- option in the ``array_compare`` decorator are used, the one in the
- decorator takes precedence.
-
- Test failure example
- --------------------
-
- If the arrays produced by the tests are correct, then the test will
- pass, but if they are not, the test will fail with a message similar to
- the following::
-
- E AssertionError:
- E
- E a: /var/folders/zy/t1l3sx310d3d6p0kyxqzlrnr0000gr/T/tmpbvjkzt_q/test_to_mask_rect-mode_subpixels-subpixels_18.txt
- E b: /var/folders/zy/t1l3sx310d3d6p0kyxqzlrnr0000gr/T/tmpbvjkzt_q/reference-test_to_mask_rect-mode_subpixels-subpixels_18.txt
- E
- E Not equal to tolerance rtol=1e-07, atol=0
- E
- E (mismatch 47.22222222222222%)
- E x: array([[ 0. , 0. , 0. , 0. , 0.404012, 0.55 ,
- E 0.023765, 0. , 0. ],
- E [ 0. , 0. , 0. , 0.112037, 1.028704, 1.1 ,...
- E y: array([[ 0. , 0. , 0. , 0. , 0.367284, 0.5 ,
- E 0.021605, 0. , 0. ],
- E [ 0. , 0. , 0. , 0.101852, 0.935185, 1. ,...
-
- The file paths included in the exception are then available for
- inspection.
-
- Running the tests for pytest-arraydiff
- --------------------------------------
-
- If you are contributing some changes and want to run the tests, first
- install the latest version of the plugin then do::
-
- cd tests
- py.test --arraydiff
-
- The reason for having to install the plugin first is to ensure that the
- plugin is correctly loaded as part of the test suite.
-
- .. |Travis Build Status| image:: https://travis-ci.org/astrofrog/pytest-arraydiff.svg?branch=master
- :target: https://travis-ci.org/astrofrog/pytest-arraydiff
- .. |AppVeyor Build status| image:: https://ci.appveyor.com/api/projects/status/0nech6qgp8jlabjp/branch/master?svg=true
- :target: https://ci.appveyor.com/project/astropy/pytest-arraydiff
- .. |Coverage| image:: https://codecov.io/gh/astropy/pytest-arraydiff/branch/master/graph/badge.svg
- :target: https://codecov.io/gh/astropy/pytest-arraydiff
-
Platform: UNKNOWN
Classifier: Development Status :: 4 - Beta
Classifier: Framework :: Pytest
Classifier: Intended Audience :: Developers
-Classifier: Topic :: Software Development :: Testing
+Classifier: License :: OSI Approved :: BSD License
+Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
-Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 3
-Classifier: Operating System :: OS Independent
-Classifier: License :: OSI Approved :: BSD License
+Classifier: Programming Language :: Python :: 3 :: Only
+Classifier: Programming Language :: Python :: 3.6
+Classifier: Programming Language :: Python :: 3.7
+Classifier: Programming Language :: Python :: 3.8
+Classifier: Programming Language :: Python :: Implementation :: CPython
+Classifier: Topic :: Software Development :: Testing
+Classifier: Topic :: Utilities
+Requires-Python: >=3.7
+Description-Content-Type: text/x-rst
+License-File: LICENSE
+
+.. image:: https://github.com/astropy/pytest-arraydiff/workflows/CI/badge.svg
+ :target: https://github.com/astropy/pytest-arraydiff/actions
+ :alt: CI Status
+
+About
+-----
+
+This is a `py.test <http://pytest.org>`__ plugin to facilitate the
+generation and comparison of data arrays produced during tests, in particular
+in cases where the arrays are too large to conveniently hard-code them
+in the tests (e.g. ``np.testing.assert_allclose(x, [1, 2, 3])``).
+
+The basic idea is that you can write a test that generates a Numpy array (or
+other related objects depending on the format). You can then either run the
+tests in a mode to **generate** reference files from the arrays, or you can run
+the tests in **comparison** mode, which will compare the results of the tests to
+the reference ones within some tolerance.
+
+At the moment, the supported file formats for the reference files are:
+
+- A plain text-based format (based on Numpy ``loadtxt`` output)
+- The FITS format (requires `astropy <http://www.astropy.org>`__). With this
+ format, tests can return either a Numpy array for a FITS HDU object.
+
+For more information on how to write tests to do this, see the **Using**
+section below.
+
+Installing
+----------
+
+This plugin is compatible with Python 2.7, and 3.5 and later, and
+requires `pytest <http://pytest.org>`__ and
+`numpy <http://www.numpy.org>`__ to be installed.
+
+To install, you can do::
+
+ pip install pytest-arraydiff
+
+You can check that the plugin is registered with pytest by doing::
+
+ py.test --version
+
+which will show a list of plugins::
+
+ This is pytest version 2.7.1, imported from ...
+ setuptools registered plugins:
+ pytest-arraydiff-0.1 at ...
+
+Using
+-----
+
+To use, you simply need to mark the function where you want to compare
+arrays using ``@pytest.mark.array_compare``, and make sure that the
+function returns a plain Numpy array::
+
+ python
+ import pytest
+ import numpy as np
+
+ @pytest.mark.array_compare
+ def test_succeeds():
+ return np.arange(3 * 5 * 4).reshape((3, 5, 4))
+
+To generate the reference data files, run the tests with the
+``--arraydiff-generate-path`` option with the name of the directory
+where the generated files should be placed::
+
+ py.test --arraydiff-generate-path=reference
+
+If the directory does not exist, it will be created. The directory will
+be interpreted as being relative to where you are running ``py.test``.
+Make sure you manually check the reference arrays to ensure they are
+correct.
+
+Once you are happy with the generated data files, you should move them
+to a sub-directory called ``reference`` relative to the test files (this
+name is configurable, see below). You can also generate the baseline
+arrays directly in the right directory.
+
+You can then run the tests simply with::
+
+ py.test --arraydiff
+
+and the tests will pass if the arrays are the same. If you omit the
+``--arraydiff`` option, the tests will run but will only check that the
+code runs without checking the output arrays.
+
+Options
+-------
+
+The ``@pytest.mark.array_compare`` marker take an argument to specify
+the format to use for the reference files:
+
+.. code:: python
+
+ @pytest.mark.array_compare(file_format='text')
+ def test_array():
+ ...
+
+The default file format can also be specified using the
+``--arraydiff-default-format=<format>`` flag when running ``py.test``,
+and ``<format>`` should be either ``fits`` or ``text``.
+
+The supported formats at this time are ``text`` and ``fits``, and
+contributions for other formats are welcome. The default format is
+``text``.
+
+Another argument is the relative tolerance for floating point values
+(which defaults to 1e-7):
+
+.. code:: python
+
+ @pytest.mark.array_compare(rtol=20)
+ def test_array():
+ ...
+
+You can also pass keyword arguments to the writers using the
+``write_kwargs``. For the ``text`` format, these arguments are passed to
+``savetxt`` while for the ``fits`` format they are passed to Astropy's
+``fits.writeto`` function.
+
+.. code:: python
+
+ @pytest.mark.array_compare(file_format='fits', write_kwargs={'output_verify': 'silentfix'})
+ def test_array():
+ ...
+
+Other options include the name of the reference directory (which
+defaults to ``reference`` ) and the filename for the reference file
+(which defaults to the name of the test with a format-dependent
+extension).
+
+.. code:: python
+
+ @pytest.mark.array_compare(reference_dir='baseline_arrays',
+ filename='other_name.fits')
+ def test_array():
+ ...
+
+The reference directory in the decorator above will be interpreted as
+being relative to the test file. Note that the baseline directory can
+also be a URL (which should start with ``http://`` or ``https://`` and
+end in a slash).
+
+Finally, you can also set a custom baseline directory globally when
+running tests by running ``py.test`` with::
+
+ py.test --arraydiff --arraydiff-reference-path=baseline_arrays
+
+This directory will be interpreted as being relative to where the tests
+are run. In addition, if both this option and the ``reference_dir``
+option in the ``array_compare`` decorator are used, the one in the
+decorator takes precedence.
+
+Test failure example
+--------------------
+
+If the arrays produced by the tests are correct, then the test will
+pass, but if they are not, the test will fail with a message similar to
+the following::
+
+ E AssertionError:
+ E
+ E a: /var/folders/zy/t1l3sx310d3d6p0kyxqzlrnr0000gr/T/tmpbvjkzt_q/test_to_mask_rect-mode_subpixels-subpixels_18.txt
+ E b: /var/folders/zy/t1l3sx310d3d6p0kyxqzlrnr0000gr/T/tmpbvjkzt_q/reference-test_to_mask_rect-mode_subpixels-subpixels_18.txt
+ E
+ E Not equal to tolerance rtol=1e-07, atol=0
+ E
+ E (mismatch 47.22222222222222%)
+ E x: array([[ 0. , 0. , 0. , 0. , 0.404012, 0.55 ,
+ E 0.023765, 0. , 0. ],
+ E [ 0. , 0. , 0. , 0.112037, 1.028704, 1.1 ,...
+ E y: array([[ 0. , 0. , 0. , 0. , 0.367284, 0.5 ,
+ E 0.021605, 0. , 0. ],
+ E [ 0. , 0. , 0. , 0.101852, 0.935185, 1. ,...
+
+The file paths included in the exception are then available for
+inspection.
+
+Running the tests for pytest-arraydiff
+--------------------------------------
+
+If you are contributing some changes and want to run the tests, first
+install the latest version of the plugin then do::
+
+ cd tests
+ py.test --arraydiff
+
+The reason for having to install the plugin first is to ensure that the
+plugin is correctly loaded as part of the test suite.
+
+
diff --git a/README.rst b/README.rst
index f68ae47..a056ddf 100644
--- a/README.rst
+++ b/README.rst
@@ -1,4 +1,6 @@
-|Travis Build Status| |AppVeyor Build status| |Coverage|
+.. image:: https://github.com/astropy/pytest-arraydiff/workflows/CI/badge.svg
+ :target: https://github.com/astropy/pytest-arraydiff/actions
+ :alt: CI Status
About
-----
@@ -16,7 +18,7 @@ the reference ones within some tolerance.
At the moment, the supported file formats for the reference files are:
-- A plain text-based format (baed on Numpy ``loadtxt`` output)
+- A plain text-based format (based on Numpy ``loadtxt`` output)
- The FITS format (requires `astropy <http://www.astropy.org>`__). With this
format, tests can return either a Numpy array for a FITS HDU object.
@@ -186,10 +188,3 @@ install the latest version of the plugin then do::
The reason for having to install the plugin first is to ensure that the
plugin is correctly loaded as part of the test suite.
-
-.. |Travis Build Status| image:: https://travis-ci.org/astrofrog/pytest-arraydiff.svg?branch=master
- :target: https://travis-ci.org/astrofrog/pytest-arraydiff
-.. |AppVeyor Build status| image:: https://ci.appveyor.com/api/projects/status/0nech6qgp8jlabjp/branch/master?svg=true
- :target: https://ci.appveyor.com/project/astropy/pytest-arraydiff
-.. |Coverage| image:: https://codecov.io/gh/astropy/pytest-arraydiff/branch/master/graph/badge.svg
- :target: https://codecov.io/gh/astropy/pytest-arraydiff
diff --git a/pyproject.toml b/pyproject.toml
new file mode 100644
index 0000000..590e0b1
--- /dev/null
+++ b/pyproject.toml
@@ -0,0 +1,5 @@
+[build-system]
+requires = ["setuptools>=30.3.0",
+ "setuptools_scm",
+ "wheel"]
+build-backend = 'setuptools.build_meta'
diff --git a/pytest_arraydiff.egg-info/PKG-INFO b/pytest_arraydiff.egg-info/PKG-INFO
index 292b52e..2a54e1f 100644
--- a/pytest_arraydiff.egg-info/PKG-INFO
+++ b/pytest_arraydiff.egg-info/PKG-INFO
@@ -1,214 +1,219 @@
-Metadata-Version: 1.1
+Metadata-Version: 2.1
Name: pytest-arraydiff
-Version: 0.3
+Version: 0.4.0
Summary: pytest plugin to help with comparing array output from tests
-Home-page: https://github.com/astrofrog/pytest-arraydiff
-Author: Thomas Robitaille
-Author-email: thomas.robitaille@gmail.com
+Home-page: https://github.com/astropy/pytest-arraydiff
+Author: The Astropy Developers
+Author-email: astropy.team@gmail.com
License: BSD
-Description: |Travis Build Status| |AppVeyor Build status| |Coverage|
-
- About
- -----
-
- This is a `py.test <http://pytest.org>`__ plugin to facilitate the
- generation and comparison of data arrays produced during tests, in particular
- in cases where the arrays are too large to conveniently hard-code them
- in the tests (e.g. ``np.testing.assert_allclose(x, [1, 2, 3])``).
-
- The basic idea is that you can write a test that generates a Numpy array (or
- other related objects depending on the format). You can then either run the
- tests in a mode to **generate** reference files from the arrays, or you can run
- the tests in **comparison** mode, which will compare the results of the tests to
- the reference ones within some tolerance.
-
- At the moment, the supported file formats for the reference files are:
-
- - A plain text-based format (baed on Numpy ``loadtxt`` output)
- - The FITS format (requires `astropy <http://www.astropy.org>`__). With this
- format, tests can return either a Numpy array for a FITS HDU object.
-
- For more information on how to write tests to do this, see the **Using**
- section below.
-
- Installing
- ----------
-
- This plugin is compatible with Python 2.7, and 3.5 and later, and
- requires `pytest <http://pytest.org>`__ and
- `numpy <http://www.numpy.org>`__ to be installed.
-
- To install, you can do::
-
- pip install pytest-arraydiff
-
- You can check that the plugin is registered with pytest by doing::
-
- py.test --version
-
- which will show a list of plugins::
-
- This is pytest version 2.7.1, imported from ...
- setuptools registered plugins:
- pytest-arraydiff-0.1 at ...
-
- Using
- -----
-
- To use, you simply need to mark the function where you want to compare
- arrays using ``@pytest.mark.array_compare``, and make sure that the
- function returns a plain Numpy array::
-
- python
- import pytest
- import numpy as np
-
- @pytest.mark.array_compare
- def test_succeeds():
- return np.arange(3 * 5 * 4).reshape((3, 5, 4))
-
- To generate the reference data files, run the tests with the
- ``--arraydiff-generate-path`` option with the name of the directory
- where the generated files should be placed::
-
- py.test --arraydiff-generate-path=reference
-
- If the directory does not exist, it will be created. The directory will
- be interpreted as being relative to where you are running ``py.test``.
- Make sure you manually check the reference arrays to ensure they are
- correct.
-
- Once you are happy with the generated data files, you should move them
- to a sub-directory called ``reference`` relative to the test files (this
- name is configurable, see below). You can also generate the baseline
- arrays directly in the right directory.
-
- You can then run the tests simply with::
-
- py.test --arraydiff
-
- and the tests will pass if the arrays are the same. If you omit the
- ``--arraydiff`` option, the tests will run but will only check that the
- code runs without checking the output arrays.
-
- Options
- -------
-
- The ``@pytest.mark.array_compare`` marker take an argument to specify
- the format to use for the reference files:
-
- .. code:: python
-
- @pytest.mark.array_compare(file_format='text')
- def test_array():
- ...
-
- The default file format can also be specified using the
- ``--arraydiff-default-format=<format>`` flag when running ``py.test``,
- and ``<format>`` should be either ``fits`` or ``text``.
-
- The supported formats at this time are ``text`` and ``fits``, and
- contributions for other formats are welcome. The default format is
- ``text``.
-
- Another argument is the relative tolerance for floating point values
- (which defaults to 1e-7):
-
- .. code:: python
-
- @pytest.mark.array_compare(rtol=20)
- def test_array():
- ...
-
- You can also pass keyword arguments to the writers using the
- ``write_kwargs``. For the ``text`` format, these arguments are passed to
- ``savetxt`` while for the ``fits`` format they are passed to Astropy's
- ``fits.writeto`` function.
-
- .. code:: python
-
- @pytest.mark.array_compare(file_format='fits', write_kwargs={'output_verify': 'silentfix'})
- def test_array():
- ...
-
- Other options include the name of the reference directory (which
- defaults to ``reference`` ) and the filename for the reference file
- (which defaults to the name of the test with a format-dependent
- extension).
-
- .. code:: python
-
- @pytest.mark.array_compare(reference_dir='baseline_arrays',
- filename='other_name.fits')
- def test_array():
- ...
-
- The reference directory in the decorator above will be interpreted as
- being relative to the test file. Note that the baseline directory can
- also be a URL (which should start with ``http://`` or ``https://`` and
- end in a slash).
-
- Finally, you can also set a custom baseline directory globally when
- running tests by running ``py.test`` with::
-
- py.test --arraydiff --arraydiff-reference-path=baseline_arrays
-
- This directory will be interpreted as being relative to where the tests
- are run. In addition, if both this option and the ``reference_dir``
- option in the ``array_compare`` decorator are used, the one in the
- decorator takes precedence.
-
- Test failure example
- --------------------
-
- If the arrays produced by the tests are correct, then the test will
- pass, but if they are not, the test will fail with a message similar to
- the following::
-
- E AssertionError:
- E
- E a: /var/folders/zy/t1l3sx310d3d6p0kyxqzlrnr0000gr/T/tmpbvjkzt_q/test_to_mask_rect-mode_subpixels-subpixels_18.txt
- E b: /var/folders/zy/t1l3sx310d3d6p0kyxqzlrnr0000gr/T/tmpbvjkzt_q/reference-test_to_mask_rect-mode_subpixels-subpixels_18.txt
- E
- E Not equal to tolerance rtol=1e-07, atol=0
- E
- E (mismatch 47.22222222222222%)
- E x: array([[ 0. , 0. , 0. , 0. , 0.404012, 0.55 ,
- E 0.023765, 0. , 0. ],
- E [ 0. , 0. , 0. , 0.112037, 1.028704, 1.1 ,...
- E y: array([[ 0. , 0. , 0. , 0. , 0.367284, 0.5 ,
- E 0.021605, 0. , 0. ],
- E [ 0. , 0. , 0. , 0.101852, 0.935185, 1. ,...
-
- The file paths included in the exception are then available for
- inspection.
-
- Running the tests for pytest-arraydiff
- --------------------------------------
-
- If you are contributing some changes and want to run the tests, first
- install the latest version of the plugin then do::
-
- cd tests
- py.test --arraydiff
-
- The reason for having to install the plugin first is to ensure that the
- plugin is correctly loaded as part of the test suite.
-
- .. |Travis Build Status| image:: https://travis-ci.org/astrofrog/pytest-arraydiff.svg?branch=master
- :target: https://travis-ci.org/astrofrog/pytest-arraydiff
- .. |AppVeyor Build status| image:: https://ci.appveyor.com/api/projects/status/0nech6qgp8jlabjp/branch/master?svg=true
- :target: https://ci.appveyor.com/project/astropy/pytest-arraydiff
- .. |Coverage| image:: https://codecov.io/gh/astropy/pytest-arraydiff/branch/master/graph/badge.svg
- :target: https://codecov.io/gh/astropy/pytest-arraydiff
-
Platform: UNKNOWN
Classifier: Development Status :: 4 - Beta
Classifier: Framework :: Pytest
Classifier: Intended Audience :: Developers
-Classifier: Topic :: Software Development :: Testing
+Classifier: License :: OSI Approved :: BSD License
+Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
-Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 3
-Classifier: Operating System :: OS Independent
-Classifier: License :: OSI Approved :: BSD License
+Classifier: Programming Language :: Python :: 3 :: Only
+Classifier: Programming Language :: Python :: 3.6
+Classifier: Programming Language :: Python :: 3.7
+Classifier: Programming Language :: Python :: 3.8
+Classifier: Programming Language :: Python :: Implementation :: CPython
+Classifier: Topic :: Software Development :: Testing
+Classifier: Topic :: Utilities
+Requires-Python: >=3.7
+Description-Content-Type: text/x-rst
+License-File: LICENSE
+
+.. image:: https://github.com/astropy/pytest-arraydiff/workflows/CI/badge.svg
+ :target: https://github.com/astropy/pytest-arraydiff/actions
+ :alt: CI Status
+
+About
+-----
+
+This is a `py.test <http://pytest.org>`__ plugin to facilitate the
+generation and comparison of data arrays produced during tests, in particular
+in cases where the arrays are too large to conveniently hard-code them
+in the tests (e.g. ``np.testing.assert_allclose(x, [1, 2, 3])``).
+
+The basic idea is that you can write a test that generates a Numpy array (or
+other related objects depending on the format). You can then either run the
+tests in a mode to **generate** reference files from the arrays, or you can run
+the tests in **comparison** mode, which will compare the results of the tests to
+the reference ones within some tolerance.
+
+At the moment, the supported file formats for the reference files are:
+
+- A plain text-based format (based on Numpy ``loadtxt`` output)
+- The FITS format (requires `astropy <http://www.astropy.org>`__). With this
+ format, tests can return either a Numpy array for a FITS HDU object.
+
+For more information on how to write tests to do this, see the **Using**
+section below.
+
+Installing
+----------
+
+This plugin is compatible with Python 2.7, and 3.5 and later, and
+requires `pytest <http://pytest.org>`__ and
+`numpy <http://www.numpy.org>`__ to be installed.
+
+To install, you can do::
+
+ pip install pytest-arraydiff
+
+You can check that the plugin is registered with pytest by doing::
+
+ py.test --version
+
+which will show a list of plugins::
+
+ This is pytest version 2.7.1, imported from ...
+ setuptools registered plugins:
+ pytest-arraydiff-0.1 at ...
+
+Using
+-----
+
+To use, you simply need to mark the function where you want to compare
+arrays using ``@pytest.mark.array_compare``, and make sure that the
+function returns a plain Numpy array::
+
+ python
+ import pytest
+ import numpy as np
+
+ @pytest.mark.array_compare
+ def test_succeeds():
+ return np.arange(3 * 5 * 4).reshape((3, 5, 4))
+
+To generate the reference data files, run the tests with the
+``--arraydiff-generate-path`` option with the name of the directory
+where the generated files should be placed::
+
+ py.test --arraydiff-generate-path=reference
+
+If the directory does not exist, it will be created. The directory will
+be interpreted as being relative to where you are running ``py.test``.
+Make sure you manually check the reference arrays to ensure they are
+correct.
+
+Once you are happy with the generated data files, you should move them
+to a sub-directory called ``reference`` relative to the test files (this
+name is configurable, see below). You can also generate the baseline
+arrays directly in the right directory.
+
+You can then run the tests simply with::
+
+ py.test --arraydiff
+
+and the tests will pass if the arrays are the same. If you omit the
+``--arraydiff`` option, the tests will run but will only check that the
+code runs without checking the output arrays.
+
+Options
+-------
+
+The ``@pytest.mark.array_compare`` marker take an argument to specify
+the format to use for the reference files:
+
+.. code:: python
+
+ @pytest.mark.array_compare(file_format='text')
+ def test_array():
+ ...
+
+The default file format can also be specified using the
+``--arraydiff-default-format=<format>`` flag when running ``py.test``,
+and ``<format>`` should be either ``fits`` or ``text``.
+
+The supported formats at this time are ``text`` and ``fits``, and
+contributions for other formats are welcome. The default format is
+``text``.
+
+Another argument is the relative tolerance for floating point values
+(which defaults to 1e-7):
+
+.. code:: python
+
+ @pytest.mark.array_compare(rtol=20)
+ def test_array():
+ ...
+
+You can also pass keyword arguments to the writers using the
+``write_kwargs``. For the ``text`` format, these arguments are passed to
+``savetxt`` while for the ``fits`` format they are passed to Astropy's
+``fits.writeto`` function.
+
+.. code:: python
+
+ @pytest.mark.array_compare(file_format='fits', write_kwargs={'output_verify': 'silentfix'})
+ def test_array():
+ ...
+
+Other options include the name of the reference directory (which
+defaults to ``reference`` ) and the filename for the reference file
+(which defaults to the name of the test with a format-dependent
+extension).
+
+.. code:: python
+
+ @pytest.mark.array_compare(reference_dir='baseline_arrays',
+ filename='other_name.fits')
+ def test_array():
+ ...
+
+The reference directory in the decorator above will be interpreted as
+being relative to the test file. Note that the baseline directory can
+also be a URL (which should start with ``http://`` or ``https://`` and
+end in a slash).
+
+Finally, you can also set a custom baseline directory globally when
+running tests by running ``py.test`` with::
+
+ py.test --arraydiff --arraydiff-reference-path=baseline_arrays
+
+This directory will be interpreted as being relative to where the tests
+are run. In addition, if both this option and the ``reference_dir``
+option in the ``array_compare`` decorator are used, the one in the
+decorator takes precedence.
+
+Test failure example
+--------------------
+
+If the arrays produced by the tests are correct, then the test will
+pass, but if they are not, the test will fail with a message similar to
+the following::
+
+ E AssertionError:
+ E
+ E a: /var/folders/zy/t1l3sx310d3d6p0kyxqzlrnr0000gr/T/tmpbvjkzt_q/test_to_mask_rect-mode_subpixels-subpixels_18.txt
+ E b: /var/folders/zy/t1l3sx310d3d6p0kyxqzlrnr0000gr/T/tmpbvjkzt_q/reference-test_to_mask_rect-mode_subpixels-subpixels_18.txt
+ E
+ E Not equal to tolerance rtol=1e-07, atol=0
+ E
+ E (mismatch 47.22222222222222%)
+ E x: array([[ 0. , 0. , 0. , 0. , 0.404012, 0.55 ,
+ E 0.023765, 0. , 0. ],
+ E [ 0. , 0. , 0. , 0.112037, 1.028704, 1.1 ,...
+ E y: array([[ 0. , 0. , 0. , 0. , 0.367284, 0.5 ,
+ E 0.021605, 0. , 0. ],
+ E [ 0. , 0. , 0. , 0.101852, 0.935185, 1. ,...
+
+The file paths included in the exception are then available for
+inspection.
+
+Running the tests for pytest-arraydiff
+--------------------------------------
+
+If you are contributing some changes and want to run the tests, first
+install the latest version of the plugin then do::
+
+ cd tests
+ py.test --arraydiff
+
+The reason for having to install the plugin first is to ensure that the
+plugin is correctly loaded as part of the test suite.
+
+
diff --git a/pytest_arraydiff.egg-info/SOURCES.txt b/pytest_arraydiff.egg-info/SOURCES.txt
index 26c124a..20b25e4 100644
--- a/pytest_arraydiff.egg-info/SOURCES.txt
+++ b/pytest_arraydiff.egg-info/SOURCES.txt
@@ -1,10 +1,17 @@
+.gitignore
CHANGES.md
LICENSE
MANIFEST.in
README.rst
+pyproject.toml
+setup.cfg
setup.py
+tox.ini
+.github/workflows/ci_workflows.yml
+.github/workflows/publish.yml
pytest_arraydiff/__init__.py
pytest_arraydiff/plugin.py
+pytest_arraydiff/version.py
pytest_arraydiff.egg-info/PKG-INFO
pytest_arraydiff.egg-info/SOURCES.txt
pytest_arraydiff.egg-info/dependency_links.txt
diff --git a/pytest_arraydiff.egg-info/requires.txt b/pytest_arraydiff.egg-info/requires.txt
index 28ffe72..43c6acf 100644
--- a/pytest_arraydiff.egg-info/requires.txt
+++ b/pytest_arraydiff.egg-info/requires.txt
@@ -1,3 +1,3 @@
+pytest>=4.6
numpy
-six
-pytest
+astropy
diff --git a/pytest_arraydiff/__init__.py b/pytest_arraydiff/__init__.py
index cce384d..b507b35 100755
--- a/pytest_arraydiff/__init__.py
+++ b/pytest_arraydiff/__init__.py
@@ -1 +1,3 @@
-__version__ = '0.3'
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+
+from .version import version as __version__ # noqa
diff --git a/pytest_arraydiff/plugin.py b/pytest_arraydiff/plugin.py
index cd63b69..9d10bad 100755
--- a/pytest_arraydiff/plugin.py
+++ b/pytest_arraydiff/plugin.py
@@ -36,27 +36,17 @@ import abc
import shutil
import tempfile
import warnings
-from distutils.version import StrictVersion
-
-import six
-from six.moves.urllib.request import urlopen
+from urllib.request import urlopen
import pytest
import numpy as np
-if six.PY2:
- def abstractstaticmethod(func):
- return func
- def abstractclassmethod(func):
- return func
-else:
- abstractstaticmethod = abc.abstractstaticmethod
- abstractclassmethod = abc.abstractclassmethod
+abstractstaticmethod = abc.abstractstaticmethod
+abstractclassmethod = abc.abstractclassmethod
-@six.add_metaclass(abc.ABCMeta)
-class BaseDiff(object):
+class BaseDiff(object, metaclass=abc.ABCMeta):
@abstractstaticmethod
def read(filename):
@@ -143,14 +133,7 @@ class TextDiff(SimpleArrayDiff):
@staticmethod
def write(filename, data, **kwargs):
fmt = kwargs.get('fmt', '%g')
- # Workaround for a known issue in `numpy.savetxt` for the `fmt` argument:
- # https://github.com/numpy/numpy/pull/4053#issuecomment-263808221
- # Convert `unicode` to `str` (i.e. bytes) on Python 2
- if six.PY2 and isinstance(fmt, six.text_type):
- fmt = fmt.encode('ascii')
-
kwargs['fmt'] = fmt
-
return np.savetxt(filename, data, **kwargs)
@@ -213,10 +196,7 @@ class ArrayComparison(object):
def pytest_runtest_setup(self, item):
- if StrictVersion(pytest.__version__) < StrictVersion("3.6"):
- compare = item.get_marker('array_compare')
- else:
- compare = item.get_closest_marker('array_compare')
+ compare = item.get_closest_marker('array_compare')
if compare is None:
return
@@ -295,7 +275,7 @@ class ArrayComparison(object):
This is expected for new tests.""".format(
test=test_array))
- # distutils may put the baseline arrays in non-accessible places,
+ # setuptools may put the baseline arrays in non-accessible places,
# copy to our tmpdir to be sure to keep them in case of failure
baseline_file = os.path.abspath(os.path.join(result_dir, 'reference-' + filename))
shutil.copyfile(baseline_file_ref, baseline_file)
diff --git a/pytest_arraydiff/version.py b/pytest_arraydiff/version.py
new file mode 100644
index 0000000..d2d477f
--- /dev/null
+++ b/pytest_arraydiff/version.py
@@ -0,0 +1,5 @@
+# coding: utf-8
+# file generated by setuptools_scm
+# don't change, don't track in version control
+version = '0.4.0'
+version_tuple = (0, 4, 0)
diff --git a/setup.cfg b/setup.cfg
index 8bfd5a1..fd87af3 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -1,3 +1,53 @@
+[metadata]
+name = pytest-arraydiff
+url = https://github.com/astropy/pytest-arraydiff
+author = The Astropy Developers
+author_email = astropy.team@gmail.com
+classifiers =
+ Development Status :: 4 - Beta
+ Framework :: Pytest
+ Intended Audience :: Developers
+ License :: OSI Approved :: BSD License
+ Operating System :: OS Independent
+ Programming Language :: Python
+ Programming Language :: Python :: 3
+ Programming Language :: Python :: 3 :: Only
+ Programming Language :: Python :: 3.6
+ Programming Language :: Python :: 3.7
+ Programming Language :: Python :: 3.8
+ Programming Language :: Python :: Implementation :: CPython
+ Topic :: Software Development :: Testing
+ Topic :: Utilities
+license = BSD
+description = pytest plugin to help with comparing array output from tests
+long_description = file: README.rst
+long_description_content_type = text/x-rst
+
+[options]
+zip_safe = False
+packages = find:
+python_requires = >=3.7
+setup_requires =
+ setuptools_scm
+install_requires =
+ pytest>=4.6
+ numpy
+ astropy
+
+[options.entry_points]
+pytest11 =
+ pytest_arraydiff = pytest_arraydiff.plugin
+
+[tool:pytest]
+minversion = 4.6
+testpaths = tests
+xfail_strict = true
+markers =
+ array_compare : for functions using array comparison
+
+[flake8]
+max-line-length = 150
+
[egg_info]
tag_build =
tag_date = 0
diff --git a/setup.py b/setup.py
index ee5d136..3d752e0 100755
--- a/setup.py
+++ b/setup.py
@@ -1,37 +1,6 @@
-from setuptools import setup
-
-from pytest_arraydiff import __version__
+#!/usr/bin/env python
-# IMPORTANT: we deliberately use rst here instead of markdown because long_description
-# needs to be in rst, and requiring pandoc to be installed to convert markdown to rst
-# on-the-fly is over-complicated and sometimes the generated rst has warnings that
-# cause PyPI to not display it correctly.
-
-with open('README.rst') as infile:
- long_description = infile.read()
+import os
+from setuptools import setup
-setup(
- version=__version__,
- url="https://github.com/astrofrog/pytest-arraydiff",
- name="pytest-arraydiff",
- description='pytest plugin to help with comparing array output from tests',
- long_description=long_description,
- packages=['pytest_arraydiff'],
- install_requires=['numpy', 'six', 'pytest'],
- license='BSD',
- author='Thomas Robitaille',
- author_email='thomas.robitaille@gmail.com',
- entry_points={'pytest11': ['pytest_arraydiff = pytest_arraydiff.plugin']},
- zip_safe=False,
- classifiers=[
- 'Development Status :: 4 - Beta',
- 'Framework :: Pytest',
- 'Intended Audience :: Developers',
- 'Topic :: Software Development :: Testing',
- 'Programming Language :: Python',
- 'Programming Language :: Python :: 2',
- 'Programming Language :: Python :: 3',
- 'Operating System :: OS Independent',
- 'License :: OSI Approved :: BSD License',
- ],
-)
+setup(use_scm_version={'write_to': os.path.join('pytest_arraydiff', 'version.py')})
diff --git a/tests/test_pytest_arraydiff.py b/tests/test_pytest_arraydiff.py
index dfbd677..9749b27 100644
--- a/tests/test_pytest_arraydiff.py
+++ b/tests/test_pytest_arraydiff.py
@@ -1,13 +1,10 @@
import os
-import sys
import subprocess
import tempfile
import pytest
import numpy as np
-PY2 = sys.version_info[0] == 2
-
reference_dir = 'baseline'
@@ -58,11 +55,11 @@ def test_fails():
f.write(TEST_FAILING)
# If we use --arraydiff, it should detect that the file is missing
- code = subprocess.call('py.test --arraydiff {0}'.format(test_file), shell=True)
+ code = subprocess.call('pytest --arraydiff {0}'.format(test_file), shell=True)
assert code != 0
# If we don't use --arraydiff option, the test should succeed
- code = subprocess.call('py.test {0}'.format(test_file), shell=True)
+ code = subprocess.call('pytest {0}'.format(test_file), shell=True)
assert code == 0
@@ -89,19 +86,13 @@ def test_generate(file_format):
# If we don't generate, the test will fail
try:
- if PY2:
- subprocess.check_output(['pytest', '--arraydiff', test_file])
- else:
- subprocess.check_output(['pytest', '--arraydiff', test_file], timeout=10)
+ subprocess.check_output(['pytest', '--arraydiff', test_file], timeout=10)
except subprocess.CalledProcessError as grepexc:
assert b'File not found for comparison test' in grepexc.output
# If we do generate, the test should succeed and a new file will appear
- if PY2:
- code = subprocess.call(['pytest', '--arraydiff-generate-path={0}'.format(gen_dir), test_file])
- else:
- code = subprocess.call(['pytest', '--arraydiff-generate-path={0}'.format(gen_dir), test_file],
- timeout=10)
+ code = subprocess.call(['pytest', '--arraydiff-generate-path={0}'.format(gen_dir), test_file],
+ timeout=10)
assert code == 0
assert os.path.exists(os.path.join(gen_dir, 'test_gen.' + ('fits' if file_format == 'fits' else 'txt')))
@@ -115,6 +106,7 @@ def test_default():
return np.arange(6 * 5).reshape((6, 5))
"""
+
@pytest.mark.parametrize('file_format', ('fits', 'text'))
def test_default_format(file_format):
@@ -127,7 +119,7 @@ def test_default_format(file_format):
gen_dir = os.path.join(tmpdir, 'spam', 'egg')
# If we do generate, the test should succeed and a new file will appear
- code = subprocess.call('py.test -s --arraydiff-default-format={0}'
+ code = subprocess.call('pytest -s --arraydiff-default-format={0}'
' --arraydiff-generate-path={1} {2}'.format(file_format, gen_dir, test_file), shell=True)
assert code == 0
assert os.path.exists(os.path.join(gen_dir, 'test_default.' + ('fits' if file_format == 'fits' else 'txt')))
@@ -135,7 +127,7 @@ def test_default_format(file_format):
@pytest.mark.array_compare(reference_dir=reference_dir, rtol=0.5, file_format='fits')
def test_tolerance():
- return np.ones((3,4)) * 1.6
+ return np.ones((3, 4)) * 1.6
def test_nofile():
diff --git a/tox.ini b/tox.ini
new file mode 100644
index 0000000..f1833ab
--- /dev/null
+++ b/tox.ini
@@ -0,0 +1,32 @@
+[tox]
+envlist =
+ py{37,38,39,310}-test{,-devdeps}
+ codestyle
+requires =
+ setuptools >= 30.3.0
+ pip >= 19.3.1
+isolated_build = true
+
+[testenv]
+changedir = .tmp/{envname}
+description = run tests
+deps =
+ pytest46: pytest==4.6.*
+ pytest50: pytest==5.0.*
+ pytest52: pytest==5.2.*
+ pytest53: pytest==5.3.*
+ pytest60: pytest==6.0.*
+ pytest61: pytest==6.1.*
+ pytest62: pytest==6.2.*
+ pytestdev: git+https://github.com/pytest-dev/pytest#egg=pytest
+
+commands =
+ pip freeze
+ pytest {toxinidir}/tests {posargs}
+ pytest {toxinidir}/tests --arraydiff {posargs}
+
+[testenv:codestyle]
+skip_install = true
+description = check code style, e.g. with flake8
+deps = flake8
+commands = flake8 pytest_arraydiff --count