openPMD-api 0.16.1__tar.gz → 0.17.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (329) hide show
  1. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/CMakeLists.txt +116 -38
  2. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/PKG-INFO +10 -10
  3. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/README.md +5 -5
  4. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/cmake/dependencies/pybind11.cmake +2 -2
  5. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/examples/10_streaming_read.cpp +31 -9
  6. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/examples/10_streaming_read.py +3 -12
  7. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/examples/10_streaming_write.cpp +34 -8
  8. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/examples/10_streaming_write.py +2 -11
  9. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/examples/11_particle_dataframe.py +10 -9
  10. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/examples/12_span_write.cpp +22 -7
  11. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/examples/12_span_write.py +2 -7
  12. openpmd_api-0.17.0/examples/13_write_dynamic_configuration.cpp +245 -0
  13. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/examples/13_write_dynamic_configuration.py +15 -23
  14. openpmd_api-0.17.0/examples/14_toml_template.cpp +131 -0
  15. openpmd_api-0.17.0/examples/15_compression.cpp +292 -0
  16. openpmd_api-0.17.0/examples/15_compression.py +315 -0
  17. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/examples/1_structure.cpp +8 -11
  18. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/examples/2_read_serial.cpp +10 -7
  19. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/examples/2_read_serial.py +8 -5
  20. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/examples/2a_read_thetaMode_serial.cpp +7 -5
  21. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/examples/2a_read_thetaMode_serial.py +5 -3
  22. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/examples/3_write_serial.cpp +10 -10
  23. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/examples/3_write_serial.py +8 -10
  24. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/examples/3a_write_thetaMode_serial.cpp +8 -12
  25. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/examples/3a_write_thetaMode_serial.py +5 -9
  26. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/examples/3b_write_resizable_particles.cpp +7 -12
  27. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/examples/3b_write_resizable_particles.py +4 -3
  28. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/examples/4_read_parallel.cpp +10 -5
  29. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/examples/4_read_parallel.py +7 -4
  30. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/examples/5_write_parallel.cpp +11 -15
  31. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/examples/5_write_parallel.py +8 -14
  32. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/examples/6_dump_filebased_series.cpp +46 -40
  33. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/examples/7_extended_write_serial.cpp +34 -11
  34. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/examples/7_extended_write_serial.py +12 -14
  35. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/examples/8_benchmark_parallel.cpp +21 -1
  36. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/examples/8a_benchmark_write_parallel.cpp +17 -17
  37. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/examples/8b_benchmark_read_parallel.cpp +16 -16
  38. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/examples/9_particle_write_serial.py +9 -11
  39. openpmd_api-0.17.0/include/openPMD/ChunkInfo.hpp +599 -0
  40. openpmd_api-0.17.0/include/openPMD/Dataset.hpp +106 -0
  41. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/Datatype.hpp +10 -31
  42. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/DatatypeHelpers.hpp +1 -1
  43. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/DatatypeMacros.hpp +21 -0
  44. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/Error.hpp +26 -0
  45. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/IO/ADIOS/ADIOS2Auxiliary.hpp +18 -5
  46. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/IO/ADIOS/ADIOS2File.hpp +35 -19
  47. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/IO/ADIOS/ADIOS2FilePosition.hpp +1 -1
  48. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/IO/ADIOS/ADIOS2IOHandler.hpp +158 -18
  49. openpmd_api-0.17.0/include/openPMD/IO/ADIOS/ADIOS2PreloadAttributes.hpp +215 -0
  50. openpmd_api-0.17.0/include/openPMD/IO/ADIOS/ADIOS2PreloadVariables.hpp +67 -0
  51. openpmd_api-0.17.0/include/openPMD/IO/ADIOS/macros.hpp +49 -0
  52. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/IO/AbstractFilePosition.hpp +1 -1
  53. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/IO/AbstractIOHandler.hpp +65 -44
  54. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/IO/AbstractIOHandlerHelper.hpp +10 -1
  55. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/IO/AbstractIOHandlerImpl.hpp +26 -1
  56. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/IO/AbstractIOHandlerImplCommon.hpp +1 -1
  57. openpmd_api-0.17.0/include/openPMD/IO/Access.hpp +209 -0
  58. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/IO/DummyIOHandler.hpp +1 -1
  59. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/IO/Format.hpp +1 -1
  60. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/IO/HDF5/HDF5Auxiliary.hpp +1 -1
  61. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/IO/HDF5/HDF5FilePosition.hpp +1 -1
  62. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/IO/HDF5/HDF5IOHandler.hpp +6 -2
  63. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/IO/HDF5/HDF5IOHandlerImpl.hpp +5 -5
  64. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/IO/HDF5/ParallelHDF5IOHandler.hpp +10 -3
  65. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/IO/HDF5/ParallelHDF5IOHandlerImpl.hpp +2 -3
  66. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/IO/IOTask.hpp +184 -73
  67. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/IO/InvalidatableFile.hpp +1 -1
  68. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/IO/JSON/JSONFilePosition.hpp +1 -1
  69. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/IO/JSON/JSONIOHandler.hpp +4 -1
  70. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/IO/JSON/JSONIOHandlerImpl.hpp +86 -12
  71. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/Iteration.hpp +61 -30
  72. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/IterationEncoding.hpp +1 -1
  73. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/Mesh.hpp +102 -5
  74. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/ParticleSpecies.hpp +1 -1
  75. openpmd_api-0.17.0/include/openPMD/ReadIterations.hpp +94 -0
  76. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/Record.hpp +6 -4
  77. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/RecordComponent.hpp +35 -15
  78. openpmd_api-0.17.0/include/openPMD/RecordComponent.tpp +172 -0
  79. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/Series.hpp +152 -36
  80. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/Span.hpp +4 -1
  81. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/Streaming.hpp +21 -9
  82. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/ThrowError.hpp +1 -1
  83. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/UnitDimension.hpp +28 -1
  84. openpmd_api-0.17.0/include/openPMD/WriteIterations.hpp +25 -0
  85. {openpmd_api-0.16.1/include/openPMD/benchmark/mpi → openpmd_api-0.17.0/include/openPMD/auxiliary}/BlockSlicer.hpp +6 -2
  86. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/auxiliary/Filesystem.hpp +1 -1
  87. openpmd_api-0.17.0/include/openPMD/auxiliary/JSON.hpp +120 -0
  88. openpmd_api-0.17.0/include/openPMD/auxiliary/JSONMatcher.hpp +140 -0
  89. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/auxiliary/JSON_internal.hpp +41 -8
  90. openpmd_api-0.17.0/include/openPMD/auxiliary/Memory.hpp +103 -0
  91. openpmd_api-0.17.0/include/openPMD/auxiliary/Memory_internal.hpp +30 -0
  92. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/auxiliary/Mpi.hpp +40 -0
  93. {openpmd_api-0.16.1/include/openPMD/benchmark/mpi → openpmd_api-0.17.0/include/openPMD/auxiliary}/OneDimensionalBlockSlicer.hpp +8 -3
  94. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/auxiliary/OutOfRangeMsg.hpp +1 -1
  95. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/auxiliary/ShareRaw.hpp +3 -5
  96. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/auxiliary/ShareRawInternal.hpp +3 -5
  97. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/auxiliary/StringManip.hpp +36 -1
  98. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/auxiliary/TypeTraits.hpp +8 -0
  99. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/auxiliary/UniquePtr.hpp +45 -39
  100. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/auxiliary/Variant.hpp +30 -18
  101. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/backend/Attributable.hpp +97 -25
  102. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/backend/Attribute.hpp +47 -58
  103. openpmd_api-0.17.0/include/openPMD/backend/BaseRecord.hpp +400 -0
  104. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/backend/BaseRecordComponent.hpp +2 -1
  105. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/backend/Container.hpp +56 -315
  106. openpmd_api-0.17.0/include/openPMD/backend/ContainerImpl.tpp +441 -0
  107. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/backend/MeshRecordComponent.hpp +1 -1
  108. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/backend/PatchRecord.hpp +1 -1
  109. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/backend/PatchRecordComponent.hpp +1 -3
  110. openpmd_api-0.17.0/include/openPMD/backend/Variant_internal.hpp +61 -0
  111. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/backend/Writable.hpp +11 -1
  112. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/benchmark/MemoryProfiler.hpp +1 -1
  113. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/benchmark/Timer.hpp +1 -1
  114. openpmd_api-0.17.0/include/openPMD/benchmark/mpi/BlockSlicer.hpp +31 -0
  115. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/benchmark/mpi/DatasetFiller.hpp +1 -1
  116. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/benchmark/mpi/MPIBenchmark.hpp +13 -15
  117. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/benchmark/mpi/MPIBenchmarkReport.hpp +4 -3
  118. openpmd_api-0.17.0/include/openPMD/benchmark/mpi/OneDimensionalBlockSlicer.hpp +32 -0
  119. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/benchmark/mpi/RandomDatasetFiller.hpp +1 -1
  120. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/binding/python/Common.hpp +15 -1
  121. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/binding/python/Container.H +23 -14
  122. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/binding/python/Mpi.hpp +36 -11
  123. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/binding/python/Numpy.hpp +1 -1
  124. openpmd_api-0.17.0/include/openPMD/binding/python/Pickle.hpp +109 -0
  125. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/binding/python/UnitDimension.hpp +25 -3
  126. openpmd_api-0.17.0/include/openPMD/binding/python/auxiliary.hpp +68 -0
  127. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/cli/ls.hpp +1 -1
  128. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/openPMD.hpp +6 -3
  129. openpmd_api-0.17.0/include/openPMD/snapshots/ContainerImpls.hpp +191 -0
  130. openpmd_api-0.17.0/include/openPMD/snapshots/ContainerTraits.hpp +168 -0
  131. openpmd_api-0.17.0/include/openPMD/snapshots/IteratorHelpers.hpp +42 -0
  132. openpmd_api-0.17.0/include/openPMD/snapshots/IteratorTraits.hpp +161 -0
  133. openpmd_api-0.17.0/include/openPMD/snapshots/RandomAccessIterator.hpp +95 -0
  134. openpmd_api-0.17.0/include/openPMD/snapshots/Snapshots.hpp +176 -0
  135. openpmd_api-0.17.0/include/openPMD/snapshots/StatefulIterator.hpp +437 -0
  136. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/version.hpp +32 -6
  137. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/openPMD_api.egg-info/PKG-INFO +10 -10
  138. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/openPMD_api.egg-info/SOURCES.txt +66 -2
  139. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/setup.py +3 -4
  140. openpmd_api-0.17.0/share/openPMD/json_schema/Makefile +15 -0
  141. openpmd_api-0.17.0/share/openPMD/json_schema/README.md +47 -0
  142. openpmd_api-0.17.0/share/openPMD/json_schema/attribute_defs.toml +253 -0
  143. openpmd_api-0.17.0/share/openPMD/json_schema/attributes.toml +92 -0
  144. openpmd_api-0.17.0/share/openPMD/json_schema/check.py +80 -0
  145. openpmd_api-0.17.0/share/openPMD/json_schema/dataset_defs.toml +144 -0
  146. openpmd_api-0.17.0/share/openPMD/json_schema/iteration.toml +77 -0
  147. openpmd_api-0.17.0/share/openPMD/json_schema/mesh.toml +101 -0
  148. openpmd_api-0.17.0/share/openPMD/json_schema/mesh_record_component.toml +27 -0
  149. openpmd_api-0.17.0/share/openPMD/json_schema/particle_patches.toml +48 -0
  150. openpmd_api-0.17.0/share/openPMD/json_schema/particle_species.toml +40 -0
  151. openpmd_api-0.17.0/share/openPMD/json_schema/patch_record.toml +37 -0
  152. openpmd_api-0.17.0/share/openPMD/json_schema/record.toml +83 -0
  153. openpmd_api-0.17.0/share/openPMD/json_schema/record_component.toml +68 -0
  154. openpmd_api-0.17.0/share/openPMD/json_schema/series.toml +137 -0
  155. openpmd_api-0.17.0/src/ChunkInfo.cpp +991 -0
  156. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/Dataset.cpp +16 -1
  157. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/Datatype.cpp +1 -1
  158. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/Error.cpp +26 -0
  159. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/Format.cpp +1 -1
  160. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/IO/ADIOS/ADIOS2Auxiliary.cpp +1 -1
  161. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/IO/ADIOS/ADIOS2File.cpp +182 -117
  162. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/IO/ADIOS/ADIOS2IOHandler.cpp +722 -287
  163. openpmd_api-0.17.0/src/IO/ADIOS/ADIOS2PreloadAttributes.cpp +353 -0
  164. openpmd_api-0.17.0/src/IO/ADIOS/ADIOS2PreloadVariables.cpp +121 -0
  165. openpmd_api-0.17.0/src/IO/AbstractIOHandler.cpp +177 -0
  166. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/IO/AbstractIOHandlerHelper.cpp +32 -5
  167. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/IO/AbstractIOHandlerImpl.cpp +75 -36
  168. openpmd_api-0.17.0/src/IO/Access.cpp +56 -0
  169. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/IO/DummyIOHandler.cpp +9 -2
  170. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/IO/FlushParams.cpp +3 -2
  171. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/IO/HDF5/HDF5Auxiliary.cpp +2 -1
  172. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/IO/HDF5/HDF5IOHandler.cpp +628 -216
  173. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/IO/HDF5/ParallelHDF5IOHandler.cpp +29 -13
  174. openpmd_api-0.17.0/src/IO/IOTask.cpp +310 -0
  175. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/IO/InvalidatableFile.cpp +1 -1
  176. openpmd_api-0.17.0/src/IO/JSON/JSONFilePosition.cpp +29 -0
  177. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/IO/JSON/JSONIOHandler.cpp +8 -6
  178. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/IO/JSON/JSONIOHandlerImpl.cpp +913 -203
  179. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/Iteration.cpp +190 -70
  180. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/IterationEncoding.cpp +1 -1
  181. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/Mesh.cpp +242 -28
  182. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/ParticlePatches.cpp +1 -1
  183. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/ParticleSpecies.cpp +29 -12
  184. openpmd_api-0.17.0/src/ReadIterations.cpp +84 -0
  185. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/Record.cpp +40 -14
  186. openpmd_api-0.17.0/src/RecordComponent.cpp +1058 -0
  187. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/Series.cpp +938 -268
  188. openpmd_api-0.17.0/src/UnitDimension.cpp +79 -0
  189. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/auxiliary/Filesystem.cpp +1 -1
  190. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/auxiliary/JSON.cpp +152 -28
  191. openpmd_api-0.17.0/src/auxiliary/JSONMatcher.cpp +308 -0
  192. openpmd_api-0.17.0/src/auxiliary/Memory.cpp +229 -0
  193. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/auxiliary/Mpi.cpp +20 -0
  194. {openpmd_api-0.16.1/src/benchmark/mpi → openpmd_api-0.17.0/src/auxiliary}/OneDimensionalBlockSlicer.cpp +39 -28
  195. openpmd_api-0.17.0/src/auxiliary/UniquePtr.cpp +112 -0
  196. openpmd_api-0.17.0/src/auxiliary/Variant.cpp +85 -0
  197. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/backend/Attributable.cpp +51 -30
  198. openpmd_api-0.17.0/src/backend/Attribute.cpp +151 -0
  199. openpmd_api-0.17.0/src/backend/BaseRecord.cpp +873 -0
  200. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/backend/BaseRecordComponent.cpp +3 -2
  201. openpmd_api-0.17.0/src/backend/Container.cpp +56 -0
  202. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/backend/MeshRecordComponent.cpp +9 -3
  203. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/backend/PatchRecord.cpp +11 -5
  204. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/backend/PatchRecordComponent.cpp +1 -18
  205. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/backend/Writable.cpp +11 -5
  206. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/binding/python/Access.cpp +25 -3
  207. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/binding/python/Attributable.cpp +9 -6
  208. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/binding/python/BaseRecordComponent.cpp +1 -1
  209. openpmd_api-0.17.0/src/binding/python/ChunkInfo.cpp +361 -0
  210. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/binding/python/Dataset.cpp +21 -11
  211. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/binding/python/Datatype.cpp +1 -1
  212. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/binding/python/Error.cpp +2 -0
  213. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/binding/python/Iteration.cpp +1 -1
  214. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/binding/python/Mesh.cpp +87 -6
  215. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/binding/python/MeshRecordComponent.cpp +1 -1
  216. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/binding/python/ParticlePatches.cpp +1 -1
  217. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/binding/python/ParticleSpecies.cpp +1 -1
  218. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/binding/python/PatchRecord.cpp +1 -1
  219. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/binding/python/PatchRecordComponent.cpp +1 -1
  220. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/binding/python/Record.cpp +16 -3
  221. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/binding/python/RecordComponent.cpp +64 -52
  222. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/binding/python/Series.cpp +340 -141
  223. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/binding/python/UnitDimension.cpp +22 -2
  224. openpmd_api-0.17.0/src/binding/python/auxiliary.cpp +33 -0
  225. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/binding/python/openPMD.cpp +1 -1
  226. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/binding/python/openpmd_api/DaskDataFrame.py +9 -4
  227. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/binding/python/openpmd_api/DataFrame.py +43 -11
  228. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/binding/python/openpmd_api/pipe/__main__.py +215 -74
  229. openpmd_api-0.17.0/src/cli/convert-toml-json.cpp +93 -0
  230. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/cli/ls.cpp +1 -1
  231. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/config.cpp +1 -1
  232. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/helper/list_series.cpp +10 -3
  233. openpmd_api-0.17.0/src/snapshots/ContainerImpls.cpp +525 -0
  234. openpmd_api-0.17.0/src/snapshots/ContainerTraits.cpp +134 -0
  235. openpmd_api-0.17.0/src/snapshots/IteratorHelpers.cpp +34 -0
  236. openpmd_api-0.17.0/src/snapshots/IteratorTraits.cpp +173 -0
  237. openpmd_api-0.17.0/src/snapshots/RandomAccessIterator.cpp +115 -0
  238. openpmd_api-0.17.0/src/snapshots/Snapshots.cpp +151 -0
  239. openpmd_api-0.17.0/src/snapshots/StatefulIterator.cpp +978 -0
  240. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/version.cpp +17 -3
  241. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/test/AuxiliaryTest.cpp +40 -10
  242. openpmd_api-0.17.0/test/CatchMain.cpp +22 -0
  243. openpmd_api-0.17.0/test/CatchRunner.cpp +57 -0
  244. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/test/CoreTest.cpp +354 -72
  245. openpmd_api-0.17.0/test/Files_Core/CoreTests.hpp +26 -0
  246. openpmd_api-0.17.0/test/Files_Core/automatic_variable_encoding.cpp +358 -0
  247. openpmd_api-0.17.0/test/Files_ParallelIO/ParallelIOTests.hpp +103 -0
  248. openpmd_api-0.17.0/test/Files_ParallelIO/bug_1655_bp5_writer_hangup.cpp +66 -0
  249. openpmd_api-0.17.0/test/Files_ParallelIO/iterate_nonstreaming_series.cpp +221 -0
  250. openpmd_api-0.17.0/test/Files_ParallelIO/read_variablebased_randomaccess.cpp +268 -0
  251. openpmd_api-0.17.0/test/Files_SerialIO/SerialIOTests.hpp +38 -0
  252. openpmd_api-0.17.0/test/Files_SerialIO/close_and_reopen_test.cpp +426 -0
  253. openpmd_api-0.17.0/test/Files_SerialIO/components_without_extent.cpp +268 -0
  254. openpmd_api-0.17.0/test/Files_SerialIO/filebased_write_test.cpp +136 -0
  255. openpmd_api-0.17.0/test/Files_SerialIO/issue_1744_unique_ptrs_at_close_time.cpp +53 -0
  256. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/test/JSONTest.cpp +224 -2
  257. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/test/ParallelIOTest.cpp +724 -196
  258. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/test/SerialIOTest.cpp +739 -442
  259. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/test/python/unittest/API/APITest.py +285 -63
  260. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/test/python/unittest/Test.py +6 -1
  261. openpmd_api-0.16.1/examples/13_write_dynamic_configuration.cpp +0 -141
  262. openpmd_api-0.16.1/include/openPMD/ChunkInfo.hpp +0 -136
  263. openpmd_api-0.16.1/include/openPMD/Dataset.hpp +0 -68
  264. openpmd_api-0.16.1/include/openPMD/IO/ADIOS/macros.hpp +0 -42
  265. openpmd_api-0.16.1/include/openPMD/IO/Access.hpp +0 -138
  266. openpmd_api-0.16.1/include/openPMD/ReadIterations.hpp +0 -182
  267. openpmd_api-0.16.1/include/openPMD/RecordComponent.tpp +0 -396
  268. openpmd_api-0.16.1/include/openPMD/WriteIterations.hpp +0 -109
  269. openpmd_api-0.16.1/include/openPMD/auxiliary/JSON.hpp +0 -65
  270. openpmd_api-0.16.1/include/openPMD/auxiliary/Memory.hpp +0 -217
  271. openpmd_api-0.16.1/include/openPMD/backend/BaseRecord.hpp +0 -1022
  272. openpmd_api-0.16.1/include/openPMD/binding/python/Pickle.hpp +0 -75
  273. openpmd_api-0.16.1/src/ChunkInfo.cpp +0 -168
  274. openpmd_api-0.16.1/src/IO/AbstractIOHandler.cpp +0 -46
  275. openpmd_api-0.16.1/src/IO/IOTask.cpp +0 -164
  276. openpmd_api-0.16.1/src/IO/JSON/JSONFilePosition.cpp +0 -9
  277. openpmd_api-0.16.1/src/ReadIterations.cpp +0 -658
  278. openpmd_api-0.16.1/src/RecordComponent.cpp +0 -567
  279. openpmd_api-0.16.1/src/WriteIterations.cpp +0 -124
  280. openpmd_api-0.16.1/src/binding/python/ChunkInfo.cpp +0 -103
  281. openpmd_api-0.16.1/test/CatchMain.cpp +0 -2
  282. openpmd_api-0.16.1/test/CatchRunner.cpp +0 -37
  283. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/COPYING +0 -0
  284. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/COPYING.LESSER +0 -0
  285. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/MANIFEST.in +0 -0
  286. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/cmake/dependencies/catch.cmake +0 -0
  287. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/cmake/dependencies/json.cmake +0 -0
  288. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/cmake/dependencies/toml11.cmake +0 -0
  289. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/cmake/openPMDFunctions.cmake +0 -0
  290. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/ChunkInfo_internal.hpp +0 -0
  291. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/Datatype.tpp +0 -0
  292. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/Datatype_internal.hpp +0 -0
  293. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/IO/FlushParametersInternal.hpp +0 -0
  294. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/ParticlePatches.hpp +0 -0
  295. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/UndefDatatypeMacros.hpp +0 -0
  296. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/auxiliary/Date.hpp +0 -0
  297. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/auxiliary/DerefDynamicCast.hpp +0 -0
  298. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/auxiliary/Environment.hpp +0 -0
  299. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/auxiliary/Export.hpp +0 -0
  300. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/backend/ParsePreference.hpp +0 -0
  301. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/binding/python/RecordComponent.hpp +0 -0
  302. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/config.hpp.in +0 -0
  303. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/include/openPMD/helper/list_series.hpp +0 -0
  304. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/openPMD.pc.in +0 -0
  305. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/openPMDConfig.cmake.in +0 -0
  306. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/openPMD_api.egg-info/dependency_links.txt +0 -0
  307. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/openPMD_api.egg-info/entry_points.txt +0 -0
  308. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/openPMD_api.egg-info/not-zip-safe +0 -0
  309. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/openPMD_api.egg-info/requires.txt +0 -0
  310. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/openPMD_api.egg-info/top_level.txt +0 -0
  311. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/pyproject.toml +0 -0
  312. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/requirements.txt +0 -0
  313. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/setup.cfg +0 -0
  314. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/share/openPMD/download_samples.ps1 +0 -0
  315. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/share/openPMD/download_samples.sh +0 -0
  316. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/share/openPMD/validate_files.sh +0 -0
  317. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/auxiliary/Date.cpp +0 -0
  318. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/binding/python/Helper.cpp +0 -0
  319. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/binding/python/IterationEncoding.cpp +0 -0
  320. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/binding/python/openpmd_api/DaskArray.py +0 -0
  321. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/binding/python/openpmd_api/__init__.py +0 -0
  322. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/binding/python/openpmd_api/ls/__init__.py +0 -0
  323. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/binding/python/openpmd_api/ls/__main__.py +0 -0
  324. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/binding/python/openpmd_api/pipe/__init__.py +0 -0
  325. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/src/cli/pipe.py +0 -0
  326. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/test/python/unittest/API/__init__.py +0 -0
  327. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/test/python/unittest/TestUtilities/TestUtilities.py +0 -0
  328. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/test/python/unittest/TestUtilities/__init__.py +0 -0
  329. {openpmd_api-0.16.1 → openpmd_api-0.17.0}/test/python/unittest/__init__.py +0 -0
