From 35b356431f22d85c14208e0236f548d4d7060452 Mon Sep 17 00:00:00 2001 From: Ralf Gommers Date: Mon, 27 Jul 2015 22:25:56 +0200 Subject: [PATCH 1/8] DOC: fix broken links in rendered docs. --- README.rst | 12 ++++++------ doc/source/index.rst | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/README.rst b/README.rst index 254615d41..9cadd0c5f 100644 --- a/README.rst +++ b/README.rst @@ -27,7 +27,7 @@ The main features of PyWavelets are: * Over seventy `built-in wavelet filters`_ and custom wavelets supported * Single and double precision calculations - * Results compatible with Matlab Wavelet Toolbox |tm| + * Results compatible with Matlab Wavelet Toolbox (TM) Requirements ------------ @@ -44,8 +44,7 @@ The most recent *development* version can be found on GitHub at https://github.com/rgommers/pywt. Latest release, including source and binary package for Windows, is available -for download from the `Python Package Index`_ or on -`https://github.com/rgommers/pywt/releases`__ +for download from the `Python Package Index`_ or on the `Releases Page`_. Install ------- @@ -83,12 +82,12 @@ State of development & Contributing PyWavelets started in 2006 as an academic project for a master thesis on `Analysis and Classification of Medical Signals using Wavelet Transforms` and was maintained until 2012 by its `original developer`_. In 2013 -maintenance was taken over in a new repo (`https://github.com/rgommers/pywt`__) +maintenance was taken over in a `new repo `_) by a larger development team - a move supported by the original developer. The repo move doesn't mean that this is a fork - the package continues to be developed under the name "PyWavelets", and released on PyPi and Github (see -`https://github.com/nigma/pywt/issues/13`__ for the discussion where that was -decided). +`this issue `_ for the discussion +where that was decided). All contributions including bug reports, bug fixes, new feature implementations and documentation improvements are welcome. Moreover, developers with an @@ -134,3 +133,4 @@ Contents .. _Python: http://python.org/ .. _Python Package Index: http://pypi.python.org/pypi/PyWavelets/ .. _PyWavelets discussions group: http://groups.google.com/group/pywavelets +.. _Releases Page: https://github.com/rgommers/pywt/releases diff --git a/doc/source/index.rst b/doc/source/index.rst index 254615d41..9cadd0c5f 100644 --- a/doc/source/index.rst +++ b/doc/source/index.rst @@ -27,7 +27,7 @@ The main features of PyWavelets are: * Over seventy `built-in wavelet filters`_ and custom wavelets supported * Single and double precision calculations - * Results compatible with Matlab Wavelet Toolbox |tm| + * Results compatible with Matlab Wavelet Toolbox (TM) Requirements ------------ @@ -44,8 +44,7 @@ The most recent *development* version can be found on GitHub at https://github.com/rgommers/pywt. Latest release, including source and binary package for Windows, is available -for download from the `Python Package Index`_ or on -`https://github.com/rgommers/pywt/releases`__ +for download from the `Python Package Index`_ or on the `Releases Page`_. Install ------- @@ -83,12 +82,12 @@ State of development & Contributing PyWavelets started in 2006 as an academic project for a master thesis on `Analysis and Classification of Medical Signals using Wavelet Transforms` and was maintained until 2012 by its `original developer`_. In 2013 -maintenance was taken over in a new repo (`https://github.com/rgommers/pywt`__) +maintenance was taken over in a `new repo `_) by a larger development team - a move supported by the original developer. The repo move doesn't mean that this is a fork - the package continues to be developed under the name "PyWavelets", and released on PyPi and Github (see -`https://github.com/nigma/pywt/issues/13`__ for the discussion where that was -decided). +`this issue `_ for the discussion +where that was decided). All contributions including bug reports, bug fixes, new feature implementations and documentation improvements are welcome. Moreover, developers with an @@ -134,3 +133,4 @@ Contents .. _Python: http://python.org/ .. _Python Package Index: http://pypi.python.org/pypi/PyWavelets/ .. _PyWavelets discussions group: http://groups.google.com/group/pywavelets +.. _Releases Page: https://github.com/rgommers/pywt/releases From 25f877fc417bd91f0ce769397a60e6e5a6ed415e Mon Sep 17 00:00:00 2001 From: Ralf Gommers Date: Mon, 27 Jul 2015 22:53:29 +0200 Subject: [PATCH 2/8] DOC: add v0.3.0 release notes. --- doc/release/0.3.0-notes.rst | 75 +++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 doc/release/0.3.0-notes.rst diff --git a/doc/release/0.3.0-notes.rst b/doc/release/0.3.0-notes.rst new file mode 100644 index 000000000..6bc0218e5 --- /dev/null +++ b/doc/release/0.3.0-notes.rst @@ -0,0 +1,75 @@ +============================== +PyWavelets 0.3.0 Release Notes +============================== + +.. contents:: + +PyWavelets 0.3.0 is the first release of the package in 3 years. It is the +result of a significant effort of a growing development team to modernize the +package, to provide Python 3.x support and to make a start with providing new +features as well as improved performance. A 0.4.0 release will follow +shortly, and will contain more significant new features as well as +changes/deprecations to streamline the API. + +This release requires Python 2.6, 2.7 or 3.3-3.5 and NumPy 1.6.2 or greater. + +Highlights of this release include: + +- Support for Python 3.x (>=3.3) +- Added a test suite (based on nose, coverage up to 61% so far) +- Maintenance work: C style complying to the Numpy style guide, improved + templating system, more complete docstrings, pep8/pyflakes compliance, and + more. + + +New features +============ + +Test suite +---------- + +The test suite can be run with ``nosetests pywt`` or with:: + + >>> import pywt + >>> pywt.test() + +n-D Inverse Discrete Wavelet Transform +-------------------------------------- + +The function ``pywt.idwtn``, which provides n-dimensional inverse DWT, has been +added. It complements ``idwt``, ``idwt2`` and ``dwtn``. + +Thresholding +------------ + +The function `pywt.threshold` has been added. It unifies the four thresholding +functions that are still provided in the ``pywt.thresholding`` namespace. + + +Backwards incompatible changes +============================== + +None in this release. + + +Other changes +============= + +Development has moved to `a new repo `_. +Everyone with an interest in wavelets is welcome to contribute! + +Building wheels, building with ``python setup.py develop`` and many other +standard ways to build and install PyWavelets are supported now. + + +Authors +======= + + +Issues closed +------------- + + +Pull requests +------------- + From ee46be57274559f7062f3affbf22e421ae9b5a4e Mon Sep 17 00:00:00 2001 From: Ralf Gommers Date: Mon, 27 Jul 2015 22:58:32 +0200 Subject: [PATCH 3/8] DOC: add authors to release notes. --- doc/release/0.3.0-notes.rst | 14 +++ util/authors.py | 192 ++++++++++++++++++++++++++++++++++++ 2 files changed, 206 insertions(+) create mode 100755 util/authors.py diff --git a/doc/release/0.3.0-notes.rst b/doc/release/0.3.0-notes.rst index 6bc0218e5..eeb6ca596 100644 --- a/doc/release/0.3.0-notes.rst +++ b/doc/release/0.3.0-notes.rst @@ -65,6 +65,20 @@ standard ways to build and install PyWavelets are supported now. Authors ======= +* Ankit Agrawal + +* François Boulogne + +* Ralf Gommers + +* David Menéndez Hurtado + +* Gregory R. Lee + +* David McInnis + +* Helder Oliveira + +* Filip Wasilewski +* Kai Wohlfahrt + + +A total of 9 people contributed to this release. +People with a "+" by their names contributed a patch for the first time. +This list of names is automatically generated, and may not be fully complete. + Issues closed ------------- diff --git a/util/authors.py b/util/authors.py new file mode 100755 index 000000000..30eaf1836 --- /dev/null +++ b/util/authors.py @@ -0,0 +1,192 @@ +#!/usr/bin/env python +# -*- encoding:utf-8 -*- +""" +git-authors [OPTIONS] REV1..REV2 + +List the authors who contributed within a given revision interval. + +""" +# Author: Pauli Virtanen . This script is in the public domain. + +from __future__ import division, print_function, absolute_import + +import optparse +import re +import sys +import os +import subprocess + + +from scipy._lib.six import u, PY3 +if PY3: + stdout_b = sys.stdout.buffer +else: + stdout_b = sys.stdout + + +NAME_MAP = { + u('Helder'): u('Helder Oliveira'), +} + + +def main(): + p = optparse.OptionParser(__doc__.strip()) + p.add_option("-d", "--debug", action="store_true", + help="print debug output") + options, args = p.parse_args() + + if len(args) != 1: + p.error("invalid number of arguments") + + try: + rev1, rev2 = args[0].split('..') + except ValueError: + p.error("argument is not a revision range") + + # Analyze log data + all_authors = set() + authors = set() + + def analyze_line(line, names, disp=False): + line = line.strip().decode('utf-8') + + # Check the commit author name + m = re.match(u('^@@@([^@]*)@@@'), line) + if m: + name = m.group(1) + line = line[m.end():] + name = NAME_MAP.get(name, name) + if disp: + if name not in names: + stdout_b.write((" - Author: %s\n" % name).encode('utf-8')) + names.add(name) + + # Look for "thanks to" messages in the commit log + m = re.search(u(r'([Tt]hanks to|[Cc]ourtesy of) ([A-Z][A-Za-z]*? [A-Z][A-Za-z]*? [A-Z][A-Za-z]*|[A-Z][A-Za-z]*? [A-Z]\. [A-Z][A-Za-z]*|[A-Z][A-Za-z ]*? [A-Z][A-Za-z]*|[a-z0-9]+)($|\.| )'), line) + if m: + name = m.group(2) + if name not in (u('this'),): + if disp: + stdout_b.write(" - Log : %s\n" % line.strip().encode('utf-8')) + name = NAME_MAP.get(name, name) + names.add(name) + + line = line[m.end():].strip() + line = re.sub(u(r'^(and|, and|, ) '), u('Thanks to '), line) + analyze_line(line.encode('utf-8'), names) + + # Find all authors before the named range + for line in git.pipe('log', '--pretty=@@@%an@@@%n@@@%cn@@@%n%b', + '%s' % (rev1,)): + analyze_line(line, all_authors) + + # Find authors in the named range + for line in git.pipe('log', '--pretty=@@@%an@@@%n@@@%cn@@@%n%b', + '%s..%s' % (rev1, rev2)): + analyze_line(line, authors, disp=options.debug) + + # Sort + def name_key(fullname): + m = re.search(u(' [a-z ]*[A-Za-z-]+$'), fullname) + if m: + forename = fullname[:m.start()].strip() + surname = fullname[m.start():].strip() + else: + forename = "" + surname = fullname.strip() + if surname.startswith(u('van der ')): + surname = surname[8:] + if surname.startswith(u('de ')): + surname = surname[3:] + if surname.startswith(u('von ')): + surname = surname[4:] + return (surname.lower(), forename.lower()) + + authors = list(authors) + authors.sort(key=name_key) + + # Print + stdout_b.write(b""" +Authors +======= + +""") + + for author in authors: + if author in all_authors: + stdout_b.write(("* %s\n" % author).encode('utf-8')) + else: + stdout_b.write(("* %s +\n" % author).encode('utf-8')) + + stdout_b.write((""" +A total of %(count)d people contributed to this release. +People with a "+" by their names contributed a patch for the first time. +This list of names is automatically generated, and may not be fully complete. + +""" % dict(count=len(authors))).encode('utf-8')) + + stdout_b.write(("\nNOTE: Check this list manually! It is automatically generated " + "and some names\n may be missing.\n").encode('utf-8')) + +#------------------------------------------------------------------------------ +# Communicating with Git +#------------------------------------------------------------------------------ + +class Cmd(object): + executable = None + + def __init__(self, executable): + self.executable = executable + + def _call(self, command, args, kw, repository=None, call=False): + cmd = [self.executable, command] + list(args) + cwd = None + + if repository is not None: + cwd = os.getcwd() + os.chdir(repository) + + try: + if call: + return subprocess.call(cmd, **kw) + else: + return subprocess.Popen(cmd, **kw) + finally: + if cwd is not None: + os.chdir(cwd) + + def __call__(self, command, *a, **kw): + ret = self._call(command, a, {}, call=True, **kw) + if ret != 0: + raise RuntimeError("%s failed" % self.executable) + + def pipe(self, command, *a, **kw): + stdin = kw.pop('stdin', None) + p = self._call(command, a, dict(stdin=stdin, stdout=subprocess.PIPE), + call=False, **kw) + return p.stdout + + def read(self, command, *a, **kw): + p = self._call(command, a, dict(stdout=subprocess.PIPE), + call=False, **kw) + out, err = p.communicate() + if p.returncode != 0: + raise RuntimeError("%s failed" % self.executable) + return out + + def readlines(self, command, *a, **kw): + out = self.read(command, *a, **kw) + return out.rstrip("\n").split("\n") + + def test(self, command, *a, **kw): + ret = self._call(command, a, dict(stdout=subprocess.PIPE, + stderr=subprocess.PIPE), + call=True, **kw) + return (ret == 0) + +git = Cmd("git") + +#------------------------------------------------------------------------------ + +if __name__ == "__main__": + main() From 0473107406cf83ff1d861a1d2a02cffb9656833a Mon Sep 17 00:00:00 2001 From: Ralf Gommers Date: Mon, 27 Jul 2015 23:05:41 +0200 Subject: [PATCH 4/8] DOC: add closed issues and merged PRs to v0.3.0 release notes. [ci skip] --- doc/release/0.3.0-notes.rst | 60 +++++++++++++-- util/gh_lists.py | 147 ++++++++++++++++++++++++++++++++++++ 2 files changed, 200 insertions(+), 7 deletions(-) create mode 100755 util/gh_lists.py diff --git a/doc/release/0.3.0-notes.rst b/doc/release/0.3.0-notes.rst index eeb6ca596..6bec99d3a 100644 --- a/doc/release/0.3.0-notes.rst +++ b/doc/release/0.3.0-notes.rst @@ -80,10 +80,56 @@ People with a "+" by their names contributed a patch for the first time. This list of names is automatically generated, and may not be fully complete. -Issues closed -------------- - - -Pull requests -------------- - +Issues closed for v0.3.0 +------------------------ + +- `#3 `__: Remove numerix compat layer +- `#4 `__: Add single code base Python 3 support +- `#5 `__: PEP8 issues +- `#6 `__: Migrate tests to nose +- `#7 `__: Expand test coverage without Matlab to a reasonable level +- `#8 `__: Replace custom C templates by Numpy's templating system +- `#9 `__: Replace Cython templates by fused types +- `#10 `__: Replace use of __array_interface__ with Cython's memoryviews +- `#11 `__: Format existing docstrings in numpydoc format. +- `#12 `__: Complete docstrings, they're quite sparse right now +- `#13 `__: Reorganize source tree +- `#24 `__: doc/source/regression should be moved +- `#27 `__: Broken test: test_swt_decomposition +- `#28 `__: Install issue, no module tools.six +- `#29 `__: wp.update fails after removal of nodes +- `#32 `__: wp.update fails on 2D +- `#34 `__: Wavelet string attributes shouldn't be bytes in Python 3 +- `#35 `__: Re-enable float32 support +- `#36 `__: wavelet instance vs string +- `#40 `__: Test with Numpy 1.8rc1 +- `#45 `__: demos should be updated and integrated in docs +- `#60 `__: Moving pywt forward faster +- `#61 `__: issues to address in moving towards 0.3.0 +- `#71 `__: BUG: _pywt.downcoef always returns level=1 result + + +Pull requests for v0.3.0 +------------------------ + +- `#1 `__: travis: check all branches + fix URL +- `#17 `__: [DOC] doctrings for multilevel functions +- `#18 `__: DOC: format -> functions.py +- `#20 `__: MAINT: remove unnecessary zero() copy() +- `#21 `__: Doc wavelet_packets +- `#22 `__: Minor doc fixes +- `#25 `__: TEST: remove useless functions and use numpy instead +- `#26 `__: Merge most recent work +- `#30 `__: Adding test for wp.rst +- `#41 `__: Change to Numpy templating system +- `#43 `__: MAINT: update six.py to not use lazy loading. +- `#49 `__: Taking on API Issues +- `#50 `__: Add idwtn +- `#53 `__: readme updated with info related to Py3 version +- `#63 `__: Remove six +- `#65 `__: Thresholding +- `#70 `__: MAINT: PEP8 fixes +- `#72 `__: BUG: fix _downcoef for level > 1 +- `#73 `__: MAINT: documentation and metadata update for repo fork +- `#74 `__: STY: fix pep8/pyflakes issues +- `#77 `__: MAINT: raise ValueError if data given to dwt or idwt is not 1D... diff --git a/util/gh_lists.py b/util/gh_lists.py new file mode 100755 index 000000000..1e1327291 --- /dev/null +++ b/util/gh_lists.py @@ -0,0 +1,147 @@ +#!/usr/bin/env python +# -*- encoding:utf-8 -*- +""" +gh_lists.py MILESTONE + +Functions for Github API requests. +""" +from __future__ import print_function, division, absolute_import + +import os +import re +import sys +import json +import collections +import argparse + +from urllib2 import urlopen + + +Issue = collections.namedtuple('Issue', ('id', 'title', 'url')) + + +def main(): + p = argparse.ArgumentParser(usage=__doc__.lstrip()) + p.add_argument('--project', default='rgommers/pywt') + p.add_argument('milestone') + args = p.parse_args() + + getter = CachedGet('gh_cache.json') + try: + milestones = get_milestones(getter, args.project) + if args.milestone not in milestones: + msg = "Milestone {0} not available. Available milestones: {1}" + msg = msg.format(args.milestone, u", ".join(sorted(milestones))) + p.error(msg) + issues = get_issues(getter, args.project, args.milestone) + issues.sort() + finally: + getter.save() + + prs = [x for x in issues if u'/pull/' in x.url] + issues = [x for x in issues if x not in prs] + + def print_list(title, items): + print() + print(title) + print("-"*len(title)) + print() + + for issue in items: + msg = u"- `#{0} <{1}>`__: {2}" + title = re.sub(u"\s+", u" ", issue.title.strip()) + if len(title) > 60: + remainder = re.sub(u"\s.*$", u"...", title[60:]) + if len(remainder) > 20: + remainder = title[:80] + u"..." + else: + title = title[:60] + remainder + msg = msg.format(issue.id, issue.url, title) + print(msg) + print() + + msg = u"Issues closed for {0}".format(args.milestone) + print_list(msg, issues) + + msg = u"Pull requests for {0}".format(args.milestone) + print_list(msg, prs) + + return 0 + + +def get_milestones(getter, project): + url = "https://api.github.com/repos/{project}/milestones".format(project=project) + raw_data, info = getter.get(url) + data = json.loads(raw_data) + + milestones = {} + for ms in data: + milestones[ms[u'title']] = ms[u'number'] + return milestones + + +def get_issues(getter, project, milestone): + milestones = get_milestones(getter, project) + mid = milestones[milestone] + + url = "https://api.github.com/repos/{project}/issues?milestone={mid}&state=closed&sort=created&direction=asc" + url = url.format(project=project, mid=mid) + + raw_datas = [] + while True: + raw_data, info = getter.get(url) + raw_datas.append(raw_data) + if 'link' not in info: + break + m = re.search('<(.*?)>; rel="next"', info['link']) + if m: + url = m.group(1) + continue + break + + issues = [] + + for raw_data in raw_datas: + data = json.loads(raw_data) + for issue_data in data: + issues.append(Issue(issue_data[u'number'], + issue_data[u'title'], + issue_data[u'html_url'])) + return issues + + +class CachedGet(object): + def __init__(self, filename): + self.filename = filename + if os.path.isfile(filename): + print("[gh_lists] using {0} as cache (remove it if you want fresh data)".format(filename), + file=sys.stderr) + with open(filename, 'rb') as f: + self.cache = json.load(f) + else: + self.cache = {} + + def get(self, url): + url = unicode(url) + if url not in self.cache: + print("[gh_lists] get:", url, file=sys.stderr) + req = urlopen(url) + if req.getcode() != 200: + raise RuntimeError() + data = req.read() + info = dict(req.info()) + self.cache[url] = (data, info) + req.close() + else: + print("[gh_lists] get (cached):", url, file=sys.stderr) + return self.cache[url] + + def save(self): + tmp = self.filename + ".new" + with open(tmp, 'wb') as f: + json.dump(self.cache, f) + os.rename(tmp, self.filename) + + +if __name__ == "__main__": + sys.exit(main()) From 1cdfa2a01557574767d83865ac9d22cda9672c25 Mon Sep 17 00:00:00 2001 From: Ralf Gommers Date: Mon, 27 Jul 2015 23:10:21 +0200 Subject: [PATCH 5/8] DOC: add release notes section to html docs. [ci skip] --- doc/source/contents.rst | 1 + doc/source/release.0.3.0.rst | 1 + doc/source/releasenotes.rst | 7 +++++++ 3 files changed, 9 insertions(+) create mode 100644 doc/source/release.0.3.0.rst create mode 100644 doc/source/releasenotes.rst diff --git a/doc/source/contents.rst b/doc/source/contents.rst index 2a57eed03..4db36d16c 100644 --- a/doc/source/contents.rst +++ b/doc/source/contents.rst @@ -10,6 +10,7 @@ PyWavelets regression/index dev/index resources + releasenotes Indices and tables ================== diff --git a/doc/source/release.0.3.0.rst b/doc/source/release.0.3.0.rst new file mode 100644 index 000000000..617b22d1c --- /dev/null +++ b/doc/source/release.0.3.0.rst @@ -0,0 +1 @@ +.. include:: ../release/0.3.0-notes.rst diff --git a/doc/source/releasenotes.rst b/doc/source/releasenotes.rst new file mode 100644 index 000000000..9781b9237 --- /dev/null +++ b/doc/source/releasenotes.rst @@ -0,0 +1,7 @@ +Release Notes +============= + +.. toctree:: + :maxdepth: 1 + + release.0.3.0 From 9670f871077bc499b32fab88be78a074671016a1 Mon Sep 17 00:00:00 2001 From: Ralf Gommers Date: Wed, 29 Jul 2015 20:43:19 +0200 Subject: [PATCH 6/8] DOC: change repo location from rgommers/pywt to PyWavelets/pywt. [ci skip] --- CHANGES.txt | 2 +- README.rst | 12 ++--- doc/release/0.3.0-notes.rst | 92 ++++++++++++++++++------------------- doc/source/dev/testing.rst | 6 +-- doc/source/index.rst | 12 ++--- doc/source/resources.rst | 4 +- setup.py | 4 +- util/gh_lists.py | 2 +- 8 files changed, 67 insertions(+), 67 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index b5489c290..752fb08a3 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -3,7 +3,7 @@ Changelog 0.3.0 A major refactoring, providing support for Python 3.x while maintaining full backwards compatiblity. - Development has moved to https://github.com/rgommers/pywt + Development has moved to https://github.com/PyWavelets/pywt 0.2.2 maintenance release: diff --git a/README.rst b/README.rst index 9cadd0c5f..64254c9f3 100644 --- a/README.rst +++ b/README.rst @@ -41,7 +41,7 @@ Download -------- The most recent *development* version can be found on GitHub at -https://github.com/rgommers/pywt. +https://github.com/PyWavelets/pywt. Latest release, including source and binary package for Windows, is available for download from the `Python Package Index`_ or on the `Releases Page`_. @@ -82,7 +82,7 @@ State of development & Contributing PyWavelets started in 2006 as an academic project for a master thesis on `Analysis and Classification of Medical Signals using Wavelet Transforms` and was maintained until 2012 by its `original developer`_. In 2013 -maintenance was taken over in a `new repo `_) +maintenance was taken over in a `new repo `_) by a larger development team - a move supported by the original developer. The repo move doesn't mean that this is a fork - the package continues to be developed under the name "PyWavelets", and released on PyPi and Github (see @@ -125,12 +125,12 @@ Contents .. _built-in wavelet filters: http://wavelets.pybytes.com/ .. _Cython: http://cython.org/ -.. _demo: https://github.com/rgommers/pywt/tree/master/demo -.. _GitHub: https://github.com/rgommers/pywt -.. _GitHub Issues: https://github.com/rgommers/pywt/issues +.. _demo: https://github.com/PyWavelets/pywt/tree/master/demo +.. _GitHub: https://github.com/PyWavelets/pywt +.. _GitHub Issues: https://github.com/PyWavelets/pywt/issues .. _Numpy: http://www.numpy.org .. _original developer: http://en.ig.ma .. _Python: http://python.org/ .. _Python Package Index: http://pypi.python.org/pypi/PyWavelets/ .. _PyWavelets discussions group: http://groups.google.com/group/pywavelets -.. _Releases Page: https://github.com/rgommers/pywt/releases +.. _Releases Page: https://github.com/PyWavelets/pywt/releases diff --git a/doc/release/0.3.0-notes.rst b/doc/release/0.3.0-notes.rst index 6bec99d3a..7720babaa 100644 --- a/doc/release/0.3.0-notes.rst +++ b/doc/release/0.3.0-notes.rst @@ -55,7 +55,7 @@ None in this release. Other changes ============= -Development has moved to `a new repo `_. +Development has moved to `a new repo `_. Everyone with an interest in wavelets is welcome to contribute! Building wheels, building with ``python setup.py develop`` and many other @@ -83,53 +83,53 @@ This list of names is automatically generated, and may not be fully complete. Issues closed for v0.3.0 ------------------------ -- `#3 `__: Remove numerix compat layer -- `#4 `__: Add single code base Python 3 support -- `#5 `__: PEP8 issues -- `#6 `__: Migrate tests to nose -- `#7 `__: Expand test coverage without Matlab to a reasonable level -- `#8 `__: Replace custom C templates by Numpy's templating system -- `#9 `__: Replace Cython templates by fused types -- `#10 `__: Replace use of __array_interface__ with Cython's memoryviews -- `#11 `__: Format existing docstrings in numpydoc format. -- `#12 `__: Complete docstrings, they're quite sparse right now -- `#13 `__: Reorganize source tree -- `#24 `__: doc/source/regression should be moved -- `#27 `__: Broken test: test_swt_decomposition -- `#28 `__: Install issue, no module tools.six -- `#29 `__: wp.update fails after removal of nodes -- `#32 `__: wp.update fails on 2D -- `#34 `__: Wavelet string attributes shouldn't be bytes in Python 3 -- `#35 `__: Re-enable float32 support -- `#36 `__: wavelet instance vs string -- `#40 `__: Test with Numpy 1.8rc1 -- `#45 `__: demos should be updated and integrated in docs -- `#60 `__: Moving pywt forward faster -- `#61 `__: issues to address in moving towards 0.3.0 -- `#71 `__: BUG: _pywt.downcoef always returns level=1 result +- `#3 `__: Remove numerix compat layer +- `#4 `__: Add single code base Python 3 support +- `#5 `__: PEP8 issues +- `#6 `__: Migrate tests to nose +- `#7 `__: Expand test coverage without Matlab to a reasonable level +- `#8 `__: Replace custom C templates by Numpy's templating system +- `#9 `__: Replace Cython templates by fused types +- `#10 `__: Replace use of __array_interface__ with Cython's memoryviews +- `#11 `__: Format existing docstrings in numpydoc format. +- `#12 `__: Complete docstrings, they're quite sparse right now +- `#13 `__: Reorganize source tree +- `#24 `__: doc/source/regression should be moved +- `#27 `__: Broken test: test_swt_decomposition +- `#28 `__: Install issue, no module tools.six +- `#29 `__: wp.update fails after removal of nodes +- `#32 `__: wp.update fails on 2D +- `#34 `__: Wavelet string attributes shouldn't be bytes in Python 3 +- `#35 `__: Re-enable float32 support +- `#36 `__: wavelet instance vs string +- `#40 `__: Test with Numpy 1.8rc1 +- `#45 `__: demos should be updated and integrated in docs +- `#60 `__: Moving pywt forward faster +- `#61 `__: issues to address in moving towards 0.3.0 +- `#71 `__: BUG: _pywt.downcoef always returns level=1 result Pull requests for v0.3.0 ------------------------ -- `#1 `__: travis: check all branches + fix URL -- `#17 `__: [DOC] doctrings for multilevel functions -- `#18 `__: DOC: format -> functions.py -- `#20 `__: MAINT: remove unnecessary zero() copy() -- `#21 `__: Doc wavelet_packets -- `#22 `__: Minor doc fixes -- `#25 `__: TEST: remove useless functions and use numpy instead -- `#26 `__: Merge most recent work -- `#30 `__: Adding test for wp.rst -- `#41 `__: Change to Numpy templating system -- `#43 `__: MAINT: update six.py to not use lazy loading. -- `#49 `__: Taking on API Issues -- `#50 `__: Add idwtn -- `#53 `__: readme updated with info related to Py3 version -- `#63 `__: Remove six -- `#65 `__: Thresholding -- `#70 `__: MAINT: PEP8 fixes -- `#72 `__: BUG: fix _downcoef for level > 1 -- `#73 `__: MAINT: documentation and metadata update for repo fork -- `#74 `__: STY: fix pep8/pyflakes issues -- `#77 `__: MAINT: raise ValueError if data given to dwt or idwt is not 1D... +- `#1 `__: travis: check all branches + fix URL +- `#17 `__: [DOC] doctrings for multilevel functions +- `#18 `__: DOC: format -> functions.py +- `#20 `__: MAINT: remove unnecessary zero() copy() +- `#21 `__: Doc wavelet_packets +- `#22 `__: Minor doc fixes +- `#25 `__: TEST: remove useless functions and use numpy instead +- `#26 `__: Merge most recent work +- `#30 `__: Adding test for wp.rst +- `#41 `__: Change to Numpy templating system +- `#43 `__: MAINT: update six.py to not use lazy loading. +- `#49 `__: Taking on API Issues +- `#50 `__: Add idwtn +- `#53 `__: readme updated with info related to Py3 version +- `#63 `__: Remove six +- `#65 `__: Thresholding +- `#70 `__: MAINT: PEP8 fixes +- `#72 `__: BUG: fix _downcoef for level > 1 +- `#73 `__: MAINT: documentation and metadata update for repo fork +- `#74 `__: STY: fix pep8/pyflakes issues +- `#77 `__: MAINT: raise ValueError if data given to dwt or idwt is not 1D... diff --git a/doc/source/dev/testing.rst b/doc/source/dev/testing.rst index c7e434ab2..ed02ff2de 100644 --- a/doc/source/dev/testing.rst +++ b/doc/source/dev/testing.rst @@ -6,15 +6,15 @@ Testing Continous integration with Travis-CI ------------------------------------ -The project is using `Travis-CI `_ service +The project is using `Travis-CI `_ service for continous integration and testing. Current build status is: .. image:: - https://secure.travis-ci.org/rgommers/pywt.png?branch=develop + https://secure.travis-ci.org/PyWavelets/pywt.png?branch=develop :alt: Build Status - :target: https://secure.travis-ci.org/rgommers/pywt + :target: https://secure.travis-ci.org/PyWavelets/pywt If you are submitting a patch or pull request please make sure it diff --git a/doc/source/index.rst b/doc/source/index.rst index 9cadd0c5f..64254c9f3 100644 --- a/doc/source/index.rst +++ b/doc/source/index.rst @@ -41,7 +41,7 @@ Download -------- The most recent *development* version can be found on GitHub at -https://github.com/rgommers/pywt. +https://github.com/PyWavelets/pywt. Latest release, including source and binary package for Windows, is available for download from the `Python Package Index`_ or on the `Releases Page`_. @@ -82,7 +82,7 @@ State of development & Contributing PyWavelets started in 2006 as an academic project for a master thesis on `Analysis and Classification of Medical Signals using Wavelet Transforms` and was maintained until 2012 by its `original developer`_. In 2013 -maintenance was taken over in a `new repo `_) +maintenance was taken over in a `new repo `_) by a larger development team - a move supported by the original developer. The repo move doesn't mean that this is a fork - the package continues to be developed under the name "PyWavelets", and released on PyPi and Github (see @@ -125,12 +125,12 @@ Contents .. _built-in wavelet filters: http://wavelets.pybytes.com/ .. _Cython: http://cython.org/ -.. _demo: https://github.com/rgommers/pywt/tree/master/demo -.. _GitHub: https://github.com/rgommers/pywt -.. _GitHub Issues: https://github.com/rgommers/pywt/issues +.. _demo: https://github.com/PyWavelets/pywt/tree/master/demo +.. _GitHub: https://github.com/PyWavelets/pywt +.. _GitHub Issues: https://github.com/PyWavelets/pywt/issues .. _Numpy: http://www.numpy.org .. _original developer: http://en.ig.ma .. _Python: http://python.org/ .. _Python Package Index: http://pypi.python.org/pypi/PyWavelets/ .. _PyWavelets discussions group: http://groups.google.com/group/pywavelets -.. _Releases Page: https://github.com/rgommers/pywt/releases +.. _Releases Page: https://github.com/PyWavelets/pywt/releases diff --git a/doc/source/resources.rst b/doc/source/resources.rst index ee963134c..1c7e38123 100644 --- a/doc/source/resources.rst +++ b/doc/source/resources.rst @@ -35,7 +35,7 @@ Articles - `Wavelet Regression in Python `_ -.. _GitHub repository: https://github.com/rgommers/pywt -.. _GitHub Issues: https://github.com/rgommers/pywt/issues +.. _GitHub repository: https://github.com/PyWavelets/pywt +.. _GitHub Issues: https://github.com/PyWavelets/pywt/issues .. _PyWavelets discussions group: http://groups.google.com/group/pywavelets .. _wavelets.pybytes.com: http://wavelets.pybytes.com/ diff --git a/setup.py b/setup.py index 5f1957f08..a7cb76eed 100755 --- a/setup.py +++ b/setup.py @@ -143,8 +143,8 @@ def setup_package(): name="PyWavelets", maintainer="The PyWavelets Developers", maintainer_email="http://groups.google.com/group/pywavelets", - url="https://github.com/rgommers/pywt", - download_url="https://github.com/rgommers/pywt/releases", + url="https://github.com/PyWavelets/pywt", + download_url="https://github.com/PyWavelets/pywt/releases", license="MIT", description="PyWavelets, wavelet transform module", long_description="""\ diff --git a/util/gh_lists.py b/util/gh_lists.py index 1e1327291..2db561c2d 100755 --- a/util/gh_lists.py +++ b/util/gh_lists.py @@ -22,7 +22,7 @@ def main(): p = argparse.ArgumentParser(usage=__doc__.lstrip()) - p.add_argument('--project', default='rgommers/pywt') + p.add_argument('--project', default='PyWavelets/pywt') p.add_argument('milestone') args = p.parse_args() From 1bad5bac5e4831bb4887fdd634d0d71353fdfb53 Mon Sep 17 00:00:00 2001 From: Ralf Gommers Date: Wed, 29 Jul 2015 22:48:45 +0200 Subject: [PATCH 7/8] MAINT: various fixes in preparation for next release. - Remove mentions of pybytes.com/pywavelets (that will forward to readthedocs.org once @nigma puts the redirect in place). Leave the wavelet browser links on pybytes.com though. - Fix dev version string to be PEP 440 compliant. - Automatically get correct version number into html docs. - Replace "Filip Wasilewski" with "The PyWavelets Developers" in various places. --- README.rst | 3 +-- doc/source/_templates/page.html | 2 +- doc/source/_templates/quicklinks.html | 3 +-- doc/source/conf.py | 21 ++++++++++++--------- setup.py | 2 +- 5 files changed, 16 insertions(+), 15 deletions(-) diff --git a/README.rst b/README.rst index 64254c9f3..4464a2b60 100644 --- a/README.rst +++ b/README.rst @@ -71,8 +71,7 @@ Documentation ------------- Documentation with detailed examples and links to more resources is available -online at http://www.pybytes.com/pywavelets/ and -http://pywavelets.readthedocs.org. +online at http://pywavelets.readthedocs.org. For more usage examples see the `demo`_ directory in the source package. diff --git a/doc/source/_templates/page.html b/doc/source/_templates/page.html index 10b8f582d..8a049aa1b 100644 --- a/doc/source/_templates/page.html +++ b/doc/source/_templates/page.html @@ -6,7 +6,7 @@ {% block extrahead %} {{ super() }} - + diff --git a/doc/source/_templates/quicklinks.html b/doc/source/_templates/quicklinks.html index d5e76ed16..a89747795 100644 --- a/doc/source/_templates/quicklinks.html +++ b/doc/source/_templates/quicklinks.html @@ -7,6 +7,5 @@

