def dehomogenize(self, w_vector, hint): if type(hint) is W_Fixnum and can_encode_int32(hint.value): new_strategy = FlonumTaggedVectorStrategy.singleton w_vector.set_strategy(new_strategy) w_vector.set_len(0) else: VectorStrategy.dehomogenize(self, w_vector, hint)
def fn_encode_nan(f1, i2): from rpython.rlib.longlong2float import can_encode_float, can_encode_int32 from rpython.rlib.longlong2float import encode_int32_into_longlong_nan from rpython.rlib.longlong2float import decode_int32_from_longlong_nan from rpython.rlib.longlong2float import is_int32_from_longlong_nan assert can_encode_float(f1) assert can_encode_int32(i2) l1 = float2longlong(f1) l2 = encode_int32_into_longlong_nan(i2) assert not is_int32_from_longlong_nan(l1) assert is_int32_from_longlong_nan(l2) f1b = longlong2float(l1) assert f1b == f1 or (math.isnan(f1b) and math.isnan(f1)) assert decode_int32_from_longlong_nan(l2) == i2 return 42
def fn_encode_nan(f1, i2): from rpython.rlib.longlong2float import can_encode_float, can_encode_int32 from rpython.rlib.longlong2float import encode_int32_into_longlong_nan from rpython.rlib.longlong2float import decode_int32_from_longlong_nan from rpython.rlib.longlong2float import is_int32_from_longlong_nan from rpython.rlib.rfloat import isnan assert can_encode_float(f1) assert can_encode_int32(i2) l1 = float2longlong(f1) l2 = encode_int32_into_longlong_nan(i2) assert not is_int32_from_longlong_nan(l1) assert is_int32_from_longlong_nan(l2) f1b = longlong2float(l1) assert f1b == f1 or (isnan(f1b) and isnan(f1)) assert decode_int32_from_longlong_nan(l2) == i2 return 42
def dehomogenize(self, w_vector, hint): val = self._storage(w_vector)[0] len = w_vector.length() hinttype = type(hint) valtype = type(val) if not len: newstrategy = ObjectVectorStrategy.singleton elif hinttype is valtype: if valtype is W_Fixnum: newstrategy = FixnumVectorStrategy.singleton elif valtype is W_Flonum: newstrategy = FlonumVectorStrategy.singleton else: newstrategy = ObjectVectorStrategy.singleton elif hinttype is W_Flonum and valtype is W_Fixnum and can_encode_int32(val.value): newstrategy = FlonumTaggedVectorStrategy.singleton else: newstrategy = ObjectVectorStrategy.singleton storage = newstrategy.create_storage_for_element(val, len) w_vector.set_strategy(newstrategy) w_vector.set_storage(storage)
def dehomogenize(self, w_vector, hint): val = self._storage(w_vector)[0] len = w_vector.length() hinttype = type(hint) valtype = type(val) if not len: newstrategy = ObjectVectorStrategy.singleton elif hinttype is valtype: if valtype is W_Fixnum: newstrategy = FixnumVectorStrategy.singleton elif valtype is W_Flonum: newstrategy = FlonumVectorStrategy.singleton else: newstrategy = ObjectVectorStrategy.singleton elif hinttype is W_Flonum and valtype is W_Fixnum and can_encode_int32( val.value): newstrategy = FlonumTaggedVectorStrategy.singleton else: newstrategy = ObjectVectorStrategy.singleton storage = newstrategy.create_storage_for_element(val, len) w_vector.set_strategy(newstrategy) w_vector.set_storage(storage)
def is_correct_type(self, w_vector, w_obj): if isinstance(w_obj, W_Fixnum) and can_encode_int32(w_obj.value): return True return isinstance(w_obj, W_Flonum)