Description
This is because we try to write a dictionary to a json file and the dictionary contains something of type numpy.float32. This is because here:
|
scale = save_range / data_range |
scale becomes the same type as the data because data_range is the same type as the data
|
data_range = data.max() - data_min |
We need to convert the scale to a normal float type and then it can be 'dumped' to json
ERROR: test_TIFF_compression3D_1 (test_io.TestTIFF.test_TIFF_compression3D_1)
Traceback (most recent call last):
File "/home/lhe97136/CIL/Wrappers/Python/test/test_io.py", line 283, in test_TIFF_compression3D_1
self.TIFF_compression_test('uint8')
File "/home/lhe97136/CIL/Wrappers/Python/test/test_io.py", line 324, in TIFF_compression_test
writer.write()
File "/home/lhe97136/miniconda3/envs/cil_mat/lib/python3.12/site-packages/cil/io/TIFF.py", line 179, in write
save_scale_offset(fname, self.scale, self.offset)
File "/home/lhe97136/miniconda3/envs/cil_mat/lib/python3.12/site-packages/cil/io/TIFF.py", line 51, in save_scale_offset
utilities.save_dict_to_file(txt, d)
File "/home/lhe97136/miniconda3/envs/cil_mat/lib/python3.12/site-packages/cil/io/utilities.py", line 134, in save_dict_to_file
json.dump(dictionary, configfile)
File "/home/lhe97136/miniconda3/envs/cil_mat/lib/python3.12/json/init.py", line 179, in dump
for chunk in iterable:
^^^^^^^^
File "/home/lhe97136/miniconda3/envs/cil_mat/lib/python3.12/json/encoder.py", line 432, in _iterencode
yield from _iterencode_dict(o, _current_indent_level)
File "/home/lhe97136/miniconda3/envs/cil_mat/lib/python3.12/json/encoder.py", line 406, in _iterencode_dict
yield from chunks
File "/home/lhe97136/miniconda3/envs/cil_mat/lib/python3.12/json/encoder.py", line 439, in _iterencode
o = _default(o)
^^^^^^^^^^^
File "/home/lhe97136/miniconda3/envs/cil_mat/lib/python3.12/json/encoder.py", line 180, in default
raise TypeError(f'Object of type {o.class.name} '
TypeError: Object of type float32 is not JSON serializable
Environment
python 3.12, numpy 2
import cil, sys
print(cil.version.version, cil.version.commit_hash, sys.version, sys.platform)
Description
This is because we try to write a dictionary to a json file and the dictionary contains something of type numpy.float32. This is because here:
CIL/Wrappers/Python/cil/io/utilities.py
Line 116 in f0f97a4
scalebecomes the same type as the data becausedata_rangeis the same type as thedataCIL/Wrappers/Python/cil/io/utilities.py
Line 113 in f0f97a4
We need to convert the scale to a normal float type and then it can be 'dumped' to json
Environment
python 3.12, numpy 2