On 2021-11-09 00:27, Cameron Simpson wrote:
On 08Nov2021 23:32, MRAB <pyt...@mrabarnett.plus.com> wrote:
>On 2021-11-08 22:10, Cameron Simpson wrote:
>>>{} in {1:'a', 'b':2]   <-- TypeError because of hashability
>>>set() in {1, 2, 'a', 'b'}  <-- ditto
>>>[] in ['a', 'b', 1, 2]  <-- False
>>
>>Right. Also, the members are not dicts or sets, respectively.
>>
>More precisely, none of the keys are an empty set.

Aye, for the examples. But I was highlighting that the set/lists members
are a different type from the left-hand thing (empty set/list). A
category error, to my mind.

>>>SomeFlag.nothing in SomeFlag.something  <--  ???
>>
>>I would expect "true", myself.
>>
>I'm not so sure.
>
>A flag could be a member, but could a set of flags?

Probably one flavour should raise a TypeError then with this comparison.
I wouldn't want "member flag present in SomeFlag.something" and
"set-of-members present in SomeFlag.something" to both be valid, there
is so much scope for ambiguity/accidents there. I would rather punt the
"set-of-members present" off to "<"/"<=" if we want to say either (which
of course we should be able to say).

So: To me "SomeFlag.nothing" is a set of flags, empty. _Not_ an
individual flag (a member).

Which means that _if_ we had a subset/strict-subset test, I'd want
"SomeFlag.nothing in" to raise a TypeError, since we should use the
subset/strict-subset operator for that flavour.

Which means I'm backtracking to TypeError, not 'true". _Provided" this
is a "member in set" comparison.

Of course, I think resently we don't distinguish a flag combination name
(".nothing", ".red_and_blue"==0b11) from single flags overtly. If there
are trite, _fast_, way to test count_of_flags(flag_value)==1 ? i.e. can
"members" be automatically distinguished from flag combinations
(obviously such a definition would exclude a
combination-of-just-1-flag).

Are you asking whether there's a quick way to check if only 1 bit is set?

If yes, then the answer is yes:

    bitflags != 0 and (bitflags & (bitflags - 1)) == 0

>>I was going to digress about "<" vs "in". For sets, "<" means subset >>and
>>"in" means "element in set". That isn't exactly parallel to flags. What
>>if "SomeFlag.nothing < SomeFlag.something" meant a subset test? Would we
>>need "in" at all? Or is "<" out of the picture because FLags, or at
>>least IntFlags, might do numeric-like stuff with "<"?
>>
>Actually, '<' means _proper_ subset (not ==), '<=' means subset >(possibly ==).

Point taken. I'll try to be more precise. Warning: I'll become more
wordy.
_______________________________________________
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/VK4RPPJBAZJQ7Z7V3UVU6LE4DS4FJFUC/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to