function(self, other){
    if(isinstance(other, _b_.int)){
        if(other.__class__ === $B.long_int){
            return self > parseInt(other.value)
        }
        return self > other.valueOf()
    }
    if(isinstance(other,float)){return self > other}

    if(isinstance(other, _b_.bool)) {
      return self.valueOf() > _b_.bool.__hash__(other)
    }
    if(hasattr(other, "__int__") || hasattr(other, "__index__")) {
       return _b_.int.__gt__(self, $B.$GetInt(other))
    }

    // See if other has the opposite operator, eg <= for >
    var inv_op = getattr(other, "__le__", None)
    if(inv_op !== None){return inv_op(self)}

    throw _b_.TypeError.$factory(
        "unorderable types: float() > " + $B.class_name(other) + "()")
}