Repository metrics
- Stars
- (160 stars)
- PR merge metrics
- (PR metrics pending)
Description
With the removal of dataOrder in openPMD 2.0 and the confusion it already adds in 1.0.0 we should provide an API that makes it easy to set/read attributes such as:
base standard attributes:
axisLabelsgridSpacinggridGlobalOffsetshapeof constant record components
and ED-PIC extension attributes:
fieldBoundaryparticleBoundary
Attributes such as axisLabels should be an object and we could add an API of some kind of map. Otherwise it can be confusing if a user accesses low-level numpy attributes such as .shape which indices are then in inverted order if one is accessing from C/C++/Python.
So instead of
record.axisLabels = {"x", "y", "z"};
// ...
cout << record.axisLabels[0] << endl;
we should provide an access of that can not be confused or has a clear relation to a matrix' A[k,j,i] order.
Or we write setters/getters like
record.axisLabels.set({"x", "y", "z"}, indexOrder::fastToSlow);
// ...
cout << record.axisLabels.get(indexOrder::slowToFast) << endl;
// "z", "y", "x"
or we come up with something even more gentle.
Or we say "in the C++/Python API use the same order as your index order" and we invert it automatically on write according to the standard. They APIs don't need to match the low-level data, imho. Anyway, we did this in the past with libSplash and it was not necessarily removing confusion.