Hello community,

here is the log from the commit of package python-librosa for openSUSE:Factory 
checked in at 2019-04-01 12:34:56
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-librosa (Old)
 and      /work/SRC/openSUSE:Factory/.python-librosa.new.25356 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-librosa"

Mon Apr  1 12:34:56 2019 rev:2 rq:684459 version:0.6.3

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-librosa/python-librosa.changes    
2018-11-06 14:33:37.169110194 +0100
+++ /work/SRC/openSUSE:Factory/.python-librosa.new.25356/python-librosa.changes 
2019-04-01 12:34:57.729822637 +0200
@@ -1,0 +2,8 @@
+Wed Feb 20 19:30:09 CET 2019 - Matej Cepl <[email protected]>
+
+- Upgrade to 0.6.3:
+  - This release contains a few minor bugfixes and many
+    improvements to documentation and usability.
+- Also, SPEC file is run through spec-cleaner.
+
+-------------------------------------------------------------------

Old:
----
  librosa-0.6.2.tar.gz

New:
----
  librosa-0.6.3.tar.gz

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

Other differences:
------------------
++++++ python-librosa.spec ++++++
--- /var/tmp/diff_new_pack.TrDPAb/_old  2019-04-01 12:34:58.825822917 +0200
+++ /var/tmp/diff_new_pack.TrDPAb/_new  2019-04-01 12:34:58.825822917 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package python-librosa
 #
-# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -12,22 +12,33 @@
 # license that conforms to the Open Source Definition (Version 1.9)
 # published by the Open Source Initiative.
 
-# Please submit bugfixes or comments via http://bugs.opensuse.org/
+# Please submit bugfixes or comments via https://bugs.opensuse.org/
+#
 
 
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 Name:           python-librosa
-Version:        0.6.2
+Version:        0.6.3
 Release:        0
-License:        ISC
 Summary:        Python module for audio and music processing
-Url:            http://github.com/librosa/librosa
+License:        ISC
 Group:          Development/Languages/Python
+URL:            http://github.com/librosa/librosa
 Source0:        
https://files.pythonhosted.org/packages/source/l/librosa/librosa-%{version}.tar.gz
 Source10:       
https://raw.githubusercontent.com/librosa/librosa/%{version}/LICENSE.md
 BuildRequires:  %{python_module setuptools}
 BuildRequires:  fdupes
 BuildRequires:  python-rpm-macros
+Requires:       python-audioread >= 2.0.0
+Requires:       python-decorator >= 3.0.0
+Requires:       python-joblib >= 0.12
+Requires:       python-numba >= 0.38.0
+Requires:       python-numpy >= 1.8.0
+Requires:       python-resampy >= 0.2.0
+Requires:       python-scikit-learn >= 0.14.0
+Requires:       python-scipy >= 0.14.0
+Requires:       python-six >= 1.3
+BuildArch:      noarch
 # SECTION test requirements
 BuildRequires:  %{python_module audioread >= 2.0.0}
 BuildRequires:  %{python_module decorator >= 3.0.0}
@@ -39,17 +50,6 @@
 BuildRequires:  %{python_module scipy >= 0.14.0}
 BuildRequires:  %{python_module six >= 1.3}
 # /SECTION
-Requires:       python-audioread >= 2.0.0
-Requires:       python-decorator >= 3.0.0
-Requires:       python-joblib >= 0.12
-Requires:       python-numba >= 0.38.0
-Requires:       python-numpy >= 1.8.0
-Requires:       python-resampy >= 0.2.0
-Requires:       python-scikit-learn >= 0.14.0
-Requires:       python-scipy >= 0.14.0
-Requires:       python-six >= 1.3
-BuildArch:      noarch
-
 %python_subpackages
 
 %description

