Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-param for openSUSE:Factory checked in at 2022-12-15 19:24:56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-param (Old) and /work/SRC/openSUSE:Factory/.python-param.new.1835 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-param" Thu Dec 15 19:24:56 2022 rev:22 rq:1042887 version:1.12.3 Changes: -------- --- /work/SRC/openSUSE:Factory/python-param/python-param.changes 2022-06-23 10:24:02.499725077 +0200 +++ /work/SRC/openSUSE:Factory/.python-param.new.1835/python-param.changes 2022-12-15 19:25:10.252044586 +0100 @@ -1,0 +2,9 @@ +Tue Dec 13 15:45:22 UTC 2022 - Yogalakshmi Arunachalam <yarunacha...@suse.com> + +- Update to version 1.12.3: + The 1.12.3 release adds support for Python 3.11. Many thanks to @musicinmybrain (first contribution!) and @maximlt for contributing to this release. + Enhancements: + * Preserve existing Random seed behavior in Python 3.11 (#638) + * Add support for Python 3.11 (#658) + +------------------------------------------------------------------- Old: ---- param-1.12.2.tar.gz New: ---- param-1.12.3.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-param.spec ++++++ --- /var/tmp/diff_new_pack.c6CK3x/_old 2022-12-15 19:25:10.756047453 +0100 +++ /var/tmp/diff_new_pack.c6CK3x/_new 2022-12-15 19:25:10.760047476 +0100 @@ -19,7 +19,7 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} %define modname param Name: python-param -Version: 1.12.2 +Version: 1.12.3 Release: 0 Summary: Declarative Python programming using Parameters License: BSD-3-Clause ++++++ param-1.12.2.tar.gz -> param-1.12.3.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/param-1.12.2/.github/workflows/build.yaml new/param-1.12.3/.github/workflows/build.yaml --- old/param-1.12.2/.github/workflows/build.yaml 2022-06-20 18:10:34.000000000 +0200 +++ new/param-1.12.3/.github/workflows/build.yaml 2022-12-08 18:15:12.000000000 +0100 @@ -25,10 +25,10 @@ CHANS: "-c pyviz" CONDA_UPLOAD_TOKEN: ${{ secrets.CONDA_UPLOAD_TOKEN }} steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Fetch unshallow run: git fetch --prune --tags --unshallow -f - - uses: actions/setup-python@v2 + - uses: actions/setup-python@v4 with: python-version: "3.7" - uses: conda-incubator/setup-miniconda@v2 @@ -36,7 +36,7 @@ miniconda-version: "latest" - name: Set output id: vars - run: echo ::set-output name=tag::${GITHUB_REF#refs/*/} + run: echo "tag=${GITHUB_REF#refs/*/}" >> $GITHUB_OUTPUT - name: conda setup run: | eval "$(conda shell.bash hook)" @@ -66,10 +66,10 @@ env: TOX_ENV: "py3.7" steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Fetch unshallow run: git fetch --prune --tags --unshallow -f - - uses: actions/setup-python@v2 + - uses: actions/setup-python@v4 with: python-version: "3.7" - name: env setup diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/param-1.12.2/.github/workflows/docs.yaml new/param-1.12.3/.github/workflows/docs.yaml --- old/param-1.12.2/.github/workflows/docs.yaml 2022-06-20 18:10:34.000000000 +0200 +++ new/param-1.12.3/.github/workflows/docs.yaml 2022-12-08 18:15:12.000000000 +0100 @@ -31,22 +31,22 @@ env: DESC: "Documentation build" steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Fetch unshallow run: git fetch --prune --tags --unshallow -f - - uses: actions/setup-python@v2 + - uses: actions/setup-python@v4 with: - python-version: 3.7 + python-version: '3.9' - name: Set output id: vars - run: echo ::set-output name=tag::${GITHUB_REF#refs/*/} + run: echo "tag=${GITHUB_REF#refs/*/}" >> $GITHUB_OUTPUT - name: graphviz run: sudo apt install graphviz graphviz-dev - name: env setup run: | - python -m pip install pip==21.0.0 - python -m pip install nbsite --pre - python -m pip install -e .[doc] --use-feature=fast-deps --use-deprecated=legacy-resolver + python -m pip install --upgrade pip + python -m pip install nbsite==0.8.0rc2 + python -m pip install -e .[doc] - name: build docs run: | cp examples/user_guide/*.ipynb doc/user_guide/ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/param-1.12.2/.github/workflows/test.yaml new/param-1.12.3/.github/workflows/test.yaml --- old/param-1.12.2/.github/workflows/test.yaml 2022-06-20 18:10:34.000000000 +0200 +++ new/param-1.12.3/.github/workflows/test.yaml 2022-12-08 18:15:12.000000000 +0100 @@ -18,16 +18,20 @@ fail-fast: false matrix: platform: ['ubuntu-latest', 'windows-latest', 'macos-latest'] - python-version: ['2.7', '3.6', '3.7', '3.8', '3.9', '3.10', 'pypy-3.7'] + python-version: ['3.6', '3.7', '3.8', '3.9', '3.10', '3.11', 'pypy-3.7'] + exclude: + # Started failing with `Error: The version '3.6' with architecture 'x64' was not found for Ubuntu 22.04.`` + - platform: ubuntu-latest + python-version: '3.6' timeout-minutes: 30 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: fetch-depth: "100" - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 + uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} - name: env setup @@ -49,11 +53,55 @@ - name: unit with_jsonschema run: tox -e with_jsonschema - name: unit with_gmpy - if: (contains(matrix.platform, 'ubuntu') && !startsWith(matrix.python-version, 'py')) + if: contains(matrix.platform, 'ubuntu') && !startsWith(matrix.python-version, 'py') && matrix.python-version != '3.11' run: tox -e with_gmpy - name: unit all_deps - if: (contains(matrix.platform, 'ubuntu') && !startsWith(matrix.python-version, 'py')) + if: contains(matrix.platform, 'ubuntu') && !startsWith(matrix.python-version, 'py') && matrix.python-version != '3.11' run: tox -e with_all - - uses: codecov/codecov-action@v2 + - uses: codecov/codecov-action@v3 + if: github.event_name == 'push' + test_suite27: + name: Tox on ${{ matrix.python-version }}, ${{ matrix.platform }} + runs-on: ${{ matrix.platform }} + strategy: + fail-fast: false + matrix: + platform: ['ubuntu-latest', 'windows-latest', 'macos-latest'] + python-version: ['2.7'] + timeout-minutes: 30 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + steps: + - uses: actions/checkout@v3 with: - fail_ci_if_error: true + fetch-depth: "100" + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + - name: env setup + run: | + python -m pip install --upgrade setuptools pip wheel + python -m pip install "tox<4" tox-gh-actions + - name: lint + run: tox -e flakes + - name: unit + run: tox -c tox27.ini + - name: unit with_ipython + run: tox -c tox27.ini -e with_ipython + - name: unit with_numpy + if: (!startsWith(matrix.python-version, 'py')) + run: tox -c tox27.ini -e with_numpy + - name: unit with_pandas + if: (!startsWith(matrix.python-version, 'py')) + run: tox -c tox27.ini -e with_pandas + - name: unit with_jsonschema + run: tox -c tox27.ini -e with_jsonschema + - name: unit with_gmpy + if: contains(matrix.platform, 'ubuntu') && !startsWith(matrix.python-version, 'py') + run: tox -c tox27.ini -e with_gmpy + - name: unit all_deps + if: contains(matrix.platform, 'ubuntu') && !startsWith(matrix.python-version, 'py') + run: tox -c tox27.ini -e with_all + - uses: codecov/codecov-action@v3 + if: github.event_name == 'push' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/param-1.12.2/doc/releases.md new/param-1.12.3/doc/releases.md --- old/param-1.12.2/doc/releases.md 2022-06-20 18:10:34.000000000 +0200 +++ new/param-1.12.3/doc/releases.md 2022-12-08 18:15:12.000000000 +0100 @@ -1,5 +1,16 @@ # Releases +## Version 1.12.3 + +Date: 2022-12-06 + +The `1.12.3` release adds support for Python 3.11. Many thanks to @musicinmybrain (first contribution!) and @maximlt for contributing to this release. + +Enhancements: + +* Preserve existing Random seed behavior in Python 3.11 ([#638](https://github.com/holoviz/param/pull/638)) +* Add support for Python 3.11 ([#658](https://github.com/holoviz/param/pull/658)) + ## Version 1.12.2 Date: 2022-06-14 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/param-1.12.2/numbergen/__init__.py new/param-1.12.3/numbergen/__init__.py --- old/param-1.12.2/numbergen/__init__.py 2022-06-20 18:10:34.000000000 +0200 +++ new/param-1.12.3/numbergen/__init__.py 2022-12-08 18:15:12.000000000 +0100 @@ -8,6 +8,7 @@ import struct import fractions +from ctypes import c_size_t from math import e,pi import param @@ -306,8 +307,18 @@ explicitly when you construct the RandomDistribution object. """ + # Historically, the default random state was seeded with the tuple + # (500, 500). The CPython implementation implicitly formed an unsigned + # integer seed using the hash of the tuple as in the expression below. Note + # that the resulting integer, and therefore the default initial random + # state, varies across CPython versions (as the hash algorithm has changed) + # and also between 32-bit and 64-bit interpreters. + # + # Seeding based on hashing is deprecated since Python 3.9 and removed in + # Python 3.11; we explicitly continue the historical behavior for the time + # being. random_generator = param.Parameter( - default=random.Random((500,500)), doc= + default=random.Random(c_size_t(hash((500,500))).value), doc= """ Random state used by the object. This may may be an instance of random.Random from the Python standard library or an diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/param-1.12.2/param/__init__.py new/param-1.12.3/param/__init__.py --- old/param-1.12.2/param/__init__.py 2022-06-20 18:10:34.000000000 +0200 +++ new/param-1.12.3/param/__init__.py 2022-12-08 18:15:12.000000000 +0100 @@ -43,7 +43,7 @@ # only two required files. try: from .version import Version - __version__ = str(Version(fpath=__file__, archive_commit="1046229e", reponame="param")) + __version__ = str(Version(fpath=__file__, archive_commit="897687f7", reponame="param")) except: __version__ = "0.0.0+unknown" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/param-1.12.2/param/_async.py new/param-1.12.3/param/_async.py --- old/param-1.12.2/param/_async.py 2022-06-20 18:10:34.000000000 +0200 +++ new/param-1.12.3/param/_async.py 2022-12-08 18:15:12.000000000 +0100 @@ -1,29 +1,25 @@ """ -Module that implements asyncio.coroutine function wrappers to be used +Module that implements async/def function wrappers to be used by param internal callbacks. These are defined in a separate file due to py2 incompatibility with both `async/await` and `yield from` syntax. """ -import asyncio - def generate_depends(func): - @asyncio.coroutine - def _depends(*args, **kw): - yield from func(*args, **kw) # noqa: E999 + async def _depends(*args, **kw): # noqa: E999 + await func(*args, **kw) # noqa: E999 return _depends def generate_caller(function, what='value', changed=None, callback=None, skip_event=None): - @asyncio.coroutine - def caller(*events): - if callback: callback(*events) + async def caller(*events): # noqa: E999 + if callback: + callback(*events) if not skip_event or not skip_event(*events, what=what, changed=changed): - yield from function() # noqa: E999 + await function() # noqa: E999 return caller def generate_callback(func, dependencies, kw): - @asyncio.coroutine - def cb(*events): + async def cb(*events): # noqa: E999 args = (getattr(dep.owner, dep.name) for dep in dependencies) dep_kwargs = {n: getattr(dep.owner, dep.name) for n, dep in kw.items()} - yield from func(*args, **dep_kwargs) # noqa: E999 + await func(*args, **dep_kwargs) # noqa: E999 return cb diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/param-1.12.2/param/parameterized.py new/param-1.12.3/param/parameterized.py --- old/param-1.12.2/param/parameterized.py 2022-06-20 18:10:34.000000000 +0200 +++ new/param-1.12.3/param/parameterized.py 2022-12-08 18:15:12.000000000 +0100 @@ -677,7 +677,8 @@ obj.__doc__ = docstring -PInfo = namedtuple("PInfo", "inst cls name pobj what"); _add_doc(PInfo, +PInfo = namedtuple("PInfo", "inst cls name pobj what") +_add_doc(PInfo, """ Object describing something being watched about a Parameter. @@ -692,7 +693,8 @@ `what`: What is being watched on the Parameter (either 'value' or a slot name) """) -MInfo = namedtuple("MInfo", "inst cls name method"); _add_doc(MInfo, +MInfo = namedtuple("MInfo", "inst cls name method") +_add_doc(MInfo, """ Object describing a Parameterized method being watched. @@ -705,13 +707,15 @@ `method`: bound method of the object being watched """) -DInfo = namedtuple("DInfo", "spec"); _add_doc(DInfo, +DInfo = namedtuple("DInfo", "spec") +_add_doc(DInfo, """ Object describing dynamic dependencies. `spec`: Dependency specification to resolve """) -Event = namedtuple("Event", "what name obj cls old new type"); _add_doc(Event, +Event = namedtuple("Event", "what name obj cls old new type") +_add_doc(Event, """ Object representing an event that triggers a Watcher. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/param-1.12.2/setup.py new/param-1.12.3/setup.py --- old/param-1.12.2/setup.py 2022-06-20 18:10:34.000000000 +0200 +++ new/param-1.12.3/setup.py 2022-12-08 18:15:12.000000000 +0100 @@ -25,9 +25,8 @@ ], 'doc': [ 'pygraphviz', - 'nbsite >=0.7.1', + 'nbsite ==0.8.0rc2', 'pydata-sphinx-theme <0.9.0', - 'jinja2 <3.1', # API breakage 'myst-parser', 'nbconvert', 'graphviz', @@ -36,6 +35,8 @@ 'aiohttp', 'panel', 'pandas', + # Temporar pin due to https://github.com/ipython/ipython/issues/13845 + 'ipython !=8.7.0', ] } @@ -82,6 +83,7 @@ "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", "Operating System :: OS Independent", "Intended Audience :: Science/Research", "Intended Audience :: Developers", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/param-1.12.2/tests/API1/testparamdepends.py new/param-1.12.3/tests/API1/testparamdepends.py --- old/param-1.12.2/tests/API1/testparamdepends.py 2022-06-20 18:10:34.000000000 +0200 +++ new/param-1.12.3/tests/API1/testparamdepends.py 2022-12-08 18:15:12.000000000 +0100 @@ -677,24 +677,23 @@ self.assertEqual(pinfo.name, 'a') self.assertEqual(pinfo.what, 'value') - @pytest.mark.skipif(sys.version_info.major == 2, reason='asyncio only on Python 3') - def test_async(self): - try: - param.parameterized.async_executor = async_executor - class P(param.Parameterized): - a = param.Parameter() - single_count = param.Integer() - - @param.depends('a', watch=True) - @asyncio.coroutine - def single_parameter(self): - self.single_count += 1 - - inst = P() - inst.a = 'test' - assert inst.single_count == 1 - finally: - param.parameterized.async_executor = None + # @pytest.mark.skipif(sys.version_info.major == 2, reason='asyncio only on Python 3') + # def test_async(self): + # try: + # param.parameterized.async_executor = async_executor + # class P(param.Parameterized): + # a = param.Parameter() + # single_count = param.Integer() + + # @param.depends('a', watch=True) + # async def single_parameter(self): + # self.single_count += 1 + + # inst = P() + # inst.a = 'test' + # assert inst.single_count == 1 + # finally: + # param.parameterized.async_executor = None class TestParamDependsFunction(API1TestCase): @@ -767,24 +766,23 @@ p.b = 3 self.assertEqual(d, [4, 5]) - @pytest.mark.skipif(sys.version_info.major == 2, reason='asyncio only on Python 3') - def test_async(self): - try: - param.parameterized.async_executor = async_executor - p = self.P(a=1) - - d = [] - - @param.depends(p.param.a, watch=True) - @asyncio.coroutine - def function(value): - d.append(value) - - p.a = 2 - - assert d == [2] - finally: - param.parameterized.async_executor = None + # @pytest.mark.skipif(sys.version_info.major == 2, reason='asyncio only on Python 3') + # def test_async(self): + # try: + # param.parameterized.async_executor = async_executor + # p = self.P(a=1) + + # d = [] + + # @param.depends(p.param.a, watch=True) + # async def function(value): + # d.append(value) + + # p.a = 2 + + # assert d == [2] + # finally: + # param.parameterized.async_executor = None def test_misspelled_parameter_in_depends(): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/param-1.12.2/tests/API1/testparamdepends_py3.py new/param-1.12.3/tests/API1/testparamdepends_py3.py --- old/param-1.12.2/tests/API1/testparamdepends_py3.py 1970-01-01 01:00:00.000000000 +0100 +++ new/param-1.12.3/tests/API1/testparamdepends_py3.py 2022-12-08 18:15:12.000000000 +0100 @@ -0,0 +1,119 @@ +""" +Unit test for param.depends. +""" +import sys + +import param +import pytest + +from . import API1TestCase + +try: + import asyncio +except ImportError: + asyncio = None + + +def async_executor(func): + # Could be entirely replaced by asyncio.run(func()) in Python >=3.7 + try: + loop = asyncio.get_event_loop() + except RuntimeError: + loop = asyncio.new_event_loop() + asyncio.set_event_loop(loop) + loop.run_until_complete(func()) + + +class TestParamDepends(API1TestCase): + + def setUp(self): + + class P(param.Parameterized): + a = param.Parameter() + b = param.Parameter() + + single_count = param.Integer() + attr_count = param.Integer() + single_nested_count = param.Integer() + double_nested_count = param.Integer() + nested_attr_count = param.Integer() + nested_count = param.Integer() + + @param.depends('a', watch=True) + def single_parameter(self): + self.single_count += 1 + + @param.depends('a:constant', watch=True) + def constant(self): + self.attr_count += 1 + + @param.depends('b.a', watch=True) + def single_nested(self): + self.single_nested_count += 1 + + @param.depends('b.b.a', watch=True) + def double_nested(self): + self.double_nested_count += 1 + + @param.depends('b.a:constant', watch=True) + def nested_attribute(self): + self.nested_attr_count += 1 + + @param.depends('b.param', watch=True) + def nested(self): + self.nested_count += 1 + + class P2(param.Parameterized): + + @param.depends(P.param.a) + def external_param(self, a): + pass + + self.P = P + self.P2 = P2 + + def test_async(self): + try: + param.parameterized.async_executor = async_executor + class P(param.Parameterized): + a = param.Parameter() + single_count = param.Integer() + + @param.depends('a', watch=True) + async def single_parameter(self): + self.single_count += 1 + + inst = P() + inst.a = 'test' + assert inst.single_count == 1 + finally: + param.parameterized.async_executor = None + + +class TestParamDependsFunction(API1TestCase): + + def setUp(self): + class P(param.Parameterized): + a = param.Parameter() + b = param.Parameter() + + + self.P = P + + @pytest.mark.skipif(sys.version_info.major == 2, reason='asyncio only on Python 3') + def test_async(self): + try: + param.parameterized.async_executor = async_executor + p = self.P(a=1) + + d = [] + + @param.depends(p.param.a, watch=True) + async def function(value): + d.append(value) + + p.a = 2 + + assert d == [2] + finally: + param.parameterized.async_executor = None diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/param-1.12.2/tox.ini new/param-1.12.3/tox.ini --- old/param-1.12.2/tox.ini 2022-06-20 18:10:34.000000000 +0200 +++ new/param-1.12.3/tox.ini 2022-12-08 18:15:12.000000000 +0100 @@ -1,21 +1,22 @@ [tox] envlist = - py27,p36,py37,py38,py39,py310,pypy3 + py36,py37,py38,py39,py310,py311,pypy3 [gh-actions] python = - 2.7: py27 3.6: py36 3.7: py37 3.8: py38 3.9: py39 3.10: py310 + 3.11: py311 pypy-3.7: pypy3 [testenv] description = run test suite under {basepython} deps = .[tests] -commands = pytest tests --cov=numbergen --cov=param --cov-append --cov-report xml +commands = + pytest tests --cov=numbergen --cov=param --cov-append --cov-report xml [testenv:with_numpy] description = run test suite with numpy under {basepython} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/param-1.12.2/tox27.ini new/param-1.12.3/tox27.ini --- old/param-1.12.2/tox27.ini 1970-01-01 01:00:00.000000000 +0100 +++ new/param-1.12.3/tox27.ini 2022-12-08 18:15:12.000000000 +0100 @@ -0,0 +1,61 @@ +[tox] +envlist = + py27 + +[gh-actions] +python = + 2.7: py27 + +[testenv] +description = run test suite under {basepython} +deps = .[tests] +commands = + pytest tests --ignore tests/API1/testparamdepends_py3.py --cov=numbergen --cov=param --cov-append --cov-report xml + +[testenv:with_numpy] +description = run test suite with numpy under {basepython} +deps = {[testenv]deps} + numpy +setenv = PARAM_TEST_NUMPY = 1 + +[testenv:with_pandas] +description = run test suite with pandas under {basepython} +deps = {[testenv]deps} + pandas +setenv = PARAM_TEST_PANDAS = 1 + +[testenv:with_ipython] +description = run test suite with ipython under {basepython} +deps = {[testenv]deps} + ipython +setenv = PARAM_TEST_IPYTHON = 1 + +[testenv:with_jsonschema] +description = run test suite with jsonschema under {basepython} +deps = {[testenv]deps} + jsonschema +setenv = PARAM_TEST_JSONSCHEMA = 1 + +[testenv:with_gmpy] +description = run test suite with gmpy under {basepython} +deps = {[testenv]deps} + gmpy +setenv = PARAM_TEST_GMPY = 1 + +[testenv:with_all] +deps = {[testenv:with_numpy]deps} + {[testenv:with_pandas]deps} + {[testenv:with_ipython]deps} + {[testenv:with_jsonschema]deps} + {[testenv:with_gmpy]deps} +setenv = {[testenv:with_numpy]setenv} + {[testenv:with_pandas]setenv} + {[testenv:with_ipython]setenv} + {[testenv:with_jsonschema]setenv} + {[testenv:with_gmpy]setenv} + +[testenv:flakes] +description = run flake8 under {basepython} +deps = flake8 +skip_install = true +commands = flake8