It seems that for almost (?) all scalar types it is implemented in a way like: ``` case RT_UNARY_OP_NOT: if (val != 0) { return mp_const_true;} else { return mp_const_false; } ``` With the effect of ``` >>> not 0 False ``` Python does not define **not** (http://docs.python.org/3.3/reference/datamodel.html#special-method-names), so we'd rather have RT_UNARY_OP_BOOL instead.