Commit c75a2734 authored by William F Godoy's avatar William F Godoy
Browse files

Python low-level API

parent b8119c1f
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -39,7 +39,7 @@ std::string Attribute::Type() const
    return m_Attribute->m_Type;
}

std::vector<std::string> Attribute::DataStrings()
std::vector<std::string> Attribute::DataString()
{
    helper::CheckForNullptr(m_Attribute, "in call to Attribute::DataStrings");
    const std::string type = m_Attribute->m_Type;
@@ -58,7 +58,7 @@ std::vector<std::string> Attribute::DataStrings()
        }
        else
        {
            data = attribute->m_Elements;
            data = attribute->m_DataArray;
        }
    }
    else
+1 −1
Original line number Diff line number Diff line
@@ -39,7 +39,7 @@ public:

    pybind11::array Data();

    std::vector<std::string> DataStrings();
    std::vector<std::string> DataString();

private:
    Attribute(core::AttributeBase *attribute);
+2 −1
Original line number Diff line number Diff line
@@ -2,7 +2,7 @@
 * Distributed under the OSI-approved Apache License, Version 2.0.  See
 * accompanying file Copyright.txt for details.
 *
 * gluePyBind11.cpp
 * py11glue.cpp
 *
 *  Created on: Mar 16, 2017
 *      Author: William F Godoy godoywf@ornl.gov
@@ -408,6 +408,7 @@ PYBIND11_MODULE(adios2, m)
             })
        .def("Name", &adios2::py11::Attribute::Name)
        .def("Type", &adios2::py11::Attribute::Type)
        .def("DataString", &adios2::py11::Attribute::DataString)
        .def("Data", &adios2::py11::Attribute::Data);

    pybind11::class_<adios2::py11::Engine>(m, "Engine")
+84 −20
Original line number Diff line number Diff line
@@ -24,12 +24,26 @@ def check_name(name, name_list):
        raise ValueError(str(name) + ' not found in list')


def check_array(np1, np2, hint):
    if((np1 == np2).all() is False):
        print("InData: " + str(np1))
        print("Data: " + str(np2))
        raise ValueError('Array read failed ' + str(hint))


# MPI
comm = MPI.COMM_WORLD
rank = comm.Get_rank()
size = comm.Get_size()
Nx = 8

# list of tested attributes and variables
attr_names = ["attrString", "attrI8", "attrI16", "attrI32", "attrI64",
              "attrU8", "attrU16", "attrU32", "attrU64", "attrR32", "attrR64"]
var_names = ["varStr", "varI8", "varI16", "varI32", "varI64",
             "varU8", "varU16", "varU32", "varU64",
                      "varR32", "varR64"]

