Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

File I/O #279

Open
OliverAh opened this issue Dec 4, 2023 · 0 comments
Open

File I/O #279

OliverAh opened this issue Dec 4, 2023 · 0 comments

Comments

@OliverAh
Copy link

OliverAh commented Dec 4, 2023

The data-structures introduced and used by the dwave-ocean-sdk mostly consist of several substructures that might or might not be native to python, e.g. the class dwave.system.EmbeddingComposite [1] consists of properties, such as EmbeddingComposite.child and EmbeddingComposite.parameters, and methods, such as EmbeddingComposite.sample_qubo(...), or the class dimod.SampleSet [2] consists of properties, such as SampleSet.record, and methods, such as SampleSet.lowest(...).
However, it is currently not possible to simply write to files, and read from files in a different script, instaces of them. Please do not consider this a limitation to my examples. I know there are a lot more.

In my opinion a missing feature of the dwave-ocean-sdk is write-to and read-from file(s) all kinds of data-structures related to the dwave packages. For example NumPy offers, apart from many other functions, the functions writetxt(filename, array) and loadtxt(filename) [3] to easily write arrays to files and also read them in from files.

So far, I also tried to use the python package pickle [4] (functions pickle.dump(obj, file) for writing and pickle.load(file) for reading). On a simple test-case that worked very well for an instance of a dimod.Sampleset, but failed for an instance of a dwave.system.DWaveSampler, due to some subsub...subsubstructure within, which can not "be pickled".
One could of course also go through all data-structures and recursively all their substructures and decide what data is of interest, but this is of course ... cumbersome ...
I think the pickle package is offering even more than necessary. I think it would be sufficient to I/O data (properties in the examples above), while methods should be known by the reading script from the corresponding packages. But it should be possible to treat the read data-structures as the ones they were written, e.g. a written instance of a dwave.system.EmbeddingComposite should be readable by a different script that imported the packages of the dwave-ocean-sdk, and treat the read data again as an instance of a dwave.system.EmbeddingComposite.

Why do I think such a feature is missing:
Currently a lot of research is going on to improve applicability of quantum annealing to real-world problems. But since there are quite some subtleties, there also is a lot of trial and error. In this regard, I think it would be beneficial for the community to exchange all kinds of findings and especially data. I might even dare to say that the inputs are more interesting than the results, and of course the combination of both would be the most valuable.

1 - https://docs.ocean.dwavesys.com/en/stable/docs_system/reference/composites.html#embeddingcomposite
2 - https://docs.ocean.dwavesys.com/en/stable/docs_dimod/reference/sampleset.html#id1
3 - https://numpy.org/doc/stable/reference/routines.io.html
4 - https://docs.python.org/3/library/pickle.html#

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant