Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-colorcet for openSUSE:Factory 
checked in at 2022-10-11 18:02:03
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-colorcet (Old)
 and      /work/SRC/openSUSE:Factory/.python-colorcet.new.2275 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-colorcet"

Tue Oct 11 18:02:03 2022 rev:7 rq:1008588 version:3.0.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-colorcet/python-colorcet.changes  
2022-09-20 19:24:01.734550664 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-colorcet.new.2275/python-colorcet.changes    
    2022-10-11 18:04:42.486003166 +0200
@@ -1,0 +2,12 @@
+Mon Oct  3 16:33:34 UTC 2022 - Arun Persaud <a...@gmx.de>
+
+- update to version 3.0.1:
+  * Update to work with matplotlib=3.6 (#90)
+  * Fix holoviews opts deprecation warning (#94)
+  * Add support for Python 3.10 (#81)
+  * Remove windows 3.6 case from test suite due to lack of mamba
+    support (#94)
+  * Remove Param dependency (#84)
+  * Improve installation instructions (#92)
+
+-------------------------------------------------------------------

Old:
----
  colorcet-3.0.0.tar.gz

New:
----
  colorcet-3.0.1.tar.gz

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

Other differences:
------------------
++++++ python-colorcet.spec ++++++
--- /var/tmp/diff_new_pack.wUP8GN/_old  2022-10-11 18:04:42.950003916 +0200
+++ /var/tmp/diff_new_pack.wUP8GN/_new  2022-10-11 18:04:42.954003923 +0200
@@ -18,7 +18,7 @@
 
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 Name:           python-colorcet
-Version:        3.0.0
+Version:        3.0.1
 Release:        0
 Summary:        Collection of perceptually uniform colormaps
 License:        CC-BY-4.0

++++++ colorcet-3.0.0.tar.gz -> colorcet-3.0.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/colorcet-3.0.0/PKG-INFO new/colorcet-3.0.1/PKG-INFO
--- old/colorcet-3.0.0/PKG-INFO 2021-11-27 04:29:04.000000000 +0100
+++ new/colorcet-3.0.1/PKG-INFO 2022-10-03 17:30:01.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: colorcet
-Version: 3.0.0
+Version: 3.0.1
 Summary: Collection of perceptually uniform colormaps
 Home-page: https://colorcet.holoviz.org
 Author: James A. Bednar
@@ -11,7 +11,6 @@
 Project-URL: Bug Tracker, http://github.com/holoviz/colorcet/issues
 Project-URL: Documentation, https://colorcet.holoviz.org
 Project-URL: Source Code, http://github.com/holoviz/colorcet
-Platform: UNKNOWN
 Classifier: License :: OSI Approved
 Classifier: Operating System :: OS Independent
 Classifier: Programming Language :: Python
@@ -20,6 +19,7 @@
 Classifier: Programming Language :: Python :: 3.7
 Classifier: Programming Language :: Python :: 3.8
 Classifier: Programming Language :: Python :: 3.9
+Classifier: Programming Language :: Python :: 3.10
 Classifier: Development Status :: 5 - Production/Stable
 Requires-Python: >=2.7
 Provides-Extra: tests
@@ -31,4 +31,3 @@
 License-File: LICENSE.txt
 
 README.md
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/colorcet-3.0.0/README.md new/colorcet-3.0.1/README.md
--- old/colorcet-3.0.0/README.md        2021-11-27 04:26:40.000000000 +0100
+++ new/colorcet-3.0.1/README.md        2022-10-03 17:28:08.000000000 +0200
@@ -9,7 +9,8 @@
 | Build Status | [![Linux/MacOS Build 
Status](https://github.com/holoviz/colorcet/workflows/tests/badge.svg?query=branch%3Amaster)](https://github.com/holoviz/colorcet/actions/workflows/tests.yaml?query=branch%3Amaster)
 |
 | Coverage | 
[![codecov](https://codecov.io/gh/holoviz/colorcet/branch/master/graph/badge.svg)](https://codecov.io/gh/holoviz/colorcet)
 ||
 | Latest dev release | [![Github 
tag](https://img.shields.io/github/tag/holoviz/colorcet.svg?label=tag&colorB=11ccbb)](https://github.com/holoviz/colorcet/tags)
 
[![dev-site](https://img.shields.io/website-up-down-green-red/https/pyviz-dev.github.io/colorcet.svg?label=dev%20website)](https://pyviz-dev.github.io/colorcet/)
 |
-| Latest release | [![Github 
release](https://img.shields.io/github/release/holoviz/colorcet.svg?label=tag&colorB=11ccbb)](https://github.com/holoviz/colorcet/releases)
 [![PyPI 
version](https://img.shields.io/pypi/v/colorcet.svg?colorB=cc77dd)](https://pypi.python.org/pypi/colorcet)
 [![colorcet 
version](https://img.shields.io/conda/v/pyviz/colorcet.svg?colorB=4488ff&style=flat)](https://anaconda.org/pyviz/colorcet)
 [![conda-forge 
version](https://img.shields.io/conda/v/conda-forge/colorcet.svg?label=conda%7Cconda-forge&colorB=4488ff)](https://anaconda.org/conda-forge/colorcet)
 [![defaults 
version](https://img.shields.io/conda/v/anaconda/colorcet.svg?label=conda%7Cdefaults&style=flat&colorB=4488ff)](https://anaconda.org/anaconda/colorcet)
 |
+| Latest release | [![Github 
release](https://img.shields.io/github/release/holoviz/colorcet.svg?label=tag&colorB=11ccbb)](https://github.com/holoviz/colorcet/releases)
 [![PyPI 
version](https://img.shields.io/pypi/v/colorcet.svg?colorB=cc77dd)](https://pypi.python.org/pypi/colorcet)
 [![colorcet 
version](https://img.shields.io/conda/v/holoviz/colorcet.svg?colorB=4488ff&style=flat)](https://anaconda.org/holoviz/colorcet)
 [![conda-forge 
version](https://img.shields.io/conda/v/conda-forge/colorcet.svg?label=conda%7Cconda-forge&colorB=4488ff)](https://anaconda.org/conda-forge/colorcet)
 [![defaults 
version](https://img.shields.io/conda/v/anaconda/colorcet.svg?label=conda%7Cdefaults&style=flat&colorB=4488ff)](https://anaconda.org/anaconda/colorcet)
 |
+| Python | [![Python 
support](https://img.shields.io/pypi/pyversions/colorcet.svg)](https://pypi.org/project/colorcet/)
 |
 | Docs | 
[![gh-pages](https://img.shields.io/github/last-commit/holoviz/colorcet/gh-pages.svg)](https://github.com/holoviz/colorcet/tree/gh-pages)
 
[![site](https://img.shields.io/website-up-down-green-red/http/colorcet.holoviz.org.svg)](http://colorcet.holoviz.org)
 |
 
 
@@ -27,22 +28,22 @@
 
 ## Installation
 
-Colorcet supports Python 2.7, 3.5, 3.6, 3.7, 3.8 and 3.9 on Linux, Windows, or 
Mac
+Colorcet supports Python 2.7, 3.6, 3.7, 3.8, 3.9 and 3.10  on Linux, Windows, 
or Mac
 and can be installed with conda:
 
-```
-    conda install colorcet
+```sh
+conda install colorcet
 ```
 
 or with pip:
 
-```
-    pip install colorcet
+```sh
+python -m pip install colorcet
 ```
 
 Once installed you can copy the examples into the current directory using the 
colorcet command and run them using the Jupyter notebook:
 
-```
+```sh
 colorcet examples
 cd colorcet-examples
 jupyter notebook
@@ -52,18 +53,22 @@
 
 To work with JupyterLab you will also need the PyViz JupyterLab extension:
 
-```
+```sh
 conda install -c conda-forge jupyterlab
 jupyter labextension install @pyviz/jupyterlab_pyviz
 ```
 
 Once you have installed JupyterLab and the extension launch it with:
 
-```
+```sh
 jupyter-lab
 ```
 
-If you want to try out the latest features between releases, you can get the 
latest dev release by installing `conda install -c pyviz/label/dev colorcet`.
+If you want to try out the latest features between releases, you can get the 
latest dev release by installing:
+
+```sh
+conda install -c pyviz/label/dev colorcet
+```
 
 For more information take a look at [Getting 
Started](http://colorcet.holoviz.org/getting_started).
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/colorcet-3.0.0/colorcet/.version 
new/colorcet-3.0.1/colorcet/.version
--- old/colorcet-3.0.0/colorcet/.version        2021-11-27 04:29:04.000000000 
+0100
+++ new/colorcet-3.0.1/colorcet/.version        2022-10-03 17:30:01.000000000 
+0200
@@ -1 +1 @@
-{"git_describe": "v3.0.0-0-g405e28f", "version_string": "3.0.0"}
\ No newline at end of file
+{"git_describe": "v3.0.1-0-g809e291", "version_string": "3.0.1"}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/colorcet-3.0.0/colorcet/__init__.py 
new/colorcet-3.0.1/colorcet/__init__.py
--- old/colorcet-3.0.0/colorcet/__init__.py     2021-11-27 04:26:40.000000000 
+0100
+++ new/colorcet-3.0.1/colorcet/__init__.py     2022-10-03 17:28:08.000000000 
+0200
@@ -40,8 +40,8 @@
 Some of the Glasbey sets are aliased to short names as explained in the User 
Guide.
 """
 
-import param
-__version__ = str(param.version.Version(fpath=__file__, 
archive_commit="$Format:%h$",reponame="datashader"))
+from .version import Version
+__version__ = str(Version(fpath=__file__, archive_commit="$Format:%h$", 
reponame="colorcet"))
 
 from collections import OrderedDict
 from itertools import chain
@@ -60,8 +60,13 @@
 
 try:
     from matplotlib.colors import LinearSegmentedColormap, ListedColormap
-    from matplotlib.cm import register_cmap
-except:
+    try:
+        from matplotlib import colormaps
+        register_cmap = lambda name, cmap: colormaps.register(cmap, name=name)
+    except ImportError:
+        # PendingDeprecationWarning from matplotlib 3.6
+        from matplotlib.cm import register_cmap
+except ImportError:
     def LinearSegmentedColormap(colorlist,name): pass
     def ListedColormap(colorlist,name): pass
     def register_cmap(name,cmap): pass
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/colorcet-3.0.0/colorcet/examples/index.ipynb 
new/colorcet-3.0.1/colorcet/examples/index.ipynb
--- old/colorcet-3.0.0/colorcet/examples/index.ipynb    2021-11-27 
04:26:40.000000000 +0100
+++ new/colorcet-3.0.1/colorcet/examples/index.ipynb    2022-10-03 
17:28:08.000000000 +0200
@@ -6,12 +6,12 @@
    "source": [
     "## Collection of perceptually accurate colormaps\n",
     "\n",
-    "[Colorcet](https://github.com/pyviz/colorcet) is a collection of \n",
-    "perceptually acccurate 256-color colormaps for use with Python plotting 
programs like\n",
-    "[Bokeh](http://bokeh.pydata.org),\n",
-    "[Matplotlib](http://matplotlib.org),\n",
-    "[HoloViews](http://holoviews.org), and\n",
-    "[Datashader](https://github.com/pyviz/datashader). \n",
+    "[Colorcet](https://github.com/holoviz/colorcet) is a collection of \n",
+    "perceptually accurate 256-color colormaps for use with Python plotting 
programs like\n",
+    "[Bokeh](https://docs.bokeh.org),\n",
+    "[Matplotlib](https://matplotlib.org),\n",
+    "[HoloViews](https://holoviews.org), and\n",
+    "[Datashader](https://datashader.org). \n",
     "\n",
     "There are two types of colormaps currently included: 
[continuous](./user_guide/Continuous.ipynb) and 
[categorical](./user_guide/Categorical.ipynb). The continuous colormaps are 
perceptually uniform, with each new color equally perceptually distinct from 
the previous and following colors. The continuous maps were constructed by 
[Peter Kovesi](http://peterkovesi.com/projects/colourmaps) at the Center for 
Exploration Targeting using the methods described in [Kovesi 
(2015)](https://arxiv.org/abs/1509.03700).\n",
     "\n",
@@ -85,8 +85,8 @@
     "For instance, mpl's colormaps are always perceptually uniform in their\n",
     "monochrome representation, not just their original color\n",
     "representation, and are safe for colorblind viewers, neither of which\n",
-    "are necessarily true of these colormaps.  On the other hand, colormaps\n",
-    "like \"fire\" above, i.e., a usable perceptually equivalent of\n",
+    "is necessarily true of these colormaps.  On the other hand, colormaps\n",
+    "like \"fire\" above, i.e., a usable perceptually equivalent version of\n",
     "matplotlib/matlab's \"hot\", are not obtainable using viscm in any\n",
     "straightforward way, limiting the range of useful colormaps that can be 
created.\n",
     "In any case, this package focuses on making a set of useful colormaps\n",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/colorcet-3.0.0/colorcet/examples/user_guide/Categorical.ipynb 
new/colorcet-3.0.1/colorcet/examples/user_guide/Categorical.ipynb
--- old/colorcet-3.0.0/colorcet/examples/user_guide/Categorical.ipynb   
2021-11-27 04:26:40.000000000 +0100
+++ new/colorcet-3.0.1/colorcet/examples/user_guide/Categorical.ipynb   
2022-10-03 17:28:08.000000000 +0200
@@ -51,7 +51,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "If you need *n&nbsp;*colors that are distinct from each other and you 
have no other criteria to apply, just take the first *n&nbsp;*colors from this 
palette. Note that these colors won't necessarily be the _most_ distinct that 
are possible in a set of that size, because they are chosen iteratively (each 
compared to those that come before it) using a greedy algorithm rather than 
being globally optimized for that specific size. The Glasbey algorithm can also 
be used to create such fully optimal sets, but it would not be practical to 
distribute all those sets and the color assignments would then vary each time a 
new data point was added, so this single set represents a good compromise.\n",
+    "If you need *n* colors that are distinct from each other and you have no 
other criteria to apply, just take the first *n* colors from this palette. Note 
that these colors won't necessarily be the _most_ distinct that are possible in 
a set of that size, because they are chosen iteratively (each compared to those 
that come before it) using a greedy algorithm rather than being globally 
optimized for that specific size. The Glasbey algorithm can also be used to 
create such fully optimal sets, but it would not be practical to distribute all 
those sets and the color assignments would then vary each time a new data point 
was added, so this single set represents a good compromise.\n",
     "\n",
     "### Light/Dark\n",
     "What if you have additional constraints to consider?  For instance, if 
you are making a scatter or line plot on a white or black background, some of 
the colors above will show up vividly in contrast, and others will fade into 
the background because they are very dark or very light:"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/colorcet-3.0.0/colorcet/examples/user_guide/Continuous.ipynb 
new/colorcet-3.0.1/colorcet/examples/user_guide/Continuous.ipynb
--- old/colorcet-3.0.0/colorcet/examples/user_guide/Continuous.ipynb    
2021-11-27 04:26:40.000000000 +0100
+++ new/colorcet-3.0.1/colorcet/examples/user_guide/Continuous.ipynb    
2022-10-03 17:28:08.000000000 +0200
@@ -6,10 +6,10 @@
    "source": [
     "## Perceptually uniform continuous colormaps from CET\n",
     "\n",
-    "Peter Kovesi at the Center for Exploration Targeting created a very 
useful set of [perceptually uniform continuous 
colormaps](https://arxiv.org/abs/1509.03700), many of which can replace the 
highly non-uniform colormaps provided with Python plotting programs.  Here we 
will show how to use them via a Python package named 
[colorcet](https://github.com/pyviz/colorcet), listing all the ones available 
and allowing you to evaluate how perceptually uniform they are for you, your 
particular monitor, etc. Download and installation instructions are at the 
[github site](https://github.com/pyviz/colorcet).\n",
+    "Peter Kovesi at the Center for Exploration Targeting created a very 
useful set of [perceptually uniform continuous 
colormaps](https://arxiv.org/abs/1509.03700), many of which can replace the 
highly non-uniform colormaps provided with Python plotting programs.  Here we 
will show how to use them via a Python package named 
[colorcet](https://github.com/holoviz/colorcet), listing all the ones available 
and allowing you to evaluate how perceptually uniform they are for you, your 
particular monitor, etc. Download and installation instructions are at the 
[github site](https://github.com/holoviz/colorcet).\n",
     "\n",
-    "We will plot them using [Matplotlib](http://matplotlib.org) via 
[Holoviews](http://holoviews.org), but identical 
[Bokeh](http://bokeh.pydata.org) palettes are also provided, and both Bokeh 
palettes and Matplotlib colormaps are usable in 
[Datashader](https://github.com/pyviz/datashader).  Thus these colormaps can be 
used in any of those Python packages, as well as any other package that accepts 
a Python list of normalized RGB tuples or hex colors.  See \n",
-    "[Peter's site](http://peterkovesi.com/projects/colourmaps/) to download 
versions for other non-Python packages."
+    "We will plot them using [Matplotlib](https://matplotlib.org) via 
[Holoviews](https://holoviews.org), but identical 
[Bokeh](https://docs.bokeh.org) palettes are also provided, and both Bokeh 
palettes and Matplotlib colormaps are usable in 
[Datashader](https://datashader.org).  Thus these colormaps can be used in any 
of those Python packages, as well as any other package that accepts a Python 
list of normalized RGB tuples or hex colors.  See \n",
+    "[Peter's site](https://colorcet.com/) to download versions for other 
non-Python packages."
    ]
   },
   {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/colorcet-3.0.0/colorcet/plotting.py 
new/colorcet-3.0.1/colorcet/plotting.py
--- old/colorcet-3.0.0/colorcet/plotting.py     2021-11-27 04:26:40.000000000 
+0100
+++ new/colorcet-3.0.1/colorcet/plotting.py     2022-10-03 17:28:08.000000000 
+0200
@@ -74,7 +74,7 @@
               swatch(*arg, **kwargs) for
               arg in args]
 
-    plot = 
hv.Layout(images).opts(plot=dict(transpose=True)).cols(int(np.ceil(len(images)*1.0/cols)))
+    plot = 
hv.Layout(images).opts(transpose=True).cols(int(np.ceil(len(images)*1.0/cols)))
 
     if 'matplotlib' in backends:
         plot.opts(opts.Layout(backend='matplotlib', sublabel_format=None,
@@ -106,7 +106,7 @@
               sine_comb(*arg, **kwargs) for
               arg in args]
 
-    plot = 
hv.Layout(images).opts(plot=dict(transpose=True)).cols(int(np.ceil(len(images)*1.0/cols)))
+    plot = 
hv.Layout(images).opts(transpose=True).cols(int(np.ceil(len(images)*1.0/cols)))
 
     backends = hv.Store.loaded_backends()
     if 'matplotlib' in backends:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/colorcet-3.0.0/colorcet/sineramp.py 
new/colorcet-3.0.1/colorcet/sineramp.py
--- old/colorcet-3.0.0/colorcet/sineramp.py     2021-11-27 04:26:40.000000000 
+0100
+++ new/colorcet-3.0.1/colorcet/sineramp.py     2022-10-03 17:28:08.000000000 
+0200
@@ -22,7 +22,7 @@
 Arguments:     sze - [rows cols] specifying size of test image.  If a
                      single value is supplied the image is square.
                      Defaults to [256 512];  Note the number of columns is
-                     nominal and will be ajusted so that there are an
+                     nominal and will be adjusted so that there are an
                      integer number of sine wave cycles across the image.
                amp - Amplitude of sine wave. Defaults to 12.5
            wavelen - Wavelength of sine wave in pixels. Defaults to 8.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/colorcet-3.0.0/colorcet/tests/test_matplotlib.py 
new/colorcet-3.0.1/colorcet/tests/test_matplotlib.py
--- old/colorcet-3.0.0/colorcet/tests/test_matplotlib.py        2021-11-27 
04:26:40.000000000 +0100
+++ new/colorcet-3.0.1/colorcet/tests/test_matplotlib.py        2022-10-03 
17:28:08.000000000 +0200
@@ -1,3 +1,5 @@
+import sys
+
 import pytest
 import colorcet as cc
 
@@ -44,5 +46,9 @@
 
 @pytest.mark.parametrize('k,v', list(cc.cm.items()))
 def test_get_cm(k, v):
-    import matplotlib.cm as mcm
-    assert mcm.get_cmap('cet_' + k) is v
+    if sys.version_info < (3, 7):
+        import matplotlib.cm as mcm
+        assert mcm.get_cmap('cet_' + k) is v
+    else:
+        from matplotlib import colormaps
+        assert colormaps['cet_' + k] == v
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/colorcet-3.0.0/colorcet/version.py 
new/colorcet-3.0.1/colorcet/version.py
--- old/colorcet-3.0.0/colorcet/version.py      1970-01-01 01:00:00.000000000 
+0100
+++ new/colorcet-3.0.1/colorcet/version.py      2022-10-03 17:28:08.000000000 
+0200
@@ -0,0 +1,771 @@
+"""
+Provide consistent and up-to-date ``__version__`` strings for
+Python packages.
+
+See https://github.com/holoviz/autover for more information.
+"""
+
+# The Version class is a copy of autover.version.Version v0.2.5,
+# except as noted below.
+#
+# The current version of autover supports a workflow based on tagging
+# a git repository, and reports PEP440 compliant version information.
+# Previously, the workflow required editing of version numbers in
+# source code, and the version was not necessarily PEP440 compliant.
+# Version.__new__ is added here to provide the previous Version class
+# (OldDeprecatedVersion) if Version is called in the old way.
+
+
+__author__ = 'Jean-Luc Stevens'
+
+import os, subprocess, json
+
+def run_cmd(args, cwd=None):
+    proc = subprocess.Popen(args, stdout=subprocess.PIPE,
+                            stderr=subprocess.PIPE,
+                            cwd=cwd)
+    output, error = (str(s.decode()).strip() for s in proc.communicate())
+
+    # Detects errors as _either_ a non-zero return code _or_ messages
+    # printed to stderr, because the return code is erroneously fixed at
+    # zero in some cases (see https://github.com/holoviz/param/pull/389).
+    if proc.returncode != 0 or len(error) > 0:
+        raise Exception(proc.returncode, error)
+    return output
+
+
+
+class Version(object):
+    """
+    A simple approach to Python package versioning that supports PyPI
+    releases and additional information when working with version
+    control. When obtaining a package from PyPI, the version returned
+    is a string-formatted rendering of the supplied release tuple.
+    For instance, release (1,0) tagged as ``v1.0`` in the version
+    control system will return ``1.0`` for ``str(__version__)``.  Any
+    number of items can be supplied in the release tuple, with either
+    two or three numeric versioning levels typical.
+
+    During development, a command like ``git describe`` will be used to
+    compute the number of commits since the last version tag, the short
+    commit hash, and whether the commit is dirty (has changes not yet
+    committed). Version tags must start with a lowercase 'v' and have a
+    period in them, e.g. v2.0, v0.9.8 or v0.1 and may include the PEP440
+    prerelease identifiers of 'a' (alpha) 'b' (beta) or 'rc' (release
+    candidate) allowing tags such as v2.0.a3, v0.9.8.b3 or v0.1.rc5.
+
+    Also note that when version control system (VCS) information is
+    used, the number of commits since the last version tag is
+    determined. This approach is often useful in practice to decide
+    which version is newer for a single developer, but will not
+    necessarily be reliable when comparing against a different fork or
+    branch in a distributed VCS.
+
+    For git, if you want version control information available even in
+    an exported archive (e.g. a .zip file from GitHub), you can set
+    the following line in the .gitattributes file of your project::
+
+      __init__.py export-subst
+
+    Note that to support pip installation directly from GitHub via git
+    archive, a .version file must be tracked by the repo to supply the
+    release number (otherwise only the short SHA is available).
+
+    The PEP440 format returned is [N!]N(.N)*[{a|b|rc}N][.postN+SHA]
+    where everything before .postN is obtained from the tag, the N in
+    .postN is the number of commits since the last tag and the SHA is
+    obtained via git describe. This later portion is only shown if the
+    commit count since the last tag is non zero. Instead of '.post', an
+    alternate valid prefix such as '.rev', '_rev', '_r' or '.r' may be
+    supplied."""
+
+    def __new__(cls,**kw):
+        # If called in the old way, provide the previous class. Means
+        # PEP440/tag based workflow warning below will never appear.
+        if ('release' in kw and kw['release'] is not None) or \
+           ('dev' in kw and kw['dev'] is not None) or \
+           ('commit_count' in kw):
+            return OldDeprecatedVersion(**kw)
+        else:
+            return super(Version, cls).__new__(cls)
+
+
+    def __init__(self, release=None, fpath=None, commit=None, reponame=None,
+                 commit_count_prefix='.post', archive_commit=None, **kwargs):
+        """
+        :release:      Release tuple (corresponding to the current VCS tag)
+        :commit        Short SHA. Set to '$Format:%h$' for git archive support.
+        :fpath:        Set to ``__file__`` to access version control 
information
+        :reponame:     Used to verify VCS repository name.
+        """
+        self.fpath = fpath
+        self._expected_commit = commit
+
+        if release is not None or 'commit_count' in kwargs:
+            print('WARNING: param.Version now supports PEP440 and a new tag 
based workflow. See param/version.py for more details')
+
+        self.expected_release = release
+
+        self._commit = None if (commit is None or 
commit.startswith("$Format")) else commit
+        self._commit_count = None
+        self._release = None
+        self._dirty = False
+        self._prerelease = None
+
+        self.archive_commit= archive_commit
+
+        self.reponame = reponame
+        self.commit_count_prefix = commit_count_prefix
+
+    @property
+    def prerelease(self):
+        """
+        Either None or one of 'aN' (alpha), 'bN' (beta) or 'rcN'
+        (release candidate) where N is an integer.
+        """
+        return self.fetch()._prerelease
+
+    @property
+    def release(self):
+        "Return the release tuple"
+        return self.fetch()._release
+
+    @property
+    def commit(self):
+        "A specification for this particular VCS version, e.g. a short git SHA"
+        return self.fetch()._commit
+
+    @property
+    def commit_count(self):
+        "Return the number of commits since the last release"
+        return self.fetch()._commit_count
+
+    @property
+    def dirty(self):
+        "True if there are uncommitted changes, False otherwise"
+        return self.fetch()._dirty
+
+
+    def fetch(self):
+        """
+        Returns a tuple of the major version together with the
+        appropriate SHA and dirty bit (for development version only).
+        """
+        if self._release is not None:
+            return self
+
+        self._release = self.expected_release
+        if not self.fpath:
+            self._commit = self._expected_commit
+            return self
+
+         # Only git right now but easily extended to SVN, Mercurial, etc.
+        for cmd in ['git', 'git.cmd', 'git.exe']:
+            try:
+                self.git_fetch(cmd)
+                break
+            except EnvironmentError:
+                pass
+        return self
+
+
+    def git_fetch(self, cmd='git', as_string=False):
+        commit_argument = self._commit
+        output = None
+        try:
+            if self.reponame is not None:
+                # Verify this is the correct repository (since fpath could
+                # be an unrelated git repository, and autover could just have
+                # been copied/installed into it).
+                remotes = run_cmd([cmd, 'remote', '-v'],
+                                  cwd=os.path.dirname(self.fpath))
+                repo_matches = ['/' + self.reponame + '.git' ,
+                                # A remote 'server:reponame.git' can also be 
referred
+                                # to (i.e. cloned) as `server:reponame`.
+                                '/' + self.reponame + ' ']
+                if not any(m in remotes for m in repo_matches):
+                    try:
+                        output = self._output_from_file()
+                        if output is not None:
+                            self._update_from_vcs(output)
+                    except: pass
+            if output is None:
+                # glob pattern (not regexp) matching vX.Y.Z* tags
+                output = run_cmd([cmd, 'describe', '--long', '--match',
+                                  "v[0-9]*.[0-9]*.[0-9]*", '--dirty'],
+                                 cwd=os.path.dirname(self.fpath))
+            if as_string: return output
+        except Exception as e1:
+            try:
+                output = self._output_from_file()
+                if output is not None:
+                    self._update_from_vcs(output)
+                if self._known_stale():
+                    self._commit_count = None
+                if as_string: return output
+
+                # If an explicit commit was supplied (e.g from git
+                # archive), it should take precedence over the file.
+                if commit_argument:
+                    self._commit = commit_argument
+                return
+
+            except IOError:
+                if e1.args[1] == 'fatal: No names found, cannot describe 
anything.':
+                    raise Exception("Cannot find any git version tags of 
format v*.*")
+                # If there is any other error, return (release value still 
useful)
+                return self
+
+        self._update_from_vcs(output)
+
+
+    def _known_stale(self):
+        """
+        The commit is known to be from a file (and therefore stale) if a
+        SHA is supplied by git archive and doesn't match the parsed commit.
+        """
+        if self._output_from_file() is None:
+            commit = None
+        else:
+            commit = self.commit
+
+        known_stale = (self.archive_commit is not None
+                       and not self.archive_commit.startswith('$Format')
+                       and self.archive_commit != commit)
+        if known_stale: self._commit_count = None
+        return known_stale
+
+    def _output_from_file(self, entry='git_describe'):
+        """
+        Read the version from a .version file that may exist alongside 
__init__.py.
+
+        This file can be generated by piping the following output to file:
+
+        git describe --long --match v*.*
+        """
+        try:
+            vfile = os.path.join(os.path.dirname(self.fpath), '.version')
+            with open(vfile, 'r') as f:
+                return json.loads(f.read()).get(entry, None)
+        except: # File may be missing if using pip + git archive
+            return None
+
+
+    def _update_from_vcs(self, output):
+        "Update state based on the VCS state e.g the output of git describe"
+        split = output[1:].split('-')
+        dot_split = split[0].split('.')
+        for prefix in ['a','b','rc']:
+            if prefix in dot_split[-1]:
+                prefix_split = dot_split[-1].split(prefix)
+                self._prerelease = prefix + prefix_split[-1]
+                dot_split[-1] = prefix_split[0]
+
+
+        self._release = tuple(int(el) for el in dot_split)
+        self._commit_count = int(split[1])
+
+        self._commit = str(split[2][1:]) # Strip out 'g' prefix ('g'=>'git')
+
+        self._dirty = (split[-1]=='dirty')
+        return self
+
+    def __str__(self):
+        """
+        Version in x.y.z string format. Does not include the "v"
+        prefix of the VCS version tags, for pip compatibility.
+
+        If the commit count is non-zero or the repository is dirty,
+        the string representation is equivalent to the output of::
+
+          git describe --long --match v*.* --dirty
+
+        (with "v" prefix removed).
+        """
+        known_stale = self._known_stale()
+        if self.release is None and not known_stale:
+            extracted_directory_tag = 
self._output_from_file(entry='extracted_directory_tag')
+            return 'None' if extracted_directory_tag is None else 
extracted_directory_tag
+        elif self.release is None and known_stale:
+            extracted_directory_tag = 
self._output_from_file(entry='extracted_directory_tag')
+            if extracted_directory_tag is not None:
+                return extracted_directory_tag
+            return '0.0.0+g{SHA}-gitarchive'.format(SHA=self.archive_commit)
+
+        release = '.'.join(str(el) for el in self.release)
+        prerelease = '' if self.prerelease is None else self.prerelease
+
+        if self.commit_count == 0 and not self.dirty:
+            return release + prerelease
+
+        commit = self.commit
+        dirty = '-dirty' if self.dirty else ''
+        archive_commit = ''
+        if known_stale:
+            archive_commit = '-gitarchive'
+            commit = self.archive_commit
+
+        if archive_commit != '':
+            postcount = self.commit_count_prefix + '0'
+        elif self.commit_count not in [0, None]:
+            postcount = self.commit_count_prefix + str(self.commit_count)
+        else:
+            postcount = ''
+
+        components = [release, prerelease, postcount,
+                      '' if commit is None else '+g' + commit, dirty,
+                      archive_commit]
+        return ''.join(components)
+
+    def __repr__(self):
+        return str(self)
+
+    def abbrev(self):
+        """
+        Abbreviated string representation of just the release number.
+        """
+        return '.'.join(str(el) for el in self.release)
+
+    def verify(self, string_version=None):
+        """
+        Check that the version information is consistent with the VCS
+        before doing a release. If supplied with a string version,
+        this is also checked against the current version. Should be
+        called from setup.py with the declared package version before
+        releasing to PyPI.
+        """
+        if string_version and string_version != str(self):
+            raise Exception("Supplied string version does not match current 
version.")
+
+        if self.dirty:
+            raise Exception("Current working directory is dirty.")
+
+        if self.expected_release is not None and self.release != 
self.expected_release:
+            raise Exception("Declared release does not match current release 
tag.")
+
+        if self.commit_count !=0:
+            raise Exception("Please update the VCS version tag before 
release.")
+
+        if (self._expected_commit is not None
+            and not self._expected_commit.startswith( "$Format")):
+            raise Exception("Declared release does not match the VCS version 
tag")
+
+
+
+    @classmethod
+    def get_setup_version(cls, setup_path, reponame, describe=False,
+                          dirty='report', pkgname=None, archive_commit=None):
+        """
+        Helper for use in setup.py to get the version from the .version file 
(if available)
+        or more up-to-date information from git describe (if available).
+
+        Assumes the __init__.py will be found in the directory
+        {reponame}/__init__.py relative to setup.py unless pkgname is
+        explicitly specified in which case that name is used instead.
+
+        If describe is True, the raw string obtained from git described is
+        returned which is useful for updating the .version file.
+
+        The dirty policy can be one of 'report', 'strip', 'raise'. If it is
+        'report' the version string may end in '-dirty' if the repository is
+        in a dirty state.  If the policy is 'strip', the '-dirty' suffix
+        will be stripped out if present. If the policy is 'raise', an
+        exception is raised if the repository is in a dirty state. This can
+        be useful if you want to make sure packages are not built from a
+        dirty repository state.
+        """
+        pkgname = reponame if pkgname is None else pkgname
+        policies = ['raise','report', 'strip']
+        if dirty not in policies:
+            raise AssertionError("get_setup_version dirty policy must be in 
%r" % policies)
+
+        fpath = os.path.join(setup_path, pkgname, "__init__.py")
+        version = Version(fpath=fpath, reponame=reponame, 
archive_commit=archive_commit)
+        if describe:
+            vstring = version.git_fetch(as_string=True)
+        else:
+            vstring = str(version)
+
+        if version.dirty and dirty == 'raise':
+            raise AssertionError('Repository is in a dirty state.')
+        elif version.dirty and dirty=='strip':
+            return vstring.replace('-dirty', '')
+        else:
+            return vstring
+
+
+    @classmethod
+    def extract_directory_tag(cls, setup_path, reponame):
+        setup_dir = os.path.split(setup_path)[-1] # Directory containing 
setup.py
+        prefix = reponame + '-' # Prefix to match
+        if setup_dir.startswith(prefix):
+            tag = setup_dir[len(prefix):]
+            # Assuming the tag is a version if it isn't empty, 'master' and 
has a dot in it
+            if tag not in ['', 'master'] and ('.' in tag):
+                return tag
+        return None
+
+
+    @classmethod
+    def setup_version(cls, setup_path, reponame, archive_commit=None,
+                      pkgname=None, dirty='report'):
+        info = {}
+        git_describe = None
+        pkgname = reponame if pkgname is None else pkgname
+        try:
+            # Will only work if in a git repo and git is available
+            git_describe  = Version.get_setup_version(setup_path,
+                                                      reponame,
+                                                      describe=True,
+                                                      dirty=dirty,
+                                                      pkgname=pkgname,
+                                                      
archive_commit=archive_commit)
+
+            if git_describe is not None:
+                info['git_describe'] = git_describe
+        except: pass
+
+        if git_describe is None:
+            extracted_directory_tag = 
Version.extract_directory_tag(setup_path, reponame)
+            if extracted_directory_tag is not None:
+                info['extracted_directory_tag'] = extracted_directory_tag
+            try:
+                with open(os.path.join(setup_path, pkgname, '.version'), 'w') 
as f:
+                    
f.write(json.dumps({'extracted_directory_tag':extracted_directory_tag}))
+            except:
+                print('Error in setup_version: could not write .version file.')
+
+
+        info['version_string'] =  Version.get_setup_version(setup_path,
+                                                            reponame,
+                                                            describe=False,
+                                                            dirty=dirty,
+                                                            pkgname=pkgname,
+                                                            
archive_commit=archive_commit)
+        try:
+            with open(os.path.join(setup_path, pkgname, '.version'), 'w') as f:
+                f.write(json.dumps(info))
+        except:
+            print('Error in setup_version: could not write .version file.')
+
+        return info['version_string']
+
+
+
+def get_setup_version(location, reponame, pkgname=None, archive_commit=None):
+    """Helper for use in setup.py to get the current version from either
+    git describe or the .version file (if available).
+
+    Set pkgname to the package name if it is different from the
+    repository name.
+
+    To ensure git information is included in a git archive, add
+    setup.py to .gitattributes (in addition to __init__):
+    ```
+    __init__.py export-subst
+    setup.py export-subst
+    ```
+    Then supply "$Format:%h$" for archive_commit.
+
+    """
+    import warnings
+    pkgname = reponame if pkgname is None else pkgname
+    if archive_commit is None:
+        warnings.warn("No archive commit available; git archives will not 
contain version information")
+    return 
Version.setup_version(os.path.dirname(os.path.abspath(location)),reponame,pkgname=pkgname,archive_commit=archive_commit)
+
+
+def get_setupcfg_version():
+    """As get_setup_version(), but configure via setup.cfg.
+
+    If your project uses setup.cfg to configure setuptools, and hence has
+    at least a "name" key in the [metadata] section, you can
+    set the version as follows:
+    ```
+    [metadata]
+    name = mypackage
+    version = attr: autover.version.get_setup_version2
+    ```
+
+    If the repository name is different from the package name, specify
+    `reponame` as a [tool:autover] option:
+    ```
+    [tool:autover]
+    reponame = mypackage
+    ```
+
+    To ensure git information is included in a git archive, add
+    setup.cfg to .gitattributes (in addition to __init__):
+    ```
+    __init__.py export-subst
+    setup.cfg export-subst
+    ```
+
+    Then add the following to setup.cfg:
+    ```
+    [tool:autover.configparser_workaround.archive_commit=$Format:%h$]
+    ```
+
+    The above being a section heading rather than just a key is
+    because setuptools requires % to be escaped with %, or it can't
+    parse setup.cfg...but then git export-subst would not work.
+
+    """
+    try:
+        import configparser
+    except ImportError:
+        import ConfigParser as configparser # python2 (also prevents dict-like 
access)
+    import re
+    cfg = "setup.cfg"
+    autover_section = 'tool:autover'
+    config = configparser.ConfigParser()
+    config.read(cfg)
+    pkgname = config.get('metadata','name')
+    reponame = 
config.get(autover_section,'reponame',vars={'reponame':pkgname}) if 
autover_section in config.sections() else pkgname
+
+    ###
+    # hack archive_commit into section heading; see docstring
+    archive_commit = None
+    archive_commit_key = 
autover_section+'.configparser_workaround.archive_commit'
+    for section in config.sections():
+        if section.startswith(archive_commit_key):
+            archive_commit = re.match(r".*=\s*(\S*)\s*",section).group(1)
+    ###
+    return 
get_setup_version(cfg,reponame=reponame,pkgname=pkgname,archive_commit=archive_commit)
+
+
+# from param/version.py aa087db29976d9b7e0f59c29789dfd721c85afd0
+class OldDeprecatedVersion(object):
+    """
+    A simple approach to Python package versioning that supports PyPI
+    releases and additional information when working with version
+    control. When obtaining a package from PyPI, the version returned
+    is a string-formatted rendering of the supplied release tuple.
+    For instance, release (1,0) tagged as ``v1.0`` in the version
+    control system will return ``1.0`` for ``str(__version__)``.  Any
+    number of items can be supplied in the release tuple, with either
+    two or three numeric versioning levels typical.
+
+    During development, a command like ``git describe`` will be used to
+    compute the number of commits since the last version tag, the
+    short commit hash, and whether the commit is dirty (has changes
+    not yet committed). Version tags must start with a lowercase 'v'
+    and have a period in them, e.g. v2.0, v0.9.8 or v0.1.
+
+    Development versions are supported by setting the dev argument to an
+    appropriate dev version number. The corresponding tag can be PEP440
+    compliant (using .devX) of the form v0.1.dev3, v1.9.0.dev2 etc but
+    it doesn't have to be as the dot may be omitted i.e v0.1dev3,
+    v1.9.0dev2 etc.
+
+    Also note that when version control system (VCS) information is
+    used, the comparison operators take into account the number of
+    commits since the last version tag. This approach is often useful
+    in practice to decide which version is newer for a single
+    developer, but will not necessarily be reliable when comparing
+    against a different fork or branch in a distributed VCS.
+
+    For git, if you want version control information available even in
+    an exported archive (e.g. a .zip file from GitHub), you can set
+    the following line in the .gitattributes file of your project::
+
+      __init__.py export-subst
+    """
+
+    def __init__(self, release=None, fpath=None, commit=None,
+                 reponame=None, dev=None, commit_count=0):
+        """
+        :release:      Release tuple (corresponding to the current VCS tag)
+        :commit        Short SHA. Set to '$Format:%h$' for git archive support.
+        :fpath:        Set to ``__file__`` to access version control 
information
+        :reponame:     Used to verify VCS repository name.
+        :dev:          Development version number. None if not a development 
version.
+        :commit_count  Commits since last release. Set for dev releases.
+        """
+        self.fpath = fpath
+        self._expected_commit = commit
+        self.expected_release = release
+
+        self._commit = None if commit in [None, "$Format:%h$"] else commit
+        self._commit_count = commit_count
+        self._release = None
+        self._dirty = False
+        self.reponame = reponame
+        self.dev = dev
+
+    @property
+    def release(self):
+        "Return the release tuple"
+        return self.fetch()._release
+
+    @property
+    def commit(self):
+        "A specification for this particular VCS version, e.g. a short git SHA"
+        return self.fetch()._commit
+
+    @property
+    def commit_count(self):
+        "Return the number of commits since the last release"
+        return self.fetch()._commit_count
+
+    @property
+    def dirty(self):
+        "True if there are uncommitted changes, False otherwise"
+        return self.fetch()._dirty
+
+
+    def fetch(self):
+        """
+        Returns a tuple of the major version together with the
+        appropriate SHA and dirty bit (for development version only).
+        """
+        if self._release is not None:
+            return self
+
+        self._release = self.expected_release
+        if not self.fpath:
+            self._commit = self._expected_commit
+            return self
+
+         # Only git right now but easily extended to SVN, Mercurial, etc.
+        for cmd in ['git', 'git.cmd', 'git.exe']:
+            try:
+                self.git_fetch(cmd)
+                break
+            except EnvironmentError:
+                pass
+        return self
+
+
+    def git_fetch(self, cmd='git'):
+        try:
+            if self.reponame is not None:
+                # Verify this is the correct repository (since fpath could
+                # be an unrelated git repository, and param could just have
+                # been copied/installed into it).
+                output = run_cmd([cmd, 'remote', '-v'],
+                                 cwd=os.path.dirname(self.fpath))
+                repo_matches = ['/' + self.reponame + '.git' ,
+                                # A remote 'server:reponame.git' can also be 
referred
+                                # to (i.e. cloned) as `server:reponame`.
+                                '/' + self.reponame + ' ']
+                if not any(m in output for m in repo_matches):
+                    return self
+
+            output = run_cmd([cmd, 'describe', '--long', '--match', 'v*.*', 
'--dirty'],
+                             cwd=os.path.dirname(self.fpath))
+        except Exception as e:
+            if e.args[1] == 'fatal: No names found, cannot describe anything.':
+                raise Exception("Cannot find any git version tags of format 
v*.*")
+            # If there is any other error, return (release value still useful)
+            return self
+
+        self._update_from_vcs(output)
+
+    def _update_from_vcs(self, output):
+        "Update state based on the VCS state e.g the output of git describe"
+        split = output[1:].split('-')
+        if 'dev' in split[0]:
+            dev_split = split[0].split('dev')
+            self.dev = int(dev_split[1])
+            split[0] = dev_split[0]
+            # Remove the pep440 dot if present
+            if split[0].endswith('.'):
+                split[0] = dev_split[0][:-1]
+
+        self._release = tuple(int(el) for el in split[0].split('.'))
+        self._commit_count = int(split[1])
+        self._commit = str(split[2][1:]) # Strip out 'g' prefix ('g'=>'git')
+        self._dirty = (split[-1]=='dirty')
+        return self
+
+
+    def __str__(self):
+        """
+        Version in x.y.z string format. Does not include the "v"
+        prefix of the VCS version tags, for pip compatibility.
+
+        If the commit count is non-zero or the repository is dirty,
+        the string representation is equivalent to the output of::
+
+          git describe --long --match v*.* --dirty
+
+        (with "v" prefix removed).
+        """
+        if self.release is None: return 'None'
+        release = '.'.join(str(el) for el in self.release)
+        release = '%s.dev%d' % (release, self.dev) if self.dev is not None 
else release
+
+        if (self._expected_commit is not None) and  ("$Format" not in 
self._expected_commit):
+            pass  # Concrete commit supplied - print full version string
+        elif (self.commit_count == 0 and not self.dirty):
+            return release
+
+        dirty_status = '-dirty' if self.dirty else ''
+        return '%s-%s-g%s%s' % (release, self.commit_count if 
self.commit_count else 'x',
+                                self.commit, dirty_status)
+
+    def __repr__(self):
+        return str(self)
+
+    def abbrev(self,dev_suffix=""):
+        """
+        Abbreviated string representation, optionally declaring whether it is
+        a development version.
+        """
+        return '.'.join(str(el) for el in self.release) + \
+            (dev_suffix if self.commit_count > 0 or self.dirty else "")
+
+
+    def __eq__(self, other):
+        """
+        Two versions are considered equivalent if and only if they are
+        from the same release, with the same commit count, and are not
+        dirty.  Any dirty version is considered different from any
+        other version, since it could potentially have any arbitrary
+        changes even for the same release and commit count.
+        """
+        if self.dirty or other.dirty: return False
+        return ((self.release, self.commit_count, self.dev)
+                == (other.release, other.commit_count, other.dev))
+
+    def __gt__(self, other):
+        if self.release == other.release:
+            if self.dev == other.dev:
+                return self.commit_count > other.commit_count
+            elif None in [self.dev, other.dev]:
+                return self.dev is None
+            else:
+                return self.dev > other.dev
+        else:
+            return (self.release, self.commit_count) > (other.release, 
other.commit_count)
+
+    def __lt__(self, other):
+        if self==other:
+            return False
+        else:
+            return not (self > other)
+
+
+    def verify(self, string_version=None):
+        """
+        Check that the version information is consistent with the VCS
+        before doing a release. If supplied with a string version,
+        this is also checked against the current version. Should be
+        called from setup.py with the declared package version before
+        releasing to PyPI.
+        """
+        if string_version and string_version != str(self):
+            raise Exception("Supplied string version does not match current 
version.")
+
+        if self.dirty:
+            raise Exception("Current working directory is dirty.")
+
+        if self.release != self.expected_release:
+            raise Exception("Declared release does not match current release 
tag.")
+
+        if self.commit_count !=0:
+            raise Exception("Please update the VCS version tag before 
release.")
+
+        if self._expected_commit not in [None, "$Format:%h$"]:
+            raise Exception("Declared release does not match the VCS version 
tag")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/colorcet-3.0.0/colorcet.egg-info/PKG-INFO 
new/colorcet-3.0.1/colorcet.egg-info/PKG-INFO
--- old/colorcet-3.0.0/colorcet.egg-info/PKG-INFO       2021-11-27 
04:29:04.000000000 +0100
+++ new/colorcet-3.0.1/colorcet.egg-info/PKG-INFO       2022-10-03 
17:30:01.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: colorcet
-Version: 3.0.0
+Version: 3.0.1
 Summary: Collection of perceptually uniform colormaps
 Home-page: https://colorcet.holoviz.org
 Author: James A. Bednar
@@ -11,7 +11,6 @@
 Project-URL: Bug Tracker, http://github.com/holoviz/colorcet/issues
 Project-URL: Documentation, https://colorcet.holoviz.org
 Project-URL: Source Code, http://github.com/holoviz/colorcet
-Platform: UNKNOWN
 Classifier: License :: OSI Approved
 Classifier: Operating System :: OS Independent
 Classifier: Programming Language :: Python
@@ -20,6 +19,7 @@
 Classifier: Programming Language :: Python :: 3.7
 Classifier: Programming Language :: Python :: 3.8
 Classifier: Programming Language :: Python :: 3.9
+Classifier: Programming Language :: Python :: 3.10
 Classifier: Development Status :: 5 - Production/Stable
 Requires-Python: >=2.7
 Provides-Extra: tests
@@ -31,4 +31,3 @@
 License-File: LICENSE.txt
 
 README.md
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/colorcet-3.0.0/colorcet.egg-info/SOURCES.txt 
new/colorcet-3.0.1/colorcet.egg-info/SOURCES.txt
--- old/colorcet-3.0.0/colorcet.egg-info/SOURCES.txt    2021-11-27 
04:29:04.000000000 +0100
+++ new/colorcet-3.0.1/colorcet.egg-info/SOURCES.txt    2022-10-03 
17:30:01.000000000 +0200
@@ -9,6 +9,7 @@
 colorcet/__main__.py
 colorcet/plotting.py
 colorcet/sineramp.py
+colorcet/version.py
 colorcet.egg-info/PKG-INFO
 colorcet.egg-info/SOURCES.txt
 colorcet.egg-info/dependency_links.txt
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/colorcet-3.0.0/colorcet.egg-info/entry_points.txt 
new/colorcet-3.0.1/colorcet.egg-info/entry_points.txt
--- old/colorcet-3.0.0/colorcet.egg-info/entry_points.txt       2021-11-27 
04:29:04.000000000 +0100
+++ new/colorcet-3.0.1/colorcet.egg-info/entry_points.txt       2022-10-03 
17:30:01.000000000 +0200
@@ -1,3 +1,2 @@
 [console_scripts]
 colorcet = colorcet.__main__:main
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/colorcet-3.0.0/colorcet.egg-info/requires.txt 
new/colorcet-3.0.1/colorcet.egg-info/requires.txt
--- old/colorcet-3.0.0/colorcet.egg-info/requires.txt   2021-11-27 
04:29:04.000000000 +0100
+++ new/colorcet-3.0.1/colorcet.egg-info/requires.txt   2022-10-03 
17:30:01.000000000 +0200
@@ -1,28 +1,23 @@
-param>=1.7.0
 pyct>=0.4.4
 
 [all]
 bokeh
 flake8
 holoviews
-keyring
 matplotlib
-nbsite>=0.6.1
+nbsite>=0.7.2rc10
 nbsmoke>=0.2.6
 numpy
-param>=1.7.0
 pyct>=0.4.4
+pydata-sphinx-theme<0.9.0
 pytest>=2.8.5
 pytest-cov
 pytest-mpl
-rfc3986
 setuptools>=30.3.0
-sphinx_holoviz_theme
-twine
+sphinx-copybutton
 wheel
 
 [build]
-param>=1.7.0
 pyct>=0.4.4
 setuptools>=30.3.0
 wheel
@@ -32,8 +27,9 @@
 holoviews
 matplotlib
 bokeh
-nbsite>=0.6.1
-sphinx_holoviz_theme
+nbsite>=0.7.2rc10
+pydata-sphinx-theme<0.9.0
+sphinx-copybutton
 
 [examples]
 numpy
@@ -46,16 +42,10 @@
 nbsmoke>=0.2.6
 pytest>=2.8.5
 pytest-cov
-twine
-rfc3986
-keyring
 
 [tests_extra]
 flake8
 nbsmoke>=0.2.6
 pytest>=2.8.5
 pytest-cov
-twine
-rfc3986
-keyring
 pytest-mpl
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/colorcet-3.0.0/examples/index.ipynb 
new/colorcet-3.0.1/examples/index.ipynb
--- old/colorcet-3.0.0/examples/index.ipynb     2021-11-27 04:26:40.000000000 
+0100
+++ new/colorcet-3.0.1/examples/index.ipynb     2022-10-03 17:28:08.000000000 
+0200
@@ -6,12 +6,12 @@
    "source": [
     "## Collection of perceptually accurate colormaps\n",
     "\n",
-    "[Colorcet](https://github.com/pyviz/colorcet) is a collection of \n",
-    "perceptually acccurate 256-color colormaps for use with Python plotting 
programs like\n",
-    "[Bokeh](http://bokeh.pydata.org),\n",
-    "[Matplotlib](http://matplotlib.org),\n",
-    "[HoloViews](http://holoviews.org), and\n",
-    "[Datashader](https://github.com/pyviz/datashader). \n",
+    "[Colorcet](https://github.com/holoviz/colorcet) is a collection of \n",
+    "perceptually accurate 256-color colormaps for use with Python plotting 
programs like\n",
+    "[Bokeh](https://docs.bokeh.org),\n",
+    "[Matplotlib](https://matplotlib.org),\n",
+    "[HoloViews](https://holoviews.org), and\n",
+    "[Datashader](https://datashader.org). \n",
     "\n",
     "There are two types of colormaps currently included: 
[continuous](./user_guide/Continuous.ipynb) and 
[categorical](./user_guide/Categorical.ipynb). The continuous colormaps are 
perceptually uniform, with each new color equally perceptually distinct from 
the previous and following colors. The continuous maps were constructed by 
[Peter Kovesi](http://peterkovesi.com/projects/colourmaps) at the Center for 
Exploration Targeting using the methods described in [Kovesi 
(2015)](https://arxiv.org/abs/1509.03700).\n",
     "\n",
@@ -85,8 +85,8 @@
     "For instance, mpl's colormaps are always perceptually uniform in their\n",
     "monochrome representation, not just their original color\n",
     "representation, and are safe for colorblind viewers, neither of which\n",
-    "are necessarily true of these colormaps.  On the other hand, colormaps\n",
-    "like \"fire\" above, i.e., a usable perceptually equivalent of\n",
+    "is necessarily true of these colormaps.  On the other hand, colormaps\n",
+    "like \"fire\" above, i.e., a usable perceptually equivalent version of\n",
     "matplotlib/matlab's \"hot\", are not obtainable using viscm in any\n",
     "straightforward way, limiting the range of useful colormaps that can be 
created.\n",
     "In any case, this package focuses on making a set of useful colormaps\n",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/colorcet-3.0.0/examples/user_guide/Categorical.ipynb 
new/colorcet-3.0.1/examples/user_guide/Categorical.ipynb
--- old/colorcet-3.0.0/examples/user_guide/Categorical.ipynb    2021-11-27 
04:26:40.000000000 +0100
+++ new/colorcet-3.0.1/examples/user_guide/Categorical.ipynb    2022-10-03 
17:28:08.000000000 +0200
@@ -51,7 +51,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "If you need *n&nbsp;*colors that are distinct from each other and you 
have no other criteria to apply, just take the first *n&nbsp;*colors from this 
palette. Note that these colors won't necessarily be the _most_ distinct that 
are possible in a set of that size, because they are chosen iteratively (each 
compared to those that come before it) using a greedy algorithm rather than 
being globally optimized for that specific size. The Glasbey algorithm can also 
be used to create such fully optimal sets, but it would not be practical to 
distribute all those sets and the color assignments would then vary each time a 
new data point was added, so this single set represents a good compromise.\n",
+    "If you need *n* colors that are distinct from each other and you have no 
other criteria to apply, just take the first *n* colors from this palette. Note 
that these colors won't necessarily be the _most_ distinct that are possible in 
a set of that size, because they are chosen iteratively (each compared to those 
that come before it) using a greedy algorithm rather than being globally 
optimized for that specific size. The Glasbey algorithm can also be used to 
create such fully optimal sets, but it would not be practical to distribute all 
those sets and the color assignments would then vary each time a new data point 
was added, so this single set represents a good compromise.\n",
     "\n",
     "### Light/Dark\n",
     "What if you have additional constraints to consider?  For instance, if 
you are making a scatter or line plot on a white or black background, some of 
the colors above will show up vividly in contrast, and others will fade into 
the background because they are very dark or very light:"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/colorcet-3.0.0/examples/user_guide/Continuous.ipynb 
new/colorcet-3.0.1/examples/user_guide/Continuous.ipynb
--- old/colorcet-3.0.0/examples/user_guide/Continuous.ipynb     2021-11-27 
04:26:40.000000000 +0100
+++ new/colorcet-3.0.1/examples/user_guide/Continuous.ipynb     2022-10-03 
17:28:08.000000000 +0200
@@ -6,10 +6,10 @@
    "source": [
     "## Perceptually uniform continuous colormaps from CET\n",
     "\n",
-    "Peter Kovesi at the Center for Exploration Targeting created a very 
useful set of [perceptually uniform continuous 
colormaps](https://arxiv.org/abs/1509.03700), many of which can replace the 
highly non-uniform colormaps provided with Python plotting programs.  Here we 
will show how to use them via a Python package named 
[colorcet](https://github.com/pyviz/colorcet), listing all the ones available 
and allowing you to evaluate how perceptually uniform they are for you, your 
particular monitor, etc. Download and installation instructions are at the 
[github site](https://github.com/pyviz/colorcet).\n",
+    "Peter Kovesi at the Center for Exploration Targeting created a very 
useful set of [perceptually uniform continuous 
colormaps](https://arxiv.org/abs/1509.03700), many of which can replace the 
highly non-uniform colormaps provided with Python plotting programs.  Here we 
will show how to use them via a Python package named 
[colorcet](https://github.com/holoviz/colorcet), listing all the ones available 
and allowing you to evaluate how perceptually uniform they are for you, your 
particular monitor, etc. Download and installation instructions are at the 
[github site](https://github.com/holoviz/colorcet).\n",
     "\n",
-    "We will plot them using [Matplotlib](http://matplotlib.org) via 
[Holoviews](http://holoviews.org), but identical 
[Bokeh](http://bokeh.pydata.org) palettes are also provided, and both Bokeh 
palettes and Matplotlib colormaps are usable in 
[Datashader](https://github.com/pyviz/datashader).  Thus these colormaps can be 
used in any of those Python packages, as well as any other package that accepts 
a Python list of normalized RGB tuples or hex colors.  See \n",
-    "[Peter's site](http://peterkovesi.com/projects/colourmaps/) to download 
versions for other non-Python packages."
+    "We will plot them using [Matplotlib](https://matplotlib.org) via 
[Holoviews](https://holoviews.org), but identical 
[Bokeh](https://docs.bokeh.org) palettes are also provided, and both Bokeh 
palettes and Matplotlib colormaps are usable in 
[Datashader](https://datashader.org).  Thus these colormaps can be used in any 
of those Python packages, as well as any other package that accepts a Python 
list of normalized RGB tuples or hex colors.  See \n",
+    "[Peter's site](https://colorcet.com/) to download versions for other 
non-Python packages."
    ]
   },
   {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/colorcet-3.0.0/pyproject.toml 
new/colorcet-3.0.1/pyproject.toml
--- old/colorcet-3.0.0/pyproject.toml   2021-11-27 04:26:40.000000000 +0100
+++ new/colorcet-3.0.1/pyproject.toml   2022-10-03 17:28:08.000000000 +0200
@@ -1,7 +1,6 @@
 [build-system]
 requires = [
     "pyct >=0.4.4",
-    "param >=1.7.0",
     "setuptools >=30.3.0",
     "wheel",
 ]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/colorcet-3.0.0/setup.py new/colorcet-3.0.1/setup.py
--- old/colorcet-3.0.0/setup.py 2021-11-27 04:26:40.000000000 +0100
+++ new/colorcet-3.0.1/setup.py 2022-10-03 17:28:08.000000000 +0200
@@ -14,20 +14,18 @@
     basepath = os.path.split(__file__)[0]
     version_file_path = os.path.join(basepath, reponame, '.version')
     try:
-        from param import version
+        from colorcet import version
     except:
         version = None
     if version is not None:
         return version.Version.setup_version(basepath, reponame, 
archive_commit="$Format:%h$")
     else:
-        print("WARNING: param>=1.6.0 unavailable. If you are installing a 
package, this warning can safely be ignored. If you are creating a package or 
otherwise operating in a git repository, you should install param>=1.6.0.")
         return json.load(open(version_file_path, 'r'))['version_string']
 
 
 ########## dependencies ##########
 
 install_requires = [
-    'param >=1.7.0',
     'pyct >=0.4.4',
 ]
 
@@ -43,17 +41,15 @@
     'nbsmoke >=0.2.6',
     'pytest >=2.8.5',
     'pytest-cov',
-    'twine',   # required for pip packaging
-    'rfc3986', # required by twine
-    'keyring', # required by twine
 ]
 
 extras_require = {
     'tests': tests,
     'examples': examples,
     'doc': examples + [
-        'nbsite >=0.6.1',
-        'sphinx_holoviz_theme',
+        'nbsite >=0.7.2rc10',
+        'pydata-sphinx-theme <0.9.0',
+        'sphinx-copybutton',
     ],
     'tests_extra': tests + [
         'pytest-mpl'  # only available on pip and conda-forge
@@ -61,7 +57,6 @@
     # until pyproject.toml/equivalent is widely supported (setup_requires
     # doesn't work well with pip)
     'build': [
-        'param >=1.7.0',
         'pyct >=0.4.4',
         'setuptools >=30.3.0',
         'wheel',
@@ -76,7 +71,7 @@
     version=get_setup_version('colorcet'),
     long_description='README.md',
     long_description_type='text/markdown',
-    license_file='LICENSE.txt',
+    license_files=['LICENSE.txt'],
     license='CC-BY License',
     classifiers=[
         "License :: OSI Approved",
@@ -87,6 +82,7 @@
         "Programming Language :: Python :: 3.7",
         "Programming Language :: Python :: 3.8",
         "Programming Language :: Python :: 3.9",
+        "Programming Language :: Python :: 3.10",
         "Development Status :: 5 - Production/Stable",
     ],
     author="James A. Bednar",

Reply via email to