You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Currently CQM.to_file() encodes constraint labels with json.dumps, allowing characters that are illegal in file names, like /. That becomes a problem only when trying to extract the CQM zip file.
However, CQM.from_file() assumes forward slashes are not allowed in file names and that / is used only as (POSIX) path separator:
Consequently, decoding CQMs with slashes in constraint labels will fail.
Steps To Reproduce
>>> import dimod
>>> cqm = dimod.CQM()
>>> cqm.add_constraint(dimod.Binary() == 1, label='a/b')
'a/b'
>>> dimod.CQM.from_file(cqm.to_file())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<omitted>/env311/lib/python3.11/site-packages/dimod/constrained/constrained.py", line 1078, in from_file
label = deserialize_variable(json.loads(constraint))
^^^^^^^^^^^^^^^^^^^^^^
File "<omitted>/lib/python3.11/json/__init__.py", line 346, in loads
return _default_decoder.decode(s)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "<omitted>/lib/python3.11/json/decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "<omitted>/lib/python3.11/json/decoder.py", line 353, in raw_decode
obj, end = self.scan_once(s, idx)
^^^^^^^^^^^^^^^^^^^^^^
json.decoder.JSONDecodeError: Unterminated string starting at: line 1 column 1 (char 0)
Expected Behavior
Serializing CQMs with forward slashes (and some other unicode characters, like NULL) should be forbidden. Or at least such labels should be renamed, either on constraint creation, or cqm serialization.
Environment
any OS, any python
reproduces with latest dimod==0.12.12
The text was updated successfully, but these errors were encountered:
Description
Currently
CQM.to_file()
encodes constraint labels withjson.dumps
, allowing characters that are illegal in file names, like/
. That becomes a problem only when trying to extract the CQM zip file.However,
CQM.from_file()
assumes forward slashes are not allowed in file names and that/
is used only as (POSIX) path separator:dimod/dimod/constrained/constrained.py
Lines 1071 to 1073 in 85f5baf
Consequently, decoding CQMs with slashes in constraint labels will fail.
Steps To Reproduce
Expected Behavior
Serializing CQMs with forward slashes (and some other unicode characters, like NULL) should be forbidden. Or at least such labels should be renamed, either on constraint creation, or cqm serialization.
Environment
dimod==0.12.12
The text was updated successfully, but these errors were encountered: