I think Python is actually checking the "isLowercase" property (defined in Unicode section 3.13), rather than checking the "General_Category" property. Which, like, good; that's better behavior. But that's not what the docs/comments say it's doing.
No, that's not quite right either. I'm going to have to read+understand makeunicodedata.py, aren't I?
Ah, it's using the "Lowercase" property.
Let that sink in.
#Unicode has a Boolean "isLowercase" property and a Boolean "Lowercase" property, AND THEY'RE NOT THE SAME.
(For example, U+00AA "ª" has isUppercase=Yes but Uppercase=no)
The "isXXX" variants are "is this as XXX as it can be?"
ª (U+00AA) is clearly lowercase, so it has Uppercase=No. But there's no uppercase equivalent of it, so it has isUppercase=Yes, because it can't get any more uppercase.