diff --git a/lib/matplotlib/backends/backend_pdf.py b/lib/matplotlib/backends/backend_pdf.py index 8bbe991bd1a1..c73f0e867101 100644 --- a/lib/matplotlib/backends/backend_pdf.py +++ b/lib/matplotlib/backends/backend_pdf.py @@ -18,6 +18,7 @@ import warnings import zlib from io import BytesIO +from functools import total_ordering import numpy as np from matplotlib.externals.six import unichr @@ -182,8 +183,8 @@ def pdfRepr(obj): # represented as Name objects. elif isinstance(obj, dict): r = [b"<<"] - r.extend([Name(key).pdfRepr() + b" " + pdfRepr(val) - for key, val in six.iteritems(obj)]) + r.extend([Name(key).pdfRepr() + b" " + pdfRepr(obj[key]) + for key in sorted(obj)]) r.append(b">>") return fill(r) @@ -243,6 +244,7 @@ def write(self, contents, file): write(b"\nendobj\n") +@total_ordering class Name(object): """PDF name object.""" __slots__ = ('name',) @@ -262,6 +264,15 @@ def __repr__(self): def __str__(self): return '/' + six.text_type(self.name) + def __eq__(self, other): + return isinstance(other, Name) and self.name == other.name + + def __lt__(self, other): + return isinstance(other, Name) and self.name < other.name + + def __hash__(self): + return hash(self.name) + @staticmethod def hexify(match): return '#%02x' % ord(match.group())