Skip to content

Commit b4615dd

Browse files
franzpoeschelax3l
andauthored
Release notes: 0.16.0 (#1648)
Co-authored-by: Axel Huebl <axel.huebl@plasma.ninja>
1 parent e9d8999 commit b4615dd

File tree

5 files changed

+266
-8
lines changed

5 files changed

+266
-8
lines changed

CHANGELOG.rst

Lines changed: 257 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,20 @@ Changelog
55

66
0.16.0
77
------
8-
**Date:** TBA
8+
**Date:** 2024-10-07
99

10-
[Title]
10+
ADIOS2 Joined arrays, API simplification, HDF5 subfiling, TOML backend, wildcard file extensions, Performance & Memory
1111

12-
[Summary]
12+
This release adds support for additional I/O features in all backends, and additionally a completely new TOML backend, useful for openPMD-formatted configuration files in scientific workflows.
13+
The ADIOS2 backend now supports joined arrays for simplified storage of particle data in parallel, asynchronous I/O, group tables for enhanced support of ADIOS2 I/O steps, optimized attribute aggregation schemes for large-scale setups and more features.
14+
The HDF5 backend has added support for the "subfiling" virtual file driver intended for I/O performance in large-scale setups, explicit JSON/TOML-based configuration for chunking and independent flushing. The support of exotic datatypes is improved, such as float128 on ARM64/PPC64 and improved support for generically dealing with unknown datatypes.
15+
The JSON backend supports parallel MPI output into separate subfiles, mainly intended for debugging purposes.
16+
The ADIOS1 backend, previously deprecated, has been removed in favor of ADIOS2.
17+
Please consult the upgrade guide for hints on further interacting with old data.
18+
19+
The openPMD-api has been simplified by no longer requiring explicit specification for scalar components via ``RecordComponent::SCALAR`` in its object model.
20+
The addition of wildcard filename extensions (e.g. ``simData.%E`` or ``simData_%T.%E``) simplifies the generic implementation of backend-independent logic, such as post-processing routines.
21+
Rank tables can now be used to pass detailed topology information from writer to reader in staging setups.
1322

1423
Changes to "0.15.0"
1524
^^^^^^^^^^^^^^^^^^^
@@ -18,13 +27,258 @@ Features
1827
""""""""
1928

2029
- pybind11: require version 2.13.0+ #1220 #1322 #1637 #1671
30+
- Python: require version 3.8+ #1502
31+
- ADIOS2:
32+
33+
- Introduce group tables for more stable support of ADIOS2 steps #1310
34+
Used in conjunction with modifiable attributes in ADIOS2 v2.9
35+
- Support for "joined array" variable shape #1382
36+
- Add ``new_step`` flush target for intermittent readable flushes in file-based encoding #1632
37+
- Option for explicit specification of the ADIOS2 access mode #1638
38+
- Support Async write flag #1460
39+
- Performance optimization for extreme-scale parallelism:
40+
Optionally write attributes only from specified ranks #1542
41+
- Opt-in config to make use of ADIOS2 engines that openPMD does not know #1652
42+
- Group-Based encoding will now print warnings due to #1498
43+
- Remove ADIOS1 - Long Live ADIOS2 #1419 #1560
44+
- HDF5:
45+
46+
- Support for HDF5 subfiling #1580
47+
- Explicit control over chunking #1591 #1600
48+
- Explicit control over independent flushing #1634
49+
- Support for float128 on ARM64/PPC64 #1364
50+
- Better handling of unknown datatypes in datasets #1469
51+
- JSON/TOML:
52+
53+
- Parallel JSON (mostly for debugging purposes, separate output written per rank) #1475
54+
- TOML Backend (by converting the in-/output of the JSON backend) #1436
55+
- Compatibility with toruniina/toml11 v4.0 #1645
56+
- API simplification: ``RecordComponent::SCALAR`` no longer necessary #1154 #1627
57+
- Allow specifying wildcards for filename extensions: ``simData_%T.%E`` #1584
58+
- Streaming: Add rank table for locality-aware streaming #1505
59+
- Optional debugging output for ``AbstractIOHandlerImpl::flush()`` via ``export OPENPMD_VERBOSE=1`` #1495 #1574 #1643
60+
- Miscellaneous API additions:
61+
62+
- Add visit-like pattern for RecordComponent #1544 #1582
63+
- Derive PatchRecordComponent from RecordComponent to give access to the full load/store API #1594
64+
- More consistent handling for file extensions #1473
65+
66+
Bug Fixes
67+
"""""""""
68+
69+
- ADIOS2
70+
71+
- Ensure that a step is always active at write time #1492
72+
Necessary for the BP5 engine
73+
- Warning for BP5+Blosc in ADIOS2 v2.9 up to patch level 1 #1497
74+
Unreadable datasets might silently be created due to a bug in ADIOS2 v2.9.0 and v2.9.1
75+
https://github.com/ornladios/ADIOS2/issues/3504
76+
- Some adjustments for ADIOS2 v2.10 #1618
77+
This adds the ``openPMD_HAVE_ADIOS2_BP5`` macro and introduces some datatype fixes in Python bindings
78+
- HDF5
79+
80+
- Fix Char Type Matching #1433
81+
- CMake
82+
83+
- Set correct install permissions for ``openpmd-pipe`` #1459
84+
- HDF5 Libraries are ``PUBLIC`` #1520
85+
- Warnings
86+
87+
- Fix gcc9 warning #1429
88+
- ADIOS2 v2.9: Avoid Unused Param Warning #1503
89+
- Python
90+
91+
- ODR Violation #1521
92+
- Init Order #1547
93+
- Strings with a single char #1585
94+
- Fixes and documentation for Pybind v2.12.0 and Numpy 2.0 #1637
95+
- Tooling
96+
97+
- ``openpmd-pipe``: fix handling of constant components #1530
98+
- Performance
99+
100+
- Fix ``dirtyRecursive()`` performance for Series with many steps #1598 #1615
101+
- Fix flushing performance for file-based Series with many steps #1642
102+
- Parse lazily by default in linear access mode #1650
103+
- Workaround for independent writes to Iterations in parallel #1619 1660
104+
This includes better detection of BP5 which in turn uncovers more instances of the first issue
105+
- Regexes: Sanitize user input to avoid Regex injection #1624
106+
- Fix particle patches flush api #1626 #1641
107+
- RecordComponent: Properly handle uninitialized datasets in ``RecordComponent`` #1316
108+
- Don't require unitSI when reading patch record component #1470 #1482
109+
- Linear read mode was not able to directly access specific file of file-based Series #1533
110+
- Fixes for variable-based encoding in backends without step support #1484
111+
- Fix availableChunks for ``READ_LINEAR`` in ADIOS2 #1586
112+
- Read JSON config in parallel #1605
113+
- Partially revert #1368 to re-enable a warning #1573
114+
- Fix ``unique_ptr<T, Del>`` constructor of ``UniquePtrWithLambda`` #1552
115+
- SerialIOTest: Clang-Tidy Fixes #1599
116+
- Replace ``openPMD_Datatypes`` global with function #1509
117+
- Fix ``Attribute`` copy/move constructors #1545
118+
- Fix duplicate ``mesh.read()`` call #1535
119+
- Disallow Container insertion in ``READ_LINEAR`` #1590
120+
- ParallelIOtests: Fix MPI ifdef guard #1649
121+
- SerialIOTest: Avoid use-after-free issue in test flag with shared pointer #1657
122+
123+
124+
Breaking Changes
125+
""""""""""""""""
126+
127+
- Removed support for ADIOS1, fully replaced with ADIOS2 #1419 1560
128+
- Redesign of object model to not rely on ``RecordComponent::SCALAR`` hack any longer #1154
129+
130+
- ``Attributable::myPath()`` now returns the openPMD group path without including the ``SCALAR`` layer
131+
- Replace openPMD_Datatypes global with function of same name #1509
132+
- Removed auxiliary function template ``getCast<U>()`` #1278
133+
- Deprecations
134+
135+
- Group-Based encoding for ADIOS2 deprecated, will print warnings in combination with new features (group-table introduced with #1310) #1498
136+
137+
Other
138+
"""""
139+
140+
- Tests & Examples
141+
142+
- Rewrite deprecated storeChunk APIs in first read/write examples #1435
143+
- Streaming examples: Set WAN as default transport #1511
144+
- Fix records length in ``9_particle_write_serial.py`` #1510
145+
- CI
146+
147+
- 55af0dbd2 Linux aarch64/arm64 #1517
148+
- macOS 11.0+ #1446 #1486
149+
- Upgrade macOS 11 to 12 #1653
150+
- oneAPI 2023.2.0 #1478
151+
- Update ``.readthedocs.yml`` #1438
152+
- GitHub Actions: macOS has 3 Cores #1421
153+
- Doxygen 1.9.7 Broken #1464
154+
- Fix type comparison in Python #1490
155+
- Adapt to removed CTest CLI #1519
156+
- Fix ``chmod`` in ``download_samples.sh`` #1518
157+
- Workaround for bugs in CLI of ``mpiexec`` #1565 #1628
158+
- Fix CircleCI "six" #1596
159+
- Fix false positive in Conda-based CI runs #1651
160+
- Script for automatically updating the library version #1467
161+
- CMake
162+
163+
- Replace internal depencencies with FetchContent #1583 #1666
164+
- Superbuild: Repo and local source #1667
165+
- Superbuild: Tarball #1668
166+
- Update cmake minimum required to 3.5 for third-party dependencies ``nlohmann::json`` and ``toruniina::toml11`` #1558
167+
- Warnings on AppleClang #1496
168+
- Warn and Continue on Empty HDF5_VERSION #1512
169+
- Docs
170+
171+
- Document typical Analysis workflows #1444
172+
- Add documentation for typical use cases of openpmd-pipe #1578
173+
- Authors
174+
175+
- Synchronizing library and standard authors #1434
176+
- citing more authors #1539
177+
- support by the HELPMI project #1555
178+
- citing the research groups of maintainers #1566
179+
- Document how to link to C++ Projects #1445
180+
- More careful documentation of streaming API #1430
181+
- Post 0.15.0 Changelog Template #1420
182+
- Document OpenMPI-ROMIO/HDF5/Chunking issue #1441
183+
- Document ``HDF5_DO_MPI_FILE_SYNC`` #1427
184+
- Remove schema 2021 from documentation #1451
185+
- Fix small documentation issues after 0.15 release #1440
186+
- Add Sphinx Copybutton and Design #1461
187+
- Sphinx: Limit <7.2 #1541
188+
- Document that we support Python 3.12 #1549
189+
- Fix docstring for MyPath #1587
190+
- Release notes #1648
191+
- Python
192+
193+
- Python bindings: Release GIL during IO wait operations #1381
194+
- Series to DataFram #1506
195+
- Add Python binding for myPath #1463
196+
- Update ``__repr__`` method of major objects in openPMD hierarchy #1476
197+
- Update ``__len__`` to return the number of contained sub-objects instead of number of attributes #1659
198+
- Python 3.12: Remove Distutils #1508
199+
- Support for Pickle API without fragile static storage hacks #1633 1662
200+
- setup.py: Transitive ZLIB static #1522
201+
- Support for Numpy 2.0 #1669
202+
- Tooling
203+
204+
- Use lazy imports for dask and pandas #1442
205+
- Pandas DataFrames: Add Row Column Name #1501
206+
- Add API to manually set chunks when loading dask arrays #1477
207+
- Add all the ``performance-*`` clang-tidy checks #1532
208+
- Better error message when loading to a buffer with mismatched type #1452
209+
- Unknown openPMD version in data: Add upgrade hint #1528
210+
- Print a hint on what might be wrong when retrieveSeries fails #1610
211+
- Refactor: Extract ADIOS2 BufferedActions struct to own file, rename to ``ADIOS2File`` #1577
212+
213+
214+
0.15.2
215+
------
216+
**Date:** 2023-08-18
217+
218+
Python, ADIOS2 and HDF5 Fixes
219+
220+
This release fixed regressions in the Python frontend as well as the ADIOS2 and HDF5 backends.
221+
Supported macOS versions are now 11.0+ and Python versions are 3.8+.
222+
223+
Changes to "0.15.1"
224+
^^^^^^^^^^^^^^^^^^^
21225

22226
Bug Fixes
23227
"""""""""
24228

229+
- Don't require unitSI when reading a patch record component #1470
230+
- Examples:
231+
232+
- Streaming examples: Set WAN as default transport #1511
233+
- Fix types of particle constant records #1316 #1510
234+
- Python:
235+
236+
- DataFrame to ASCII: Header of First Column in CSV bug documentation third party #1480 #1501
237+
- Update ``__repr__`` method of major objects in openPMD hierarchy #1476
238+
- openpmd-pipe: set correct install permissions #1459
239+
- Better error message when loading to a buffer with mismatched type #1452
240+
- Use lazy imports for dask and pandas #1442
241+
- ADIOS2:
242+
243+
- Fixes for variable-based encoding in backends without step support #1484 #1481
244+
- Warn on BP5+Blosc in ADIOS2 v2.9 up to patch level 1 #1497
245+
- Ensure that a step is always active at write time #1492
246+
- Fix gcc9 warning #1429
247+
- HDF5:
248+
249+
- Handle unknown datatypes in datasets #1469
250+
- Support for float128 on ARM64/PPC64 #1364
251+
- Fix Char Type Matching #1433 #1431
252+
- Install: Warn and Continue on Empty ``HDF5_VERSION`` in CMake #1512
253+
- CI:
254+
255+
- type comparison in openpmd-pipe #1490
256+
25257
Other
26258
"""""
27259

260+
- Better handling for file extensions #1473 #1471
261+
- Optional debugging output for ``AbstractIOHandlerImpl::flush()`` #1495
262+
- Python: 3.8+ #1502
263+
- CI:
264+
265+
- macOS 11.0+ #1486 #1446
266+
- oneAPI 2023.2.0 #1478
267+
- Doxygen 1.9.7 Broken #1464
268+
- Docs:
269+
270+
- Analysis with third party data science frameworks #1444
271+
- Sphinx Copybutton and Design #1461
272+
- Fix small documentation issues after 0.15 release #1440
273+
- ``HDF5_DO_MPI_FILE_SYNC`` #1427
274+
- OpenMPI-ROMIO/HDF5/Chunking issue #1441
275+
- Remove ADIOS2 schema 2021 #1451
276+
- Linking to C++ Projects #1445
277+
- Fix deprecated APIs in first read/write examples #1435
278+
- Update ``.readthedocs.yml`` #1438
279+
- Fix Bib Authors #1434
280+
- More careful documentation of streaming API #1430
281+
28282

29283
0.15.1
30284
------

NEWS.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ Please transition to ADIOS2.
1313
For reading legacy ADIOS1 BP3 files, either use an older version of openPMD-api or the BP3 backend in ADIOS2.
1414
Note that ADIOS2 does not support compression in BP3 files.
1515

16+
For converting ADIOS1 BP3 files to ADIOS2, use a version of the openPMD-api that still supports ADIOS1 and run the conversion with ``openpmd-pipe``, e.g. ``openpmd-pipe --infile adios1_data_%T.bp --inconfig '{"backend": "adios1"}' --outfile adios2_data_%T.bp --outconfig '{"backend": "adios2"}'``.
17+
18+
Group-Based encoding is deprecated in ADIOS2 due to performance considerations. As alternatives, consider file-based encoding for regular file I/O or variable-based encoding (currently restricted to streaming and streaming-like workflows).
19+
1620
CMake 3.22.0 is now the minimally supported version for CMake.
1721
pybind11 2.13.0 is now the minimally supported version for Python support.
1822
Python 3.12 & 3.13 are now supported, Python 3.7 is removed.

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,7 @@ export CMAKE_PREFIX_PATH=$HOME/somepath:$CMAKE_PREFIX_PATH
304304
Use the following lines in your project's `CMakeLists.txt`:
305305
```cmake
306306
# supports: COMPONENTS MPI NOMPI HDF5 ADIOS2
307-
find_package(openPMD 0.15.0 CONFIG)
307+
find_package(openPMD 0.16.0 CONFIG)
308308
309309
if(openPMD_FOUND)
310310
target_link_libraries(YourTarget PRIVATE openPMD::openPMD)
@@ -332,7 +332,7 @@ set(openPMD_INSTALL OFF) # or instead use:
332332
set(openPMD_USE_PYTHON OFF)
333333
FetchContent_Declare(openPMD
334334
GIT_REPOSITORY "https://github.com/openPMD/openPMD-api.git"
335-
GIT_TAG "0.15.0")
335+
GIT_TAG "0.16.0")
336336
FetchContent_MakeAvailable(openPMD)
337337
```
338338

docs/source/dev/linking.rst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ Use the following lines in your project's ``CMakeLists.txt``:
2323
.. code-block:: cmake
2424
2525
# supports: COMPONENTS MPI NOMPI HDF5 ADIOS2
26-
find_package(openPMD 0.15.0 CONFIG)
26+
find_package(openPMD 0.16.0 CONFIG)
2727
2828
if(openPMD_FOUND)
2929
target_link_libraries(YourTarget PRIVATE openPMD::openPMD)
@@ -53,7 +53,7 @@ Just replace the ``add_subdirectory`` call with:
5353
set(openPMD_USE_PYTHON OFF)
5454
FetchContent_Declare(openPMD
5555
GIT_REPOSITORY "https://github.com/openPMD/openPMD-api.git"
56-
GIT_TAG "0.15.0")
56+
GIT_TAG "0.16.0")
5757
FetchContent_MakeAvailable(openPMD)
5858
5959

include/openPMD/version.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
#define OPENPMDAPI_VERSION_MAJOR 0
3131
#define OPENPMDAPI_VERSION_MINOR 16
3232
#define OPENPMDAPI_VERSION_PATCH 0
33-
#define OPENPMDAPI_VERSION_LABEL "dev"
33+
#define OPENPMDAPI_VERSION_LABEL ""
3434
/** @} */
3535

3636
/** maximum supported version of the openPMD standard (read & write,

0 commit comments

Comments
 (0)