++++++ librosa-0.6.2.tar.gz -> librosa-0.6.3.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/librosa-0.6.2/AUTHORS.md new/librosa-0.6.3/AUTHORS.md
--- old/librosa-0.6.2/AUTHORS.md        1970-01-01 01:00:00.000000000 +0100
+++ new/librosa-0.6.3/AUTHORS.md        2019-02-13 22:28:40.000000000 +0100
@@ -0,0 +1,54 @@
+Contributors
+============
+
+* Brian McFee <https://github.com/bmcfee>
+* Matt McVicar <https://github.com/mattmcvicar>
+* Dawen Liang <https://github.com/dawenl>
+* Colin Raffel <https://github.com/craffel>
+* Douglas Repetto <https://github.com/drepetto>
+* Dan Ellis <https://github.com/dpwe>
+* Eric Battenberg <https://github.com/ebattenberg>
+* Bryce Walburn <https://github.com/BWalburn>
+* Oriol Nieto <https://github.com/urinieto>
+* Romain Hennequin <https://github.com/romi1502>
+* Ryuichi Yamamoto <https://github.com/r9y9>
+* Rachel Bittner <https://github.com/rabitt>
+* Stefan Balke <https://github.com/stefan-balke>
+* CJ Carr <https://github.com/Cortexelus>
+* Fabian Robert-Stoeter <https://github.com/faroit>
+* Keunwoo Choi <https://github.com/keunwoochoi>
+* Eric Humphrey <https://github.com/ejhumphrey>
+* Carl Thome <https://github.com/carlthome>
+* Seth Kranzler <https://github.com/polyrhythmatic>
+* Waldir Pimenta <https://github.com/waldyrious>
+* Hojin Lee <https://github.com/hojinlee>
+* Paul Brossier <https://github.com/piem>
+* Rimvydas Naktinis <https://github.com/naktinis>
+* Jackie Wu <https://github.com/wkcn>
+* Erik Peterson <https://github.com/EMCP>
+* Siddhartha Kumar <https://github.com/siddhugolu>
+* Julia Wilkins <https://github.com/jlw365>
+* Curtis Hawthorne <https://github.com/cghawthorne>
+* Dana Lee <https://github.com/danagilliann>
+* Pius Friesch <https://github.com/pfriesch>
+* Ziyao Wei <https://github.com/ZiyaoWei>
+* Vincent Lostanlen <https://github.com/lostanlen>
+* Steve Tjoa <https://github.com/stevetjoa>
+* Matt Vollrath <https://github.com/mvollrath>
+* Zhen Wang <https://github.com/nehz>
+* Kyungyun Lee <https://github.com/kyungyunlee>
+* Frank Zalkow <https://github.com/fzalkow>
+* Shayenne Moura <https://github.com/shayenne>
+* nullmightybofo <https://github.com/nullmightybofo>
+* toddrme2178 <https://github.com/toddrme2178>
+* Andy Sarroff <https://github.com/woodshop>
+* Monsij Biswal <https://github.com/monsij>
+
+Some feature extraction code was based on <https://github.com/ronw/frontend> 
by Ron Weiss.
+
+Large portions of LibROSA were ported from MATLAB code by Dan Ellis 
<http://www.ee.columbia.edu/~dpwe/resources/matlab/>.
+
+Some spectral features were ported from original MATLAB implementations by 
Erik Schmidt and Jeff Scott
+at the Drexel METlab <http://music.ece.drexel.edu/>
+
+Additional thanks to Emanuele Coviello and Erik Schmidt for testing, bug 
reports and fixes.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/librosa-0.6.2/CONTRIBUTING.md 
new/librosa-0.6.3/CONTRIBUTING.md
--- old/librosa-0.6.2/CONTRIBUTING.md   1970-01-01 01:00:00.000000000 +0100
+++ new/librosa-0.6.3/CONTRIBUTING.md   2018-11-21 15:41:08.000000000 +0100
@@ -0,0 +1,122 @@
+
+Contributing code
+=================
+
+How to contribute
+-----------------
+
+The preferred way to contribute to librosa is to fork the 
+[main repository](http://github.com/librosa/librosa/) on
+GitHub:
+
+1. Fork the [project repository](http://github.com/librosa/librosa):
+   click on the 'Fork' button near the top of the page. This creates
+   a copy of the code under your account on the GitHub server.
+
+2. Clone this copy to your local disk:
+
+          $ git clone [email protected]:YourLogin/librosa.git
+          $ cd librosa 
+
+3. Remove any previously installed librosas:
+            
+          $ pip uninstall librosa
+
+and install your local copy with testing dependencies:
+
+          $ pip install -e .[tests]
+
+4. Create a branch to hold your changes:
+
+          $ git checkout -b my-feature
+
+   and start making changes. Never work in the ``master`` branch!
+
+5. Work on this copy on your computer using Git to do the version
+   control. When you're done editing, do:
+
+          $ git add modified_files
+          $ git commit
+
+   to record your changes in Git, then push them to GitHub with:
+
+          $ git push -u origin my-feature
+
+Finally, go to the web page of the your fork of the librosa repo,
+and click 'Pull request' to send your changes to the maintainers for
+review. This will send an email to the committers.
+
+(If any of the above seems like magic to you, then look up the 
+[Git documentation](http://git-scm.com/documentation) on the web.)
+
+It is recommended to check that your contribution complies with the
+following rules before submitting a pull request:
+
+-  All public methods should have informative docstrings with sample
+   usage presented.
+
+You can also check for common programming errors with the following
+tools:
+
+-  Code with good test coverage (at least 80%), check with:
+
+          $ pytest
+
+-  No pyflakes warnings, check with:
+
+           $ pip install pyflakes
+           $ pyflakes path/to/module.py
+
+-  No PEP8 warnings, check with:
+
+           $ pip install pep8
+           $ pep8 path/to/module.py
+
+-  AutoPEP8 can help you fix some of the easy redundant errors:
+
+           $ pip install autopep8
+           $ autopep8 path/to/pep8.py
+
+Filing bugs
+-----------
+We use Github issues to track all bugs and feature requests; feel free to
+open an issue if you have found a bug or wish to see a feature implemented.
+
+It is recommended to check that your issue complies with the
+following rules before submitting:
+
+-  Verify that your issue is not being currently addressed by other
+   [issues](https://github.com/librosa/librosa/issues?q=)
+   or [pull requests](https://github.com/librosa/librosa/pulls?q=).
+
+-  Please ensure all code snippets and error messages are formatted in
+   appropriate code blocks.
+   See [Creating and highlighting code 
blocks](https://help.github.com/articles/creating-and-highlighting-code-blocks).
+
+-  Please include your operating system type and version number, as well
+   as your Python, librosa, numpy, and scipy versions. This information
+   can be found by running the following code snippet:
+
+  ```python
+  import platform; print(platform.platform())
+  import sys; print("Python", sys.version)
+  import numpy; print("NumPy", numpy.__version__)
+  import scipy; print("SciPy", scipy.__version__)
+  import librosa; print("librosa", librosa.__version__)
+  ```
+
+Documentation
+-------------
+
+You can edit the documentation using any text editor and then generate
+the HTML output by typing ``make html`` from the docs/ directory.
+The resulting HTML files will be placed in _build/html/ and are viewable 
+in a web browser. See the README file in the doc/ directory for more 
information.
+
+For building the documentation, you will need 
+[sphinx](http://sphinx.pocoo.org/),
+[matplotlib](http://matplotlib.sourceforge.net/), and 
[numpydoc](https://pypi.python.org/pypi/numpydoc).
+
+Note
+----
+This document was gleefully borrowed from 
[scikit-learn](http://scikit-learn.org/).
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/librosa-0.6.2/LICENSE.md new/librosa-0.6.3/LICENSE.md
--- old/librosa-0.6.2/LICENSE.md        1970-01-01 01:00:00.000000000 +0100
+++ new/librosa-0.6.3/LICENSE.md        2018-09-13 01:41:47.000000000 +0200
@@ -0,0 +1,15 @@
+## ISC License
+
+Copyright (c) 2013--2017, librosa development team.
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/librosa-0.6.2/MANIFEST.in 
new/librosa-0.6.3/MANIFEST.in
--- old/librosa-0.6.2/MANIFEST.in       1970-01-01 01:00:00.000000000 +0100
+++ new/librosa-0.6.3/MANIFEST.in       2018-11-14 04:11:59.000000000 +0100
@@ -0,0 +1,3 @@
+include AUTHORS.md
+include CONTRIBUTING.md
+include LICENSE.md
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/librosa-0.6.2/PKG-INFO new/librosa-0.6.3/PKG-INFO
--- old/librosa-0.6.2/PKG-INFO  2018-08-09 17:23:07.000000000 +0200
+++ new/librosa-0.6.3/PKG-INFO  2019-02-13 22:29:00.000000000 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: librosa
-Version: 0.6.2
+Version: 0.6.3
 Summary: Python module for audio and music processing
 Home-page: http://github.com/librosa/librosa
 Author: Brian McFee
@@ -134,6 +134,6 @@
 Classifier: Programming Language :: Python :: 3.5
 Classifier: Programming Language :: Python :: 3.6
 Description-Content-Type: text/markdown
-Provides-Extra: docs
 Provides-Extra: display
 Provides-Extra: tests
+Provides-Extra: docs
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/librosa-0.6.2/librosa/core/audio.py 
new/librosa-0.6.3/librosa/core/audio.py
--- old/librosa-0.6.2/librosa/core/audio.py     2018-08-08 06:42:43.000000000 
+0200
+++ new/librosa-0.6.3/librosa/core/audio.py     2019-02-13 22:28:41.000000000 
+0100
@@ -69,6 +69,13 @@
             To use a faster method, set `res_type='kaiser_fast'`.
 
             To use `scipy.signal.resample`, set `res_type='scipy'`.
+            
+        .. note::
+           This uses `audioread`, which may truncate the precision of the
+           audio data to 16 bits.
+
+           See https://librosa.github.io/librosa/ioformats.html for alternate
+           loading methods.
 
 
     Returns
@@ -357,6 +364,19 @@
     -------
     d : float >= 0
         Duration (in seconds) of the input time series or spectrogram.
+
+    Raises
+    ------
+    ParameterError
+        if none of `y`, `S`, or `filename` are provided.
+
+    Notes
+    -----
+    `get_duration` can be applied to a file (`filename`), a spectrogram (`S`),
+    or audio buffer (`y, sr`).  Only one of these three options should be
+    provided.  If you do provide multiple options (e.g., `filename` and `S`),
+    then `filename` takes precedence over `S`, and `S` takes precedence over
+    `(y, sr)`.
     """
 
     if filename is not None:
@@ -364,7 +384,8 @@
             return fdesc.duration
 
     if y is None:
-        assert S is not None
+        if S is None:
+            raise ParameterError('At least one of (y, sr), S, or filename must 
be provided')
 
         n_frames = S.shape[1]
         n_samples = n_fft + hop_length * (n_frames - 1)
@@ -726,7 +747,8 @@
         desired sampling rate of the output signal
 
     length : int > 0
-        desired number of samples in the output signal. When both `duration` 
and `length` are defined, `length` would take priority.
+        desired number of samples in the output signal. When both `duration` 
and `length` are defined,
+        `length` would take priority.
 
     duration : float > 0
         desired duration in seconds. When both `duration` and `length` are 
defined, `length` would take priority.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/librosa-0.6.2/librosa/core/pitch.py 
new/librosa-0.6.3/librosa/core/pitch.py
--- old/librosa-0.6.2/librosa/core/pitch.py     2018-05-24 15:32:27.000000000 
+0200
+++ new/librosa-0.6.3/librosa/core/pitch.py     2019-01-31 02:21:26.000000000 
+0100
@@ -154,7 +154,7 @@
     # from the next tone up.
     residual[residual >= 0.5] -= 1.0
 
-    bins = np.linspace(-0.5, 0.5, int(np.ceil(1./resolution)), endpoint=False)
+    bins = np.linspace(-0.5, 0.5, int(np.ceil(1. / resolution)) + 1)
 
     counts, tuning = np.histogram(residual, bins)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/librosa-0.6.2/librosa/core/spectrum.py 
new/librosa-0.6.3/librosa/core/spectrum.py
--- old/librosa-0.6.2/librosa/core/spectrum.py  2018-08-03 20:45:54.000000000 
+0200
+++ new/librosa-0.6.3/librosa/core/spectrum.py  2018-12-03 17:51:54.000000000 
+0100
@@ -179,7 +179,6 @@
     for bl_s in range(0, stft_matrix.shape[1], n_columns):
         bl_t = min(bl_s + n_columns, stft_matrix.shape[1])
 
-        # RFFT and Conjugate here to match phase from DPWE code
         stft_matrix[:, bl_s:bl_t] = fft.fft(fft_window *
                                             y_frames[:, bl_s:bl_t],
                                             axis=0)[:stft_matrix.shape[0]]
@@ -195,7 +194,7 @@
 
     Converts a complex-valued spectrogram `stft_matrix` to time-series `y`
     by minimizing the mean squared error between `stft_matrix` and STFT of
-    `y` as described in [1]_.
+    `y` as described in [1]_ up to Section 2 (reconstruction from MSTFT).
 
     In general, window function, hop length and other parameters should be same
     as in stft, which mostly leads to perfect reconstruction of a signal from
@@ -635,7 +634,7 @@
 
 @cache(level=20)
 def iirt(y, sr=22050, win_length=2048, hop_length=None, center=True,
-         tuning=0.0, pad_mode='reflect', **kwargs):
+         tuning=0.0, pad_mode='reflect', flayout=None, **kwargs):
     r'''Time-frequency representation using IIR filters [1]_.
 
     This function will return a time-frequency representation
@@ -643,7 +642,7 @@
     First, `y` is resampled as needed according to the provided `sample_rates`.
     Then, a filterbank with with `n` band-pass filters is designed.
     The resampled input signals are processed by the filterbank as a whole.
-    (`scipy.signal.filtfilt` is used to make the phase linear.)
+    (`scipy.signal.filtfilt` resp. `sosfiltfilt` is used to make the phase 
linear.)
     The output of the filterbank is cut into frames.
     For each band, the short-time mean-square power (STMSP) is calculated by
     summing `win_length` subsequent filtered time samples.
@@ -686,6 +685,12 @@
         If `center=True`, the padding mode to use at the edges of the signal.
         By default, this function uses reflection padding.
 
+    flayout : string
+        - If `ba`, the standard difference equation is used for filtering with 
`scipy.signal.filtfilt`.
+          Can be unstable for high-order filters.
+        - If `sos`, a series of second-order filters is used for filtering 
with `scipy.signal.sosfiltfilt`.
+          Minimizes numerical precision errors for high-order filters, but is 
slower.
+
     kwargs : additional keyword arguments
         Additional arguments for `librosa.filters.semitone_filterbank()`
         (e.g., could be used to provide another set of `center_freqs` and 
`sample_rates`).
@@ -695,6 +700,11 @@
     bands_power : np.ndarray [shape=(n, t), dtype=dtype]
         Short-time mean-square power for the input signal.
 
+    Raises
+    ------
+    ParameterError
+        If `flayout` is not None, `ba`, or `sos`.
+
     See Also
     --------
     librosa.filters.semitone_filterbank
@@ -702,6 +712,7 @@
     librosa.filters.mr_frequencies
     librosa.core.cqt
     scipy.signal.filtfilt
+    scipy.signal.sosfiltfilt
 
     Examples
     --------
@@ -715,6 +726,14 @@
     >>> plt.tight_layout()
     '''
 
+    if flayout is None:
+        warnings.warn('Default filter layout for `iirt` is `ba`, but will be 
`sos` in 0.7.',
+                      FutureWarning)
+        flayout = 'ba'
+
+    elif flayout not in ('ba', 'sos'):
+        raise ParameterError('Unsupported flayout={}'.format(flayout))
+
     # check audio input
     util.valid_audio(y)
 
@@ -727,7 +746,7 @@
         y = np.pad(y, int(hop_length), mode=pad_mode)
 
     # get the semitone filterbank
-    filterbank_ct, sample_rates = semitone_filterbank(tuning=tuning, **kwargs)
+    filterbank_ct, sample_rates = semitone_filterbank(tuning=tuning, 
flayout=flayout, **kwargs)
 
     # create three downsampled versions of the audio signal
     y_resampled = []
@@ -750,8 +769,12 @@
         # filter the signal
         cur_sr_idx = np.flatnonzero(y_srs == cur_sr)[0]
 
-        cur_filter_output = scipy.signal.filtfilt(cur_filter[0], cur_filter[1],
-                                                  y_resampled[cur_sr_idx])
+        if flayout == 'ba':
+            cur_filter_output = scipy.signal.filtfilt(cur_filter[0], 
cur_filter[1],
+                                                      y_resampled[cur_sr_idx])
+        elif flayout == 'sos':
+            cur_filter_output = scipy.signal.sosfiltfilt(cur_filter,
+                                                         
y_resampled[cur_sr_idx])
 
         # frame the current filter output
         cur_frames = util.frame(np.ascontiguousarray(cur_filter_output),
@@ -1262,7 +1285,9 @@
         x_exp = np.clip(x_exp, float(t_min) / n, x[-1])
 
     # Make sure that all sample points are unique
-    assert len(np.unique(x_exp)) == len(x_exp)
+    # This should never happen!
+    if len(np.unique(x_exp)) != len(x_exp):
+        raise RuntimeError('Redundant sample positions in Mellin transform')
 
     # Resample the signal
     y_res = f_interp(x_exp)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/librosa-0.6.2/librosa/display.py 
new/librosa-0.6.3/librosa/display.py
--- old/librosa-0.6.2/librosa/display.py        2018-08-03 16:05:35.000000000 
+0200
+++ new/librosa-0.6.3/librosa/display.py        2019-02-13 22:28:41.000000000 
+0100
@@ -50,7 +50,15 @@
     ----------
     lag : bool
         If `True`, then the time axis is interpreted in lag coordinates.
-        Anything past the mid-point will be converted to negative time.
+        Anything past the midpoint will be converted to negative time.
+
+    unit : str or None
+        Abbreviation of the physical unit for axis labels and ticks.
+        Either equal to `s` (seconds) or `ms` (milliseconds) or None (default).
+        If set to None, the resulting TimeFormatter object adapts its string
+        representation to the duration of the underlying time range:
+        `hh:mm:ss` above 3600 seconds; `mm:ss` between 60 and 3600 seconds;
+        and `ss` below 60 seconds.
 
 
     See also
@@ -72,6 +80,16 @@
     >>> ax.xaxis.set_major_formatter(librosa.display.TimeFormatter())
     >>> ax.set_xlabel('Time')
 
+    Manually set the physical time unit of the x-axis to milliseconds
+
+    >>> times = np.arange(100)
+    >>> values = np.random.randn(len(times))
+    >>> plt.figure()
+    >>> ax = plt.gca()
+    >>> ax.plot(times, values)
+    >>> ax.xaxis.set_major_formatter(librosa.display.TimeFormatter(unit='ms'))
+    >>> ax.set_xlabel('Time (ms)')
+
     For lag plots
 
     >>> times = np.arange(60)
@@ -83,8 +101,12 @@
     >>> ax.set_xlabel('Lag')
     '''
 
-    def __init__(self, lag=False):
+    def __init__(self, lag=False, unit=None):
 
+        if unit not in ['s', 'ms', None]:
+            raise ParameterError('Unknown time unit: {}'.format(unit))
+
+        self.unit = unit
         self.lag = lag
 
     def __call__(self, x, pos=None):
@@ -105,15 +127,20 @@
             value = x
             sign = ''
 
-        if vmax - vmin > 3600:
-            s = '{:d}:{:02d}:{:02d}'.format(int(value / 3600.0),
-                                            int(np.mod(value / 60.0, 60)),
-                                            int(np.mod(value, 60)))
-        elif vmax - vmin > 60:
-            s = '{:d}:{:02d}'.format(int(value / 60.0),
-                                     int(np.mod(value, 60)))
+        if self.unit == 's':
+            s = '{:.3g}'.format(value)
+        elif self.unit == 'ms':
+            s = '{:.3g}'.format(value * 1000)
         else:
-            s = '{:.2g}'.format(value)
+            if vmax - vmin > 3600:
+                s = '{:d}:{:02d}:{:02d}'.format(int(value / 3600.0),
+                                                int(np.mod(value / 60.0, 60)),
+                                                int(np.mod(value, 60)))
+            elif vmax - vmin > 60:
+                s = '{:d}:{:02d}'.format(int(value / 60.0),
+                                         int(np.mod(value, 60)))
+            else:
+                s = '{:.2g}'.format(value)
 
         return '{:s}{:s}'.format(sign, s)
 
@@ -361,7 +388,7 @@
         Axes to plot on instead of the default `plt.gca()`.
 
     offset : float
-        Horizontal offset (in time) to start the waveform plot
+        Horizontal offset (in seconds) to start the waveform plot
 
     max_sr : number > 0 [scalar]
         Maximum sampling rate for the visualization
@@ -446,6 +473,7 @@
     locs = offset + core.frames_to_time(np.arange(len(y_top)),
                                         sr=sr,
                                         hop_length=hop_length)
+
     out = axes.fill_between(locs, y_bottom, y_top, **kwargs)
 
     axes.set_xlim([locs.min(), locs.max()])
@@ -509,15 +537,18 @@
         - 'tonnetz' : axes are labeled by Tonnetz dimensions (0-5)
         - 'frames' : markers are shown as frame counts.
 
-
         Time types:
 
         - 'time' : markers are shown as milliseconds, seconds,
-          minutes, or hours
-        - 'lag' : like time, but past the half-way point counts
-          as negative values.
+          minutes, or hours.
+          Values are plotted in units of seconds.
+        - 's' : markers are shown as seconds.
+        - 'ms' : markers are shown as milliseconds.
 
-        All time types are plotted in units of seconds.
+        - 'lag' : like time, but past the halfway point counts
+          as negative values.
+        - 'lag_s' : same as lag, but in seconds.
+        - 'lag_ms' : same as lag, but in milliseconds.
 
         Other:
 
@@ -730,7 +761,11 @@
                  'cqt_note': __coord_cqt_hz,
                  'chroma': __coord_chroma,
                  'time': __coord_time,
+                 's': __coord_time,
+                 'ms': __coord_time,
                  'lag': __coord_time,
+                 'lag_s': __coord_time,
+                 'lag_ms': __coord_time,
                  'tonnetz': __coord_n,
                  'off': __coord_n,
                  'tempo': __coord_tempo,
@@ -739,7 +774,6 @@
 
     if ax_type not in coord_map:
         raise ParameterError('Unknown axis type: {}'.format(ax_type))
-
     return coord_map[ax_type](n, **kwargs)
 
 
@@ -818,17 +852,41 @@
         axis.set_label_text('BPM')
 
     elif ax_type == 'time':
-        axis.set_major_formatter(TimeFormatter(lag=False))
+        axis.set_major_formatter(TimeFormatter(unit=None, lag=False))
         axis.set_major_locator(MaxNLocator(prune=None,
                                            steps=[1, 1.5, 5, 6, 10]))
         axis.set_label_text('Time')
 
+    elif ax_type == 's':
+        axis.set_major_formatter(TimeFormatter(unit='s', lag=False))
+        axis.set_major_locator(MaxNLocator(prune=None,
+                                           steps=[1, 1.5, 5, 6, 10]))
+        axis.set_label_text('Time (s)')
+
+    elif ax_type == 'ms':
+        axis.set_major_formatter(TimeFormatter(unit='ms', lag=False))
+        axis.set_major_locator(MaxNLocator(prune=None,
+                                           steps=[1, 1.5, 5, 6, 10]))
+        axis.set_label_text('Time (ms)')
+
     elif ax_type == 'lag':
-        axis.set_major_formatter(TimeFormatter(lag=True))
+        axis.set_major_formatter(TimeFormatter(unit=None, lag=True))
         axis.set_major_locator(MaxNLocator(prune=None,
                                            steps=[1, 1.5, 5, 6, 10]))
         axis.set_label_text('Lag')
 
+    elif ax_type == 'lag_s':
+        axis.set_major_formatter(TimeFormatter(unit='s', lag=True))
+        axis.set_major_locator(MaxNLocator(prune=None,
+                                           steps=[1, 1.5, 5, 6, 10]))
+        axis.set_label_text('Lag (s)')
+
+    elif ax_type == 'lag_ms':
+        axis.set_major_formatter(TimeFormatter(unit='ms', lag=True))
+        axis.set_major_locator(MaxNLocator(prune=None,
+                                           steps=[1, 1.5, 5, 6, 10]))
+        axis.set_label_text('Lag (ms)')
+
     elif ax_type == 'cqt_note':
         axis.set_major_formatter(NoteFormatter())
         axis.set_major_locator(LogLocator(base=2.0))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/librosa-0.6.2/librosa/effects.py 
new/librosa-0.6.3/librosa/effects.py
--- old/librosa-0.6.2/librosa/effects.py        2018-08-03 20:45:54.000000000 
+0200
+++ new/librosa-0.6.3/librosa/effects.py        2018-12-29 16:15:08.000000000 
+0100
@@ -412,9 +412,9 @@
     y_mono = core.to_mono(y)
 
     # Compute the MSE for the signal
-    mse = feature.rmse(y=y_mono,
-                       frame_length=frame_length,
-                       hop_length=hop_length)**2
+    mse = feature.rms(y=y_mono,
+                      frame_length=frame_length,
+                      hop_length=hop_length)**2
 
     return (core.power_to_db(mse.squeeze(),
                              ref=ref,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/librosa-0.6.2/librosa/feature/__init__.py 
new/librosa-0.6.3/librosa/feature/__init__.py
--- old/librosa-0.6.2/librosa/feature/__init__.py       2018-05-24 
15:32:27.000000000 +0200
+++ new/librosa-0.6.3/librosa/feature/__init__.py       2018-12-29 
16:15:08.000000000 +0100
@@ -15,6 +15,7 @@
     chroma_cens
     melspectrogram
     mfcc
+    rms
     rmse
     spectral_centroid
     spectral_bandwidth
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/librosa-0.6.2/librosa/feature/spectral.py 
new/librosa-0.6.3/librosa/feature/spectral.py
--- old/librosa-0.6.2/librosa/feature/spectral.py       2018-07-06 
20:07:15.000000000 +0200
+++ new/librosa-0.6.3/librosa/feature/spectral.py       2019-02-13 
22:28:41.000000000 +0100
@@ -10,6 +10,7 @@
 from .. import util
 from .. import filters
 from ..util.exceptions import ParameterError
+from ..util.decorators import moved
 
 from ..core.time_frequency import fft_frequencies
 from ..core.audio import zero_crossings, to_mono
@@ -24,6 +25,7 @@
            'spectral_rolloff',
            'spectral_flatness',
            'poly_features',
+           'rms',
            'rmse',
            'zero_crossing_rate',
            'chroma_stft',
@@ -602,13 +604,13 @@
     return gmean / amean
 
 
-def rmse(y=None, S=None, frame_length=2048, hop_length=512,
-         center=True, pad_mode='reflect'):
-    '''Compute root-mean-square (RMS) energy for each frame, either from the
+def rms(y=None, S=None, frame_length=2048, hop_length=512,
+        center=True, pad_mode='reflect'):
+    '''Compute root-mean-square (RMS) value for each frame, either from the
     audio samples `y` or from a spectrogram `S`.
 
-    Computing the energy from audio samples is faster as it doesn't require a
-    STFT calculation. However, using a spectrogram will give a more accurate
+    Computing the RMS value from audio samples is faster as it doesn't require
+    a STFT calculation. However, using a spectrogram will give a more accurate
     representation of energy over time because its frames can be windowed,
     thus prefer using `S` if it's already available.
 
@@ -646,13 +648,13 @@
     Examples
     --------
     >>> y, sr = librosa.load(librosa.util.example_audio_file())
-    >>> librosa.feature.rmse(y=y)
+    >>> librosa.feature.rms(y=y)
     array([[ 0.   ,  0.056, ...,  0.   ,  0.   ]], dtype=float32)
 
     Or from spectrogram input
 
     >>> S, phase = librosa.magphase(librosa.stft(y))
-    >>> rms = librosa.feature.rmse(S=S)
+    >>> rms = librosa.feature.rms(S=S)
 
     >>> import matplotlib.pyplot as plt
     >>> plt.figure()
@@ -668,10 +670,10 @@
     >>> plt.tight_layout()
 
     Use a STFT window of constant ones and no frame centering to get consistent
-    results with the RMS energy computed from the audio samples `y`
+    results with the RMS computed from the audio samples `y`
 
     >>> S = librosa.magphase(librosa.stft(y, window=np.ones, center=False))[0]
-    >>> librosa.feature.rmse(S=S)
+    >>> librosa.feature.rms(S=S)
 
     '''
     if y is not None and S is not None:
@@ -693,6 +695,9 @@
     return np.sqrt(np.mean(np.abs(x)**2, axis=0, keepdims=True))
 
 
+rmse = moved('librosa.feature.rmse', '0.6.3', '0.7.0')(rms)
+
+
 def poly_features(y=None, sr=22050, S=None, n_fft=2048, hop_length=512,
                   order=1, freq=None):
     '''Get coefficients of fitting an nth-order polynomial to the columns
@@ -1094,11 +1099,20 @@
 def chroma_cens(y=None, sr=22050, C=None, hop_length=512, fmin=None,
                 tuning=None, n_chroma=12,
                 n_octaves=7, bins_per_octave=None, cqt_mode='full', 
window=None,
-                norm=2, win_len_smooth=41):
+                norm=2, win_len_smooth=41, smoothing_window='hann'):
     r'''Computes the chroma variant "Chroma Energy Normalized" (CENS), 
following [1]_.
 
+    To compute CENS features, following steps are taken after obtaining chroma 
vectors using `chroma_cqt`:
+    1. L-1 normalization of each chroma vector
+    2. Quantization of amplitude based on "log-like" amplitude thresholds
+    3. (optional) Smoothing with sliding window. Default window length = 41 
frames
+    4. (not implemented) Downsampling
+
+    CENS features are robust to dynamics, timbre and articulation, thus these 
are commonly used in audio
+    matching and retrieval applications.
+
     .. [1] Meinard Müller and Sebastian Ewert
-           Chroma Toolbox: MATLAB implementations for extracting variants of 
chroma-based audio features
+           "Chroma Toolbox: MATLAB implementations for extracting variants of 
chroma-based audio features"
            In Proceedings of the International Conference on Music Information 
Retrieval (ISMIR), 2011.
 
     Parameters
@@ -1141,10 +1155,14 @@
     cqt_mode : ['full', 'hybrid']
         Constant-Q transform mode
 
-    win_len_smooth : int > 0
-        Length of temporal smoothing window.
+    win_len_smooth : int > 0 or None
+        Length of temporal smoothing window. `None` disables temporal 
smoothing.
         Default: 41
 
+    smoothing_window : str, float or tuple
+        Type of window function for temporal smoothing. See 
`filters.get_window` for possible inputs.
+        Default: 'hann'
+
     Returns
     -------
     chroma_cens : np.ndarray [shape=(n_chroma, t)]
@@ -1158,6 +1176,9 @@
     chroma_stft
         Compute a chromagram from an STFT spectrogram or waveform.
 
+    filters.get_window
+        Compute a window function.
+
     Examples
     --------
     Compare standard cqt chroma to CENS.
@@ -1180,6 +1201,9 @@
     >>> plt.colorbar()
     >>> plt.tight_layout()
     '''
+    if not ((win_len_smooth is None) or (isinstance(win_len_smooth, int) and 
win_len_smooth > 0)):
+        raise ParameterError('win_len_smooth={} must be a positive integer or 
None'.format(win_len_smooth))
+
     chroma = chroma_cqt(y=y, C=C, sr=sr,
                         hop_length=hop_length,
                         fmin=fmin,
@@ -1203,13 +1227,16 @@
     for cur_quant_step_idx, cur_quant_step in enumerate(QUANT_STEPS):
         chroma_quant += (chroma > cur_quant_step) * 
QUANT_WEIGHTS[cur_quant_step_idx]
 
-    # Apply temporal smoothing
-    win = filters.get_window('hann', win_len_smooth + 2, fftbins=False)
-    win /= np.sum(win)
-    win = np.atleast_2d(win)
+    if win_len_smooth:
+        # Apply temporal smoothing
+        win = filters.get_window(smoothing_window, win_len_smooth + 2, 
fftbins=False)
+        win /= np.sum(win)
+        win = np.atleast_2d(win)
 
-    cens = scipy.signal.convolve2d(chroma_quant, win,
-                                   mode='same', boundary='fill')
+        cens = scipy.signal.convolve2d(chroma_quant, win,
+                                       mode='same', boundary='fill')
+    else:
+        cens = chroma_quant
 
     # L2-Normalization
     return util.normalize(cens, norm=norm, axis=0)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/librosa-0.6.2/librosa/filters.py 
new/librosa-0.6.3/librosa/filters.py
--- old/librosa-0.6.2/librosa/filters.py        2018-08-03 16:05:35.000000000 
+0200
+++ new/librosa-0.6.3/librosa/filters.py        2018-12-03 17:51:54.000000000 
+0100
@@ -909,7 +909,7 @@
 
 @cache(level=10)
 def _multirate_fb(center_freqs=None, sample_rates=None, Q=25.0,
-                  passband_ripple=1, stopband_attenuation=50, ftype='ellip'):
+                  passband_ripple=1, stopband_attenuation=50, ftype='ellip', 
flayout='ba'):
     r'''Helper function to construct a multirate filterbank.
 
      A filter bank consists of multiple band-pass filters which divide the 
input signal
@@ -944,6 +944,16 @@
         The type of IIR filter to design
         See `scipy.signal.iirdesign` for details.
 
+    flayout : string
+        Valid `output` argument for `scipy.signal.iirdesign`.
+        - If `ba`, returns numerators/denominators of the transfer functions,
+          used for filtering with `scipy.signal.filtfilt`.
+          Can be unstable for high-order filters.
+        - If `sos`, returns a series of second-order filters,
+          used for filtering with `scipy.signal.sosfiltfilt`.
+          Minimizes numerical precision errors for high-order filters, but is 
slower.
+        - If `zpk`, returns zeros, poles, and system gains of the transfer 
functions.
+
     Returns
     -------
     filterbank : list [shape=(n,), dtype=float]
@@ -988,7 +998,7 @@
 
         cur_filter = scipy.signal.iirdesign(passband_freqs, stopband_freqs,
                                             passband_ripple, 
stopband_attenuation,
-                                            analog=False, ftype=ftype, 
output='ba')
+                                            analog=False, ftype=ftype, 
output=flayout)
 
         filterbank.append(cur_filter)
 
@@ -1043,7 +1053,7 @@
     return center_freqs, sample_rates
 
 
-def semitone_filterbank(center_freqs=None, tuning=0.0, sample_rates=None, 
**kwargs):
+def semitone_filterbank(center_freqs=None, tuning=0.0, sample_rates=None, 
flayout='ba', **kwargs):
     r'''Constructs a multirate filterbank of infinite-impulse response (IIR)
     band-pass filters at user-defined center frequencies and sample rates.
 
@@ -1078,6 +1088,12 @@
     sample_rates : np.ndarray [shape=(n,), dtype=float]
         Sample rates of each filter in the multirate filterbank.
 
+    flayout : string
+        - If `ba`, the standard difference equation is used for filtering with 
`scipy.signal.filtfilt`.
+          Can be unstable for high-order filters.
+        - If `sos`, a series of second-order filters is used for filtering 
with `scipy.signal.sosfiltfilt`.
+          Minimizes numerical precision errors for high-order filters, but is 
slower.
+
     kwargs : additional keyword arguments
         Additional arguments to the private function `_multirate_fb()`.
 
@@ -1119,7 +1135,8 @@
     if (center_freqs is None) and (sample_rates is None):
         center_freqs, sample_rates = mr_frequencies(tuning)
 
-    filterbank, fb_sample_rates = _multirate_fb(center_freqs=center_freqs, 
sample_rates=sample_rates, **kwargs)
+    filterbank, fb_sample_rates = _multirate_fb(center_freqs=center_freqs, 
sample_rates=sample_rates,
+                                                flayout=flayout, **kwargs)
 
     return filterbank, fb_sample_rates
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/librosa-0.6.2/librosa/onset.py 
new/librosa-0.6.3/librosa/onset.py
--- old/librosa-0.6.2/librosa/onset.py  2018-08-03 16:05:35.000000000 +0200
+++ new/librosa-0.6.3/librosa/onset.py  2018-12-29 16:15:08.000000000 +0100
@@ -361,9 +361,9 @@
     ...                                        backtrack=False)
     >>> # Backtrack the events using the onset envelope
     >>> onset_bt = librosa.onset.onset_backtrack(onset_raw, oenv)
-    >>> # Backtrack the events using the RMS energy
-    >>> rmse = librosa.feature.rmse(S=np.abs(librosa.stft(y=y)))
-    >>> onset_bt_rmse = librosa.onset.onset_backtrack(onset_raw, rmse[0])
+    >>> # Backtrack the events using the RMS values
+    >>> rms = librosa.feature.rms(S=np.abs(librosa.stft(y=y)))
+    >>> onset_bt_rms = librosa.onset.onset_backtrack(onset_raw, rms[0])
 
     >>> # Plot the results
     >>> import matplotlib.pyplot as plt
@@ -374,8 +374,8 @@
     >>> plt.vlines(onset_bt, 0, oenv.max(), label='Backtracked', color='r')
     >>> plt.legend(frameon=True, framealpha=0.75)
     >>> plt.subplot(2,1,2)
-    >>> plt.plot(rmse[0], label='RMSE')
-    >>> plt.vlines(onset_bt_rmse, 0, rmse.max(), label='Backtracked (RMSE)', 
color='r')
+    >>> plt.plot(rms[0], label='RMS')
+    >>> plt.vlines(onset_bt_rms, 0, rms.max(), label='Backtracked (RMS)', 
color='r')
     >>> plt.legend(frameon=True, framealpha=0.75)
     '''
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/librosa-0.6.2/librosa/output.py 
new/librosa-0.6.3/librosa/output.py
--- old/librosa-0.6.2/librosa/output.py 2018-05-24 15:32:27.000000000 +0200
+++ new/librosa-0.6.3/librosa/output.py 2018-11-23 18:45:04.000000000 +0100
@@ -196,8 +196,10 @@
     path : str
         path to save the output wav file
 
-    y : np.ndarray [shape=(n,) or (2,n)]
-        audio time series (mono or stereo)
+    y : np.ndarray [shape=(n,) or (2,n), dtype=np.float]
+        audio time series (mono or stereo).
+
+        Note that only floating-point values are supported.
 
     sr : int > 0 [scalar]
         sampling rate of `y`
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/librosa-0.6.2/librosa/segment.py 
new/librosa-0.6.3/librosa/segment.py
--- old/librosa-0.6.2/librosa/segment.py        2018-05-24 15:32:27.000000000 
+0200
+++ new/librosa-0.6.3/librosa/segment.py        2018-11-14 04:11:59.000000000 
+0100
@@ -607,7 +607,7 @@
 
     for seg_start, seg_end in zip(frames[:-1], frames[1:]):
         idx_slices[axis] = slice(seg_start, seg_end)
-        boundaries.extend(seg_start + agglomerative(data[idx_slices],
+        boundaries.extend(seg_start + agglomerative(data[tuple(idx_slices)],
                                                     min(seg_end - seg_start, 
n_segments),
                                                     axis=axis))
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/librosa-0.6.2/librosa/sequence.py 
new/librosa-0.6.3/librosa/sequence.py
--- old/librosa-0.6.2/librosa/sequence.py       2018-05-24 15:32:27.000000000 
+0200
+++ new/librosa-0.6.3/librosa/sequence.py       2019-02-13 22:28:41.000000000 
+0100
@@ -165,7 +165,7 @@
 
         try:
             C = cdist(X.T, Y.T, metric=metric)
-        except ValueError as e:
+        except ValueError:
             msg = ('scipy.spatial.distance.cdist returned an error.\n'
                    'Please provide your input in the form X.shape=(K, N) and 
Y.shape=(K, M).\n'
                    '1-dimensional sequences should be reshaped to X.shape=(1, 
N) and Y.shape=(1, M).')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/librosa-0.6.2/librosa/util/matching.py 
new/librosa-0.6.3/librosa/util/matching.py
--- old/librosa-0.6.2/librosa/util/matching.py  2018-05-24 15:32:27.000000000 
+0200
+++ new/librosa-0.6.3/librosa/util/matching.py  2019-02-13 22:28:41.000000000 
+0100
@@ -204,8 +204,10 @@
 
     try:
         return __match_intervals(intervals_from, intervals_to, strict=strict)
-    except ParameterError as exc:
-        six.reraise(ParameterError, ParameterError('Unable to match intervals 
with strict={}'.format(strict)), sys.exc_info()[2])
+    except ParameterError:
+        six.reraise(ParameterError,
+                    ParameterError('Unable to match intervals with 
strict={}'.format(strict)),
+                    sys.exc_info()[2])
 
 
 def match_events(events_from, events_to, left=True, right=True):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/librosa-0.6.2/librosa/util/utils.py 
new/librosa-0.6.3/librosa/util/utils.py
--- old/librosa-0.6.2/librosa/util/utils.py     2018-08-03 20:45:54.000000000 
+0200
+++ new/librosa-0.6.3/librosa/util/utils.py     2019-02-13 22:28:41.000000000 
+0100
@@ -780,6 +780,15 @@
 def localmax(x, axis=0):
     """Find local maxima in an array `x`.
 
+    An element `x[i]` is considered a local maximum if the following
+    conditions are met:
+
+    - `x[i] > x[i-1]`
+    - `x[i] >= x[i+1]`
+
+    Note that the first condition is strict, and that the first element
+    `x[0]` will never be considered as a local maximum.
+
     Examples
     --------
     >>> x = np.array([1, 0, 1, 2, -1, 0, -2, 1])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/librosa-0.6.2/librosa/version.py 
new/librosa-0.6.3/librosa/version.py
--- old/librosa-0.6.2/librosa/version.py        2018-08-09 16:52:35.000000000 
+0200
+++ new/librosa-0.6.3/librosa/version.py        2019-02-13 22:28:41.000000000 
+0100
@@ -6,7 +6,7 @@
 import importlib
 
 short_version = '0.6'
-version = '0.6.2'
+version = '0.6.3'
 
 
 def __get_mod_version(modname):
@@ -35,14 +35,18 @@
                  'joblib',
                  'decorator',
                  'six',
-                 'resampy']
+                 'resampy',
+                 'numba']
 
     extra_deps = ['numpydoc',
                   'sphinx',
                   'sphinx_rtd_theme',
                   'sphinxcontrib.versioning',
-                  'matplotlib',
-                  'numba']
+                  'sphinx-gallery',
+                  'pytest',
+                  'pytest-mpl',
+                  'pytest-cov',
+                  'matplotlib']
 
     print('INSTALLED VERSIONS')
     print('------------------')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/librosa-0.6.2/librosa.egg-info/PKG-INFO 
new/librosa-0.6.3/librosa.egg-info/PKG-INFO
--- old/librosa-0.6.2/librosa.egg-info/PKG-INFO 2018-08-09 17:23:07.000000000 
+0200
+++ new/librosa-0.6.3/librosa.egg-info/PKG-INFO 2019-02-13 22:29:00.000000000 
+0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: librosa
-Version: 0.6.2
+Version: 0.6.3
 Summary: Python module for audio and music processing
 Home-page: http://github.com/librosa/librosa
 Author: Brian McFee
@@ -134,6 +134,6 @@
 Classifier: Programming Language :: Python :: 3.5
 Classifier: Programming Language :: Python :: 3.6
 Description-Content-Type: text/markdown
-Provides-Extra: docs
 Provides-Extra: display
 Provides-Extra: tests
+Provides-Extra: docs
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/librosa-0.6.2/librosa.egg-info/SOURCES.txt 
new/librosa-0.6.3/librosa.egg-info/SOURCES.txt
--- old/librosa-0.6.2/librosa.egg-info/SOURCES.txt      2018-08-09 
17:23:07.000000000 +0200
+++ new/librosa-0.6.3/librosa.egg-info/SOURCES.txt      2019-02-13 
22:29:00.000000000 +0100
@@ -1,3 +1,7 @@
+AUTHORS.md
+CONTRIBUTING.md
+LICENSE.md
+MANIFEST.in
 README.md
 setup.cfg
 setup.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/librosa-0.6.2/librosa.egg-info/requires.txt 
new/librosa-0.6.3/librosa.egg-info/requires.txt
--- old/librosa-0.6.2/librosa.egg-info/requires.txt     2018-08-09 
17:23:07.000000000 +0200
+++ new/librosa-0.6.3/librosa.egg-info/requires.txt     2019-02-13 
22:29:00.000000000 +0100
@@ -1,6 +1,6 @@
 audioread>=2.0.0
 numpy>=1.8.0
-scipy>=0.14.0
+scipy>=1.0.0
 scikit-learn!=0.19.0,>=0.14.0
 joblib>=0.12
 decorator>=3.0.0
@@ -21,3 +21,6 @@
 
 [tests]
 matplotlib>=2.1
+pytest-mpl
+pytest-cov
+pytest<4
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/librosa-0.6.2/setup.cfg new/librosa-0.6.3/setup.cfg
--- old/librosa-0.6.2/setup.cfg 2018-08-09 17:23:07.000000000 +0200
+++ new/librosa-0.6.3/setup.cfg 2019-02-13 22:29:00.000000000 +0100
@@ -1,6 +1,11 @@
 [pycodestyle]
 max-line-length = 119
 
+[tool:pytest]
+addopts = --cov-report term-missing --cov librosa --disable-pytest-warnings
+filterwarnings = 
+       ignore:Using a non-tuple sequence:FutureWarning:scipy.*
+
 [egg_info]
 tag_build = 
 tag_date = 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/librosa-0.6.2/setup.py new/librosa-0.6.3/setup.py
--- old/librosa-0.6.2/setup.py  2018-06-26 16:59:24.000000000 +0200
+++ new/librosa-0.6.3/setup.py  2018-12-03 17:51:54.000000000 +0100
@@ -1,8 +1,16 @@
 from setuptools import setup, find_packages
+import sys
 
-import imp
 
-version = imp.load_source('librosa.version', 'librosa/version.py')
+if sys.version_info.major == 2:
+    import imp
+
+    version = imp.load_source('librosa.version', 'librosa/version.py')
+else:
+    from importlib.machinery import SourceFileLoader
+
+    version = SourceFileLoader('librosa.version',
+                               'librosa/version.py').load_module()
 
 with open('README.md', 'r') as fdesc:
     long_description = fdesc.read()
@@ -37,7 +45,7 @@
     install_requires=[
         'audioread >= 2.0.0',
         'numpy >= 1.8.0',
-        'scipy >= 0.14.0',
+        'scipy >= 1.0.0',
         'scikit-learn >= 0.14.0, != 0.19.0',
         'joblib >= 0.12',
         'decorator >= 3.0.0',
@@ -50,7 +58,10 @@
                  'matplotlib >= 2.0.0',
                  'sphinxcontrib-versioning >= 2.2.1',
                  'sphinx-gallery'],
-        'tests': ['matplotlib >= 2.1'],
+        'tests': ['matplotlib >= 2.1',
+                  'pytest-mpl',
+                  'pytest-cov',
+                  'pytest < 4'],
         'display': ['matplotlib >= 1.5'],
     }
 )


Reply via email to