Repository: librosa/librosa

Issue:
matplotlib 3.7 breaks image comparison tests
**Describe the bug**

This is showing up in the final CI runs on #1666 , but the recent matplotlib 3.7 release is now triggering test failures on image comparison tests.

```
=================================== FAILURES ===================================
______________________________ test_specshow_vqt _______________________________
Error: Image files did not match.
  RMS Value: 38.581767218035345
  Expected:  
    /tmp/tmp3rx4i1kp/test_display.test_specshow_vqt/baseline.png
  Actual:    
    /tmp/tmp3rx4i1kp/test_display.test_specshow_vqt/result.png
  Difference:
    /tmp/tmp3rx4i1kp/test_display.test_specshow_vqt/result-failed-diff.png
  Tolerance: 
    6
___________________________ test_specshow_chromafjs ____________________________
Error: Image files did not match.
  RMS Value: 33.977947433674615
  Expected:  
    /tmp/tmp3rx4i1kp/test_display.test_specshow_chromafjs/baseline.png
  Actual:    
    /tmp/tmp3rx4i1kp/test_display.test_specshow_chromafjs/result.png
  Difference:
    /tmp/tmp3rx4i1kp/test_display.test_specshow_chromafjs/result-failed-diff.png
  Tolerance: 
    6
```
These tests previously worked on mpl 3.6.2 a few days ago.

This is only showing up with VQT and chroma/FJS, so my hunch is that something is amiss with fonts.

I'll try to get this reproducing in my local environment to sort it out.


Discussion:

Resolving patch:
diff --git a/librosa/version.py b/librosa/version.py
--- a/librosa/version.py
+++ b/librosa/version.py
@@ -6,7 +6,7 @@
 import importlib
 
 short_version = "0.10"
-version = "0.10.0rc0"
+version = "0.10.0rc1"
 
 
 def __get_mod_version(modname):
diff --git a/scripts/create_author_list.py b/scripts/create_author_list.py
new file mode 100644
--- /dev/null
+++ b/scripts/create_author_list.py
@@ -0,0 +1,39 @@
+#!/usr/bin/env python
+# -*- encoding: utf-8 -*-
+"""Script to retrieve contributors from GitHub API
+
+Initially generated by ChatGPT (Jan 30 version): https://help.openai.com/en/articles/6825453-chatgpt-release-notes
+"""
+
+import requests
+import operator
+
+def get_contributors(repo_owner, repo_name):
+    url = f"https://api.github.com/repos/{repo_owner}/{repo_name}/stats/contributors"
+    contributors = {}
+
+    while url:
+        response = requests.get(url)
+
+        if response.status_code != 200:
+            raise Exception(f"Failed to retrieve contributors: {response.json()['message']}")
+
+        for contributor in response.json():
+            contributions = contributor["weeks"]
+            mod_lines = sum([week["d"] + week["a"] for week in contributions])
+            contributors[contributor["author"]["login"]] = mod_lines
+
+        if "next" in response.links:
+            url = response.links["next"]["url"]
+        else:
+            url = None
+
+    return sorted(contributors.items(), key=operator.itemgetter(1), reverse=True)
+
+if __name__ == "__main__":
+    repo_owner = "librosa"
+    repo_name = "librosa"
+
+    contributors = get_contributors(repo_owner, repo_name)
+    for contributor, mod_lines in contributors:
+        print(f"{contributor:30s}|\t{mod_lines:7d} lines added/deleted")


Test patch:
diff --git a/tests/baseline_images/test_display/test_specshow_chromafjs.png b/tests/baseline_images/test_display/test_specshow_chromafjs.png
Binary files a/tests/baseline_images/test_display/test_specshow_chromafjs.png and b/tests/baseline_images/test_display/test_specshow_chromafjs.png differ
diff --git a/tests/baseline_images/test_display/test_specshow_vqt.png b/tests/baseline_images/test_display/test_specshow_vqt.png
Binary files a/tests/baseline_images/test_display/test_specshow_vqt.png and b/tests/baseline_images/test_display/test_specshow_vqt.png differ
diff --git a/tests/test_display.py b/tests/test_display.py
--- a/tests/test_display.py
+++ b/tests/test_display.py
@@ -1038,7 +1038,7 @@ def test_waveshow_deladaptor(y, sr):
 @pytest.mark.xfail(OLD_FT, reason=f"freetype version < {FT_VERSION}", strict=False)
 def test_specshow_vqt(C):
 
-    fig, ax = plt.subplots(nrows=4, figsize=(12, 10), constrained_layout=True)
+    fig, ax = plt.subplots(nrows=4, figsize=(12, 10))
 
     librosa.display.specshow(C, y_axis='vqt_hz', intervals="ji5", ax=ax[0])
     librosa.display.specshow(C, y_axis='vqt_note', intervals="ji5", ax=ax[1])
@@ -1074,7 +1074,7 @@ def test_specshow_chromafjs(C, sr):
 
     intervals = librosa.plimit_intervals(primes=[3, 5])
 
-    fig, ax = plt.subplots(nrows=2, figsize=(12, 8), constrained_layout=True)
+    fig, ax = plt.subplots(nrows=2, figsize=(12, 8))
 
     librosa.display.specshow(chroma, y_axis="chroma_fjs", intervals="ji5", ax=ax[0])
     librosa.display.specshow(chroma, y_axis="chroma_fjs", intervals=intervals, ax=ax[1])