From 633a001a4eb1fc1f5d9f62e6b171a13e977bcd72 Mon Sep 17 00:00:00 2001 From: William F Godoy <williamfgc@yahoo.com> Date: Tue, 25 Jul 2017 18:01:40 -0400 Subject: [PATCH] Fixing Issue #216 Python bindings Copy constructor was implicitly removed for ADIOSPy due to m_ADIOS. PyBind11 needed the copy constructor. m_ADIOS is now a shared pointer to avoid copy constructor removal Separated MPI nonMPI test as ctest failed for MPI --- bindings/python/ADIOSPy.cpp | 7 +- bindings/python/ADIOSPy.h | 4 +- bindings/python/gluePyBind11.cpp | 2 +- testing/adios2/bindings/python/CMakeLists.txt | 8 ++- .../bindings/python/TestBPWriteTypes.py | 4 +- .../bindings/python/TestBPWriteTypes_nompi.py | 66 +++++++++++++++++++ 6 files changed, 84 insertions(+), 7 deletions(-) create mode 100644 testing/adios2/bindings/python/TestBPWriteTypes_nompi.py diff --git a/bindings/python/ADIOSPy.cpp b/bindings/python/ADIOSPy.cpp index 96c8033a8..7f196f40a 100644 --- a/bindings/python/ADIOSPy.cpp +++ b/bindings/python/ADIOSPy.cpp @@ -19,7 +19,8 @@ namespace adios2 ADIOSPy::ADIOSPy(const std::string configFile, MPI_Comm mpiComm, const bool debugMode) -: m_DebugMode(debugMode), m_ADIOS(configFile, mpiComm, debugMode) +: m_DebugMode(debugMode), + m_ADIOS(std::make_shared<adios2::ADIOS>(configFile, mpiComm, debugMode)) { } @@ -29,7 +30,7 @@ ADIOSPy::ADIOSPy(MPI_Comm mpiComm, const bool debugMode) } ADIOSPy::ADIOSPy(const std::string configFile, const bool debugMode) -: ADIOSPy("", MPI_COMM_SELF, debugMode) +: ADIOSPy(configFile, MPI_COMM_SELF, debugMode) { } @@ -39,7 +40,7 @@ ADIOSPy::ADIOSPy(const bool debugMode) : ADIOSPy("", MPI_COMM_SELF, debugMode) IOPy ADIOSPy::DeclareIO(const std::string name) { - return IOPy(m_ADIOS.DeclareIO(name), m_DebugMode); + return IOPy(m_ADIOS->DeclareIO(name), m_DebugMode); } } // end namespace adios diff --git a/bindings/python/ADIOSPy.h b/bindings/python/ADIOSPy.h index 64cd3fbbe..d3c9f5e85 100644 --- a/bindings/python/ADIOSPy.h +++ b/bindings/python/ADIOSPy.h @@ -12,6 +12,7 @@ #define ADIOS2_BINDINGS_PYTHON_SOURCE_ADIOSPY_H_ /// \cond EXCLUDE_FROM_DOXYGEN +#include <memory> //std::shared_ptr #include <string> /// \endcond @@ -32,13 +33,14 @@ public: ADIOSPy(MPI_Comm mpiComm, const bool debugMode); ADIOSPy(const std::string configFile, const bool debugMode); ADIOSPy(const bool debugMode); + ~ADIOSPy() = default; IOPy DeclareIO(const std::string name); private: const bool m_DebugMode; - adios2::ADIOS m_ADIOS; + std::shared_ptr<adios2::ADIOS> m_ADIOS; }; } // end namespace adios diff --git a/bindings/python/gluePyBind11.cpp b/bindings/python/gluePyBind11.cpp index 86eab2cb1..85f5ec219 100644 --- a/bindings/python/gluePyBind11.cpp +++ b/bindings/python/gluePyBind11.cpp @@ -68,7 +68,7 @@ adios2::ADIOSPy ADIOSPyInit(adios2::pyObject &object, const bool debugMode) adios2::ADIOSPy ADIOSPyInitConfig(const std::string configFile, const bool debugMode) { - return adios2::ADIOSPy(debugMode); + return adios2::ADIOSPy(configFile, debugMode); } adios2::ADIOSPy ADIOSPyInit(const bool debugMode) diff --git a/testing/adios2/bindings/python/CMakeLists.txt b/testing/adios2/bindings/python/CMakeLists.txt index 8da6af4e7..96e47759a 100644 --- a/testing/adios2/bindings/python/CMakeLists.txt +++ b/testing/adios2/bindings/python/CMakeLists.txt @@ -3,4 +3,10 @@ # accompanying file Copyright.txt for details. #------------------------------------------------------------------------------# -python_add_test(PythonBPWrite TestBPWriteTypes.py) +if(NOT ADIOS2_HAVE_MPI) + python_add_test(PythonBPWrite TestBPWriteTypes_nompi.py) +endif() + +if(ADIOS2_HAVE_MPI) + python_add_test(PythonBPWrite TestBPWriteTypes.py) +endif() \ No newline at end of file diff --git a/testing/adios2/bindings/python/TestBPWriteTypes.py b/testing/adios2/bindings/python/TestBPWriteTypes.py index 842adacd8..36cfe7243 100644 --- a/testing/adios2/bindings/python/TestBPWriteTypes.py +++ b/testing/adios2/bindings/python/TestBPWriteTypes.py @@ -10,13 +10,15 @@ from adios2NPTypes import SmallTestData +from mpi4py import MPI import adios2 # Test data data = SmallTestData() -adios = adios2.ADIOS(adios2.DebugON) +comm = MPI.COMM_WORLD +adios = adios2.ADIOS(comm, adios2.DebugON) bpIO = adios.DeclareIO("NPTypes") diff --git a/testing/adios2/bindings/python/TestBPWriteTypes_nompi.py b/testing/adios2/bindings/python/TestBPWriteTypes_nompi.py new file mode 100644 index 000000000..842adacd8 --- /dev/null +++ b/testing/adios2/bindings/python/TestBPWriteTypes_nompi.py @@ -0,0 +1,66 @@ +#!/usr/bin/env python + +# +# Distributed under the OSI-approved Apache License, Version 2.0. See +# accompanying file Copyright.txt for details. +# +# TestBPWriteTypes.py: test Python numpy types in ADIOS2 File Write +# Created on: Feb 2, 2017 +# Author: William F Godoy godoywf@ornl.gov + + +from adios2NPTypes import SmallTestData +import adios2 + + +# Test data +data = SmallTestData() + +adios = adios2.ADIOS(adios2.DebugON) + +bpIO = adios.DeclareIO("NPTypes") + +# ADIOS Variable name, shape, start, offset, constant dims +# All local variables +varI8 = bpIO.DefineVariable( + "varI8", [], [], [data.I8.size], adios2.ConstantDims) +varI16 = bpIO.DefineVariable( + "varI16", [], [], [data.I16.size], adios2.ConstantDims) +varI32 = bpIO.DefineVariable( + "varI32", [], [], [data.I32.size], adios2.ConstantDims) +varI64 = bpIO.DefineVariable( + "varI64", [], [], [data.I64.size], adios2.ConstantDims) + +varU8 = bpIO.DefineVariable( + "varUI8", [], [], [data.U8.size], adios2.ConstantDims) +varU16 = bpIO.DefineVariable( + "varUI16", [], [], [data.U16.size], adios2.ConstantDims) +varU32 = bpIO.DefineVariable( + "varUI32", [], [], [data.U32.size], adios2.ConstantDims) +varU64 = bpIO.DefineVariable( + "varUI64", [], [], [data.U64.size], adios2.ConstantDims) + +varR32 = bpIO.DefineVariable( + "varR32", [], [], [data.R32.size], adios2.ConstantDims) + +varR64 = bpIO.DefineVariable( + "varR64", [], [], [data.R64.size], adios2.ConstantDims) + + +# ADIOS Engine +bpFileWriter = bpIO.Open("npTypes.bp", adios2.OpenModeWrite) + +bpFileWriter.Write(varI8, data.I8) +bpFileWriter.Write(varI16, data.I16) +bpFileWriter.Write(varI32, data.I32) +bpFileWriter.Write(varI64, data.I64) + +bpFileWriter.Write(varU8, data.U8) +bpFileWriter.Write(varU16, data.U16) +bpFileWriter.Write(varU32, data.U32) +bpFileWriter.Write(varU64, data.U64) + +bpFileWriter.Write(varR32, data.R32) +bpFileWriter.Write(varR64, data.R64) + +bpFileWriter.Close() -- GitLab