On Sat, Jan 09, 2021 at 07:56:24AM -0500, Alan G. Isaac wrote: > This comment misses the key point, which is: > `assertSequenceEqual` should not rely > on behavior that is not ensured for typing.Sequence, > but it currently does. The failure on a numpy array > simply exposes this problem.
You are making that as a definitive statement of fact, but it's not clear to me that this is actually true. There are at least two problems with your position: (1) The Sequence ABC requires only the *presence* of certain methods, not their semantics. We're entitled to assume the obvious, implicit, sequence-like semantics. If a class implements the methods, but provides unexpected semantics, anything could happen. (2) Equality is a fundament operation that we are entitled to assume that *all* objects support. See above: we're entitled to assume the standard semantics for equality too. Objects which have unusual semantics for equality, such as float NANs, may behave in unexpected ways. So I don't think that we are *required* to support unusual sequences like numpy. On the other hand, I think that we can extend assertSequenceEqual to support numpy arrays quite easily. A quick glance at the source code: https://github.com/python/cpython/blob/3.9/Lib/unittest/case.py suggests that all we need do is catch a potential ValueError around the sequence equality test, and fall back on the element by element processing: try: if seq1 == seq1: return except ValueError: # Possibly a numpy array? pass I don't think that this is a breaking change, and I think it should do what you expect. I don't believe that we need to accept your reasoning regarding the Sequence ABC to accept this enhancement. One need only accept that although numpy's array equality semantics are non-standard and unhelpful, numpy is an important third-party library, and the cost of supporting sequences like numpy arrays is negligible. -- Steve _______________________________________________ Python-Dev mailing list -- python-dev@python.org To unsubscribe send an email to python-dev-le...@python.org https://mail.python.org/mailman3/lists/python-dev.python.org/ Message archived at https://mail.python.org/archives/list/python-dev@python.org/message/75ZQVUDIXIUS6EWTJWPA6II2KU55J6IH/ Code of Conduct: http://python.org/psf/codeofconduct/