Skip to content

Commit 38b03df

Browse files
vthemelismartinRenou
authored andcommitted
Serialise NumPy arrays as any other array
Also: * Simplify the _data_to_json function in terms of branching; * Remove unneeded checks for int; * Eliminate unused argument of _data_to_json; Signed-off-by: Vasilis Themelis <[email protected]>
1 parent 8482383 commit 38b03df

File tree

2 files changed

+32
-25
lines changed

2 files changed

+32
-25
lines changed

ipydatagrid/datagrid.py

Lines changed: 25 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -165,36 +165,37 @@ def _get_num_rows(self):
165165

166166

167167
# modified from ipywidgets original
168-
def _data_to_json(x, _obj):
168+
def _data_to_json(x):
169169
if isinstance(x, dict):
170-
return {str(k): _data_to_json(v, _obj) for k, v in x.items()}
171-
elif isinstance(x, (list, tuple)):
172-
return [_data_to_json(v, _obj) for v in x]
173-
else:
174-
if isinstance(x, (float, int)):
175-
if np.isnan(x):
176-
return "$NaN$"
177-
elif np.isposinf(x):
178-
return "$Infinity$"
179-
elif np.isneginf(x):
180-
return "$NegInfinity$"
181-
else:
182-
return x
183-
elif isinstance(x, decimal.Decimal):
184-
return str(x)
185-
elif isinstance(x, (datetime.datetime, datetime.date)):
186-
return x.isoformat()
187-
elif x is pd.NaT:
188-
return "$NaT$"
189-
elif pd.isna(x):
170+
return {str(k): _data_to_json(v) for k, v in x.items()}
171+
if isinstance(x, np.ndarray):
172+
return _data_to_json(x.tolist())
173+
if isinstance(x, (list, tuple)):
174+
return [_data_to_json(v) for v in x]
175+
if isinstance(x, int):
176+
return x
177+
if isinstance(x, float):
178+
if np.isnan(x):
190179
return "$NaN$"
191-
else:
192-
return str(x)
180+
if np.isposinf(x):
181+
return "$Infinity$"
182+
if np.isneginf(x):
183+
return "$NegInfinity$"
184+
return x
185+
if isinstance(x, decimal.Decimal):
186+
return str(x)
187+
if isinstance(x, (datetime.datetime, datetime.date)):
188+
return x.isoformat()
189+
if x is pd.NaT:
190+
return "$NaT$"
191+
if pd.isna(x):
192+
return "$NaN$"
193+
return str(x)
193194

194195

195196
_data_serialization = {
196197
"from_json": widget_serialization["from_json"],
197-
"to_json": _data_to_json,
198+
"to_json": lambda x, _: _data_to_json(x), # noqa: U101
198199
}
199200

200201

tests/test_datagrid.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import math
22

3+
import numpy as np
34
import pandas as pd
45
import pytest
56

@@ -295,9 +296,14 @@ def test_serialization():
295296
Decimal(0.00),
296297
datetime.date(2022, 8, 19),
297298
datetime.datetime.now(),
299+
[1, [2, 3], {4: 5}],
300+
np.full((2, 3), {"foo": "bar"}),
301+
np.full((3, 4, 5), 1.0),
298302
]
299303
}
300304
)
301305

302306
# Should not raise an error
303-
DataGrid(df)
307+
dg = DataGrid(df)
308+
309+
assert dg.data.to_json() == df.to_json()

0 commit comments

Comments
 (0)