Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

get_backend() backward compatibility #11852

Copy link
Copy link
Closed
@ngoldbaum

Description

@ngoldbaum
Issue body actions

Under matplotlib 3.0.0rc1, the return value of matplotlib.get_backend() is a sentinel object:

In [2]: matplotlib.get_backend()
Out[2]: <object at 0x111292d50>

In [3]: backend = matplotlib.get_backend()

In [4]: backend.lower()
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-4-f3c7164fcd07> in <module>()
----> 1 backend.lower()

AttributeError: 'object' object has no attribute 'lower'

Under matplotlib 2.2.3 I get:

In [1]: import matplotlib

In [2]: matplotlib.get_backend()
Out[2]: 'MacOSX'

In [3]: backend = matplotlib.get_backend()

In [4]: backend.lower()
Out[4]: 'macosx'

For backward compatibility purposes it would be really nice if matplotlib 3.0.0 could return an object that at least acted like a string. In particular right now I'd like it to have a lower() method. I'd also like it if it had a nice __repr__ or __str__ implementation instead of printing out as an opaque object of type object.

The former is for backward compatibility, as the change breaks some of the yt plotting code --- in particular here's a failure from the test suite:

======================================================================
ERROR: Failure: AttributeError ('object' object has no attribute 'lower')
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/nose/failure.py", line 39, in runTest
    raise self.exc_val.with_traceback(self.tb)
  File "/usr/local/lib/python3.7/site-packages/nose/loader.py", line 418, in loadTestsFromName
    addr.filename, addr.module)
  File "/usr/local/lib/python3.7/site-packages/nose/importer.py", line 47, in importFromPath
    return self.importFromDir(dir_path, fqname)
  File "/usr/local/lib/python3.7/site-packages/nose/importer.py", line 94, in importFromDir
    mod = load_module(part_fqname, fh, filename, desc)
  File "/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/imp.py", line 235, in load_module
    return load_source(name, filename, file)
  File "/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/imp.py", line 172, in load_source
    module = _load(spec)
  File "<frozen importlib._bootstrap>", line 696, in _load
  File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 728, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/Users/goldbaum/Documents/yt-git-fixes/yt/visualization/tests/test_color_maps.py", line 23, in <module>
    class TestColorMaps(unittest.TestCase):
  File "/Users/goldbaum/Documents/yt-git-fixes/yt/visualization/tests/test_color_maps.py", line 34, in TestColorMaps
    @requires_backend('Agg')
  File "/Users/goldbaum/Documents/yt-git-fixes/yt/testing.py", line 1143, in requires_backend
    if backend.lower() == matplotlib.get_backend().lower():
AttributeError: 'object' object has no attribute 'lower'

This is code that's internal to yt's test suite, but I wouldn't be at all surprised if there's other code out there that assumes matplotlib.get_backend() returns a string. For example:

https://github.com/search?q=matplotlib+get_backend+lower&type=Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    Release criticalFor bugs that make the library unusable (segfaults, incorrect plots, etc) and major regressions.For bugs that make the library unusable (segfaults, incorrect plots, etc) and major regressions.

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      Morty Proxy This is a proxified and sanitized view of the page, visit original site.