@@ -2,7 +2,7 @@
2
2
  #
3
3
  cmake_minimum_required(VERSION 3.22.0)
4
4
 
5
- project(openPMD VERSION 0.16.1) # LANGUAGES CXX
5
+ project(openPMD VERSION 0.17.0) # LANGUAGES CXX
6
6
 
7
7
  # the openPMD "markup"/"schema" standard version
8
8
  set(openPMD_STANDARD_VERSION 1.1.0)
@@ -151,6 +151,8 @@ option(openPMD_USE_INTERNAL_TOML11 "Use internally shipped toml11" ${op
151
151
 
152
152
  option(openPMD_USE_INVASIVE_TESTS "Enable unit tests that modify source code" OFF)
153
153
  option(openPMD_USE_VERIFY "Enable internal VERIFY (assert) macro independent of build type" ON)
154
+ option(openPMD_USE_FILESYSTEM_HEADER "Enable filesystem header. May be disabled for old compiler versions." OFF)
155
+ mark_as_advanced(openPMD_USE_FILESYSTEM_HEADER)
154
156
 
155
157
  set(CMAKE_CONFIGURATION_TYPES "Release;Debug;MinSizeRel;RelWithDebInfo")
156
158
  if(NOT CMAKE_BUILD_TYPE)
@@ -231,6 +233,7 @@ message(STATUS "openPMD-api superbuild: ${openPMD_SUPERBUILD}")
231
233
  # Clang+MPI: Potentially needed MPI::MPI_C targets in the past
232
234
  # (exact MPI flavor & Clang version lost)
233
235
  # BullMPI: PUBLIC dependency to MPI::MPI_CXX is missing in MPI::MPI_C target
236
+ set(MPI_CXX_SKIP_MPICXX ON) # We do not use MPI-2 only MPI C++ bindings
234
237
  set(openPMD_MPI_LINK_C_DEFAULT OFF)
235
238
  option(openPMD_MPI_LINK_C "Also link the MPI C targets" ${openPMD_MPI_LINK_C_DEFAULT})
236
239
  mark_as_advanced(openPMD_MPI_LINK_C)
@@ -326,8 +329,9 @@ if(openPMD_HAVE_HDF5)
326
329
  endif()
327
330
  # we imply support for parallel I/O if MPI variant is ON
328
331
  if(openPMD_HAVE_MPI AND openPMD_HAVE_HDF5
329
- AND NOT HDF5_IS_PARALLEL # FindHDF5.cmake
330
- AND NOT HDF5_ENABLE_PARALLEL # hdf5-config.cmake
332
+ AND NOT (HDF5_IS_PARALLEL # FindHDF5.cmake
333
+ OR HDF5_ENABLE_PARALLEL # hdf5-config.cmake < 2.0.0
334
+ OR HDF5_PROVIDES_PARALLEL) # hdf5-config.cmake >= 2.0.0
331
335
  )
332
336
  string(CONCAT openPMD_HDF5_STATUS
333
337
  "Found MPI but only serial version of HDF5. Either set "
@@ -335,9 +339,11 @@ if(openPMD_HAVE_MPI AND openPMD_HAVE_HDF5
335
339
  "to disable HDF5 or provide a parallel install of HDF5.\n")
336
340
  endif()
337
341
  # HDF5 includes mpi.h in the public header H5public.h if parallel
338
- if(openPMD_HAVE_HDF5 AND
339
- (HDF5_IS_PARALLEL OR HDF5_ENABLE_PARALLEL)
340
- AND NOT openPMD_HAVE_MPI)
342
+ if(openPMD_HAVE_HDF5 AND NOT openPMD_HAVE_MPI
343
+ AND (HDF5_IS_PARALLEL # FindHDF5.cmake
344
+ OR HDF5_ENABLE_PARALLEL # hdf5-config.cmake < 2.0.0
345
+ OR HDF5_PROVIDES_PARALLEL) # hdf5-config.cmake >= 2.0.0
346
+ )
341
347
  string(CONCAT openPMD_HDF5_STATUS
342
348
  "Found only parallel version of HDF5 but no MPI. Either set "
343
349
  "openPMD_USE_MPI=ON to force using MPI or set openPMD_USE_HDF5=OFF "
@@ -365,14 +371,14 @@ if(openPMD_HAVE_MPI)
365
371
  list(APPEND openPMD_REQUIRED_ADIOS2_COMPONENTS MPI)
366
372
  endif()
367
373
  if(openPMD_USE_ADIOS2 STREQUAL AUTO)
368
- find_package(ADIOS2 2.7.0 CONFIG COMPONENTS ${openPMD_REQUIRED_ADIOS2_COMPONENTS})
374
+ find_package(ADIOS2 2.9.0 CONFIG COMPONENTS ${openPMD_REQUIRED_ADIOS2_COMPONENTS})
369
375
  if(ADIOS2_FOUND)
370
376
  set(openPMD_HAVE_ADIOS2 TRUE)
371
377
  else()
372
378
  set(openPMD_HAVE_ADIOS2 FALSE)
373
379
  endif()
374
380
  elseif(openPMD_USE_ADIOS2)
375
- find_package(ADIOS2 2.7.0 REQUIRED CONFIG COMPONENTS ${openPMD_REQUIRED_ADIOS2_COMPONENTS})
381
+ find_package(ADIOS2 2.9.0 REQUIRED CONFIG COMPONENTS ${openPMD_REQUIRED_ADIOS2_COMPONENTS})
376
382
  set(openPMD_HAVE_ADIOS2 TRUE)
377
383
  else()
378
384
  set(openPMD_HAVE_ADIOS2 FALSE)
@@ -397,28 +403,43 @@ set(CORE_SOURCE
397
403
  src/Mesh.cpp
398
404
  src/ParticlePatches.cpp
399
405
  src/ParticleSpecies.cpp
400
- src/ReadIterations.cpp
401
406
  src/Record.cpp
407
+ src/ReadIterations.cpp
402
408
  src/RecordComponent.cpp
403
409
  src/Series.cpp
410
+ src/UnitDimension.cpp
404
411
  src/version.cpp
405
- src/WriteIterations.cpp
406
412
  src/auxiliary/Date.cpp
407
413
  src/auxiliary/Filesystem.cpp
408
414
  src/auxiliary/JSON.cpp
415
+ src/auxiliary/JSONMatcher.cpp
416
+ src/auxiliary/Memory.cpp
409
417
  src/auxiliary/Mpi.cpp
418
+ src/auxiliary/UniquePtr.cpp
419
+ src/auxiliary/Variant.cpp
410
420
  src/backend/Attributable.cpp
421
+ src/backend/Attribute.cpp
422
+ src/backend/BaseRecord.cpp
411
423
  src/backend/BaseRecordComponent.cpp
424
+ src/backend/Container.cpp
412
425
  src/backend/MeshRecordComponent.cpp
413
426
  src/backend/PatchRecord.cpp
414
427
  src/backend/PatchRecordComponent.cpp
415
428
  src/backend/Writable.cpp
416
- src/benchmark/mpi/OneDimensionalBlockSlicer.cpp
417
- src/helper/list_series.cpp)
429
+ src/auxiliary/OneDimensionalBlockSlicer.cpp
430
+ src/helper/list_series.cpp
431
+ src/snapshots/ContainerImpls.cpp
432
+ src/snapshots/ContainerTraits.cpp
433
+ src/snapshots/IteratorHelpers.cpp
434
+ src/snapshots/IteratorTraits.cpp
435
+ src/snapshots/RandomAccessIterator.cpp
436
+ src/snapshots/Snapshots.cpp
437
+ src/snapshots/StatefulIterator.cpp)
418
438
  set(IO_SOURCE
419
439
  src/IO/AbstractIOHandler.cpp
420
440
  src/IO/AbstractIOHandlerImpl.cpp
421
441
  src/IO/AbstractIOHandlerHelper.cpp
442
+ src/IO/Access.cpp
422
443
  src/IO/DummyIOHandler.cpp
423
444
  src/IO/IOTask.cpp
424
445
  src/IO/FlushParams.cpp
@@ -429,6 +450,8 @@ set(IO_SOURCE
429
450
  src/IO/JSON/JSONIOHandlerImpl.cpp
430
451
  src/IO/JSON/JSONFilePosition.cpp
431
452
  src/IO/ADIOS/ADIOS2IOHandler.cpp
453
+ src/IO/ADIOS/ADIOS2PreloadAttributes.cpp
454
+ src/IO/ADIOS/ADIOS2PreloadVariables.cpp
432
455
  src/IO/ADIOS/ADIOS2File.cpp
433
456
  src/IO/ADIOS/ADIOS2Auxiliary.cpp
434
457
  src/IO/InvalidatableFile.cpp)
@@ -524,10 +547,18 @@ endif()
524
547
 
525
548
  # ADIOS2 Backend
526
549
  if(openPMD_HAVE_ADIOS2)
527
- if(openPMD_HAVE_MPI)
528
- target_link_libraries(openPMD PUBLIC adios2::cxx11_mpi)
550
+ if(${ADIOS2_VERSION} VERSION_GREATER_EQUAL 2.11.0)
551
+ if(openPMD_HAVE_MPI)
552
+ target_link_libraries(openPMD PUBLIC adios2::cxx_mpi)
553
+ else()
554
+ target_link_libraries(openPMD PUBLIC adios2::cxx)
555
+ endif()
529
556
  else()
530
- target_link_libraries(openPMD PUBLIC adios2::cxx11)
557
+ if(openPMD_HAVE_MPI)
558
+ target_link_libraries(openPMD PUBLIC adios2::cxx11_mpi)
559
+ else()
560
+ target_link_libraries(openPMD PUBLIC adios2::cxx11)
561
+ endif()
531
562
  endif()
532
563
  endif()
533
564
 
@@ -542,6 +573,7 @@ endif()
542
573
  if(openPMD_HAVE_PYTHON)
543
574
  add_library(openPMD.py MODULE
544
575
  src/binding/python/openPMD.cpp
576
+ src/binding/python/auxiliary.cpp
545
577
  src/binding/python/Access.cpp
546
578
  src/binding/python/Attributable.cpp
547
579
  src/binding/python/BaseRecordComponent.cpp
@@ -671,11 +703,12 @@ set(openPMD_TEST_NAMES
671
703
  # command line tools
672
704
  set(openPMD_CLI_TOOL_NAMES
673
705
  ls
706
+ convert-toml-json
674
707
  )
675
708
  set(openPMD_PYTHON_CLI_TOOL_NAMES
676
709
  pipe
677
710
  )
678
- set(openPMD_PYTHON_CLI_MODULE_NAMES ${openPMD_CLI_TOOL_NAMES})
711
+ set(openPMD_PYTHON_CLI_MODULE_NAMES ls)
679
712
  # examples
680
713
  set(openPMD_EXAMPLE_NAMES
681
714
  1_structure
@@ -695,6 +728,8 @@ set(openPMD_EXAMPLE_NAMES
695
728
  10_streaming_read
696
729
  12_span_write
697
730
  13_write_dynamic_configuration
731
+ 14_toml_template
732
+ 15_compression
698
733
  )
699
734
  set(openPMD_PYTHON_EXAMPLE_NAMES
700
735
  2_read_serial
@@ -711,6 +746,7 @@ set(openPMD_PYTHON_EXAMPLE_NAMES
711
746
  11_particle_dataframe
712
747
  12_span_write
713
748
  13_write_dynamic_configuration
749
+ 15_compression
714
750
  )
715
751
 
716
752
  if(openPMD_USE_INVASIVE_TESTS)
@@ -721,6 +757,18 @@ if(openPMD_USE_INVASIVE_TESTS)
721
757
  target_compile_definitions(openPMD PRIVATE openPMD_USE_INVASIVE_TESTS=1)
722
758
  endif()
723
759
 
760
+ function(set_filesystem_header_for_target target)
761
+ if(openPMD_USE_FILESYSTEM_HEADER)
762
+ target_compile_definitions(${target} PRIVATE openPMD_USE_FILESYSTEM_HEADER=1)
763
+ else()
764
+ target_compile_definitions(${target} PRIVATE openPMD_USE_FILESYSTEM_HEADER=0)
765
+ endif()
766
+ endfunction()
767
+ set_filesystem_header_for_target(openPMD)
768
+ if(openPMD_HAVE_PYTHON)
769
+ set_filesystem_header_for_target(openPMD.py)
770
+ endif()
771
+
724
772
  if(openPMD_BUILD_TESTING)
725
773
  # compile Catch2 implementation part separately
726
774
  add_library(CatchRunner ${_openpmd_lib_type}
@@ -772,8 +820,32 @@ if(openPMD_BUILD_TESTING)
772
820
  target_compile_definitions(CatchRunner PUBLIC openPMD_HAVE_MPI=1)
773
821
  endif()
774
822
 
823
+ macro(additional_testing_sources test_name out_list)
824
+ if(${test_name} STREQUAL "SerialIO")
825
+ list(APPEND ${out_list}
826
+ test/Files_SerialIO/close_and_reopen_test.cpp
827
+ test/Files_SerialIO/filebased_write_test.cpp
828
+ test/Files_SerialIO/issue_1744_unique_ptrs_at_close_time.cpp
829
+ test/Files_SerialIO/components_without_extent.cpp
830
+ )
831
+ elseif(${test_name} STREQUAL "ParallelIO" AND openPMD_HAVE_MPI)
832
+ list(APPEND ${out_list}
833
+ test/Files_ParallelIO/read_variablebased_randomaccess.cpp
834
+ test/Files_ParallelIO/iterate_nonstreaming_series.cpp
835
+ test/Files_ParallelIO/bug_1655_bp5_writer_hangup.cpp
836
+ )
837
+ elseif(${test_name} STREQUAL "Core")
838
+ list(APPEND ${out_list}
839
+ test/Files_Core/automatic_variable_encoding.cpp
840
+ )
841
+ endif()
842
+ endmacro()
843
+
775
844
  foreach(testname ${openPMD_TEST_NAMES})
776
- add_executable(${testname}Tests test/${testname}Test.cpp)
845
+ set(ADDITIONAL_SOURCE_FILES "")
846
+ additional_testing_sources(${testname} ADDITIONAL_SOURCE_FILES)
847
+ add_executable(${testname}Tests test/${testname}Test.cpp ${ADDITIONAL_SOURCE_FILES})
848
+ target_include_directories(${testname}Tests PRIVATE test/Files_${testname}/)
777
849
  openpmd_cxx_required(${testname}Tests)
778
850
  set_target_properties(${testname}Tests PROPERTIES
779
851
  COMPILE_PDB_NAME ${testname}Tests
@@ -844,6 +916,9 @@ if(openPMD_BUILD_CLI_TOOLS)
844
916
  endif()
845
917
 
846
918
  target_link_libraries(openpmd-${toolname} PRIVATE openPMD)
919
+ target_include_directories(openpmd-${toolname} SYSTEM PRIVATE
920
+ $<TARGET_PROPERTY:openPMD::thirdparty::nlohmann_json,INTERFACE_INCLUDE_DIRECTORIES>
921
+ $<TARGET_PROPERTY:openPMD::thirdparty::toml11,INTERFACE_INCLUDE_DIRECTORIES>)
847
922
  endforeach()
848
923
  endif()
849
924
 
@@ -1286,27 +1361,30 @@ if(openPMD_BUILD_TESTING)
1286
1361
  )
1287
1362
  add_test(NAME CLI.pipe.py
1288
1363
  COMMAND sh -c
1289
- "${MPI_TEST_EXE} ${Python_EXECUTABLE} \
1290
- ${openPMD_RUNTIME_OUTPUT_DIRECTORY}/openpmd-pipe \
1291
- --infile ../samples/git-sample/data%T.h5 \
1292
- --outfile ../samples/git-sample/data%T.bp && \
1293
- \
1294
- ${MPI_TEST_EXE} ${Python_EXECUTABLE} \
1295
- ${openPMD_RUNTIME_OUTPUT_DIRECTORY}/openpmd-pipe \
1296
- --infile ../samples/git-sample/data00000100.h5 \
1297
- --outfile \
1298
- ../samples/git-sample/single_iteration_%T.bp && \
1299
- \
1300
- ${MPI_TEST_EXE} ${Python_EXECUTABLE} \
1301
- ${openPMD_RUNTIME_OUTPUT_DIRECTORY}/openpmd-pipe \
1302
- --infile ../samples/git-sample/thetaMode/data%T.h5 \
1303
- --outfile \
1304
- ../samples/git-sample/thetaMode/data_%T.bp && \
1305
- \
1306
- ${MPI_TEST_EXE} ${Python_EXECUTABLE} \
1307
- ${openPMD_RUNTIME_OUTPUT_DIRECTORY}/openpmd-pipe \
1308
- --infile ../samples/git-sample/thetaMode/data_%T.bp \
1309
- --outfile ../samples/git-sample/thetaMode/data%T.json \
1364
+ "${MPI_TEST_EXE} ${MPIEXEC_NUMPROC_FLAG} 2 ${Python_EXECUTABLE} \
1365
+ ${openPMD_RUNTIME_OUTPUT_DIRECTORY}/openpmd-pipe \
1366
+ --infile ../samples/git-sample/data%T.h5 \
1367
+ --outfile ../samples/git-sample/data%T.bp && \
1368
+ \
1369
+ ${MPI_TEST_EXE} ${Python_EXECUTABLE} \
1370
+ ${openPMD_RUNTIME_OUTPUT_DIRECTORY}/openpmd-pipe \
1371
+ --infile ../samples/git-sample/data00000100.h5 \
1372
+ --outfile \
1373
+ ../samples/git-sample/single_iteration_%T.bp && \
1374
+ \
1375
+ ${MPI_TEST_EXE} ${MPIEXEC_NUMPROC_FLAG} 2 ${Python_EXECUTABLE} \
1376
+ ${openPMD_RUNTIME_OUTPUT_DIRECTORY}/openpmd-pipe \
1377
+ --infile ../samples/git-sample/thetaMode/data%T.h5 \
1378
+ --outfile \
1379
+ ../samples/git-sample/thetaMode/data_%T.bp && \
1380
+ \
1381
+ ${MPI_TEST_EXE} ${Python_EXECUTABLE} \
1382
+ ${openPMD_RUNTIME_OUTPUT_DIRECTORY}/openpmd-pipe \
1383
+ --infile ../samples/git-sample/thetaMode/data_%T.bp \
1384
+ --outfile ../samples/git-sample/thetaMode/data%T.json \
1385
+ --outconfig ' \
1386
+ json.attribute.mode = \"short\" \n\
1387
+ json.dataset.mode = \"template_no_warn\"' \
1310
1388
  "
1311
1389
  WORKING_DIRECTORY ${openPMD_RUNTIME_OUTPUT_DIRECTORY}
1312
1390
  )
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: openPMD-api
3
- Version: 0.16.1
3
+ Version: 0.17.0
4
4
  Summary: C++ & Python API for Scientific I/O with openPMD
5
5
  Home-page: https://www.openPMD.org
6
6
  Author: Axel Huebl, Franz Poeschel, Fabian Koller, Junmin Gu
@@ -22,14 +22,13 @@ Classifier: Topic :: Scientific/Engineering
22
22
  Classifier: Topic :: Database :: Front-Ends
23
23
  Classifier: Programming Language :: C++
24
24
  Classifier: Programming Language :: Python :: 3
25
- Classifier: Programming Language :: Python :: 3.8
26
- Classifier: Programming Language :: Python :: 3.9
27
25
  Classifier: Programming Language :: Python :: 3.10
28
26
  Classifier: Programming Language :: Python :: 3.11
29
27
  Classifier: Programming Language :: Python :: 3.12
30
28
  Classifier: Programming Language :: Python :: 3.13
29
+ Classifier: Programming Language :: Python :: 3.14
31
30
  Classifier: License :: OSI Approved :: GNU Lesser General Public License v3 or later (LGPLv3+)
32
- Requires-Python: >=3.8
31
+ Requires-Python: >=3.10
33
32
  Description-Content-Type: text/markdown
34
33
  License-File: COPYING
35
34
  License-File: COPYING.LESSER
@@ -41,6 +40,7 @@ Dynamic: description
41
40
  Dynamic: description-content-type
42
41
  Dynamic: home-page
43
42
  Dynamic: keywords
43
+ Dynamic: license-file
44
44
  Dynamic: maintainer
45
45
  Dynamic: maintainer-email
46
46
  Dynamic: project-url
@@ -158,14 +158,14 @@ Shipped internally (downloaded by CMake unless `openPMD_SUPERBUILD=OFF` is set):
158
158
  I/O backends:
159
159
  * [JSON](https://en.wikipedia.org/wiki/JSON)
160
160
  * [HDF5](https://support.hdfgroup.org/HDF5) 1.8.13+ (optional)
161
- * [ADIOS2](https://github.com/ornladios/ADIOS2) 2.7.0+ (optional)
161
+ * [ADIOS2](https://github.com/ornladios/ADIOS2) 2.9.0+ (optional)
162
162
 
163
163
  while those can be built either with or without:
164
164
  * MPI 2.1+, e.g. OpenMPI 1.6.5+ or MPICH2
165
165
 
166
166
  Optional language bindings:
167
167
  * Python:
168
- * Python 3.8 - 3.13
168
+ * Python 3.10 - 3.14
169
169
  * pybind11 2.13.0+
170
170
  * numpy 1.15+
171
171
  * mpi4py 2.1+ (optional, for MPI)
@@ -354,7 +354,7 @@ export CMAKE_PREFIX_PATH=$HOME/somepath:$CMAKE_PREFIX_PATH
354
354
  Use the following lines in your project's `CMakeLists.txt`:
355
355
  ```cmake
356
356
  # supports: COMPONENTS MPI NOMPI HDF5 ADIOS2
357
- find_package(openPMD 0.16.1 CONFIG)
357
+ find_package(openPMD 0.17.0 CONFIG)
358
358
 
359
359
  if(openPMD_FOUND)
360
360
  target_link_libraries(YourTarget PRIVATE openPMD::openPMD)
@@ -382,7 +382,7 @@ set(openPMD_INSTALL OFF) # or instead use:
382
382
  set(openPMD_USE_PYTHON OFF)
383
383
  FetchContent_Declare(openPMD
384
384
  GIT_REPOSITORY "https://github.com/openPMD/openPMD-api.git"
385
- GIT_TAG "0.16.1")
385
+ GIT_TAG "0.17.0")
386
386
  FetchContent_MakeAvailable(openPMD)
387
387
  ```
388
388
 
@@ -431,7 +431,7 @@ The following people and institutions [contributed](https://github.com/openPMD/o
431
431
 
432
432
  Maintained by the following research groups:
433
433
 
434
- * [Computational Radiation Physics (CRD)](https://www.casus.science/casus/team/) at CASUS/HZDR, led by [Michael Bussmann](https://github.com/bussmann)
434
+ * [Computational Radiation Physics (CRP)](https://www.casus.science/casus/team/) at CASUS/HZDR, led by [Michael Bussmann](https://github.com/bussmann)
435
435
  * [Accelerator Modeling Program (AMP)](https://atap.lbl.gov/accelerator-modeling-program/) at LBNL, led by [Jean-Luc Vay](https://github.com/jlvay)
436
436
  * [Scientific Data Management (SDM)](https://crd.lbl.gov/divisions/scidata/sdm/) at LBNL, led by [Kesheng (John) Wu](https://github.com/john18)
437
437
 
@@ -108,14 +108,14 @@ Shipped internally (downloaded by CMake unless `openPMD_SUPERBUILD=OFF` is set):
108
108
  I/O backends:
109
109
  * [JSON](https://en.wikipedia.org/wiki/JSON)
110
110
  * [HDF5](https://support.hdfgroup.org/HDF5) 1.8.13+ (optional)
111
- * [ADIOS2](https://github.com/ornladios/ADIOS2) 2.7.0+ (optional)
111
+ * [ADIOS2](https://github.com/ornladios/ADIOS2) 2.9.0+ (optional)
112
112
 
113
113
  while those can be built either with or without:
114
114
  * MPI 2.1+, e.g. OpenMPI 1.6.5+ or MPICH2
115
115
 
116
116
  Optional language bindings:
117
117
  * Python:
118
- * Python 3.8 - 3.13
118
+ * Python 3.10 - 3.14
119
119
  * pybind11 2.13.0+
120
120
  * numpy 1.15+
121
121
  * mpi4py 2.1+ (optional, for MPI)
@@ -304,7 +304,7 @@ export CMAKE_PREFIX_PATH=$HOME/somepath:$CMAKE_PREFIX_PATH
304
304
  Use the following lines in your project's `CMakeLists.txt`:
305
305
  ```cmake
306
306
  # supports: COMPONENTS MPI NOMPI HDF5 ADIOS2
307
- find_package(openPMD 0.16.1 CONFIG)
307
+ find_package(openPMD 0.17.0 CONFIG)
308
308
 
309
309
  if(openPMD_FOUND)
310
310
  target_link_libraries(YourTarget PRIVATE openPMD::openPMD)
@@ -332,7 +332,7 @@ set(openPMD_INSTALL OFF) # or instead use:
332
332
  set(openPMD_USE_PYTHON OFF)
333
333
  FetchContent_Declare(openPMD
334
334
  GIT_REPOSITORY "https://github.com/openPMD/openPMD-api.git"
335
- GIT_TAG "0.16.1")
335
+ GIT_TAG "0.17.0")
336
336
  FetchContent_MakeAvailable(openPMD)
337
337
  ```
338
338
 
@@ -381,7 +381,7 @@ The following people and institutions [contributed](https://github.com/openPMD/o
381
381
 
382
382
  Maintained by the following research groups:
383
383
 
384
- * [Computational Radiation Physics (CRD)](https://www.casus.science/casus/team/) at CASUS/HZDR, led by [Michael Bussmann](https://github.com/bussmann)
384
+ * [Computational Radiation Physics (CRP)](https://www.casus.science/casus/team/) at CASUS/HZDR, led by [Michael Bussmann](https://github.com/bussmann)
385
385
  * [Accelerator Modeling Program (AMP)](https://atap.lbl.gov/accelerator-modeling-program/) at LBNL, led by [Jean-Luc Vay](https://github.com/jlvay)
386
386
  * [Scientific Data Management (SDM)](https://crd.lbl.gov/divisions/scidata/sdm/) at LBNL, led by [Kesheng (John) Wu](https://github.com/john18)
387
387
 
@@ -83,9 +83,9 @@ set(openPMD_pybind11_branch "v2.13.6"
83
83
  "Repository branch for openPMD_pybind11_repo if(openPMD_USE_INTERNAL_PYBIND11)")
84
84
 
85
85
  if(openPMD_USE_PYTHON STREQUAL AUTO)
86
- find_package(Python 3.7.0 COMPONENTS Interpreter Development.Module)
86
+ find_package(Python 3.10.0 COMPONENTS Interpreter Development.Module)
87
87
  elseif(openPMD_USE_PYTHON)
88
- find_package(Python 3.7.0 COMPONENTS Interpreter Development.Module REQUIRED)
88
+ find_package(Python 3.10.0 COMPONENTS Interpreter Development.Module REQUIRED)
89
89
  else()
90
90
  set(openPMD_HAVE_PYTHON FALSE)
91
91
  endif()
@@ -1,3 +1,23 @@
1
+ /* Copyright 2025 Franz Poeschel, Luca Fedeli
2
+ *
3
+ * This file is part of openPMD-api.
4
+ *
5
+ * openPMD-api is free software: you can redistribute it and/or modify
6
+ * it under the terms of of either the GNU General Public License or
7
+ * the GNU Lesser General Public License as published by
8
+ * the Free Software Foundation, either version 3 of the License, or
9
+ * (at your option) any later version.
10
+ *
11
+ * openPMD-api is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ * GNU General Public License and the GNU Lesser General Public License
15
+ * for more details.
16
+ *
17
+ * You should have received a copy of the GNU General Public License
18
+ * and the GNU Lesser General Public License along with openPMD-api.
19
+ * If not, see <http://www.gnu.org/licenses/>.
20
+ */
1
21
  #include <openPMD/openPMD.hpp>
2
22
 
3
23
  #include <algorithm>
@@ -18,6 +38,15 @@ int main()
18
38
  return 0;
19
39
  }
20
40
 
41
+ // Access the Series linearly. This means that upon opening the Series, no
42
+ // data is accessed yet. Instead, the single Iterations are processed
43
+ // collectively, one after the other, and data access only happens upon
44
+ // explicitly accessing an Iteration from `Series::snapshots()`. Note that
45
+ // the Container API of `Series::snapshots()` will work in a restricted mode
46
+ // compared to the `READ_RANDOM_ACCESS` access type, refer also to the
47
+ // documentation of the `Snapshots` class in `snapshots/Snapshots.hpp`. This
48
+ // restricted workflow enables performance optimizations in the backends,
49
+ // and more importantly is compatible with streaming I/O.
21
50
  Series series = Series("electrons.sst", Access::READ_LINEAR, R"(
22
51
  {
23
52
  "adios2": {
@@ -29,15 +58,9 @@ int main()
29
58
  }
30
59
  })");
31
60
 
32
- // `Series::writeIterations()` and `Series::readIterations()` are
33
- // intentionally restricted APIs that ensure a workflow which also works
34
- // in streaming setups, e.g. an iteration cannot be opened again once
35
- // it has been closed.
36
- // `Series::iterations` can be directly accessed in random-access workflows.
37
- for (IndexedIteration iteration : series.readIterations())
61
+ for (auto &[index, iteration] : series.snapshots())
38
62
  {
39
- std::cout << "Current iteration: " << iteration.iterationIndex
40
- << std::endl;
63
+ std::cout << "Current iteration: " << index << std::endl;
41
64
  Record electronPositions = iteration.particles["e"]["position"];
42
65
  std::array<RecordComponent::shared_ptr_dataset_types, 3> loadedChunks;
43
66
  std::array<Extent, 3> extents;
@@ -54,7 +77,6 @@ int main()
54
77
 
55
78
  // The iteration can be closed in order to help free up resources.
56
79
  // The iteration's content will be flushed automatically.
57
- // An iteration once closed cannot (yet) be reopened.
58
80
  iteration.close();
59
81
 
60
82
  for (size_t i = 0; i < 3; ++i)
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env python
2
- import json
3
2
  import sys
4
3
 
5
4
  import openpmd_api as io
@@ -18,19 +17,11 @@ if __name__ == "__main__":
18
17
  print("SST engine not available in ADIOS2.")
19
18
  sys.exit(0)
20
19
 
21
- series = io.Series("simData.sst", io.Access_Type.read_linear,
22
- json.dumps(config))
20
+ series = io.Series("simData.sst", io.Access_Type.read_linear, config)
23
21
 
24
22
  # Read all available iterations and print electron position data.
25
- # Direct access to iterations is possible via `series.iterations`.
26
- # For streaming support, `series.read_iterations()` needs to be used
27
- # instead of `series.iterations`.
28
- # `Series.write_iterations()` and `Series.read_iterations()` are
29
- # intentionally restricted APIs that ensure a workflow which also works
30
- # in streaming setups, e.g. an iteration cannot be opened again once
31
- # it has been closed.
32
- for iteration in series.read_iterations():
33
- print("Current iteration {}".format(iteration.iteration_index))
23
+ for index, iteration in series.snapshots().items():
24
+ print("Current iteration {}".format(index))
34
25
  electronPositions = iteration.particles["e"]["position"]
35
26
  loadedChunks = []
36
27
  shapes = []
@@ -1,3 +1,25 @@
1
+ /* Copyright 2025 Axel Huebl, Franz Poeschel
2
+ *
3
+ * This file is part of openPMD-api.
4
+ *
5
+ * openPMD-api is free software: you can redistribute it and/or modify
6
+ * it under the terms of of either the GNU General Public License or
7
+ * the GNU Lesser General Public License as published by
8
+ * the Free Software Foundation, either version 3 of the License, or
9
+ * (at your option) any later version.
10
+ *
11
+ * openPMD-api is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ * GNU General Public License and the GNU Lesser General Public License
15
+ * for more details.
16
+ *
17
+ * You should have received a copy of the GNU General Public License
18
+ * and the GNU Lesser General Public License along with openPMD-api.
19
+ * If not, see <http://www.gnu.org/licenses/>.
20
+ */
21
+ #include "openPMD/Series.hpp"
22
+ #include "openPMD/snapshots/Snapshots.hpp"
1
23
  #include <openPMD/openPMD.hpp>
2
24
 
3
25
  #include <algorithm>
@@ -20,12 +42,21 @@ int main()
20
42
  }
21
43
 
22
44
  // open file for writing
23
- Series series = Series("electrons.sst", Access::CREATE, R"(
45
+ // use QueueFullPolicy = Discard in order to create a situation where from
46
+ // the reader's perspective steps are skipped. This tests the bug reported
47
+ // in https://github.com/openPMD/openPMD-api/issues/1747.
48
+ // Create the Series with linear write access, i.e. one Iteration after
49
+ // the other. The alternative would be random-access where multiple
50
+ // Iterations can be accessed independently from one another. This more
51
+ // restricted mode enables performance optimizations in the backends, and
52
+ // more importantly is compatible with streaming I/O.
53
+ Series series = Series("electrons.sst", Access::CREATE_LINEAR, R"(
24
54
  {
25
55
  "adios2": {
26
56
  "engine": {
27
57
  "parameters": {
28
- "DataTransport": "WAN"
58
+ "DataTransport": "WAN",
59
+ "QueueFullPolicy": "Discard"
29
60
  }
30
61
  }
31
62
  }
@@ -38,12 +69,7 @@ int main()
38
69
  std::shared_ptr<position_t> local_data(
39
70
  new position_t[length], [](position_t const *ptr) { delete[] ptr; });
40
71
 
41
- // `Series::writeIterations()` and `Series::readIterations()` are
42
- // intentionally restricted APIs that ensure a workflow which also works
43
- // in streaming setups, e.g. an iteration cannot be opened again once
44
- // it has been closed.
45
- // `Series::iterations` can be directly accessed in random-access workflows.
46
- WriteIterations iterations = series.writeIterations();
72
+ auto iterations = series.snapshots();
47
73
  for (size_t i = 0; i < 100; ++i)
48
74
  {
49
75
  Iteration iteration = iterations[i];
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env python
2
- import json
3
2
  import sys
4
3
 
5
4
  import numpy as np
@@ -21,21 +20,13 @@ if __name__ == "__main__":
21
20
 
22
21
  # create a series and specify some global metadata
23
22
  # change the file extension to .json, .h5 or .bp for regular file writing
24
- series = io.Series("simData.sst", io.Access_Type.create,
25
- json.dumps(config))
23
+ series = io.Series("simData.sst", io.Access_Type.create_linear, config)
26
24
  series.set_author("Franz Poeschel <f.poeschel@hzdr.de>")
27
25
  series.set_software("openPMD-api-python-examples")
28
26
 
29
27
  # now, write a number of iterations (or: snapshots, time steps)
30
28
  for i in range(10):
31
- # Direct access to iterations is possible via `series.iterations`.
32
- # For streaming support, `series.write_iterations()` needs to be used
33
- # instead of `series.iterations`.
34
- # `Series.write_iterations()` and `Series.read_iterations()` are
35
- # intentionally restricted APIs that ensure a workflow which also works
36
- # in streaming setups, e.g. an iteration cannot be opened again once
37
- # it has been closed.
38
- iteration = series.write_iterations()[i]
29
+ iteration = series.snapshots()[i]
39
30
 
40
31
  #######################
41
32
  # write electron data #