Skip to content

Commit debae2b

Browse files
authored
Issue #1020 Infinity numeric support (#22)
1 parent c26f179 commit debae2b

File tree

1 file changed

+17
-2
lines changed

1 file changed

+17
-2
lines changed

codecs/numeric.pyx

+17-2
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ DEF MAX_DSCALE = 0x3FFF
1616
DEF NUMERIC_POS = 0x0000
1717
DEF NUMERIC_NEG = 0x4000
1818
DEF NUMERIC_NAN = 0xC000
19+
DEF NUMERIC_PINF = 0xD000
20+
DEF NUMERIC_NINF = 0xF000
1921

2022
_Dec = decimal.Decimal
2123

@@ -51,15 +53,22 @@ cdef numeric_encode_binary(CodecContext settings, WriteBuffer buf, obj):
5153
dec = _Dec(obj)
5254

5355
dt = dec.as_tuple()
54-
if dt.exponent == 'F':
55-
raise ValueError('numeric type does not support infinite values')
5656

5757
if dt.exponent == 'n' or dt.exponent == 'N':
5858
# NaN
5959
sign = NUMERIC_NAN
6060
num_pgdigits = 0
6161
weight = 0
6262
dscale = 0
63+
elif dt.exponent == 'F':
64+
# Infinity
65+
if dt.sign:
66+
sign = NUMERIC_NINF
67+
else:
68+
sign = NUMERIC_PINF
69+
num_pgdigits = 0
70+
weight = 0
71+
dscale = 0
6372
else:
6473
exponent = dt.exponent
6574
if exponent < 0 and -exponent > MAX_DSCALE:
@@ -160,6 +169,12 @@ cdef numeric_decode_binary_ex(
160169
if sign == NUMERIC_NAN:
161170
# Not-a-number
162171
return _Dec('NaN')
172+
elif sign == NUMERIC_PINF:
173+
# +Infinity
174+
return _Dec('Infinity')
175+
elif sign == NUMERIC_NINF:
176+
# -Infinity
177+
return _Dec('-Infinity')
163178

164179
if num_pgdigits == 0:
165180
# Zero

0 commit comments

Comments
 (0)