Is there any commonly used or even imaginable useful type that uses them in weirder ways than set and float (which are both partially ordered) or np.array (where they aren’t even Boolean-values)? In particular, transitivity keeps coming up, but all of those examples are transitive (it’s never true that a<b and true that b<c without being true than a<c for any of them). If there are such uses it might be important to distinguish them, but if there aren’t, it doesn’t seem unreasonable for PartiallyOrdered to “wrongly” pick up hypothetical pathological types that no one will ever write in exchange for automatically being right about every actual type anyone uses. After all, Iterable is a virtual superclass of any type with __iter__, even if it returns the number 42 instead of an Iterator, and so on; technically every implicit ABC in Python is “wrong” like this, but in practice it doesn’t come up and implicit ABCs are very useful.

I think that np.array is a great example of something I wouldn't want to be PartiallyOrdered. An algorithm which requires PartiallyOrdered probably needs to use the results of comparisons as booleans and for np.array that will fail immediately. Same thing for pandas Series and DataFrames. Another example which comes to mind is SQLAlchemy columns which produce part of a query for the ORM - these presumably can be used as booleans but not in an informative way.

There are 3 possible ABCs: Comparable (has the operators, makes no promises about what they do), PartiallyOrdered, and TotallyOrdered. We could have all three. If we don't want that but we want to distinguish between TotallyOrdered and others, we need one of the other two. Which option is more useful? It's probably rare that someone specifically needs PartiallyOrdered and not the other two. But Comparable is just a protocol that anyone can implement.

I should note that I've never personally needed any of this, I'm just trying to imagine use cases. But I think a 'negative' ABC as I believe was originally proposed is the wrong path.