Add Attribute::getOptional<T>() and use to add some more dynamic datatype conversions at read time#1278
Merged
ax3l merged 3 commits intoopenPMD:devfrom Nov 1, 2022
Merged
Conversation
b11eb02 to
c8e46c4
Compare
franzpoeschel
commented
May 19, 2022
| @@ -251,4 +370,16 @@ U Attribute::get() const | |||
| return getCast<U>(Variant::getResource()); | |||
Contributor
Author
There was a problem hiding this comment.
We could remove getCast here in a similar way. Slightly API-breaking though since this is in a public header.
Contributor
Author
There was a problem hiding this comment.
I did this API break now. All implementation details are now moved to the detail namespace.
be0deb0 to
003129f
Compare
franzpoeschel
commented
May 24, 2022
ax3l
reviewed
May 24, 2022
| * An empty std::optional if no conversion is possible. | ||
| */ | ||
| template <typename U> | ||
| std::optional<U> getOptional() const; |
Member
There was a problem hiding this comment.
Please add in Python, too (pybind11 returns py:None for std::nullopt)
Contributor
Author
There was a problem hiding this comment.
Python does not use this call at all:
// C++ pass-through API: Getter
.def(
"get_attribute",
[](Attributable &attr, std::string const &key) {
auto v = attr.getAttribute(key);
return v.getResource();
// TODO instead of returning lists, return all arrays (ndim > 0)
// as numpy arrays?
})There is no explicit type requesting as get<T>() does, in Python you just get the type that there is
Member
There was a problem hiding this comment.
Yes, I was wondering if we want to add such an option in Python to cast?
8a93fad to
0808dec
Compare
0808dec to
4c56fb1
Compare
franzpoeschel
added a commit
to franzpoeschel/openPMD-api
that referenced
this pull request
Jul 21, 2022
Merge to be removed after rebasing onto openPMD#1278
franzpoeschel
added a commit
to franzpoeschel/openPMD-api
that referenced
this pull request
Jul 22, 2022
Merge to be removed after rebasing onto openPMD#1278
franzpoeschel
added a commit
to franzpoeschel/openPMD-api
that referenced
this pull request
Jul 29, 2022
Merge to be removed after rebasing onto openPMD#1278
4c56fb1 to
44bef9d
Compare
bb3516f to
21edcaf
Compare
15 tasks
6 tasks
21edcaf to
a7ac0a3
Compare
Useful for backends that might not report back the right numerical type
d00215f to
5d32e04
Compare
Note that this is slightly API breaking since the shared code was in a public header. All implementation details are now in the detail namespace.
5d32e04 to
87868d3
Compare
ax3l
approved these changes
Nov 1, 2022
eschnett
added a commit
to eschnett/openPMD-api
that referenced
this pull request
Nov 11, 2022
* dev: (70 commits) Docs: Recommend Static Build for Superbuilds (openPMD#1325) Python 3.11 (openPMD#1323) pybind11: v2.10.1+ (openPMD#1322) Add Attribute::getOptional<T>() and use to add some more dynamic datatype conversions at read time (openPMD#1278) Mapping between ADIOS steps and openPMD iterations (openPMD#949) Deprecate shareRaw (openPMD#1229) Fix append mode double attributes (openPMD#1302) Constant scalars: Don't flush double (openPMD#1315) Remove caching cmake vars (openPMD#1313) [pre-commit.ci] pre-commit autoupdate (openPMD#1311) storeChunk: Add an overload for shared_ptr<T[]> (openPMD#1296) Fix `operationAsString` Export (openPMD#1309) ADIOS2: more fine-grained control for file endings (openPMD#1218) [pre-commit.ci] pre-commit autoupdate (openPMD#1307) Fix file existence check in parallel tests (openPMD#1303) ADIOS2: Flush to disk within a step (openPMD#1207) [pre-commit.ci] pre-commit autoupdate (openPMD#1304) [pre-commit.ci] pre-commit autoupdate (openPMD#1295) Update catch2 to v2.13.9 (openPMD#1299) [pre-commit.ci] pre-commit autoupdate (openPMD#1292) ... # Conflicts: # .github/workflows/linux.yml
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Currently, we have
Attribute::get<T>()that throws astd::runtime_error()if no conversion is possible.Adding
Attribute::getOptional<T>()is helpful to check if a conversion is possible without having to resort to catching exceptions.This PR also uses that new API method while reading a Series in. This became necessary in #1277 from where I have extracted this PR (that PR adds a less verbose mode to the JSON backend that does not explicitly annotate datatypes and might hence report different numerical types at read times).