# Start ADIOS
adios = adios2.ADIOS(comm)
ioWriter = adios.DeclareIO("writer")
@@ -68,8 +82,17 @@ varR32 = ioWriter.DefineVariable(
varR64 = ioWriter.DefineVariable(
    "varR64", data.R64, shape, start, count, adios2.ConstantDims)

attString = ioWriter.DefineAttribute("attrString", ["hello attribute"])
attString = ioWriter.DefineAttribute("attrString", ["one", "two", "three"])
attI8 = ioWriter.DefineAttribute("attrI8", data.I8)
attI16 = ioWriter.DefineAttribute("attrI16", data.I16)
attI32 = ioWriter.DefineAttribute("attrI32", data.I32)
attI64 = ioWriter.DefineAttribute("attrI64", data.I64)
attU8 = ioWriter.DefineAttribute("attrU8", data.U8)
attU16 = ioWriter.DefineAttribute("attrU16", data.U16)
attU32 = ioWriter.DefineAttribute("attrU32", data.U32)
attU64 = ioWriter.DefineAttribute("attrU64", data.U64)
attR32 = ioWriter.DefineAttribute("attrR32", data.R32)
attR64 = ioWriter.DefineAttribute("attrR64", data.R64)

ioWriter.SetEngine("BPFile")
ioParams = {}
@@ -85,7 +108,6 @@ if(engineType != "BPFile"):
ioWriter.SetParameter("profileunits", "microseconds")
ioWriter.AddTransport("file")


ioParams = ioWriter.Parameters()
print("Final IO parameters")
for key, value in ioParams.items():
@@ -125,6 +147,66 @@ reader = ioReader.Open("npTypes.bp", adios2.Mode.Read)

attrString = ioReader.InquireAttribute("attrString")
attrI8 = ioReader.InquireAttribute("attrI8")
attrI16 = ioReader.InquireAttribute("attrI16")
attrI32 = ioReader.InquireAttribute("attrI32")
attrI64 = ioReader.InquireAttribute("attrI64")
attrU8 = ioReader.InquireAttribute("attrU8")
attrU16 = ioReader.InquireAttribute("attrU16")
attrU32 = ioReader.InquireAttribute("attrU32")
attrU64 = ioReader.InquireAttribute("attrU64")
attrR32 = ioReader.InquireAttribute("attrR32")
attrR64 = ioReader.InquireAttribute("attrR64")

check_object(attrString, "attrString")
check_object(attrI8, "attrI8")
check_object(attrI16, "attrI16")
check_object(attrI32, "attrI32")
check_object(attrI64, "attrI64")
check_object(attrU8, "attrU8")
check_object(attrU16, "attrU16")
check_object(attrU32, "attrU32")
check_object(attrU64, "attrU64")
check_object(attrR32, "attrR32")
check_object(attrR64, "attrR64")

attrStringData = attrString.DataString()
if(attrStringData[0] != "one"):
    raise ValueError('attrStringData[0] failed')
if(attrStringData[1] != "two"):
    raise ValueError('attrStringData[1] failed')
if(attrStringData[2] != "three"):
    raise ValueError('attrStringData[2] failed')

attrI8Data = attrI8.Data()
attrI16Data = attrI16.Data()
attrI32Data = attrI32.Data()
attrI64Data = attrI64.Data()
attrU8Data = attrU8.Data()
attrU16Data = attrU16.Data()
attrU32Data = attrU32.Data()
attrU64Data = attrU64.Data()
attrR32Data = attrR32.Data()
attrR64Data = attrR64.Data()

check_array(attrI8Data, data.I8, 'I8')
check_array(attrI16Data, data.I16, 'I16')
check_array(attrI32Data, data.I32, 'I32')
check_array(attrI64Data, data.I64, 'I64')
check_array(attrU8Data, data.U8, 'U8')
check_array(attrU16Data, data.U16, 'U16')
check_array(attrU32Data, data.U32, 'U32')
check_array(attrU64Data, data.U64, 'U64')
check_array(attrR32Data, data.R32, 'R32')
check_array(attrR64Data, data.R64, 'R64')

attributesInfo = ioReader.AvailableAttributes()
for name, info in attributesInfo.items():
    check_name(name, attr_names)
    if rank == 0:
        print("attribute_name: " + name)
        for key, value in info.items():
            print("\t" + key + ": " + value)
        print("\n")

varStr = ioReader.InquireVariable("varStr")
varI8 = ioReader.InquireVariable("varI8")
@@ -138,9 +220,6 @@ varU64 = ioReader.InquireVariable("varU64")
varR32 = ioReader.InquireVariable("varR32")
varR64 = ioReader.InquireVariable("varR64")

check_object(attrString, "attrString")
check_object(attrString, "attrI8")

check_object(varStr, "varStr")
check_object(varI8, "varI8")
check_object(varI16, "varI16")
@@ -153,21 +232,6 @@ check_object(varU64, "varU64")
check_object(varR32, "varR32")
check_object(varR64, "varR64")


attr_names = ["attrString", "attrI8"]
var_names = ["varStr", "varI8", "varI16", "varI32", "varI64",
             "varU8", "varU16", "varU32", "varU64",
                      "varR32", "varR64"]

attributesInfo = ioReader.AvailableAttributes()
for name, info in attributesInfo.items():
    check_name(name, attr_names)
    if rank == 0:
        print("attribute_name: " + name)
        for key, value in info.items():
            print("\t" + key + ": " + value)
        print("\n")

variablesInfo = ioReader.AvailableVariables()
for name, info in variablesInfo.items():
    check_name(name, var_names)
+10 −10
Original line number Diff line number Diff line
@@ -23,28 +23,28 @@ bpIO = adios.DeclareIO("NPTypes")
# ADIOS Variable name, shape, start, offset, constant dims
# All local variables
varI8 = bpIO.DefineVariable(
    "varI8", [], [], [data.I8.size], adios2.ConstantDims, data.I8)
    "varI8",  data.I8, [], [], [data.I8.size], adios2.ConstantDims)
varI16 = bpIO.DefineVariable(
    "varI16", [], [], [data.I16.size], adios2.ConstantDims, data.I16)
    "varI16", data.I16, [], [], [data.I16.size], adios2.ConstantDims)
varI32 = bpIO.DefineVariable(
    "varI32", [], [], [data.I32.size], adios2.ConstantDims, data.I32)
    "varI32", data.I32, [], [], [data.I32.size], adios2.ConstantDims)
varI64 = bpIO.DefineVariable(
    "varI64", [], [], [data.I64.size], adios2.ConstantDims, data.I64)
    "varI64", data.I64, [], [], [data.I64.size], adios2.ConstantDims)

varU8 = bpIO.DefineVariable(
    "varUI8", [], [], [data.U8.size], adios2.ConstantDims, data.U8)
    "varUI8", data.U8, [], [], [data.U8.size], adios2.ConstantDims)
varU16 = bpIO.DefineVariable(
    "varUI16", [], [], [data.U16.size], adios2.ConstantDims, data.U16)
    "varUI16", data.U16, [], [], [data.U16.size], adios2.ConstantDims)
varU32 = bpIO.DefineVariable(
    "varUI32", [], [], [data.U32.size], adios2.ConstantDims, data.U32)
    "varUI32", data.U32, [], [], [data.U32.size], adios2.ConstantDims)
varU64 = bpIO.DefineVariable(
    "varUI64", [], [], [data.U64.size], adios2.ConstantDims, data.U64)
    "varUI64",  data.U64, [], [], [data.U64.size], adios2.ConstantDims)

varR32 = bpIO.DefineVariable(
    "varR32", [], [], [data.R32.size], adios2.ConstantDims, data.R32)
    "varR32", data.R32, [], [], [data.R32.size], adios2.ConstantDims)

varR64 = bpIO.DefineVariable(
    "varR64", [], [], [data.R64.size], adios2.ConstantDims, data.R64)
    "varR64",  data.R64, [], [], [data.R64.size], adios2.ConstantDims)


# ADIOS Engine