Quick links

  • Fork on Github
  • Discussion Group
  • Explore Wavelets
  • -
  • Follow on Twitter
  • - \ No newline at end of file + diff --git a/doc/source/conf.py b/doc/source/conf.py index 03f065c6f..c607ba485 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -11,7 +11,7 @@ # All configuration values have a default; values that are commented out # serve to show the default. -import sys, os +import re import datetime import jinja2.filters @@ -40,16 +40,19 @@ # General information about the project. project = 'PyWavelets' -copyright = jinja2.filters.do_mark_safe('2006-%s, Filip Wasilewski' % datetime.date.today().year) +copyright = jinja2.filters.do_mark_safe('2006-%s, The PyWavelets Developers' % datetime.date.today().year) # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the # built documents. -# -# The short X.Y version. -version = '0.2.2' -# The full version, including alpha/beta/rc tags. -release = '0.2.2' + +# The default replacements for |version| and |release|, also used in various +# other places throughout the built documents. +import pywt +version = re.sub(r'\.dev-.*$', r'.dev', pywt.__version__) +release = pywt.__version__ + +print "PyWavelets (VERSION %s)" % (version,) # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. @@ -157,7 +160,7 @@ # If true, an OpenSearch description file will be output, and all pages will # contain a tag referring to it. The value of this option must be the # base URL from which the finished HTML is served. -html_use_opensearch = 'http://pybytes.com/pywavelets' +html_use_opensearch = 'http://pywavelets.readthedocs.org' # If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml"). #html_file_suffix = '' @@ -178,7 +181,7 @@ # (source start file, target name, title, author, documentclass [howto/manual]). latex_documents = [ ('index', 'PyWavelets.tex', 'PyWavelets Documentation', - 'Filip Wasilewski', 'manual'), + 'The PyWavelets Developers', 'manual'), ] # The name of an image file (relative to this directory) to place at the top of diff --git a/setup.py b/setup.py index a7cb76eed..64bda6f27 100755 --- a/setup.py +++ b/setup.py @@ -56,7 +56,7 @@ def get_version_info(): GIT_REVISION = "Unknown" if not ISRELEASED: - FULLVERSION += '.dev-' + GIT_REVISION[:7] + FULLVERSION += '.dev0+' + GIT_REVISION[:7] return FULLVERSION, GIT_REVISION From 592e6c1e740b6a1f72ca25968d5211e8095506b1 Mon Sep 17 00:00:00 2001 From: Ralf Gommers Date: Wed, 29 Jul 2015 23:11:52 +0200 Subject: [PATCH 8/8] DOC: fix link on Testing page to TravisCI status. Also remove a last mention of pybytes.com/pywavelets [ci skip] --- doc/source/dev/testing.rst | 2 +- doc/source/index.rst | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/doc/source/dev/testing.rst b/doc/source/dev/testing.rst index ed02ff2de..7decb45d6 100644 --- a/doc/source/dev/testing.rst +++ b/doc/source/dev/testing.rst @@ -12,7 +12,7 @@ for continous integration and testing. Current build status is: .. image:: - https://secure.travis-ci.org/PyWavelets/pywt.png?branch=develop + https://secure.travis-ci.org/PyWavelets/pywt.png?branch=master :alt: Build Status :target: https://secure.travis-ci.org/PyWavelets/pywt diff --git a/doc/source/index.rst b/doc/source/index.rst index 64254c9f3..4464a2b60 100644 --- a/doc/source/index.rst +++ b/doc/source/index.rst @@ -71,8 +71,7 @@ Documentation ------------- Documentation with detailed examples and links to more resources is available -online at http://www.pybytes.com/pywavelets/ and -http://pywavelets.readthedocs.org. +online at http://pywavelets.readthedocs.org. For more usage examples see the `demo`_ directory in the source package.