Skip to content

Commit

Permalink
Added type checks and workarounds in data handling
Browse files Browse the repository at this point in the history
When converting between serial and dataframe/dataset
  • Loading branch information
npalacioescat committed Jun 18, 2024
1 parent 168ee5a commit de020fc
Showing 1 changed file with 26 additions and 8 deletions.
34 changes: 26 additions & 8 deletions src/funki/utils/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,12 @@ def serial_to_dataset(data):
if k in data.keys()
}
kwargs.update({
k: {mk: np.array(mv) for mk, mv in data[k].items()}
k: {
mk: np.array(mv)
if type(mv) is list
else serial_to_dataframe(mv)
for mk, mv in data[k].items()
}
for k in ('obsm', 'varm', 'obsp', 'varp')
if k in data.keys()
})
Expand All @@ -69,14 +74,27 @@ def dataset_to_serial(dset):
data.update({
k: dataframe_to_serial(getattr(dset, k))
for k in ('obs', 'var')
if not getattr(dset, k).empty
})
data.update({
k: {
mk: mv.tolist() if type(mv) is np.ndarray else mv.toarray().tolist()
for mk, mv in getattr(dset, k).items()
}
for k in ('obsm', 'varm', 'obsp', 'varp')
})

attrs = {}

for k in ('obsm', 'varm', 'obsp', 'varp'):
attrs[k] = dict()

for mk, mv in getattr(dset, k).items():
if type(mv) is np.ndarray:
res = mv.tolist()

elif type(mv) is pd.DataFrame:
res = dataframe_to_serial(mv)

else:
res = mv.toarray().tolist()

attrs[k][mk] = res

data.update(attrs)

return data

Expand Down

0 comments on commit de020fc

Please sign in to comment.