[adios] 01/05: new upstream release 1.12.0

Alastair McKinstry mckinstry at moszumanska.debian.org
Wed Jul 19 08:49:27 UTC 2017


This is an automated email from the git hooks/post-receive script.

mckinstry pushed a commit to branch debian/master
in repository adios.

commit c0f5b6de3e75d836689b4272c92b64e2aae907ed
Author: Alastair McKinstry <mckinstry at debian.org>
Date:   Tue Jul 18 13:18:42 2017 +0100

    new upstream release 1.12.0
---
 CMakeLists.txt                                     |   364 +-
 Makefile.in                                        |    13 +-
 NEWS                                               |    18 +
 aclocal.m4                                         |     2 +
 cmake_init                                         |   321 +-
 config.h.cmake                                     |    19 +-
 config.h.in                                        |    12 +
 config/ac_bzip2.m4                                 |     4 +-
 config/ac_dataspaces.m4                            |    50 +-
 config/ac_dimes.m4                                 |    44 +-
 config/ac_flexpath.m4                              |    63 +-
 config/ac_lz4.m4                                   |    83 +
 config/ac_sz.m4                                    |    73 +
 config/ac_zlib.m4                                  |     4 +-
 config/acx_pthread.m4                              |     1 +
 config/config.guess                                |   885 +-
 config/config.sub                                  |   473 +-
 config/libtool.m4                                  |    27 +-
 config/ltmain.sh                                   |    37 +-
 configure                                          |  2438 +---
 configure.ac                                       |    79 +-
 examples/C/Makefile.in                             |    13 +-
 examples/C/arrays/Makefile.in                      |    13 +-
 examples/C/attributes/Makefile.in                  |    13 +-
 examples/C/flexpath_arrays/Makefile.in             |    13 +-
 .../global_range_select/Makefile.in                |    13 +-
 .../C/flexpath_arrays/process_select/Makefile.in   |    13 +-
 examples/C/global-array-time/Makefile.in           |    13 +-
 examples/C/global-array/Makefile.in                |    13 +-
 examples/C/global-array/adios_read_chunk.c         |   123 +-
 examples/C/global-array/adios_read_global.c        |    65 +-
 examples/C/global-array/adios_read_gpp.c           |    21 +-
 examples/C/global-array/adios_read_writeblock.c    |    82 +-
 examples/C/global-array/gread_temperature.ch       |     2 +-
 examples/C/icee_arrays/Makefile.in                 |    13 +-
 examples/C/icee_arrays/array/Makefile.in           |    13 +-
 examples/C/manual/Makefile.in                      |    13 +-
 examples/C/query/Makefile.in                       |    13 +-
 examples/C/query/query_table.c                     |     2 +-
 examples/C/query/query_vars.c                      |     4 +-
 examples/C/read_all/Makefile.in                    |    13 +-
 examples/C/scalars/Makefile.in                     |    13 +-
 examples/C/schema/Makefile.in                      |    13 +-
 examples/C/stat/Makefile.in                        |    13 +-
 examples/C/time_aggregation/Makefile.in            |    13 +-
 examples/C/transforms/Makefile.in                  |    13 +-
 examples/Fortran/Makefile.in                       |    13 +-
 examples/Fortran/arrays/Makefile.in                |    13 +-
 examples/Fortran/global-array-time/Makefile.in     |    13 +-
 examples/Fortran/global-array/Makefile.in          |    13 +-
 examples/Fortran/scalars/Makefile.in               |    13 +-
 examples/Fortran/schema/Makefile.in                |    13 +-
 examples/Makefile.in                               |    13 +-
 examples/staging/stage_write/stage_write.c         |     2 +-
 .../staging/stage_write_varyingsize/stage_write.c  |     2 +-
 runconf                                            |   580 +-
 scripts/FindADIOS.cmake                            |    13 +-
 src/CMakeLists.txt                                 |   501 +-
 src/Makefile.am                                    |     7 +-
 src/Makefile.in                                    |    89 +-
 src/core/adios_bp_v1.c                             |    46 +-
 src/core/adios_clock.h                             |     3 +
 src/core/adios_internals.c                         |    34 +-
 src/core/adios_internals.h                         |     7 +-
 src/core/adios_internals_mxml.c                    |    12 +-
 src/core/adios_subvolume.c                         |     8 +-
 src/core/adios_transform_methods.c                 |     5 +-
 src/core/adiost_callback_internal.c                |   185 +
 src/core/adiost_callback_internal.h                |    85 +
 src/core/adiost_default_tool.c                     |   348 +
 src/core/bp_utils.c                                |   226 +-
 src/core/bp_utils.h                                |     4 +-
 src/core/common_adios.c                            |  2451 ++--
 src/core/common_read.c                             |    25 +-
 src/core/flexpath.h                                |   179 +-
 src/core/globals.c                                 |   104 +-
 src/core/globals.h                                 |     4 +
 src/mxml/Makefile.in                               |    13 +-
 src/public/adios_error.h                           |     1 +
 src/public/adios_version.h                         |     6 +-
 src/public/adiost_callback_api.h                   |   153 +
 src/public/mpidummy.h                              |     3 +
 src/read/read_bp.c                                 |    84 +-
 src/read/read_flexpath.c                           |  2090 ++-
 src/transforms/Makefile.plugins                    |     8 +
 src/transforms/adios_transform_lz4_common.h        |    18 +
 src/transforms/adios_transform_lz4_read.c          |   170 +
 src/transforms/adios_transform_lz4_write.c         |   278 +
 src/transforms/adios_transform_sz_read.c           |   122 +
 src/transforms/adios_transform_sz_write.c          |   343 +
 src/transforms/transform_plugins.h                 |     3 +-
 src/write/adios_flexpath.c                         |  2043 ++-
 src/write/adios_icee.c                             |     4 +-
 src/write/adios_mpi.c                              |     6 +
 src/write/adios_mpi_amr.c                          |     5 +
 src/write/adios_posix.c                            |   183 +-
 src/zfp/Makefile.in                                |    13 +-
 tests/C/Makefile.in                                |    13 +-
 tests/C/fgr_tests/Makefile.in                      |    13 +-
 tests/C/flexpath_tests/1D_arr_global/Makefile.in   |    13 +-
 tests/C/flexpath_tests/1D_arr_global/reader.c      |    51 +-
 tests/C/flexpath_tests/1D_arr_global/writer.c      |    24 +-
 .../flexpath_tests/1D_arr_global_noxml/Makefile.in |    13 +-
 .../C/flexpath_tests/1D_arr_global_noxml/writer.c  |    10 +-
 tests/C/flexpath_tests/CMakeLists.txt              |     1 -
 tests/C/flexpath_tests/Makefile.am                 |     2 +-
 tests/C/flexpath_tests/Makefile.in                 |    15 +-
 tests/C/flexpath_tests/README                      |     5 +-
 tests/C/flexpath_tests/common/utils.c              |    12 +-
 .../global_range_select/CMakeLists.txt             |    12 +-
 .../flexpath_tests/global_range_select/Makefile.am |    18 +-
 .../flexpath_tests/global_range_select/Makefile.in |    74 +-
 .../global_range_select/arrays_read.c              |   113 -
 .../global_range_select/arrays_write.c             |    58 -
 .../C/flexpath_tests/global_range_select/reader.c  |   132 +
 .../{arrays.xml => test_config_flex.xml}           |     2 +-
 .../C/flexpath_tests/global_range_select/writer.c  |    77 +
 tests/C/flexpath_tests/include/misc.h              |     4 -
 tests/C/flexpath_tests/include/test_common.h       |    38 +-
 tests/C/flexpath_tests/include/utils.h             |     2 +-
 tests/C/flexpath_tests/local_arrays/Makefile.am    |    18 +
 .../{maya_append => local_arrays}/Makefile.in      |    71 +-
 tests/C/flexpath_tests/local_arrays/cfg.h          |    15 +
 .../{1D_arr_global => local_arrays}/reader.c       |    77 +-
 .../{1D_arr_global_noxml => local_arrays}/writer.c |    24 +-
 tests/C/flexpath_tests/maya_append/CMakeLists.txt  |    15 -
 tests/C/flexpath_tests/maya_append/Makefile.am     |    19 -
 tests/C/flexpath_tests/maya_append/cfg.h           |    26 -
 tests/C/flexpath_tests/maya_append/reader.c        |   137 -
 tests/C/flexpath_tests/maya_append/readme.txt      |    64 -
 tests/C/flexpath_tests/maya_append/writer.c        |   133 -
 tests/C/flexpath_tests/maya_noxml/Makefile.in      |    13 +-
 tests/C/flexpath_tests/maya_noxml/reader.c         |    71 +-
 tests/C/flexpath_tests/maya_noxml/writer.c         |   118 +-
 tests/C/flexpath_tests/scalar/Makefile.in          |    13 +-
 tests/C/flexpath_tests/scalar/writer.c             |    10 +-
 tests/C/query/Makefile.in                          |    13 +-
 tests/C/query/alacrity/Makefile.in                 |    13 +-
 tests/C/query/alacrity/adios_alac_query.c          |     2 +-
 tests/C/query/common/Makefile.in                   |    13 +-
 tests/C/query/fastbit/Makefile.in                  |    13 +-
 tests/Fortran/Makefile.in                          |    13 +-
 tests/Makefile.in                                  |    13 +-
 tests/bp_read/Makefile.in                          |    13 +-
 tests/genarray/CMakeLists.txt                      |    18 +-
 tests/genarray/Makefile.am                         |    18 +-
 tests/genarray/Makefile.in                         |    33 +-
 tests/genarray/copyarray.F90                       |    60 +-
 tests/genarray/genarray.F90                        |    53 +-
 tests/genarray/genarray.xml                        |     1 -
 tests/genarray/genarray2D.F90                      |    10 +-
 tests/genarray/genarray3d.xml                      |     1 -
 tests/suite/Makefile.in                            |    13 +-
 tests/suite/programs/CMakeLists.txt                |     5 +-
 tests/suite/programs/Makefile.am                   |     8 +-
 tests/suite/programs/Makefile.in                   |    38 +-
 tests/suite/programs/adios_amr_write.c             |     1 +
 tests/suite/programs/adios_amr_write_2vars.c       |     1 +
 tests/suite/programs/big_file.c                    |    12 +-
 tests/suite/programs/blocks.c                      |    24 +-
 tests/suite/programs/build_standard_dataset.c      |     2 +-
 tests/suite/programs/examples/CMakeLists.txt       |     5 +
 tests/suite/programs/examples/Makefile.in          |    13 +-
 .../programs/examples/attributes/CMakeLists.txt    |    10 +-
 .../suite/programs/examples/attributes/Makefile.in |    13 +-
 .../programs/examples/global_array/CMakeLists.txt  |    17 +-
 .../programs/examples/global_array/Makefile.in     |    13 +-
 .../examples/global_array/global_array_read_C.c    |     2 +-
 .../global_array/global_array_read_byid_noxml_C.c  |     2 +-
 .../global_array/global_array_read_noxml_C.c       |     2 +-
 .../examples/global_array_time/CMakeLists.txt      |    22 +-
 .../examples/global_array_time/Makefile.am         |     9 +-
 .../examples/global_array_time/Makefile.in         |    42 +-
 .../global_array_time/global_array_time_aggr_C.xml |     2 +-
 .../global_array_time_read_as_file_C.c             |     4 +-
 .../global_array_time_read_as_stream_C.c           |     4 +-
 .../global_array_time_write_multifile_C.c          |    64 +
 .../programs/examples/local_array/CMakeLists.txt   |     8 +-
 .../programs/examples/local_array/Makefile.in      |    13 +-
 .../suite/programs/examples/scalars/CMakeLists.txt |    12 +-
 tests/suite/programs/examples/scalars/Makefile.in  |    13 +-
 .../programs/examples/scalars/scalars_read_C.c     |     4 +-
 tests/suite/programs/many_vars.c                   |     2 +-
 tests/suite/programs/reuse_dim.c                   |     1 +
 tests/suite/programs/selections.c                  |     1 +
 tests/suite/programs/set_path.c                    |    17 +-
 tests/suite/programs/set_path_var.c                |     2 +-
 tests/suite/programs/steps_read_file.c             |     2 +-
 tests/suite/programs/steps_read_stream.c           |     2 +-
 tests/suite/programs/test_singlevalue.c            |   350 +
 tests/suite/programs/transforms_writeblock_read.c  |     2 +-
 tests/suite/tests/05_global_array_time.sh          |    69 +-
 tests/suite/tests/21_test_singlevalue.sh           |    37 +
 tests/test_src/Makefile.am                         |     8 +-
 tests/test_src/Makefile.in                         |    69 +-
 tests/test_src/query_minmax.c                      |     8 +-
 tests/test_src/read_points_3d.c                    |   774 +
 utils/Makefile.in                                  |    13 +-
 utils/adios_lint/Makefile.in                       |    13 +-
 utils/adios_list_methods/Makefile.in               |    13 +-
 utils/bp2ascii/Makefile.in                         |    13 +-
 utils/bp2bp/Makefile.in                            |    13 +-
 utils/bp2bp/bp2bp.c                                |     2 +-
 utils/bp2h5/Makefile.in                            |    13 +-
 utils/bp2h5/bp2h5.c                                |     4 +-
 utils/bp2ncd/Makefile.in                           |    13 +-
 utils/bpdiff/Makefile.in                           |    13 +-
 utils/bpdump/Makefile.in                           |    13 +-
 utils/bpls/Makefile.in                             |    13 +-
 utils/bpls/bpls.c                                  |    28 +-
 utils/bpmeta/Makefile.in                           |    13 +-
 utils/bpmeta/bpmeta.c                              |    70 +-
 utils/bprecover/Makefile.in                        |    13 +-
 utils/bpsplit/Makefile.in                          |    13 +-
 utils/bpsplit/bpappend.c                           |     2 +
 utils/bpsplit/bpsplit.c                            |     2 +
 utils/fastbit/Makefile.in                          |    13 +-
 utils/fastbit/adios_index_fastbit.c                |     6 +-
 utils/gpp/Makefile.in                              |    13 +-
 utils/gpp/gpp.py                                   |     8 +-
 utils/gpp/gpp.py.in                                |     8 +-
 utils/skel/Makefile.in                             |    13 +-
 utils/skel/etc/Makefile.in                         |    13 +-
 utils/skel/etc/templates/source_write_c.tmpl       |     2 +-
 utils/skel/src/Makefile.in                         |    13 +-
 utils/skeldump/Makefile.in                         |    13 +-
 wrappers/numpy/adios.cpp                           | 14013 ++++++++++--------
 wrappers/numpy/adios.pyx                           |    90 +-
 wrappers/numpy/adios_mpi.cpp                       | 14269 +++++++++++--------
 wrappers/numpy/adios_mpi.pyx                       |    90 +-
 wrappers/numpy/adios_mpi2serial.sed                |     2 +
 wrappers/numpy/build-and-install.sh                |     2 +
 wrappers/numpy/doc/source/build.rst                |   109 +-
 wrappers/numpy/doc/source/conf.py                  |     4 +-
 wrappers/numpy/doc/source/index.rst                |     1 +
 wrappers/numpy/doc/source/quick.rst                |    24 +-
 wrappers/numpy/example/staging/adios_read_mpi.py   |     7 +-
 wrappers/numpy/src/__init__.py                     |     2 +-
 wrappers/numpy/src_mpi/__init__.py                 |     2 +-
 wrappers/numpy/test/test_adios_writer_unittest.py  |    47 +-
 wrappers/numpy/tests/test_adios_mpi_writer.py      |     4 +-
 wrappers/numpy/tests/test_adios_writer.py          |     3 +-
 242 files changed, 29347 insertions(+), 19336 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 30bcb04..a2671aa 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -65,7 +65,7 @@ if(DEFINED ENV{EXTRA_LIBS})
 endif()
 ######## file moved from initial_cache.cmake to indicate external library is used(ON) or not (OFF)######
 if(DEFINED ENV{BUILD_WRITE})
-  if("$ENV{BUILD_WRITE}" STREQUAL "") 
+  if("$ENV{BUILD_WRITE}" STREQUAL "")
     set(BUILD_WRITE ON CACHE BOOL "")
   else()
     set(BUILD_WRITE $ENV{BUILD_WRITE})
@@ -466,7 +466,7 @@ if(GLIB)
 else()
   set(FGR OFF CACHE BOOL "")
 endif()
- 
+
 if(DEFINED ENV{BZIP2_DIR})
   if("$ENV{BZIP2_DIR}" STREQUAL "")
     set(BZIP2 OFF CACHE BOOL "")
@@ -483,6 +483,22 @@ elseif(DEFINED ENV{BZIP2})
   endif()
 endif()
 
+if(DEFINED ENV{LZ4_DIR})
+  if("$ENV{LZ4_DIR}" STREQUAL "")
+    set(LZ4 OFF CACHE BOOL "")
+  else()
+    set(LZ4 ON CACHE BOOL "")
+    set(LZ4_DIR "$ENV{LZ4_DIR}")
+  endif()
+elseif(DEFINED ENV{LZ4})
+  if("$ENV{LZ4}" STREQUAL "")
+    set(LZ4 OFF CACHE BOOL "")
+  else()
+    set(LZ4 ON CACHE BOOL "")
+    set(LZ4_DIR "$ENV{LZ4}")
+  endif()
+endif()
+
 if(DEFINED ENV{SZIP_DIR})
   if("$ENV{SZIP_DIR}" STREQUAL "")
     set(SZIP OFF CACHE BOOL "")
@@ -567,6 +583,22 @@ else()
     set(ZFP_DIR ${PROJECT_SOURCE_DIR}/src/zfp/zfp-0.5.0)
 endif()
 
+if(DEFINED ENV{SZ_DIR})
+  if("$ENV{SZ_DIR}" STREQUAL "")
+    set(SZ OFF CACHE BOOL "")
+  else()
+    set(SZ ON CACHE BOOL "")
+    set(SZ_DIR $ENV{SZ_DIR})
+  endif()
+elseif(DEFINED ENV{SZ})
+  if(NOT "$ENV{SZ}" STREQUAL "")
+    set(SZ OFF CACHE BOOL "")
+  else()
+    set(SZ_DIR $ENV{SZ})
+    set(SZ ON CACHE BOOL "")
+  endif()
+endif()
+
 
 ###################### end of external library is used(ON) or not (OFF) ##############################
 
@@ -603,9 +635,13 @@ CHECK_FUNCTION_EXISTS(gettimeofday HAVE_GETTIMEOFDAY)
 # Define to 1 if you have the `clock_gettime' function.
 CHECK_FUNCTION_EXISTS(clock_gettime HAVE_CLOCK_GETTIME)
 
-# Define to 1 if you have the `clock_get_time' function. On OSX. 
+# Define to 1 if you have the `clock_get_time' function. On OSX.
 CHECK_FUNCTION_EXISTS(clock_get_time HAVE_CLOCK_GET_TIME)
 
+# Check if clockid_t type exist
+include(CheckTypeSize)
+CHECK_TYPE_SIZE("clockid_t" CLOCKID_T)
+
 # Define if you have CRAY_PMI.
 set(HAVE_CRAY_PMI 0)
 if(CRAY_PMI)
@@ -637,7 +673,7 @@ CHECK_FUNCTION_EXISTS(ibv_alloc_pd HAVE_IBVERBS)
 set(HAVE_INFINIBAND 0)
 if(HAVE_IBVERBS_H AND HAVE_IBVERBS)
   set(HAVE_INFINIBAND 1)
-  set(INFINIBAND ON CACHE BOOL "") 
+  set(INFINIBAND ON CACHE BOOL "")
   set(INFINIBAND_LIBS "-libverbs")
 #  set(LIBS "${LIBS} ${INFINIBAND_LIBS}")
 endif()
@@ -674,10 +710,10 @@ if(PORTALS)
     set(PORTALS_CFLAGS "${PORTALS_CFLAGS} ${EXTRA_CFLAGS}")
     set(CFLAGS "${CFLAGS} ${PORTALS_CFLAGS}")
     set(PORTALS_CPPFLAGS "${PORTALS_CPPFLAGS} ${EXTRA_CPPFLAGS}")
-#    set(CPPFLAGS "${CPPFLAGS} ${PORTALS_CPPFLAGS}") 
+#    set(CPPFLAGS "${CPPFLAGS} ${PORTALS_CPPFLAGS}")
  endif()
 #else()
-#  find_package(TPLPortals) 
+#  find_package(TPLPortals)
 #  if(TPLPortals_FOUND)
 #    set(PORTALS ON CACHE BOOL "" FORCE)
 #    set(HAVE_PORTALS 1)
@@ -694,7 +730,7 @@ endif()
 # Define to 1 if you have the <dataspaces.h> header file.
 set(HAVE_DATASPACES_H 0)
 if(DATASPACES)
-  if(DEFINED DATASPACES_INCDIR)  
+  if(DEFINED DATASPACES_INCDIR)
     if("${DATASPACES_INCDIR}" STREQUAL "")
       set(DATASPACES_INCDIR "$ENV{DATASPACES_DIR}/include")
     endif()
@@ -723,10 +759,55 @@ if(HAVE_DATASPACES_H)
   else()
     set(DATASPACES_LIBDIR "$ENV{DATASPACES_DIR}/lib")
   endif()
-  
-  if(HAVE_INFINIBAND)
-    find_library(DATASPACES_LIBS1 NAMES libdspaces.a PATHS ${DATASPACES_LIBDIR}) 
+
+  # 1.6.2 has a config file
+  set(DATASPACES_BINDIR "$ENV{DATASPACES_DIR}/bin")
+  #message("DATASPACES: look for dspaces_config")
+  find_program (DSPACES_CONFIG NAMES dspaces_config 
+                PATHS "$ENV{DATASPACES_DIR}/bin" NO_DEFAULT_PATH)
+
+  if(DSPACES_CONFIG)
+    #message("DATASPACES: run dspaces_config")
+    execute_process(COMMAND ${DSPACES_CONFIG} "-l"
+        OUTPUT_VARIABLE dspaces_config_out
+        RESULT_VARIABLE dspaces_config_ret
+        OUTPUT_STRIP_TRAILING_WHITESPACE
+    )
+    #message("DATASPACES: return value = ${dspaces_config_ret}")
+    #message("DATASPACES: output = ${dspaces_config_out}")
+    if(dspaces_config_ret EQUAL 0)
+        string(REPLACE " " ";" dspaces_config_list ${dspaces_config_out})
+    #message("DATASPACES: list = ${dspaces_config_list}")
+        set(dspaces_libs)
+        set(dspaces_lib_hints)
+        set(dspaces_lib_flags)
+        foreach(OPT IN LISTS dspaces_config_list)
+            if(OPT MATCHES "^-L(.*)")
+                list(APPEND dspaces_lib_hints "${CMAKE_MATCH_1}")
+            elseif(OPT MATCHES "^-l(.*)")
+                list(APPEND dspaces_libs "${CMAKE_MATCH_1}")
+            else()
+                list(APPEND dspaces_lib_flags "${OPT}")
+            endif()
+        endforeach()
+        set(HAVE_DATASPACES 1)
+    endif()
+    #message("DATASPACES: hints = ${dspaces_lib_hints}")
+    #message("DATASPACES: libs = ${dspaces_libs}")
+    #message("DATASPACES: flags = ${dspaces_lib_flags}")
+    set(DATASPACES_LIBS)
+    foreach(lib IN LISTS dspaces_libs)
+      find_library(dspaces_${lib}_LIBRARY NAME ${lib} HINTS ${dspaces_lib_hints})
+      if(dspaces_${lib}_LIBRARY)
+          list(APPEND DATASPACES_LIBS ${dspaces_${lib}_LIBRARY})
+      else()
+        list(APPEND DATASPACES_LIBS ${lib})
+      endif()
+    endforeach()
+
+  elseif(HAVE_INFINIBAND)
     set(DATASPACES_LIBS1 "${DATASPACES_LIBS1}" CACHE INTERNAL "Internal variable")
+    find_library(DATASPACES_LIBS1 NAMES libdspaces.a PATHS ${DATASPACES_LIBDIR})
     find_library(DATASPACES_LIBS2 NAMES libdscommon.a PATHS ${DATASPACES_LIBDIR})
     set(DATASPACES_LIBS2 "${DATASPACES_LIBS2}" CACHE INTERNAL "Internal variable")
     find_library(DATASPACES_LIBS3 NAMES libdart.a  PATHS ${DATASPACES_LIBDIR})
@@ -778,12 +859,15 @@ endif()
 # Define to 1 if you have the <dimes.h> header file.
 set(HAVE_DIMES_H 0)
 if(HAVE_DATASPACES_H)
-  set(HAVE_DIMES_H 1)
+  find_path(DIMES_INCLUDE_DIR NAMES dimes_interface.h PATHS ${DATASPACES_INCDIR})
+  if(DIMES_INCLUDE_DIR)
+    set(HAVE_DIMES_H 1)
+  endif()
 endif()
-  
+
 # Define if you have the DIMES.
 set(HAVE_DIMES 0)
-if(HAVE_DATASPACES)
+if(HAVE_DIMES_H)
   if(HAVE_INFINIBAND)
     set(DIMES OFF CACHE BOOL "" FORCE)
     message("DIMES currently NOT supported for Infiniband!")
@@ -814,55 +898,107 @@ set(HAVE_FLEXPATH 0)
 set(NO_FLEXPATH 1)
 set(HAVE_FLEXPATH_H 0)
 if(FLEXPATH)
-  if(DEFINED FLEXPATH_INCDIR)
-    if("${FLEXPATH_INCDIR}" STREQUAL "")
-      set(FLEXPATH_INCDIR "$ENV{FLEXPATH_DIR}/include")
+  # 4.2.1 has a config file
+  set(FLEXPATH_BINDIR "$ENV{FLEXPATH_DIR}/bin")
+  message("FLEXPATH: look for evpath_config")
+  find_program (EVPATH_CONFIG NAMES evpath_config 
+                PATHS "$ENV{FLEXPATH_DIR}/bin" NO_DEFAULT_PATH)
+
+  if(EVPATH_CONFIG)
+    message("FLEXPATH: run evpath_config")
+    execute_process(COMMAND ${EVPATH_CONFIG} "-l"
+        OUTPUT_VARIABLE evpath_config_out
+        RESULT_VARIABLE evpath_config_ret
+        OUTPUT_STRIP_TRAILING_WHITESPACE
+    )
+    message("FLEXPATH: return value = ${evpath_config_ret}")
+    message("FLEXPATH: output = ${evpath_config_out}")
+    if(evpath_config_ret EQUAL 0)
+        string(REPLACE " " ";" evpath_config_list ${evpath_config_out})
+    message("FLEXPATH: list = ${evpath_config_list}")
+        set(evpath_libs)
+        set(evpath_lib_hints)
+        set(evpath_lib_flags)
+        foreach(OPT IN LISTS evpath_config_list)
+            if(OPT MATCHES "^-L(.*)")
+                list(APPEND evpath_lib_hints "${CMAKE_MATCH_1}")
+            elseif(OPT MATCHES "^-l(.*)")
+                list(APPEND evpath_libs "${CMAKE_MATCH_1}")
+            else()
+                list(APPEND evpath_libs "${OPT}")
+            endif()
+        endforeach()
+        set(HAVE_FLEXPATH 1)
     endif()
-  else()
-    set(FLEXPATH_INCDIR "$ENV{FLEXPATH_DIR}/include")
-  endif()
-  find_path(FLEXPATH_INCLUDE_DIR1 NAMES evpath.h PATHS ${FLEXPATH_INCDIR})
-  set(FLEXPATH_INCLUDE_DIR1 "${FLEXPATH_INCLUDE_DIR1}" CACHE INTERNAL "Internal variable")
-  find_path(FLEXPATH_INCLUDE_DIR2 NAMES ffs.h PATHS ${FLEXPATH_INCDIR})
-  set(FLEXPATH_INCLUDE_DIR2 "${FLEXPATH_INCLUDE_DIR2}" CACHE INTERNAL "Internal variable")
-  find_path(FLEXPATH_INCLUDE_DIR3 NAMES atl.h PATHS ${FLEXPATH_INCDIR})
-  set(FLEXPATH_INCLUDE_DIR3 "${FLEXPATH_INCLUDE_DIR3}" CACHE INTERNAL "Internal variable")
-  find_path(FLEXPATH_INCLUDE_DIR4 NAMES dill.h PATHS ${FLEXPATH_INCDIR})
-  set(FLEXPATH_INCLUDE_DIR4 "${FLEXPATH_INCLUDE_DIR4}" CACHE INTERNAL "Internal variable")
-  find_path(FLEXPATH_INCLUDE_DIR5 NAMES cercs_env.h PATHS ${FLEXPATH_INCDIR})
-  set(FLEXPATH_INCLUDE_DIR5 "${FLEXPATH_INCLUDE_DIR5}" CACHE INTERNAL "Internal variable")
-  if(FLEXPATH_INCLUDE_DIR1 AND FLEXPATH_INCLUDE_DIR2 AND FLEXPATH_INCLUDE_DIR3 AND FLEXPATH_INCLUDE_DIR4 AND FLEXPATH_INCLUDE_DIR5)
-    set(HAVE_FLEXPATH_H 1)
-    set(FLEXPATH_INCLUDE_DIR ${FLEXPATH_INCDIR}) 
-  endif()
-  if(DEFINED FLEXPATH_LIBDIR)
-    if("${FLEXPATH_LIBDIR}" STREQUAL "")
-      set(FLEXPATH_LIBDIR "$ENV{FLEXPATH_DIR}/lib")
-    endif()
-  else()
-    set(FLEXPATH_LIBDIR "$ENV{FLEXPATH_DIR}/lib")
-  endif()
-  find_library(FLEXPATH_LIBS1 NAMES evpath PATHS ${FLEXPATH_LIBDIR})
-  set(FLEXPATH_LIBS1 "${FLEXPATH_LIBS1}" CACHE INTERNAL "Internal variable")
-  find_library(FLEXPATH_LIBS2 NAMES ffs PATHS ${FLEXPATH_LIBDIR})
-  set(FLEXPATH_LIBS2 "${FLEXPATH_LIBS2}" CACHE INTERNAL "Internal variable")
-  find_library(FLEXPATH_LIBS3 NAMES atl PATHS ${FLEXPATH_LIBDIR})
-  set(FLEXPATH_LIBS3 "${FLEXPATH_LIBS3}" CACHE INTERNAL "Internal variable")
-  find_library(FLEXPATH_LIBS4 NAMES dill PATHS ${FLEXPATH_LIBDIR})
-  set(FLEXPATH_LIBS4 "${FLEXPATH_LIBS4}" CACHE INTERNAL "Internal variable")
-  find_library(FLEXPATH_LIBS5 NAMES cercs_env PATHS ${FLEXPATH_LIBDIR})
-  set(FLEXPATH_LIBS5 "${FLEXPATH_LIBS5}" CACHE INTERNAL "Internal variable")
-  if(FLEXPATH_LIBS1 AND FLEXPATH_LIBS2 AND FLEXPATH_LIBS3 AND FLEXPATH_LIBS4 AND FLEXPATH_LIBS5 AND HAVE_FLEXPATH_H)
+    message("FLEXPATH: hints = ${evpath_lib_hints}")
+    message("FLEXPATH: libs = ${evpath_libs}")
+    message("FLEXPATH: flags = ${evpath_lib_flags}")
+    set(FP_LIBS)
+    foreach(lib IN LISTS evpath_libs)
+      find_library(evpath_${lib}_LIBRARY NAME ${lib} HINTS ${evpath_lib_hints})
+      if(evpath_${lib}_LIBRARY)
+          list(APPEND FP_LIBS ${evpath_${lib}_LIBRARY})
+      else()
+        list(APPEND FP_LIBS ${lib})
+      endif()
+    endforeach()
     set(HAVE_FLEXPATH 1)
     set(NO_FLEXPATH 0)
-    set(FP_LIBS ${FLEXPATH_LIBS1} ${FLEXPATH_LIBS2} ${FLEXPATH_LIBS3} ${FLEXPATH_LIBS4} ${FLEXPATH_LIBS5})
     set(FP_LIBS "${FP_LIBS}" CACHE STRING "")
-    set(FP_CPPFLAGS "-I${FLEXPATH_INCLUDE_DIR}")
-#    set(FP_CFLAGS ${FP_CPPFLAGS})
-#include_directories(${FLEXPATH_INCLUDE_DIR})
-  else()
-    set(FLEXPATH OFF CACHE BOOL "do not find supporting library" FORCE)
-  endif()
+    set(FP_CPPFLAGS "-I${FLEXPATH_DIR}/include")
+
+  else(EVPATH_CONFIG)
+
+    if(DEFINED FLEXPATH_INCDIR)
+        if("${FLEXPATH_INCDIR}" STREQUAL "")
+        set(FLEXPATH_INCDIR "$ENV{FLEXPATH_DIR}/include")
+        endif()
+    else()
+        set(FLEXPATH_INCDIR "$ENV{FLEXPATH_DIR}/include")
+    endif()
+    find_path(FLEXPATH_INCLUDE_DIR1 NAMES evpath.h PATHS ${FLEXPATH_INCDIR})
+    set(FLEXPATH_INCLUDE_DIR1 "${FLEXPATH_INCLUDE_DIR1}" CACHE INTERNAL "Internal variable")
+    find_path(FLEXPATH_INCLUDE_DIR2 NAMES ffs.h PATHS ${FLEXPATH_INCDIR})
+    set(FLEXPATH_INCLUDE_DIR2 "${FLEXPATH_INCLUDE_DIR2}" CACHE INTERNAL "Internal variable")
+    find_path(FLEXPATH_INCLUDE_DIR3 NAMES atl.h PATHS ${FLEXPATH_INCDIR})
+    set(FLEXPATH_INCLUDE_DIR3 "${FLEXPATH_INCLUDE_DIR3}" CACHE INTERNAL "Internal variable")
+    find_path(FLEXPATH_INCLUDE_DIR4 NAMES dill.h PATHS ${FLEXPATH_INCDIR})
+    set(FLEXPATH_INCLUDE_DIR4 "${FLEXPATH_INCLUDE_DIR4}" CACHE INTERNAL "Internal variable")
+    find_path(FLEXPATH_INCLUDE_DIR5 NAMES cercs_env.h PATHS ${FLEXPATH_INCDIR})
+    set(FLEXPATH_INCLUDE_DIR5 "${FLEXPATH_INCLUDE_DIR5}" CACHE INTERNAL "Internal variable")
+    if(FLEXPATH_INCLUDE_DIR1 AND FLEXPATH_INCLUDE_DIR2 AND FLEXPATH_INCLUDE_DIR3 AND FLEXPATH_INCLUDE_DIR4 AND FLEXPATH_INCLUDE_DIR5)
+        set(HAVE_FLEXPATH_H 1)
+        set(FLEXPATH_INCLUDE_DIR ${FLEXPATH_INCDIR})
+    endif()
+    if(DEFINED FLEXPATH_LIBDIR)
+        if("${FLEXPATH_LIBDIR}" STREQUAL "")
+            set(FLEXPATH_LIBDIR "$ENV{FLEXPATH_DIR}/lib")
+        endif()
+    else()
+        set(FLEXPATH_LIBDIR "$ENV{FLEXPATH_DIR}/lib")
+    endif()
+    find_library(FLEXPATH_LIBS1 NAMES evpath PATHS ${FLEXPATH_LIBDIR})
+    set(FLEXPATH_LIBS1 "${FLEXPATH_LIBS1}" CACHE INTERNAL "Internal variable")
+    find_library(FLEXPATH_LIBS2 NAMES ffs PATHS ${FLEXPATH_LIBDIR})
+    set(FLEXPATH_LIBS2 "${FLEXPATH_LIBS2}" CACHE INTERNAL "Internal variable")
+    find_library(FLEXPATH_LIBS3 NAMES atl PATHS ${FLEXPATH_LIBDIR})
+    set(FLEXPATH_LIBS3 "${FLEXPATH_LIBS3}" CACHE INTERNAL "Internal variable")
+    find_library(FLEXPATH_LIBS4 NAMES dill PATHS ${FLEXPATH_LIBDIR})
+    set(FLEXPATH_LIBS4 "${FLEXPATH_LIBS4}" CACHE INTERNAL "Internal variable")
+    find_library(FLEXPATH_LIBS5 NAMES cercs_env PATHS ${FLEXPATH_LIBDIR})
+    set(FLEXPATH_LIBS5 "${FLEXPATH_LIBS5}" CACHE INTERNAL "Internal variable")
+    if(FLEXPATH_LIBS1 AND FLEXPATH_LIBS2 AND FLEXPATH_LIBS3 AND FLEXPATH_LIBS4 AND FLEXPATH_LIBS5 AND HAVE_FLEXPATH_H)
+        set(HAVE_FLEXPATH 1)
+        set(NO_FLEXPATH 0)
+        set(FP_LIBS ${FLEXPATH_LIBS1} ${FLEXPATH_LIBS2} ${FLEXPATH_LIBS3} ${FLEXPATH_LIBS4} ${FLEXPATH_LIBS5})
+        set(FP_LIBS "${FP_LIBS}" CACHE STRING "")
+        set(FP_CPPFLAGS "-I${FLEXPATH_INCLUDE_DIR}")
+#       set(FP_CFLAGS ${FP_CPPFLAGS})
+#       include_directories(${FLEXPATH_INCLUDE_DIR})
+    else()
+        set(FLEXPATH OFF CACHE BOOL "do not find supporting library" FORCE)
+    endif()
+  endif(EVPATH_CONFIG)
 endif()
 
 if(HAVE_FLEXPATH)
@@ -881,12 +1017,12 @@ if(FASTBIT)
     properly installed at the path specified ${FASTBIT_DIR}")
   else()
     set(HAVE_IAPI_H 1)
-  endif()  
+  endif()
   find_library(FASTBIT_LIB NAMES fastbit PATHS ${FASTBIT_LIBDIR})
   if(FASTBIT_INCLUDE_DIR AND FASTBIT_LIB)
     set(HAVE_FASTBIT 1)
     set(FASTBIT_CPPFLAGS "-I${FASTBIT_INCDIR}")
-    set(FASTBIT_LIBS ${FASTBIT_LIB} -lstdc++ CACHE STRING "") 
+    set(FASTBIT_LIBS ${FASTBIT_LIB} -lstdc++ CACHE STRING "")
   else()
     set(FASTBIT OFF CACHE BOOL "" FORCE)
   endif()
@@ -908,7 +1044,7 @@ if(BUILD_FORTRAN)
 else()
   find_package(MPI)
   if(MPI_FOUND)
-#    if(MPI_LIBRARIES AND MPI_INCLUDE_PATH) 
+#    if(MPI_LIBRARIES AND MPI_INCLUDE_PATH)
       message(STATUS "find MPI")
       set (HAVE_MPI 1)
 #      set(MPILIBS ${MPI_LIBRARIES})
@@ -941,7 +1077,7 @@ endif(HDF5)
 # Define to 1 if you have the <inttypes.h> header file.
 CHECK_INCLUDE_FILES(inttypes.h HAVE_INTTYPES_H)
 
-# Define to 1 if you have the `rt' library (-lrt). 
+# Define to 1 if you have the `rt' library (-lrt).
 set(HAVE_LIBRT 0)
 
 # Define if you have LUSTRE.
@@ -989,7 +1125,7 @@ if (NOT HAVE_MXML)
   message(STATUS "MXML will be built for ADIOS in ./src/mxml")
   set(HAVE_MXML 1)
   set(BUILD_MXML 1)
-  set(MXML_LIBS "") 
+  set(MXML_LIBS "")
   set(MXML_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/src/mxml/mxml-2.9)
   message(STATUS "Checking type long long int")
   try_compile(HAVE_LONG_LONG ${PROJECT_BINARY_DIR}/src/mxml SOURCES ${PROJECT_SOURCE_DIR}/src/mxml/cmake_try_longlong.c)
@@ -1141,7 +1277,7 @@ set(HAVE_PTHREAD 0)
 find_package(Threads)
 if(Threads_FOUND)
   set(HAVE_PTHREAD 1)
-  #INCLUDE_DIRECTORIES(${Threads_INCLUDE_PATH}) 
+  #INCLUDE_DIRECTORIES(${Threads_INCLUDE_PATH})
 endif(Threads_FOUND)
 
 # Define to 1 if you have the `pthread_yield' function.
@@ -1273,6 +1409,19 @@ if(FGR)
   endif()
 endif()
 
+set(HAVE_LZ4 0)
+if(LZ4)
+  find_path(LZ4_INCLUDE_DIR NAMES lz4.h PATHS ${LZ4_DIR}/include)
+  if(LZ4_INCLUDE_DIR)
+    set(HAVE_LZ4_H 1)
+  endif()
+  find_library(LZ4_LIBS NAMES lz4 PATHS ${LZ4_DIR}/lib)
+  if(LZ4_INCLUDE_DIR AND LZ4_LIBS)
+    set(HAVE_LZ4 1)
+    set(LZ4_CPPFLAGS "-I${LZ4_INCLUDE_DIR}")
+  endif()
+endif()
+
 set(HAVE_BZIP2 0)
 if(BZIP2)
   find_path(BZIP2_INCLUDE_DIR NAMES bzlib.h PATHS ${BZIP2_DIR}/include)
@@ -1337,7 +1486,7 @@ if(ALACRITY)
   if(ALACRITY_INCLUDE_DIR AND ALACRITY_LIB AND RIDCOMPRESS_LIB)
     set(HAVE_ALACRITY 1)
     set(ALACRITY_CPPFLAGS "-I${ALACRITY_INCLUDE_DIR}")
-    set(ALACRITY_LIBS ${ALACRITY_LIB} ${RIDCOMPRESS_LIB} -lstdc++ CACHE STRING "") 
+    set(ALACRITY_LIBS ${ALACRITY_LIB} ${RIDCOMPRESS_LIB} -lstdc++ CACHE STRING "")
   endif()
 endif()
 
@@ -1363,6 +1512,24 @@ else(ZFP)
   message(STATUS "ZFP is turned off")
 endif(ZFP)
 
+set(HAVE_SZ 0)
+set(HAVE_SZ_H 0)
+if(SZ)
+  find_path(SZ_INCLUDE_DIR NAMES sz.h PATHS ${SZ_DIR}/include)
+  if(SZ_INCLUDE_DIR)
+    set(HAVE_SZ_H 1)
+  endif()
+  find_library(SZ_LIB1 NAMES libsz.a PATHS ${SZ_DIR}/lib)
+  find_library(SZ_LIB2 NAMES libzlib.a PATHS ${SZ_DIR}/lib)
+  set(SZ_LIBS ${SZ_LIB1} ${SZ_LIB2} CACHE FILEPATH "SZ libraries")
+  unset(SZ_LIB1 CACHE)
+  unset(SZ_LIB2 CACHE)
+  if(SZ_INCLUDE_DIR AND SZ_LIBS)
+    set(HAVE_SZ 1)
+    set(SZ_CPPFLAGS "-I${SZ_INCLUDE_DIR}")
+  endif()
+endif()
+
 # Define to 1 if your C compiler doesn't accept -c and -o together.
 
 # Name of package
@@ -1391,7 +1558,7 @@ set(PACKAGE adios)
 set(VERSION_MAJOR 1)
 
 # Minor version number
-set(VERSION_MINOR 10)
+set(VERSION_MINOR 12)
 
 # Micro version number
 set(VERSION_MICRO 0)
@@ -1402,6 +1569,12 @@ set(VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_MICRO})
 # svn revision number
 #set(VERSION_SVNREV 2007)
 
+# Define HAVE_MPI_FALSE because it is used in generating the adios_config script
+if(HAVE_MPI)
+    set(HAVE_MPI_FALSE "#")
+else(HAVE_MPI)
+    set(HAVE_MPI_FALSE "")
+endif(HAVE_MPI)
 
 CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake ${PROJECT_BINARY_DIR}/config.h)
 ################################ end of generating config.h ###############################
@@ -1669,6 +1842,24 @@ if(HAVE_ZLIB)
   set(ADIOSREADLIB_SEQ_LDADD ${ADIOSREADLIB_SEQ_LDADD} ${ZLIB_LIBS})
 endif()
 
+if(HAVE_LZ4)
+  set(ADIOSLIB_CPPFLAGS "${ADIOSLIB_CPPFLAGS} -DLZ4 ${LZ4_CPPFLAGS}")
+  set(ADIOSLIB_CFLAGS "${ADIOSLIB_CFLAGS} ${LZ4_CFLAGS}")
+  set(ADIOSLIB_LDADD ${ADIOSLIB_LDADD} ${LZ4_LIBS})
+  set(ADIOSLIB_SEQ_CPPFLAGS "${ADIOSLIB_SEQ_CPPFLAGS} -DLZ4 ${LZ4_CPPFLAGS}")
+  set(ADIOSLIB_SEQ_CFLAGS "${ADIOSLIB_SEQ_CFLAGS} ${LZ4_CFLAGS}")
+  set(ADIOSLIB_SEQ_LDADD ${ADIOSLIB_SEQ_LDADD} ${LZ4_LIBS})
+  set(ADIOSLIB_INT_CPPFLAGS "${ADIOSLIB_INT_CPPFLAGS} -DLZ4 ${LZ4_CPPFLAGS}")
+  set(ADIOSLIB_INT_CFLAGS "${ADIOSLIB_INT_CFLAGS} ${LZ4_CFLAGS}")
+  set(ADIOSLIB_INT_LDADD ${ADIOSLIB_INT_LDADD} ${LZ4_LIBS})
+  set(ADIOSREADLIB_CPPFLAGS "${ADIOSREADLIB_CPPFLAGS} -DLZ4 ${LZ4_CPPFLAGS}")
+  set(ADIOSREADLIB_CFLAGS "${ADIOSREADLIB_CFLAGS} ${LZ4_CFLAGS}")
+  set(ADIOSREADLIB_LDADD ${ADIOSREADLIB_LDADD} ${LZ4_LIBS})
+  set(ADIOSREADLIB_SEQ_CPPFLAGS "${ADIOSREADLIB_SEQ_CPPFLAGS} -DLZ4 ${LZ4_CPPFLAGS}")
+  set(ADIOSREADLIB_SEQ_CFLAGS "${ADIOSREADLIB_SEQ_CFLAGS} ${LZ4_CFLAGS}")
+  set(ADIOSREADLIB_SEQ_LDADD ${ADIOSREADLIB_SEQ_LDADD} ${LZ4_LIBS})
+endif()
+
 if(HAVE_BZIP2)
   set(ADIOSLIB_CPPFLAGS "${ADIOSLIB_CPPFLAGS} -DBZIP2 ${BZIP2_CPPFLAGS}")
   set(ADIOSLIB_CFLAGS "${ADIOSLIB_CFLAGS} ${BZIP2_CFLAGS}")
@@ -1772,6 +1963,24 @@ if(HAVE_ZFP)
   set(ADIOSREADLIB_SEQ_LDADD ${ADIOSREADLIB_SEQ_LDADD} ${ZFP_LIBS})
 endif()
 
+if(HAVE_SZ)
+  set(ADIOSLIB_CPPFLAGS "${ADIOSLIB_CPPFLAGS} ${SZ_CPPFLAGS}")
+  set(ADIOSLIB_CFLAGS "${ADIOSLIB_CFLAGS} ${SZ_CFLAGS}")
+  set(ADIOSLIB_LDADD ${ADIOSLIB_LDADD} ${SZ_LIBS})
+  set(ADIOSLIB_SEQ_CPPFLAGS "${ADIOSLIB_SEQ_CPPFLAGS} ${SZ_CPPFLAGS}")
+  set(ADIOSLIB_SEQ_CFLAGS "${ADIOSLIB_SEQ_CFLAGS} ${SZ_CFLAGS}")
+  set(ADIOSLIB_SEQ_LDADD ${ADIOSLIB_SEQ_LDADD} ${SZ_LIBS})
+  set(ADIOSLIB_INT_CPPFLAGS "${ADIOSLIB_INT_CPPFLAGS} ${SZ_CPPFLAGS}")
+  set(ADIOSLIB_INT_CFLAGS "${ADIOSLIB_INT_CFLAGS} ${SZ_CFLAGS}")
+  set(ADIOSLIB_INT_LDADD ${ADIOSLIB_INT_LDADD} ${SZ_LIBS})
+  set(ADIOSREADLIB_CPPFLAGS "${ADIOSREADLIB_CPPFLAGS} ${SZ_CPPFLAGS}")
+  set(ADIOSREADLIB_CFLAGS "${ADIOSREADLIB_CFLAGS} ${SZ_CFLAGS}")
+  set(ADIOSREADLIB_LDADD ${ADIOSREADLIB_LDADD} ${SZ_LIBS})
+  set(ADIOSREADLIB_SEQ_CPPFLAGS="${ADIOSREADLIB_SEQ_CPPFLAGS} ${SZ_CPPFLAGS}")
+  set(ADIOSREADLIB_SEQ_CFLAGS="${ADIOSREADLIB_SEQ_CFLAGS} ${SZ_CFLAGS}")
+  set(ADIOSREADLIB_SEQ_LDADD ${ADIOSREADLIB_SEQ_LDADD} ${SZ_LIBS})
+endif()
+
 if(HAVE_FASTBIT)
   set(ADIOSLIB_CPPFLAGS "${ADIOSLIB_CPPFLAGS} -DFASTBIT ${FASTBIT_CPPFLAGS}")
   set(ADIOSLIB_CFLAGS "${ADIOSLIB_CFLAGS} ${FASTBIT_CFLAGS}")
@@ -1800,7 +2009,7 @@ set(ADIOSREADLIB_SEQ_LDADD ${ADIOSREADLIB_SEQ_LDADD} ${M_LIBS})
 #install(PROGRAMS adios_config DESTINATION ${bindir})
 
 #if(HAVE_NSSI)
-#install(PROGRAMS scripts/create.nssi.config.sh DESTINATION ${bindir}) 
+#install(PROGRAMS scripts/create.nssi.config.sh DESTINATION ${bindir})
 #install(PROGRAMS scripts/kill.nssi.staging.sh DESTINATION ${bindir})
 #install(PROGRAMS scripts/start.nssi.staging.sh DESTINATION  ${bindir})
 #endif(HAVE_NSSI)
@@ -1828,7 +2037,7 @@ CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/adios_config.makesrc.in ${CMAKE_CURRE
 #####################end of processing adios_config.flags.in #####################
 install(FILES ${CMAKE_BINARY_DIR}/adios_config.flags DESTINATION ${sysconfdir})
 install(PROGRAMS ${CMAKE_BINARY_DIR}/adios_config DESTINATION ${bindir})
-install(FILES ${PROJECT_SOURCE_DIR}/scripts/FindADIOS.cmake DESTINATION ${sysconfdir}) 
+install(FILES ${PROJECT_SOURCE_DIR}/scripts/FindADIOS.cmake DESTINATION ${sysconfdir})
 #install(FILES ${PROJECT_SOURCE_DIR}/adios_git_status DESTINATION ${sysconfdir})
 
 
@@ -2057,6 +2266,16 @@ else()
   message("  - No ZLIB to build ZLIB transform method")
 endif()
 
+if(HAVE_LZ4)
+  message("  - LZ4")
+  message("      - LZ4_CFLAGS = ${LZ4_CFLAGS}")
+  message("      - LZ4_CPPFLAGS = ${LZ4_CPPFLAGS}")
+  message("      - LZ4_LIBS = ${LZ4_LIBS}")
+  message("")
+else()
+  message("  - No LZ4 to build LZ4 transform method")
+endif()
+
 if(HAVE_BZIP2)
   message("  - BZIP2")
   message("      - BZIP2_CFLAGS = ${BZIP2_CFLAGS}")
@@ -2128,6 +2347,15 @@ else()
     message("  - No ZFP to build ZFP transform method")
 endif()
 
+if(HAVE_SZ)
+  message("  - SZ")
+  message("      - SZ_CFLAGS = ${SZ_CFLAGS}")
+  message("      - SZ_CPPFLAGS = ${SZ_CPPFLAGS}")
+  message("      - SZ_LIBS = ${SZ_LIBS}")
+  message("")
+else()
+  message("  - No SZ to build SZ transform method")
+endif()
 
 if(HAVE_BGQ)
   message("  - BGQ METHOD is enabled")
diff --git a/Makefile.in b/Makefile.in
index 0b884d9..74b7e96 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -120,7 +120,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -128,8 +128,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -406,6 +406,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -482,6 +486,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/NEWS b/NEWS
index 020f86c..d235660 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,21 @@
+1.12.0 Release June 2017
+     - added LZ4 compression transform by René Widera HZDR, Germany
+     - added SZ compression transform
+     - Support for burst buffer on Summitdev at OLCF, Cori at NERSC
+       - see Chapter 16 in the manual
+     - New Flexpath staging method from Georgia Tech, faster and more reliable
+     - Performance tools interface API by Kevin Huck of the TAU team
+     - fix: cmake build broken since 1.11.0. Also include building 
+            the test suite
+     - fix: for >2GB block reads
+     - fix: time-aggregation works with writing multiple files each 
+            contaning multiple steps
+     - fix: python interface
+
+1.11.1 Release January 2017
+    - fix: able to read from a BP file when the index itself is > 2GB
+    - fix: bpmeta, bpdump works correctly with index size > 2GB
+
 1.11.0 Release November 2016
     - Time aggregation (temporal aggregation of an output in memory)
       see adios_set_time_aggregation() or the <time-aggregation> element in the XML syntax.
diff --git a/aclocal.m4 b/aclocal.m4
index 84c17eb..6fffe76 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1437,6 +1437,7 @@ m4_include([config/ac_hdf5.m4])
 m4_include([config/ac_infiniband.m4])
 m4_include([config/ac_isobar.m4])
 m4_include([config/ac_lustre.m4])
+m4_include([config/ac_lz4.m4])
 m4_include([config/ac_mxml.m4])
 m4_include([config/ac_nc4par.m4])
 m4_include([config/ac_netcdf.m4])
@@ -1445,6 +1446,7 @@ m4_include([config/ac_pablo.m4])
 m4_include([config/ac_pami.m4])
 m4_include([config/ac_phdf5.m4])
 m4_include([config/ac_portals.m4])
+m4_include([config/ac_sz.m4])
 m4_include([config/ac_szip.m4])
 m4_include([config/ac_zfp.m4])
 m4_include([config/ac_zlib.m4])
diff --git a/cmake_init b/cmake_init
index 9a0b60c..8185349 100755
--- a/cmake_init
+++ b/cmake_init
@@ -4,117 +4,10 @@
 # You can study it to figure out how to configure adios on your system
 #
 
-if [ `hostname | cut -c 1-4` == "sith" ]; then
+SRCDIR=`dirname ${BASH_SOURCE[0]}`
 
-    ########
-    # Sith #
-    ########
-    source /etc/profile.d/modules.sh
-    TARGET=`module list 2>&1 | grep "PE"- | sed "s/^.*PE-\([a-z]*\).*/\1/"`
 
-    if [ -z "$TARGET" ]; then
-        echo "Cannot determine Programming environment. Exit"
-        exit 1
-    fi
-    echo "Configure on SITH for $TARGET env."
-    source /etc/profile.d/modules.sh
-    module unload hdf5
-    module unload netcdf
-    module unload PE-gnu
-    module unload PE-pgi
-    module unload PE-intel
-    module unload PE-pathscale
-    module unload pgi gcc intel pathscale
-    module unload python
-    module load PE-$TARGET
-    module load python
-    module load szip
-    module load bzip2
-    export LUSTRE_DIR="/usr/lib64"
-#    export FGR_DIR="/ccs/proj/e2e/qliu/tap"
-    export GLIB_DIR="/ccs/proj/e2e/qliu/glib"
-    export BUILD_WRITE=ON
-    export BUILD_FORTRAN=ON
-    export adios_timers=ON
-    export research_transports=ON
-    export CC=mpicc
-    export CXX=mpiCC
-    export FC=mpif90
-    export INSTALL_PREFIX="/ccs/home/jya/ADIOS/sith.$TARGET"
-    export APLOD_DIR="/ccs/proj/e2e/ncsu/sith.gnu"
-    export ISOBAR_DIR="/ccs/proj/e2e/ncsu/sith.gnu"
-    export ALACRITY_DIR="/ccs/proj/e2e/pnorbert/ALACRITY-ADIOS/synced/build.sith/build.gnu" 
-    export NCSU_TIMER_DIR
-    if [ "$TARGET" == "pgi" ]; then
-        module load hdf5/1.8.10
-        export SEQ_HDF5_DIR=$HDF5_DIR
-        export SEQ_HDF5_LIBS="-L/sw/sith/hdf5/1.8.10/rhel6_pgi12.8/lib -L/sw/sith/szip/2.1/rhel6_pgi12.8/lib -lhdf5_hl -lhdf5 -lsz -lz -lm"
-        module unload hdf5/1.8.10
-        module load hdf5/1.8.10_par
-        export PAR_HDF5_DIR=$HDF5_DIR
-        export PAR_HDF5_LIBS="-L/sw/sith/hdf5/1.8.10/rhel6_pgi13.4_ompi1.6.3/lib -L/sw/sith/szip/2.1/rhel6_pgi13.4/lib -lhdf5_hl -lhdf5 -lsz -lz -lm"
-        module unload hdf5/1.8.10_par
-        module load netcdf/4.1.3
-        export SEQ_NC_DIR=$NETCDF_DIR
-        export SEQ_NC_LIBS="-L/sw/sith/netcdf/4.1.3/rhel6_pgi12.8/lib -L/sw/sith/hdf5/1.8.10/rhel6_pgi12.8/lib -L/sw/sith/szip/2.1/rhel6_pgi12.8/lib -lnetcdf -lcurl -lhdf5_hl -lhdf5 -lsz -lz -lm"
-        module unload netcdf/4.1.3
-        module load netcdf/4.1.3_par
-        export PAR_NC_DIR=$NETCDF_DIR
-        export PAR_NC_LIBS="-L/sw/sith/netcdf/4.1.3/rhel6_pgi13.4_ompi1.6.3/lib -L/sw/sith/hdf5/1.8.10/rhel6_pgi13.4_ompi1.6.3/lib -L/sw/sith/szip/2.1/rhel6_pgi13.4/lib -lnetcdf -lcurl -lhdf5_hl -lhdf5 -lsz -lz -lm"
-        module unload netcdf/4.1.3_par
-
-        export DATASPACES_DIR="/ccs/proj/e2e/dataspaces/sith/$TARGET"
-        export FLEXPATH_DIR="/ccs/proj/e2e/chaos/sith/$TARGET"
-        export FASTBIT_DIR="/sw/redhat6/fastbit/svn/rhel6_gnu4.8.2"
-    elif [ "$TARGET" == "gnu" ]; then
-        module load hdf5/1.8.10
-        export SEQ_HDF5_DIR=$HDF5_DIR
-        export SEQ_HDF5_LIBS="-L/sw/sith/hdf5/1.8.10/rhel6_gnu4.7.1/lib -lhdf5_hl -lhdf5 -L/sw/sith/szip/2.1/rhel6_gnu4.7.1/lib -lsz -lz -lm"
-        module unload hdf5/1.8.10
-        module load hdf5/1.8.10_par
-        export PAR_HDF5_DIR=$HDF5_DIR
-        export PAR_HDF5_LIBS="-L/sw/sith/hdf5/1.8.10/rhel6_gnu4.7.1_ompi1.6.3/lib -lhdf5_hl -lhdf5 -L/sw/sith/szip/2.1/rhel6_gnu4.7.1/lib -lsz -lz -lm"
-        module unload hdf5/1.8.10_par
-        module load netcdf/4.1.3
-        export SEQ_NC_DIR=$NETCDF_DIR
-        export SEQ_NC_LIBS="-L/sw/sith/netcdf/4.1.3/rhel6_gnu4.7.1/lib -L/sw/sith/hdf5/1.8.10/rhel6_gnu4.7.1/lib -L/sw/sith/szip/2.1/rhel6_gnu4.7.1/lib -lnetcdf -lm -lcurl -lhdf5_hl -lhdf5 -lsz -lz -lm"
-        module unload netcdf/4.1.3
-#        module load netcdf/4.1.3_par
-#        export PAR_NC_DIR=$NETCDF_DIR
-#        export PAR_NC_LIBS=""
-#        module unload netcdf/4.1.3_par
-#        export DATASPACES_DIR="/ccs/proj/e2e/dataspaces/sith/$TARGET"
-        export FLEXPATH_DIR="/ccs/proj/e2e/chaos/sith/$TARGET"
-        export FASTBIT_DIR="/sw/redhat6/fastbit/svn/rhel6_gnu4.8.2"
-    elif [ "$TARGET" == "intel" ]; then
-        module load hdf5/1.8.10
-        export SEQ_HDF5_DIR=$HDF5_DIR
-        export SEQ_HDF5_LIBS="-L/sw/sith/hdf5/1.8.10/rhel6_intel11.1/lib -lhdf5_hl -lhdf5 -L/sw/sith/szip/2.1/rhel6_intel11.1.072/lib -lsz -lz -lm"
-        module unload hdf5/1.8.10
-        module load hdf5/1.8.10_par
-        export PAR_HDF5_DIR=$HDF5_DIR
-        export PAR_HDF5_LIBS="-L/sw/sith/hdf5/1.8.10/rhel6_intel11.1_ompi1.6.3/lib -lhdf5_hl -lhdf5 -L/sw/sith/szip/2.1/rhel6_intel11.1.072/lib -lsz -lz -lm"
-        module unload hdf5/1.8.10_par
-        module load netcdf/4.1.3
-        export SEQ_NC_DIR=$NETCDF_DIR
-        export SEQ_NC_LIBS="-L/sw/sith/netcdf/4.1.3/rhel6_intel11.1/lib -L/sw/sith/hdf5/1.8.10/rhel6_intel11.1/lib -L/sw/sith/szip/2.1/rhel6_intel11.1.072/lib -lnetcdf -lm -lcurl -lhdf5_hl -lhdf5 -lsz -lz -lm"
-        module unload netcdf/4.1.3
-#        module load netcdf/4.1.3_par
-#        export PAR_NC_DIR=$NETCDF_DIR
-#        export PAR_NC_LIBS=""
-#        module unload netcdf/4.1.3_par
-#        export DATASPACES_DIR="/ccs/proj/e2e/dataspaces/sith/$TARGET"
-        export FLEXPATH_DIR=
-    else
-        echo "TARGET must be pgi or gnu or intel"
-        exit 1
-    fi
-        
-    export CPPFLAGS="-DMPICH_IGNORE_CXX_SEEK" 
-    export CFLAGS="-g -fPIC" 
-
-
-elif [ `hostname | cut -c 1-4` == "lens" ]; then
+if [ `hostname | cut -c 1-4` == "rhea" ]; then
     source /etc/profile.d/modules.sh
     source /etc/profile.d/modules.sh
     TARGET=`module list 2>&1 | grep "PE"- | sed "s/^.*PE-\([a-z]*\).*/\1/"`
@@ -123,29 +16,23 @@ elif [ `hostname | cut -c 1-4` == "lens" ]; then
         echo "Cannot determine Programming environment. Exit"
         exit 1
     fi
-    echo "Configure on LENS for $TARGET env."
+    echo "Configure on Rhea for $TARGET env. for user ${USER}"
     module unload hdf5
     module unload netcdf
-    module unload PE-gnu
-    module unload PE-pgi
-    module unload PE-pathscale
-    module unload pgi
-    module load PE-$TARGET
     # Use both seq hdf5 (for utils) and 
     #   parallel hdf5 (for PHDF5 method)
-#    module load hdf5/1.8.6
-#    export SEQ_HDF5_DIR=$HDF5_DIR
-#    export SEQ_HDF5_CLIB=$HDF5_CLIB
-#    module unload hdf5
-#    module load hdf5/1.8.6_ompi1.4.2
-#    export PAR_HDF5_DIR=$HDF5_DIR
-#    export PAR_HDF5_CLIB=$HDF5_CLIB
-#    module unload hdf5
-    # Seq NetCDF 3 for bp2ncd
-    module unload netcdf
-    module load netcdf/4.1.3
-    export SEQ_NC_DIR=$NETCDF_DIR
-    module unload netcdf
+    module load hdf5/1.8.11
+    export SEQ_HDF5_DIR=$HDF5_DIR
+    export SEQ_HDF5_CLIB=$HDF5_CLIB
+    module unload hdf5
+    module load hdf5-parallel/1.8.11
+    export PAR_HDF5_DIR=$HDF5_DIR
+    export PAR_HDF5_CLIB=$HDF5_CLIB
+    module unload hdf5
+    # Seq NetCDF 4 for bp2ncd
+#    module load netcdf/4.1.3
+#    export SEQ_NC_DIR=$NETCDF_DIR
+#    module unload netcdf
 #    module load netcdf/4.1.1_ompi1.3.1
 #    export PAR_NC_DIR=$NETCDF_DIR
 #    module unload netcdf
@@ -161,19 +48,24 @@ elif [ `hostname | cut -c 1-4` == "lens" ]; then
 #        export CC=pgcc
 #        export CXX=pgCC
 #        export FC=pgf90
-        module switch pgi pgi/10.5
+        export EXTRA_CFLAGS=""
     elif [ "$TARGET" == "gnu" ]; then
 #        export CC=gcc
 #        export CXX=g++
 #        export FC=gfortran
-	module unload PE-pgi
-	module load PE-gnu
+        export EXTRA_CFLAGS=""
+    elif [ "$TARGET" == "intel" ]; then
+#        export CC=icc
+#        export CXX=icpc
+#        export FC=ifort
+        export EXTRA_CFLAGS="-std=c99"
     else
         echo "TARGET must be pgi or gnu"
         exit 1
     fi
 
-    export CFLAGS="-g -fPIC"
+    export CFLAGS="-g -fPIC ${EXTRA_CFLAGS}"
+    cmake $SRCDIR
 
 
 elif [ `hostname | cut -c 1-5` == "titan" ]; then
@@ -278,6 +170,7 @@ elif [ `hostname | cut -c 1-5` == "titan" ]; then
         export adios_timers=ON
         export INSTALL_PREFIX="/ccs/proj/e2e/pnorbert/ADIOS/titan.cmake.$TARGET" 
     fi
+    cmake $SRCDIR
     
 
 elif [ `hostname | cut -c 1-4` == "eos-" ]; then
@@ -323,6 +216,7 @@ elif [ `hostname | cut -c 1-4` == "eos-" ]; then
       module load pmi
       export CFLAGS="-g -fPIC"
       export INSTALL_PREFIX="/ccs/home/jya/ADIOS/eos.$TARGET"
+      cmake $SRCDIR
 
 
 elif [ `hostname | cut -c 1-7` == "chester" ]; then
@@ -384,7 +278,155 @@ elif [ `hostname | cut -c 1-7` == "chester" ]; then
 #          WITHDART=""
       fi
       export CFLAGS="-g -fPIC" 
-            
+      cmake $SRCDIR
+
+elif [ `hostname -f | cut -c 1-9` == "summitdev" ]; then
+    #####################
+    #  SUMMITDEV IBM    #
+    #####################
+    MLIST=`module list 2>&1 ` #| grep "PrgEnv"- | sed "s/^.*PrgEnv-\([a-z]*\).*/\1/"`
+    TARGET=`echo $MLIST | grep " xl\/" | sed "s/^.* xl\/.*/xl/"`
+    if [ -z $TARGET ]; then
+        TARGET=`echo $MLIST | grep " pgi\/" | sed "s/^.* pgi\/.*/pgi/"`
+        if [ -z $TARGET ]; then
+            TARGET=`echo $MLIST | grep " gcc\/" | sed "s/^.* gcc\/.*/gcc/"`
+            if [ -z $TARGET ]; then
+                TARGET=`echo $MLIST | grep " clang\/" | sed "s/^.* clang\/.*/clang/"`
+            fi
+        fi
+    fi
+    echo "Configure on Summitdev for $TARGET env."
+
+    export CC=mpicc
+    export CXX=mpic++
+    export FC=mpif90
+    export CFLAGS="-g -O0"
+
+    if [ "$TARGET" == "xl" ]; then
+        #export LIBS="-lrdmacm -libverbs"
+        export DATASPACES_DIR=/ccs/proj/e2e/dataspaces/summitdev/1.6.1/xl
+    elif [ "$TARGET" == "pgi" ]; then
+        export DATASPACES_DIR=/ccs/proj/e2e/dataspaces/summitdev/1.6.1/pgi
+    elif [ "$TARGET" == "gcc" ]; then
+        export DATASPACES_DIR=/ccs/proj/e2e/dataspaces/summitdev/1.6.1/gcc
+    elif [ "$TARGET" == "clang" ]; then
+        export BUILD_FORTRAN=OFF
+        unset DATASPACES_DIR
+    fi
+
+    export INSTALL_PREFIX=/ccs/proj/e2e/pnorbert/ADIOS/summitdev.$TARGET  
+    cmake $SRCDIR
+
+elif [ `hostname | cut -c 1-4` == "sith" ]; then
+
+    ########
+    # Sith #
+    ########
+    source /etc/profile.d/modules.sh
+    TARGET=`module list 2>&1 | grep "PE"- | sed "s/^.*PE-\([a-z]*\).*/\1/"`
+
+    if [ -z "$TARGET" ]; then
+        echo "Cannot determine Programming environment. Exit"
+        exit 1
+    fi
+    echo "Configure on SITH for $TARGET env."
+    source /etc/profile.d/modules.sh
+    module unload hdf5
+    module unload netcdf
+    module unload PE-gnu
+    module unload PE-pgi
+    module unload PE-intel
+    module unload PE-pathscale
+    module unload pgi gcc intel pathscale
+    module unload python
+    module load PE-$TARGET
+    module load python
+    module load szip
+    module load bzip2
+    export LUSTRE_DIR="/usr/lib64"
+#    export FGR_DIR="/ccs/proj/e2e/qliu/tap"
+    export GLIB_DIR="/ccs/proj/e2e/qliu/glib"
+    export BUILD_WRITE=ON
+    export BUILD_FORTRAN=ON
+    export adios_timers=ON
+    export research_transports=ON
+    export CC=mpicc
+    export CXX=mpiCC
+    export FC=mpif90
+    export INSTALL_PREFIX="/ccs/home/jya/ADIOS/sith.$TARGET"
+    export APLOD_DIR="/ccs/proj/e2e/ncsu/sith.gnu"
+    export ISOBAR_DIR="/ccs/proj/e2e/ncsu/sith.gnu"
+    export ALACRITY_DIR="/ccs/proj/e2e/pnorbert/ALACRITY-ADIOS/synced/build.sith/build.gnu" 
+    export NCSU_TIMER_DIR
+    if [ "$TARGET" == "pgi" ]; then
+        module load hdf5/1.8.10
+        export SEQ_HDF5_DIR=$HDF5_DIR
+        export SEQ_HDF5_LIBS="-L/sw/sith/hdf5/1.8.10/rhel6_pgi12.8/lib -L/sw/sith/szip/2.1/rhel6_pgi12.8/lib -lhdf5_hl -lhdf5 -lsz -lz -lm"
+        module unload hdf5/1.8.10
+        module load hdf5/1.8.10_par
+        export PAR_HDF5_DIR=$HDF5_DIR
+        export PAR_HDF5_LIBS="-L/sw/sith/hdf5/1.8.10/rhel6_pgi13.4_ompi1.6.3/lib -L/sw/sith/szip/2.1/rhel6_pgi13.4/lib -lhdf5_hl -lhdf5 -lsz -lz -lm"
+        module unload hdf5/1.8.10_par
+        module load netcdf/4.1.3
+        export SEQ_NC_DIR=$NETCDF_DIR
+        export SEQ_NC_LIBS="-L/sw/sith/netcdf/4.1.3/rhel6_pgi12.8/lib -L/sw/sith/hdf5/1.8.10/rhel6_pgi12.8/lib -L/sw/sith/szip/2.1/rhel6_pgi12.8/lib -lnetcdf -lcurl -lhdf5_hl -lhdf5 -lsz -lz -lm"
+        module unload netcdf/4.1.3
+        module load netcdf/4.1.3_par
+        export PAR_NC_DIR=$NETCDF_DIR
+        export PAR_NC_LIBS="-L/sw/sith/netcdf/4.1.3/rhel6_pgi13.4_ompi1.6.3/lib -L/sw/sith/hdf5/1.8.10/rhel6_pgi13.4_ompi1.6.3/lib -L/sw/sith/szip/2.1/rhel6_pgi13.4/lib -lnetcdf -lcurl -lhdf5_hl -lhdf5 -lsz -lz -lm"
+        module unload netcdf/4.1.3_par
+
+        export DATASPACES_DIR="/ccs/proj/e2e/dataspaces/sith/$TARGET"
+        export FLEXPATH_DIR="/ccs/proj/e2e/chaos/sith/$TARGET"
+        export FASTBIT_DIR="/sw/redhat6/fastbit/svn/rhel6_gnu4.8.2"
+    elif [ "$TARGET" == "gnu" ]; then
+        module load hdf5/1.8.10
+        export SEQ_HDF5_DIR=$HDF5_DIR
+        export SEQ_HDF5_LIBS="-L/sw/sith/hdf5/1.8.10/rhel6_gnu4.7.1/lib -lhdf5_hl -lhdf5 -L/sw/sith/szip/2.1/rhel6_gnu4.7.1/lib -lsz -lz -lm"
+        module unload hdf5/1.8.10
+        module load hdf5/1.8.10_par
+        export PAR_HDF5_DIR=$HDF5_DIR
+        export PAR_HDF5_LIBS="-L/sw/sith/hdf5/1.8.10/rhel6_gnu4.7.1_ompi1.6.3/lib -lhdf5_hl -lhdf5 -L/sw/sith/szip/2.1/rhel6_gnu4.7.1/lib -lsz -lz -lm"
+        module unload hdf5/1.8.10_par
+        module load netcdf/4.1.3
+        export SEQ_NC_DIR=$NETCDF_DIR
+        export SEQ_NC_LIBS="-L/sw/sith/netcdf/4.1.3/rhel6_gnu4.7.1/lib -L/sw/sith/hdf5/1.8.10/rhel6_gnu4.7.1/lib -L/sw/sith/szip/2.1/rhel6_gnu4.7.1/lib -lnetcdf -lm -lcurl -lhdf5_hl -lhdf5 -lsz -lz -lm"
+        module unload netcdf/4.1.3
+#        module load netcdf/4.1.3_par
+#        export PAR_NC_DIR=$NETCDF_DIR
+#        export PAR_NC_LIBS=""
+#        module unload netcdf/4.1.3_par
+#        export DATASPACES_DIR="/ccs/proj/e2e/dataspaces/sith/$TARGET"
+        export FLEXPATH_DIR="/ccs/proj/e2e/chaos/sith/$TARGET"
+        export FASTBIT_DIR="/sw/redhat6/fastbit/svn/rhel6_gnu4.8.2"
+    elif [ "$TARGET" == "intel" ]; then
+        module load hdf5/1.8.10
+        export SEQ_HDF5_DIR=$HDF5_DIR
+        export SEQ_HDF5_LIBS="-L/sw/sith/hdf5/1.8.10/rhel6_intel11.1/lib -lhdf5_hl -lhdf5 -L/sw/sith/szip/2.1/rhel6_intel11.1.072/lib -lsz -lz -lm"
+        module unload hdf5/1.8.10
+        module load hdf5/1.8.10_par
+        export PAR_HDF5_DIR=$HDF5_DIR
+        export PAR_HDF5_LIBS="-L/sw/sith/hdf5/1.8.10/rhel6_intel11.1_ompi1.6.3/lib -lhdf5_hl -lhdf5 -L/sw/sith/szip/2.1/rhel6_intel11.1.072/lib -lsz -lz -lm"
+        module unload hdf5/1.8.10_par
+        module load netcdf/4.1.3
+        export SEQ_NC_DIR=$NETCDF_DIR
+        export SEQ_NC_LIBS="-L/sw/sith/netcdf/4.1.3/rhel6_intel11.1/lib -L/sw/sith/hdf5/1.8.10/rhel6_intel11.1/lib -L/sw/sith/szip/2.1/rhel6_intel11.1.072/lib -lnetcdf -lm -lcurl -lhdf5_hl -lhdf5 -lsz -lz -lm"
+        module unload netcdf/4.1.3
+#        module load netcdf/4.1.3_par
+#        export PAR_NC_DIR=$NETCDF_DIR
+#        export PAR_NC_LIBS=""
+#        module unload netcdf/4.1.3_par
+#        export DATASPACES_DIR="/ccs/proj/e2e/dataspaces/sith/$TARGET"
+        export FLEXPATH_DIR=
+    else
+        echo "TARGET must be pgi or gnu or intel"
+        exit 1
+    fi
+        
+    export CPPFLAGS="-DMPICH_IGNORE_CXX_SEEK" 
+    export CFLAGS="-g -fPIC" 
+    cmake $SRCDIR
+
 
 elif [ "x"`hostname -f | cut -c 8-15` == "xintrepid" ]; then
     #####################
@@ -396,6 +438,7 @@ elif [ "x"`hostname -f | cut -c 8-15` == "xintrepid" ]; then
     export CFLAGS=""
 #    export FC=xlf90
 #    export CC=xlc_r
+    cmake $SRCDIR
 
     
 elif [ `hostname | cut -c 1-4` == "nid0" ]; then
@@ -422,6 +465,7 @@ elif [ `hostname | cut -c 1-4` == "nid0" ]; then
     export LDFLAGS="-pgcpplibs"
     export CPPFLAGS="-DMPICH_IGNORE_CXX_SEEK"
     export CFLAGS="-fPIC"
+    cmake $SRCDIR
     
 
 elif [ `hostname | cut -c 1-6` == "hopper" ]; then
@@ -456,6 +500,7 @@ elif [ `hostname | cut -c 1-6` == "hopper" ]; then
     fi
     export CPPFLAGS="-DMPICH_IGNORE_CXX_SEEK"
     export CFLAGS="-fPIC"
+    cmake $SRCDIR
 
 
 elif [ `hostname | cut -c 1-6` == "kraken" ]; then
@@ -498,6 +543,7 @@ elif [ `hostname | cut -c 1-6` == "kraken" ]; then
     module load subversion
     export CPPFLAGS="-DMPICH_IGNORE_CXX_SEEK" 
     export CFLAGS="-fPIC -g -O0" 
+    cmake $SRCDIR
 
 
 elif [ `hostname | cut -c 1-4` == "dyn9" -o `hostname | cut -c 1-3` == "pnb" ]; then
@@ -545,6 +591,7 @@ elif [ `hostname | cut -c 1-4` == "dyn9" -o `hostname | cut -c 1-3` == "pnb" ];
     unset SEQ_NC_LIBS
     unset PAR_NC_DIR
     unset PAR_NC_LIBS
+    cmake $SRCDIR
 
 
 elif [ `hostname | cut -c 1-7` == "ubuntu" ]; then
@@ -554,6 +601,7 @@ elif [ `hostname | cut -c 1-7` == "ubuntu" ]; then
     #########################
     echo "Configure on UBUNTU"
     export CC=mpicc
+    cmake $SRCDIR
 
 
 elif [ `hostname | cut -c 1-6` == "tomato" ]; then
@@ -563,6 +611,7 @@ elif [ `hostname | cut -c 1-6` == "tomato" ]; then
     #########################
     echo "Configure on UBUNTU"
     export CC=mpicc
+    cmake $SRCDIR
 
 
 elif [ `hostname | cut -c 1-4` == "qliu" ]; then
@@ -573,6 +622,7 @@ elif [ `hostname | cut -c 1-4` == "qliu" ]; then
     echo "Configure on UBUNTU"
     export CC=mpicc
     export CFLAGS="-g -O0 -fPIC"
+    cmake $SRCDIR
 
 elif [ `hostname | cut -c 1-7` == "esimmon" ]; then
 
@@ -597,6 +647,7 @@ elif [ `hostname | cut -c 1-7` == "esimmon" ]; then
     export SEQ_NC_LIBS="-L/opt/netcdf3/lib -lnetcdf"
     export PAR_NC_DIR=/opt/nc4par
     export PAR_NC_LIBS="-L/opt/nc4par/lib -lnetcdf"
+    cmake $SRCDIR
 
 elif [ `hostname | cut -c 1-9` == "PC0098504" ]; then
 
@@ -614,6 +665,7 @@ elif [ `hostname | cut -c 1-9` == "PC0098504" ]; then
     export CPPFLAGS="-DMPICH_IGNORE_CXX_SEEK"
     export CFLAGS="-g -O0 -fPIC -Wno-int-to-pointer-cast -Wno-pointer-to-int-cast"
     export LDFLAGS="-lpthread"
+    cmake $SRCDIR
 
 elif [ `hostname | cut -c 1-7` == "adiosVM" ]; then
 
@@ -627,7 +679,7 @@ elif [ `hostname | cut -c 1-7` == "adiosVM" ]; then
     export CC=mpicc
     export CXX=mpicxx
     export FC=mpif90
-    export INSTALL_PREFIX="/opt/adios/1.11"
+    export INSTALL_PREFIX="/opt/adios/1.12"
     export CPPFLAGS="-DMPICH_IGNORE_CXX_SEEK"
     export CFLAGS="-g -O0 -fPIC -Wno-int-to-pointer-cast -Wno-pointer-to-int-cast"
     export BZIP2_DIR="/usr/lib"
@@ -643,6 +695,7 @@ elif [ `hostname | cut -c 1-7` == "adiosVM" ]; then
     export PAR_HDF5_LIBS="-L/opt/hdf5-1.8.17-parallel/lib -lhdf5_hl -lhdf5 -lm"
     export SEQ_NC_DIR=/opt/netcdf-4.4.0
     export SEQ_NC_LIBS="-L/opt/netcdf-4.4.0/lib -lnetcdf"
+    cmake $SRCDIR
 else
     echo "Could not determine what machine is this."
     echo "This script is for configuring adios on the authors' machines."
diff --git a/config.h.cmake b/config.h.cmake
index 9fb2cfc..0ab0bd6 100644
--- a/config.h.cmake
+++ b/config.h.cmake
@@ -11,7 +11,7 @@
 
 /* Define to a macro mangling the given C identifier (in lower and upper
    case), which must not contain underscores, for linking with Fortran. */
-#cmakedefine FC_FUNC ${FC_FUNC} 
+#cmakedefine FC_FUNC ${FC_FUNC}
 
 /* As FC_FUNC, but for C identifiers containing underscores. */
 #cmakedefine FC_FUNC_ ${FC_FUNC_}
@@ -46,6 +46,9 @@
 /* Define to 1 if you have the `clock_get_time' function. */
 #cmakedefine HAVE_CLOCK_GET_TIME 1
 
+/* Define to 1 if the system has the type `clockid_t'. */
+#cmakedefine HAVE_CLOCKID_T 1
+
 /* Define if you have CRAY_PMI. */
 #cmakedefine HAVE_CRAY_PMI 1
 
@@ -207,7 +210,7 @@
 #cmakedefine HAVE_PTLERRORSTR 1
 
 /* Define to 1 if you have the `PtlEventKindStr' function. */
-#cmakedefine HAVE_PTLEVENTKINDSTR 1 
+#cmakedefine HAVE_PTLEVENTKINDSTR 1
 
 /* Define to 1 if you have the `PtlGetJid' function. */
 #cmakedefine HAVE_PTLGETJID 1
@@ -276,6 +279,18 @@
 /* Define to 1 if you have the <szlib.h> header file. */
 #cmakedefine HAVE_SZLIB_H 1
 
+/* Define if you have SZ. */
+#cmakedefine HAVE_SZ 1
+
+/* Define to 1 if you have the <sz.h> header file. */
+#cmakedefine HAVE_SZ_H 1
+
+/* Define if you have LZ4. */
+#cmakedefine HAVE_LZ4 1
+
+/* Define to 1 if you have the <lz4.h> header file. */
+#cmakedefine HAVE_LZ4_H 1
+
 /* Define to 1 if you have the <unistd.h> header file. */
 #cmakedefine HAVE_UNISTD_H 1
 
diff --git a/config.h.in b/config.h.in
index 418eb3d..1bd9164 100644
--- a/config.h.in
+++ b/config.h.in
@@ -149,6 +149,12 @@
 /* Define to 1 if you have the <lustre/lustreapi.h> header file. */
 #undef HAVE_LUSTRE_LUSTREAPI_H
 
+/* Define if you have LZ4. */
+#undef HAVE_LZ4
+
+/* Define to 1 if you have the <lz4.h> header file. */
+#undef HAVE_LZ4_H
+
 /* Define to 1 if you have the <memory.h> header file. */
 #undef HAVE_MEMORY_H
 
@@ -275,12 +281,18 @@
 /* Define to 1 if you have the <sys/types.h> header file. */
 #undef HAVE_SYS_TYPES_H
 
+/* Define if you have SZ. */
+#undef HAVE_SZ
+
 /* Define if you have SZIP. */
 #undef HAVE_SZIP
 
 /* Define to 1 if you have the <szlib.h> header file. */
 #undef HAVE_SZLIB_H
 
+/* Define to 1 if you have the <sz.h> header file. */
+#undef HAVE_SZ_H
+
 /* Define to 1 if you have the <time.h> header file. */
 #undef HAVE_TIME_H
 
diff --git a/config/ac_bzip2.m4 b/config/ac_bzip2.m4
index 9a2267c..54d3465 100644
--- a/config/ac_bzip2.m4
+++ b/config/ac_bzip2.m4
@@ -91,7 +91,9 @@ else
                  int bzerr = BZ2_bzBuffToBuffCompress (
                                out, out_len, in, in_len, blocksize100k, 0, 30);
                  return (bzerr != BZ_OK);],
-                [AC_MSG_RESULT(yes)],
+                [AC_MSG_RESULT(yes)
+                 AM_CONDITIONAL(HAVE_BZIP2,true)
+                ],
                 [AM_CONDITIONAL(HAVE_BZIP2,false)
                  AC_MSG_RESULT(no)
                 ])
diff --git a/config/ac_dataspaces.m4 b/config/ac_dataspaces.m4
index 038c072..2457000 100644
--- a/config/ac_dataspaces.m4
+++ b/config/ac_dataspaces.m4
@@ -26,8 +26,10 @@ AM_CONDITIONAL(HAVE_DATASPACES,true)
 AC_ARG_WITH(dataspaces,
         [AS_HELP_STRING([--with-dataspaces=DIR],
            [Build the DATASPACES transport method. Point to the DATASPACES installation.])],
-        [DATASPACES_LDFLAGS="-L$withval/lib";
-         DATASPACES_CPPFLAGS="-I$withval/include";],
+        [DATASPACES_LIBS="-L$withval/lib -ldspaces -ldscommon -ldart";
+         DATASPACES_CPPFLAGS="-I$withval/include";
+         DSPACES_CONFIG="$withval/bin/dspaces_config";
+        ],
         [with_dataspaces=check])
 
 dnl If --without-dataspaces was given set HAVE_DATASPACES to false and do nothing more
@@ -72,36 +74,29 @@ else
             DATASPACES_LIBDIR="${DATASPACES}/lib"
     fi
 
-    dnl Add "-I" to DATASPACES_INCDIR.
-    if test -n "${DATASPACES_INCDIR}"; then
-            DATASPACES_CPPFLAGS="-I${DATASPACES_INCDIR}"
+    dnl 1.6.2 has a config file
+    if test -x "${DSPACES_CONFIG}"; then
+        DATASPACES_LIBS=$(${DSPACES_CONFIG} -l)
+        DATASPACES_CPPFLAGS=$(${DSPACES_CONFIG} -c)
     else
-            ac_dataspaces_ok=no
-    fi
 
-    dnl Add "-L" to DATASPACES_LIBDIR.
-    if test -n "${DATASPACES_LIBDIR}"; then
-            DATASPACES_LDFLAGS="-L${DATASPACES_LIBDIR}"
-    else
-            ac_dataspaces_ok=no
+        dnl Add "-I" to DATASPACES_INCDIR.
+        if test -n "${DATASPACES_INCDIR}"; then
+                DATASPACES_CPPFLAGS="-I${DATASPACES_INCDIR}"
+        fi
+
+        dnl Add "-L" to DATASPACES_LIBDIR.
+        if test -n "${DATASPACES_LIBDIR}"; then
+                DATASPACES_LIBS="-L${DATASPACES_LIBDIR} -ldspaces -ldscommon -ldart"
+        fi
     fi
 
     save_CC="$CC"
     save_CPPFLAGS="$CPPFLAGS"
     save_LIBS="$LIBS"
     save_LDFLAGS="$LDFLAGS"
-    dnl if test "x${ac_infiniband_lib_ok}" == "xyes"; then 
-    dnl     dnl LIBS="$LIBS -ldart -ldataspaces"
-    dnl     LIBS="$LIBS -ldspaces -ldscommon -ldart"
-    dnl elif test "x${ac_portals_lib_ok}" == "xyes"; then 
-    dnl     LIBS="$LIBS -ldart2 -lspaces"
-    dnl elif test "x${ac_dmcf_lib_ok}" == "xyes"; then
-    dnl     LIBS="$LIBS -ldspaces -ldscommon -ldart"
-    dnl else
-    dnl     LIBS="$LIBS -ldspaces -ldscommon -ldart"
-    dnl fi
-    LIBS="-ldspaces -ldscommon -ldart $LIBS"
-    LDFLAGS="$LDFLAGS $DATASPACES_LDFLAGS"
+    dnl LDFLAGS="$LDFLAGS $DATASPACES_LDFLAGS"
+    LIBS="$DATASPACES_LIBS $LIBS"
     CPPFLAGS="$CPPFLAGS $DATASPACES_CPPFLAGS"
     CC="$MPICC"
     
@@ -117,14 +112,13 @@ else
         dnl if test "x${ac_portals_lib_ok}" == "xyes"; then 
         dnl elif test "x${ac_infiniband_lib_ok}" == "xyes"; then 
         dnl elif test -z "${HAVE_CRAY_PMI_TRUE}" -a -z "${HAVE_CRAY_UGNI_TRUE}"; then 
-	    dnl elif test "x${ac_dcmf_lib_ok}" == "xyes"; then
-	    dnl elif test "x${ac_pami_lib_ok}" == "xyes"; then
+        dnl elif test "x${ac_dcmf_lib_ok}" == "xyes"; then
+        dnl elif test "x${ac_pami_lib_ok}" == "xyes"; then
         dnl else
         dnl fi
             AC_TRY_LINK([#include "dataspaces.h"],
                     [int err; err = dspaces_init(1,1,0,"");],
-                    [AC_MSG_RESULT(yes)
-                     DATASPACES_LIBS="-ldspaces -ldscommon -ldart"],
+                    [AC_MSG_RESULT(yes)],
                     [AC_MSG_RESULT(no)
                      AM_CONDITIONAL(HAVE_DATASPACES,false)])
     fi
diff --git a/config/ac_dimes.m4 b/config/ac_dimes.m4
index 0929822..33d0da0 100644
--- a/config/ac_dimes.m4
+++ b/config/ac_dimes.m4
@@ -23,8 +23,10 @@ AM_CONDITIONAL(HAVE_DIMES,true)
 AC_ARG_WITH(dimes,
         [AS_HELP_STRING([--with-dimes=DIR],
            [Build the DIMES transport method. Point to the DIMES installation.])],
-        [DIMES_LDFLAGS="-L$withval/lib";
-         DIMES_CPPFLAGS="-I$withval/include";],
+        [DIMES_LIBS="-L$withval/lib -ldspaces -ldscommon -ldart";
+         DIMES_CPPFLAGS="-I$withval/include";
+         DSPACES_CONFIG="$withval/bin/dspaces_config";
+        ],
         [with_dimes=check])
 
 dnl If --without-dimes was given set HAVE_DIMES to false and do nothing more
@@ -69,32 +71,29 @@ else
             DIMES_LIBDIR="${DIMES}/lib"
     fi
 
-    dnl Add "-I" to DIMES_INCDIR.
-    if test -n "${DIMES_INCDIR}"; then
-            DIMES_CPPFLAGS="-I${DIMES_INCDIR}"
+	dnl 1.6.2 has a config file
+    if test -x "${DSPACES_CONFIG}"; then
+        DIMES_LIBS=$(${DSPACES_CONFIG} -l)
+        DIMES_CPPFLAGS=$(${DSPACES_CONFIG} -c)
     else
-            ac_dimes_ok=no
-    fi
 
-    dnl Add "-L" to DIMES_LIBDIR.
-    if test -n "${DIMES_LIBDIR}"; then
-            DIMES_LDFLAGS="-L${DIMES_LIBDIR}"
-    else
-            ac_dimes_ok=no
-    fi
+	    dnl Add "-I" to DIMES_INCDIR.
+	    if test -n "${DIMES_INCDIR}"; then
+	            DIMES_CPPFLAGS="-I${DIMES_INCDIR}"
+	    fi
+
+	    dnl Add "-L" to DIMES_LIBDIR.
+	    if test -n "${DIMES_LIBDIR}"; then
+	            DIMES_LDFLAGS="-L${DIMES_LIBDIR}"
+   	 	fi
+	fi
 
     save_CC="$CC"
     save_CPPFLAGS="$CPPFLAGS"
     save_LIBS="$LIBS"
     save_LDFLAGS="$LDFLAGS"
-    if test "x${ac_portals_lib_ok}" == "xyes"; then 
-        dnl LIBS="$LIBS -ldart2 -lspaces"
-	echo "DIMES currently NOT supported for Cray Portals!"
-	AM_CONDITIONAL(HAVE_DIMES, false)
-    else
-        LIBS="-ldspaces -ldscommon -ldart $LIBS"
-    fi
-    LDFLAGS="$LDFLAGS $DIMES_LDFLAGS"
+    dnl LDFLAGS="$LDFLAGS $DIMES_LDFLAGS"
+    LIBS="$DIMES_LIBS $LIBS"
     CPPFLAGS="$CPPFLAGS $DIMES_CPPFLAGS"
     CC="$MPICC"
     
@@ -113,8 +112,7 @@ else
 	    dnl elif test "x${ac_pami_lib_ok}" == "xyes"; then
            AC_TRY_LINK([#include "dimes_interface.h"],
                     [int err; dimes_put_sync_all();],
-                    [AC_MSG_RESULT(yes)
-                     DIMES_LIBS="-ldspaces -ldscommon -ldart"],
+                    [AC_MSG_RESULT(yes)],
                     [AC_MSG_RESULT(no)
                      AM_CONDITIONAL(HAVE_DIMES,false)])
         dnl else
diff --git a/config/ac_flexpath.m4 b/config/ac_flexpath.m4
index a358e1a..1871d5f 100644
--- a/config/ac_flexpath.m4
+++ b/config/ac_flexpath.m4
@@ -36,59 +36,28 @@ if test "x$ac_flexpath_ok" != "xno"; then
     flexpath_dir=$withval
     datatap_dir=$withval
 
-    CERCS_REQUIRE_PACKAGE(evpath, evpath.h, libevpath.a)
-    CERCS_REQUIRE_PACKAGE(ffs, ffs.h,libffs.a)
-    CERCS_REQUIRE_PACKAGE(atl, atl.h,libatl.a)
-    CERCS_REQUIRE_PACKAGE(dill, dill.h, libdill.a)
-    CERCS_REQUIRE_PACKAGE(cercs_env, cercs_env.h, libcercs_env.a)
-
+    CERCS_REQUIRE_PACKAGE(evpath, evpath.h, libevpath.la)
 
     if test -n "$cercs_cv_evpath_link_dir" -a -n "$cercs_cv_evpath_include_arg";then
-	FP_LDFLAGS="$FP_LDFLAGS -L$cercs_cv_evpath_link_dir"
-	FP_LIBS="$FP_LIBS -levpath"
-	FP_CFLAGS="$FP_CFLAGS $cercs_cv_evpath_include_arg"
-	FP_CPPFLAGS="$FP_CPPFLAGS $cercs_cv_evpath_include_arg"
+	if (test -x "$withval/bin/evpath_config") ; then
+	  FP_CONFIG="$withval/bin/evpath_config"
+	else
+	  FP_CONFIG="$cercs_cv_evpath_link_dir/../bin/evpath_config"
+	fi
+	if (test -x "$FP_CONFIG") ; then
+	  FP_LIBS=$(${FP_CONFIG} -s)
+	  FP_CFLAGS=$(${FP_CONFIG} -c)
+	  FP_CPPFLAGS=$(${FP_CONFIG} -c)
+	else
+	  FP_LDFLAGS="$FP_LDFLAGS -L$cercs_cv_evpath_link_dir"
+	  FP_LIBS="$FP_LIBS -levpath"
+	  FP_CFLAGS="$FP_CFLAGS $cercs_cv_evpath_include_arg"
+	  FP_CPPFLAGS="$FP_CPPFLAGS $cercs_cv_evpath_include_arg"
+	fi
     else
 	echo "FLEXPATH couldn't find evpath -  Not building flexpath"
 	ac_flexpath_ok=no
     fi
-    if test -n "$cercs_cv_ffs_link_dir" -a -n "$cercs_cv_ffs_include_arg"; then
-	FP_LDFLAGS="$FP_LDFLAGS -L$cercs_cv_ffs_link_dir"
-	FP_LIBS="$FP_LIBS -lffs"
-	FP_CFLAGS="$FP_CFLAGS $cercs_cv_ffs_include_arg"
-	FP_CPPFLAGS="$FP_CPPFLAGS $cercs_cv_ffs_include_arg"
-    else 
-	echo "FLEXPATH couldn't find ffs -  Not building flexpath"
-	ac_flexpath_ok=no
-    fi
-    if test -n "$cercs_cv_atl_link_dir" -a -n "$cercs_cv_atl_include_arg"; then
-	FP_LDFLAGS="$FP_LDFLAGS -L$cercs_cv_atl_link_dir"
-	FP_LIBS="$FP_LIBS -latl"
-	FP_CFLAGS="$FP_CFLAGS $cercs_cv_atl_include_arg"
-	FP_CPPFLAGS="$FP_CPPFLAGS $cercs_cv_atl_include_arg"
-    else 
-	ac_flexpath_ok=no
-	echo "FLEXPATH couldn't find atl -  Not building flexpath"
-    fi
-    if test -n "$cercs_cv_dill_link_dir" -a -n "$cercs_cv_dill_include_arg"; then
-	FP_LDFLAGS="$FP_LDFLAGS -L$cercs_cv_dill_link_dir"
-	FP_LIBS="$FP_LIBS -ldill"
-	FP_CFLAGS="$FP_CFLAGS $cercs_cv_dill_include_arg"
-	FP_CPPFLAGS="$FP_CPPFLAGS $cercs_cv_dill_include_arg"
-    else 
-	ac_flexpath_ok=no
-	echo "FLEXPATH couldn't find dill -  Not building flexpath"
-    fi
-    if test -n "$cercs_cv_cercs_env_link_dir" -a -n "$cercs_cv_cercs_env_include_arg"; then
-	FP_LDFLAGS="$FP_LDFLAGS -L$cercs_cv_cercs_env_link_dir"
-	FP_LIBS="$FP_LIBS -lcercs_env"
-	FP_CFLAGS="$FP_CFLAGS $cercs_cv_cercs_env_include_arg"
-	FP_CPPFLAGS="$FP_CPPFLAGS $cercs_cv_cercs_env_include_arg"
-    else 
-	ac_flexpath_ok=no
-	echo "FLEXPATH couldn't find cercs_env -  Not building flexpath"
-    fi
-
 fi
 
 AC_SUBST(FP_LIBS)
diff --git a/config/ac_lz4.m4 b/config/ac_lz4.m4
new file mode 100644
index 0000000..14baf52
--- /dev/null
+++ b/config/ac_lz4.m4
@@ -0,0 +1,83 @@
+#
+#
+# AC_LZ4
+#
+#
+#
+dnl @synopsis AC_LZ4
+dnl
+dnl This macro test if LZ4 is to be used.
+dnl Use in C code:
+dnl     #ifdef LZ4
+dnl     #include "lz4.h"
+dnl     #endif
+dnl
+dnl @version 2.0
+dnl @author Zhenhuan (Steve) Gong
+dnl @author Norbert Podhorszki
+dnl @author Rene Widera
+dnl
+AC_DEFUN([AC_LZ4],[
+
+AC_MSG_NOTICE([=== checking for LZ4 ===])
+
+AM_CONDITIONAL(HAVE_LZ4,true)
+
+AC_ARG_WITH(lz4,
+        [  --with-lz4=DIR      Location of LZ4 library],
+        [:], [with_lz4=no])
+
+if test "x$with_lz4" == "xno"; then
+
+   AM_CONDITIONAL(HAVE_LZ4,false)
+
+else
+
+    save_CFLAGS="$CFLAGS"
+    save_LIBS="$LIBS"
+    save_LDFLAGS="$LDFLAGS"
+
+    if test "x$with_lz4" == "xyes"; then
+        dnl No path given
+        LZ4_CFLAGS=""
+        LZ4_CPPFLAGS=""
+        LZ4_LDFLAGS=""
+        LZ4_LIBS="-llz4"
+    else
+        dnl Path given, first try path/lib
+        LZ4_CFLAGS="-I$withval/include"
+        LZ4_CPPFLAGS="-I$withval/include"
+        LZ4_LDFLAGS="-L$withval/lib"
+        LZ4_LIBS="-llz4"
+    fi
+
+    LIBS="$LIBS $LZ4_LIBS"
+    LDFLAGS="$LDFLAGS $LZ4_LDFLAGS"
+    CFLAGS="$CFLAGS $LZ4_CFLAGS"
+    CPPFLAGS="$CPPFLAGS $LZ4_CPPFLAGS"
+
+    dnl Find header file first
+    AC_CHECK_HEADERS(lz4.h,
+              ,
+              [AM_CONDITIONAL(HAVE_LZ4,false)])
+
+    LIBS="$save_LIBS"
+    LDFLAGS="$save_LDFLAGS"
+    CFLAGS="$save_CFLAGS"
+    CPPFLAGS="$save_CPPFLAGS"
+
+    AC_SUBST(LZ4_LIBS)
+    AC_SUBST(LZ4_LDFLAGS)
+    AC_SUBST(LZ4_CFLAGS)
+    AC_SUBST(LZ4_CPPFLAGS)
+
+    # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
+    if test -z "${HAVE_LZ4_TRUE}"; then
+            ifelse([$1],,[AC_DEFINE(HAVE_LZ4,1,[Define if you have LZ4.])],[$1])
+            :
+    else
+            $2
+            :
+    fi
+fi
+])dnl AC_LZ4
diff --git a/config/ac_sz.m4 b/config/ac_sz.m4
new file mode 100644
index 0000000..9b9d144
--- /dev/null
+++ b/config/ac_sz.m4
@@ -0,0 +1,73 @@
+#
+#
+# AC_SZ
+#
+#
+#
+dnl @synopsis AC_SZ
+dnl
+dnl This macro test if SZ is to be used.
+dnl Use in C code:
+dnl     #ifdef SZ
+dnl     #include "sz.h"
+dnl     #endif
+dnl
+dnl @version 1.0
+dnl @author Zhenhuan (Steve) Gong
+dnl
+AC_DEFUN([AC_SZ],[
+
+AC_MSG_NOTICE([=== checking for SZ ===])
+
+AM_CONDITIONAL(HAVE_SZ,true)
+
+AC_ARG_WITH(sz,
+        [  --with-sz=DIR      Location of SZ library],
+        [SZ_LDFLAGS="-L$withval/lib";
+         SZ_LIBS="-lsz -lzlib";
+         SZ_CPPFLAGS="-I$withval/include";],
+        [with_sz=no])
+
+if test "x$with_sz" == "xno"; then
+
+   AM_CONDITIONAL(HAVE_SZ,false)
+
+else
+
+    save_CPPFLAGS="$CPPFLAGS"
+    save_LIBS="$LIBS"
+    save_LDFLAGS="$LDFLAGS"
+    LIBS="$LIBS -lsz -lzlib"
+    LDFLAGS="$LDFLAGS $SZ_LDFLAGS"
+    CPPFLAGS="$CPPFLAGS $SZ_CPPFLAGS"
+
+    if test -z "${HAVE_SZ_TRUE}"; then
+           AC_CHECK_HEADERS(sz.h,
+                   ,
+                   [AM_CONDITIONAL(HAVE_SZ,false)])
+    fi
+
+    # Check for the SZ library and headers
+    dnl AC_TRY_COMPILE([struct obd_uuid {char uuid[40];};int fd, num_ost;struct obd_uuid uuids[1024];],
+    dnl        [llapi_lov_get_uuids(fd, uuids, &num_ost);],
+    dnl        [SZ_LIBS="-lsz"],
+    dnl        [AM_CONDITIONAL(HAVE_SZ,false)])
+
+    LIBS="$save_LIBS"
+    LDFLAGS="$save_LDFLAGS"
+    CPPFLAGS="$save_CPPFLAGS"
+
+    AC_SUBST(SZ_LIBS)
+    AC_SUBST(SZ_LDFLAGS)
+    AC_SUBST(SZ_CPPFLAGS)
+
+    # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
+    if test -z "${HAVE_SZ_TRUE}"; then
+            ifelse([$1],,[AC_DEFINE(HAVE_SZ,1,[Define if you have SZ.])],[$1])
+            :
+    else
+            $2
+            :
+    fi
+fi
+])dnl AC_SZ
diff --git a/config/ac_zlib.m4 b/config/ac_zlib.m4
index 344e6e5..6972808 100644
--- a/config/ac_zlib.m4
+++ b/config/ac_zlib.m4
@@ -88,7 +88,9 @@ else
                  int level = 5;
                  int zerr = compress2 (out, out_len, in, in_len, level);
                  return (zerr != Z_OK);],
-                [AC_MSG_RESULT(yes)],
+                [AC_MSG_RESULT(yes)
+                 AM_CONDITIONAL(HAVE_ZLIB,true)
+                ]
                 [AM_CONDITIONAL(HAVE_ZLIB,false)
                  AC_MSG_RESULT(no)
                 ])
diff --git a/config/acx_pthread.m4 b/config/acx_pthread.m4
index f51bfbc..50c126c 100644
--- a/config/acx_pthread.m4
+++ b/config/acx_pthread.m4
@@ -246,6 +246,7 @@ fi
 AC_SUBST(PTHREAD_LIBS)
 AC_SUBST(PTHREAD_CFLAGS)
 AC_SUBST(PTHREAD_CC)
+AC_MSG_NOTICE([PTHREAD_LIBS=${PTHREAD_LIBS}])
 
 if test x"$acx_pthread_ok" = xyes; then
     AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads])
diff --git a/config/config.guess b/config/config.guess
index e3ef63f..69ed3e5 100755
--- a/config/config.guess
+++ b/config/config.guess
@@ -1,13 +1,12 @@
 #! /bin/sh
 # Attempt to guess a canonical system name.
-#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+#   Copyright 1992-2017 Free Software Foundation, Inc.
 
-timestamp='2005-12-13'
+timestamp='2017-03-05'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
+# the Free Software Foundation; either version 3 of the License, or
 # (at your option) any later version.
 #
 # This program is distributed in the hope that it will be useful, but
@@ -16,26 +15,22 @@ timestamp='2005-12-13'
 # General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
 #
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
 # configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-
-# Originally written by Per Bothner <per at bothner.com>.
-# Please send patches to <config-patches at gnu.org>.  Submit a context
-# diff and a properly formatted ChangeLog entry.
+# the same distribution terms that you use for the rest of that
+# program.  This Exception is an additional permission under section 7
+# of the GNU General Public License, version 3 ("GPLv3").
 #
-# This script attempts to guess a canonical system name similar to
-# config.sub.  If it succeeds, it prints the system name on stdout, and
-# exits with 0.  Otherwise, it exits with 1.
+# Originally written by Per Bothner; maintained since 2000 by Ben Elliston.
 #
-# The plan is that this can be called by configure scripts if you
-# don't specify an explicit build system type.
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
+#
+# Please send patches to <config-patches at gnu.org>.
+
 
 me=`echo "$0" | sed -e 's,.*/,,'`
 
@@ -55,8 +50,7 @@ version="\
 GNU config.guess ($timestamp)
 
 Originally written by Per Bothner.
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
-Free Software Foundation, Inc.
+Copyright 1992-2017 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -106,7 +100,7 @@ set_cc_for_build='
 trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
 trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
 : ${TMPDIR=/tmp} ;
- { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
  { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
  { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
  { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
@@ -138,12 +132,33 @@ UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
 UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
 UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
 
+case "${UNAME_SYSTEM}" in
+Linux|GNU|GNU/*)
+	# If the system lacks a compiler, then just pick glibc.
+	# We could probably try harder.
+	LIBC=gnu
+
+	eval $set_cc_for_build
+	cat <<-EOF > $dummy.c
+	#include <features.h>
+	#if defined(__UCLIBC__)
+	LIBC=uclibc
+	#elif defined(__dietlibc__)
+	LIBC=dietlibc
+	#else
+	LIBC=gnu
+	#endif
+	EOF
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`
+	;;
+esac
+
 # Note: order is significant - the case branches are not exclusive.
 
 case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
     *:NetBSD:*:*)
 	# NetBSD (nbsd) targets should (where applicable) match one or
-	# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+	# more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
 	# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
 	# switched to ELF, *-*-netbsd* would select the old
 	# object file format.  This provides both forward
@@ -153,22 +168,33 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 	# Note: NetBSD doesn't particularly care about the vendor
 	# portion of the name.  We always set it to "unknown".
 	sysctl="sysctl -n hw.machine_arch"
-	UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
-	    /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+	UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \
+	    /sbin/$sysctl 2>/dev/null || \
+	    /usr/sbin/$sysctl 2>/dev/null || \
+	    echo unknown)`
 	case "${UNAME_MACHINE_ARCH}" in
 	    armeb) machine=armeb-unknown ;;
 	    arm*) machine=arm-unknown ;;
 	    sh3el) machine=shl-unknown ;;
 	    sh3eb) machine=sh-unknown ;;
+	    sh5el) machine=sh5le-unknown ;;
+	    earmv*)
+		arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'`
+		endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'`
+		machine=${arch}${endian}-unknown
+		;;
 	    *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
 	esac
 	# The Operating System including object format, if it has switched
-	# to ELF recently, or will in the future.
+	# to ELF recently (or will in the future) and ABI.
 	case "${UNAME_MACHINE_ARCH}" in
+	    earm*)
+		os=netbsdelf
+		;;
 	    arm*|i386|m68k|ns32k|sh3*|sparc|vax)
 		eval $set_cc_for_build
 		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
-			| grep __ELF__ >/dev/null
+			| grep -q __ELF__
 		then
 		    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
 		    # Return netbsd for either.  FIX?
@@ -178,7 +204,14 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 		fi
 		;;
 	    *)
-	        os=netbsd
+		os=netbsd
+		;;
+	esac
+	# Determine ABI tags.
+	case "${UNAME_MACHINE_ARCH}" in
+	    earm*)
+		expr='s/^earmv[0-9]/-eabi/;s/eb$//'
+		abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"`
 		;;
 	esac
 	# The OS release
@@ -191,34 +224,48 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 		release='-gnu'
 		;;
 	    *)
-		release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+		release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2`
 		;;
 	esac
 	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
 	# contains redundant information, the shorter form:
 	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
-	echo "${machine}-${os}${release}"
+	echo "${machine}-${os}${release}${abi}"
+	exit ;;
+    *:Bitrig:*:*)
+	UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
+	echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE}
 	exit ;;
     *:OpenBSD:*:*)
 	UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
 	echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
 	exit ;;
+    *:LibertyBSD:*:*)
+	UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'`
+	echo ${UNAME_MACHINE_ARCH}-unknown-libertybsd${UNAME_RELEASE}
+	exit ;;
     *:ekkoBSD:*:*)
 	echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
 	exit ;;
+    *:SolidBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
+	exit ;;
     macppc:MirBSD:*:*)
-	echo powerppc-unknown-mirbsd${UNAME_RELEASE}
+	echo powerpc-unknown-mirbsd${UNAME_RELEASE}
 	exit ;;
     *:MirBSD:*:*)
 	echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
 	exit ;;
+    *:Sortix:*:*)
+	echo ${UNAME_MACHINE}-unknown-sortix
+	exit ;;
     alpha:OSF1:*:*)
 	case $UNAME_RELEASE in
 	*4.0)
 		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
 		;;
 	*5.*)
-	        UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
 		;;
 	esac
 	# According to Compaq, /usr/sbin/psrinfo has been available on
@@ -228,43 +275,46 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 	ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
 	case "$ALPHA_CPU_TYPE" in
 	    "EV4 (21064)")
-		UNAME_MACHINE="alpha" ;;
+		UNAME_MACHINE=alpha ;;
 	    "EV4.5 (21064)")
-		UNAME_MACHINE="alpha" ;;
+		UNAME_MACHINE=alpha ;;
 	    "LCA4 (21066/21068)")
-		UNAME_MACHINE="alpha" ;;
+		UNAME_MACHINE=alpha ;;
 	    "EV5 (21164)")
-		UNAME_MACHINE="alphaev5" ;;
+		UNAME_MACHINE=alphaev5 ;;
 	    "EV5.6 (21164A)")
-		UNAME_MACHINE="alphaev56" ;;
+		UNAME_MACHINE=alphaev56 ;;
 	    "EV5.6 (21164PC)")
-		UNAME_MACHINE="alphapca56" ;;
+		UNAME_MACHINE=alphapca56 ;;
 	    "EV5.7 (21164PC)")
-		UNAME_MACHINE="alphapca57" ;;
+		UNAME_MACHINE=alphapca57 ;;
 	    "EV6 (21264)")
-		UNAME_MACHINE="alphaev6" ;;
+		UNAME_MACHINE=alphaev6 ;;
 	    "EV6.7 (21264A)")
-		UNAME_MACHINE="alphaev67" ;;
+		UNAME_MACHINE=alphaev67 ;;
 	    "EV6.8CB (21264C)")
-		UNAME_MACHINE="alphaev68" ;;
+		UNAME_MACHINE=alphaev68 ;;
 	    "EV6.8AL (21264B)")
-		UNAME_MACHINE="alphaev68" ;;
+		UNAME_MACHINE=alphaev68 ;;
 	    "EV6.8CX (21264D)")
-		UNAME_MACHINE="alphaev68" ;;
+		UNAME_MACHINE=alphaev68 ;;
 	    "EV6.9A (21264/EV69A)")
-		UNAME_MACHINE="alphaev69" ;;
+		UNAME_MACHINE=alphaev69 ;;
 	    "EV7 (21364)")
-		UNAME_MACHINE="alphaev7" ;;
+		UNAME_MACHINE=alphaev7 ;;
 	    "EV7.9 (21364A)")
-		UNAME_MACHINE="alphaev79" ;;
+		UNAME_MACHINE=alphaev79 ;;
 	esac
 	# A Pn.n version is a patched version.
 	# A Vn.n version is a released version.
 	# A Tn.n version is a released field test version.
 	# A Xn.n version is an unreleased experimental baselevel.
 	# 1.2 uses "1.2" for uname -r.
-	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-	exit ;;
+	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
+	# Reset EXIT trap before exiting to avoid spurious non-zero exit code.
+	exitcode=$?
+	trap '' 0
+	exit $exitcode ;;
     Alpha\ *:Windows_NT*:*)
 	# How do we know it's Interix rather than the generic POSIX subsystem?
 	# Should we change UNAME_MACHINE based on the output of uname instead
@@ -290,12 +340,12 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 	echo s390-ibm-zvmoe
 	exit ;;
     *:OS400:*:*)
-        echo powerpc-ibm-os400
+	echo powerpc-ibm-os400
 	exit ;;
     arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
 	echo arm-acorn-riscix${UNAME_RELEASE}
 	exit ;;
-    arm:riscos:*:*|arm:RISCOS:*:*)
+    arm*:riscos:*:*|arm*:RISCOS:*:*)
 	echo arm-unknown-riscos
 	exit ;;
     SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
@@ -319,14 +369,33 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 	case `/usr/bin/uname -p` in
 	    sparc) echo sparc-icl-nx7; exit ;;
 	esac ;;
+    s390x:SunOS:*:*)
+	echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
     sun4H:SunOS:5.*:*)
 	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
 	exit ;;
     sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
 	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
 	exit ;;
-    i86pc:SunOS:5.*:*)
-	echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+    i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
+	echo i386-pc-auroraux${UNAME_RELEASE}
+	exit ;;
+    i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
+	eval $set_cc_for_build
+	SUN_ARCH=i386
+	# If there is a compiler, see if it is configured for 64-bit objects.
+	# Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
+	# This test works for both compilers.
+	if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
+	    if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
+		(CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+		grep IS_64BIT_ARCH >/dev/null
+	    then
+		SUN_ARCH=x86_64
+	    fi
+	fi
+	echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
 	exit ;;
     sun4*:SunOS:6*:*)
 	# According to config.sub, this is the proper way to canonicalize
@@ -348,7 +417,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 	exit ;;
     sun*:*:4.2BSD:*)
 	UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
-	test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+	test "x${UNAME_RELEASE}" = x && UNAME_RELEASE=3
 	case "`/bin/arch`" in
 	    sun3)
 		echo m68k-sun-sunos${UNAME_RELEASE}
@@ -370,23 +439,23 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
     # MiNT.  But MiNT is downward compatible to TOS, so this should
     # be no problem.
     atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
-        echo m68k-atari-mint${UNAME_RELEASE}
+	echo m68k-atari-mint${UNAME_RELEASE}
 	exit ;;
     atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
 	echo m68k-atari-mint${UNAME_RELEASE}
-        exit ;;
+	exit ;;
     *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
-        echo m68k-atari-mint${UNAME_RELEASE}
+	echo m68k-atari-mint${UNAME_RELEASE}
 	exit ;;
     milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
-        echo m68k-milan-mint${UNAME_RELEASE}
-        exit ;;
+	echo m68k-milan-mint${UNAME_RELEASE}
+	exit ;;
     hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
-        echo m68k-hades-mint${UNAME_RELEASE}
-        exit ;;
+	echo m68k-hades-mint${UNAME_RELEASE}
+	exit ;;
     *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
-        echo m68k-unknown-mint${UNAME_RELEASE}
-        exit ;;
+	echo m68k-unknown-mint${UNAME_RELEASE}
+	exit ;;
     m68k:machten:*:*)
 	echo m68k-apple-machten${UNAME_RELEASE}
 	exit ;;
@@ -456,8 +525,8 @@ EOF
 	echo m88k-motorola-sysv3
 	exit ;;
     AViiON:dgux:*:*)
-        # DG/UX returns AViiON for all architectures
-        UNAME_PROCESSOR=`/usr/bin/uname -p`
+	# DG/UX returns AViiON for all architectures
+	UNAME_PROCESSOR=`/usr/bin/uname -p`
 	if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
 	then
 	    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
@@ -470,7 +539,7 @@ EOF
 	else
 	    echo i586-dg-dgux${UNAME_RELEASE}
 	fi
- 	exit ;;
+	exit ;;
     M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
 	echo m88k-dolphin-sysv3
 	exit ;;
@@ -527,15 +596,16 @@ EOF
 		echo rs6000-ibm-aix3.2
 	fi
 	exit ;;
-    *:AIX:*:[45])
+    *:AIX:*:[4567])
 	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
 	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
 		IBM_ARCH=rs6000
 	else
 		IBM_ARCH=powerpc
 	fi
-	if [ -x /usr/bin/oslevel ] ; then
-		IBM_REV=`/usr/bin/oslevel`
+	if [ -x /usr/bin/lslpp ] ; then
+		IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc |
+			   awk -F: '{ print $3 }' | sed s/[0-9]*$/0/`
 	else
 		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
 	fi
@@ -570,58 +640,58 @@ EOF
 	    9000/[678][0-9][0-9])
 		if [ -x /usr/bin/getconf ]; then
 		    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
-                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
-                    case "${sc_cpu_version}" in
-                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
-                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
-                      532)                      # CPU_PA_RISC2_0
-                        case "${sc_kernel_bits}" in
-                          32) HP_ARCH="hppa2.0n" ;;
-                          64) HP_ARCH="hppa2.0w" ;;
-			  '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
-                        esac ;;
-                    esac
+		    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+		    case "${sc_cpu_version}" in
+		      523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0
+		      528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1
+		      532)                      # CPU_PA_RISC2_0
+			case "${sc_kernel_bits}" in
+			  32) HP_ARCH=hppa2.0n ;;
+			  64) HP_ARCH=hppa2.0w ;;
+			  '') HP_ARCH=hppa2.0 ;;   # HP-UX 10.20
+			esac ;;
+		    esac
 		fi
 		if [ "${HP_ARCH}" = "" ]; then
 		    eval $set_cc_for_build
-		    sed 's/^              //' << EOF >$dummy.c
+		    sed 's/^		//' << EOF >$dummy.c
 
-              #define _HPUX_SOURCE
-              #include <stdlib.h>
-              #include <unistd.h>
+		#define _HPUX_SOURCE
+		#include <stdlib.h>
+		#include <unistd.h>
 
-              int main ()
-              {
-              #if defined(_SC_KERNEL_BITS)
-                  long bits = sysconf(_SC_KERNEL_BITS);
-              #endif
-                  long cpu  = sysconf (_SC_CPU_VERSION);
+		int main ()
+		{
+		#if defined(_SC_KERNEL_BITS)
+		    long bits = sysconf(_SC_KERNEL_BITS);
+		#endif
+		    long cpu  = sysconf (_SC_CPU_VERSION);
 
-                  switch (cpu)
-              	{
-              	case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
-              	case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
-              	case CPU_PA_RISC2_0:
-              #if defined(_SC_KERNEL_BITS)
-              	    switch (bits)
-              		{
-              		case 64: puts ("hppa2.0w"); break;
-              		case 32: puts ("hppa2.0n"); break;
-              		default: puts ("hppa2.0"); break;
-              		} break;
-              #else  /* !defined(_SC_KERNEL_BITS) */
-              	    puts ("hppa2.0"); break;
-              #endif
-              	default: puts ("hppa1.0"); break;
-              	}
-                  exit (0);
-              }
+		    switch (cpu)
+			{
+			case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+			case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+			case CPU_PA_RISC2_0:
+		#if defined(_SC_KERNEL_BITS)
+			    switch (bits)
+				{
+				case 64: puts ("hppa2.0w"); break;
+				case 32: puts ("hppa2.0n"); break;
+				default: puts ("hppa2.0"); break;
+				} break;
+		#else  /* !defined(_SC_KERNEL_BITS) */
+			    puts ("hppa2.0"); break;
+		#endif
+			default: puts ("hppa1.0"); break;
+			}
+		    exit (0);
+		}
 EOF
-		    (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+		    (CCOPTS="" $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
 		    test -z "$HP_ARCH" && HP_ARCH=hppa
 		fi ;;
 	esac
-	if [ ${HP_ARCH} = "hppa2.0w" ]
+	if [ ${HP_ARCH} = hppa2.0w ]
 	then
 	    eval $set_cc_for_build
 
@@ -634,12 +704,12 @@ EOF
 	    # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
 	    # => hppa64-hp-hpux11.23
 
-	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
-		grep __LP64__ >/dev/null
+	    if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) |
+		grep -q __LP64__
 	    then
-		HP_ARCH="hppa2.0w"
+		HP_ARCH=hppa2.0w
 	    else
-		HP_ARCH="hppa64"
+		HP_ARCH=hppa64
 	    fi
 	fi
 	echo ${HP_ARCH}-hp-hpux${HPUX_REV}
@@ -706,22 +776,22 @@ EOF
 	exit ;;
     C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
 	echo c1-convex-bsd
-        exit ;;
+	exit ;;
     C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
 	if getsysinfo -f scalar_acc
 	then echo c32-convex-bsd
 	else echo c2-convex-bsd
 	fi
-        exit ;;
+	exit ;;
     C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
 	echo c34-convex-bsd
-        exit ;;
+	exit ;;
     C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
 	echo c38-convex-bsd
-        exit ;;
+	exit ;;
     C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
 	echo c4-convex-bsd
-        exit ;;
+	exit ;;
     CRAY*Y-MP:*:*:*)
 	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
 	exit ;;
@@ -744,15 +814,15 @@ EOF
 	echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
 	exit ;;
     F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
-	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
-        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-        exit ;;
+	FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
+	FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
+	FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+	echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+	exit ;;
     5000:UNIX_System_V:4.*:*)
-        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-        FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
-        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+	FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
+	FUJITSU_REL=`echo ${UNAME_RELEASE} | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'`
+	echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
 	exit ;;
     i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
 	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
@@ -764,27 +834,52 @@ EOF
 	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
 	exit ;;
     *:FreeBSD:*:*)
-	echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+	UNAME_PROCESSOR=`/usr/bin/uname -p`
+	case ${UNAME_PROCESSOR} in
+	    amd64)
+		UNAME_PROCESSOR=x86_64 ;;
+	    i386)
+		UNAME_PROCESSOR=i586 ;;
+	esac
+	echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
 	exit ;;
     i*:CYGWIN*:*)
 	echo ${UNAME_MACHINE}-pc-cygwin
 	exit ;;
-    i*:MINGW*:*)
+    *:MINGW64*:*)
+	echo ${UNAME_MACHINE}-pc-mingw64
+	exit ;;
+    *:MINGW*:*)
 	echo ${UNAME_MACHINE}-pc-mingw32
 	exit ;;
+    *:MSYS*:*)
+	echo ${UNAME_MACHINE}-pc-msys
+	exit ;;
     i*:windows32*:*)
-    	# uname -m includes "-pc" on this system.
-    	echo ${UNAME_MACHINE}-mingw32
+	# uname -m includes "-pc" on this system.
+	echo ${UNAME_MACHINE}-mingw32
 	exit ;;
     i*:PW*:*)
 	echo ${UNAME_MACHINE}-pc-pw32
 	exit ;;
-    x86:Interix*:[345]*)
-	echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//'
-	exit ;;
+    *:Interix*:*)
+	case ${UNAME_MACHINE} in
+	    x86)
+		echo i586-pc-interix${UNAME_RELEASE}
+		exit ;;
+	    authenticamd | genuineintel | EM64T)
+		echo x86_64-unknown-interix${UNAME_RELEASE}
+		exit ;;
+	    IA64)
+		echo ia64-unknown-interix${UNAME_RELEASE}
+		exit ;;
+	esac ;;
     [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
 	echo i${UNAME_MACHINE}-pc-mks
 	exit ;;
+    8664:Windows_NT:*)
+	echo x86_64-pc-mks
+	exit ;;
     i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
 	# How do we know it's Interix rather than the generic POSIX subsystem?
 	# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
@@ -805,185 +900,169 @@ EOF
 	exit ;;
     *:GNU:*:*)
 	# the GNU system
-	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
 	exit ;;
     *:GNU/*:*:*)
 	# other systems with GNU libc and userland
-	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC}
 	exit ;;
     i*86:Minix:*:*)
 	echo ${UNAME_MACHINE}-pc-minix
 	exit ;;
+    aarch64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
+    aarch64_be:Linux:*:*)
+	UNAME_MACHINE=aarch64_be
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
+    alpha:Linux:*:*)
+	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+	  EV5)   UNAME_MACHINE=alphaev5 ;;
+	  EV56)  UNAME_MACHINE=alphaev56 ;;
+	  PCA56) UNAME_MACHINE=alphapca56 ;;
+	  PCA57) UNAME_MACHINE=alphapca56 ;;
+	  EV6)   UNAME_MACHINE=alphaev6 ;;
+	  EV67)  UNAME_MACHINE=alphaev67 ;;
+	  EV68*) UNAME_MACHINE=alphaev68 ;;
+	esac
+	objdump --private-headers /bin/sh | grep -q ld.so.1
+	if test "$?" = 0 ; then LIBC=gnulibc1 ; fi
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
+    arc:Linux:*:* | arceb:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
     arm*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	eval $set_cc_for_build
+	if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
+	    | grep -q __ARM_EABI__
+	then
+	    echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	else
+	    if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
+		| grep -q __ARM_PCS_VFP
+	    then
+		echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi
+	    else
+		echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf
+	    fi
+	fi
+	exit ;;
+    avr32*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     cris:Linux:*:*)
-	echo cris-axis-linux-gnu
+	echo ${UNAME_MACHINE}-axis-linux-${LIBC}
 	exit ;;
     crisv32:Linux:*:*)
-	echo crisv32-axis-linux-gnu
+	echo ${UNAME_MACHINE}-axis-linux-${LIBC}
+	exit ;;
+    e2k:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     frv:Linux:*:*)
-    	echo frv-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
+    hexagon:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
+    i*86:Linux:*:*)
+	echo ${UNAME_MACHINE}-pc-linux-${LIBC}
 	exit ;;
     ia64:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
+    k1om:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     m32r*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     m68*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
-    mips:Linux:*:*)
+    mips:Linux:*:* | mips64:Linux:*:*)
 	eval $set_cc_for_build
 	sed 's/^	//' << EOF >$dummy.c
 	#undef CPU
-	#undef mips
-	#undef mipsel
+	#undef ${UNAME_MACHINE}
+	#undef ${UNAME_MACHINE}el
 	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
-	CPU=mipsel
+	CPU=${UNAME_MACHINE}el
 	#else
 	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
-	CPU=mips
+	CPU=${UNAME_MACHINE}
 	#else
 	CPU=
 	#endif
 	#endif
 EOF
-	eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '/^CPU/{s: ::g;p;}'`"
-	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
+	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; }
 	;;
-    mips64:Linux:*:*)
-	eval $set_cc_for_build
-	sed 's/^	//' << EOF >$dummy.c
-	#undef CPU
-	#undef mips64
-	#undef mips64el
-	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
-	CPU=mips64el
-	#else
-	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
-	CPU=mips64
-	#else
-	CPU=
-	#endif
-	#endif
-EOF
-	eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '/^CPU/{s: ::g;p;}'`"
-	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
-	;;
-    or32:Linux:*:*)
-	echo or32-unknown-linux-gnu
+    mips64el:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
-    ppc:Linux:*:*)
-	echo powerpc-unknown-linux-gnu
+    openrisc*:Linux:*:*)
+	echo or1k-unknown-linux-${LIBC}
 	exit ;;
-    ppc64:Linux:*:*)
-	echo powerpc64-unknown-linux-gnu
+    or32:Linux:*:* | or1k*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
-    alpha:Linux:*:*)
-	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
-	  EV5)   UNAME_MACHINE=alphaev5 ;;
-	  EV56)  UNAME_MACHINE=alphaev56 ;;
-	  PCA56) UNAME_MACHINE=alphapca56 ;;
-	  PCA57) UNAME_MACHINE=alphapca56 ;;
-	  EV6)   UNAME_MACHINE=alphaev6 ;;
-	  EV67)  UNAME_MACHINE=alphaev67 ;;
-	  EV68*) UNAME_MACHINE=alphaev68 ;;
-        esac
-	objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
-	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
-	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+    padre:Linux:*:*)
+	echo sparc-unknown-linux-${LIBC}
+	exit ;;
+    parisc64:Linux:*:* | hppa64:Linux:*:*)
+	echo hppa64-unknown-linux-${LIBC}
 	exit ;;
     parisc:Linux:*:* | hppa:Linux:*:*)
 	# Look for CPU level
 	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
-	  PA7*) echo hppa1.1-unknown-linux-gnu ;;
-	  PA8*) echo hppa2.0-unknown-linux-gnu ;;
-	  *)    echo hppa-unknown-linux-gnu ;;
+	  PA7*) echo hppa1.1-unknown-linux-${LIBC} ;;
+	  PA8*) echo hppa2.0-unknown-linux-${LIBC} ;;
+	  *)    echo hppa-unknown-linux-${LIBC} ;;
 	esac
 	exit ;;
-    parisc64:Linux:*:* | hppa64:Linux:*:*)
-	echo hppa64-unknown-linux-gnu
+    ppc64:Linux:*:*)
+	echo powerpc64-unknown-linux-${LIBC}
+	exit ;;
+    ppc:Linux:*:*)
+	echo powerpc-unknown-linux-${LIBC}
+	exit ;;
+    ppc64le:Linux:*:*)
+	echo powerpc64le-unknown-linux-${LIBC}
+	exit ;;
+    ppcle:Linux:*:*)
+	echo powerpcle-unknown-linux-${LIBC}
+	exit ;;
+    riscv32:Linux:*:* | riscv64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     s390:Linux:*:* | s390x:Linux:*:*)
-	echo ${UNAME_MACHINE}-ibm-linux
+	echo ${UNAME_MACHINE}-ibm-linux-${LIBC}
 	exit ;;
     sh64*:Linux:*:*)
-    	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     sh*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     sparc:Linux:*:* | sparc64:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
+    tile*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     vax:Linux:*:*)
-	echo ${UNAME_MACHINE}-dec-linux-gnu
+	echo ${UNAME_MACHINE}-dec-linux-${LIBC}
 	exit ;;
     x86_64:Linux:*:*)
-	echo x86_64-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-pc-linux-${LIBC}
+	exit ;;
+    xtensa*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
-    i*86:Linux:*:*)
-	# The BFD linker knows what the default object file format is, so
-	# first see if it will tell us. cd to the root directory to prevent
-	# problems with other programs or directories called `ld' in the path.
-	# Set LC_ALL=C to ensure ld outputs messages in English.
-	ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
-			 | sed -ne '/supported targets:/!d
-				    s/[ 	][ 	]*/ /g
-				    s/.*supported targets: *//
-				    s/ .*//
-				    p'`
-        case "$ld_supported_targets" in
-	  elf32-i386)
-		TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
-		;;
-	  a.out-i386-linux)
-		echo "${UNAME_MACHINE}-pc-linux-gnuaout"
-		exit ;;
-	  coff-i386)
-		echo "${UNAME_MACHINE}-pc-linux-gnucoff"
-		exit ;;
-	  "")
-		# Either a pre-BFD a.out linker (linux-gnuoldld) or
-		# one that does not give us useful --help.
-		echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
-		exit ;;
-	esac
-	# Determine whether the default compiler is a.out or elf
-	eval $set_cc_for_build
-	sed 's/^	//' << EOF >$dummy.c
-	#include <features.h>
-	#ifdef __ELF__
-	# ifdef __GLIBC__
-	#  if __GLIBC__ >= 2
-	LIBC=gnu
-	#  else
-	LIBC=gnulibc1
-	#  endif
-	# else
-	LIBC=gnulibc1
-	# endif
-	#else
-	#if defined(__INTEL_COMPILER) || defined(__PGI)
-	LIBC=gnu
-	#else
-	LIBC=gnuaout
-	#endif
-	#endif
-	#ifdef __dietlibc__
-	LIBC=dietlibc
-	#endif
-EOF
-	eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '/^LIBC/{s: ::g;p;}'`"
-	test x"${LIBC}" != x && {
-		echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
-		exit
-	}
-	test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; }
-	;;
     i*86:DYNIX/ptx:4*:*)
 	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
 	# earlier versions are messed up and put the nodename in both
@@ -991,11 +1070,11 @@ EOF
 	echo i386-sequent-sysv4
 	exit ;;
     i*86:UNIX_SV:4.2MP:2.*)
-        # Unixware is an offshoot of SVR4, but it has its own version
-        # number series starting with 2...
-        # I am not positive that other SVR4 systems won't match this,
+	# Unixware is an offshoot of SVR4, but it has its own version
+	# number series starting with 2...
+	# I am not positive that other SVR4 systems won't match this,
 	# I just have to hope.  -- rms.
-        # Use sysv4.2uw... so that sysv4* matches it.
+	# Use sysv4.2uw... so that sysv4* matches it.
 	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
 	exit ;;
     i*86:OS/2:*:*)
@@ -1012,7 +1091,7 @@ EOF
     i*86:syllable:*:*)
 	echo ${UNAME_MACHINE}-pc-syllable
 	exit ;;
-    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
+    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
 	echo i386-unknown-lynxos${UNAME_RELEASE}
 	exit ;;
     i*86:*DOS:*:*)
@@ -1027,7 +1106,7 @@ EOF
 	fi
 	exit ;;
     i*86:*:5:[678]*)
-    	# UnixWare 7.x, OpenUNIX and OpenServer 6.
+	# UnixWare 7.x, OpenUNIX and OpenServer 6.
 	case `/bin/uname -X | grep "^Machine"` in
 	    *486*)	     UNAME_MACHINE=i486 ;;
 	    *Pentium)	     UNAME_MACHINE=i586 ;;
@@ -1055,10 +1134,13 @@ EOF
 	exit ;;
     pc:*:*:*)
 	# Left here for compatibility:
-        # uname -m prints for DJGPP always 'pc', but it prints nothing about
-        # the processor, so we play safe by assuming i386.
-	echo i386-pc-msdosdjgpp
-        exit ;;
+	# uname -m prints for DJGPP always 'pc', but it prints nothing about
+	# the processor, so we play safe by assuming i586.
+	# Note: whatever this is, it MUST be the same as what config.sub
+	# prints for the "djgpp" host, or else GDB configure will decide that
+	# this is a cross-build.
+	echo i586-pc-msdosdjgpp
+	exit ;;
     Intel:Mach:3*:*)
 	echo i386-pc-mach3
 	exit ;;
@@ -1093,8 +1175,18 @@ EOF
 	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
 	  && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
     3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
-        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-          && { echo i486-ncr-sysv4; exit; } ;;
+	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+	  && { echo i486-ncr-sysv4; exit; } ;;
+    NCR*:*:4.2:* | MPRAS*:*:4.2:*)
+	OS_REL='.3'
+	test -r /etc/.relid \
+	    && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+	    && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+	    && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
+	/bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
+	    && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
     m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
 	echo m68k-unknown-lynxos${UNAME_RELEASE}
 	exit ;;
@@ -1107,7 +1199,7 @@ EOF
     rs6000:LynxOS:2.*:*)
 	echo rs6000-unknown-lynxos${UNAME_RELEASE}
 	exit ;;
-    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
+    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
 	echo powerpc-unknown-lynxos${UNAME_RELEASE}
 	exit ;;
     SM[BE]S:UNIX_SV:*:*)
@@ -1127,10 +1219,10 @@ EOF
 		echo ns32k-sni-sysv
 	fi
 	exit ;;
-    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
-                      # says <Richard.M.Bartel at ccMail.Census.GOV>
-        echo i586-unisys-sysv4
-        exit ;;
+    PENTIUM:*:4.0*:*)	# Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+			# says <Richard.M.Bartel at ccMail.Census.GOV>
+	echo i586-unisys-sysv4
+	exit ;;
     *:UNIX_System_V:4*:FTX*)
 	# From Gerald Hewes <hewes at openmarket.com>.
 	# How about differentiating between stratus architectures? -djm
@@ -1156,11 +1248,11 @@ EOF
 	exit ;;
     R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
 	if [ -d /usr/nec ]; then
-	        echo mips-nec-sysv${UNAME_RELEASE}
+		echo mips-nec-sysv${UNAME_RELEASE}
 	else
-	        echo mips-unknown-sysv${UNAME_RELEASE}
+		echo mips-unknown-sysv${UNAME_RELEASE}
 	fi
-        exit ;;
+	exit ;;
     BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
 	echo powerpc-be-beos
 	exit ;;
@@ -1170,6 +1262,12 @@ EOF
     BePC:BeOS:*:*)	# BeOS running on Intel PC compatible.
 	echo i586-pc-beos
 	exit ;;
+    BePC:Haiku:*:*)	# Haiku running on Intel PC compatible.
+	echo i586-pc-haiku
+	exit ;;
+    x86_64:Haiku:*:*)
+	echo x86_64-unknown-haiku
+	exit ;;
     SX-4:SUPER-UX:*:*)
 	echo sx4-nec-superux${UNAME_RELEASE}
 	exit ;;
@@ -1179,6 +1277,18 @@ EOF
     SX-6:SUPER-UX:*:*)
 	echo sx6-nec-superux${UNAME_RELEASE}
 	exit ;;
+    SX-7:SUPER-UX:*:*)
+	echo sx7-nec-superux${UNAME_RELEASE}
+	exit ;;
+    SX-8:SUPER-UX:*:*)
+	echo sx8-nec-superux${UNAME_RELEASE}
+	exit ;;
+    SX-8R:SUPER-UX:*:*)
+	echo sx8r-nec-superux${UNAME_RELEASE}
+	exit ;;
+    SX-ACE:SUPER-UX:*:*)
+	echo sxace-nec-superux${UNAME_RELEASE}
+	exit ;;
     Power*:Rhapsody:*:*)
 	echo powerpc-apple-rhapsody${UNAME_RELEASE}
 	exit ;;
@@ -1187,14 +1297,36 @@ EOF
 	exit ;;
     *:Darwin:*:*)
 	UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
-	case $UNAME_PROCESSOR in
-	    unknown) UNAME_PROCESSOR=powerpc ;;
-	esac
+	eval $set_cc_for_build
+	if test "$UNAME_PROCESSOR" = unknown ; then
+	    UNAME_PROCESSOR=powerpc
+	fi
+	if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then
+	    if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
+		if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+		    (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+		    grep IS_64BIT_ARCH >/dev/null
+		then
+		    case $UNAME_PROCESSOR in
+			i386) UNAME_PROCESSOR=x86_64 ;;
+			powerpc) UNAME_PROCESSOR=powerpc64 ;;
+		    esac
+		fi
+	    fi
+	elif test "$UNAME_PROCESSOR" = i386 ; then
+	    # Avoid executing cc on OS X 10.9, as it ships with a stub
+	    # that puts up a graphical alert prompting to install
+	    # developer tools.  Any system running Mac OS X 10.7 or
+	    # later (Darwin 11 and later) is required to have a 64-bit
+	    # processor. This is not true of the ARM version of Darwin
+	    # that Apple uses in portable devices.
+	    UNAME_PROCESSOR=x86_64
+	fi
 	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
 	exit ;;
     *:procnto*:*:* | *:QNX:[0123456789]*:*)
 	UNAME_PROCESSOR=`uname -p`
-	if test "$UNAME_PROCESSOR" = "x86"; then
+	if test "$UNAME_PROCESSOR" = x86; then
 		UNAME_PROCESSOR=i386
 		UNAME_MACHINE=pc
 	fi
@@ -1203,12 +1335,18 @@ EOF
     *:QNX:*:4*)
 	echo i386-pc-qnx
 	exit ;;
-    NSE-?:NONSTOP_KERNEL:*:*)
+    NEO-?:NONSTOP_KERNEL:*:*)
+	echo neo-tandem-nsk${UNAME_RELEASE}
+	exit ;;
+    NSE-*:NONSTOP_KERNEL:*:*)
 	echo nse-tandem-nsk${UNAME_RELEASE}
 	exit ;;
     NSR-?:NONSTOP_KERNEL:*:*)
 	echo nsr-tandem-nsk${UNAME_RELEASE}
 	exit ;;
+    NSX-?:NONSTOP_KERNEL:*:*)
+	echo nsx-tandem-nsk${UNAME_RELEASE}
+	exit ;;
     *:NonStop-UX:*:*)
 	echo mips-compaq-nonstopux
 	exit ;;
@@ -1222,7 +1360,7 @@ EOF
 	# "uname -m" is not consistent, so use $cputype instead. 386
 	# is converted to i386 for consistency with other x86
 	# operating systems.
-	if test "$cputype" = "386"; then
+	if test "$cputype" = 386; then
 	    UNAME_MACHINE=i386
 	else
 	    UNAME_MACHINE="$cputype"
@@ -1248,13 +1386,13 @@ EOF
 	echo pdp10-unknown-its
 	exit ;;
     SEI:*:*:SEIUX)
-        echo mips-sei-seiux${UNAME_RELEASE}
+	echo mips-sei-seiux${UNAME_RELEASE}
 	exit ;;
     *:DragonFly:*:*)
 	echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
 	exit ;;
     *:*VMS:*:*)
-    	UNAME_MACHINE=`(uname -p) 2>/dev/null`
+	UNAME_MACHINE=`(uname -p) 2>/dev/null`
 	case "${UNAME_MACHINE}" in
 	    A*) echo alpha-dec-vms ; exit ;;
 	    I*) echo ia64-dec-vms ; exit ;;
@@ -1264,179 +1402,36 @@ EOF
 	echo i386-pc-xenix
 	exit ;;
     i*86:skyos:*:*)
-	echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
+	echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE} | sed -e 's/ .*$//'`
 	exit ;;
     i*86:rdos:*:*)
 	echo ${UNAME_MACHINE}-pc-rdos
 	exit ;;
-esac
-
-#echo '(No uname command or uname output not recognized.)' 1>&2
-#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
-
-eval $set_cc_for_build
-cat >$dummy.c <<EOF
-#ifdef _SEQUENT_
-# include <sys/types.h>
-# include <sys/utsname.h>
-#endif
-main ()
-{
-#if defined (sony)
-#if defined (MIPSEB)
-  /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
-     I don't know....  */
-  printf ("mips-sony-bsd\n"); exit (0);
-#else
-#include <sys/param.h>
-  printf ("m68k-sony-newsos%s\n",
-#ifdef NEWSOS4
-          "4"
-#else
-	  ""
-#endif
-         ); exit (0);
-#endif
-#endif
-
-#if defined (__arm) && defined (__acorn) && defined (__unix)
-  printf ("arm-acorn-riscix\n"); exit (0);
-#endif
-
-#if defined (hp300) && !defined (hpux)
-  printf ("m68k-hp-bsd\n"); exit (0);
-#endif
-
-#if defined (NeXT)
-#if !defined (__ARCHITECTURE__)
-#define __ARCHITECTURE__ "m68k"
-#endif
-  int version;
-  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
-  if (version < 4)
-    printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
-  else
-    printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
-  exit (0);
-#endif
-
-#if defined (MULTIMAX) || defined (n16)
-#if defined (UMAXV)
-  printf ("ns32k-encore-sysv\n"); exit (0);
-#else
-#if defined (CMU)
-  printf ("ns32k-encore-mach\n"); exit (0);
-#else
-  printf ("ns32k-encore-bsd\n"); exit (0);
-#endif
-#endif
-#endif
-
-#if defined (__386BSD__)
-  printf ("i386-pc-bsd\n"); exit (0);
-#endif
-
-#if defined (sequent)
-#if defined (i386)
-  printf ("i386-sequent-dynix\n"); exit (0);
-#endif
-#if defined (ns32000)
-  printf ("ns32k-sequent-dynix\n"); exit (0);
-#endif
-#endif
-
-#if defined (_SEQUENT_)
-    struct utsname un;
-
-    uname(&un);
-
-    if (strncmp(un.version, "V2", 2) == 0) {
-	printf ("i386-sequent-ptx2\n"); exit (0);
-    }
-    if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
-	printf ("i386-sequent-ptx1\n"); exit (0);
-    }
-    printf ("i386-sequent-ptx\n"); exit (0);
-
-#endif
-
-#if defined (vax)
-# if !defined (ultrix)
-#  include <sys/param.h>
-#  if defined (BSD)
-#   if BSD == 43
-      printf ("vax-dec-bsd4.3\n"); exit (0);
-#   else
-#    if BSD == 199006
-      printf ("vax-dec-bsd4.3reno\n"); exit (0);
-#    else
-      printf ("vax-dec-bsd\n"); exit (0);
-#    endif
-#   endif
-#  else
-    printf ("vax-dec-bsd\n"); exit (0);
-#  endif
-# else
-    printf ("vax-dec-ultrix\n"); exit (0);
-# endif
-#endif
-
-#if defined (alliant) && defined (i860)
-  printf ("i860-alliant-bsd\n"); exit (0);
-#endif
-
-  exit (1);
-}
-EOF
-
-$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
-	{ echo "$SYSTEM_NAME"; exit; }
-
-# Apollos put the system type in the environment.
-
-test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
-
-# Convex versions that predate uname can use getsysinfo(1)
-
-if [ -x /usr/convex/getsysinfo ]
-then
-    case `getsysinfo -f cpu_type` in
-    c1*)
-	echo c1-convex-bsd
+    i*86:AROS:*:*)
+	echo ${UNAME_MACHINE}-pc-aros
 	exit ;;
-    c2*)
-	if getsysinfo -f scalar_acc
-	then echo c32-convex-bsd
-	else echo c2-convex-bsd
-	fi
+    x86_64:VMkernel:*:*)
+	echo ${UNAME_MACHINE}-unknown-esx
 	exit ;;
-    c34*)
-	echo c34-convex-bsd
+    amd64:Isilon\ OneFS:*:*)
+	echo x86_64-unknown-onefs
 	exit ;;
-    c38*)
-	echo c38-convex-bsd
-	exit ;;
-    c4*)
-	echo c4-convex-bsd
-	exit ;;
-    esac
-fi
+esac
 
 cat >&2 <<EOF
 $0: unable to guess system type
 
-This script, last modified $timestamp, has failed to recognize
-the operating system you are using. It is advised that you
-download the most up to date version of the config scripts from
+This script (version $timestamp), has failed to recognize the
+operating system you are using. If your script is old, overwrite
+config.guess and config.sub with the latest versions from:
 
-  http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.guess
+  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
 and
-  http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.sub
+  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
 
-If the version you run ($0) is already up to date, please
-send the following data and any information you think might be
-pertinent to <config-patches at gnu.org> in order to provide the needed
-information to handle your system.
+If $0 has already been updated, send the following data and any
+information you think might be pertinent to config-patches at gnu.org to
+provide the necessary information to handle your system.
 
 config.guess timestamp = $timestamp
 
diff --git a/config/config.sub b/config/config.sub
index 2851647..40ea5df 100755
--- a/config/config.sub
+++ b/config/config.sub
@@ -1,43 +1,40 @@
 #! /bin/sh
 # Configuration validation subroutine script.
-#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+#   Copyright 1992-2017 Free Software Foundation, Inc.
 
-timestamp='2005-12-11'
+timestamp='2017-04-02'
 
-# This file is (in principle) common to ALL GNU software.
-# The presence of a machine in this file suggests that SOME GNU software
-# can handle that machine.  It does not imply ALL GNU software can.
-#
-# This file is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
 # (at your option) any later version.
 #
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
 #
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
 # configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
+# the same distribution terms that you use for the rest of that
+# program.  This Exception is an additional permission under section 7
+# of the GNU General Public License, version 3 ("GPLv3").
 
 
-# Please send patches to <config-patches at gnu.org>.  Submit a context
-# diff and a properly formatted ChangeLog entry.
+# Please send patches to <config-patches at gnu.org>.
 #
 # Configuration subroutine to validate and canonicalize a configuration type.
 # Supply the specified configuration type as an argument.
 # If it is invalid, we print an error message on stderr and exit with code 1.
 # Otherwise, we print the canonical config type on stdout and succeed.
 
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
+
 # This file is supposed to be the same for all GNU packages
 # and recognize all the CPU types, system types and aliases
 # that are meaningful with *any* GNU software.
@@ -56,8 +53,7 @@ timestamp='2005-12-11'
 me=`echo "$0" | sed -e 's,.*/,,'`
 
 usage="\
-Usage: $0 [OPTION] CPU-MFR-OPSYS
-       $0 [OPTION] ALIAS
+Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS
 
 Canonicalize a configuration name.
 
@@ -71,8 +67,7 @@ Report bugs and patches to <config-patches at gnu.org>."
 version="\
 GNU config.sub ($timestamp)
 
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
-Free Software Foundation, Inc.
+Copyright 1992-2017 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -119,12 +114,18 @@ esac
 # Here we must recognize all the valid KERNEL-OS combinations.
 maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
 case $maybe_os in
-  nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
-  uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
+  nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
+  linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
+  knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \
+  kopensolaris*-gnu* | cloudabi*-eabi* | \
   storm-chaos* | os2-emx* | rtmk-nova*)
     os=-$maybe_os
     basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
     ;;
+  android-linux)
+    os=-linux-android
+    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
+    ;;
   *)
     basic_machine=`echo $1 | sed 's/-[^-]*$//'`
     if [ $basic_machine != $1 ]
@@ -147,10 +148,13 @@ case $os in
 	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
 	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
 	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
-	-apple | -axis | -knuth | -cray)
+	-apple | -axis | -knuth | -cray | -microblaze*)
 		os=
 		basic_machine=$1
 		;;
+	-bluegene*)
+		os=-cnk
+		;;
 	-sim | -cisco | -oki | -wec | -winbond)
 		os=
 		basic_machine=$1
@@ -165,10 +169,10 @@ case $os in
 		os=-chorusos
 		basic_machine=$1
 		;;
- 	-chorusrdb)
- 		os=-chorusrdb
+	-chorusrdb)
+		os=-chorusrdb
 		basic_machine=$1
- 		;;
+		;;
 	-hiux*)
 		os=-hiuxwe2
 		;;
@@ -213,6 +217,12 @@ case $os in
 	-isc*)
 		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
 		;;
+	-lynx*178)
+		os=-lynxos178
+		;;
+	-lynx*5)
+		os=-lynxos5
+		;;
 	-lynx*)
 		os=-lynxos
 		;;
@@ -237,59 +247,93 @@ case $basic_machine in
 	# Some are omitted here because they have special meanings below.
 	1750a | 580 \
 	| a29k \
+	| aarch64 | aarch64_be \
 	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
 	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
 	| am33_2.0 \
-	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
+	| arc | arceb \
+	| arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
+	| avr | avr32 \
+	| ba \
+	| be32 | be64 \
 	| bfin \
-	| c4x | clipper \
+	| c4x | c8051 | clipper \
 	| d10v | d30v | dlx | dsp16xx \
-	| fr30 | frv \
+	| e2k | epiphany \
+	| fido | fr30 | frv | ft32 \
 	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
-	| i370 | i860 | i960 | ia64 \
+	| hexagon \
+	| i370 | i860 | i960 | ia16 | ia64 \
 	| ip2k | iq2000 \
-	| m32r | m32rle | m68000 | m68k | m88k | maxq | mcore \
+	| k1om \
+	| le32 | le64 \
+	| lm32 \
+	| m32c | m32r | m32rle | m68000 | m68k | m88k \
+	| maxq | mb | microblaze | microblazeel | mcore | mep | metag \
 	| mips | mipsbe | mipseb | mipsel | mipsle \
 	| mips16 \
 	| mips64 | mips64el \
-	| mips64vr | mips64vrel \
+	| mips64octeon | mips64octeonel \
 	| mips64orion | mips64orionel \
+	| mips64r5900 | mips64r5900el \
+	| mips64vr | mips64vrel \
 	| mips64vr4100 | mips64vr4100el \
 	| mips64vr4300 | mips64vr4300el \
 	| mips64vr5000 | mips64vr5000el \
 	| mips64vr5900 | mips64vr5900el \
 	| mipsisa32 | mipsisa32el \
 	| mipsisa32r2 | mipsisa32r2el \
+	| mipsisa32r6 | mipsisa32r6el \
 	| mipsisa64 | mipsisa64el \
 	| mipsisa64r2 | mipsisa64r2el \
+	| mipsisa64r6 | mipsisa64r6el \
 	| mipsisa64sb1 | mipsisa64sb1el \
 	| mipsisa64sr71k | mipsisa64sr71kel \
+	| mipsr5900 | mipsr5900el \
 	| mipstx39 | mipstx39el \
 	| mn10200 | mn10300 \
+	| moxie \
 	| mt \
 	| msp430 \
+	| nds32 | nds32le | nds32be \
+	| nios | nios2 | nios2eb | nios2el \
 	| ns16k | ns32k \
-	| or32 \
+	| open8 | or1k | or1knd | or32 \
 	| pdp10 | pdp11 | pj | pjl \
-	| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+	| powerpc | powerpc64 | powerpc64le | powerpcle \
+	| pru \
 	| pyramid \
-	| sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
+	| riscv32 | riscv64 \
+	| rl78 | rx \
+	| score \
+	| sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
 	| sh64 | sh64le \
-	| sparc | sparc64 | sparc64b | sparc86x | sparclet | sparclite \
-	| sparcv8 | sparcv9 | sparcv9b \
-	| strongarm \
-	| tahoe | thumb | tic4x | tic80 | tron \
-	| v850 | v850e \
+	| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
+	| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
+	| spu \
+	| tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
+	| ubicom32 \
+	| v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
+	| visium \
+	| wasm32 \
 	| we32k \
-	| x86 | xscale | xscalee[bl] | xstormy16 | xtensa \
-	| z8k)
+	| x86 | xc16x | xstormy16 | xtensa \
+	| z8k | z80)
 		basic_machine=$basic_machine-unknown
 		;;
-	m32c)
-		basic_machine=$basic_machine-unknown
+	c54x)
+		basic_machine=tic54x-unknown
+		;;
+	c55x)
+		basic_machine=tic55x-unknown
+		;;
+	c6x)
+		basic_machine=tic6x-unknown
 		;;
-	m6811 | m68hc11 | m6812 | m68hc12)
-		# Motorola 68HC11/12.
+	leon|leon[3-9])
+		basic_machine=sparc-$basic_machine
+		;;
+	m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip)
 		basic_machine=$basic_machine-unknown
 		os=-none
 		;;
@@ -299,6 +343,21 @@ case $basic_machine in
 		basic_machine=mt-unknown
 		;;
 
+	strongarm | thumb | xscale)
+		basic_machine=arm-unknown
+		;;
+	xgate)
+		basic_machine=$basic_machine-unknown
+		os=-none
+		;;
+	xscaleeb)
+		basic_machine=armeb-unknown
+		;;
+
+	xscaleel)
+		basic_machine=armel-unknown
+		;;
+
 	# We use `pc' rather than `unknown'
 	# because (1) that's what they normally are, and
 	# (2) the word "unknown" tends to confuse beginning users.
@@ -313,65 +372,91 @@ case $basic_machine in
 	# Recognize the basic CPU types with company name.
 	580-* \
 	| a29k-* \
+	| aarch64-* | aarch64_be-* \
 	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
 	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
-	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
 	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
-	| avr-* \
+	| avr-* | avr32-* \
+	| ba-* \
+	| be32-* | be64-* \
 	| bfin-* | bs2000-* \
-	| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
-	| clipper-* | craynv-* | cydra-* \
+	| c[123]* | c30-* | [cjt]90-* | c4x-* \
+	| c8051-* | clipper-* | craynv-* | cydra-* \
 	| d10v-* | d30v-* | dlx-* \
-	| elxsi-* \
-	| f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
+	| e2k-* | elxsi-* \
+	| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
 	| h8300-* | h8500-* \
 	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
-	| i*86-* | i860-* | i960-* | ia64-* \
+	| hexagon-* \
+	| i*86-* | i860-* | i960-* | ia16-* | ia64-* \
 	| ip2k-* | iq2000-* \
-	| m32r-* | m32rle-* \
+	| k1om-* \
+	| le32-* | le64-* \
+	| lm32-* \
+	| m32c-* | m32r-* | m32rle-* \
 	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
-	| m88110-* | m88k-* | maxq-* | mcore-* \
+	| m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
+	| microblaze-* | microblazeel-* \
 	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
 	| mips16-* \
 	| mips64-* | mips64el-* \
-	| mips64vr-* | mips64vrel-* \
+	| mips64octeon-* | mips64octeonel-* \
 	| mips64orion-* | mips64orionel-* \
+	| mips64r5900-* | mips64r5900el-* \
+	| mips64vr-* | mips64vrel-* \
 	| mips64vr4100-* | mips64vr4100el-* \
 	| mips64vr4300-* | mips64vr4300el-* \
 	| mips64vr5000-* | mips64vr5000el-* \
 	| mips64vr5900-* | mips64vr5900el-* \
 	| mipsisa32-* | mipsisa32el-* \
 	| mipsisa32r2-* | mipsisa32r2el-* \
+	| mipsisa32r6-* | mipsisa32r6el-* \
 	| mipsisa64-* | mipsisa64el-* \
 	| mipsisa64r2-* | mipsisa64r2el-* \
+	| mipsisa64r6-* | mipsisa64r6el-* \
 	| mipsisa64sb1-* | mipsisa64sb1el-* \
 	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
+	| mipsr5900-* | mipsr5900el-* \
 	| mipstx39-* | mipstx39el-* \
 	| mmix-* \
 	| mt-* \
 	| msp430-* \
+	| nds32-* | nds32le-* | nds32be-* \
+	| nios-* | nios2-* | nios2eb-* | nios2el-* \
 	| none-* | np1-* | ns16k-* | ns32k-* \
+	| open8-* \
+	| or1k*-* \
 	| orion-* \
 	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
-	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
+	| pru-* \
 	| pyramid-* \
-	| romp-* | rs6000-* \
-	| sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | shbe-* \
+	| riscv32-* | riscv64-* \
+	| rl78-* | romp-* | rs6000-* | rx-* \
+	| sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
 	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
-	| sparc-* | sparc64-* | sparc64b-* | sparc86x-* | sparclet-* \
+	| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
 	| sparclite-* \
-	| sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
-	| tahoe-* | thumb-* \
+	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \
+	| tahoe-* \
 	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+	| tile*-* \
 	| tron-* \
-	| v850-* | v850e-* | vax-* \
+	| ubicom32-* \
+	| v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
+	| vax-* \
+	| visium-* \
+	| wasm32-* \
 	| we32k-* \
-	| x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \
-	| xstormy16-* | xtensa-* \
+	| x86-* | x86_64-* | xc16x-* | xps100-* \
+	| xstormy16-* | xtensa*-* \
 	| ymp-* \
-	| z8k-*)
+	| z8k-* | z80-*)
 		;;
-	m32c-*)
+	# Recognize the basic CPU types without company name, with glob match.
+	xtensa*)
+		basic_machine=$basic_machine-unknown
 		;;
 	# Recognize the various machine names and aliases which stand
 	# for a CPU type and a company and sometimes even an OS.
@@ -389,7 +474,7 @@ case $basic_machine in
 		basic_machine=a29k-amd
 		os=-udi
 		;;
-    	abacus)
+	abacus)
 		basic_machine=abacus-unknown
 		;;
 	adobe68k)
@@ -435,6 +520,13 @@ case $basic_machine in
 		basic_machine=m68k-apollo
 		os=-bsd
 		;;
+	aros)
+		basic_machine=i386-pc
+		os=-aros
+		;;
+	asmjs)
+		basic_machine=asmjs-unknown
+		;;
 	aux)
 		basic_machine=m68k-apple
 		os=-aux
@@ -443,10 +535,35 @@ case $basic_machine in
 		basic_machine=ns32k-sequent
 		os=-dynix
 		;;
+	blackfin)
+		basic_machine=bfin-unknown
+		os=-linux
+		;;
+	blackfin-*)
+		basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
+		os=-linux
+		;;
+	bluegene*)
+		basic_machine=powerpc-ibm
+		os=-cnk
+		;;
+	c54x-*)
+		basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	c55x-*)
+		basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	c6x-*)
+		basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
 	c90)
 		basic_machine=c90-cray
 		os=-unicos
 		;;
+	cegcc)
+		basic_machine=arm-unknown
+		os=-cegcc
+		;;
 	convex-c1)
 		basic_machine=c1-convex
 		os=-bsd
@@ -475,8 +592,8 @@ case $basic_machine in
 		basic_machine=craynv-cray
 		os=-unicosmp
 		;;
-	cr16c)
-		basic_machine=cr16c-unknown
+	cr16 | cr16-*)
+		basic_machine=cr16-unknown
 		os=-elf
 		;;
 	crds | unos)
@@ -514,6 +631,10 @@ case $basic_machine in
 		basic_machine=m88k-motorola
 		os=-sysv3
 		;;
+	dicos)
+		basic_machine=i686-pc
+		os=-dicos
+		;;
 	djgpp)
 		basic_machine=i586-pc
 		os=-msdosdjgpp
@@ -526,6 +647,14 @@ case $basic_machine in
 		basic_machine=m68k-bull
 		os=-sysv3
 		;;
+	e500v[12])
+		basic_machine=powerpc-unknown
+		os=$os"spe"
+		;;
+	e500v[12]-*)
+		basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+		os=$os"spe"
+		;;
 	ebmon29k)
 		basic_machine=a29k-amd
 		os=-ebmon
@@ -629,7 +758,6 @@ case $basic_machine in
 	i370-ibm* | ibm*)
 		basic_machine=i370-ibm
 		;;
-# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
 	i*86v32)
 		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
 		os=-sysv32
@@ -668,6 +796,17 @@ case $basic_machine in
 		basic_machine=m68k-isi
 		os=-sysv
 		;;
+	leon-*|leon[3-9]-*)
+		basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'`
+		;;
+	m68knommu)
+		basic_machine=m68k-unknown
+		os=-linux
+		;;
+	m68knommu-*)
+		basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
+		os=-linux
+		;;
 	m88k-omron*)
 		basic_machine=m88k-omron
 		;;
@@ -679,10 +818,21 @@ case $basic_machine in
 		basic_machine=ns32k-utek
 		os=-sysv
 		;;
+	microblaze*)
+		basic_machine=microblaze-xilinx
+		;;
+	mingw64)
+		basic_machine=x86_64-pc
+		os=-mingw64
+		;;
 	mingw32)
-		basic_machine=i386-pc
+		basic_machine=i686-pc
 		os=-mingw32
 		;;
+	mingw32ce)
+		basic_machine=arm-unknown
+		os=-mingw32ce
+		;;
 	miniframe)
 		basic_machine=m68000-convergent
 		;;
@@ -704,6 +854,10 @@ case $basic_machine in
 		basic_machine=powerpc-unknown
 		os=-morphos
 		;;
+	moxiebox)
+		basic_machine=moxie-unknown
+		os=-moxiebox
+		;;
 	msdos)
 		basic_machine=i386-pc
 		os=-msdos
@@ -711,10 +865,18 @@ case $basic_machine in
 	ms1-*)
 		basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
 		;;
+	msys)
+		basic_machine=i686-pc
+		os=-msys
+		;;
 	mvs)
 		basic_machine=i370-ibm
 		os=-mvs
 		;;
+	nacl)
+		basic_machine=le32-unknown
+		os=-nacl
+		;;
 	ncr3000)
 		basic_machine=i486-ncr
 		os=-sysv4
@@ -779,9 +941,18 @@ case $basic_machine in
 	np1)
 		basic_machine=np1-gould
 		;;
+	neo-tandem)
+		basic_machine=neo-tandem
+		;;
+	nse-tandem)
+		basic_machine=nse-tandem
+		;;
 	nsr-tandem)
 		basic_machine=nsr-tandem
 		;;
+	nsx-tandem)
+		basic_machine=nsx-tandem
+		;;
 	op50n-* | op60c-*)
 		basic_machine=hppa1.1-oki
 		os=-proelf
@@ -809,6 +980,14 @@ case $basic_machine in
 		basic_machine=i860-intel
 		os=-osf
 		;;
+	parisc)
+		basic_machine=hppa-unknown
+		os=-linux
+		;;
+	parisc-*)
+		basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
+		os=-linux
+		;;
 	pbd)
 		basic_machine=sparc-tti
 		;;
@@ -818,6 +997,12 @@ case $basic_machine in
 	pc532 | pc532-*)
 		basic_machine=ns32k-pc532
 		;;
+	pc98)
+		basic_machine=i386-pc
+		;;
+	pc98-*)
+		basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
 	pentium | p5 | k5 | k6 | nexgen | viac3)
 		basic_machine=i586-pc
 		;;
@@ -847,11 +1032,12 @@ case $basic_machine in
 		;;
 	power)	basic_machine=power-ibm
 		;;
-	ppc)	basic_machine=powerpc-unknown
+	ppc | ppcbe)	basic_machine=powerpc-unknown
 		;;
-	ppc-*)	basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+	ppc-* | ppcbe-*)
+		basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
 		;;
-	ppcle | powerpclittle | ppc-le | powerpc-little)
+	ppcle | powerpclittle)
 		basic_machine=powerpcle-unknown
 		;;
 	ppcle-* | powerpclittle-*)
@@ -861,7 +1047,7 @@ case $basic_machine in
 		;;
 	ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
 		;;
-	ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+	ppc64le | powerpc64little)
 		basic_machine=powerpc64le-unknown
 		;;
 	ppc64le-* | powerpc64little-*)
@@ -874,7 +1060,11 @@ case $basic_machine in
 		basic_machine=i586-unknown
 		os=-pw32
 		;;
-	rdos)
+	rdos | rdos64)
+		basic_machine=x86_64-pc
+		os=-rdos
+		;;
+	rdos32)
 		basic_machine=i386-pc
 		os=-rdos
 		;;
@@ -904,6 +1094,10 @@ case $basic_machine in
 	sb1el)
 		basic_machine=mipsisa64sb1el-unknown
 		;;
+	sde)
+		basic_machine=mipsisa32-sde
+		os=-elf
+		;;
 	sei)
 		basic_machine=mips-sei
 		os=-seiux
@@ -915,6 +1109,9 @@ case $basic_machine in
 		basic_machine=sh-hitachi
 		os=-hms
 		;;
+	sh5el)
+		basic_machine=sh5le-unknown
+		;;
 	sh64)
 		basic_machine=sh64-unknown
 		;;
@@ -936,6 +1133,9 @@ case $basic_machine in
 		basic_machine=i860-stratus
 		os=-sysv4
 		;;
+	strongarm-* | thumb-*)
+		basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
 	sun2)
 		basic_machine=m68000-sun
 		;;
@@ -992,17 +1192,9 @@ case $basic_machine in
 		basic_machine=t90-cray
 		os=-unicos
 		;;
-	tic54x | c54x*)
-		basic_machine=tic54x-unknown
-		os=-coff
-		;;
-	tic55x | c55x*)
-		basic_machine=tic55x-unknown
-		os=-coff
-		;;
-	tic6x | c6x*)
-		basic_machine=tic6x-unknown
-		os=-coff
+	tile*)
+		basic_machine=$basic_machine-unknown
+		os=-linux-gnu
 		;;
 	tx39)
 		basic_machine=mipstx39-unknown
@@ -1056,6 +1248,9 @@ case $basic_machine in
 		basic_machine=a29k-wrs
 		os=-vxworks
 		;;
+	wasm32)
+		basic_machine=wasm32-unknown
+		;;
 	w65*)
 		basic_machine=w65-wdc
 		os=-none
@@ -1071,6 +1266,9 @@ case $basic_machine in
 	xps | xps100)
 		basic_machine=xps100-honeywell
 		;;
+	xscale-* | xscalee[bl]-*)
+		basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'`
+		;;
 	ymp)
 		basic_machine=ymp-cray
 		os=-unicos
@@ -1079,6 +1277,10 @@ case $basic_machine in
 		basic_machine=z8k-unknown
 		os=-sim
 		;;
+	z80-*-coff)
+		basic_machine=z80-unknown
+		os=-sim
+		;;
 	none)
 		basic_machine=none-none
 		os=-none
@@ -1117,10 +1319,10 @@ case $basic_machine in
 	we32k)
 		basic_machine=we32k-att
 		;;
-	sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele)
+	sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
 		basic_machine=sh-unknown
 		;;
-	sparc | sparcv8 | sparcv9 | sparcv9b)
+	sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
 		basic_machine=sparc-sun
 		;;
 	cydra)
@@ -1164,9 +1366,12 @@ esac
 if [ x"$os" != x"" ]
 then
 case $os in
-        # First match some system type aliases
-        # that might get confused with valid system types.
+	# First match some system type aliases
+	# that might get confused with valid system types.
 	# -solaris* is a basic system type, with this one exception.
+	-auroraux)
+		os=-auroraux
+		;;
 	-solaris1 | -solaris1.*)
 		os=`echo $os | sed -e 's|solaris1|sunos4|'`
 		;;
@@ -1187,28 +1392,32 @@ case $os in
 	# Each alternative MUST END IN A *, to match a version number.
 	# -sysv* is not here because it comes later, after sysvr4.
 	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
-	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
-	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
+	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
+	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
+	      | -sym* | -kopensolaris* | -plan9* \
 	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
-	      | -aos* \
+	      | -aos* | -aros* | -cloudabi* | -sortix* \
 	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
 	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
-	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \
+	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
+	      | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \
 	      | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
 	      | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
 	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
 	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
-	      | -chorusos* | -chorusrdb* \
-	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
-	      | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
-	      | -uxpv* | -beos* | -mpeix* | -udk* \
+	      | -chorusos* | -chorusrdb* | -cegcc* | -glidix* \
+	      | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+	      | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
+	      | -linux-newlib* | -linux-musl* | -linux-uclibc* \
+	      | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \
 	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
 	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
 	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
 	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
 	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
 	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
-	      | -skyos* | -haiku* | -rdos*)
+	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \
+	      | -onefs* | -tirtos* | -phoenix* | -fuchsia* | -redox*)
 	# Remember, each alternative MUST END IN *, to match a version number.
 		;;
 	-qnx*)
@@ -1247,7 +1456,7 @@ case $os in
 	-opened*)
 		os=-openedition
 		;;
-        -os400*)
+	-os400*)
 		os=-os400
 		;;
 	-wince*)
@@ -1296,7 +1505,7 @@ case $os in
 	-sinix*)
 		os=-sysv4
 		;;
-        -tpf*)
+	-tpf*)
 		os=-tpf
 		;;
 	-triton*)
@@ -1332,12 +1541,16 @@ case $os in
 	-aros*)
 		os=-aros
 		;;
-	-kaos*)
-		os=-kaos
-		;;
 	-zvmoe)
 		os=-zvmoe
 		;;
+	-dicos*)
+		os=-dicos
+		;;
+	-nacl*)
+		;;
+	-ios)
+		;;
 	-none)
 		;;
 	*)
@@ -1360,6 +1573,12 @@ else
 # system, and we'll never get to this point.
 
 case $basic_machine in
+	score-*)
+		os=-elf
+		;;
+	spu-*)
+		os=-elf
+		;;
 	*-acorn)
 		os=-riscix1.2
 		;;
@@ -1369,9 +1588,24 @@ case $basic_machine in
 	arm*-semi)
 		os=-aout
 		;;
-    c4x-* | tic4x-*)
-        os=-coff
-        ;;
+	c4x-* | tic4x-*)
+		os=-coff
+		;;
+	c8051-*)
+		os=-elf
+		;;
+	hexagon-*)
+		os=-elf
+		;;
+	tic54x-*)
+		os=-coff
+		;;
+	tic55x-*)
+		os=-coff
+		;;
+	tic6x-*)
+		os=-coff
+		;;
 	# This must come before the *-dec entry.
 	pdp10-*)
 		os=-tops20
@@ -1390,13 +1624,13 @@ case $basic_machine in
 		;;
 	m68000-sun)
 		os=-sunos3
-		# This also exists in the configure program, but was not the
-		# default.
-		# os=-sunos4
 		;;
 	m68*-cisco)
 		os=-aout
 		;;
+	mep-*)
+		os=-elf
+		;;
 	mips*-cisco)
 		os=-elf
 		;;
@@ -1412,6 +1646,9 @@ case $basic_machine in
 	sparc-* | *-sun)
 		os=-sunos4.1.1
 		;;
+	pru-*)
+		os=-elf
+		;;
 	*-be)
 		os=-beos
 		;;
@@ -1421,7 +1658,7 @@ case $basic_machine in
 	*-ibm)
 		os=-aix
 		;;
-    	*-knuth)
+	*-knuth)
 		os=-mmixware
 		;;
 	*-wec)
@@ -1526,7 +1763,7 @@ case $basic_machine in
 			-sunos*)
 				vendor=sun
 				;;
-			-aix*)
+			-cnk*|-aix*)
 				vendor=ibm
 				;;
 			-beos*)
diff --git a/config/libtool.m4 b/config/libtool.m4
index a3bc337..10ab284 100644
--- a/config/libtool.m4
+++ b/config/libtool.m4
@@ -2887,6 +2887,18 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
   dynamic_linker='GNU/Linux ld.so'
   ;;
 
+netbsdelf*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='NetBSD ld.elf_so'
+  ;;
+
 netbsd*)
   version_type=sunos
   need_lib_prefix=no
@@ -3546,7 +3558,7 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
-netbsd*)
+netbsd* | netbsdelf*-gnu)
   if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
     lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
   else
@@ -4424,7 +4436,7 @@ m4_if([$1], [CXX], [
 	    ;;
 	esac
 	;;
-      netbsd*)
+      netbsd* | netbsdelf*-gnu)
 	;;
       *qnx* | *nto*)
         # QNX uses GNU C++, but need to define -shared option too, otherwise
@@ -4936,6 +4948,9 @@ m4_if([$1], [CXX], [
       ;;
     esac
     ;;
+  linux* | k*bsd*-gnu | gnu*)
+    _LT_TAGVAR(link_all_deplibs, $1)=no
+    ;;
   *)
     _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
     ;;
@@ -4998,6 +5013,9 @@ dnl Note also adjust exclude_expsyms for C++ above.
   openbsd* | bitrig*)
     with_gnu_ld=no
     ;;
+  linux* | k*bsd*-gnu | gnu*)
+    _LT_TAGVAR(link_all_deplibs, $1)=no
+    ;;
   esac
 
   _LT_TAGVAR(ld_shlibs, $1)=yes
@@ -5252,7 +5270,7 @@ _LT_EOF
       fi
       ;;
 
-    netbsd*)
+    netbsd* | netbsdelf*-gnu)
       if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
 	_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
 	wlarc=
@@ -5773,6 +5791,7 @@ _LT_EOF
 	if test yes = "$lt_cv_irix_exported_symbol"; then
           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib'
 	fi
+	_LT_TAGVAR(link_all_deplibs, $1)=no
       else
 	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
 	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib'
@@ -5794,7 +5813,7 @@ _LT_EOF
       esac
       ;;
 
-    netbsd*)
+    netbsd* | netbsdelf*-gnu)
       if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
 	_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
       else
diff --git a/config/ltmain.sh b/config/ltmain.sh
index 0f0a2da..147d758 100644
--- a/config/ltmain.sh
+++ b/config/ltmain.sh
@@ -31,7 +31,7 @@
 
 PROGRAM=libtool
 PACKAGE=libtool
-VERSION=2.4.6
+VERSION="2.4.6 Debian-2.4.6-0.1"
 package_revision=2.4.6
 
 
@@ -2073,7 +2073,7 @@ include the following information:
        autoconf:       `($AUTOCONF --version) 2>/dev/null |$SED 1q`
 
 Report bugs to <bug-libtool at gnu.org>.
-GNU libtool home page: <http://www.gnu.org/software/libtool/>.
+GNU libtool home page: <http://www.gnu.org/s/libtool/>.
 General help using GNU software: <http://www.gnu.org/gethelp/>."
     exit 0
 }
@@ -7272,10 +7272,13 @@ func_mode_link ()
       # -tp=*                Portland pgcc target processor selection
       # --sysroot=*          for sysroot support
       # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
+      # -specs=*             GCC specs files
       # -stdlib=*            select c++ std lib with clang
+      # -fsanitize=*         Clang/GCC memory and address sanitizer
       -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
       -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
-      -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*)
+      -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \
+      -specs=*|-fsanitize=*)
         func_quote_for_eval "$arg"
 	arg=$func_quote_for_eval_result
         func_append compile_command " $arg"
@@ -7568,7 +7571,10 @@ func_mode_link ()
 	case $pass in
 	dlopen) libs=$dlfiles ;;
 	dlpreopen) libs=$dlprefiles ;;
-	link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
+	link)
+	  libs="$deplibs %DEPLIBS%"
+	  test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs"
+	  ;;
 	esac
       fi
       if test lib,dlpreopen = "$linkmode,$pass"; then
@@ -7887,19 +7893,19 @@ func_mode_link ()
 	    # It is a libtool convenience library, so add in its objects.
 	    func_append convenience " $ladir/$objdir/$old_library"
 	    func_append old_convenience " $ladir/$objdir/$old_library"
+	    tmp_libs=
+	    for deplib in $dependency_libs; do
+	      deplibs="$deplib $deplibs"
+	      if $opt_preserve_dup_deps; then
+		case "$tmp_libs " in
+		*" $deplib "*) func_append specialdeplibs " $deplib" ;;
+		esac
+	      fi
+	      func_append tmp_libs " $deplib"
+	    done
 	  elif test prog != "$linkmode" && test lib != "$linkmode"; then
 	    func_fatal_error "'$lib' is not a convenience library"
 	  fi
-	  tmp_libs=
-	  for deplib in $dependency_libs; do
-	    deplibs="$deplib $deplibs"
-	    if $opt_preserve_dup_deps; then
-	      case "$tmp_libs " in
-	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
-	      esac
-	    fi
-	    func_append tmp_libs " $deplib"
-	  done
 	  continue
 	fi # $pass = conv
 
@@ -8823,6 +8829,9 @@ func_mode_link ()
 	    revision=$number_minor
 	    lt_irix_increment=no
 	    ;;
+	  *)
+	    func_fatal_configuration "$modename: unknown library version type '$version_type'"
+	    ;;
 	  esac
 	  ;;
 	no)
diff --git a/configure b/configure
index 7046e44..8c753f9 100755
--- a/configure
+++ b/configure
@@ -1,7 +1,7 @@
 #! /bin/sh
 # From configure.ac Revision.
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for adios 1.11.0.
+# Generated by GNU Autoconf 2.69 for adios 1.12.0.
 #
 #
 # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
@@ -588,8 +588,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='adios'
 PACKAGE_TARNAME='adios'
-PACKAGE_VERSION='1.11.0'
-PACKAGE_STRING='adios 1.11.0'
+PACKAGE_VERSION='1.12.0'
+PACKAGE_STRING='adios 1.12.0'
 PACKAGE_BUGREPORT=''
 PACKAGE_URL=''
 
@@ -681,6 +681,11 @@ ADIOS_TIMERS_FALSE
 ADIOS_TIMERS_TRUE
 RESEARCH_TRANSPORTS_FALSE
 RESEARCH_TRANSPORTS_TRUE
+SZ_CPPFLAGS
+SZ_LDFLAGS
+SZ_LIBS
+HAVE_SZ_FALSE
+HAVE_SZ_TRUE
 ZFP_CPPFLAGS
 ZFP_LDFLAGS
 ZFP_LIBS
@@ -688,6 +693,12 @@ BUILD_ZFP_FALSE
 BUILD_ZFP_TRUE
 HAVE_ZFP_FALSE
 HAVE_ZFP_TRUE
+LZ4_CPPFLAGS
+LZ4_CFLAGS
+LZ4_LDFLAGS
+LZ4_LIBS
+HAVE_LZ4_FALSE
+HAVE_LZ4_TRUE
 HAVE_BGQ_FALSE
 HAVE_BGQ_TRUE
 FASTBIT_LIBS
@@ -1064,9 +1075,6 @@ with_gen_thread
 with_ptlpbio
 with_flexpath
 with_evpath
-with_atl
-with_dill
-with_cercs_env
 with_zlib
 with_bzip2
 with_szip
@@ -1075,7 +1083,9 @@ with_aplod
 with_alacrity
 with_fastbit
 with_bgq
+with_lz4
 with_zfp
+with_sz
 enable_research_transports
 enable_timers
 enable_timer_events
@@ -1640,7 +1650,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures adios 1.11.0 to adapt to many kinds of systems.
+\`configure' configures adios 1.12.0 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1710,7 +1720,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of adios 1.11.0:";;
+     short | recursive ) echo "Configuration of adios 1.12.0:";;
    esac
   cat <<\_ACEOF
 
@@ -1808,9 +1818,6 @@ Optional Packages:
   --with-ptlpbio=DIR	Where to find ptlpbio package
   --with-flexpath=DIR 	Location of FlexPath
   --with-evpath=DIR	Where to find evpath package
-  --with-atl=DIR	Where to find atl package
-  --with-dill=DIR	Where to find dill package
-  --with-cercs_env=DIR	Where to find cercs_env package
   --with-zlib=DIR      Location of ZLIB library
   --with-bzip2=DIR      Location of BZIP2 library
   --with-szip=DIR      Location of SZIP library
@@ -1819,7 +1826,9 @@ Optional Packages:
   --with-alacrity=DIR      Location of ALACRITY library
   --with-fastbit=DIR      Location of the FastBit library
   --with-bgq 	Whether to enable BGQ method or not
+  --with-lz4=DIR      Location of LZ4 library
   --with-zfp=DIR      Location of ZFP library
+  --with-sz=DIR      Location of SZ library
 
 Some influential environment variables:
   CC          C compiler command
@@ -1908,7 +1917,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-adios configure 1.11.0
+adios configure 1.12.0
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2702,7 +2711,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by adios $as_me 1.11.0, which was
+It was created by adios $as_me 1.12.0, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -3571,7 +3580,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='adios'
- VERSION='1.11.0'
+ VERSION='1.12.0'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -8126,7 +8135,7 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
-netbsd*)
+netbsd* | netbsdelf*-gnu)
   if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
     lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
   else
@@ -11860,6 +11869,9 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
   openbsd* | bitrig*)
     with_gnu_ld=no
     ;;
+  linux* | k*bsd*-gnu | gnu*)
+    link_all_deplibs=no
+    ;;
   esac
 
   ld_shlibs=yes
@@ -12114,7 +12126,7 @@ _LT_EOF
       fi
       ;;
 
-    netbsd*)
+    netbsd* | netbsdelf*-gnu)
       if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
 	archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
 	wlarc=
@@ -12800,6 +12812,7 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
 	if test yes = "$lt_cv_irix_exported_symbol"; then
           archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib'
 	fi
+	link_all_deplibs=no
       else
 	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
 	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib'
@@ -12821,7 +12834,7 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
       esac
       ;;
 
-    netbsd*)
+    netbsd* | netbsdelf*-gnu)
       if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
 	archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
       else
@@ -13944,6 +13957,18 @@ fi
   dynamic_linker='GNU/Linux ld.so'
   ;;
 
+netbsdelf*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='NetBSD ld.elf_so'
+  ;;
+
 netbsd*)
   version_type=sunos
   need_lib_prefix=no
@@ -16894,7 +16919,7 @@ lt_prog_compiler_static_CXX=
 	    ;;
 	esac
 	;;
-      netbsd*)
+      netbsd* | netbsdelf*-gnu)
 	;;
       *qnx* | *nto*)
         # QNX uses GNU C++, but need to define -shared option too, otherwise
@@ -17269,6 +17294,9 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
       ;;
     esac
     ;;
+  linux* | k*bsd*-gnu | gnu*)
+    link_all_deplibs_CXX=no
+    ;;
   *)
     export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
     ;;
@@ -17970,6 +17998,18 @@ fi
   dynamic_linker='GNU/Linux ld.so'
   ;;
 
+netbsdelf*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='NetBSD ld.elf_so'
+  ;;
+
 netbsd*)
   version_type=sunos
   need_lib_prefix=no
@@ -19238,6 +19278,9 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
   openbsd* | bitrig*)
     with_gnu_ld=no
     ;;
+  linux* | k*bsd*-gnu | gnu*)
+    link_all_deplibs_FC=no
+    ;;
   esac
 
   ld_shlibs_FC=yes
@@ -19492,7 +19535,7 @@ _LT_EOF
       fi
       ;;
 
-    netbsd*)
+    netbsd* | netbsdelf*-gnu)
       if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
 	archive_cmds_FC='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
 	wlarc=
@@ -20112,6 +20155,7 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
 	if test yes = "$lt_cv_irix_exported_symbol"; then
           archive_expsym_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib'
 	fi
+	link_all_deplibs_FC=no
       else
 	archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
 	archive_expsym_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib'
@@ -20133,7 +20177,7 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
       esac
       ;;
 
-    netbsd*)
+    netbsd* | netbsdelf*-gnu)
       if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
 	archive_cmds_FC='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
       else
@@ -21070,6 +21114,18 @@ fi
   dynamic_linker='GNU/Linux ld.so'
   ;;
 
+netbsdelf*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='NetBSD ld.elf_so'
+  ;;
+
 netbsd*)
   version_type=sunos
   need_lib_prefix=no
@@ -22186,6 +22242,8 @@ fi
 
 
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: PTHREAD_LIBS=${PTHREAD_LIBS}" >&5
+$as_echo "$as_me: PTHREAD_LIBS=${PTHREAD_LIBS}" >&6;}
 
 if test x"$acx_pthread_ok" = xyes; then
 
@@ -22493,6 +22551,14 @@ fi
 
 fi
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: PTHREAD_LIBS=${PTHREAD_LIBS}" >&5
+$as_echo "$as_me: PTHREAD_LIBS=${PTHREAD_LIBS}" >&6;}
+if test ! -z "${PTHREAD_LIBS}"; then
+    LIBS="${PTHREAD_LIBS} ${LIBS}"
+fi
+if test ! -z "${PTHREAD_CFLAGS}"; then
+    CFLAGS="$CFLAGS ${PTHREAD_CFLAGS}"
+fi
 
 # Make sure we find Python2
 
@@ -25482,8 +25548,10 @@ fi
 
 # Check whether --with-dataspaces was given.
 if test "${with_dataspaces+set}" = set; then :
-  withval=$with_dataspaces; DATASPACES_LDFLAGS="-L$withval/lib";
+  withval=$with_dataspaces; DATASPACES_LIBS="-L$withval/lib -ldspaces -ldscommon -ldart";
          DATASPACES_CPPFLAGS="-I$withval/include";
+         DSPACES_CONFIG="$withval/bin/dspaces_config";
+
 else
   with_dataspaces=check
 fi
@@ -25544,24 +25612,25 @@ fi
             DATASPACES_LIBDIR="${DATASPACES}/lib"
     fi
 
-        if test -n "${DATASPACES_INCDIR}"; then
-            DATASPACES_CPPFLAGS="-I${DATASPACES_INCDIR}"
+        if test -x "${DSPACES_CONFIG}"; then
+        DATASPACES_LIBS=$(${DSPACES_CONFIG} -l)
+        DATASPACES_CPPFLAGS=$(${DSPACES_CONFIG} -c)
     else
-            ac_dataspaces_ok=no
-    fi
 
-        if test -n "${DATASPACES_LIBDIR}"; then
-            DATASPACES_LDFLAGS="-L${DATASPACES_LIBDIR}"
-    else
-            ac_dataspaces_ok=no
+                if test -n "${DATASPACES_INCDIR}"; then
+                DATASPACES_CPPFLAGS="-I${DATASPACES_INCDIR}"
+        fi
+
+                if test -n "${DATASPACES_LIBDIR}"; then
+                DATASPACES_LIBS="-L${DATASPACES_LIBDIR} -ldspaces -ldscommon -ldart"
+        fi
     fi
 
     save_CC="$CC"
     save_CPPFLAGS="$CPPFLAGS"
     save_LIBS="$LIBS"
     save_LDFLAGS="$LDFLAGS"
-                                            LIBS="-ldspaces -ldscommon -ldart $LIBS"
-    LDFLAGS="$LDFLAGS $DATASPACES_LDFLAGS"
+        LIBS="$DATASPACES_LIBS $LIBS"
     CPPFLAGS="$CPPFLAGS $DATASPACES_CPPFLAGS"
     CC="$MPICC"
 
@@ -25593,7 +25662,7 @@ done
         # Check for the DataSpaces library and headers
         { $as_echo "$as_me:${as_lineno-$LINENO}: checking if dataspaces code can be compiled and linked" >&5
 $as_echo_n "checking if dataspaces code can be compiled and linked... " >&6; }
-                        	    	                                cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+                                                                    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include "dataspaces.h"
 #ifdef FC_DUMMY_MAIN
@@ -25615,7 +25684,6 @@ _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
-                     DATASPACES_LIBS="-ldspaces -ldscommon -ldart"
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
@@ -25668,8 +25736,10 @@ fi
 
 # Check whether --with-dimes was given.
 if test "${with_dimes+set}" = set; then :
-  withval=$with_dimes; DIMES_LDFLAGS="-L$withval/lib";
+  withval=$with_dimes; DIMES_LIBS="-L$withval/lib -ldspaces -ldscommon -ldart";
          DIMES_CPPFLAGS="-I$withval/include";
+         DSPACES_CONFIG="$withval/bin/dspaces_config";
+
 else
   with_dimes=check
 fi
@@ -25730,36 +25800,25 @@ fi
             DIMES_LIBDIR="${DIMES}/lib"
     fi
 
-        if test -n "${DIMES_INCDIR}"; then
-            DIMES_CPPFLAGS="-I${DIMES_INCDIR}"
+	    if test -x "${DSPACES_CONFIG}"; then
+        DIMES_LIBS=$(${DSPACES_CONFIG} -l)
+        DIMES_CPPFLAGS=$(${DSPACES_CONFIG} -c)
     else
-            ac_dimes_ok=no
-    fi
 
-        if test -n "${DIMES_LIBDIR}"; then
-            DIMES_LDFLAGS="-L${DIMES_LIBDIR}"
-    else
-            ac_dimes_ok=no
-    fi
+	    	    if test -n "${DIMES_INCDIR}"; then
+	            DIMES_CPPFLAGS="-I${DIMES_INCDIR}"
+	    fi
+
+	    	    if test -n "${DIMES_LIBDIR}"; then
+	            DIMES_LDFLAGS="-L${DIMES_LIBDIR}"
+   	 	fi
+	fi
 
     save_CC="$CC"
     save_CPPFLAGS="$CPPFLAGS"
     save_LIBS="$LIBS"
     save_LDFLAGS="$LDFLAGS"
-    if test "x${ac_portals_lib_ok}" == "xyes"; then
-        	echo "DIMES currently NOT supported for Cray Portals!"
-	 if false; then
-  HAVE_DIMES_TRUE=
-  HAVE_DIMES_FALSE='#'
-else
-  HAVE_DIMES_TRUE='#'
-  HAVE_DIMES_FALSE=
-fi
-
-    else
-        LIBS="-ldspaces -ldscommon -ldart $LIBS"
-    fi
-    LDFLAGS="$LDFLAGS $DIMES_LDFLAGS"
+        LIBS="$DIMES_LIBS $LIBS"
     CPPFLAGS="$CPPFLAGS $DIMES_CPPFLAGS"
     CC="$MPICC"
 
@@ -25813,7 +25872,6 @@ _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
-                     DIMES_LIBS="-ldspaces -ldscommon -ldart"
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
@@ -26696,11 +26754,11 @@ fi
 
 search_list="$datatap_dir/thin_ib.h $datatap_dir/lib/thin_ib.h $datatap_dir/include/thin_ib.h $search_list /usr/include/thin_ib.h /usr/local/include/thin_ib.h /opt/ibpbio/include/thin_ib.h /opt/misc/include/thin_ib.h /opt/misc/include/$cercs_cv_archive/thin_ib.h"
 tmp_search_results=""
-echo "configure:26699: searching for $search_list " >&5
+echo "configure:26757: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:26703: first found $tmp_search_results " >&5
+	echo "configure:26761: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -26788,11 +26846,11 @@ fi
 
 search_list="$datatap_dir/libibclient.la $datatap_dir/lib/libibclient.la $datatap_dir/include/libibclient.la $search_list /usr/lib/libibclient.la /usr/local/lib/libibclient.la /opt/ibpbio/lib/libibclient.la /opt/misc/lib/libibclient.la /opt/misc/lib/$cercs_cv_archive/libibclient.la"
 tmp_search_results=""
-echo "configure:26791: searching for $search_list " >&5
+echo "configure:26849: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:26795: first found $tmp_search_results " >&5
+	echo "configure:26853: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -26861,11 +26919,11 @@ else
 
 search_list="$PWD/../ibpbio $PWD/../../ibpbio $PWD/../../../ibpbio"
 tmp_search_results=""
-echo "configure:26864: searching for $search_list " >&5
+echo "configure:26922: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:26868: first found $tmp_search_results " >&5
+	echo "configure:26926: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -26903,11 +26961,11 @@ else
 
 search_list="$PWD/../ibpbio $PWD/../../ibpbio $PWD/../../../ibpbio"
 tmp_search_results=""
-echo "configure:26906: searching for $search_list " >&5
+echo "configure:26964: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:26910: first found $tmp_search_results " >&5
+	echo "configure:26968: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -27031,11 +27089,11 @@ fi
 
 search_list="$datatap_dir/ffs.h $datatap_dir/lib/ffs.h $datatap_dir/include/ffs.h $search_list /usr/include/ffs.h /usr/local/include/ffs.h /opt/ffs/include/ffs.h /opt/misc/include/ffs.h /opt/misc/include/$cercs_cv_archive/ffs.h"
 tmp_search_results=""
-echo "configure:27034: searching for $search_list " >&5
+echo "configure:27092: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:27038: first found $tmp_search_results " >&5
+	echo "configure:27096: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -27123,11 +27181,11 @@ fi
 
 search_list="$datatap_dir/libffs.la $datatap_dir/lib/libffs.la $datatap_dir/include/libffs.la $search_list /usr/lib/libffs.la /usr/local/lib/libffs.la /opt/ffs/lib/libffs.la /opt/misc/lib/libffs.la /opt/misc/lib/$cercs_cv_archive/libffs.la"
 tmp_search_results=""
-echo "configure:27126: searching for $search_list " >&5
+echo "configure:27184: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:27130: first found $tmp_search_results " >&5
+	echo "configure:27188: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -27196,11 +27254,11 @@ else
 
 search_list="$PWD/../ffs $PWD/../../ffs $PWD/../../../ffs"
 tmp_search_results=""
-echo "configure:27199: searching for $search_list " >&5
+echo "configure:27257: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:27203: first found $tmp_search_results " >&5
+	echo "configure:27261: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -27238,11 +27296,11 @@ else
 
 search_list="$PWD/../ffs $PWD/../../ffs $PWD/../../../ffs"
 tmp_search_results=""
-echo "configure:27241: searching for $search_list " >&5
+echo "configure:27299: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:27245: first found $tmp_search_results " >&5
+	echo "configure:27303: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -27366,11 +27424,11 @@ fi
 
 search_list="$datatap_dir/gen_thread.h $datatap_dir/lib/gen_thread.h $datatap_dir/include/gen_thread.h $search_list /usr/include/gen_thread.h /usr/local/include/gen_thread.h /opt/gen_thread/include/gen_thread.h /opt/misc/include/gen_thread.h /opt/misc/include/$cercs_cv_archive/gen_thread.h"
 tmp_search_results=""
-echo "configure:27369: searching for $search_list " >&5
+echo "configure:27427: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:27373: first found $tmp_search_results " >&5
+	echo "configure:27431: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -27458,11 +27516,11 @@ fi
 
 search_list="$datatap_dir/libgen_thread.la $datatap_dir/lib/libgen_thread.la $datatap_dir/include/libgen_thread.la $search_list /usr/lib/libgen_thread.la /usr/local/lib/libgen_thread.la /opt/gen_thread/lib/libgen_thread.la /opt/misc/lib/libgen_thread.la /opt/misc/lib/$cercs_cv_archive/libgen_thread.la"
 tmp_search_results=""
-echo "configure:27461: searching for $search_list " >&5
+echo "configure:27519: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:27465: first found $tmp_search_results " >&5
+	echo "configure:27523: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -27531,11 +27589,11 @@ else
 
 search_list="$PWD/../gen_thread $PWD/../../gen_thread $PWD/../../../gen_thread"
 tmp_search_results=""
-echo "configure:27534: searching for $search_list " >&5
+echo "configure:27592: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:27538: first found $tmp_search_results " >&5
+	echo "configure:27596: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -27573,11 +27631,11 @@ else
 
 search_list="$PWD/../gen_thread $PWD/../../gen_thread $PWD/../../../gen_thread"
 tmp_search_results=""
-echo "configure:27576: searching for $search_list " >&5
+echo "configure:27634: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:27580: first found $tmp_search_results " >&5
+	echo "configure:27638: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -27724,11 +27782,11 @@ fi
 
 search_list="$datatap_dir/thin_portal.h $datatap_dir/lib/thin_portal.h $datatap_dir/include/thin_portal.h $search_list /usr/include/thin_portal.h /usr/local/include/thin_portal.h /opt/ptlpbio/include/thin_portal.h /opt/misc/include/thin_portal.h /opt/misc/include/$cercs_cv_archive/thin_portal.h"
 tmp_search_results=""
-echo "configure:27727: searching for $search_list " >&5
+echo "configure:27785: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:27731: first found $tmp_search_results " >&5
+	echo "configure:27789: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -27816,11 +27874,11 @@ fi
 
 search_list="$datatap_dir/libptlclient.a $datatap_dir/lib/libptlclient.a $datatap_dir/include/libptlclient.a $search_list /usr/lib/libptlclient.a /usr/local/lib/libptlclient.a /opt/ptlpbio/lib/libptlclient.a /opt/misc/lib/libptlclient.a /opt/misc/lib/$cercs_cv_archive/libptlclient.a"
 tmp_search_results=""
-echo "configure:27819: searching for $search_list " >&5
+echo "configure:27877: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:27823: first found $tmp_search_results " >&5
+	echo "configure:27881: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -27889,11 +27947,11 @@ else
 
 search_list="$PWD/../ptlpbio $PWD/../../ptlpbio $PWD/../../../ptlpbio"
 tmp_search_results=""
-echo "configure:27892: searching for $search_list " >&5
+echo "configure:27950: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:27896: first found $tmp_search_results " >&5
+	echo "configure:27954: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -27931,11 +27989,11 @@ else
 
 search_list="$PWD/../ptlpbio $PWD/../../ptlpbio $PWD/../../../ptlpbio"
 tmp_search_results=""
-echo "configure:27934: searching for $search_list " >&5
+echo "configure:27992: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:27938: first found $tmp_search_results " >&5
+	echo "configure:27996: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -28087,11 +28145,11 @@ fi
 
 search_list="$datatap_dir/thin_ib.h $datatap_dir/lib/thin_ib.h $datatap_dir/include/thin_ib.h $search_list /usr/include/thin_ib.h /usr/local/include/thin_ib.h /opt/ibpbio/include/thin_ib.h /opt/misc/include/thin_ib.h /opt/misc/include/$cercs_cv_archive/thin_ib.h"
 tmp_search_results=""
-echo "configure:28090: searching for $search_list " >&5
+echo "configure:28148: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:28094: first found $tmp_search_results " >&5
+	echo "configure:28152: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -28179,11 +28237,11 @@ fi
 
 search_list="$datatap_dir/libibclient.la $datatap_dir/lib/libibclient.la $datatap_dir/include/libibclient.la $search_list /usr/lib/libibclient.la /usr/local/lib/libibclient.la /opt/ibpbio/lib/libibclient.la /opt/misc/lib/libibclient.la /opt/misc/lib/$cercs_cv_archive/libibclient.la"
 tmp_search_results=""
-echo "configure:28182: searching for $search_list " >&5
+echo "configure:28240: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:28186: first found $tmp_search_results " >&5
+	echo "configure:28244: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -28252,11 +28310,11 @@ else
 
 search_list="$PWD/../ibpbio $PWD/../../ibpbio $PWD/../../../ibpbio"
 tmp_search_results=""
-echo "configure:28255: searching for $search_list " >&5
+echo "configure:28313: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:28259: first found $tmp_search_results " >&5
+	echo "configure:28317: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -28294,11 +28352,11 @@ else
 
 search_list="$PWD/../ibpbio $PWD/../../ibpbio $PWD/../../../ibpbio"
 tmp_search_results=""
-echo "configure:28297: searching for $search_list " >&5
+echo "configure:28355: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:28301: first found $tmp_search_results " >&5
+	echo "configure:28359: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -28422,11 +28480,11 @@ fi
 
 search_list="$datatap_dir/ffs.h $datatap_dir/lib/ffs.h $datatap_dir/include/ffs.h $search_list /usr/include/ffs.h /usr/local/include/ffs.h /opt/ffs/include/ffs.h /opt/misc/include/ffs.h /opt/misc/include/$cercs_cv_archive/ffs.h"
 tmp_search_results=""
-echo "configure:28425: searching for $search_list " >&5
+echo "configure:28483: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:28429: first found $tmp_search_results " >&5
+	echo "configure:28487: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -28514,11 +28572,11 @@ fi
 
 search_list="$datatap_dir/libffs.la $datatap_dir/lib/libffs.la $datatap_dir/include/libffs.la $search_list /usr/lib/libffs.la /usr/local/lib/libffs.la /opt/ffs/lib/libffs.la /opt/misc/lib/libffs.la /opt/misc/lib/$cercs_cv_archive/libffs.la"
 tmp_search_results=""
-echo "configure:28517: searching for $search_list " >&5
+echo "configure:28575: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:28521: first found $tmp_search_results " >&5
+	echo "configure:28579: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -28587,11 +28645,11 @@ else
 
 search_list="$PWD/../ffs $PWD/../../ffs $PWD/../../../ffs"
 tmp_search_results=""
-echo "configure:28590: searching for $search_list " >&5
+echo "configure:28648: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:28594: first found $tmp_search_results " >&5
+	echo "configure:28652: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -28629,11 +28687,11 @@ else
 
 search_list="$PWD/../ffs $PWD/../../ffs $PWD/../../../ffs"
 tmp_search_results=""
-echo "configure:28632: searching for $search_list " >&5
+echo "configure:28690: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:28636: first found $tmp_search_results " >&5
+	echo "configure:28694: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -28757,11 +28815,11 @@ fi
 
 search_list="$datatap_dir/gen_thread.h $datatap_dir/lib/gen_thread.h $datatap_dir/include/gen_thread.h $search_list /usr/include/gen_thread.h /usr/local/include/gen_thread.h /opt/gen_thread/include/gen_thread.h /opt/misc/include/gen_thread.h /opt/misc/include/$cercs_cv_archive/gen_thread.h"
 tmp_search_results=""
-echo "configure:28760: searching for $search_list " >&5
+echo "configure:28818: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:28764: first found $tmp_search_results " >&5
+	echo "configure:28822: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -28849,11 +28907,11 @@ fi
 
 search_list="$datatap_dir/libgen_thread.la $datatap_dir/lib/libgen_thread.la $datatap_dir/include/libgen_thread.la $search_list /usr/lib/libgen_thread.la /usr/local/lib/libgen_thread.la /opt/gen_thread/lib/libgen_thread.la /opt/misc/lib/libgen_thread.la /opt/misc/lib/$cercs_cv_archive/libgen_thread.la"
 tmp_search_results=""
-echo "configure:28852: searching for $search_list " >&5
+echo "configure:28910: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:28856: first found $tmp_search_results " >&5
+	echo "configure:28914: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -28922,11 +28980,11 @@ else
 
 search_list="$PWD/../gen_thread $PWD/../../gen_thread $PWD/../../../gen_thread"
 tmp_search_results=""
-echo "configure:28925: searching for $search_list " >&5
+echo "configure:28983: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:28929: first found $tmp_search_results " >&5
+	echo "configure:28987: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -28964,11 +29022,11 @@ else
 
 search_list="$PWD/../gen_thread $PWD/../../gen_thread $PWD/../../../gen_thread"
 tmp_search_results=""
-echo "configure:28967: searching for $search_list " >&5
+echo "configure:29025: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:28971: first found $tmp_search_results " >&5
+	echo "configure:29029: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -29115,11 +29173,11 @@ fi
 
 search_list="$datatap_dir/thin_portal.h $datatap_dir/lib/thin_portal.h $datatap_dir/include/thin_portal.h $search_list /usr/include/thin_portal.h /usr/local/include/thin_portal.h /opt/ptlpbio/include/thin_portal.h /opt/misc/include/thin_portal.h /opt/misc/include/$cercs_cv_archive/thin_portal.h"
 tmp_search_results=""
-echo "configure:29118: searching for $search_list " >&5
+echo "configure:29176: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:29122: first found $tmp_search_results " >&5
+	echo "configure:29180: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -29207,11 +29265,11 @@ fi
 
 search_list="$datatap_dir/libptlclient.a $datatap_dir/lib/libptlclient.a $datatap_dir/include/libptlclient.a $search_list /usr/lib/libptlclient.a /usr/local/lib/libptlclient.a /opt/ptlpbio/lib/libptlclient.a /opt/misc/lib/libptlclient.a /opt/misc/lib/$cercs_cv_archive/libptlclient.a"
 tmp_search_results=""
-echo "configure:29210: searching for $search_list " >&5
+echo "configure:29268: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:29214: first found $tmp_search_results " >&5
+	echo "configure:29272: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -29280,11 +29338,11 @@ else
 
 search_list="$PWD/../ptlpbio $PWD/../../ptlpbio $PWD/../../../ptlpbio"
 tmp_search_results=""
-echo "configure:29283: searching for $search_list " >&5
+echo "configure:29341: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:29287: first found $tmp_search_results " >&5
+	echo "configure:29345: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -29322,11 +29380,11 @@ else
 
 search_list="$PWD/../ptlpbio $PWD/../../ptlpbio $PWD/../../../ptlpbio"
 tmp_search_results=""
-echo "configure:29325: searching for $search_list " >&5
+echo "configure:29383: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:29329: first found $tmp_search_results " >&5
+	echo "configure:29387: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -29527,11 +29585,11 @@ fi
 
 search_list="$datatap_dir/evpath.h $datatap_dir/lib/evpath.h $datatap_dir/include/evpath.h $search_list /usr/include/evpath.h /usr/local/include/evpath.h /opt/evpath/include/evpath.h /opt/misc/include/evpath.h /opt/misc/include/$cercs_cv_archive/evpath.h"
 tmp_search_results=""
-echo "configure:29530: searching for $search_list " >&5
+echo "configure:29588: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:29534: first found $tmp_search_results " >&5
+	echo "configure:29592: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -29570,7 +29628,7 @@ else
 
 
 cercs_tmp=""
-search_list="./libevpath.a"
+search_list="./libevpath.la"
 CHAOS_HOMEDIR=""
 if test -n "$CSH"; then
 CHAOS_HOMEDIR=`echo "echo ~chaos" | csh -sf  2>/dev/null | sed 's%/$%%'` || CHAOS_HOMEDIR=""
@@ -29584,46 +29642,46 @@ fi
 
 echo "Datatap = $datatap_dir"
 
-search_list="$datatap_dir/libevpath.a $datatap_dir/lib/libevpath.a $datatap_dir/include/libevpath.a $search_list $EXPANDED/libevpath.a $EXPANDED/lib/libevpath.a $EXPANDED/share/libevpath.a $EXPANDED/$cercs_cv_archive/libevpath.a $EXPANDED/$cercs_cv_archive/lib/libevpath.a $EXPANDED/evpath/libevpath.a $EXPANDED/evpath/$cercs_cv_archive/libevpath.a $EXPANDED/evpath/lib/libevpath.a $EXPANDED/evpath/lib/$cercs_cv_archive/libevpath.a"
+search_list="$datatap_dir/libevpath.la $datatap_dir/lib/libevpath.la $datatap_dir/include/libevpath.la $search_list $EXPANDED/libevpath.la $EXPANDED/lib/libevpath.la $EXPANDED/share/libevpath.la $EXPANDED/$cercs_cv_archive/libevpath.la $EXPANDED/$cercs_cv_archive/lib/libevpath.la $EXPANDED/evpath/libevpath.la $EXPANDED/evpath/$cercs_cv_archive/libevpath.la $EXPANDED/evpath/lib/libevpath.la $EXPANDED/evpath/lib/$cercs_cv_archive/libevpath.la"
 fi
 if test -z "$with_installed_specified"; then
-search_list="$search_list `pwd`/../evpath/libevpath.a `pwd`/../lib/libevpath.a `pwd`/../share/libevpath.a"
+search_list="$search_list `pwd`/../evpath/libevpath.la `pwd`/../lib/libevpath.la `pwd`/../share/libevpath.la"
 if test "$CHAOS_HOMEDIR" != "$HOME"; then
-search_list="$search_list $HOME/evpath/libevpath.a $HOME/$cercs_cv_archive/lib/libevpath.a $HOME/lib/libevpath.a"
+search_list="$search_list $HOME/evpath/libevpath.la $HOME/$cercs_cv_archive/lib/libevpath.la $HOME/lib/libevpath.la"
 fi
 fi
 if test -n "$CHAOS_HOMEDIR" -a -n "$cercs_cv_archive"; then
-search_list="$search_list $CHAOS_HOMEDIR/$cercs_cv_archive/evpath/lib/libevpath.a $CHAOS_HOMEDIR/$cercs_cv_archive/lib/libevpath.a $CHAOS_HOMEDIR/evpath/$cercs_cv_archive/lib/libevpath.a $CHAOS_HOMEDIR/evpath/lib/libevpath.a $CHAOS_HOMEDIR/lib/libevpath.a"
+search_list="$search_list $CHAOS_HOMEDIR/$cercs_cv_archive/evpath/lib/libevpath.la $CHAOS_HOMEDIR/$cercs_cv_archive/lib/libevpath.la $CHAOS_HOMEDIR/evpath/$cercs_cv_archive/lib/libevpath.la $CHAOS_HOMEDIR/evpath/lib/libevpath.la $CHAOS_HOMEDIR/lib/libevpath.la"
 fi
 if test "$libdir" != '${exec_prefix}/lib'; then
 tmpdir=`echo ${libdir} |  sed 's%/$%%'`
-search_list="$tmpdir/libevpath.a $search_list"
+search_list="$tmpdir/libevpath.la $search_list"
 fi
 if test "$exec_prefix" != "NONE"; then
 tmpdir=`echo ${exec_prefix} |  sed 's%/$%%'`
-search_list="$tmpdir/lib/libevpath.a $search_list"
+search_list="$tmpdir/lib/libevpath.la $search_list"
 fi
 if test "$includedir" != '${prefix}/include'; then
 tmpdir=`echo ${includedir} |  sed 's%/$%%'`
-search_list="$tmpdir/libevpath.a $search_list"
+search_list="$tmpdir/libevpath.la $search_list"
 fi
 if test "$prefix" != "NONE"; then
 tmpdir=`echo ${prefix} |  sed 's%/$%%'`
-search_list="$tmpdir/lib/libevpath.a $search_list"
+search_list="$tmpdir/lib/libevpath.la $search_list"
 fi
 if test "lib" == "lib"; then
   for tmp_lib_value in $sys_lib_search_path_spec; do
-     search_list="$search_list $tmp_lib_value/libevpath.a"
+     search_list="$search_list $tmp_lib_value/libevpath.la"
   done
 fi
 
-search_list="$datatap_dir/libevpath.a $datatap_dir/lib/libevpath.a $datatap_dir/include/libevpath.a $search_list /usr/lib/libevpath.a /usr/local/lib/libevpath.a /opt/evpath/lib/libevpath.a /opt/misc/lib/libevpath.a /opt/misc/lib/$cercs_cv_archive/libevpath.a"
+search_list="$datatap_dir/libevpath.la $datatap_dir/lib/libevpath.la $datatap_dir/include/libevpath.la $search_list /usr/lib/libevpath.la /usr/local/lib/libevpath.la /opt/evpath/lib/libevpath.la /opt/misc/lib/libevpath.la /opt/misc/lib/$cercs_cv_archive/libevpath.la"
 tmp_search_results=""
-echo "configure:29622: searching for $search_list " >&5
+echo "configure:29680: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:29626: first found $tmp_search_results " >&5
+	echo "configure:29684: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -29632,8 +29690,8 @@ if test -n "$tmp_search_results"; then
 cercs_tmp=$tmp_search_results
 fi
 
-if test -n "$cercs_tmp" -a "$cercs_tmp" != "libevpath.a"; then
-cercs_cv_evpath_link_dir=`$PATHPROG $cercs_tmp | sed 's#\\\\#/#g' | sed "s/.libevpath.a//g"`
+if test -n "$cercs_tmp" -a "$cercs_tmp" != "libevpath.la"; then
+cercs_cv_evpath_link_dir=`$PATHPROG $cercs_tmp | sed 's#\\\\#/#g' | sed "s/.libevpath.la//g"`
 else
 cercs_cv_evpath_link_dir=""
 fi
@@ -29649,7 +29707,7 @@ if test -n "$cercs_cv_evpath_link_arg"; then
 arg=$cercs_cv_evpath_link_arg
 no_dash_arg=`echo $arg | sed 's/^-//g'`
 if test `echo $new_flags | grep -c "$no_dash_arg"` -eq 0; then
-root=`echo libevpath.a | sed 's/\..*//'`
+root=`echo libevpath.la | sed 's/\..*//'`
 if test ! -r $cercs_cv_evpath_link_dir/$root.la; then
 if eval "test \"\${LIBTOOL+set}\" = set"; then
 arg="$cercs_cv_evpath_link_arg "`echo $cercs_cv_evpath_link_dir | sed "/./ s/^/-R/1"`
@@ -29692,11 +29750,11 @@ else
 
 search_list="$PWD/../evpath $PWD/../../evpath $PWD/../../../evpath"
 tmp_search_results=""
-echo "configure:29695: searching for $search_list " >&5
+echo "configure:29753: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:29699: first found $tmp_search_results " >&5
+	echo "configure:29757: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -29734,11 +29792,11 @@ else
 
 search_list="$PWD/../evpath $PWD/../../evpath $PWD/../../../evpath"
 tmp_search_results=""
-echo "configure:29737: searching for $search_list " >&5
+echo "configure:29795: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:29741: first found $tmp_search_results " >&5
+	echo "configure:29799: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -29747,8 +29805,8 @@ if test -n "$tmp_search_results"; then
 cercs_tmp=$tmp_search_results
 fi
 
-if test -n "$cercs_tmp" -a "$cercs_tmp" != "libevpath.a"; then
-cercs_cv_evpath_link_dir=`$PATHPROG $cercs_tmp | sed 's#\\\\#/#g' | sed "s/.libevpath.a//g"`
+if test -n "$cercs_tmp" -a "$cercs_tmp" != "libevpath.la"; then
+cercs_cv_evpath_link_dir=`$PATHPROG $cercs_tmp | sed 's#\\\\#/#g' | sed "s/.libevpath.la//g"`
 else
 cercs_cv_evpath_link_dir=""
 fi
@@ -29764,7 +29822,7 @@ if test -n "$cercs_cv_evpath_link_arg"; then
 arg=$cercs_cv_evpath_link_arg
 no_dash_arg=`echo $arg | sed 's/^-//g'`
 if test `echo $new_flags | grep -c "$no_dash_arg"` -eq 0; then
-root=`echo libevpath.a | sed 's/\..*//'`
+root=`echo libevpath.la | sed 's/\..*//'`
 if test ! -r $cercs_cv_evpath_link_dir/$root.la; then
 if eval "test \"\${LIBTOOL+set}\" = set"; then
 arg="$cercs_cv_evpath_link_arg "`echo $cercs_cv_evpath_link_dir | sed "/./ s/^/-R/1"`
@@ -29783,1652 +29841,293 @@ fi
 fi
 
 
-
-
-if test -z "$with_local_specified"; then
-
-
-
-
-# Check whether --with-ffs was given.
-if test "${with_ffs+set}" = set; then :
-  withval=$with_ffs;
+    if test -n "$cercs_cv_evpath_link_dir" -a -n "$cercs_cv_evpath_include_arg";then
+	if (test -x "$withval/bin/evpath_config") ; then
+	  FP_CONFIG="$withval/bin/evpath_config"
+	else
+	  FP_CONFIG="$cercs_cv_evpath_link_dir/../bin/evpath_config"
+	fi
+	if (test -x "$FP_CONFIG") ; then
+	  FP_LIBS=$(${FP_CONFIG} -s)
+	  FP_CFLAGS=$(${FP_CONFIG} -c)
+	  FP_CPPFLAGS=$(${FP_CONFIG} -c)
+	else
+	  FP_LDFLAGS="$FP_LDFLAGS -L$cercs_cv_evpath_link_dir"
+	  FP_LIBS="$FP_LIBS -levpath"
+	  FP_CFLAGS="$FP_CFLAGS $cercs_cv_evpath_include_arg"
+	  FP_CPPFLAGS="$FP_CPPFLAGS $cercs_cv_evpath_include_arg"
+	fi
+    else
+	echo "FLEXPATH couldn't find evpath -  Not building flexpath"
+	ac_flexpath_ok=no
+    fi
 fi
 
 
-if test -n "$with_ffs"; then
-unset cercs_cv_ffs_include_arg
-unset cercs_cv_ffs_link_arg
-if test `echo $with_ffs | sed 's/\(.\).*/\1/g'` != "/"; then
-with_ffs=`pwd`/$with_ffs
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking needed include args for ffs package" >&5
-$as_echo_n "checking needed include args for ffs package... " >&6; }
-if ${cercs_cv_ffs_include_arg+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
 
 
 
 
-cercs_tmp=""
-search_list="./ffs.h"
-CHAOS_HOMEDIR=""
-if test -n "$CSH"; then
-CHAOS_HOMEDIR=`echo "echo ~chaos" | csh -sf  2>/dev/null | sed 's%/$%%'` || CHAOS_HOMEDIR=""
-fi
-if test -n "$with_ffs"; then
-if test `echo $with_ffs | cut -c1` = "~"; then
-EXPANDED=`echo "echo $with_ffs" | csh -sf 2>/dev/null` || EXPANDED=""
+if test "x$ac_flexpath_ok" = "xyes"; then
+   HAVE_FLEXPATH=1
+   NO_FLEXPATH=0
 else
-EXPANDED=$with_ffs
-fi
-
-echo "Datatap = $datatap_dir"
-
-search_list="$datatap_dir/ffs.h $datatap_dir/lib/ffs.h $datatap_dir/include/ffs.h $search_list $EXPANDED/ffs.h $EXPANDED/include/ffs.h $EXPANDED/share/ffs.h $EXPANDED/$cercs_cv_archive/ffs.h $EXPANDED/$cercs_cv_archive/include/ffs.h $EXPANDED/ffs/ffs.h $EXPANDED/ffs/$cercs_cv_archive/ffs.h $EXPANDED/ffs/include/ffs.h $EXPANDED/ffs/include/$cercs_cv_archive/ffs.h"
-fi
-if test -z "$with_installed_specified"; then
-search_list="$search_list `pwd`/../ffs/ffs.h `pwd`/../include/ffs.h `pwd`/../share/ffs.h"
-if test "$CHAOS_HOMEDIR" != "$HOME"; then
-search_list="$search_list $HOME/ffs/ffs.h $HOME/$cercs_cv_archive/include/ffs.h $HOME/include/ffs.h"
-fi
-fi
-if test -n "$CHAOS_HOMEDIR" -a -n "$cercs_cv_archive"; then
-search_list="$search_list $CHAOS_HOMEDIR/$cercs_cv_archive/ffs/include/ffs.h $CHAOS_HOMEDIR/$cercs_cv_archive/include/ffs.h $CHAOS_HOMEDIR/ffs/$cercs_cv_archive/include/ffs.h $CHAOS_HOMEDIR/ffs/include/ffs.h $CHAOS_HOMEDIR/include/ffs.h"
-fi
-if test "$libdir" != '${exec_prefix}/lib'; then
-tmpdir=`echo ${libdir} |  sed 's%/$%%'`
-search_list="$tmpdir/ffs.h $search_list"
-fi
-if test "$exec_prefix" != "NONE"; then
-tmpdir=`echo ${exec_prefix} |  sed 's%/$%%'`
-search_list="$tmpdir/lib/ffs.h $search_list"
-fi
-if test "$includedir" != '${prefix}/include'; then
-tmpdir=`echo ${includedir} |  sed 's%/$%%'`
-search_list="$tmpdir/ffs.h $search_list"
-fi
-if test "$prefix" != "NONE"; then
-tmpdir=`echo ${prefix} |  sed 's%/$%%'`
-search_list="$tmpdir/include/ffs.h $search_list"
+   HAVE_FLEXPATH=0
+   NO_FLEXPATH=1
 fi
-if test "include" == "lib"; then
-  for tmp_lib_value in $sys_lib_search_path_spec; do
-     search_list="$search_list $tmp_lib_value/ffs.h"
-  done
+ if test "x$ac_flexpath_ok" = "xyes"; then
+  HAVE_FLEXPATH_TRUE=
+  HAVE_FLEXPATH_FALSE='#'
+else
+  HAVE_FLEXPATH_TRUE='#'
+  HAVE_FLEXPATH_FALSE=
 fi
 
-search_list="$datatap_dir/ffs.h $datatap_dir/lib/ffs.h $datatap_dir/include/ffs.h $search_list /usr/include/ffs.h /usr/local/include/ffs.h /opt/ffs/include/ffs.h /opt/misc/include/ffs.h /opt/misc/include/$cercs_cv_archive/ffs.h"
-tmp_search_results=""
-echo "configure:29865: searching for $search_list " >&5
-for tmp_search_value in $search_list; do
-   if test -r $tmp_search_value; then
-	tmp_search_results=$tmp_search_value
-	echo "configure:29869: first found $tmp_search_results " >&5
-	break
-   fi
-done
 
-if test -n "$tmp_search_results"; then
-cercs_tmp=$tmp_search_results
-fi
+cat >>confdefs.h <<_ACEOF
+#define NO_FLEXPATH $NO_FLEXPATH
+_ACEOF
 
-if test -n "$cercs_tmp" -a "$cercs_tmp" != "/usr/include/ffs.h"; then
-cercs_cv_ffs_include_arg=-I`$PATHPROG $cercs_tmp | sed 's#\\\\#/#g' | sed "s#.ffs.h##g"`
-fi
 
-fi
+cat >>confdefs.h <<_ACEOF
+#define HAVE_FLEXPATH $HAVE_FLEXPATH
+_ACEOF
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cercs_cv_ffs_include_arg" >&5
-$as_echo "$cercs_cv_ffs_include_arg" >&6; }
-if test -n "$cercs_cv_ffs_include_arg"; then
-arg="$cercs_cv_ffs_include_arg"
-no_dash_arg=`echo $arg | sed 's/^-//g'`
-if test `echo $DT_CPPFLAGS | grep -c "$no_dash_arg"` -eq 0; then
-if test `echo $arg | grep -c "ffs"` -eq 0; then
-DT_CPPFLAGS="$DT_CPPFLAGS $arg";
-else
-DT_CPPFLAGS="$arg $DT_CPPFLAGS"
-fi
-fi
-fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking needed link args for ffs package" >&5
-$as_echo_n "checking needed link args for ffs package... " >&6; }
-if ${cercs_cv_ffs_link_dir+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
 
 
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: === checking for ZLIB ===" >&5
+$as_echo "$as_me: === checking for ZLIB ===" >&6;}
 
-cercs_tmp=""
-search_list="./libffs.a"
-CHAOS_HOMEDIR=""
-if test -n "$CSH"; then
-CHAOS_HOMEDIR=`echo "echo ~chaos" | csh -sf  2>/dev/null | sed 's%/$%%'` || CHAOS_HOMEDIR=""
-fi
-if test -n "$with_ffs"; then
-if test `echo $with_ffs | cut -c1` = "~"; then
-EXPANDED=`echo "echo $with_ffs" | csh -sf 2>/dev/null` || EXPANDED=""
+ if true; then
+  HAVE_ZLIB_TRUE=
+  HAVE_ZLIB_FALSE='#'
 else
-EXPANDED=$with_ffs
-fi
-
-echo "Datatap = $datatap_dir"
-
-search_list="$datatap_dir/libffs.a $datatap_dir/lib/libffs.a $datatap_dir/include/libffs.a $search_list $EXPANDED/libffs.a $EXPANDED/lib/libffs.a $EXPANDED/share/libffs.a $EXPANDED/$cercs_cv_archive/libffs.a $EXPANDED/$cercs_cv_archive/lib/libffs.a $EXPANDED/ffs/libffs.a $EXPANDED/ffs/$cercs_cv_archive/libffs.a $EXPANDED/ffs/lib/libffs.a $EXPANDED/ffs/lib/$cercs_cv_archive/libffs.a"
-fi
-if test -z "$with_installed_specified"; then
-search_list="$search_list `pwd`/../ffs/libffs.a `pwd`/../lib/libffs.a `pwd`/../share/libffs.a"
-if test "$CHAOS_HOMEDIR" != "$HOME"; then
-search_list="$search_list $HOME/ffs/libffs.a $HOME/$cercs_cv_archive/lib/libffs.a $HOME/lib/libffs.a"
-fi
-fi
-if test -n "$CHAOS_HOMEDIR" -a -n "$cercs_cv_archive"; then
-search_list="$search_list $CHAOS_HOMEDIR/$cercs_cv_archive/ffs/lib/libffs.a $CHAOS_HOMEDIR/$cercs_cv_archive/lib/libffs.a $CHAOS_HOMEDIR/ffs/$cercs_cv_archive/lib/libffs.a $CHAOS_HOMEDIR/ffs/lib/libffs.a $CHAOS_HOMEDIR/lib/libffs.a"
-fi
-if test "$libdir" != '${exec_prefix}/lib'; then
-tmpdir=`echo ${libdir} |  sed 's%/$%%'`
-search_list="$tmpdir/libffs.a $search_list"
-fi
-if test "$exec_prefix" != "NONE"; then
-tmpdir=`echo ${exec_prefix} |  sed 's%/$%%'`
-search_list="$tmpdir/lib/libffs.a $search_list"
-fi
-if test "$includedir" != '${prefix}/include'; then
-tmpdir=`echo ${includedir} |  sed 's%/$%%'`
-search_list="$tmpdir/libffs.a $search_list"
-fi
-if test "$prefix" != "NONE"; then
-tmpdir=`echo ${prefix} |  sed 's%/$%%'`
-search_list="$tmpdir/lib/libffs.a $search_list"
-fi
-if test "lib" == "lib"; then
-  for tmp_lib_value in $sys_lib_search_path_spec; do
-     search_list="$search_list $tmp_lib_value/libffs.a"
-  done
+  HAVE_ZLIB_TRUE='#'
+  HAVE_ZLIB_FALSE=
 fi
 
-search_list="$datatap_dir/libffs.a $datatap_dir/lib/libffs.a $datatap_dir/include/libffs.a $search_list /usr/lib/libffs.a /usr/local/lib/libffs.a /opt/ffs/lib/libffs.a /opt/misc/lib/libffs.a /opt/misc/lib/$cercs_cv_archive/libffs.a"
-tmp_search_results=""
-echo "configure:29957: searching for $search_list " >&5
-for tmp_search_value in $search_list; do
-   if test -r $tmp_search_value; then
-	tmp_search_results=$tmp_search_value
-	echo "configure:29961: first found $tmp_search_results " >&5
-	break
-   fi
-done
 
-if test -n "$tmp_search_results"; then
-cercs_tmp=$tmp_search_results
-fi
 
-if test -n "$cercs_tmp" -a "$cercs_tmp" != "libffs.a"; then
-cercs_cv_ffs_link_dir=`$PATHPROG $cercs_tmp | sed 's#\\\\#/#g' | sed "s/.libffs.a//g"`
+# Check whether --with-zlib was given.
+if test "${with_zlib+set}" = set; then :
+  withval=$with_zlib; :
 else
-cercs_cv_ffs_link_dir=""
+  with_zlib=no
 fi
 
-fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cercs_cv_ffs_link_dir" >&5
-$as_echo "$cercs_cv_ffs_link_dir" >&6; }
-ld_arg="-L"
-new_flags=$LDFLAGS
-cercs_cv_ffs_link_arg=`echo $cercs_cv_ffs_link_dir | sed "/./ s/^/$ld_arg/1"`
-if test -n "$cercs_cv_ffs_link_arg"; then
-arg=$cercs_cv_ffs_link_arg
-no_dash_arg=`echo $arg | sed 's/^-//g'`
-if test `echo $new_flags | grep -c "$no_dash_arg"` -eq 0; then
-root=`echo libffs.a | sed 's/\..*//'`
-if test ! -r $cercs_cv_ffs_link_dir/$root.la; then
-if eval "test \"\${LIBTOOL+set}\" = set"; then
-arg="$cercs_cv_ffs_link_arg "`echo $cercs_cv_ffs_link_dir | sed "/./ s/^/-R/1"`
-fi
-fi
-if test `echo $arg | grep -c "ffs"` -eq 0; then
-new_flags="$new_flags $arg"
+if test "x$with_zlib" == "xno"; then
+
+    if false; then
+  HAVE_ZLIB_TRUE=
+  HAVE_ZLIB_FALSE='#'
 else
-new_flags="$arg $new_flags"
-fi
-fi
-DT_LDFLAGS=$new_flags
+  HAVE_ZLIB_TRUE='#'
+  HAVE_ZLIB_FALSE=
 fi
 
 
 else
 
+    save_CPPFLAGS="$CPPFLAGS"
+    save_LIBS="$LIBS"
+    save_LDFLAGS="$LDFLAGS"
 
+    if test "x$with_zlib" == "xyes"; then
+                ZLIB_CPPFLAGS=""
+        ZLIB_LDFLAGS=""
+        ZLIB_LIBS="-lz"
+    else
+                ZLIB_CPPFLAGS="-I$withval/include"
+        ZLIB_LDFLAGS="-L$withval/lib64"
+        ZLIB_LIBS="-lz"
+    fi
 
+    LIBS="$LIBS $ZLIB_LIBS"
+    LDFLAGS="$LDFLAGS $ZLIB_LDFLAGS"
+    CPPFLAGS="$CPPFLAGS $ZLIB_CPPFLAGS"
 
-# Check whether --with-ffs was given.
-if test "${with_ffs+set}" = set; then :
-  withval=$with_ffs;
-fi
-
+        for ac_header in zlib.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "zlib.h" "ac_cv_header_zlib_h" "$ac_includes_default"
+if test "x$ac_cv_header_zlib_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_ZLIB_H 1
+_ACEOF
 
-if test -n "$with_ffs"; then
-unset cercs_cv_ffs_include_arg
-unset cercs_cv_ffs_link_arg
-if test `echo $with_ffs | sed 's/\(.\).*/\1/g'` != "/"; then
-with_ffs=`pwd`/$with_ffs
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking needed include args for ffs package" >&5
-$as_echo_n "checking needed include args for ffs package... " >&6; }
-if ${cercs_cv_ffs_include_arg+:} false; then :
-  $as_echo_n "(cached) " >&6
 else
-
-
-search_list="$PWD/../ffs $PWD/../../ffs $PWD/../../../ffs"
-tmp_search_results=""
-echo "configure:30030: searching for $search_list " >&5
-for tmp_search_value in $search_list; do
-   if test -r $tmp_search_value; then
-	tmp_search_results=$tmp_search_value
-	echo "configure:30034: first found $tmp_search_results " >&5
-	break
-   fi
-done
-
-if test -n "$tmp_search_results"; then
-cercs_tmp=$tmp_search_results
+   if false; then
+  HAVE_ZLIB_TRUE=
+  HAVE_ZLIB_FALSE='#'
+else
+  HAVE_ZLIB_TRUE='#'
+  HAVE_ZLIB_FALSE=
 fi
 
-if test -n "$cercs_tmp" -a "$cercs_tmp" != "/usr/include/ffs.h"; then
-cercs_cv_ffs_include_arg=-I`$PATHPROG $cercs_tmp | sed 's#\\\\#/#g' | sed "s#.ffs.h##g"`
 fi
 
-fi
+done
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cercs_cv_ffs_include_arg" >&5
-$as_echo "$cercs_cv_ffs_include_arg" >&6; }
-if test -n "$cercs_cv_ffs_include_arg"; then
-arg="$cercs_cv_ffs_include_arg"
-no_dash_arg=`echo $arg | sed 's/^-//g'`
-if test `echo $DT_CPPFLAGS | grep -c "$no_dash_arg"` -eq 0; then
-if test `echo $arg | grep -c "ffs"` -eq 0; then
-DT_CPPFLAGS="$DT_CPPFLAGS $arg";
-else
-DT_CPPFLAGS="$arg $DT_CPPFLAGS"
-fi
-fi
-fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking needed link args for ffs package" >&5
-$as_echo_n "checking needed link args for ffs package... " >&6; }
-if ${cercs_cv_ffs_link_dir+:} false; then :
-  $as_echo_n "(cached) " >&6
+    if test -z "${HAVE_ZLIB_TRUE}"; then
+                { $as_echo "$as_me:${as_lineno-$LINENO}: checking if zlib code can be linked with $ZLIB_LDFLAGS" >&5
+$as_echo_n "checking if zlib code can be linked with $ZLIB_LDFLAGS... " >&6; }
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+             #include "zlib.h"
+#ifdef FC_DUMMY_MAIN
+#ifndef FC_DUMMY_MAIN_EQ_F77
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int FC_DUMMY_MAIN() { return 1; }
+#endif
+#endif
+int
+main ()
+{
+Bytef* in, *out;
+             uLongf in_len, *out_len;
+             int level = 5;
+             int zerr = compress2 (out, out_len, in, in_len, level);
+             return (zerr != Z_OK);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
 else
+   if false; then
+  HAVE_ZLIB_TRUE=
+  HAVE_ZLIB_FALSE='#'
+else
+  HAVE_ZLIB_TRUE='#'
+  HAVE_ZLIB_FALSE=
+fi
 
+             { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 
-search_list="$PWD/../ffs $PWD/../../ffs $PWD/../../../ffs"
-tmp_search_results=""
-echo "configure:30072: searching for $search_list " >&5
-for tmp_search_value in $search_list; do
-   if test -r $tmp_search_value; then
-	tmp_search_results=$tmp_search_value
-	echo "configure:30076: first found $tmp_search_results " >&5
-	break
-   fi
-done
-
-if test -n "$tmp_search_results"; then
-cercs_tmp=$tmp_search_results
 fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
 
-if test -n "$cercs_tmp" -a "$cercs_tmp" != "libffs.a"; then
-cercs_cv_ffs_link_dir=`$PATHPROG $cercs_tmp | sed 's#\\\\#/#g' | sed "s/.libffs.a//g"`
+                        if test -z "${HAVE_ZLIB_FALSE}"; then
+            if test "x$with_lustre" != "xyes"; then
+            ZLIB_LDFLAGS="-L$withval/lib"
+            LDFLAGS="$LDFLAGS $ZLIB_LDFLAGS"
+            { $as_echo "$as_me:${as_lineno-$LINENO}: checking if zlib code can be linked with $ZLIB_LDFLAGS" >&5
+$as_echo_n "checking if zlib code can be linked with $ZLIB_LDFLAGS... " >&6; }
+            cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+                 #include "zlib.h"
+#ifdef FC_DUMMY_MAIN
+#ifndef FC_DUMMY_MAIN_EQ_F77
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int FC_DUMMY_MAIN() { return 1; }
+#endif
+#endif
+int
+main ()
+{
+Bytef* in, *out;
+                 uLongf in_len, *out_len;
+                 int level = 5;
+                 int zerr = compress2 (out, out_len, in, in_len, level);
+                 return (zerr != Z_OK);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+                  if true; then
+  HAVE_ZLIB_TRUE=
+  HAVE_ZLIB_FALSE='#'
 else
-cercs_cv_ffs_link_dir=""
+  HAVE_ZLIB_TRUE='#'
+  HAVE_ZLIB_FALSE=
 fi
 
-fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cercs_cv_ffs_link_dir" >&5
-$as_echo "$cercs_cv_ffs_link_dir" >&6; }
-ld_arg="-L"
-new_flags=$LDFLAGS
-cercs_cv_ffs_link_arg=`echo $cercs_cv_ffs_link_dir | sed "/./ s/^/$ld_arg/1"`
-if test -n "$cercs_cv_ffs_link_arg"; then
-arg=$cercs_cv_ffs_link_arg
-no_dash_arg=`echo $arg | sed 's/^-//g'`
-if test `echo $new_flags | grep -c "$no_dash_arg"` -eq 0; then
-root=`echo libffs.a | sed 's/\..*//'`
-if test ! -r $cercs_cv_ffs_link_dir/$root.la; then
-if eval "test \"\${LIBTOOL+set}\" = set"; then
-arg="$cercs_cv_ffs_link_arg "`echo $cercs_cv_ffs_link_dir | sed "/./ s/^/-R/1"`
-fi
-fi
-if test `echo $arg | grep -c "ffs"` -eq 0; then
-new_flags="$new_flags $arg"
+                 if false; then
+  HAVE_ZLIB_TRUE=
+  HAVE_ZLIB_FALSE='#'
 else
-new_flags="$arg $new_flags"
-fi
-fi
-DT_LDFLAGS=$new_flags
+  HAVE_ZLIB_TRUE='#'
+  HAVE_ZLIB_FALSE=
 fi
 
+                 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 
 fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+            fi
+        fi
+    fi
 
+    LIBS="$save_LIBS"
+    LDFLAGS="$save_LDFLAGS"
+    CPPFLAGS="$save_CPPFLAGS"
 
 
 
-if test -z "$with_local_specified"; then
-
 
 
+    # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
+    if test -z "${HAVE_ZLIB_TRUE}"; then
 
-# Check whether --with-atl was given.
-if test "${with_atl+set}" = set; then :
-  withval=$with_atl;
-fi
+$as_echo "#define HAVE_ZLIB 1" >>confdefs.h
 
+            :
+    else
 
-if test -n "$with_atl"; then
-unset cercs_cv_atl_include_arg
-unset cercs_cv_atl_link_arg
-if test `echo $with_atl | sed 's/\(.\).*/\1/g'` != "/"; then
-with_atl=`pwd`/$with_atl
-fi
+            :
+    fi
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking needed include args for atl package" >&5
-$as_echo_n "checking needed include args for atl package... " >&6; }
-if ${cercs_cv_atl_include_arg+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
 
 
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: === checking for BZIP2 ===" >&5
+$as_echo "$as_me: === checking for BZIP2 ===" >&6;}
 
-cercs_tmp=""
-search_list="./atl.h"
-CHAOS_HOMEDIR=""
-if test -n "$CSH"; then
-CHAOS_HOMEDIR=`echo "echo ~chaos" | csh -sf  2>/dev/null | sed 's%/$%%'` || CHAOS_HOMEDIR=""
-fi
-if test -n "$with_atl"; then
-if test `echo $with_atl | cut -c1` = "~"; then
-EXPANDED=`echo "echo $with_atl" | csh -sf 2>/dev/null` || EXPANDED=""
+ if true; then
+  HAVE_BZIP2_TRUE=
+  HAVE_BZIP2_FALSE='#'
 else
-EXPANDED=$with_atl
+  HAVE_BZIP2_TRUE='#'
+  HAVE_BZIP2_FALSE=
 fi
 
-echo "Datatap = $datatap_dir"
 
-search_list="$datatap_dir/atl.h $datatap_dir/lib/atl.h $datatap_dir/include/atl.h $search_list $EXPANDED/atl.h $EXPANDED/include/atl.h $EXPANDED/share/atl.h $EXPANDED/$cercs_cv_archive/atl.h $EXPANDED/$cercs_cv_archive/include/atl.h $EXPANDED/atl/atl.h $EXPANDED/atl/$cercs_cv_archive/atl.h $EXPANDED/atl/include/atl.h $EXPANDED/atl/include/$cercs_cv_archive/atl.h"
-fi
-if test -z "$with_installed_specified"; then
-search_list="$search_list `pwd`/../atl/atl.h `pwd`/../include/atl.h `pwd`/../share/atl.h"
-if test "$CHAOS_HOMEDIR" != "$HOME"; then
-search_list="$search_list $HOME/atl/atl.h $HOME/$cercs_cv_archive/include/atl.h $HOME/include/atl.h"
-fi
+
+# Check whether --with-bzip2 was given.
+if test "${with_bzip2+set}" = set; then :
+  withval=$with_bzip2; :
+else
+  with_bzip2=no
 fi
-if test -n "$CHAOS_HOMEDIR" -a -n "$cercs_cv_archive"; then
-search_list="$search_list $CHAOS_HOMEDIR/$cercs_cv_archive/atl/include/atl.h $CHAOS_HOMEDIR/$cercs_cv_archive/include/atl.h $CHAOS_HOMEDIR/atl/$cercs_cv_archive/include/atl.h $CHAOS_HOMEDIR/atl/include/atl.h $CHAOS_HOMEDIR/include/atl.h"
-fi
-if test "$libdir" != '${exec_prefix}/lib'; then
-tmpdir=`echo ${libdir} |  sed 's%/$%%'`
-search_list="$tmpdir/atl.h $search_list"
-fi
-if test "$exec_prefix" != "NONE"; then
-tmpdir=`echo ${exec_prefix} |  sed 's%/$%%'`
-search_list="$tmpdir/lib/atl.h $search_list"
-fi
-if test "$includedir" != '${prefix}/include'; then
-tmpdir=`echo ${includedir} |  sed 's%/$%%'`
-search_list="$tmpdir/atl.h $search_list"
-fi
-if test "$prefix" != "NONE"; then
-tmpdir=`echo ${prefix} |  sed 's%/$%%'`
-search_list="$tmpdir/include/atl.h $search_list"
-fi
-if test "include" == "lib"; then
-  for tmp_lib_value in $sys_lib_search_path_spec; do
-     search_list="$search_list $tmp_lib_value/atl.h"
-  done
-fi
-
-search_list="$datatap_dir/atl.h $datatap_dir/lib/atl.h $datatap_dir/include/atl.h $search_list /usr/include/atl.h /usr/local/include/atl.h /opt/atl/include/atl.h /opt/misc/include/atl.h /opt/misc/include/$cercs_cv_archive/atl.h"
-tmp_search_results=""
-echo "configure:30200: searching for $search_list " >&5
-for tmp_search_value in $search_list; do
-   if test -r $tmp_search_value; then
-	tmp_search_results=$tmp_search_value
-	echo "configure:30204: first found $tmp_search_results " >&5
-	break
-   fi
-done
-
-if test -n "$tmp_search_results"; then
-cercs_tmp=$tmp_search_results
-fi
-
-if test -n "$cercs_tmp" -a "$cercs_tmp" != "/usr/include/atl.h"; then
-cercs_cv_atl_include_arg=-I`$PATHPROG $cercs_tmp | sed 's#\\\\#/#g' | sed "s#.atl.h##g"`
-fi
-
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cercs_cv_atl_include_arg" >&5
-$as_echo "$cercs_cv_atl_include_arg" >&6; }
-if test -n "$cercs_cv_atl_include_arg"; then
-arg="$cercs_cv_atl_include_arg"
-no_dash_arg=`echo $arg | sed 's/^-//g'`
-if test `echo $DT_CPPFLAGS | grep -c "$no_dash_arg"` -eq 0; then
-if test `echo $arg | grep -c "atl"` -eq 0; then
-DT_CPPFLAGS="$DT_CPPFLAGS $arg";
-else
-DT_CPPFLAGS="$arg $DT_CPPFLAGS"
-fi
-fi
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking needed link args for atl package" >&5
-$as_echo_n "checking needed link args for atl package... " >&6; }
-if ${cercs_cv_atl_link_dir+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-
-
-
-cercs_tmp=""
-search_list="./libatl.a"
-CHAOS_HOMEDIR=""
-if test -n "$CSH"; then
-CHAOS_HOMEDIR=`echo "echo ~chaos" | csh -sf  2>/dev/null | sed 's%/$%%'` || CHAOS_HOMEDIR=""
-fi
-if test -n "$with_atl"; then
-if test `echo $with_atl | cut -c1` = "~"; then
-EXPANDED=`echo "echo $with_atl" | csh -sf 2>/dev/null` || EXPANDED=""
-else
-EXPANDED=$with_atl
-fi
-
-echo "Datatap = $datatap_dir"
-
-search_list="$datatap_dir/libatl.a $datatap_dir/lib/libatl.a $datatap_dir/include/libatl.a $search_list $EXPANDED/libatl.a $EXPANDED/lib/libatl.a $EXPANDED/share/libatl.a $EXPANDED/$cercs_cv_archive/libatl.a $EXPANDED/$cercs_cv_archive/lib/libatl.a $EXPANDED/atl/libatl.a $EXPANDED/atl/$cercs_cv_archive/libatl.a $EXPANDED/atl/lib/libatl.a $EXPANDED/atl/lib/$cercs_cv_archive/libatl.a"
-fi
-if test -z "$with_installed_specified"; then
-search_list="$search_list `pwd`/../atl/libatl.a `pwd`/../lib/libatl.a `pwd`/../share/libatl.a"
-if test "$CHAOS_HOMEDIR" != "$HOME"; then
-search_list="$search_list $HOME/atl/libatl.a $HOME/$cercs_cv_archive/lib/libatl.a $HOME/lib/libatl.a"
-fi
-fi
-if test -n "$CHAOS_HOMEDIR" -a -n "$cercs_cv_archive"; then
-search_list="$search_list $CHAOS_HOMEDIR/$cercs_cv_archive/atl/lib/libatl.a $CHAOS_HOMEDIR/$cercs_cv_archive/lib/libatl.a $CHAOS_HOMEDIR/atl/$cercs_cv_archive/lib/libatl.a $CHAOS_HOMEDIR/atl/lib/libatl.a $CHAOS_HOMEDIR/lib/libatl.a"
-fi
-if test "$libdir" != '${exec_prefix}/lib'; then
-tmpdir=`echo ${libdir} |  sed 's%/$%%'`
-search_list="$tmpdir/libatl.a $search_list"
-fi
-if test "$exec_prefix" != "NONE"; then
-tmpdir=`echo ${exec_prefix} |  sed 's%/$%%'`
-search_list="$tmpdir/lib/libatl.a $search_list"
-fi
-if test "$includedir" != '${prefix}/include'; then
-tmpdir=`echo ${includedir} |  sed 's%/$%%'`
-search_list="$tmpdir/libatl.a $search_list"
-fi
-if test "$prefix" != "NONE"; then
-tmpdir=`echo ${prefix} |  sed 's%/$%%'`
-search_list="$tmpdir/lib/libatl.a $search_list"
-fi
-if test "lib" == "lib"; then
-  for tmp_lib_value in $sys_lib_search_path_spec; do
-     search_list="$search_list $tmp_lib_value/libatl.a"
-  done
-fi
-
-search_list="$datatap_dir/libatl.a $datatap_dir/lib/libatl.a $datatap_dir/include/libatl.a $search_list /usr/lib/libatl.a /usr/local/lib/libatl.a /opt/atl/lib/libatl.a /opt/misc/lib/libatl.a /opt/misc/lib/$cercs_cv_archive/libatl.a"
-tmp_search_results=""
-echo "configure:30292: searching for $search_list " >&5
-for tmp_search_value in $search_list; do
-   if test -r $tmp_search_value; then
-	tmp_search_results=$tmp_search_value
-	echo "configure:30296: first found $tmp_search_results " >&5
-	break
-   fi
-done
-
-if test -n "$tmp_search_results"; then
-cercs_tmp=$tmp_search_results
-fi
-
-if test -n "$cercs_tmp" -a "$cercs_tmp" != "libatl.a"; then
-cercs_cv_atl_link_dir=`$PATHPROG $cercs_tmp | sed 's#\\\\#/#g' | sed "s/.libatl.a//g"`
-else
-cercs_cv_atl_link_dir=""
-fi
-
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cercs_cv_atl_link_dir" >&5
-$as_echo "$cercs_cv_atl_link_dir" >&6; }
-ld_arg="-L"
-new_flags=$LDFLAGS
-cercs_cv_atl_link_arg=`echo $cercs_cv_atl_link_dir | sed "/./ s/^/$ld_arg/1"`
-if test -n "$cercs_cv_atl_link_arg"; then
-arg=$cercs_cv_atl_link_arg
-no_dash_arg=`echo $arg | sed 's/^-//g'`
-if test `echo $new_flags | grep -c "$no_dash_arg"` -eq 0; then
-root=`echo libatl.a | sed 's/\..*//'`
-if test ! -r $cercs_cv_atl_link_dir/$root.la; then
-if eval "test \"\${LIBTOOL+set}\" = set"; then
-arg="$cercs_cv_atl_link_arg "`echo $cercs_cv_atl_link_dir | sed "/./ s/^/-R/1"`
-fi
-fi
-if test `echo $arg | grep -c "atl"` -eq 0; then
-new_flags="$new_flags $arg"
-else
-new_flags="$arg $new_flags"
-fi
-fi
-DT_LDFLAGS=$new_flags
-fi
-
-
-else
-
-
-
-
-# Check whether --with-atl was given.
-if test "${with_atl+set}" = set; then :
-  withval=$with_atl;
-fi
-
-
-if test -n "$with_atl"; then
-unset cercs_cv_atl_include_arg
-unset cercs_cv_atl_link_arg
-if test `echo $with_atl | sed 's/\(.\).*/\1/g'` != "/"; then
-with_atl=`pwd`/$with_atl
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking needed include args for atl package" >&5
-$as_echo_n "checking needed include args for atl package... " >&6; }
-if ${cercs_cv_atl_include_arg+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-
-search_list="$PWD/../atl $PWD/../../atl $PWD/../../../atl"
-tmp_search_results=""
-echo "configure:30365: searching for $search_list " >&5
-for tmp_search_value in $search_list; do
-   if test -r $tmp_search_value; then
-	tmp_search_results=$tmp_search_value
-	echo "configure:30369: first found $tmp_search_results " >&5
-	break
-   fi
-done
-
-if test -n "$tmp_search_results"; then
-cercs_tmp=$tmp_search_results
-fi
-
-if test -n "$cercs_tmp" -a "$cercs_tmp" != "/usr/include/atl.h"; then
-cercs_cv_atl_include_arg=-I`$PATHPROG $cercs_tmp | sed 's#\\\\#/#g' | sed "s#.atl.h##g"`
-fi
-
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cercs_cv_atl_include_arg" >&5
-$as_echo "$cercs_cv_atl_include_arg" >&6; }
-if test -n "$cercs_cv_atl_include_arg"; then
-arg="$cercs_cv_atl_include_arg"
-no_dash_arg=`echo $arg | sed 's/^-//g'`
-if test `echo $DT_CPPFLAGS | grep -c "$no_dash_arg"` -eq 0; then
-if test `echo $arg | grep -c "atl"` -eq 0; then
-DT_CPPFLAGS="$DT_CPPFLAGS $arg";
-else
-DT_CPPFLAGS="$arg $DT_CPPFLAGS"
-fi
-fi
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking needed link args for atl package" >&5
-$as_echo_n "checking needed link args for atl package... " >&6; }
-if ${cercs_cv_atl_link_dir+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-
-search_list="$PWD/../atl $PWD/../../atl $PWD/../../../atl"
-tmp_search_results=""
-echo "configure:30407: searching for $search_list " >&5
-for tmp_search_value in $search_list; do
-   if test -r $tmp_search_value; then
-	tmp_search_results=$tmp_search_value
-	echo "configure:30411: first found $tmp_search_results " >&5
-	break
-   fi
-done
-
-if test -n "$tmp_search_results"; then
-cercs_tmp=$tmp_search_results
-fi
-
-if test -n "$cercs_tmp" -a "$cercs_tmp" != "libatl.a"; then
-cercs_cv_atl_link_dir=`$PATHPROG $cercs_tmp | sed 's#\\\\#/#g' | sed "s/.libatl.a//g"`
-else
-cercs_cv_atl_link_dir=""
-fi
-
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cercs_cv_atl_link_dir" >&5
-$as_echo "$cercs_cv_atl_link_dir" >&6; }
-ld_arg="-L"
-new_flags=$LDFLAGS
-cercs_cv_atl_link_arg=`echo $cercs_cv_atl_link_dir | sed "/./ s/^/$ld_arg/1"`
-if test -n "$cercs_cv_atl_link_arg"; then
-arg=$cercs_cv_atl_link_arg
-no_dash_arg=`echo $arg | sed 's/^-//g'`
-if test `echo $new_flags | grep -c "$no_dash_arg"` -eq 0; then
-root=`echo libatl.a | sed 's/\..*//'`
-if test ! -r $cercs_cv_atl_link_dir/$root.la; then
-if eval "test \"\${LIBTOOL+set}\" = set"; then
-arg="$cercs_cv_atl_link_arg "`echo $cercs_cv_atl_link_dir | sed "/./ s/^/-R/1"`
-fi
-fi
-if test `echo $arg | grep -c "atl"` -eq 0; then
-new_flags="$new_flags $arg"
-else
-new_flags="$arg $new_flags"
-fi
-fi
-DT_LDFLAGS=$new_flags
-fi
-
-
-fi
-
-
-
-
-if test -z "$with_local_specified"; then
-
-
-
-
-# Check whether --with-dill was given.
-if test "${with_dill+set}" = set; then :
-  withval=$with_dill;
-fi
-
-
-if test -n "$with_dill"; then
-unset cercs_cv_dill_include_arg
-unset cercs_cv_dill_link_arg
-if test `echo $with_dill | sed 's/\(.\).*/\1/g'` != "/"; then
-with_dill=`pwd`/$with_dill
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking needed include args for dill package" >&5
-$as_echo_n "checking needed include args for dill package... " >&6; }
-if ${cercs_cv_dill_include_arg+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-
-
-
-cercs_tmp=""
-search_list="./dill.h"
-CHAOS_HOMEDIR=""
-if test -n "$CSH"; then
-CHAOS_HOMEDIR=`echo "echo ~chaos" | csh -sf  2>/dev/null | sed 's%/$%%'` || CHAOS_HOMEDIR=""
-fi
-if test -n "$with_dill"; then
-if test `echo $with_dill | cut -c1` = "~"; then
-EXPANDED=`echo "echo $with_dill" | csh -sf 2>/dev/null` || EXPANDED=""
-else
-EXPANDED=$with_dill
-fi
-
-echo "Datatap = $datatap_dir"
-
-search_list="$datatap_dir/dill.h $datatap_dir/lib/dill.h $datatap_dir/include/dill.h $search_list $EXPANDED/dill.h $EXPANDED/include/dill.h $EXPANDED/share/dill.h $EXPANDED/$cercs_cv_archive/dill.h $EXPANDED/$cercs_cv_archive/include/dill.h $EXPANDED/dill/dill.h $EXPANDED/dill/$cercs_cv_archive/dill.h $EXPANDED/dill/include/dill.h $EXPANDED/dill/include/$cercs_cv_archive/dill.h"
-fi
-if test -z "$with_installed_specified"; then
-search_list="$search_list `pwd`/../dill/dill.h `pwd`/../include/dill.h `pwd`/../share/dill.h"
-if test "$CHAOS_HOMEDIR" != "$HOME"; then
-search_list="$search_list $HOME/dill/dill.h $HOME/$cercs_cv_archive/include/dill.h $HOME/include/dill.h"
-fi
-fi
-if test -n "$CHAOS_HOMEDIR" -a -n "$cercs_cv_archive"; then
-search_list="$search_list $CHAOS_HOMEDIR/$cercs_cv_archive/dill/include/dill.h $CHAOS_HOMEDIR/$cercs_cv_archive/include/dill.h $CHAOS_HOMEDIR/dill/$cercs_cv_archive/include/dill.h $CHAOS_HOMEDIR/dill/include/dill.h $CHAOS_HOMEDIR/include/dill.h"
-fi
-if test "$libdir" != '${exec_prefix}/lib'; then
-tmpdir=`echo ${libdir} |  sed 's%/$%%'`
-search_list="$tmpdir/dill.h $search_list"
-fi
-if test "$exec_prefix" != "NONE"; then
-tmpdir=`echo ${exec_prefix} |  sed 's%/$%%'`
-search_list="$tmpdir/lib/dill.h $search_list"
-fi
-if test "$includedir" != '${prefix}/include'; then
-tmpdir=`echo ${includedir} |  sed 's%/$%%'`
-search_list="$tmpdir/dill.h $search_list"
-fi
-if test "$prefix" != "NONE"; then
-tmpdir=`echo ${prefix} |  sed 's%/$%%'`
-search_list="$tmpdir/include/dill.h $search_list"
-fi
-if test "include" == "lib"; then
-  for tmp_lib_value in $sys_lib_search_path_spec; do
-     search_list="$search_list $tmp_lib_value/dill.h"
-  done
-fi
-
-search_list="$datatap_dir/dill.h $datatap_dir/lib/dill.h $datatap_dir/include/dill.h $search_list /usr/include/dill.h /usr/local/include/dill.h /opt/dill/include/dill.h /opt/misc/include/dill.h /opt/misc/include/$cercs_cv_archive/dill.h"
-tmp_search_results=""
-echo "configure:30535: searching for $search_list " >&5
-for tmp_search_value in $search_list; do
-   if test -r $tmp_search_value; then
-	tmp_search_results=$tmp_search_value
-	echo "configure:30539: first found $tmp_search_results " >&5
-	break
-   fi
-done
-
-if test -n "$tmp_search_results"; then
-cercs_tmp=$tmp_search_results
-fi
-
-if test -n "$cercs_tmp" -a "$cercs_tmp" != "/usr/include/dill.h"; then
-cercs_cv_dill_include_arg=-I`$PATHPROG $cercs_tmp | sed 's#\\\\#/#g' | sed "s#.dill.h##g"`
-fi
-
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cercs_cv_dill_include_arg" >&5
-$as_echo "$cercs_cv_dill_include_arg" >&6; }
-if test -n "$cercs_cv_dill_include_arg"; then
-arg="$cercs_cv_dill_include_arg"
-no_dash_arg=`echo $arg | sed 's/^-//g'`
-if test `echo $DT_CPPFLAGS | grep -c "$no_dash_arg"` -eq 0; then
-if test `echo $arg | grep -c "dill"` -eq 0; then
-DT_CPPFLAGS="$DT_CPPFLAGS $arg";
-else
-DT_CPPFLAGS="$arg $DT_CPPFLAGS"
-fi
-fi
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking needed link args for dill package" >&5
-$as_echo_n "checking needed link args for dill package... " >&6; }
-if ${cercs_cv_dill_link_dir+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-
-
-
-cercs_tmp=""
-search_list="./libdill.a"
-CHAOS_HOMEDIR=""
-if test -n "$CSH"; then
-CHAOS_HOMEDIR=`echo "echo ~chaos" | csh -sf  2>/dev/null | sed 's%/$%%'` || CHAOS_HOMEDIR=""
-fi
-if test -n "$with_dill"; then
-if test `echo $with_dill | cut -c1` = "~"; then
-EXPANDED=`echo "echo $with_dill" | csh -sf 2>/dev/null` || EXPANDED=""
-else
-EXPANDED=$with_dill
-fi
-
-echo "Datatap = $datatap_dir"
-
-search_list="$datatap_dir/libdill.a $datatap_dir/lib/libdill.a $datatap_dir/include/libdill.a $search_list $EXPANDED/libdill.a $EXPANDED/lib/libdill.a $EXPANDED/share/libdill.a $EXPANDED/$cercs_cv_archive/libdill.a $EXPANDED/$cercs_cv_archive/lib/libdill.a $EXPANDED/dill/libdill.a $EXPANDED/dill/$cercs_cv_archive/libdill.a $EXPANDED/dill/lib/libdill.a $EXPANDED/dill/lib/$cercs_cv_archive/libdill.a"
-fi
-if test -z "$with_installed_specified"; then
-search_list="$search_list `pwd`/../dill/libdill.a `pwd`/../lib/libdill.a `pwd`/../share/libdill.a"
-if test "$CHAOS_HOMEDIR" != "$HOME"; then
-search_list="$search_list $HOME/dill/libdill.a $HOME/$cercs_cv_archive/lib/libdill.a $HOME/lib/libdill.a"
-fi
-fi
-if test -n "$CHAOS_HOMEDIR" -a -n "$cercs_cv_archive"; then
-search_list="$search_list $CHAOS_HOMEDIR/$cercs_cv_archive/dill/lib/libdill.a $CHAOS_HOMEDIR/$cercs_cv_archive/lib/libdill.a $CHAOS_HOMEDIR/dill/$cercs_cv_archive/lib/libdill.a $CHAOS_HOMEDIR/dill/lib/libdill.a $CHAOS_HOMEDIR/lib/libdill.a"
-fi
-if test "$libdir" != '${exec_prefix}/lib'; then
-tmpdir=`echo ${libdir} |  sed 's%/$%%'`
-search_list="$tmpdir/libdill.a $search_list"
-fi
-if test "$exec_prefix" != "NONE"; then
-tmpdir=`echo ${exec_prefix} |  sed 's%/$%%'`
-search_list="$tmpdir/lib/libdill.a $search_list"
-fi
-if test "$includedir" != '${prefix}/include'; then
-tmpdir=`echo ${includedir} |  sed 's%/$%%'`
-search_list="$tmpdir/libdill.a $search_list"
-fi
-if test "$prefix" != "NONE"; then
-tmpdir=`echo ${prefix} |  sed 's%/$%%'`
-search_list="$tmpdir/lib/libdill.a $search_list"
-fi
-if test "lib" == "lib"; then
-  for tmp_lib_value in $sys_lib_search_path_spec; do
-     search_list="$search_list $tmp_lib_value/libdill.a"
-  done
-fi
-
-search_list="$datatap_dir/libdill.a $datatap_dir/lib/libdill.a $datatap_dir/include/libdill.a $search_list /usr/lib/libdill.a /usr/local/lib/libdill.a /opt/dill/lib/libdill.a /opt/misc/lib/libdill.a /opt/misc/lib/$cercs_cv_archive/libdill.a"
-tmp_search_results=""
-echo "configure:30627: searching for $search_list " >&5
-for tmp_search_value in $search_list; do
-   if test -r $tmp_search_value; then
-	tmp_search_results=$tmp_search_value
-	echo "configure:30631: first found $tmp_search_results " >&5
-	break
-   fi
-done
-
-if test -n "$tmp_search_results"; then
-cercs_tmp=$tmp_search_results
-fi
-
-if test -n "$cercs_tmp" -a "$cercs_tmp" != "libdill.a"; then
-cercs_cv_dill_link_dir=`$PATHPROG $cercs_tmp | sed 's#\\\\#/#g' | sed "s/.libdill.a//g"`
-else
-cercs_cv_dill_link_dir=""
-fi
-
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cercs_cv_dill_link_dir" >&5
-$as_echo "$cercs_cv_dill_link_dir" >&6; }
-ld_arg="-L"
-new_flags=$LDFLAGS
-cercs_cv_dill_link_arg=`echo $cercs_cv_dill_link_dir | sed "/./ s/^/$ld_arg/1"`
-if test -n "$cercs_cv_dill_link_arg"; then
-arg=$cercs_cv_dill_link_arg
-no_dash_arg=`echo $arg | sed 's/^-//g'`
-if test `echo $new_flags | grep -c "$no_dash_arg"` -eq 0; then
-root=`echo libdill.a | sed 's/\..*//'`
-if test ! -r $cercs_cv_dill_link_dir/$root.la; then
-if eval "test \"\${LIBTOOL+set}\" = set"; then
-arg="$cercs_cv_dill_link_arg "`echo $cercs_cv_dill_link_dir | sed "/./ s/^/-R/1"`
-fi
-fi
-if test `echo $arg | grep -c "dill"` -eq 0; then
-new_flags="$new_flags $arg"
-else
-new_flags="$arg $new_flags"
-fi
-fi
-DT_LDFLAGS=$new_flags
-fi
-
-
-else
-
-
-
-
-# Check whether --with-dill was given.
-if test "${with_dill+set}" = set; then :
-  withval=$with_dill;
-fi
-
-
-if test -n "$with_dill"; then
-unset cercs_cv_dill_include_arg
-unset cercs_cv_dill_link_arg
-if test `echo $with_dill | sed 's/\(.\).*/\1/g'` != "/"; then
-with_dill=`pwd`/$with_dill
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking needed include args for dill package" >&5
-$as_echo_n "checking needed include args for dill package... " >&6; }
-if ${cercs_cv_dill_include_arg+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-
-search_list="$PWD/../dill $PWD/../../dill $PWD/../../../dill"
-tmp_search_results=""
-echo "configure:30700: searching for $search_list " >&5
-for tmp_search_value in $search_list; do
-   if test -r $tmp_search_value; then
-	tmp_search_results=$tmp_search_value
-	echo "configure:30704: first found $tmp_search_results " >&5
-	break
-   fi
-done
-
-if test -n "$tmp_search_results"; then
-cercs_tmp=$tmp_search_results
-fi
-
-if test -n "$cercs_tmp" -a "$cercs_tmp" != "/usr/include/dill.h"; then
-cercs_cv_dill_include_arg=-I`$PATHPROG $cercs_tmp | sed 's#\\\\#/#g' | sed "s#.dill.h##g"`
-fi
-
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cercs_cv_dill_include_arg" >&5
-$as_echo "$cercs_cv_dill_include_arg" >&6; }
-if test -n "$cercs_cv_dill_include_arg"; then
-arg="$cercs_cv_dill_include_arg"
-no_dash_arg=`echo $arg | sed 's/^-//g'`
-if test `echo $DT_CPPFLAGS | grep -c "$no_dash_arg"` -eq 0; then
-if test `echo $arg | grep -c "dill"` -eq 0; then
-DT_CPPFLAGS="$DT_CPPFLAGS $arg";
-else
-DT_CPPFLAGS="$arg $DT_CPPFLAGS"
-fi
-fi
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking needed link args for dill package" >&5
-$as_echo_n "checking needed link args for dill package... " >&6; }
-if ${cercs_cv_dill_link_dir+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-
-search_list="$PWD/../dill $PWD/../../dill $PWD/../../../dill"
-tmp_search_results=""
-echo "configure:30742: searching for $search_list " >&5
-for tmp_search_value in $search_list; do
-   if test -r $tmp_search_value; then
-	tmp_search_results=$tmp_search_value
-	echo "configure:30746: first found $tmp_search_results " >&5
-	break
-   fi
-done
-
-if test -n "$tmp_search_results"; then
-cercs_tmp=$tmp_search_results
-fi
-
-if test -n "$cercs_tmp" -a "$cercs_tmp" != "libdill.a"; then
-cercs_cv_dill_link_dir=`$PATHPROG $cercs_tmp | sed 's#\\\\#/#g' | sed "s/.libdill.a//g"`
-else
-cercs_cv_dill_link_dir=""
-fi
-
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cercs_cv_dill_link_dir" >&5
-$as_echo "$cercs_cv_dill_link_dir" >&6; }
-ld_arg="-L"
-new_flags=$LDFLAGS
-cercs_cv_dill_link_arg=`echo $cercs_cv_dill_link_dir | sed "/./ s/^/$ld_arg/1"`
-if test -n "$cercs_cv_dill_link_arg"; then
-arg=$cercs_cv_dill_link_arg
-no_dash_arg=`echo $arg | sed 's/^-//g'`
-if test `echo $new_flags | grep -c "$no_dash_arg"` -eq 0; then
-root=`echo libdill.a | sed 's/\..*//'`
-if test ! -r $cercs_cv_dill_link_dir/$root.la; then
-if eval "test \"\${LIBTOOL+set}\" = set"; then
-arg="$cercs_cv_dill_link_arg "`echo $cercs_cv_dill_link_dir | sed "/./ s/^/-R/1"`
-fi
-fi
-if test `echo $arg | grep -c "dill"` -eq 0; then
-new_flags="$new_flags $arg"
-else
-new_flags="$arg $new_flags"
-fi
-fi
-DT_LDFLAGS=$new_flags
-fi
-
-
-fi
-
-
-
-
-if test -z "$with_local_specified"; then
-
-
-
-
-# Check whether --with-cercs_env was given.
-if test "${with_cercs_env+set}" = set; then :
-  withval=$with_cercs_env;
-fi
-
-
-if test -n "$with_cercs_env"; then
-unset cercs_cv_cercs_env_include_arg
-unset cercs_cv_cercs_env_link_arg
-if test `echo $with_cercs_env | sed 's/\(.\).*/\1/g'` != "/"; then
-with_cercs_env=`pwd`/$with_cercs_env
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking needed include args for cercs_env package" >&5
-$as_echo_n "checking needed include args for cercs_env package... " >&6; }
-if ${cercs_cv_cercs_env_include_arg+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-
-
-
-cercs_tmp=""
-search_list="./cercs_env.h"
-CHAOS_HOMEDIR=""
-if test -n "$CSH"; then
-CHAOS_HOMEDIR=`echo "echo ~chaos" | csh -sf  2>/dev/null | sed 's%/$%%'` || CHAOS_HOMEDIR=""
-fi
-if test -n "$with_cercs_env"; then
-if test `echo $with_cercs_env | cut -c1` = "~"; then
-EXPANDED=`echo "echo $with_cercs_env" | csh -sf 2>/dev/null` || EXPANDED=""
-else
-EXPANDED=$with_cercs_env
-fi
-
-echo "Datatap = $datatap_dir"
-
-search_list="$datatap_dir/cercs_env.h $datatap_dir/lib/cercs_env.h $datatap_dir/include/cercs_env.h $search_list $EXPANDED/cercs_env.h $EXPANDED/include/cercs_env.h $EXPANDED/share/cercs_env.h $EXPANDED/$cercs_cv_archive/cercs_env.h $EXPANDED/$cercs_cv_archive/include/cercs_env.h $EXPANDED/cercs_env/cercs_env.h $EXPANDED/cercs_env/$cercs_cv_archive/cercs_env.h $EXPANDED/cercs_env/include/cercs_env.h $EXPANDED/cercs_env/include/$cercs_cv_archive/cercs_env.h"
-fi
-if test -z "$with_installed_specified"; then
-search_list="$search_list `pwd`/../cercs_env/cercs_env.h `pwd`/../include/cercs_env.h `pwd`/../share/cercs_env.h"
-if test "$CHAOS_HOMEDIR" != "$HOME"; then
-search_list="$search_list $HOME/cercs_env/cercs_env.h $HOME/$cercs_cv_archive/include/cercs_env.h $HOME/include/cercs_env.h"
-fi
-fi
-if test -n "$CHAOS_HOMEDIR" -a -n "$cercs_cv_archive"; then
-search_list="$search_list $CHAOS_HOMEDIR/$cercs_cv_archive/cercs_env/include/cercs_env.h $CHAOS_HOMEDIR/$cercs_cv_archive/include/cercs_env.h $CHAOS_HOMEDIR/cercs_env/$cercs_cv_archive/include/cercs_env.h $CHAOS_HOMEDIR/cercs_env/include/cercs_env.h $CHAOS_HOMEDIR/include/cercs_env.h"
-fi
-if test "$libdir" != '${exec_prefix}/lib'; then
-tmpdir=`echo ${libdir} |  sed 's%/$%%'`
-search_list="$tmpdir/cercs_env.h $search_list"
-fi
-if test "$exec_prefix" != "NONE"; then
-tmpdir=`echo ${exec_prefix} |  sed 's%/$%%'`
-search_list="$tmpdir/lib/cercs_env.h $search_list"
-fi
-if test "$includedir" != '${prefix}/include'; then
-tmpdir=`echo ${includedir} |  sed 's%/$%%'`
-search_list="$tmpdir/cercs_env.h $search_list"
-fi
-if test "$prefix" != "NONE"; then
-tmpdir=`echo ${prefix} |  sed 's%/$%%'`
-search_list="$tmpdir/include/cercs_env.h $search_list"
-fi
-if test "include" == "lib"; then
-  for tmp_lib_value in $sys_lib_search_path_spec; do
-     search_list="$search_list $tmp_lib_value/cercs_env.h"
-  done
-fi
-
-search_list="$datatap_dir/cercs_env.h $datatap_dir/lib/cercs_env.h $datatap_dir/include/cercs_env.h $search_list /usr/include/cercs_env.h /usr/local/include/cercs_env.h /opt/cercs_env/include/cercs_env.h /opt/misc/include/cercs_env.h /opt/misc/include/$cercs_cv_archive/cercs_env.h"
-tmp_search_results=""
-echo "configure:30870: searching for $search_list " >&5
-for tmp_search_value in $search_list; do
-   if test -r $tmp_search_value; then
-	tmp_search_results=$tmp_search_value
-	echo "configure:30874: first found $tmp_search_results " >&5
-	break
-   fi
-done
-
-if test -n "$tmp_search_results"; then
-cercs_tmp=$tmp_search_results
-fi
-
-if test -n "$cercs_tmp" -a "$cercs_tmp" != "/usr/include/cercs_env.h"; then
-cercs_cv_cercs_env_include_arg=-I`$PATHPROG $cercs_tmp | sed 's#\\\\#/#g' | sed "s#.cercs_env.h##g"`
-fi
-
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cercs_cv_cercs_env_include_arg" >&5
-$as_echo "$cercs_cv_cercs_env_include_arg" >&6; }
-if test -n "$cercs_cv_cercs_env_include_arg"; then
-arg="$cercs_cv_cercs_env_include_arg"
-no_dash_arg=`echo $arg | sed 's/^-//g'`
-if test `echo $DT_CPPFLAGS | grep -c "$no_dash_arg"` -eq 0; then
-if test `echo $arg | grep -c "cercs_env"` -eq 0; then
-DT_CPPFLAGS="$DT_CPPFLAGS $arg";
-else
-DT_CPPFLAGS="$arg $DT_CPPFLAGS"
-fi
-fi
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking needed link args for cercs_env package" >&5
-$as_echo_n "checking needed link args for cercs_env package... " >&6; }
-if ${cercs_cv_cercs_env_link_dir+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-
-
-
-cercs_tmp=""
-search_list="./libcercs_env.a"
-CHAOS_HOMEDIR=""
-if test -n "$CSH"; then
-CHAOS_HOMEDIR=`echo "echo ~chaos" | csh -sf  2>/dev/null | sed 's%/$%%'` || CHAOS_HOMEDIR=""
-fi
-if test -n "$with_cercs_env"; then
-if test `echo $with_cercs_env | cut -c1` = "~"; then
-EXPANDED=`echo "echo $with_cercs_env" | csh -sf 2>/dev/null` || EXPANDED=""
-else
-EXPANDED=$with_cercs_env
-fi
-
-echo "Datatap = $datatap_dir"
-
-search_list="$datatap_dir/libcercs_env.a $datatap_dir/lib/libcercs_env.a $datatap_dir/include/libcercs_env.a $search_list $EXPANDED/libcercs_env.a $EXPANDED/lib/libcercs_env.a $EXPANDED/share/libcercs_env.a $EXPANDED/$cercs_cv_archive/libcercs_env.a $EXPANDED/$cercs_cv_archive/lib/libcercs_env.a $EXPANDED/cercs_env/libcercs_env.a $EXPANDED/cercs_env/$cercs_cv_archive/libcercs_env.a $EXPANDED/cercs_env/lib/libcercs_env.a $EXPANDED/cercs_env/lib/$cercs_cv_archive/libcercs_env.a"
-fi
-if test -z "$with_installed_specified"; then
-search_list="$search_list `pwd`/../cercs_env/libcercs_env.a `pwd`/../lib/libcercs_env.a `pwd`/../share/libcercs_env.a"
-if test "$CHAOS_HOMEDIR" != "$HOME"; then
-search_list="$search_list $HOME/cercs_env/libcercs_env.a $HOME/$cercs_cv_archive/lib/libcercs_env.a $HOME/lib/libcercs_env.a"
-fi
-fi
-if test -n "$CHAOS_HOMEDIR" -a -n "$cercs_cv_archive"; then
-search_list="$search_list $CHAOS_HOMEDIR/$cercs_cv_archive/cercs_env/lib/libcercs_env.a $CHAOS_HOMEDIR/$cercs_cv_archive/lib/libcercs_env.a $CHAOS_HOMEDIR/cercs_env/$cercs_cv_archive/lib/libcercs_env.a $CHAOS_HOMEDIR/cercs_env/lib/libcercs_env.a $CHAOS_HOMEDIR/lib/libcercs_env.a"
-fi
-if test "$libdir" != '${exec_prefix}/lib'; then
-tmpdir=`echo ${libdir} |  sed 's%/$%%'`
-search_list="$tmpdir/libcercs_env.a $search_list"
-fi
-if test "$exec_prefix" != "NONE"; then
-tmpdir=`echo ${exec_prefix} |  sed 's%/$%%'`
-search_list="$tmpdir/lib/libcercs_env.a $search_list"
-fi
-if test "$includedir" != '${prefix}/include'; then
-tmpdir=`echo ${includedir} |  sed 's%/$%%'`
-search_list="$tmpdir/libcercs_env.a $search_list"
-fi
-if test "$prefix" != "NONE"; then
-tmpdir=`echo ${prefix} |  sed 's%/$%%'`
-search_list="$tmpdir/lib/libcercs_env.a $search_list"
-fi
-if test "lib" == "lib"; then
-  for tmp_lib_value in $sys_lib_search_path_spec; do
-     search_list="$search_list $tmp_lib_value/libcercs_env.a"
-  done
-fi
-
-search_list="$datatap_dir/libcercs_env.a $datatap_dir/lib/libcercs_env.a $datatap_dir/include/libcercs_env.a $search_list /usr/lib/libcercs_env.a /usr/local/lib/libcercs_env.a /opt/cercs_env/lib/libcercs_env.a /opt/misc/lib/libcercs_env.a /opt/misc/lib/$cercs_cv_archive/libcercs_env.a"
-tmp_search_results=""
-echo "configure:30962: searching for $search_list " >&5
-for tmp_search_value in $search_list; do
-   if test -r $tmp_search_value; then
-	tmp_search_results=$tmp_search_value
-	echo "configure:30966: first found $tmp_search_results " >&5
-	break
-   fi
-done
-
-if test -n "$tmp_search_results"; then
-cercs_tmp=$tmp_search_results
-fi
-
-if test -n "$cercs_tmp" -a "$cercs_tmp" != "libcercs_env.a"; then
-cercs_cv_cercs_env_link_dir=`$PATHPROG $cercs_tmp | sed 's#\\\\#/#g' | sed "s/.libcercs_env.a//g"`
-else
-cercs_cv_cercs_env_link_dir=""
-fi
-
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cercs_cv_cercs_env_link_dir" >&5
-$as_echo "$cercs_cv_cercs_env_link_dir" >&6; }
-ld_arg="-L"
-new_flags=$LDFLAGS
-cercs_cv_cercs_env_link_arg=`echo $cercs_cv_cercs_env_link_dir | sed "/./ s/^/$ld_arg/1"`
-if test -n "$cercs_cv_cercs_env_link_arg"; then
-arg=$cercs_cv_cercs_env_link_arg
-no_dash_arg=`echo $arg | sed 's/^-//g'`
-if test `echo $new_flags | grep -c "$no_dash_arg"` -eq 0; then
-root=`echo libcercs_env.a | sed 's/\..*//'`
-if test ! -r $cercs_cv_cercs_env_link_dir/$root.la; then
-if eval "test \"\${LIBTOOL+set}\" = set"; then
-arg="$cercs_cv_cercs_env_link_arg "`echo $cercs_cv_cercs_env_link_dir | sed "/./ s/^/-R/1"`
-fi
-fi
-if test `echo $arg | grep -c "cercs_env"` -eq 0; then
-new_flags="$new_flags $arg"
-else
-new_flags="$arg $new_flags"
-fi
-fi
-DT_LDFLAGS=$new_flags
-fi
-
-
-else
-
-
-
-
-# Check whether --with-cercs_env was given.
-if test "${with_cercs_env+set}" = set; then :
-  withval=$with_cercs_env;
-fi
-
-
-if test -n "$with_cercs_env"; then
-unset cercs_cv_cercs_env_include_arg
-unset cercs_cv_cercs_env_link_arg
-if test `echo $with_cercs_env | sed 's/\(.\).*/\1/g'` != "/"; then
-with_cercs_env=`pwd`/$with_cercs_env
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking needed include args for cercs_env package" >&5
-$as_echo_n "checking needed include args for cercs_env package... " >&6; }
-if ${cercs_cv_cercs_env_include_arg+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-
-search_list="$PWD/../cercs_env $PWD/../../cercs_env $PWD/../../../cercs_env"
-tmp_search_results=""
-echo "configure:31035: searching for $search_list " >&5
-for tmp_search_value in $search_list; do
-   if test -r $tmp_search_value; then
-	tmp_search_results=$tmp_search_value
-	echo "configure:31039: first found $tmp_search_results " >&5
-	break
-   fi
-done
-
-if test -n "$tmp_search_results"; then
-cercs_tmp=$tmp_search_results
-fi
-
-if test -n "$cercs_tmp" -a "$cercs_tmp" != "/usr/include/cercs_env.h"; then
-cercs_cv_cercs_env_include_arg=-I`$PATHPROG $cercs_tmp | sed 's#\\\\#/#g' | sed "s#.cercs_env.h##g"`
-fi
-
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cercs_cv_cercs_env_include_arg" >&5
-$as_echo "$cercs_cv_cercs_env_include_arg" >&6; }
-if test -n "$cercs_cv_cercs_env_include_arg"; then
-arg="$cercs_cv_cercs_env_include_arg"
-no_dash_arg=`echo $arg | sed 's/^-//g'`
-if test `echo $DT_CPPFLAGS | grep -c "$no_dash_arg"` -eq 0; then
-if test `echo $arg | grep -c "cercs_env"` -eq 0; then
-DT_CPPFLAGS="$DT_CPPFLAGS $arg";
-else
-DT_CPPFLAGS="$arg $DT_CPPFLAGS"
-fi
-fi
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking needed link args for cercs_env package" >&5
-$as_echo_n "checking needed link args for cercs_env package... " >&6; }
-if ${cercs_cv_cercs_env_link_dir+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-
-search_list="$PWD/../cercs_env $PWD/../../cercs_env $PWD/../../../cercs_env"
-tmp_search_results=""
-echo "configure:31077: searching for $search_list " >&5
-for tmp_search_value in $search_list; do
-   if test -r $tmp_search_value; then
-	tmp_search_results=$tmp_search_value
-	echo "configure:31081: first found $tmp_search_results " >&5
-	break
-   fi
-done
-
-if test -n "$tmp_search_results"; then
-cercs_tmp=$tmp_search_results
-fi
-
-if test -n "$cercs_tmp" -a "$cercs_tmp" != "libcercs_env.a"; then
-cercs_cv_cercs_env_link_dir=`$PATHPROG $cercs_tmp | sed 's#\\\\#/#g' | sed "s/.libcercs_env.a//g"`
-else
-cercs_cv_cercs_env_link_dir=""
-fi
-
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cercs_cv_cercs_env_link_dir" >&5
-$as_echo "$cercs_cv_cercs_env_link_dir" >&6; }
-ld_arg="-L"
-new_flags=$LDFLAGS
-cercs_cv_cercs_env_link_arg=`echo $cercs_cv_cercs_env_link_dir | sed "/./ s/^/$ld_arg/1"`
-if test -n "$cercs_cv_cercs_env_link_arg"; then
-arg=$cercs_cv_cercs_env_link_arg
-no_dash_arg=`echo $arg | sed 's/^-//g'`
-if test `echo $new_flags | grep -c "$no_dash_arg"` -eq 0; then
-root=`echo libcercs_env.a | sed 's/\..*//'`
-if test ! -r $cercs_cv_cercs_env_link_dir/$root.la; then
-if eval "test \"\${LIBTOOL+set}\" = set"; then
-arg="$cercs_cv_cercs_env_link_arg "`echo $cercs_cv_cercs_env_link_dir | sed "/./ s/^/-R/1"`
-fi
-fi
-if test `echo $arg | grep -c "cercs_env"` -eq 0; then
-new_flags="$new_flags $arg"
-else
-new_flags="$arg $new_flags"
-fi
-fi
-DT_LDFLAGS=$new_flags
-fi
-
-
-fi
-
-
-
-    if test -n "$cercs_cv_evpath_link_dir" -a -n "$cercs_cv_evpath_include_arg";then
-	FP_LDFLAGS="$FP_LDFLAGS -L$cercs_cv_evpath_link_dir"
-	FP_LIBS="$FP_LIBS -levpath"
-	FP_CFLAGS="$FP_CFLAGS $cercs_cv_evpath_include_arg"
-	FP_CPPFLAGS="$FP_CPPFLAGS $cercs_cv_evpath_include_arg"
-    else
-	echo "FLEXPATH couldn't find evpath -  Not building flexpath"
-	ac_flexpath_ok=no
-    fi
-    if test -n "$cercs_cv_ffs_link_dir" -a -n "$cercs_cv_ffs_include_arg"; then
-	FP_LDFLAGS="$FP_LDFLAGS -L$cercs_cv_ffs_link_dir"
-	FP_LIBS="$FP_LIBS -lffs"
-	FP_CFLAGS="$FP_CFLAGS $cercs_cv_ffs_include_arg"
-	FP_CPPFLAGS="$FP_CPPFLAGS $cercs_cv_ffs_include_arg"
-    else
-	echo "FLEXPATH couldn't find ffs -  Not building flexpath"
-	ac_flexpath_ok=no
-    fi
-    if test -n "$cercs_cv_atl_link_dir" -a -n "$cercs_cv_atl_include_arg"; then
-	FP_LDFLAGS="$FP_LDFLAGS -L$cercs_cv_atl_link_dir"
-	FP_LIBS="$FP_LIBS -latl"
-	FP_CFLAGS="$FP_CFLAGS $cercs_cv_atl_include_arg"
-	FP_CPPFLAGS="$FP_CPPFLAGS $cercs_cv_atl_include_arg"
-    else
-	ac_flexpath_ok=no
-	echo "FLEXPATH couldn't find atl -  Not building flexpath"
-    fi
-    if test -n "$cercs_cv_dill_link_dir" -a -n "$cercs_cv_dill_include_arg"; then
-	FP_LDFLAGS="$FP_LDFLAGS -L$cercs_cv_dill_link_dir"
-	FP_LIBS="$FP_LIBS -ldill"
-	FP_CFLAGS="$FP_CFLAGS $cercs_cv_dill_include_arg"
-	FP_CPPFLAGS="$FP_CPPFLAGS $cercs_cv_dill_include_arg"
-    else
-	ac_flexpath_ok=no
-	echo "FLEXPATH couldn't find dill -  Not building flexpath"
-    fi
-    if test -n "$cercs_cv_cercs_env_link_dir" -a -n "$cercs_cv_cercs_env_include_arg"; then
-	FP_LDFLAGS="$FP_LDFLAGS -L$cercs_cv_cercs_env_link_dir"
-	FP_LIBS="$FP_LIBS -lcercs_env"
-	FP_CFLAGS="$FP_CFLAGS $cercs_cv_cercs_env_include_arg"
-	FP_CPPFLAGS="$FP_CPPFLAGS $cercs_cv_cercs_env_include_arg"
-    else
-	ac_flexpath_ok=no
-	echo "FLEXPATH couldn't find cercs_env -  Not building flexpath"
-    fi
-
-fi
-
-
-
-
-
-
-if test "x$ac_flexpath_ok" = "xyes"; then
-   HAVE_FLEXPATH=1
-   NO_FLEXPATH=0
-else
-   HAVE_FLEXPATH=0
-   NO_FLEXPATH=1
-fi
- if test "x$ac_flexpath_ok" = "xyes"; then
-  HAVE_FLEXPATH_TRUE=
-  HAVE_FLEXPATH_FALSE='#'
-else
-  HAVE_FLEXPATH_TRUE='#'
-  HAVE_FLEXPATH_FALSE=
-fi
-
-
-cat >>confdefs.h <<_ACEOF
-#define NO_FLEXPATH $NO_FLEXPATH
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_FLEXPATH $HAVE_FLEXPATH
-_ACEOF
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: === checking for ZLIB ===" >&5
-$as_echo "$as_me: === checking for ZLIB ===" >&6;}
-
- if true; then
-  HAVE_ZLIB_TRUE=
-  HAVE_ZLIB_FALSE='#'
-else
-  HAVE_ZLIB_TRUE='#'
-  HAVE_ZLIB_FALSE=
-fi
-
-
-
-# Check whether --with-zlib was given.
-if test "${with_zlib+set}" = set; then :
-  withval=$with_zlib; :
-else
-  with_zlib=no
-fi
-
-
-if test "x$with_zlib" == "xno"; then
-
-    if false; then
-  HAVE_ZLIB_TRUE=
-  HAVE_ZLIB_FALSE='#'
-else
-  HAVE_ZLIB_TRUE='#'
-  HAVE_ZLIB_FALSE=
-fi
-
-
-else
-
-    save_CPPFLAGS="$CPPFLAGS"
-    save_LIBS="$LIBS"
-    save_LDFLAGS="$LDFLAGS"
-
-    if test "x$with_zlib" == "xyes"; then
-                ZLIB_CPPFLAGS=""
-        ZLIB_LDFLAGS=""
-        ZLIB_LIBS="-lz"
-    else
-                ZLIB_CPPFLAGS="-I$withval/include"
-        ZLIB_LDFLAGS="-L$withval/lib64"
-        ZLIB_LIBS="-lz"
-    fi
-
-    LIBS="$LIBS $ZLIB_LIBS"
-    LDFLAGS="$LDFLAGS $ZLIB_LDFLAGS"
-    CPPFLAGS="$CPPFLAGS $ZLIB_CPPFLAGS"
-
-        for ac_header in zlib.h
-do :
-  ac_fn_c_check_header_mongrel "$LINENO" "zlib.h" "ac_cv_header_zlib_h" "$ac_includes_default"
-if test "x$ac_cv_header_zlib_h" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_ZLIB_H 1
-_ACEOF
-
-else
-   if false; then
-  HAVE_ZLIB_TRUE=
-  HAVE_ZLIB_FALSE='#'
-else
-  HAVE_ZLIB_TRUE='#'
-  HAVE_ZLIB_FALSE=
-fi
-
-fi
-
-done
-
-
-    if test -z "${HAVE_ZLIB_TRUE}"; then
-                { $as_echo "$as_me:${as_lineno-$LINENO}: checking if zlib code can be linked with $ZLIB_LDFLAGS" >&5
-$as_echo_n "checking if zlib code can be linked with $ZLIB_LDFLAGS... " >&6; }
-        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdlib.h>
-             #include "zlib.h"
-#ifdef FC_DUMMY_MAIN
-#ifndef FC_DUMMY_MAIN_EQ_F77
-#  ifdef __cplusplus
-     extern "C"
-#  endif
-   int FC_DUMMY_MAIN() { return 1; }
-#endif
-#endif
-int
-main ()
-{
-Bytef* in, *out;
-             uLongf in_len, *out_len;
-             int level = 5;
-             int zerr = compress2 (out, out_len, in, in_len, level);
-             return (zerr != Z_OK);
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
-   if false; then
-  HAVE_ZLIB_TRUE=
-  HAVE_ZLIB_FALSE='#'
-else
-  HAVE_ZLIB_TRUE='#'
-  HAVE_ZLIB_FALSE=
-fi
-
-             { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-
-                        if test -z "${HAVE_ZLIB_FALSE}"; then
-            if test "x$with_lustre" != "xyes"; then
-            ZLIB_LDFLAGS="-L$withval/lib"
-            LDFLAGS="$LDFLAGS $ZLIB_LDFLAGS"
-            { $as_echo "$as_me:${as_lineno-$LINENO}: checking if zlib code can be linked with $ZLIB_LDFLAGS" >&5
-$as_echo_n "checking if zlib code can be linked with $ZLIB_LDFLAGS... " >&6; }
-            cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdlib.h>
-                 #include "zlib.h"
-#ifdef FC_DUMMY_MAIN
-#ifndef FC_DUMMY_MAIN_EQ_F77
-#  ifdef __cplusplus
-     extern "C"
-#  endif
-   int FC_DUMMY_MAIN() { return 1; }
-#endif
-#endif
-int
-main ()
-{
-Bytef* in, *out;
-                 uLongf in_len, *out_len;
-                 int level = 5;
-                 int zerr = compress2 (out, out_len, in, in_len, level);
-                 return (zerr != Z_OK);
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
-   if false; then
-  HAVE_ZLIB_TRUE=
-  HAVE_ZLIB_FALSE='#'
-else
-  HAVE_ZLIB_TRUE='#'
-  HAVE_ZLIB_FALSE=
-fi
-
-                 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-            fi
-        fi
-    fi
-
-    LIBS="$save_LIBS"
-    LDFLAGS="$save_LDFLAGS"
-    CPPFLAGS="$save_CPPFLAGS"
-
-
-
-
-
-    # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
-    if test -z "${HAVE_ZLIB_TRUE}"; then
-
-$as_echo "#define HAVE_ZLIB 1" >>confdefs.h
-
-            :
-    else
-
-            :
-    fi
-fi
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: === checking for BZIP2 ===" >&5
-$as_echo "$as_me: === checking for BZIP2 ===" >&6;}
-
- if true; then
-  HAVE_BZIP2_TRUE=
-  HAVE_BZIP2_FALSE='#'
-else
-  HAVE_BZIP2_TRUE='#'
-  HAVE_BZIP2_FALSE=
-fi
-
-
-
-# Check whether --with-bzip2 was given.
-if test "${with_bzip2+set}" = set; then :
-  withval=$with_bzip2; :
-else
-  with_bzip2=no
-fi
-
-
-if test "x$with_bzip2" == "xno"; then
-
-    if false; then
-  HAVE_BZIP2_TRUE=
-  HAVE_BZIP2_FALSE='#'
-else
-  HAVE_BZIP2_TRUE='#'
-  HAVE_BZIP2_FALSE=
+
+
+if test "x$with_bzip2" == "xno"; then
+
+    if false; then
+  HAVE_BZIP2_TRUE=
+  HAVE_BZIP2_FALSE='#'
+else
+  HAVE_BZIP2_TRUE='#'
+  HAVE_BZIP2_FALSE=
 fi
 
 
@@ -31557,6 +30256,15 @@ _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
+                  if true; then
+  HAVE_BZIP2_TRUE=
+  HAVE_BZIP2_FALSE='#'
+else
+  HAVE_BZIP2_TRUE='#'
+  HAVE_BZIP2_FALSE=
+fi
+
+
 else
    if false; then
   HAVE_BZIP2_TRUE=
@@ -32084,6 +30792,107 @@ fi
 
 
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: === checking for LZ4 ===" >&5
+$as_echo "$as_me: === checking for LZ4 ===" >&6;}
+
+ if true; then
+  HAVE_LZ4_TRUE=
+  HAVE_LZ4_FALSE='#'
+else
+  HAVE_LZ4_TRUE='#'
+  HAVE_LZ4_FALSE=
+fi
+
+
+
+# Check whether --with-lz4 was given.
+if test "${with_lz4+set}" = set; then :
+  withval=$with_lz4; :
+else
+  with_lz4=no
+fi
+
+
+if test "x$with_lz4" == "xno"; then
+
+    if false; then
+  HAVE_LZ4_TRUE=
+  HAVE_LZ4_FALSE='#'
+else
+  HAVE_LZ4_TRUE='#'
+  HAVE_LZ4_FALSE=
+fi
+
+
+else
+
+    save_CFLAGS="$CFLAGS"
+    save_LIBS="$LIBS"
+    save_LDFLAGS="$LDFLAGS"
+
+    if test "x$with_lz4" == "xyes"; then
+                LZ4_CFLAGS=""
+        LZ4_CPPFLAGS=""
+        LZ4_LDFLAGS=""
+        LZ4_LIBS="-llz4"
+    else
+                LZ4_CFLAGS="-I$withval/include"
+        LZ4_CPPFLAGS="-I$withval/include"
+        LZ4_LDFLAGS="-L$withval/lib"
+        LZ4_LIBS="-llz4"
+    fi
+
+    LIBS="$LIBS $LZ4_LIBS"
+    LDFLAGS="$LDFLAGS $LZ4_LDFLAGS"
+    CFLAGS="$CFLAGS $LZ4_CFLAGS"
+    CPPFLAGS="$CPPFLAGS $LZ4_CPPFLAGS"
+
+        for ac_header in lz4.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "lz4.h" "ac_cv_header_lz4_h" "$ac_includes_default"
+if test "x$ac_cv_header_lz4_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LZ4_H 1
+_ACEOF
+
+else
+   if false; then
+  HAVE_LZ4_TRUE=
+  HAVE_LZ4_FALSE='#'
+else
+  HAVE_LZ4_TRUE='#'
+  HAVE_LZ4_FALSE=
+fi
+
+fi
+
+done
+
+
+    LIBS="$save_LIBS"
+    LDFLAGS="$save_LDFLAGS"
+    CFLAGS="$save_CFLAGS"
+    CPPFLAGS="$save_CPPFLAGS"
+
+
+
+
+
+
+    # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
+    if test -z "${HAVE_LZ4_TRUE}"; then
+
+$as_echo "#define HAVE_LZ4 1" >>confdefs.h
+
+            :
+    else
+
+            :
+    fi
+fi
+
+
+
 
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: === checking for ZFP ===" >&5
@@ -32224,6 +31033,97 @@ fi
 fi
 
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: === checking for SZ ===" >&5
+$as_echo "$as_me: === checking for SZ ===" >&6;}
+
+ if true; then
+  HAVE_SZ_TRUE=
+  HAVE_SZ_FALSE='#'
+else
+  HAVE_SZ_TRUE='#'
+  HAVE_SZ_FALSE=
+fi
+
+
+
+# Check whether --with-sz was given.
+if test "${with_sz+set}" = set; then :
+  withval=$with_sz; SZ_LDFLAGS="-L$withval/lib";
+         SZ_LIBS="-lsz -lzlib";
+         SZ_CPPFLAGS="-I$withval/include";
+else
+  with_sz=no
+fi
+
+
+if test "x$with_sz" == "xno"; then
+
+    if false; then
+  HAVE_SZ_TRUE=
+  HAVE_SZ_FALSE='#'
+else
+  HAVE_SZ_TRUE='#'
+  HAVE_SZ_FALSE=
+fi
+
+
+else
+
+    save_CPPFLAGS="$CPPFLAGS"
+    save_LIBS="$LIBS"
+    save_LDFLAGS="$LDFLAGS"
+    LIBS="$LIBS -lsz -lzlib"
+    LDFLAGS="$LDFLAGS $SZ_LDFLAGS"
+    CPPFLAGS="$CPPFLAGS $SZ_CPPFLAGS"
+
+    if test -z "${HAVE_SZ_TRUE}"; then
+           for ac_header in sz.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "sz.h" "ac_cv_header_sz_h" "$ac_includes_default"
+if test "x$ac_cv_header_sz_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_SZ_H 1
+_ACEOF
+
+else
+   if false; then
+  HAVE_SZ_TRUE=
+  HAVE_SZ_FALSE='#'
+else
+  HAVE_SZ_TRUE='#'
+  HAVE_SZ_FALSE=
+fi
+
+fi
+
+done
+
+    fi
+
+    # Check for the SZ library and headers
+
+    LIBS="$save_LIBS"
+    LDFLAGS="$save_LDFLAGS"
+    CPPFLAGS="$save_CPPFLAGS"
+
+
+
+
+
+    # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
+    if test -z "${HAVE_SZ_TRUE}"; then
+
+$as_echo "#define HAVE_SZ 1" >>confdefs.h
+
+            :
+    else
+
+            :
+    fi
+fi
+
+
+
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -32801,6 +31701,28 @@ if test -z "${HAVE_SZIP_TRUE}"; then
     ADIOSREADLIB_SEQ_LDFLAGS="${ADIOSREADLIB_SEQ_LDFLAGS} ${SZIP_LDFLAGS}"
     ADIOSREADLIB_SEQ_LDADD="${ADIOSREADLIB_SEQ_LDADD} ${SZIP_LIBS}"
 fi
+if test -z "${HAVE_LZ4_TRUE}"; then
+    ADIOSLIB_CPPFLAGS="${ADIOSLIB_CPPFLAGS} -DLZ4 ${LZ4_CPPFLAGS}"
+    ADIOSLIB_CFLAGS="${ADIOSLIB_CFLAGS} ${LZ4_CFLAGS}"
+    ADIOSLIB_LDFLAGS="${ADIOSLIB_LDFLAGS} ${LZ4_LDFLAGS}"
+    ADIOSLIB_LDADD="${ADIOSLIB_LDADD} ${LZ4_LIBS}"
+    ADIOSLIB_SEQ_CPPFLAGS="${ADIOSLIB_SEQ_CPPFLAGS} -DLZ4 ${LZ4_CPPFLAGS}"
+    ADIOSLIB_SEQ_CFLAGS="${ADIOSLIB_SEQ_CFLAGS} ${LZ4_CFLAGS}"
+    ADIOSLIB_SEQ_LDFLAGS="${ADIOSLIB_SEQ_LDFLAGS} ${LZ4_LDFLAGS}"
+    ADIOSLIB_SEQ_LDADD="${ADIOSLIB_SEQ_LDADD} ${LZ4_LIBS}"
+    ADIOSLIB_INT_CPPFLAGS="${ADIOSLIB_INT_CPPFLAGS} -DLZ4 ${LZ4_CPPFLAGS}"
+    ADIOSLIB_INT_CFLAGS="${ADIOSLIB_INT_CFLAGS} ${LZ4_CFLAGS}"
+    ADIOSLIB_INT_LDFLAGS="${ADIOSLIB_INT_LDFLAGS} ${LZ4_LDFLAGS}"
+    ADIOSLIB_INT_LDADD="${ADIOSLIB_INT_LDADD} ${LZ4_LIBS}"
+    ADIOSREADLIB_CPPFLAGS="${ADIOSREADLIB_CPPFLAGS} -DLZ4 ${LZ4_CPPFLAGS}"
+    ADIOSREADLIB_CFLAGS="${ADIOSREADLIB_CFLAGS} ${LZ4_CFLAGS}"
+    ADIOSREADLIB_LDFLAGS="${ADIOSREADLIB_LDFLAGS} ${LZ4_LDFLAGS}"
+    ADIOSREADLIB_LDADD="${ADIOSREADLIB_LDADD} ${LZ4_LIBS}"
+    ADIOSREADLIB_SEQ_CPPFLAGS="${ADIOSREADLIB_SEQ_CPPFLAGS} -DLZ4 ${LZ4_CPPFLAGS}"
+    ADIOSREADLIB_SEQ_CFLAGS="${ADIOSREADLIB_SEQ_CFLAGS} ${LZ4_CFLAGS}"
+    ADIOSREADLIB_SEQ_LDFLAGS="${ADIOSREADLIB_SEQ_LDFLAGS} ${LZ4_LDFLAGS}"
+    ADIOSREADLIB_SEQ_LDADD="${ADIOSREADLIB_SEQ_LDADD} ${LZ4_LIBS}"
+fi
 if test -z "${HAVE_ZFP_TRUE}"; then
     ADIOSLIB_LDFLAGS="${ADIOSLIB_LDFLAGS} ${ZFP_LDFLAGS}"
     ADIOSLIB_LDADD="${ADIOSLIB_LDADD} ${ZFP_LIBS}"
@@ -32813,6 +31735,28 @@ if test -z "${HAVE_ZFP_TRUE}"; then
     ADIOSREADLIB_SEQ_LDFLAGS="${ADIOSREADLIB_SEQ_LDFLAGS} ${ZFP_LDFLAGS}"
     ADIOSREADLIB_SEQ_LDADD="${ADIOSREADLIB_SEQ_LDADD} ${ZFP_LIBS}"
 fi
+if test -z "${HAVE_SZ_TRUE}"; then
+    ADIOSLIB_CPPFLAGS="${ADIOSLIB_CPPFLAGS} ${SZ_CPPFLAGS}"
+    ADIOSLIB_CFLAGS="${ADIOSLIB_CFLAGS} ${SZ_CFLAGS}"
+    ADIOSLIB_LDFLAGS="${ADIOSLIB_LDFLAGS} ${SZ_LDFLAGS}"
+    ADIOSLIB_LDADD="${ADIOSLIB_LDADD} ${SZ_LIBS}"
+    ADIOSLIB_SEQ_CPPFLAGS="${ADIOSLIB_SEQ_CPPFLAGS} ${SZ_CPPFLAGS}"
+    ADIOSLIB_SEQ_CFLAGS="${ADIOSLIB_SEQ_CFLAGS} ${SZ_CFLAGS}"
+    ADIOSLIB_SEQ_LDFLAGS="${ADIOSLIB_SEQ_LDFLAGS} ${SZ_LDFLAGS}"
+    ADIOSLIB_SEQ_LDADD="${ADIOSLIB_SEQ_LDADD} ${SZ_LIBS}"
+    ADIOSLIB_INT_CPPFLAGS="${ADIOSLIB_INT_CPPFLAGS} ${SZ_CPPFLAGS}"
+    ADIOSLIB_INT_CFLAGS="${ADIOSLIB_INT_CFLAGS} ${SZ_CFLAGS}"
+    ADIOSLIB_INT_LDFLAGS="${ADIOSLIB_INT_LDFLAGS} ${SZ_LDFLAGS}"
+    ADIOSLIB_INT_LDADD="${ADIOSLIB_INT_LDADD} ${SZ_LIBS}"
+    ADIOSREADLIB_CPPFLAGS="${ADIOSREADLIB_CPPFLAGS} ${SZ_CPPFLAGS}"
+    ADIOSREADLIB_CFLAGS="${ADIOSREADLIB_CFLAGS} ${SZ_CFLAGS}"
+    ADIOSREADLIB_LDFLAGS="${ADIOSREADLIB_LDFLAGS} ${SZ_LDFLAGS}"
+    ADIOSREADLIB_LDADD="${ADIOSREADLIB_LDADD} ${SZ_LIBS}"
+    ADIOSREADLIB_SEQ_CPPFLAGS="${ADIOSREADLIB_SEQ_CPPFLAGS} ${SZ_CPPFLAGS}"
+    ADIOSREADLIB_SEQ_CFLAGS="${ADIOSREADLIB_SEQ_CFLAGS} ${SZ_CFLAGS}"
+    ADIOSREADLIB_SEQ_LDFLAGS="${ADIOSREADLIB_SEQ_LDFLAGS} ${SZ_LDFLAGS}"
+    ADIOSREADLIB_SEQ_LDADD="${ADIOSREADLIB_SEQ_LDADD} ${SZ_LIBS}"
+fi
 if test -z "${HAVE_ISOBAR_TRUE}"; then
     ADIOSLIB_CPPFLAGS="${ADIOSLIB_CPPFLAGS} -DISOBAR ${ISOBAR_CPPFLAGS}"
     ADIOSLIB_CFLAGS="${ADIOSLIB_CFLAGS} ${ISOBAR_CFLAGS}"
@@ -32981,7 +31925,7 @@ fi
 #fi
 #AC_DEFINE_UNQUOTED(VERSION_SVNREV, "${SVNVERSION}", [svn revision number])
 
-ac_config_files="$ac_config_files Makefile src/Makefile src/zfp/Makefile src/mxml/Makefile tests/Makefile tests/test_src/Makefile tests/C/Makefile tests/C/flexpath_tests/Makefile tests/C/flexpath_tests/1D_arr_global/Makefile tests/C/flexpath_tests/1D_arr_global_noxml/Makefile tests/C/flexpath_tests/global_range_select/Makefile tests/C/flexpath_tests/maya_noxml/Makefile tests/C/flexpath_tests/maya_append/Makefile tests/C/flexpath_tests/scalar/Makefile tests/C/fgr_tests/Makefile tests/C/qu [...]
+ac_config_files="$ac_config_files Makefile src/Makefile src/zfp/Makefile src/mxml/Makefile tests/Makefile tests/test_src/Makefile tests/C/Makefile tests/C/flexpath_tests/Makefile tests/C/flexpath_tests/1D_arr_global/Makefile tests/C/flexpath_tests/1D_arr_global_noxml/Makefile tests/C/flexpath_tests/global_range_select/Makefile tests/C/flexpath_tests/maya_noxml/Makefile tests/C/flexpath_tests/scalar/Makefile tests/C/flexpath_tests/local_arrays/Makefile tests/C/fgr_tests/Makefile tests/C/q [...]
 
 
 
@@ -33418,10 +32362,6 @@ if test -z "${HAVE_DIMES_TRUE}" && test -z "${HAVE_DIMES_FALSE}"; then
   as_fn_error $? "conditional \"HAVE_DIMES\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
-if test -z "${HAVE_DIMES_TRUE}" && test -z "${HAVE_DIMES_FALSE}"; then
-  as_fn_error $? "conditional \"HAVE_DIMES\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
 if test -z "${HAVE_DMALLOC_TRUE}" && test -z "${HAVE_DMALLOC_FALSE}"; then
   as_fn_error $? "conditional \"HAVE_DMALLOC\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -33526,6 +32466,14 @@ if test -z "${HAVE_ZLIB_TRUE}" && test -z "${HAVE_ZLIB_FALSE}"; then
   as_fn_error $? "conditional \"HAVE_ZLIB\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
+if test -z "${HAVE_ZLIB_TRUE}" && test -z "${HAVE_ZLIB_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_ZLIB\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_BZIP2_TRUE}" && test -z "${HAVE_BZIP2_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_BZIP2\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 if test -z "${HAVE_BZIP2_TRUE}" && test -z "${HAVE_BZIP2_FALSE}"; then
   as_fn_error $? "conditional \"HAVE_BZIP2\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -33610,6 +32558,18 @@ if test -z "${HAVE_BGQ_TRUE}" && test -z "${HAVE_BGQ_FALSE}"; then
   as_fn_error $? "conditional \"HAVE_BGQ\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
+if test -z "${HAVE_LZ4_TRUE}" && test -z "${HAVE_LZ4_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_LZ4\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_LZ4_TRUE}" && test -z "${HAVE_LZ4_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_LZ4\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_LZ4_TRUE}" && test -z "${HAVE_LZ4_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_LZ4\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 if test -z "${HAVE_ZFP_TRUE}" && test -z "${HAVE_ZFP_FALSE}"; then
   as_fn_error $? "conditional \"HAVE_ZFP\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -33634,6 +32594,18 @@ if test -z "${HAVE_ZFP_TRUE}" && test -z "${HAVE_ZFP_FALSE}"; then
   as_fn_error $? "conditional \"HAVE_ZFP\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
+if test -z "${HAVE_SZ_TRUE}" && test -z "${HAVE_SZ_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_SZ\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_SZ_TRUE}" && test -z "${HAVE_SZ_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_SZ\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_SZ_TRUE}" && test -z "${HAVE_SZ_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_SZ\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 if test -z "${RESEARCH_TRANSPORTS_TRUE}" && test -z "${RESEARCH_TRANSPORTS_FALSE}"; then
   as_fn_error $? "conditional \"RESEARCH_TRANSPORTS\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -34083,7 +33055,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by adios $as_me 1.11.0, which was
+This file was extended by adios $as_me 1.12.0, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -34149,7 +33121,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-adios config.status 1.11.0
+adios config.status 1.12.0
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
@@ -34760,8 +33732,8 @@ do
     "tests/C/flexpath_tests/1D_arr_global_noxml/Makefile") CONFIG_FILES="$CONFIG_FILES tests/C/flexpath_tests/1D_arr_global_noxml/Makefile" ;;
     "tests/C/flexpath_tests/global_range_select/Makefile") CONFIG_FILES="$CONFIG_FILES tests/C/flexpath_tests/global_range_select/Makefile" ;;
     "tests/C/flexpath_tests/maya_noxml/Makefile") CONFIG_FILES="$CONFIG_FILES tests/C/flexpath_tests/maya_noxml/Makefile" ;;
-    "tests/C/flexpath_tests/maya_append/Makefile") CONFIG_FILES="$CONFIG_FILES tests/C/flexpath_tests/maya_append/Makefile" ;;
     "tests/C/flexpath_tests/scalar/Makefile") CONFIG_FILES="$CONFIG_FILES tests/C/flexpath_tests/scalar/Makefile" ;;
+    "tests/C/flexpath_tests/local_arrays/Makefile") CONFIG_FILES="$CONFIG_FILES tests/C/flexpath_tests/local_arrays/Makefile" ;;
     "tests/C/fgr_tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/C/fgr_tests/Makefile" ;;
     "tests/C/query/Makefile") CONFIG_FILES="$CONFIG_FILES tests/C/query/Makefile" ;;
     "tests/C/query/common/Makefile") CONFIG_FILES="$CONFIG_FILES tests/C/query/common/Makefile" ;;
@@ -36721,6 +35693,17 @@ else
     echo "  - No SZIP to build SZIP transform method"
 fi
 
+if test -z "${HAVE_LZ4_TRUE}"; then
+    echo "  - LZ4";
+    echo "      - LZ4_CFLAGS = $LZ4_CFLAGS";
+    echo "      - LZ4_CPPFLAGS = $LZ4_CPPFLAGS";
+    echo "      - LZ4_LDFLAGS = $LZ4_LDFLAGS";
+    echo "      - LZ4_LIBS = $LZ4_LIBS";
+    echo
+else
+    echo "  - No LZ4 to build LZ4 transform method"
+fi
+
 if test -z "${BUILD_ZFP_TRUE}"; then
     echo "  - ZFP is built with ADIOS";
 elif test -z "${HAVE_ZFP_TRUE}"; then
@@ -36733,6 +35716,17 @@ else
     echo "  - No ZFP to build ZFP transform method"
 fi
 
+if test -z "${HAVE_SZ_TRUE}"; then
+    echo "  - SZ";
+    echo "      - SZ_CFLAGS = $SZ_CFLAGS";
+    echo "      - SZ_CPPFLAGS = $SZ_CPPFLAGS";
+    echo "      - SZ_LDFLAGS = $SZ_LDFLAGS";
+    echo "      - SZ_LIBS = $SZ_LIBS";
+    echo
+else
+    echo "  - No SZ to build SZ transform method"
+fi
+
 if test -z "${HAVE_ISOBAR_TRUE}"; then
     echo "  - ISOBAR";
     echo "      - ISOBAR_CFLAGS = $ISOBAR_CFLAGS";
diff --git a/configure.ac b/configure.ac
index 58d0516..4cd792d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,4 +1,4 @@
-AC_INIT([adios], [1.11.0])
+AC_INIT([adios], [1.12.0])
 AC_CONFIG_SRCDIR([configure.ac])
 AC_CONFIG_AUX_DIR(config)
 AC_CONFIG_MACRO_DIR(config)
@@ -139,6 +139,13 @@ else
     AM_CONDITIONAL(BUILD_MXML,false)
 fi
 
+AC_MSG_NOTICE([PTHREAD_LIBS=${PTHREAD_LIBS}])
+if test ! -z "${PTHREAD_LIBS}"; then
+    LIBS="${PTHREAD_LIBS} ${LIBS}"
+fi
+if test ! -z "${PTHREAD_CFLAGS}"; then
+    CFLAGS="$CFLAGS ${PTHREAD_CFLAGS}"
+fi
 
 # Make sure we find Python2
 m4_define_default([_AM_PYTHON_INTERPRETER_LIST],
@@ -179,6 +186,7 @@ AC_APLOD
 AC_ALACRITY
 AC_FASTBIT
 AC_BGQ
+AC_LZ4
 
 
 AC_ZFP
@@ -196,6 +204,7 @@ if test -z "${BUILD_ZFP_TRUE}"; then
     AC_SUBST(ZFP_LIBS)
     AC_SUBST(ZFP_LDFLAGS)
 fi
+AC_SZ
 
 
 AC_LANG(C)
@@ -686,6 +695,28 @@ if test -z "${HAVE_SZIP_TRUE}"; then
     ADIOSREADLIB_SEQ_LDFLAGS="${ADIOSREADLIB_SEQ_LDFLAGS} ${SZIP_LDFLAGS}"
     ADIOSREADLIB_SEQ_LDADD="${ADIOSREADLIB_SEQ_LDADD} ${SZIP_LIBS}"
 fi
+if test -z "${HAVE_LZ4_TRUE}"; then
+    ADIOSLIB_CPPFLAGS="${ADIOSLIB_CPPFLAGS} -DLZ4 ${LZ4_CPPFLAGS}"
+    ADIOSLIB_CFLAGS="${ADIOSLIB_CFLAGS} ${LZ4_CFLAGS}"
+    ADIOSLIB_LDFLAGS="${ADIOSLIB_LDFLAGS} ${LZ4_LDFLAGS}"
+    ADIOSLIB_LDADD="${ADIOSLIB_LDADD} ${LZ4_LIBS}"
+    ADIOSLIB_SEQ_CPPFLAGS="${ADIOSLIB_SEQ_CPPFLAGS} -DLZ4 ${LZ4_CPPFLAGS}"
+    ADIOSLIB_SEQ_CFLAGS="${ADIOSLIB_SEQ_CFLAGS} ${LZ4_CFLAGS}"
+    ADIOSLIB_SEQ_LDFLAGS="${ADIOSLIB_SEQ_LDFLAGS} ${LZ4_LDFLAGS}"
+    ADIOSLIB_SEQ_LDADD="${ADIOSLIB_SEQ_LDADD} ${LZ4_LIBS}"
+    ADIOSLIB_INT_CPPFLAGS="${ADIOSLIB_INT_CPPFLAGS} -DLZ4 ${LZ4_CPPFLAGS}"
+    ADIOSLIB_INT_CFLAGS="${ADIOSLIB_INT_CFLAGS} ${LZ4_CFLAGS}"
+    ADIOSLIB_INT_LDFLAGS="${ADIOSLIB_INT_LDFLAGS} ${LZ4_LDFLAGS}"
+    ADIOSLIB_INT_LDADD="${ADIOSLIB_INT_LDADD} ${LZ4_LIBS}"
+    ADIOSREADLIB_CPPFLAGS="${ADIOSREADLIB_CPPFLAGS} -DLZ4 ${LZ4_CPPFLAGS}"
+    ADIOSREADLIB_CFLAGS="${ADIOSREADLIB_CFLAGS} ${LZ4_CFLAGS}"
+    ADIOSREADLIB_LDFLAGS="${ADIOSREADLIB_LDFLAGS} ${LZ4_LDFLAGS}"
+    ADIOSREADLIB_LDADD="${ADIOSREADLIB_LDADD} ${LZ4_LIBS}"
+    ADIOSREADLIB_SEQ_CPPFLAGS="${ADIOSREADLIB_SEQ_CPPFLAGS} -DLZ4 ${LZ4_CPPFLAGS}"
+    ADIOSREADLIB_SEQ_CFLAGS="${ADIOSREADLIB_SEQ_CFLAGS} ${LZ4_CFLAGS}"
+    ADIOSREADLIB_SEQ_LDFLAGS="${ADIOSREADLIB_SEQ_LDFLAGS} ${LZ4_LDFLAGS}"
+    ADIOSREADLIB_SEQ_LDADD="${ADIOSREADLIB_SEQ_LDADD} ${LZ4_LIBS}"
+fi
 if test -z "${HAVE_ZFP_TRUE}"; then
     ADIOSLIB_LDFLAGS="${ADIOSLIB_LDFLAGS} ${ZFP_LDFLAGS}"
     ADIOSLIB_LDADD="${ADIOSLIB_LDADD} ${ZFP_LIBS}"
@@ -698,6 +729,28 @@ if test -z "${HAVE_ZFP_TRUE}"; then
     ADIOSREADLIB_SEQ_LDFLAGS="${ADIOSREADLIB_SEQ_LDFLAGS} ${ZFP_LDFLAGS}"
     ADIOSREADLIB_SEQ_LDADD="${ADIOSREADLIB_SEQ_LDADD} ${ZFP_LIBS}"
 fi
+if test -z "${HAVE_SZ_TRUE}"; then
+    ADIOSLIB_CPPFLAGS="${ADIOSLIB_CPPFLAGS} ${SZ_CPPFLAGS}"
+    ADIOSLIB_CFLAGS="${ADIOSLIB_CFLAGS} ${SZ_CFLAGS}"
+    ADIOSLIB_LDFLAGS="${ADIOSLIB_LDFLAGS} ${SZ_LDFLAGS}"
+    ADIOSLIB_LDADD="${ADIOSLIB_LDADD} ${SZ_LIBS}"
+    ADIOSLIB_SEQ_CPPFLAGS="${ADIOSLIB_SEQ_CPPFLAGS} ${SZ_CPPFLAGS}"
+    ADIOSLIB_SEQ_CFLAGS="${ADIOSLIB_SEQ_CFLAGS} ${SZ_CFLAGS}"
+    ADIOSLIB_SEQ_LDFLAGS="${ADIOSLIB_SEQ_LDFLAGS} ${SZ_LDFLAGS}"
+    ADIOSLIB_SEQ_LDADD="${ADIOSLIB_SEQ_LDADD} ${SZ_LIBS}"
+    ADIOSLIB_INT_CPPFLAGS="${ADIOSLIB_INT_CPPFLAGS} ${SZ_CPPFLAGS}"
+    ADIOSLIB_INT_CFLAGS="${ADIOSLIB_INT_CFLAGS} ${SZ_CFLAGS}"
+    ADIOSLIB_INT_LDFLAGS="${ADIOSLIB_INT_LDFLAGS} ${SZ_LDFLAGS}"
+    ADIOSLIB_INT_LDADD="${ADIOSLIB_INT_LDADD} ${SZ_LIBS}"
+    ADIOSREADLIB_CPPFLAGS="${ADIOSREADLIB_CPPFLAGS} ${SZ_CPPFLAGS}"
+    ADIOSREADLIB_CFLAGS="${ADIOSREADLIB_CFLAGS} ${SZ_CFLAGS}"
+    ADIOSREADLIB_LDFLAGS="${ADIOSREADLIB_LDFLAGS} ${SZ_LDFLAGS}"
+    ADIOSREADLIB_LDADD="${ADIOSREADLIB_LDADD} ${SZ_LIBS}"
+    ADIOSREADLIB_SEQ_CPPFLAGS="${ADIOSREADLIB_SEQ_CPPFLAGS} ${SZ_CPPFLAGS}"
+    ADIOSREADLIB_SEQ_CFLAGS="${ADIOSREADLIB_SEQ_CFLAGS} ${SZ_CFLAGS}"
+    ADIOSREADLIB_SEQ_LDFLAGS="${ADIOSREADLIB_SEQ_LDFLAGS} ${SZ_LDFLAGS}"
+    ADIOSREADLIB_SEQ_LDADD="${ADIOSREADLIB_SEQ_LDADD} ${SZ_LIBS}"
+fi
 if test -z "${HAVE_ISOBAR_TRUE}"; then
     ADIOSLIB_CPPFLAGS="${ADIOSLIB_CPPFLAGS} -DISOBAR ${ISOBAR_CPPFLAGS}"
     ADIOSLIB_CFLAGS="${ADIOSLIB_CFLAGS} ${ISOBAR_CFLAGS}"
@@ -870,8 +923,8 @@ AC_CONFIG_FILES([Makefile
                  tests/C/flexpath_tests/1D_arr_global_noxml/Makefile
                  tests/C/flexpath_tests/global_range_select/Makefile
                  tests/C/flexpath_tests/maya_noxml/Makefile
-                 tests/C/flexpath_tests/maya_append/Makefile
                  tests/C/flexpath_tests/scalar/Makefile
+                 tests/C/flexpath_tests/local_arrays/Makefile
                  tests/C/fgr_tests/Makefile
                  tests/C/query/Makefile
                  tests/C/query/common/Makefile
@@ -1256,6 +1309,17 @@ else
     echo "  - No SZIP to build SZIP transform method"
 fi
 
+if test -z "${HAVE_LZ4_TRUE}"; then
+    echo "  - LZ4";
+    echo "      - LZ4_CFLAGS = $LZ4_CFLAGS";
+    echo "      - LZ4_CPPFLAGS = $LZ4_CPPFLAGS";
+    echo "      - LZ4_LDFLAGS = $LZ4_LDFLAGS";
+    echo "      - LZ4_LIBS = $LZ4_LIBS";
+    echo
+else
+    echo "  - No LZ4 to build LZ4 transform method"
+fi
+
 if test -z "${BUILD_ZFP_TRUE}"; then
     echo "  - ZFP is built with ADIOS";
 elif test -z "${HAVE_ZFP_TRUE}"; then
@@ -1268,6 +1332,17 @@ else
     echo "  - No ZFP to build ZFP transform method"
 fi
 
+if test -z "${HAVE_SZ_TRUE}"; then
+    echo "  - SZ";
+    echo "      - SZ_CFLAGS = $SZ_CFLAGS";
+    echo "      - SZ_CPPFLAGS = $SZ_CPPFLAGS";
+    echo "      - SZ_LDFLAGS = $SZ_LDFLAGS";
+    echo "      - SZ_LIBS = $SZ_LIBS";
+    echo
+else
+    echo "  - No SZ to build SZ transform method"
+fi
+
 if test -z "${HAVE_ISOBAR_TRUE}"; then
     echo "  - ISOBAR";
     echo "      - ISOBAR_CFLAGS = $ISOBAR_CFLAGS";
diff --git a/examples/C/Makefile.in b/examples/C/Makefile.in
index aa15858..b1acbca 100644
--- a/examples/C/Makefile.in
+++ b/examples/C/Makefile.in
@@ -99,7 +99,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -107,8 +107,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -333,6 +333,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -409,6 +413,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/examples/C/arrays/Makefile.in b/examples/C/arrays/Makefile.in
index 38a4f10..ae9c977 100644
--- a/examples/C/arrays/Makefile.in
+++ b/examples/C/arrays/Makefile.in
@@ -101,7 +101,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -109,8 +109,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -334,6 +334,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -410,6 +414,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/examples/C/attributes/Makefile.in b/examples/C/attributes/Makefile.in
index 630593b..12a3eb9 100644
--- a/examples/C/attributes/Makefile.in
+++ b/examples/C/attributes/Makefile.in
@@ -101,7 +101,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -109,8 +109,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -336,6 +336,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -412,6 +416,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/examples/C/flexpath_arrays/Makefile.in b/examples/C/flexpath_arrays/Makefile.in
index 2fbf59c..059f0e2 100644
--- a/examples/C/flexpath_arrays/Makefile.in
+++ b/examples/C/flexpath_arrays/Makefile.in
@@ -99,7 +99,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -107,8 +107,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -333,6 +333,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -409,6 +413,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/examples/C/flexpath_arrays/global_range_select/Makefile.in b/examples/C/flexpath_arrays/global_range_select/Makefile.in
index a546771..293ca32 100644
--- a/examples/C/flexpath_arrays/global_range_select/Makefile.in
+++ b/examples/C/flexpath_arrays/global_range_select/Makefile.in
@@ -101,7 +101,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -109,8 +109,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -334,6 +334,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -410,6 +414,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/examples/C/flexpath_arrays/process_select/Makefile.in b/examples/C/flexpath_arrays/process_select/Makefile.in
index d955394..d0d0f28 100644
--- a/examples/C/flexpath_arrays/process_select/Makefile.in
+++ b/examples/C/flexpath_arrays/process_select/Makefile.in
@@ -101,7 +101,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -109,8 +109,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -334,6 +334,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -410,6 +414,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/examples/C/global-array-time/Makefile.in b/examples/C/global-array-time/Makefile.in
index 831b477..83c58f8 100644
--- a/examples/C/global-array-time/Makefile.in
+++ b/examples/C/global-array-time/Makefile.in
@@ -104,7 +104,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -112,8 +112,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -365,6 +365,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -441,6 +445,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/examples/C/global-array/Makefile.in b/examples/C/global-array/Makefile.in
index 117611d..079f327 100644
--- a/examples/C/global-array/Makefile.in
+++ b/examples/C/global-array/Makefile.in
@@ -106,7 +106,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -114,8 +114,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -428,6 +428,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -504,6 +508,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/examples/C/global-array/adios_read_chunk.c b/examples/C/global-array/adios_read_chunk.c
index da7a3c6..23c3bd8 100644
--- a/examples/C/global-array/adios_read_chunk.c
+++ b/examples/C/global-array/adios_read_chunk.c
@@ -28,7 +28,7 @@ int main (int argc, char ** argv)
     int         rank, size, i, datasize;
     //int j;
     MPI_Comm    comm = MPI_COMM_WORLD;
-    enum ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP_AGGREGATE;
+    enum ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP;
     ADIOS_SELECTION * sel1;
     //ADIOS_SELECTION * sel2;
     //ADIOS_VARCHUNK * chunk = 0;
@@ -43,30 +43,32 @@ int main (int argc, char ** argv)
     adios_read_init_method (method, comm, "max_chunk_size=4;verbose=3;num_aggregators=2");
 
     ADIOS_FILE * f = adios_read_open_file ("adios_global.bp", method, comm);
-    ADIOS_VARINFO * varinfo = adios_inq_var (f, "temperature");
-    if (varinfo)
+    if (f != NULL)
     {
-        printf ("nsteps = %d\n", varinfo->nsteps);
-        for (i = 0; i < varinfo->nsteps; i++)
+        ADIOS_VARINFO * varinfo = adios_inq_var (f, "temperature");
+        if (varinfo)
         {
-            printf ("step: %d has %d", i, varinfo->nblocks[i]);
-        }
-        printf ("\n");
-        printf ("ndim = %d\n", varinfo->ndim);
-        printf ("dims = (");
-        datasize = 8;
-        for (i = 0; i < varinfo->ndim; i++)
-        {
-            datasize *= varinfo->dims[i];
-            printf ("%" PRIu64, varinfo->dims[i]);
-            if (i != varinfo->ndim - 1)
+            printf ("nsteps = %d\n", varinfo->nsteps);
+            for (i = 0; i < varinfo->nsteps; i++)
             {
-                printf (",");
+                printf ("step: %d has %d", i, varinfo->nblocks[i]);
             }
-        }
-        printf (")\n");
-        data = malloc (datasize);
-/*
+            printf ("\n");
+            printf ("ndim = %d\n", varinfo->ndim);
+            printf ("dims = (");
+            datasize = 8;
+            for (i = 0; i < varinfo->ndim; i++)
+            {
+                datasize *= varinfo->dims[i];
+                printf ("%" PRIu64, varinfo->dims[i]);
+                if (i != varinfo->ndim - 1)
+                {
+                    printf (",");
+                }
+            }
+            printf (")\n");
+            data = malloc (datasize);
+            /*
         adios_inq_var_blockinfo (f, varinfo);
         for (i = 0; i < varinfo->sum_nblocks; i++)
         {
@@ -83,15 +85,15 @@ int main (int argc, char ** argv)
             }
             printf ("\n");
         }
-*/
-        for (i = 0; i < varinfo->ndim; i++)
-        {
-            start[i] = 0;
-            count[i] = varinfo->dims[i];
-        }
+             */
+            for (i = 0; i < varinfo->ndim; i++)
+            {
+                start[i] = 0;
+                count[i] = varinfo->dims[i];
+            }
 
-        sel1 = adios_selection_boundingbox (varinfo->ndim, start, count);
-/*
+            sel1 = adios_selection_boundingbox (varinfo->ndim, start, count);
+            /*
         npoints = 1;
         for (i = 0; i < varinfo->ndim; i++)
         {
@@ -108,8 +110,8 @@ int main (int argc, char ** argv)
                 temp = temp/count[j];
             }
         }
-*/
-/*
+             */
+            /*
         for (i = 0; i < npoints; i++)
         {
             printf ("(");
@@ -121,48 +123,49 @@ int main (int argc, char ** argv)
         }
 
         printf ("\n");
-*/
-/*
+             */
+            /*
         sel2 = adios_selection_points (varinfo->ndim, npoints, points);
-*/
-        adios_schedule_read (f, sel1, "temperature", 0, 1, data);
-/*
+             */
+            adios_schedule_read (f, sel1, "temperature", 0, 1, data);
+            /*
         adios_schedule_read (f, sel2, "temperature", 0, 1, data);
-*/
-        adios_perform_reads (f, 1);
+             */
+            adios_perform_reads (f, 1);
 #if 0
-        while (adios_check_reads (f, &chunk) > 0)
-        {
-            datasize = 1;
-            for (i = 0; i < varinfo->ndim; i++)
+            while (adios_check_reads (f, &chunk) > 0)
             {
-                datasize *= chunk->sel->u.bb.count[i];
-            }
-            printf ("data:\n");
-/*
+                datasize = 1;
+                for (i = 0; i < varinfo->ndim; i++)
+                {
+                    datasize *= chunk->sel->u.bb.count[i];
+                }
+                printf ("data:\n");
+                /*
             for (i = 0; i < datasize; i ++)
             {
                 printf ("%7.4f ", * ((double *)chunk->data + i));
             }
             printf ("\n");
-*/
-            for (i = 0; i < 10; i ++)
-            {
-                printf ("%7.4f ", * ((double *)chunk->data + i));
-            }
-            printf ("\n");
+                 */
+                for (i = 0; i < 10; i ++)
+                {
+                    printf ("%7.4f ", * ((double *)chunk->data + i));
+                }
+                printf ("\n");
 
-            adios_free_chunk (chunk);
-        }
+                adios_free_chunk (chunk);
+            }
 #endif
-        adios_selection_delete (sel1);
-/*
+            adios_selection_delete (sel1);
+            /*
         adios_selection_delete (sel2);
-*/
-    }
+             */
+        }
 
-    adios_free_varinfo (varinfo);
-    adios_read_close (f);
+        adios_free_varinfo (varinfo);
+        adios_read_close (f);
+    }
 
     adios_read_finalize_method (ADIOS_READ_METHOD_BP);
     MPI_Finalize ();
diff --git a/examples/C/global-array/adios_read_global.c b/examples/C/global-array/adios_read_global.c
index e43c4f0..09abafa 100644
--- a/examples/C/global-array/adios_read_global.c
+++ b/examples/C/global-array/adios_read_global.c
@@ -42,46 +42,47 @@ int main (int argc, char ** argv)
     if (f == NULL)
     {
         printf ("%s\n", adios_errmsg());
-        return -1;
     }
+    else
+    {
+        ADIOS_VARINFO * v = adios_inq_var (f, "temperature");
 
-    ADIOS_VARINFO * v = adios_inq_var (f, "temperature");
+        /* Using less readers to read the global array back, i.e., non-uniform */
+        uint64_t slice_size = v->dims[0]/size;
+        start[0] = slice_size * rank;
+        if (rank == size-1) /* last rank may read more lines */
+            slice_size = slice_size + v->dims[0]%size;
+        count[0] = slice_size;
 
-    /* Using less readers to read the global array back, i.e., non-uniform */
-    uint64_t slice_size = v->dims[0]/size;
-    start[0] = slice_size * rank;
-    if (rank == size-1) /* last rank may read more lines */
-        slice_size = slice_size + v->dims[0]%size;
-    count[0] = slice_size;
+        start[1] = 0;
+        count[1] = v->dims[1];
 
-    start[1] = 0;
-    count[1] = v->dims[1];
-       
 
-    data = malloc (slice_size * v->dims[1] * sizeof (double));
-    if (data == NULL)
-    {
-        fprintf (stderr, "malloc failed.\n");
-        return -1;
-    }
+        data = malloc (slice_size * v->dims[1] * sizeof (double));
+        if (data == NULL)
+        {
+            fprintf (stderr, "malloc failed.\n");
+            return -1;
+        }
 
-    /* Read a subset of the temperature array */
-    sel = adios_selection_boundingbox (v->ndim, start, count);
-    adios_schedule_read (f, sel, "temperature", 0, 1, data);
-    adios_perform_reads (f, 1);
+        /* Read a subset of the temperature array */
+        sel = adios_selection_boundingbox (v->ndim, start, count);
+        adios_schedule_read (f, sel, "temperature", 0, 1, data);
+        adios_perform_reads (f, 1);
 
-    for (i = 0; i < slice_size; i++) {
-        printf ("rank %d: [%" PRIu64 ",%d:%" PRIu64 "]", rank, start[0]+i, 0, slice_size);
-        for (j = 0; j < v->dims[1]; j++)
-            printf (" %6.6g", * ((double *)data + i * v->dims[1] + j));
-        printf ("\n");
-    }
+        for (i = 0; i < slice_size; i++) {
+            printf ("rank %d: [%" PRIu64 ",%d:%" PRIu64 "]", rank, start[0]+i, 0, slice_size);
+            for (j = 0; j < v->dims[1]; j++)
+                printf (" %6.6g", * ((double *)data + i * v->dims[1] + j));
+            printf ("\n");
+        }
 
-    free (data);
-    adios_selection_delete (sel);
-    adios_free_varinfo (v);
-    adios_read_close (f);
-    MPI_Barrier (comm);
+        free (data);
+        adios_selection_delete (sel);
+        adios_free_varinfo (v);
+        adios_read_close (f);
+        MPI_Barrier (comm);
+    }
     adios_read_finalize_method (method);
     MPI_Finalize ();
     return 0;
diff --git a/examples/C/global-array/adios_read_gpp.c b/examples/C/global-array/adios_read_gpp.c
index 98ebc07..1aefd5b 100644
--- a/examples/C/global-array/adios_read_gpp.c
+++ b/examples/C/global-array/adios_read_gpp.c
@@ -20,7 +20,7 @@ int main (int argc, char ** argv)
 {
 	char        filename [256];
 	int         rank, size, i;
-	int         NX = 4096; 
+	int         NX = 10;
 	double      t[NX];
 	MPI_Comm    comm = MPI_COMM_WORLD;
 
@@ -37,19 +37,20 @@ int main (int argc, char ** argv)
     //adios_read_init_method (ADIOS_READ_METHOD_BP, comm, "");
 
     fp = adios_read_open_file ("adios_global.bp", ADIOS_READ_METHOD_BP, comm);
+    if (fp != NULL) {
 
-    #include "gread_temperature.ch"
+#include "gread_temperature.ch"
 
-    adios_read_close (fp);
+        adios_read_close (fp);
 
-    // Verify data
-	for (i = 0; i < NX; i++)
-		if (t[i] != rank*NX + i)
-        {
-            fprintf (stderr, "Error detected\n");
-        }
+        // Verify data
+        for (i = 0; i < NX; i++)
+            if (t[i] != rank*NX + i)
+            {
+                fprintf (stderr, "Error detected\n");
+            }
+    }
 
-    
     adios_read_finalize_method (ADIOS_READ_METHOD_BP);
 
 	MPI_Finalize ();
diff --git a/examples/C/global-array/adios_read_writeblock.c b/examples/C/global-array/adios_read_writeblock.c
index 1638fd8..8b96090 100644
--- a/examples/C/global-array/adios_read_writeblock.c
+++ b/examples/C/global-array/adios_read_writeblock.c
@@ -38,57 +38,61 @@ int main (int argc, char ** argv)
     adios_read_init_method (method, comm, "verbose=4");
 
     ADIOS_FILE * f = adios_read_open_file ("adios_global.bp", method, comm);
-    ADIOS_VARINFO * varinfo = adios_inq_var (f, "temperature");
-    if (varinfo)
+    if (f != NULL)
     {
-        printf ("nsteps = %d\n", varinfo->nsteps);
-        for (i = 0; i < varinfo->nsteps; i++)
+        printf ("rank %d: Passed adios_read_open_file\n", rank);
+        ADIOS_VARINFO * varinfo = adios_inq_var (f, "temperature");
+        if (varinfo)
         {
-            printf ("step: %d has %d", i, varinfo->nblocks[i]);
-        }
-        printf ("\n");
-
-        adios_inq_var_blockinfo (f, varinfo);
-        for (i = 0; i < varinfo->sum_nblocks; i++)
-        {
-            printf ("block[%d]: ", i);
-            printf ("start=");
-            for (j = 0; j < varinfo->ndim; j++)
+            printf ("nsteps = %d\n", varinfo->nsteps);
+            for (i = 0; i < varinfo->nsteps; i++)
             {
-                printf ("%" PRIu64, varinfo->blockinfo[i].start[j]);
+                printf ("step: %d has %d", i, varinfo->nblocks[i]);
             }
-            printf ("count=");
-            for (j = 0; j < varinfo->ndim; j++)
+            printf ("\n");
+
+            adios_inq_var_blockinfo (f, varinfo);
+            for (i = 0; i < varinfo->sum_nblocks; i++)
             {
-                printf ("%" PRIu64, varinfo->blockinfo[i].count[j]);
+                printf ("block[%d]: ", i);
+                printf ("start=");
+                for (j = 0; j < varinfo->ndim; j++)
+                {
+                    printf ("%" PRIu64, varinfo->blockinfo[i].start[j]);
+                }
+                printf ("count=");
+                for (j = 0; j < varinfo->ndim; j++)
+                {
+                    printf ("%" PRIu64, varinfo->blockinfo[i].count[j]);
+                }
+                printf ("\n");
             }
-            printf ("\n");
-        }
 
-        datasize = 8;
-        for (i = 0; i < varinfo->ndim; i++)
-        {
-            datasize *= varinfo->blockinfo[rank].count[i];
-        }
+            datasize = 8;
+            for (i = 0; i < varinfo->ndim; i++)
+            {
+                datasize *= varinfo->blockinfo[rank].count[i];
+            }
 
-        data = malloc (datasize);
+            data = malloc (datasize);
 
-        sel = adios_selection_writeblock (rank);
-        adios_schedule_read (f, sel, "temperature", 0, 1, data);
-        adios_perform_reads (f, 1);
-        adios_selection_delete (sel);
-    }
+            sel = adios_selection_writeblock (rank);
+            adios_schedule_read (f, sel, "temperature", 0, 1, data);
+            adios_perform_reads (f, 1);
+            adios_selection_delete (sel);
+        }
 
-    adios_free_varinfo (varinfo);
-    adios_read_close (f);
+        adios_free_varinfo (varinfo);
+        adios_read_close (f);
 
-    printf ("data:\n");
-    for (i = 0; i < datasize/8; i ++)
-    {
-        printf ("%7.4f ", * ((double *)data + i));
+        printf ("data:\n");
+        for (i = 0; i < datasize/8; i ++)
+        {
+            printf ("%7.4f ", * ((double *)data + i));
+        }
+        printf ("\n");
+        free (data);
     }
-    printf ("\n");
-    free (data);
     adios_read_finalize_method (ADIOS_READ_METHOD_BP);
     MPI_Finalize ();
     return 0;
diff --git a/examples/C/global-array/gread_temperature.ch b/examples/C/global-array/gread_temperature.ch
index 4c16e85..15e2e03 100644
--- a/examples/C/global-array/gread_temperature.ch
+++ b/examples/C/global-array/gread_temperature.ch
@@ -1,4 +1,4 @@
 s = adios_selection_writeblock (rank);
-adios_schedule_read (fp, s, "temperature", 1, 1, t);
+adios_schedule_read (fp, s, "temperature", 0, 1, t);
 adios_perform_reads (fp, 1);
 adios_selection_delete (s);
diff --git a/examples/C/icee_arrays/Makefile.in b/examples/C/icee_arrays/Makefile.in
index da03f1b..bc6959c 100644
--- a/examples/C/icee_arrays/Makefile.in
+++ b/examples/C/icee_arrays/Makefile.in
@@ -99,7 +99,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -107,8 +107,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -333,6 +333,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -409,6 +413,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/examples/C/icee_arrays/array/Makefile.in b/examples/C/icee_arrays/array/Makefile.in
index 7c95530..efb0978 100644
--- a/examples/C/icee_arrays/array/Makefile.in
+++ b/examples/C/icee_arrays/array/Makefile.in
@@ -101,7 +101,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -109,8 +109,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -334,6 +334,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -410,6 +414,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/examples/C/manual/Makefile.in b/examples/C/manual/Makefile.in
index 094fe39..a2fc3c9 100644
--- a/examples/C/manual/Makefile.in
+++ b/examples/C/manual/Makefile.in
@@ -102,7 +102,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -110,8 +110,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -353,6 +353,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -429,6 +433,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/examples/C/query/Makefile.in b/examples/C/query/Makefile.in
index 8dbcb88..22ff16e 100644
--- a/examples/C/query/Makefile.in
+++ b/examples/C/query/Makefile.in
@@ -102,7 +102,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -110,8 +110,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -351,6 +351,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -427,6 +431,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/examples/C/query/query_table.c b/examples/C/query/query_table.c
index 9b06a79..03252cb 100644
--- a/examples/C/query/query_table.c
+++ b/examples/C/query/query_table.c
@@ -137,7 +137,7 @@ void query_columns(ADIOS_FILE* f, enum ADIOS_QUERY_METHOD method, ADIOS_VARINFO
                 break;
             }
 
-            printf("Number of hits returned in batch %d = %lld points in %d containers\n",
+            printf("Number of hits returned in batch %d = %" PRIu64 " points in %d containers\n",
                     nBatches, result->npoints, result->nselections);
 
             int n;
diff --git a/examples/C/query/query_vars.c b/examples/C/query/query_vars.c
index 1ec8cad..83c9f47 100644
--- a/examples/C/query/query_vars.c
+++ b/examples/C/query/query_vars.c
@@ -48,7 +48,7 @@ void print_block (ADIOS_VARINFO *vi, int blockid, double *P, double *V, double *
     int n;
     printf ("    Block %d of dimensions { ", blockid);
     for (n=0; n < vi->ndim; n++) {
-        printf ("%lld ", vi->blockinfo[blockid].count[n]);
+        printf ("%" PRIu64 " ", vi->blockinfo[blockid].count[n]);
     }
     printf ("}\n");
 }
@@ -94,7 +94,7 @@ void query_OneBoundBoxForAllVars(ADIOS_FILE* f, enum ADIOS_QUERY_METHOD method)
             if (result->selections->type == ADIOS_SELECTION_POINTS)
             {
                 // we have selection(s) and each one contains the points
-                printf("Number of hits returned in batch %d = %lld points in %d containers\n",
+                printf("Number of hits returned in batch %d = %" PRIu64 " points in %d containers\n",
                         nBatches, result->npoints, result->nselections);
 
                 for (i=0; i < result->nselections; i++)
diff --git a/examples/C/read_all/Makefile.in b/examples/C/read_all/Makefile.in
index dc80a3f..7e1920c 100644
--- a/examples/C/read_all/Makefile.in
+++ b/examples/C/read_all/Makefile.in
@@ -101,7 +101,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -109,8 +109,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -334,6 +334,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -410,6 +414,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/examples/C/scalars/Makefile.in b/examples/C/scalars/Makefile.in
index 87dded8..5d1c6d1 100644
--- a/examples/C/scalars/Makefile.in
+++ b/examples/C/scalars/Makefile.in
@@ -102,7 +102,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -110,8 +110,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -345,6 +345,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -421,6 +425,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/examples/C/schema/Makefile.in b/examples/C/schema/Makefile.in
index 1da114b..0190052 100644
--- a/examples/C/schema/Makefile.in
+++ b/examples/C/schema/Makefile.in
@@ -104,7 +104,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -112,8 +112,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -395,6 +395,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -471,6 +475,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/examples/C/stat/Makefile.in b/examples/C/stat/Makefile.in
index 88f3573..695de9d 100644
--- a/examples/C/stat/Makefile.in
+++ b/examples/C/stat/Makefile.in
@@ -101,7 +101,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -109,8 +109,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -334,6 +334,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -410,6 +414,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/examples/C/time_aggregation/Makefile.in b/examples/C/time_aggregation/Makefile.in
index 4a32703..e0c5faf 100644
--- a/examples/C/time_aggregation/Makefile.in
+++ b/examples/C/time_aggregation/Makefile.in
@@ -102,7 +102,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -110,8 +110,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -341,6 +341,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -417,6 +421,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/examples/C/transforms/Makefile.in b/examples/C/transforms/Makefile.in
index 8c45625..41697ca 100644
--- a/examples/C/transforms/Makefile.in
+++ b/examples/C/transforms/Makefile.in
@@ -102,7 +102,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -110,8 +110,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -354,6 +354,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -430,6 +434,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/examples/Fortran/Makefile.in b/examples/Fortran/Makefile.in
index 1f966d5..7b7f29e 100644
--- a/examples/Fortran/Makefile.in
+++ b/examples/Fortran/Makefile.in
@@ -99,7 +99,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -107,8 +107,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -333,6 +333,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -409,6 +413,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/examples/Fortran/arrays/Makefile.in b/examples/Fortran/arrays/Makefile.in
index fc96393..bc4537d 100644
--- a/examples/Fortran/arrays/Makefile.in
+++ b/examples/Fortran/arrays/Makefile.in
@@ -101,7 +101,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -109,8 +109,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -331,6 +331,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -407,6 +411,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/examples/Fortran/global-array-time/Makefile.in b/examples/Fortran/global-array-time/Makefile.in
index 9a444da..9db1899 100644
--- a/examples/Fortran/global-array-time/Makefile.in
+++ b/examples/Fortran/global-array-time/Makefile.in
@@ -101,7 +101,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -109,8 +109,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -325,6 +325,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -401,6 +405,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/examples/Fortran/global-array/Makefile.in b/examples/Fortran/global-array/Makefile.in
index a576d12..7a000b0 100644
--- a/examples/Fortran/global-array/Makefile.in
+++ b/examples/Fortran/global-array/Makefile.in
@@ -102,7 +102,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -110,8 +110,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -343,6 +343,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -419,6 +423,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/examples/Fortran/scalars/Makefile.in b/examples/Fortran/scalars/Makefile.in
index 9e8ddf1..53e09b6 100644
--- a/examples/Fortran/scalars/Makefile.in
+++ b/examples/Fortran/scalars/Makefile.in
@@ -101,7 +101,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -109,8 +109,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -331,6 +331,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -407,6 +411,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/examples/Fortran/schema/Makefile.in b/examples/Fortran/schema/Makefile.in
index 795c3d8..a431e6c 100644
--- a/examples/Fortran/schema/Makefile.in
+++ b/examples/Fortran/schema/Makefile.in
@@ -103,7 +103,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -111,8 +111,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -362,6 +362,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -438,6 +442,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/examples/Makefile.in b/examples/Makefile.in
index f1633ca..ea3e779 100644
--- a/examples/Makefile.in
+++ b/examples/Makefile.in
@@ -99,7 +99,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -107,8 +107,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -333,6 +333,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -409,6 +413,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/examples/staging/stage_write/stage_write.c b/examples/staging/stage_write/stage_write.c
index bd6dfd2..326d358 100644
--- a/examples/staging/stage_write/stage_write.c
+++ b/examples/staging/stage_write/stage_write.c
@@ -302,7 +302,7 @@ int process_metadata(int step)
     adios_get_grouplist(f, &group_namelist);
     group_name = strdup (group_namelist[0]);
     print0("Group name is %s\n", group_name);
-    adios_declare_group(&gh,group_name,"",adios_flag_yes);
+    adios_declare_group(&gh,group_name,"",adios_stat_default);
 
 
     varinfo = (VarInfo *) malloc (sizeof(VarInfo) * f->nvars);
diff --git a/examples/staging/stage_write_varyingsize/stage_write.c b/examples/staging/stage_write_varyingsize/stage_write.c
index b35806e..4c0be69 100644
--- a/examples/staging/stage_write_varyingsize/stage_write.c
+++ b/examples/staging/stage_write_varyingsize/stage_write.c
@@ -317,7 +317,7 @@ int process_metadata(int step)
         adios_get_grouplist(f, &group_namelist);
         group_name = strdup (group_namelist[0]);
         print0("Group name is %s\n", group_name);
-        adios_declare_group(&gh,group_name,"",adios_flag_yes);
+        adios_declare_group(&gh,group_name,"",adios_stat_default);
     }
 
     varinfo = (VarInfo *) malloc (sizeof(VarInfo) * f->nvars);
diff --git a/runconf b/runconf
index 25629a7..74b287d 100755
--- a/runconf
+++ b/runconf
@@ -6,131 +6,7 @@
 
 SRCDIR=`dirname ${BASH_SOURCE[0]}`
 
-if [ `hostname | cut -c 1-4` == "sith" ]; then
-
-    ########
-    # Sith #
-    ########
-    source /etc/profile.d/modules.sh
-    TARGET=`module list 2>&1 | grep "PE"- | sed "s/^.*PE-\([a-z]*\).*/\1/"`
-
-    if [ -z "$TARGET" ]; then
-        echo "Cannot determine Programming environment. Exit"
-        exit 1
-    fi
-    echo "Configure on SITH for $TARGET env. for user ${USER}"
-    module unload hdf5
-    module unload netcdf
-    module unload python
-    #module unload PE-gnu
-    #module unload PE-pgi
-    #module unload PE-intel
-    #module unload PE-pathscale
-    #module unload pgi gcc intel pathscale
-    #module load PE-$TARGET
-    module load python
-    # Use both seq hdf5 (for utils) and 
-    #   parallel hdf5 (for PHDF5 method)
-    module load hdf5/1.8.10
-    SEQ_HDF5_DIR=$HDF5_DIR
-    SEQ_HDF5_CLIB=$HDF5_CLIB
-    module unload hdf5
-    module load hdf5/1.8.10_par
-    PAR_HDF5_DIR=$HDF5_DIR
-    PAR_HDF5_CLIB=$HDF5_CLIB
-    module unload hdf5
-    # Seq. and Parallel NetCDF 4 
-    module load netcdf/4.1.3
-    SEQ_NC_DIR=$NETCDF_DIR
-    SEQ_NC_CLIB=$NETCDF_CLIB
-    module unload netcdf
-    module load netcdf/4.1.3_par
-    PAR_NC_DIR=$NETCDF_DIR
-    PAR_NC_CLIB=$NETCDF_CLIB
-    module unload netcdf
-    #module load szip
-    module load bzip2
-    module unload dataspaces
-    unset DATASPACES_DIR
-    module load dataspaces/1.6.0
-    export MPICC=mpicc
-    export MPICXX=mpiCC
-    export MPIFC=mpif90
-    export CPPFLAGS="-DMPICH_IGNORE_CXX_SEEK" 
-    export CFLAGS="-g -O0 -fPIC" 
-    export CXXFLAGS="-g -O0 -fPIC" 
-    export FCFLAGS="-g -O0 -fPIC" 
-    WITHFLEX=""
-    WITHFGR=""
-    WITHFASTBIT=""
-    WITHALACRITY=""
-    if [ "$TARGET" == "pgi" ]; then
-        export CC=pgcc
-        export CXX=pgCC
-        export FC=pgf90
-        WITHFLEX="--with-flexpath=/ccs/proj/e2e/chaos/sith/$TARGET"
-        WITHFGR="--with-fgr=/ccs/proj/e2e/qliu/tap" 
-        WITHALACRITY="--with-alacrity=/ccs/proj/e2e/ncsu/alacrity/sith/pgi"
-        WITHFASTBIT="--with-fastbit=/sw/redhat6/fastbit/svn/rhel6_gnu4.4.7"
-        #DATASPACES_DIR="/ccs/proj/e2e/dataspaces/sith-tcp/1.6.pgi"
-        #DATASPACES_DIR="/ccs/home/hbui/usr/software/dataspaces-dev"
-    elif [ "$TARGET" == "gnu" ]; then
-        export CC=gcc
-        export CXX=g++
-        export FC=gfortran
-        #export CFLAGS="$CFLAGS -gdwarf-3" 
-        #export FCFLAGS="$FCFLAGS -gdwarf-3" 
-        WITHFLEX="--with-flexpath=/ccs/proj/e2e/chaos/sith/$TARGET"
-        WITHALACRITY="--with-alacrity=/ccs/proj/e2e/ncsu/alacrity/sith/gnu"
-        WITHFASTBIT="--with-fastbit=/sw/redhat6/fastbit/svn/rhel6_gnu4.8.2"
-        #DATASPACES_DIR="/ccs/proj/e2e/dataspaces/sith-tcp/1.6.gnu"
-    elif [ "$TARGET" == "intel" ]; then
-        export CC=icc
-        export CXX=icpc
-        export FC=ifort
-        WITHALACRITY="--with-alacrity=/ccs/proj/e2e/ncsu/alacrity/sith/intel"
-        WITHFASTBIT="--with-fastbit=/sw/redhat6/fastbit/svn/rhel6_gnu4.8.2"
-    else
-        echo "TARGET must be pgi or gnu or intel"
-        exit 1
-    fi
-        
-    $SRCDIR/configure --prefix=/ccs/proj/e2e/${USER}/ADIOS/sith.$TARGET \
-        --config-cache \
-        --disable-maintainer-mode \
-        --enable-dependency-tracking \
-        --enable-research-transports \
-        --with-lustre \
-        --with-hdf5=${SEQ_HDF5_DIR} \
-        --with-hdf5-libs="${SEQ_HDF5_CLIB}" \
-        --with-zlib \
-        --with-bzip2=$BZIP2_DIR \
-        --with-dataspaces=$DATASPACES_DIR \
-        $WITHFLEX \
-        $WITHFASTBIT \
-        $WITHALACRITY \
-        --with-aplod=/ccs/proj/e2e/ncsu/sith.gnu \
-        --with-isobar=/ccs/proj/e2e/ncsu/sith.gnu \
-        #$WITHFASTBIT \
-        #--with-netcdf=${SEQ_NC_DIR} \
-        #--with-netcdf-libs="${SEQ_NC_CLIB}" \
-        #--with-dimes=$DATASPACES_DIR \
-        #--with-glib=/ccs/proj/e2e/qliu/glib
-        #$WITHFGR \
-        #--with-szip=$SZIP_DIR \
-        #--with-phdf5=${PAR_HDF5_DIR} \
-        #--with-phdf5-libs="${PAR_HDF5_CLIB}" \
-        #--with-nc4par=${PAR_NC_DIR} \
-        #--with-nc4par-libs="${PAR_NC_CLIB}" \
-        #--with-dmalloc=/ccs/proj/e2e/qliu/dmalloc.sith.$TARGET 
-        #--with-dmalloc=/ccs/proj/e2e/pnorbert/dmalloc.$TARGET 
-        #--enable-shared --disable-static
-        #--without-datatap #--without-infiniband
-        #--with-dmalloc=/ccs/proj/e2e/pnorbert/dmalloc.$TARGET 
-        #--with-datatap=/ccs/home/habbasi/work/ewok/
-        #--enable-datatap=ib
-
-elif [ `hostname | cut -c 1-4` == "rhea" ]; then
+if [ `hostname | cut -c 1-4` == "rhea" ]; then
 
     ########
     # Rhea #
@@ -174,13 +50,14 @@ elif [ `hostname | cut -c 1-4` == "rhea" ]; then
     #module unload netcdf
     #module load szip
     #module load bzip2
-    module load dataspaces/1.6.1
-    module load flexpath/stable
+    module load dataspaces/1.6.2
+    module load flexpath/1.12
     module load alacrity/1.0.0
     module load fastbit/svn
     export MPICC=mpicc
     export MPICXX=mpiCC
     export MPIFC=mpif90
+    unset EXTRA_CFLAGS
     if [ "$TARGET" == "pgi" ]; then
         export CC=pgcc
         export CXX=pgCC
@@ -193,6 +70,7 @@ elif [ `hostname | cut -c 1-4` == "rhea" ]; then
         export CC=icc
         export CXX=icpc
         export FC=ifort
+        export EXTRA_CFLAGS="-std=c99"
         WITHFLEX=""
     else
         echo "TARGET must be pgi or gnu or intel"
@@ -200,7 +78,7 @@ elif [ `hostname | cut -c 1-4` == "rhea" ]; then
     fi
         
     export CPPFLAGS="-DMPICH_IGNORE_CXX_SEEK" 
-    export CFLAGS="-g -fPIC" 
+    export CFLAGS="-g -fPIC ${EXTRA_CFLAGS}" 
     $SRCDIR/configure --prefix=/ccs/proj/e2e/${USER}/ADIOS/rhea.$TARGET \
         --disable-maintainer-mode \
         --enable-dependency-tracking \
@@ -212,8 +90,8 @@ elif [ `hostname | cut -c 1-4` == "rhea" ]; then
         --with-zlib \
         --with-bzip2 \
         --with-fastbit=$FASTBIT_DIR \
-        #--with-hdf5=${SEQ_HDF5_DIR} \
-        #--with-hdf5-libs="${SEQ_HDF5_CLIB}" \
+        --with-hdf5=${SEQ_HDF5_DIR} \
+        --with-hdf5-libs="${SEQ_HDF5_CLIB}" \
         #--with-phdf5=${PAR_HDF5_DIR} \
         #--with-phdf5-libs="${PAR_HDF5_CLIB}" \
         #--with-netcdf=${SEQ_NC_DIR} \
@@ -226,91 +104,6 @@ elif [ `hostname | cut -c 1-4` == "rhea" ]; then
         #--with-glib=/ccs/proj/e2e/qliu/glib
         #--with-szip=$SZIP_DIR \
 
-elif [ `hostname | cut -c 1-4` == "yona" ]; then
-
-    ########
-    # Yona #
-    ########
-    source /etc/profile.d/modules.sh
-    TARGET=`module list 2>&1 | grep "PE"- | sed "s/^.*PE-\([a-z]*\).*/\1/"`
-    echo "Configure on Yona for $TARGET env."
-    module unload hdf5
-    module unload netcdf
-    module unload PE-gnu
-    module unload PE-pgi
-    module unload PE-intel
-    module unload PE-pathscale
-    module unload pgi gcc intel pathscale
-    #module unload python
-    module load PE-$TARGET
-    #module load python
-    # Use both seq hdf5 (for utils) and 
-    #   parallel hdf5 (for PHDF5 method)
-    module load hdf5/1.8.5
-    SEQ_HDF5_DIR=$HDF5_DIR
-    SEQ_HDF5_CLIB=$HDF5_CLIB
-    module unload hdf5
-    #module load hdf5/1.8.5_par
-    #PAR_HDF5_DIR=$HDF5_DIR
-    #PAR_HDF5_CLIB=$HDF5_CLIB
-    #module unload hdf5
-    # Seq. and Parallel NetCDF 4 
-    module load netcdf/3.6.2
-    SEQ_NC_DIR=$NETCDF_DIR
-    SEQ_NC_CLIB=$NETCDF_CLIB
-    module unload netcdf
-    #module load netcdf/4.1.1_par
-    #PAR_NC_DIR=$NETCDF_DIR
-    #PAR_NC_CLIB=$NETCDF_CLIB
-    #module unload netcdf
-    export MPICC=mpicc
-    export MPICXX=mpiCC
-    export MPIFC=mpif90
-    if [ "$TARGET" == "pgi" ]; then
-        export CC=pgcc
-        export CXX=pgCC
-        export FC=pgf90
-    elif [ "$TARGET" == "gnu" ]; then
-        export CC=gcc
-        export CXX=g++
-        export FC=gfortran
-    elif [ "$TARGET" == "intel" ]; then
-        export CC=pgcc
-        export CXX=pgCC
-        export FC=pgf90
-    elif [ "$TARGET" == "gnu" ]; then
-        export CC=gcc
-        export CXX=g++
-        export FC=gfortran
-    elif [ "$TARGET" == "intel" ]; then
-        export CC=icc
-        export CXX=icpc
-        export FC=ifort
-    else
-        echo "TARGET must be pgi or gnu or intel"
-        exit 1
-    fi
-        
-    export CFLAGS="-g -fPIC" 
-    ${SRCDIR}/configure --prefix=/ccs/proj/e2e/pnorbert/ADIOS/yona.$TARGET \
-        --config-cache \
-        --disable-maintainer-mode \
-        --enable-dependency-tracking \
-        --enable-research-transports  \
-        --with-hdf5=${SEQ_HDF5_DIR} \
-        --with-hdf5-libs="${SEQ_HDF5_CLIB}" \
-        --with-netcdf=${SEQ_NC_DIR} \
-        --with-netcdf-libs="${SEQ_NC_CLIB}" \
-        --with-lustre=/usr \
-        --without-datatap --without-infiniband
-        #--with-phdf5=${PAR_HDF5_DIR} \
-        #--with-phdf5-libs="${PAR_HDF5_CLIB}" \
-        #--with-nc4par=${PAR_NC_DIR} \
-        #--with-nc4par-libs="${PAR_NC_CLIB}" \
-        #--with-dmalloc=/ccs/proj/e2e/pnorbert/dmalloc.$TARGET 
-        #--with-datatap=/ccs/home/habbasi/work/ewok/
-        #--enable-datatap=ib
-
 
 elif [ `hostname | cut -c 1-5` == "titan" ]; then
 
@@ -334,6 +127,7 @@ elif [ `hostname | cut -c 1-5` == "titan" ]; then
     module unload craype-mc8 craype-mc12
     module load craype-istanbul
     module load dataspaces # /1.6.1
+    module load flexpath # /1.12
     unset EXTRA_CFLAGS
     unset EXTRA_LIBS
     unset LDFLAGS
@@ -348,7 +142,6 @@ elif [ `hostname | cut -c 1-5` == "titan" ]; then
         #export EXTRA_LIBS="/opt/gcc/4.9.0/snos/lib64/libstdc++.a"
         export EXTRA_CFLAGS="-fast"
         #DATASPACES_DIR="/ccs/proj/e2e/dataspaces/titan/$target-cpu"
-        module load flexpath/stable
         WITHFLEX="--with-flexpath=$FLEXPATH_DIR"
     elif [ "$TARGET" == "gnu" ]; then
         #export CC=gcc
@@ -360,7 +153,8 @@ elif [ `hostname | cut -c 1-5` == "titan" ]; then
         # NSSI/FLEXPATH/FASTBIT needs libstdc++
         export LDFLAGS="" 
         module load fastbit
-        WITHFLEX="--with-flexpath=/ccs/proj/e2e/chaos/titan/$TARGET"
+        WITHFLEX="--with-flexpath=$FLEXPATH_DIR"
+        #WITHFLEX="--with-flexpath=/ccs/proj/e2e/chaos/titan/$TARGET"
         # FASTBIT needs libstdc++
         WITHFASTBIT="--with-fastbit=$FASTBIT_DIR"
         #export EXTRA_LIBS="${GCC_PATH}/snos/lib64/libstdc++.a"
@@ -474,7 +268,8 @@ elif [ `hostname | cut -c 1-7` == "chester" ]; then
       module unload netcdf-hdf5parallel
       module unload hdf5-parallel
       module swap craype-interlagos craype-istanbul
-      module load dataspaces/1.6.0
+      module load dataspaces # /1.6.2
+      module load flexpath # /1.12
       module load fastbit
       WITHFASTBIT=""
       WITHALACRITY=""
@@ -487,6 +282,7 @@ elif [ `hostname | cut -c 1-7` == "chester" ]; then
           export MPICXX=CC
           # FASTBIT, ALACRITY need -pgcpplibs flag 
           WITHALACRITY="--with-alacrity=/ccs/proj/e2e/ncsu/alacrity/xk6/pgi"
+          export FLEXPATH="--with-flexpath=$FLEXPATH_DIR"
           export LDFLAGS="-pgc++libs" 
           unset EXTRA_LIBS 
       elif [ "$TARGET" == "gnu" ]; then
@@ -502,7 +298,8 @@ elif [ `hostname | cut -c 1-7` == "chester" ]; then
           #WITHFASTBIT="--with-fastbit=${FASTBIT_DIR}"
           #export LDFLAGS="-static -static-libstdc++"
           #export EXTRA_LIBS="${GCC_PATH}/snos/lib64/libstdc++.a"
-          export FLEXPATH="--with-flexpath=/ccs/proj/e2e/chaos/titan/gnu"
+          #export FLEXPATH="--with-flexpath=/ccs/proj/e2e/chaos/titan/gnu"
+          export FLEXPATH="--with-flexpath=$FLEXPATH_DIR"
           #module swap gcc gcc/4.4.4
       elif [ "$TARGET" == "cray" ]; then
           export EXTRA_CFLAGS="-h gnu"
@@ -536,6 +333,341 @@ elif [ `hostname | cut -c 1-7` == "chester" ]; then
 #          --with-cray-ugni-incdir=/opt/cray/gni-headers/2.1-1.0400.4351.3.1.gem/include \
             
 
+elif [ `hostname -f | cut -c 1-9` == "summitdev" ]; then
+    #####################
+    #  SUMMITDEV IBM    #
+    #####################
+    MLIST=`module list 2>&1 ` #| grep "PrgEnv"- | sed "s/^.*PrgEnv-\([a-z]*\).*/\1/"`
+    TARGET=`echo $MLIST | grep " xl\/" | sed "s/^.* xl\/.*/xl/"`
+    if [ -z $TARGET ]; then
+        TARGET=`echo $MLIST | grep " pgi\/" | sed "s/^.* pgi\/.*/pgi/"`
+        if [ -z $TARGET ]; then
+            TARGET=`echo $MLIST | grep " gcc\/" | sed "s/^.* gcc\/.*/gcc/"`
+            if [ -z $TARGET ]; then
+                TARGET=`echo $MLIST | grep " clang\/" | sed "s/^.* clang\/.*/clang/"`
+            fi
+        fi
+    fi
+    echo "Configure on Summitdev for $TARGET env."
+    
+    unset WITH_DATASPACES
+    FORTRAN_BUILD="--enable-fortran"
+    if [ "$TARGET" == "xl" ]; then
+        export MPICC=mpicc
+        export MPCXX=mpic++
+        export MPIFC=mpif90
+        export CFLAGS="-g -O0"
+        export FC=xlf90
+        export CC=xlc
+        export CXX=xlC
+        #export LIBS="-lrdmacm -libverbs"
+        DATASPACES_DIR=/ccs/proj/e2e/dataspaces/summitdev/1.6.1/xl
+        #WITH_DATASPACES="--with-dataspaces=$DATASPACES_DIR --with-dimes=$DATASPACES_DIR"
+    elif [ "$TARGET" == "pgi" ]; then
+        export CC=pgcc
+        export FC=pgf90
+        export CXX=pgc++
+        export MPICC=mpicc
+        export MPCXX=mpic++
+        export MPIFC=mpif90
+        export CFLAGS="-g -O0"
+        #DATASPACES_DIR=/ccs/proj/e2e/dataspaces/summitdev/1.6.1/pgi
+        #WITH_DATASPACES="--with-dataspaces=$DATASPACES_DIR --with-dimes=$DATASPACES_DIR"
+    elif [ "$TARGET" == "gcc" ]; then
+        export CC=gcc
+        export FC=gfortran
+        export CXX=g++
+        export MPICC=mpicc
+        export MPCXX=mpic++
+        export MPIFC=mpif90
+        export CFLAGS="-g -O0"
+        DATASPACES_DIR=/ccs/proj/e2e/dataspaces/summitdev/1.6.1/gcc
+        #WITH_DATASPACES="--with-dataspaces=$DATASPACES_DIR --with-dimes=$DATASPACES_DIR"
+    elif [ "$TARGET" == "clang" ]; then
+        export CC=clang
+        export CXX=clang++
+        export MPICC=mpicc
+        export MPCXX=mpic++
+        export CFLAGS="-g -O0"
+        DATASPACES_DIR=/ccs/proj/e2e/dataspaces/summitdev/1.6.1/clang
+        FORTRAN_BUILD="--disable-fortran"
+        #WITH_DATASPACES="--with-dataspaces=$DATASPACES_DIR --with-dimes=$DATASPACES_DIR"
+    fi
+
+    ${SRCDIR}/configure --prefix=/ccs/proj/e2e/pnorbert/ADIOS/summitdev.$TARGET  \
+            --disable-maintainer-mode \
+            --enable-dependency-tracking \
+            $FORTRAN_BUILD \
+            --without-datatap  \
+            $WITH_DATASPACES
+
+elif [ `hostname | cut -c 1-4` == "sith" ]; then
+
+    ########
+    # Sith #
+    ########
+    #source /etc/profile.d/modules.sh
+    TARGET=`module list 2>&1 | grep "PE"- | sed "s/^.*PE-\([a-z]*\).*/\1/"`
+
+    if [ -z "$TARGET" ]; then
+        echo "Cannot determine Programming environment. Exit"
+        exit 1
+    fi
+    echo "Configure on SITH for $TARGET env. for user ${USER}"
+    module unload hdf5
+    module unload netcdf
+    module unload python
+    #module unload PE-gnu
+    #module unload PE-pgi
+    #module unload PE-intel
+    #module unload PE-pathscale
+    #module unload pgi gcc intel pathscale
+    #module load PE-$TARGET
+    module load python
+    # Use both seq hdf5 (for utils) and 
+    #   parallel hdf5 (for PHDF5 method)
+    module load hdf5/1.8.10
+    SEQ_HDF5_DIR=$HDF5_DIR
+    SEQ_HDF5_CLIB=$HDF5_CLIB
+    module unload hdf5
+    module load hdf5/1.8.10_par
+    PAR_HDF5_DIR=$HDF5_DIR
+    PAR_HDF5_CLIB=$HDF5_CLIB
+    module unload hdf5
+    # Seq. and Parallel NetCDF 4 
+    module load netcdf/4.1.3
+    SEQ_NC_DIR=$NETCDF_DIR
+    SEQ_NC_CLIB=$NETCDF_CLIB
+    module unload netcdf
+    module load netcdf/4.1.3_par
+    PAR_NC_DIR=$NETCDF_DIR
+    PAR_NC_CLIB=$NETCDF_CLIB
+    module unload netcdf
+    #module load szip
+    module load bzip2
+    module unload dataspaces
+    unset DATASPACES_DIR
+    module load dataspaces/1.6.0
+    export MPICC=mpicc
+    export MPICXX=mpiCC
+    export MPIFC=mpif90
+    export CPPFLAGS="-DMPICH_IGNORE_CXX_SEEK" 
+    export CFLAGS="-g -O0 -fPIC" 
+    export CXXFLAGS="-g -O0 -fPIC" 
+    export FCFLAGS="-g -O0 -fPIC" 
+    WITHFLEX=""
+    WITHFGR=""
+    WITHFASTBIT=""
+    WITHALACRITY=""
+    if [ "$TARGET" == "pgi" ]; then
+        export CC=pgcc
+        export CXX=pgc++
+        export FC=pgf90
+        WITHFLEX="--with-flexpath=/ccs/proj/e2e/chaos/sith/$TARGET"
+        WITHFGR="--with-fgr=/ccs/proj/e2e/qliu/tap" 
+        WITHALACRITY="--with-alacrity=/ccs/proj/e2e/ncsu/alacrity/sith/pgi"
+        WITHFASTBIT="--with-fastbit=/sw/redhat6/fastbit/svn/rhel6_gnu4.4.7"
+        #DATASPACES_DIR="/ccs/proj/e2e/dataspaces/sith-tcp/1.6.pgi"
+        #DATASPACES_DIR="/ccs/home/hbui/usr/software/dataspaces-dev"
+    elif [ "$TARGET" == "gnu" ]; then
+        export CC=gcc
+        export CXX=g++
+        export FC=gfortran
+        #export CFLAGS="$CFLAGS -gdwarf-3" 
+        #export FCFLAGS="$FCFLAGS -gdwarf-3" 
+        WITHFLEX="--with-flexpath=/ccs/proj/e2e/chaos/sith/$TARGET"
+        WITHALACRITY="--with-alacrity=/ccs/proj/e2e/ncsu/alacrity/sith/gnu"
+        WITHFASTBIT="--with-fastbit=/sw/redhat6/fastbit/svn/rhel6_gnu4.8.2"
+        #DATASPACES_DIR="/ccs/proj/e2e/dataspaces/sith-tcp/1.6.gnu"
+    elif [ "$TARGET" == "intel" ]; then
+        export CC=icc
+        export CXX=icpc
+        export FC=ifort
+        WITHALACRITY="--with-alacrity=/ccs/proj/e2e/ncsu/alacrity/sith/intel"
+        WITHFASTBIT="--with-fastbit=/sw/redhat6/fastbit/svn/rhel6_gnu4.8.2"
+    else
+        echo "TARGET must be pgi or gnu or intel"
+        exit 1
+    fi
+        
+    $SRCDIR/configure --prefix=/ccs/proj/e2e/${USER}/ADIOS/sith.$TARGET \
+        --config-cache \
+        --disable-maintainer-mode \
+        --enable-dependency-tracking \
+        --enable-research-transports \
+        --with-lustre \
+        #--with-zlib \
+        #--with-bzip2=$BZIP2_DIR \
+        #--with-dataspaces=$DATASPACES_DIR \
+        #$WITHFLEX \
+        #$WITHFASTBIT \
+        #$WITHALACRITY \
+        #--with-aplod=/ccs/proj/e2e/ncsu/sith.gnu \
+        #--with-isobar=/ccs/proj/e2e/ncsu/sith.gnu \
+        #--with-hdf5=${SEQ_HDF5_DIR} \
+        #--with-hdf5-libs="${SEQ_HDF5_CLIB}" \
+        #--with-netcdf=${SEQ_NC_DIR} \
+        #--with-netcdf-libs="${SEQ_NC_CLIB}" \
+        #--with-dimes=$DATASPACES_DIR \
+        #--with-glib=/ccs/proj/e2e/qliu/glib
+        #$WITHFGR \
+        #--with-szip=$SZIP_DIR \
+        #--with-phdf5=${PAR_HDF5_DIR} \
+        #--with-phdf5-libs="${PAR_HDF5_CLIB}" \
+        #--with-nc4par=${PAR_NC_DIR} \
+        #--with-nc4par-libs="${PAR_NC_CLIB}" \
+        #--with-dmalloc=/ccs/proj/e2e/qliu/dmalloc.sith.$TARGET 
+        #--with-dmalloc=/ccs/proj/e2e/pnorbert/dmalloc.$TARGET 
+        #--enable-shared --disable-static
+        #--without-datatap #--without-infiniband
+        #--with-dmalloc=/ccs/proj/e2e/pnorbert/dmalloc.$TARGET 
+        #--with-datatap=/ccs/home/habbasi/work/ewok/
+        #--enable-datatap=ib
+
+elif [ `hostname | cut -c 1-4` == "yona" ]; then
+
+    ########
+    # Yona #
+    ########
+    source /etc/profile.d/modules.sh
+    TARGET=`module list 2>&1 | grep "PE"- | sed "s/^.*PE-\([a-z]*\).*/\1/"`
+    echo "Configure on Yona for $TARGET env."
+    module unload hdf5
+    module unload netcdf
+    module unload PE-gnu
+    module unload PE-pgi
+    module unload PE-intel
+    module unload PE-pathscale
+    module unload pgi gcc intel pathscale
+    #module unload python
+    module load PE-$TARGET
+    #module load python
+    # Use both seq hdf5 (for utils) and 
+    #   parallel hdf5 (for PHDF5 method)
+    module load hdf5/1.8.5
+    SEQ_HDF5_DIR=$HDF5_DIR
+    SEQ_HDF5_CLIB=$HDF5_CLIB
+    module unload hdf5
+    #module load hdf5/1.8.5_par
+    #PAR_HDF5_DIR=$HDF5_DIR
+    #PAR_HDF5_CLIB=$HDF5_CLIB
+    #module unload hdf5
+    # Seq. and Parallel NetCDF 4 
+    module load netcdf/3.6.2
+    SEQ_NC_DIR=$NETCDF_DIR
+    SEQ_NC_CLIB=$NETCDF_CLIB
+    module unload netcdf
+    #module load netcdf/4.1.1_par
+    #PAR_NC_DIR=$NETCDF_DIR
+    #PAR_NC_CLIB=$NETCDF_CLIB
+    #module unload netcdf
+    export MPICC=mpicc
+    export MPICXX=mpiCC
+    export MPIFC=mpif90
+    if [ "$TARGET" == "pgi" ]; then
+        export CC=pgcc
+        export CXX=pgCC
+        export FC=pgf90
+    elif [ "$TARGET" == "gnu" ]; then
+        export CC=gcc
+        export CXX=g++
+        export FC=gfortran
+    elif [ "$TARGET" == "intel" ]; then
+        export CC=pgcc
+        export CXX=pgCC
+        export FC=pgf90
+    elif [ "$TARGET" == "gnu" ]; then
+        export CC=gcc
+        export CXX=g++
+        export FC=gfortran
+    elif [ "$TARGET" == "intel" ]; then
+        export CC=icc
+        export CXX=icpc
+        export FC=ifort
+    else
+        echo "TARGET must be pgi or gnu or intel"
+        exit 1
+    fi
+        
+    export CFLAGS="-g -fPIC" 
+    ${SRCDIR}/configure --prefix=/ccs/proj/e2e/pnorbert/ADIOS/yona.$TARGET \
+        --config-cache \
+        --disable-maintainer-mode \
+        --enable-dependency-tracking \
+        --enable-research-transports  \
+        --with-hdf5=${SEQ_HDF5_DIR} \
+        --with-hdf5-libs="${SEQ_HDF5_CLIB}" \
+        --with-netcdf=${SEQ_NC_DIR} \
+        --with-netcdf-libs="${SEQ_NC_CLIB}" \
+        --with-lustre=/usr \
+        --without-datatap --without-infiniband
+        #--with-phdf5=${PAR_HDF5_DIR} \
+        #--with-phdf5-libs="${PAR_HDF5_CLIB}" \
+        #--with-nc4par=${PAR_NC_DIR} \
+        #--with-nc4par-libs="${PAR_NC_CLIB}" \
+        #--with-dmalloc=/ccs/proj/e2e/pnorbert/dmalloc.$TARGET 
+        #--with-datatap=/ccs/home/habbasi/work/ewok/
+        #--enable-datatap=ib
+
+
+
+elif [ `hostname | cut -c 1-5` == "theta" ]; then
+
+    ##########
+    # THETA  #
+    ##########
+    TARGET=`module list 2>&1 | grep "PrgEnv"- | sed "s/^.*PrgEnv-\([a-z]*\).*/\1/"`
+    CPUARCH=`module list 2>&1 | grep -e craype-broadwell -e craype-haswell -e craype-mic-knl -e craype-ivybridge -e craype-sandybridge -e craype-intel-knc | sed -e "s/.*craype-//"`
+    echo "Configure on THETA for $TARGET env. for $CPUARCH CPU"
+    export MPICC=cc
+    export MPICXX=CC
+    export MPIFC=ftn
+    module unload darshan
+    module unload hdf5
+    module unload netcdf
+    module unload hdf5-parallel
+    module unload netcdf-hdf5parallel
+    WITHDART=""
+    if [ "$TARGET" == "pgi" ]; then
+        export CC=pgcc
+        export CXX=pgCC
+        export FC=pgf90
+        export LDFLAGS="-pgc++libs" 
+    elif [ "$TARGET" == "gnu" ]; then
+        export CC=gcc
+        export CXX=g++
+        export FC=gfortran
+        export LDFLAGS=""
+    elif [ "$TARGET" == "intel" ]; then
+        export CC=icc
+        export CXX=icpc
+        export FC=ifort
+        export LDFLAGS=""
+    elif [ "$TARGET" == "cray" ]; then
+        export EXTRA_CFLAGS="-h gnu"
+        export CC=cc
+        export CXX=CC
+        export FC=ftn
+        export LDFLAGS=""
+        export EXTRA_CFLAGS="-h gnu"
+    else
+        echo "TARGET must be one of [ pgi | gnu | intel | cray ]"
+        exit 1
+    fi
+
+    export CPPFLAGS="-DMPICH_IGNORE_CXX_SEEK"
+    export CFLAGS="-fPIC ${EXTRA_CFLAGS}"
+    ${SRCDIR}/configure --prefix=/home/pnorbert/sw/adios/1.12/theta/$TARGET.$CPUARCH \
+        --disable-maintainer-mode \
+        --enable-dependency-tracking \
+        --with-cray-pmi-incdir=/opt/cray/pmi/default/include \
+        --with-cray-pmi-libdir=/opt/cray/pmi/default/lib64 \
+        --with-cray-ugni-incdir=/opt/cray/gni-headers/default/include \
+        --with-cray-ugni-libdir=/opt/cray/ugni/default/lib64 \
+        --without-infiniband \
+        --without-hdf5 --without-netcdf
+
+
 elif [ `hostname -f | cut -c 1-4` == "mira" ]; then
     #####################
     #  MIRA   BlueGene  #
@@ -581,7 +713,8 @@ elif [ `hostname | cut -c 1-4` == "cori" ]; then
     # CORI #
     ##########
     TARGET=`module list 2>&1 | grep "PrgEnv"- | sed "s/^.*PrgEnv-\([a-z]*\).*/\1/"`
-    echo "Configure on CORI for $TARGET env."
+    CPUARCH=`module list 2>&1 | grep -e craype-broadwell -e craype-haswell -e craype-mic-knl -e craype-ivybridge -e craype-intel-knc | sed -e "s/.*craype-//"`
+    echo "Configure on CORI for $TARGET env. for $CPUARCH CPU"
     export MPICC=cc
     export MPICXX=CC
     export MPIFC=ftn
@@ -621,7 +754,7 @@ elif [ `hostname | cut -c 1-4` == "cori" ]; then
 
     export CPPFLAGS="-DMPICH_IGNORE_CXX_SEEK"
     export CFLAGS="-fPIC ${EXTRA_CFLAGS}"
-    ${SRCDIR}/configure --prefix=/global/homes/p/pnorbert/adios/1.11.0/cori/$TARGET \
+    ${SRCDIR}/configure --prefix=/global/homes/p/pnorbert/adios/1.12/cori/$TARGET.$CPUARCH \
         --disable-maintainer-mode \
         --enable-dependency-tracking \
         --with-lustre=/usr \
@@ -888,14 +1021,15 @@ elif [ `hostname | cut -c 1-7` == "adiosVM" ]; then
     export FC=gfortran
 
     export CFLAGS="-g -O0 -fPIC -Wno-int-to-pointer-cast -Wno-pointer-to-int-cast"
-    ${SRCDIR}/configure --prefix=/opt/adios/1.11 \
+    ${SRCDIR}/configure --prefix=/opt/adios \
         --disable-maintainer-mode \
         --enable-dependency-tracking \
         --enable-timers \
         --disable-timer-events \
         --with-zlib \
         --with-bzip2 \
-        --with-szip=/opt/szip \
+        --with-sz=/opt/SZ \
+        --without-szip \
         --with-isobar=/opt/isobar \
         --with-flexpath=/opt/chaos \
         --with-dataspaces=/opt/dataspaces --without-infiniband \
diff --git a/scripts/FindADIOS.cmake b/scripts/FindADIOS.cmake
index 074cf74..4936daf 100644
--- a/scripts/FindADIOS.cmake
+++ b/scripts/FindADIOS.cmake
@@ -178,10 +178,10 @@ if(ADIOS_FOUND)
     endforeach()
     # we could append ${CMAKE_PREFIX_PATH} now but that is not really necessary
 
-    #message(STATUS "ADIOS DIRS to look for libs: ${ADIOS_LIBRARY_DIRS}")
+    message(STATUS "ADIOS DIRS to look for libs: ${ADIOS_LIBRARY_DIRS}")
 
     # parse all -lname libraries and find an absolute path for them
-    string(REGEX MATCHALL " -l([A-Za-z_0-9\\.-]+)" _ADIOS_LIBS " ${ADIOS_LINKFLAGS}")
+    string(REGEX MATCHALL " -l([A-Za-z_0-9\\.\\-\\+]+)" _ADIOS_LIBS " ${ADIOS_LINKFLAGS}")
     foreach(_LIB ${_ADIOS_LIBS})
         string(REPLACE " -l" "" _LIB ${_LIB})
 
@@ -203,8 +203,13 @@ if(ADIOS_FOUND)
     endforeach()
 
     #add libraries which are already using cmake format
-    string(REGEX MATCHALL "/([A-Za-z_0-9/\\.-]+)\\.([a|so]+)" _ADIOS_LIBS_SUB "${ADIOS_LINKFLAGS}")
-    list(APPEND ADIOS_LIBRARIES "${_ADIOS_LIBS_SUB}")
+    string(REGEX MATCHALL "/([A-Za-z_0-9/\\.\\-\\+]+)\\.([a|so]+)" _ADIOS_LIBS_SUB "${ADIOS_LINKFLAGS}")
+    foreach(foo ${_ADIOS_LIBS_SUB})
+    if (EXISTS ${foo})
+        message("Appending: ${foo}")
+        list(APPEND ADIOS_LIBRARIES "${foo}")
+    endif()
+    endforeach(foo)
 
     # add the version string
     execute_process(COMMAND ${ADIOS_CONFIG} -v
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 0d797df..0f216b1 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -10,7 +10,7 @@ if (BUILD_MXML)
   set(EXTRA_OBJECTS ${EXTRA_OBJECTS} $<TARGET_OBJECTS:mxml>)
 endif(BUILD_MXML)
 
-# Build the zfp library in src/zfp 
+# Build the zfp library in src/zfp
 if (BUILD_ZFP)
   add_subdirectory(zfp)
   set(ZFP_BUILDDIR "zfp/zfp-0.5.0")
@@ -29,11 +29,11 @@ link_directories(${PROJECT_BINARY_DIR}/src)
 
 if(HAVE_NSSI)
   add_executable(nssi-staging-server nssi/nssi_staging_server.cpp nssi/aggregation.cpp)
-  set_target_properties(nssi-staging-server PROPERTIES COMPILE_FLAGS "${ADIOSLIB_CFLAGS} ${ADIOSLIB_EXTRA_CPPFLAGS} ${ADIOSLIB_CPPFLAGS} ${MACRODEFFLAG}PTL_IFACE_CLIENT=CRAY_USER_NAL ${MACRODEFFLAG}PTL_IFACE_SERVER=CRAY_USER_NAL") 
+  set_target_properties(nssi-staging-server PROPERTIES COMPILE_FLAGS "${ADIOSLIB_CFLAGS} ${ADIOSLIB_EXTRA_CPPFLAGS} ${ADIOSLIB_CPPFLAGS} ${MACRODEFFLAG}PTL_IFACE_CLIENT=CRAY_USER_NAL ${MACRODEFFLAG}PTL_IFACE_SERVER=CRAY_USER_NAL")
   target_link_libraries(nssi-staging-server adios.a ${ADIOSLIB_LDADD} ${NSSI_SERVER_LIBS})
 
   add_executable(nssi-coupling-server nssi/nssi_coupling_server.cpp)
-  set_target_properties(nssi-coupling-server PROPERTIES COMPILE_FLAGS "${ADIOSLIB_CFLAGS} ${ADIOSLIB_EXTRA_CPPFLAGS} ${ADIOSLIB_CPPFLAGS} ${MACRODEFFLAG}PTL_IFACE_CLIENT=CRAY_USER_NAL ${MACRODEFFLAG}PTL_IFACE_SERVER=CRAY_USER_NAL") 
+  set_target_properties(nssi-coupling-server PROPERTIES COMPILE_FLAGS "${ADIOSLIB_CFLAGS} ${ADIOSLIB_EXTRA_CPPFLAGS} ${ADIOSLIB_CPPFLAGS} ${MACRODEFFLAG}PTL_IFACE_CLIENT=CRAY_USER_NAL ${MACRODEFFLAG}PTL_IFACE_SERVER=CRAY_USER_NAL")
   target_link_libraries(nssi-coupling-server adios.a ${ADIOSLIB_LDADD} ${NSSI_SERVER_LIBS})
 endif(HAVE_NSSI)
 
@@ -61,61 +61,63 @@ set(transforms_read_method_SOURCES "")
 ##
 ## Core transform framework source files
 ##
-set (transforms_common_HDRS core/adios_copyspec.h 
-                         core/adios_subvolume.h 
-                         core/adios_selection_util.h 
-                         core/transforms/adios_transforms_common.h 
-                         core/transforms/adios_transforms_hooks.h 
-                         core/transforms/adios_transforms_util.h 
+set (transforms_common_HDRS core/adios_copyspec.h
+                         core/adios_subvolume.h
+                         core/adios_selection_util.h
+                         core/transforms/adios_transforms_common.h
+                         core/transforms/adios_transforms_hooks.h
+                         core/transforms/adios_transforms_util.h
                          core/adios_subvolume.h
                          public/adios_transform_methods.h)
 
-set (transforms_read_HDRS core/transforms/adios_transforms_read.h 
-                       core/transforms/adios_transforms_hooks_read.h 
-                       core/transforms/adios_transforms_reqgroup.h 
+set (transforms_read_HDRS core/transforms/adios_transforms_read.h
+                       core/transforms/adios_transforms_hooks_read.h
+                       core/transforms/adios_transforms_reqgroup.h
                        core/transforms/adios_transforms_datablock.h
                        core/transforms/adios_transforms_transinfo.h
                        core/transforms/adios_patchdata.h)
 
-set (transforms_write_HDRS  core/transforms/adios_transforms_write.h 
-                        core/transforms/adios_transforms_hooks_write.h 
+set (transforms_write_HDRS  core/transforms/adios_transforms_write.h
+                        core/transforms/adios_transforms_hooks_write.h
                         core/transforms/adios_transforms_specparse.h)
 
-set (transforms_common_SOURCES  ${transforms_common_HDRS} 
-                            core/transforms/adios_transforms_common.c 
-                            core/transforms/adios_transforms_hooks.c 
-                            core/adios_copyspec.c 
-                            core/adios_subvolume.c 
-                            core/transforms/plugindetect/detect_plugin_infos.h 
-                            core/transforms/plugindetect/detect_plugin_types.h 
+set (transforms_common_SOURCES  ${transforms_common_HDRS}
+                            core/transforms/adios_transforms_common.c
+                            core/transforms/adios_transforms_hooks.c
+                            core/adios_copyspec.c
+                            core/adios_subvolume.c
+                            core/transforms/plugindetect/detect_plugin_infos.h
+                            core/transforms/plugindetect/detect_plugin_types.h
                             core/transforms/plugindetect/plugin_info_types.h
                             core/adios_transform_methods.c)
 
-set (transforms_read_SOURCES ${transforms_read_HDRS} 
-                          core/transforms/adios_transforms_read.c 
-                          core/transforms/adios_transforms_hooks_read.c 
-                          core/transforms/adios_transforms_reqgroup.c 
-                          core/transforms/adios_transforms_datablock.c 
-                          core/transforms/adios_patchdata.c 
+set (transforms_read_SOURCES ${transforms_read_HDRS}
+                          core/transforms/adios_transforms_read.c
+                          core/transforms/adios_transforms_hooks_read.c
+                          core/transforms/adios_transforms_reqgroup.c
+                          core/transforms/adios_transforms_datablock.c
+                          core/transforms/adios_patchdata.c
                           transforms/adios_transform_alacrity_read.c
                           transforms/adios_transform_isobar_read.c
                           transforms/adios_transform_aplod_read.c
-                          transforms/adios_transform_szip_read.c 
+                          transforms/adios_transform_szip_read.c
                           transforms/adios_transform_bzip2_read.c
                           transforms/adios_transform_identity_read.c
                           transforms/adios_transform_zlib_read.c
                           transforms/adios_transform_zfp_read.c
-                          core/adios_selection_util.c 
+                          transforms/adios_transform_sz_read.c
+                          transforms/adios_transform_lz4_read.c
+                          core/adios_selection_util.c
                           core/transforms/plugindetect/detect_plugin_read_hook_decls.h
                           core/transforms/plugindetect/detect_plugin_read_hook_reg.h
                           core/adios_read_ext.c
                           ${transforms_read_method_SOURCES})
 
-set (transforms_write_SOURCES ${transforms_write_HDRS} 
-                           core/transforms/adios_transforms_write.c 
-                           core/transforms/adios_transforms_hooks_write.c 
-                           core/transforms/adios_transforms_util.c 
-                           core/transforms/adios_transforms_specparse.c 
+set (transforms_write_SOURCES ${transforms_write_HDRS}
+                           core/transforms/adios_transforms_write.c
+                           core/transforms/adios_transforms_hooks_write.c
+                           core/transforms/adios_transforms_util.c
+                           core/transforms/adios_transforms_specparse.c
                            transforms/adios_transform_alacrity_write.c
                            transforms/adios_transform_aplod_write.c
                            transforms/adios_transform_bzip2_write.c
@@ -124,6 +126,8 @@ set (transforms_write_SOURCES ${transforms_write_HDRS}
                            transforms/adios_transform_szip_write.c
                            transforms/adios_transform_zlib_write.c
                            transforms/adios_transform_zfp_write.c
+                           transforms/adios_transform_sz_write.c
+                           transforms/adios_transform_lz4_write.c
                            ${transforms_write_method_SOURCES})
 
 #######Query source files
@@ -151,39 +155,41 @@ set(query_F_SOURCES ${query_SOURCES} query/adiosf_query.c)
 
 #start adios.a and adios_nompi.a
 if(BUILD_WRITE)
-    set(libadios_a_SOURCES core/adios.c 
+    set(libadios_a_SOURCES core/adios.c
                      core/common_adios.c
                      core/adios_internals.c
-                     core/adios_internals_mxml.c 
-                     core/buffer.c 
-                     core/adios_bp_v1.c  
-                     core/adios_endianness.c 
-                     core/bp_utils.c 
-                     core/futils.c 
-                     core/adios_error.c 
-                     core/adios_read.c 
-                     core/adios_read_v1.c 
-                     core/common_read.c 
+                     core/adios_internals_mxml.c
+                     core/buffer.c
+                     core/adios_bp_v1.c
+                     core/adios_endianness.c
+                     core/bp_utils.c
+                     core/futils.c
+                     core/adios_error.c
+                     core/adios_read.c
+                     core/adios_read_v1.c
+                     core/common_read.c
                      core/adios_infocache.c
                      core/adios_read_ext.c
-                     core/globals.c 
-                     core/adios_timing.c 
-                     core/adios_read_hooks.c 
-                     core/adios_transport_hooks.c 
-                     core/adios_socket.c 
-                     core/adios_logger.c 
-                     core/qhashtbl.c 
-                     ${transforms_common_SOURCES} 
-                     ${transforms_read_SOURCES} 
-                     ${transforms_write_SOURCES} 
+                     core/globals.c
+                     core/adios_timing.c
+                     core/adios_read_hooks.c
+                     core/adios_transport_hooks.c
+                     core/adios_socket.c
+                     core/adios_logger.c
+                     core/qhashtbl.c
+                     ${transforms_common_SOURCES}
+                     ${transforms_read_SOURCES}
+                     ${transforms_write_SOURCES}
                      ${query_C_SOURCES}
-                     core/util.c 
-                     core/strutil.c 
-                     core/a2sel.c 
-                     core/adios_clock.c 
-                     core/qhashtbl.c 
-                     read/read_bp.c 
-                     read/read_bp_staged.c 
+                     core/util.c
+                     core/strutil.c
+                     core/a2sel.c
+                     core/adios_clock.c
+                     core/qhashtbl.c
+                     core/adiost_callback_internal.c
+                     core/adiost_default_tool.c
+                     read/read_bp.c
+                     read/read_bp_staged.c
                      read/read_bp_staged1.c
                      write/adios_mpi.c
                      write/adios_mpi_lustre.c
@@ -195,75 +201,79 @@ if(BUILD_WRITE)
         set(libadios_a_SOURCES ${libadios_a_SOURCES} write/adios_mpi_bgq.c)
     endif()
 
-    set(libadios_nompi_a_SOURCES core/adios.c 
-                     core/common_adios.c 
-                     core/adios_internals.c 
-                     core/adios_internals_mxml.c 
-                     ${transforms_common_SOURCES} 
-                     ${transforms_read_SOURCES} 
-                     ${transforms_write_SOURCES} 
+    set(libadios_nompi_a_SOURCES core/adios.c
+                     core/common_adios.c
+                     core/adios_internals.c
+                     core/adios_internals_mxml.c
+                     ${transforms_common_SOURCES}
+                     ${transforms_read_SOURCES}
+                     ${transforms_write_SOURCES}
                      ${query_C_SOURCES}
-                     core/buffer.c 
-                     core/adios_bp_v1.c  
-                     core/adios_endianness.c 
-                     core/bp_utils.c 
-                     core/futils.c 
-                     core/adios_error.c 
-                     core/adios_read.c 
-                     core/adios_read_v1.c 
-                     core/common_read.c 
+                     core/buffer.c
+                     core/adios_bp_v1.c
+                     core/adios_endianness.c
+                     core/bp_utils.c
+                     core/futils.c
+                     core/adios_error.c
+                     core/adios_read.c
+                     core/adios_read_v1.c
+                     core/common_read.c
                      core/adios_infocache.c
                      core/adios_read_ext.c
-                     core/globals.c 
-                     core/mpidummy.c 
-                     core/adios_timing.c 
-                     core/adios_read_hooks.c 
-                     core/adios_transport_hooks.c 
-                     core/adios_socket.c 
-                     core/adios_logger.c 
-                     core/util.c 
-                     core/strutil.c 
-                     core/a2sel.c 
-                     core/adios_clock.c 
-                     core/qhashtbl.c 
-                     read/read_bp.c 
-                     read/read_bp_staged.c 
-                     read/read_bp_staged1.c 
+                     core/globals.c
+                     core/mpidummy.c
+                     core/adios_timing.c
+                     core/adios_read_hooks.c
+                     core/adios_transport_hooks.c
+                     core/adios_socket.c
+                     core/adios_logger.c
+                     core/util.c
+                     core/strutil.c
+                     core/a2sel.c
+                     core/adios_clock.c
+                     core/qhashtbl.c
+                     core/adiost_callback_internal.c
+                     core/adiost_default_tool.c
+                     read/read_bp.c
+                     read/read_bp_staged.c
+                     read/read_bp_staged1.c
                      write/adios_posix.c)
 
 #start adiosf.a and adiosf_v1.a
     if(BUILD_FORTRAN)
-        set(FortranLibSources core/adiosf.c 
-                       core/common_adios.c 
-                       core/adios_internals.c 
+        set(FortranLibSources core/adiosf.c
+                       core/common_adios.c
+                       core/adios_internals.c
                        core/adios_internals_mxml.c
-                       ${transforms_common_SOURCES} 
-                       ${transforms_read_SOURCES} 
-                       ${transforms_write_SOURCES} 
+                       ${transforms_common_SOURCES}
+                       ${transforms_read_SOURCES}
+                       ${transforms_write_SOURCES}
                        ${query_F_SOURCES}
-                       core/buffer.c 
-                       core/adios_bp_v1.c  
+                       core/buffer.c
+                       core/adios_bp_v1.c
                        core/adios_endianness.c
-                       core/futils.c 
-                       core/adios_error.c 
-                       core/bp_utils.c                
-                       core/common_read.c 
+                       core/futils.c
+                       core/adios_error.c
+                       core/bp_utils.c
+                       core/common_read.c
                        core/adios_infocache.c
                        core/adios_read_ext.c
-                       core/globals.c 
-                       core/adios_timing.c 
-                       core/adios_read_hooks.c 
-                       core/adios_transport_hooks.c 
-                       core/adios_socket.c 
-                       core/adios_logger.c 
-                       core/util.c 
-                       core/strutil.c 
-                       core/a2sel.c 
-                       core/adios_clock.c 
-                       core/qhashtbl.c 
-                       read/read_bp.c 
-                       read/read_bp_staged.c 
-                       read/read_bp_staged1.c 
+                       core/globals.c
+                       core/adios_timing.c
+                       core/adios_read_hooks.c
+                       core/adios_transport_hooks.c
+                       core/adios_socket.c
+                       core/adios_logger.c
+                       core/util.c
+                       core/strutil.c
+                       core/a2sel.c
+                       core/adios_clock.c
+                       core/qhashtbl.c
+                       core/adiost_callback_internal.c
+                       core/adiost_default_tool.c
+                       read/read_bp.c
+                       read/read_bp_staged.c
+                       read/read_bp_staged1.c
                        write/adios_posix.c)
 
         set(FortranLibMPISources write/adios_mpi.c
@@ -278,7 +288,7 @@ if(BUILD_WRITE)
 
     set(libadios_a_CPPFLAGS "${ADIOSLIB_EXTRA_CPPFLAGS} ${ADIOSLIB_CPPFLAGS}")
     set(libadios_a_CFLAGS "${ADIOSLIB_CFLAGS}")
-    set(libadios_nompi_a_CPPFLAGS "${MACRODEFFLAG}_NOMPI ${ADIOSLIB_EXTRA_CPPFLAGS} ${ADIOSLIB_SEQ_CPPFLAGS}") 
+    set(libadios_nompi_a_CPPFLAGS "${MACRODEFFLAG}_NOMPI ${ADIOSLIB_EXTRA_CPPFLAGS} ${ADIOSLIB_SEQ_CPPFLAGS}")
     set(libadios_nompi_a_CFLAGS "${MACRODEFFLAG}_NOMPI ${ADIOSLIB_SEQ_CFLAGS}")
     set(libadiosf_a_CPPFLAGS "${ADIOSLIB_EXTRA_CPPFLAGS} ${ADIOSLIB_CPPFLAGS}")
     set(libadiosf_a_CFLAGS "${ADIOSLIB_CFLAGS}")
@@ -288,15 +298,15 @@ if(BUILD_WRITE)
     if(HAVE_DATASPACES)
         set(libadios_a_SOURCES ${libadios_a_SOURCES} write/adios_dataspaces.c read/read_dataspaces.c)
         set(libadios_nompi_a_SOURCES ${libadios_nompi_a_SOURCES} write/adios_dataspaces.c read/read_dataspaces.c)
-        if(BUILD_FORTRAN)  
+        if(BUILD_FORTRAN)
             set(FortranLibSources ${FortranLibSources} write/adios_dataspaces.c read/read_dataspaces.c)
-        endif(BUILD_FORTRAN) 
+        endif(BUILD_FORTRAN)
     endif(HAVE_DATASPACES)
 
     if(HAVE_DIMES)
         set(libadios_a_SOURCES ${libadios_a_SOURCES} write/adios_dimes.c read/read_dimes.c)
         set(libadios_nompi_a_SOURCES ${libadios_nompi_a_SOURCES} write/adios_dimes.c read/read_dimes.c)
-        if(BUILD_FORTRAN)  
+        if(BUILD_FORTRAN)
             set(FortranLibSources ${FortranLibSources} write/adios_dimes.c read/read_dimes.c)
         endif(BUILD_FORTRAN)
     endif(HAVE_DIMES)
@@ -316,7 +326,7 @@ if(BUILD_WRITE)
         if(BUILD_FORTRAN)
             set(FortranLibMPISources ${FortranLibMPISources} write/adios_phdf5.c)
             set(libadiosf_a_CPPFLAGS "${libadiosf_a_CPPFLAGS} ${PHDF5_FLAGS}")
-        endif(BUILD_FORTRAN) 
+        endif(BUILD_FORTRAN)
     endif(HAVE_PHDF5)
 
     if(HAVE_NC4PAR)
@@ -373,7 +383,7 @@ if(BUILD_WRITE)
             COMMAND rpcgen -c ${PROJECT_SOURCE_DIR}/src/nssi/adios_nssi_args.x | grep -v "include \"\.\." > adios_nssi_args.c
             DEPENDS ${PROJECT_SOURCE_DIR}/src/nssi/adios_nssi_args.h
             )
-    
+
         set(CLEANFILES ${CLEANFILES} adios_nssi_args.c adios_nssi_args.h)
 
     endif(HAVE_NSSI)
@@ -381,12 +391,12 @@ if(BUILD_WRITE)
 
     if(RESEARCH_TRANSPORTS)
 #        set(libadios_a_SOURCES ${libadios_a_SOURCES}
-#                      write/adios_mpi_stagger.c 
-#                      write/adios_mpi_aggregate.c 
-#                      write/adios_provenance.c 
-#                      write/adios_mpi_cio.c 
-#                      write/adios_mpi_stripe.c 
-#                      write/adios_mpi_amr1.c 
+#                      write/adios_mpi_stagger.c
+#                      write/adios_mpi_aggregate.c
+#                      write/adios_provenance.c
+#                      write/adios_mpi_cio.c
+#                      write/adios_mpi_stripe.c
+#                      write/adios_mpi_amr1.c
 #                      write/adios_adaptive.c)
         if(BUILD_FORTRAN)
 #            set(FortranLibMPISources ${FortranLibMPISources}
@@ -394,8 +404,8 @@ if(BUILD_WRITE)
 #                          write/adios_mpi_aggregate.c
 #                          write/adios_provenance.c
 #                          write/adios_mpi_cio.c
-#                          write/adios_mpi_stripe.c 
-#                          write/adios_mpi_amr1.c 
+#                          write/adios_mpi_stripe.c
+#                          write/adios_mpi_amr1.c
 #                          write/adios_adaptive.c)
         endif(BUILD_FORTRAN)
     else(RESEARCH_TRANSPORTS)
@@ -427,17 +437,17 @@ if(BUILD_WRITE)
 
         set(libadiosf_a_SOURCES ${libadiosf_a_SOURCES}
                          core/adiosf_defs_mod.f90
-                         core/adiosf_write_mod.f90 
+                         core/adiosf_write_mod.f90
                          core/adiosf_read_mod.f90
                          query/adios_query_mod.f90)
-   
+
         set(libadiosf_nompi_a_SOURCES ${libadiosf_nompi_a_SOURCES}
                               core/adiosf_defs_mod.f90
                               core/adiosf_write_mod.f90
                               core/adiosf_read_mod.f90
                               query/adios_query_mod.f90)
 
-        set(libadiosf_v1_a_SOURCES ${libadiosf_v1_a_SOURCES} 
+        set(libadiosf_v1_a_SOURCES ${libadiosf_v1_a_SOURCES}
                          core/adiosf_defs_mod.f90
                          core/adiosf_write_mod.f90)
 
@@ -465,7 +475,7 @@ if(BUILD_WRITE)
             DEPENDS adios_defs_mod.o
         )
 
-        
+
         add_custom_command(
             OUTPUT adios_write_mod.mod
             DEPENDS adios_defs_mod.o
@@ -483,7 +493,7 @@ if(BUILD_WRITE)
         install(FILES ${PROJECT_BINARY_DIR}/src/adios_write_mod.mod ${PROJECT_BINARY_DIR}/src/adios_defs_mod.mod DESTINATION ${includedir})
         ##add library adiosf and adiosf_v1
         add_library(adiosf STATIC ${libadiosf_a_SOURCES} ${EXTRA_OBJECTS})
-        add_library(adiosf_v1 STATIC ${libadiosf_v1_a_SOURCES} ${EXTRA_OBJECTS}) 
+        add_library(adiosf_v1 STATIC ${libadiosf_v1_a_SOURCES} ${EXTRA_OBJECTS})
         add_library(adiosf_nompi STATIC ${libadiosf_nompi_a_SOURCES} ${EXTRA_OBJECTS})
         add_library(adiosf_nompi_v1 STATIC ${libadiosf_nompi_v1_a_SOURCES} ${EXTRA_OBJECTS})
         set_target_properties(adiosf PROPERTIES COMPILE_FLAGS "${libadiosf_a_CPPFLAGS} ${libadiosf_a_CFLAGS}")
@@ -495,49 +505,52 @@ if(BUILD_WRITE)
     endif(BUILD_FORTRAN)
 
 endif(BUILD_WRITE)
- 
+
 
 #start libadiosread.a
-set(include_HEADERS ${include_HEADERS} public/adios.h 
-                   public/adios_types.h 
-                   public/adios_read.h 
+set(include_HEADERS ${include_HEADERS} public/adios.h
+                   public/adios_types.h
+                   public/adios_read.h
                    public/adios_error.h
-                   public/adios_mpi.h 
-                   public/mpidummy.h 
-                   public/adios_read_v1.h 
-                   public/adios_read_v1_defs.h 
-                   public/adios_read_v2.h 
-                   public/adios_read_v2_fwd.h 
+                   public/adios_mpi.h
+                   public/mpidummy.h
+                   public/adios_read_v1.h
+                   public/adios_read_v1_defs.h
+                   public/adios_read_v2.h
+                   public/adios_read_v2_fwd.h
                    public/adios_selection.h
                    public/adios_schema.h
                    public/adios_link.h
                    public/adios_read_ext.h
                    public/adios_query.h
-                   public/adios_transform_methods.h)
+                   public/adios_transform_methods.h
+                   public/adiost_callback_api.h)
 
 set(libadiosread_a_SOURCES core/adios_bp_v1.c
-                      core/adios_endianness.c 
-                      core/bp_utils.c 
-                      core/futils.c 
-                      core/adios_error.c 
-                      core/adios_read.c 
-                      core/adios_read_v1.c 
-                      core/common_read.c 
+                      core/adios_endianness.c
+                      core/bp_utils.c
+                      core/futils.c
+                      core/adios_error.c
+                      core/adios_read.c
+                      core/adios_read_v1.c
+                      core/common_read.c
                       core/adios_infocache.c
                       core/adios_read_ext.c
-                      ${transforms_common_SOURCES} 
-                      ${transforms_read_SOURCES} 
+                      ${transforms_common_SOURCES}
+                      ${transforms_read_SOURCES}
                       ${query_C_SOURCES}
-                      core/globals.c 
-                      core/adios_read_hooks.c 
-                      core/adios_logger.c 
-                      core/util.c 
-                      core/strutil.c 
+                      core/globals.c
+                      core/adios_read_hooks.c
+                      core/adios_logger.c
+                      core/util.c
+                      core/strutil.c
                       core/a2sel.c
-                      core/adios_clock.c 
-                      core/qhashtbl.c 
-                      read/read_bp.c 
-                      read/read_bp_staged.c 
+                      core/adios_clock.c
+                      core/qhashtbl.c
+                      core/adiost_callback_internal.c
+                      core/adiost_default_tool.c
+                      read/read_bp.c
+                      read/read_bp_staged.c
                       read/read_bp_staged1.c)
 
 if(HAVE_DMALLOC)
@@ -585,27 +598,29 @@ set_target_properties(adiosread PROPERTIES COMPILE_FLAGS "${libadiosread_a_CPPFL
 
 #start libadiosreadf.a libadiosreadf_v1.a
 if(BUILD_FORTRAN)
-    set(FortranReadLibSource core/adios_bp_v1.c 
-                      core/adios_endianness.c 
-                      core/bp_utils.c 
-                      core/futils.c 
-                      core/adios_error.c 
-                      core/common_read.c 
+    set(FortranReadLibSource core/adios_bp_v1.c
+                      core/adios_endianness.c
+                      core/bp_utils.c
+                      core/futils.c
+                      core/adios_error.c
+                      core/common_read.c
                       core/adios_infocache.c
                       core/adios_read_ext.c
-                      ${transforms_common_SOURCES} 
-                      ${transforms_read_SOURCES} 
+                      ${transforms_common_SOURCES}
+                      ${transforms_read_SOURCES}
                       ${query_F_SOURCES}
-                      core/globals.c 
-                      core/adios_read_hooks.c 
-                      core/adios_logger.c 
-                      core/util.c 
-                      core/strutil.c 
+                      core/globals.c
+                      core/adios_read_hooks.c
+                      core/adios_logger.c
+                      core/util.c
+                      core/strutil.c
                       core/a2sel.c
-                      core/adios_clock.c 
-                      core/qhashtbl.c 
-                      read/read_bp.c 
-                      read/read_bp_staged.c 
+                      core/adios_clock.c
+                      core/qhashtbl.c
+                      core/adiost_callback_internal.c
+                      core/adiost_default_tool.c
+                      read/read_bp.c
+                      read/read_bp_staged.c
                       read/read_bp_staged1.c)
     if(HAVE_DATASPACES)
         set(FortranReadLibSource ${FortranReadLibSource} read/read_dataspaces.c)
@@ -622,7 +637,7 @@ if(BUILD_FORTRAN)
     if(HAVE_FLEXPATH)
         set(FortranReadLibSource ${FortranReadLibSource} read/read_flexpath.c)
     endif(HAVE_FLEXPATH)
-  
+
     if(HAVE_ICEE)
         set(FortranReadLibSource ${FortranReadLibSource} read/read_icee.c)
     endif()
@@ -642,17 +657,17 @@ if(BUILD_FORTRAN)
     set(libadiosreadf_v1_a_CPPFLAGS "${libadiosreadf_a_CPPFLAGS}")
     set(libadiosreadf_v1_a_CFLAGS "${libadiosreadf_a_CFLAGS}")
     set(libadiosreadf_a_SOURCES ${libadiosreadf_a_SOURCES}
-                                core/adiosf_defs_mod.f90 
+                                core/adiosf_defs_mod.f90
                                 core/adiosf_read_mod.f90
                                 query/adios_query_mod.f90)
     set(nodist_include_HEADERS ${nodist_include_HEADERS} adios_read_mod.mod adios_defs_mod.mod adios_query_mod.mod)
     set(CLEANFILES ${CLEANFILES} adios_read_mod.mod adios_defs_mod.mod adios_query_mod.mod)
-  
+
     add_custom_command(
         OUTPUT adios_read_mod.o
 #        COMMAND $(FC) -c core/adiosf_read_mod.f90
         DEPENDS adios_defs_mod.o
-        )  
+        )
     add_custom_command(
         OUTPUT adios_read_mod.mod
         DEPENDS adios_read_mod.o
@@ -675,7 +690,7 @@ if(BUILD_FORTRAN)
         OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/adios_query_mod.mod
         COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/adios_query_mod.mod ${CMAKE_CURRENT_SOURCE_DIR}
         DEPENDS adios_query_mod.mod
-        ) 
+        )
 
     add_custom_command(
         OUTPUT adios_defs_mod.mod
@@ -693,7 +708,7 @@ if(BUILD_FORTRAN)
     install(FILES ${PROJECT_BINARY_DIR}/src/adios_read_mod.mod ${PROJECT_BINARY_DIR}/src/adios_defs_mod.mod ${PROJECT_BINARY_DIR}/src/adios_query_mod.mod DESTINATION ${includedir})
     add_library(adiosreadf ${libadiosreadf_a_SOURCES} ${EXTRA_READ_OBJECTS})
     set_target_properties(adiosreadf PROPERTIES COMPILE_FLAGS "${libadiosreadf_a_CPPFLAGS} ${libadiosreadf_a_CFLAGS}")
-  
+
 #  message(STATUS "${nodist_include_HEADERS}")
 #  message(STATUS "${libadiosreadf_v1_a_SOURCES}")
     add_library(adiosreadf_v1 ${libadiosreadf_v1_a_SOURCES} ${EXTRA_READ_OBJECTS})
@@ -704,30 +719,32 @@ endif(BUILD_FORTRAN)
 
 #start libadiosread_nompi.a
 set(libadiosread_nompi_a_SOURCES core/mpidummy.c
-                      core/adios_bp_v1.c 
-                      core/adios_endianness.c 
-                      core/bp_utils.c 
-                      core/futils.c 
-                      core/adios_error.c 
-                      core/adios_read.c 
-                      core/adios_read_v1.c 
-                      core/common_read.c 
+                      core/adios_bp_v1.c
+                      core/adios_endianness.c
+                      core/bp_utils.c
+                      core/futils.c
+                      core/adios_error.c
+                      core/adios_read.c
+                      core/adios_read_v1.c
+                      core/common_read.c
                       core/adios_infocache.c
                       core/adios_read_ext.c
-                      ${transforms_common_SOURCES} 
-                      ${transforms_read_SOURCES} 
+                      ${transforms_common_SOURCES}
+                      ${transforms_read_SOURCES}
                       ${query_C_SOURCES}
-#                      core/adios_internals.c 
-                      core/adios_logger.c 
-                      core/buffer.c 
-                      core/globals.c 
-                      core/adios_read_hooks.c 
-#                      core/adios_transport_hooks.c 
-                      core/util.c 
-                      core/strutil.c 
+#                      core/adios_internals.c
+                      core/adios_logger.c
+                      core/buffer.c
+                      core/globals.c
+                      core/adios_read_hooks.c
+#                      core/adios_transport_hooks.c
+                      core/util.c
+                      core/strutil.c
                       core/a2sel.c
-                      core/adios_clock.c 
-                      core/qhashtbl.c 
+                      core/adios_clock.c
+                      core/qhashtbl.c
+                      core/adiost_callback_internal.c
+                      core/adiost_default_tool.c
                       read/read_bp.c)
 
 if(HAVE_DMALLOC)
@@ -772,25 +789,27 @@ set_target_properties(adiosread_nompi PROPERTIES COMPILE_FLAGS "${libadiosread_n
 #start libadiosreadf_nompi.a libadiosreadf_nompi_v1.a
 if(BUILD_FORTRAN)
     set(FortranReadSeqLibSource core/mpidummy.c
-                          core/adios_bp_v1.c 
-                          core/adios_endianness.c 
-                          core/bp_utils.c 
-                          core/futils.c 
-                          core/adios_error.c 
-                          core/adios_logger.c 
-                          core/common_read.c 
+                          core/adios_bp_v1.c
+                          core/adios_endianness.c
+                          core/bp_utils.c
+                          core/futils.c
+                          core/adios_error.c
+                          core/adios_logger.c
+                          core/common_read.c
                           core/adios_infocache.c
                           core/adios_read_ext.c
-                          ${transforms_common_SOURCES} 
-                          ${transforms_read_SOURCES} 
+                          ${transforms_common_SOURCES}
+                          ${transforms_read_SOURCES}
                           ${query_F_SOURCES}
-                          core/globals.c 
-                          core/adios_read_hooks.c 
-                          core/util.c 
-                          core/strutil.c 
+                          core/globals.c
+                          core/adios_read_hooks.c
+                          core/util.c
+                          core/strutil.c
                           core/a2sel.c
-                          core/adios_clock.c 
-                          core/qhashtbl.c 
+                          core/adios_clock.c
+                          core/qhashtbl.c
+                          core/adiost_callback_internal.c
+                          core/adiost_default_tool.c
                           read/read_bp.c)
     if(HAVE_DATASPACES)
         set(FortranReadSeqLibSource ${FortranReadSeqLibSource} read/read_dataspaces.c)
@@ -839,24 +858,24 @@ endif(BUILD_FORTRAN)
 
 
 #start libadios_internal_nompi.a
-set(libadios_internal_nompi_a_SOURCES core/mpidummy.c 
-                                    core/adios_bp_v1.c 
-                                    core/adios_endianness.c 
-                                    core/bp_utils.c 
-                                    core/adios_internals.c 
-                                    ${transforms_common_SOURCES} 
-                                    ${transforms_write_SOURCES} 
+set(libadios_internal_nompi_a_SOURCES core/mpidummy.c
+                                    core/adios_bp_v1.c
+                                    core/adios_endianness.c
+                                    core/bp_utils.c
+                                    core/adios_internals.c
+                                    ${transforms_common_SOURCES}
+                                    ${transforms_write_SOURCES}
                                     ${query_C_SOURCES}
-                                    core/buffer.c 
-                                    core/adios_error.c 
-                                    core/adios_logger.c 
-                                    core/adios_timing.c 
-                                    core/util.c 
-                                    core/strutil.c 
+                                    core/buffer.c
+                                    core/adios_error.c
+                                    core/adios_logger.c
+                                    core/adios_timing.c
+                                    core/util.c
+                                    core/strutil.c
                                     core/a2sel.c
-                                    core/adios_clock.c 
-                                    core/qhashtbl.c 
-                                    core/futils.c 
+                                    core/adios_clock.c
+                                    core/qhashtbl.c
+                                    core/futils.c
                                     core/adios_transport_hooks.c)
 
 if(BUILD_WRITE)
diff --git a/src/Makefile.am b/src/Makefile.am
index 192bf82..6d3af1f 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -177,6 +177,8 @@ libcoreonce_a_SOURCES = core/a2sel.c \
                             core/strutil.c \
                             core/util.c \
                             core/adios_transform_methods.c \
+                            core/adiost_callback_internal.c \
+                            core/adiost_default_tool.c \
                             $(transforms_common_SOURCES) \
                             $(transforms_write_SOURCES) \
                             $(transforms_read_SOURCES) 
@@ -824,7 +826,8 @@ include_HEADERS += public/adios.h \
                    public/adios_link.h \
                    public/adios_read_ext.h \
                    public/adios_query.h \
-                   public/adios_transform_methods.h 
+                   public/adios_transform_methods.h \
+                   public/adiost_callback_api.h
                  
 EXTRA_DIST = core/adios_bp_v1.h core/adios_endianness.h \
              core/adios_internals.h core/adios_internals_mxml.h core/adios_logger.h \
@@ -835,6 +838,7 @@ EXTRA_DIST = core/adios_bp_v1.h core/adios_endianness.h \
              core/common_read.h core/adios_infocache.h core/futils.h core/globals.h core/ds_metadata.h \
              core/types.h core/util.h core/strutil.h core/flexpath.h core/qhashtbl.h \
              public/adios_version.h.in core/util_mpi.h \
+             core/adiost_callback_internal.h \
              $(transforms_common_HDRS) $(transforms_read_HDRS) $(transforms_write_HDRS) \
              $(query_common_HDRS) $(query_method_HDRS) \
              transforms/transform_plugins.h \
@@ -844,6 +848,7 @@ EXTRA_DIST = core/adios_bp_v1.h core/adios_endianness.h \
              transforms/adios_transform_zfp_common.h \
              transforms/adios_transform_template_read.c \
              transforms/adios_transform_template_write.c \
+             transforms/adios_transform_lz4_common.h \
              query/Makefile.plugins.cmake 
 #             nssi/adios_nssi_config.h nssi/aggregation.h nssi/io_timer.h 
 
diff --git a/src/Makefile.in b/src/Makefile.in
index 0654f85..a311f26 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -332,7 +332,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -340,8 +340,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -1178,7 +1178,9 @@ am__objects_144 = transforms/libcoreonce_a-adios_transform_identity_write.$(OBJE
 	transforms/libcoreonce_a-adios_transform_isobar_write.$(OBJEXT) \
 	transforms/libcoreonce_a-adios_transform_aplod_write.$(OBJEXT) \
 	transforms/libcoreonce_a-adios_transform_alacrity_write.$(OBJEXT) \
-	transforms/libcoreonce_a-adios_transform_zfp_write.$(OBJEXT)
+	transforms/libcoreonce_a-adios_transform_zfp_write.$(OBJEXT) \
+	transforms/libcoreonce_a-adios_transform_sz_write.$(OBJEXT) \
+	transforms/libcoreonce_a-adios_transform_lz4_write.$(OBJEXT)
 am__objects_145 = $(am__objects_1) \
 	core/transforms/libcoreonce_a-adios_transforms_write.$(OBJEXT) \
 	core/transforms/libcoreonce_a-adios_transforms_hooks_write.$(OBJEXT) \
@@ -1192,7 +1194,9 @@ am__objects_146 = transforms/libcoreonce_a-adios_transform_identity_read.$(OBJEX
 	transforms/libcoreonce_a-adios_transform_isobar_read.$(OBJEXT) \
 	transforms/libcoreonce_a-adios_transform_aplod_read.$(OBJEXT) \
 	transforms/libcoreonce_a-adios_transform_alacrity_read.$(OBJEXT) \
-	transforms/libcoreonce_a-adios_transform_zfp_read.$(OBJEXT)
+	transforms/libcoreonce_a-adios_transform_zfp_read.$(OBJEXT) \
+	transforms/libcoreonce_a-adios_transform_sz_read.$(OBJEXT) \
+	transforms/libcoreonce_a-adios_transform_lz4_read.$(OBJEXT)
 am__objects_147 = $(am__objects_1) \
 	core/transforms/libcoreonce_a-adios_transforms_read.$(OBJEXT) \
 	core/transforms/libcoreonce_a-adios_transforms_hooks_read.$(OBJEXT) \
@@ -1216,6 +1220,8 @@ am_libcoreonce_a_OBJECTS = core/libcoreonce_a-a2sel.$(OBJEXT) \
 	core/libcoreonce_a-strutil.$(OBJEXT) \
 	core/libcoreonce_a-util.$(OBJEXT) \
 	core/libcoreonce_a-adios_transform_methods.$(OBJEXT) \
+	core/libcoreonce_a-adiost_callback_internal.$(OBJEXT) \
+	core/libcoreonce_a-adiost_default_tool.$(OBJEXT) \
 	$(am__objects_143) $(am__objects_145) $(am__objects_147)
 libcoreonce_a_OBJECTS = $(am_libcoreonce_a_OBJECTS)
 PROGRAMS = $(bin_PROGRAMS)
@@ -1491,6 +1497,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -1567,6 +1577,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
@@ -1717,7 +1730,7 @@ include_HEADERS = public/adios.h public/adios_version.h \
 	public/adios_read_v2_fwd.h public/adios_selection.h \
 	public/adios_schema.h public/adios_link.h \
 	public/adios_read_ext.h public/adios_query.h \
-	public/adios_transform_methods.h
+	public/adios_transform_methods.h public/adiost_callback_api.h
 nodist_include_HEADERS = $(am__append_43) $(am__append_73)
 
 # End of building Parallel Write libs
@@ -1766,6 +1779,10 @@ libadiosreadf_nompi_a_CFLAGS =
 # ALACRITY plugin:
 
 # zfp plugin:
+
+# sz plugin:
+
+# LZ4 plugin:
 transforms_write_method_SOURCES =  \
 	transforms/adios_transform_identity_write.c \
 	transforms/adios_transform_zlib_write.c \
@@ -1774,7 +1791,9 @@ transforms_write_method_SOURCES =  \
 	transforms/adios_transform_isobar_write.c \
 	transforms/adios_transform_aplod_write.c \
 	transforms/adios_transform_alacrity_write.c \
-	transforms/adios_transform_zfp_write.c
+	transforms/adios_transform_zfp_write.c \
+	transforms/adios_transform_sz_write.c \
+	transforms/adios_transform_lz4_write.c
 transforms_read_method_SOURCES =  \
 	transforms/adios_transform_identity_read.c \
 	transforms/adios_transform_zlib_read.c \
@@ -1783,7 +1802,9 @@ transforms_read_method_SOURCES =  \
 	transforms/adios_transform_isobar_read.c \
 	transforms/adios_transform_aplod_read.c \
 	transforms/adios_transform_alacrity_read.c \
-	transforms/adios_transform_zfp_read.c
+	transforms/adios_transform_zfp_read.c \
+	transforms/adios_transform_sz_read.c \
+	transforms/adios_transform_lz4_read.c
 transforms_common_HDRS = core/adios_copyspec.h \
                          core/adios_subvolume.h \
                          core/adios_selection_util.h \
@@ -1877,6 +1898,8 @@ libcoreonce_a_SOURCES = core/a2sel.c \
                             core/strutil.c \
                             core/util.c \
                             core/adios_transform_methods.c \
+                            core/adiost_callback_internal.c \
+                            core/adiost_default_tool.c \
                             $(transforms_common_SOURCES) \
                             $(transforms_write_SOURCES) \
                             $(transforms_read_SOURCES) 
@@ -2095,6 +2118,7 @@ EXTRA_DIST = core/adios_bp_v1.h core/adios_endianness.h \
              core/common_read.h core/adios_infocache.h core/futils.h core/globals.h core/ds_metadata.h \
              core/types.h core/util.h core/strutil.h core/flexpath.h core/qhashtbl.h \
              public/adios_version.h.in core/util_mpi.h \
+             core/adiost_callback_internal.h \
              $(transforms_common_HDRS) $(transforms_read_HDRS) $(transforms_write_HDRS) \
              $(query_common_HDRS) $(query_method_HDRS) \
              transforms/transform_plugins.h \
@@ -2104,6 +2128,7 @@ EXTRA_DIST = core/adios_bp_v1.h core/adios_endianness.h \
              transforms/adios_transform_zfp_common.h \
              transforms/adios_transform_template_read.c \
              transforms/adios_transform_template_write.c \
+             transforms/adios_transform_lz4_common.h \
              query/Makefile.plugins.cmake 
 
 all: all-recursive
@@ -2755,6 +2780,10 @@ core/libcoreonce_a-strutil.$(OBJEXT): core/$(am__dirstamp)
 core/libcoreonce_a-util.$(OBJEXT): core/$(am__dirstamp)
 core/libcoreonce_a-adios_transform_methods.$(OBJEXT):  \
 	core/$(am__dirstamp)
+core/libcoreonce_a-adiost_callback_internal.$(OBJEXT):  \
+	core/$(am__dirstamp)
+core/libcoreonce_a-adiost_default_tool.$(OBJEXT):  \
+	core/$(am__dirstamp)
 core/transforms/$(am__dirstamp):
 	@$(MKDIR_P) core/transforms
 	@: > core/transforms/$(am__dirstamp)
@@ -2791,6 +2820,10 @@ transforms/libcoreonce_a-adios_transform_alacrity_write.$(OBJEXT):  \
 	transforms/$(am__dirstamp)
 transforms/libcoreonce_a-adios_transform_zfp_write.$(OBJEXT):  \
 	transforms/$(am__dirstamp)
+transforms/libcoreonce_a-adios_transform_sz_write.$(OBJEXT):  \
+	transforms/$(am__dirstamp)
+transforms/libcoreonce_a-adios_transform_lz4_write.$(OBJEXT):  \
+	transforms/$(am__dirstamp)
 core/transforms/libcoreonce_a-adios_transforms_read.$(OBJEXT):  \
 	core/transforms/$(am__dirstamp)
 core/transforms/libcoreonce_a-adios_transforms_hooks_read.$(OBJEXT):  \
@@ -2819,6 +2852,10 @@ transforms/libcoreonce_a-adios_transform_alacrity_read.$(OBJEXT):  \
 	transforms/$(am__dirstamp)
 transforms/libcoreonce_a-adios_transform_zfp_read.$(OBJEXT):  \
 	transforms/$(am__dirstamp)
+transforms/libcoreonce_a-adios_transform_sz_read.$(OBJEXT):  \
+	transforms/$(am__dirstamp)
+transforms/libcoreonce_a-adios_transform_lz4_read.$(OBJEXT):  \
+	transforms/$(am__dirstamp)
 
 libcoreonce.a: $(libcoreonce_a_OBJECTS) $(libcoreonce_a_DEPENDENCIES) $(EXTRA_libcoreonce_a_DEPENDENCIES) 
 	$(AM_V_at)-rm -f libcoreonce.a
@@ -5127,6 +5164,18 @@ core/libcoreonce_a-adios_transform_methods.o: core/adios_transform_methods.c
 core/libcoreonce_a-adios_transform_methods.obj: core/adios_transform_methods.c
 	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcoreonce_a_CPPFLAGS) $(CPPFLAGS) $(libcoreonce_a_CFLAGS) $(CFLAGS) -c -o core/libcoreonce_a-adios_transform_methods.obj `if test -f 'core/adios_transform_methods.c'; then $(CYGPATH_W) 'core/adios_transform_methods.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_transform_methods.c'; fi`
 
+core/libcoreonce_a-adiost_callback_internal.o: core/adiost_callback_internal.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcoreonce_a_CPPFLAGS) $(CPPFLAGS) $(libcoreonce_a_CFLAGS) $(CFLAGS) -c -o core/libcoreonce_a-adiost_callback_internal.o `test -f 'core/adiost_callback_internal.c' || echo '$(srcdir)/'`core/adiost_callback_internal.c
+
+core/libcoreonce_a-adiost_callback_internal.obj: core/adiost_callback_internal.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcoreonce_a_CPPFLAGS) $(CPPFLAGS) $(libcoreonce_a_CFLAGS) $(CFLAGS) -c -o core/libcoreonce_a-adiost_callback_internal.obj `if test -f 'core/adiost_callback_internal.c'; then $(CYGPATH_W) 'core/adiost_callback_internal.c'; else $(CYGPATH_W) '$(srcdir)/core/adiost_callback_internal.c'; fi`
+
+core/libcoreonce_a-adiost_default_tool.o: core/adiost_default_tool.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcoreonce_a_CPPFLAGS) $(CPPFLAGS) $(libcoreonce_a_CFLAGS) $(CFLAGS) -c -o core/libcoreonce_a-adiost_default_tool.o `test -f 'core/adiost_default_tool.c' || echo '$(srcdir)/'`core/adiost_default_tool.c
+
+core/libcoreonce_a-adiost_default_tool.obj: core/adiost_default_tool.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcoreonce_a_CPPFLAGS) $(CPPFLAGS) $(libcoreonce_a_CFLAGS) $(CFLAGS) -c -o core/libcoreonce_a-adiost_default_tool.obj `if test -f 'core/adiost_default_tool.c'; then $(CYGPATH_W) 'core/adiost_default_tool.c'; else $(CYGPATH_W) '$(srcdir)/core/adiost_default_tool.c'; fi`
+
 core/transforms/libcoreonce_a-adios_transforms_common.o: core/transforms/adios_transforms_common.c
 	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcoreonce_a_CPPFLAGS) $(CPPFLAGS) $(libcoreonce_a_CFLAGS) $(CFLAGS) -c -o core/transforms/libcoreonce_a-adios_transforms_common.o `test -f 'core/transforms/adios_transforms_common.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_common.c
 
@@ -5223,6 +5272,18 @@ transforms/libcoreonce_a-adios_transform_zfp_write.o: transforms/adios_transform
 transforms/libcoreonce_a-adios_transform_zfp_write.obj: transforms/adios_transform_zfp_write.c
 	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcoreonce_a_CPPFLAGS) $(CPPFLAGS) $(libcoreonce_a_CFLAGS) $(CFLAGS) -c -o transforms/libcoreonce_a-adios_transform_zfp_write.obj `if test -f 'transforms/adios_transform_zfp_write.c'; then $(CYGPATH_W) 'transforms/adios_transform_zfp_write.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_zfp_write.c'; fi`
 
+transforms/libcoreonce_a-adios_transform_sz_write.o: transforms/adios_transform_sz_write.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcoreonce_a_CPPFLAGS) $(CPPFLAGS) $(libcoreonce_a_CFLAGS) $(CFLAGS) -c -o transforms/libcoreonce_a-adios_transform_sz_write.o `test -f 'transforms/adios_transform_sz_write.c' || echo '$(srcdir)/'`transforms/adios_transform_sz_write.c
+
+transforms/libcoreonce_a-adios_transform_sz_write.obj: transforms/adios_transform_sz_write.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcoreonce_a_CPPFLAGS) $(CPPFLAGS) $(libcoreonce_a_CFLAGS) $(CFLAGS) -c -o transforms/libcoreonce_a-adios_transform_sz_write.obj `if test -f 'transforms/adios_transform_sz_write.c'; then $(CYGPATH_W) 'transforms/adios_transform_sz_write.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_sz_write.c'; fi`
+
+transforms/libcoreonce_a-adios_transform_lz4_write.o: transforms/adios_transform_lz4_write.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcoreonce_a_CPPFLAGS) $(CPPFLAGS) $(libcoreonce_a_CFLAGS) $(CFLAGS) -c -o transforms/libcoreonce_a-adios_transform_lz4_write.o `test -f 'transforms/adios_transform_lz4_write.c' || echo '$(srcdir)/'`transforms/adios_transform_lz4_write.c
+
+transforms/libcoreonce_a-adios_transform_lz4_write.obj: transforms/adios_transform_lz4_write.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcoreonce_a_CPPFLAGS) $(CPPFLAGS) $(libcoreonce_a_CFLAGS) $(CFLAGS) -c -o transforms/libcoreonce_a-adios_transform_lz4_write.obj `if test -f 'transforms/adios_transform_lz4_write.c'; then $(CYGPATH_W) 'transforms/adios_transform_lz4_write.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_lz4_write.c'; fi`
+
 core/transforms/libcoreonce_a-adios_transforms_read.o: core/transforms/adios_transforms_read.c
 	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcoreonce_a_CPPFLAGS) $(CPPFLAGS) $(libcoreonce_a_CFLAGS) $(CFLAGS) -c -o core/transforms/libcoreonce_a-adios_transforms_read.o `test -f 'core/transforms/adios_transforms_read.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_read.c
 
@@ -5307,6 +5368,18 @@ transforms/libcoreonce_a-adios_transform_zfp_read.o: transforms/adios_transform_
 transforms/libcoreonce_a-adios_transform_zfp_read.obj: transforms/adios_transform_zfp_read.c
 	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcoreonce_a_CPPFLAGS) $(CPPFLAGS) $(libcoreonce_a_CFLAGS) $(CFLAGS) -c -o transforms/libcoreonce_a-adios_transform_zfp_read.obj `if test -f 'transforms/adios_transform_zfp_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_zfp_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_zfp_read.c'; fi`
 
+transforms/libcoreonce_a-adios_transform_sz_read.o: transforms/adios_transform_sz_read.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcoreonce_a_CPPFLAGS) $(CPPFLAGS) $(libcoreonce_a_CFLAGS) $(CFLAGS) -c -o transforms/libcoreonce_a-adios_transform_sz_read.o `test -f 'transforms/adios_transform_sz_read.c' || echo '$(srcdir)/'`transforms/adios_transform_sz_read.c
+
+transforms/libcoreonce_a-adios_transform_sz_read.obj: transforms/adios_transform_sz_read.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcoreonce_a_CPPFLAGS) $(CPPFLAGS) $(libcoreonce_a_CFLAGS) $(CFLAGS) -c -o transforms/libcoreonce_a-adios_transform_sz_read.obj `if test -f 'transforms/adios_transform_sz_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_sz_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_sz_read.c'; fi`
+
+transforms/libcoreonce_a-adios_transform_lz4_read.o: transforms/adios_transform_lz4_read.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcoreonce_a_CPPFLAGS) $(CPPFLAGS) $(libcoreonce_a_CFLAGS) $(CFLAGS) -c -o transforms/libcoreonce_a-adios_transform_lz4_read.o `test -f 'transforms/adios_transform_lz4_read.c' || echo '$(srcdir)/'`transforms/adios_transform_lz4_read.c
+
+transforms/libcoreonce_a-adios_transform_lz4_read.obj: transforms/adios_transform_lz4_read.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcoreonce_a_CPPFLAGS) $(CPPFLAGS) $(libcoreonce_a_CFLAGS) $(CFLAGS) -c -o transforms/libcoreonce_a-adios_transform_lz4_read.obj `if test -f 'transforms/adios_transform_lz4_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_lz4_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_lz4_read.c'; fi`
+
 .f90.o:
 	$(AM_V_FC)$(FCCOMPILE) -c -o $@ $<
 
diff --git a/src/core/adios_bp_v1.c b/src/core/adios_bp_v1.c
index dc01bc3..92d0075 100644
--- a/src/core/adios_bp_v1.c
+++ b/src/core/adios_bp_v1.c
@@ -2238,12 +2238,52 @@ void adios_init_buffer_read_process_group_index (
     b->offset = 0;
 }
 
+static uint64_t read64(int f, char *buff, uint64_t readsize)
+{
+    // if we need to read > 2 GB, need to do it in parts
+    // since count is limited to MAX_MPIWRITE_SIZE (signed 32-bit max).
+    uint64_t bytes_read = 0;
+    int32_t to_read = 0;
+    int err = 0;
+    const size_t MAX_READ_SIZE = 0x7ffff000; // = 2,147,479,552
+
+    while (bytes_read < readsize && !err)
+    {
+        if (readsize - bytes_read > MAX_READ_SIZE)
+        {
+            to_read = MAX_READ_SIZE;
+        }
+        else
+        {
+            to_read = readsize - bytes_read;
+        }
+
+        ssize_t actual_read_bytes = read (f, buff+bytes_read, to_read);
+        if (actual_read_bytes == -1)
+        {
+            adios_error (err_file_read_error,
+                "Error while reading from file %d bytes: '%s'\n",
+                to_read, strerror(errno));
+            err = 1;
+        }
+        if (actual_read_bytes != to_read)
+        {
+            adios_error (err_file_read_error,
+                "Error while reading from file tried to read %d bytes but only got %d bytes\n",
+                to_read, actual_read_bytes);
+            err = 1;
+        }
+        bytes_read += actual_read_bytes;
+    }
+    return bytes_read;
+}
+
 void adios_posix_read_process_group_index (struct adios_bp_buffer_struct_v1 * b)
 {
     adios_init_buffer_read_process_group_index (b);
 
     lseek (b->f, b->pg_index_offset, SEEK_SET);
-    read (b->f, b->buff, b->pg_size);
+    read64 (b->f, b->buff, b->pg_size);
 }
 
 void adios_init_buffer_read_vars_index (struct adios_bp_buffer_struct_v1 * b)
@@ -2259,7 +2299,7 @@ void adios_posix_read_vars_index (struct adios_bp_buffer_struct_v1 * b)
     uint64_t r;
 
     lseek (b->f, b->vars_index_offset, SEEK_SET);
-    r = read (b->f, b->buff, b->vars_size);
+    r = read64 (b->f, b->buff, b->vars_size);
 
     if (r != b->vars_size)
         log_warn("reading vars_index: wanted %" PRIu64 ", read: %" PRIu64 "\n"
@@ -2281,7 +2321,7 @@ void adios_posix_read_attributes_index (struct adios_bp_buffer_struct_v1 * b)
     uint64_t r;
 
     lseek (b->f, b->attrs_index_offset, SEEK_SET);
-    r = read (b->f, b->buff, b->attrs_size);
+    r = read64 (b->f, b->buff, b->attrs_size);
 
     if (r != b->attrs_size)
         log_warn("reading attributess_index: wanted %" PRIu64 ", read: %" PRIu64 "\n",
diff --git a/src/core/adios_clock.h b/src/core/adios_clock.h
index 0a89b2e..53c5e7a 100644
--- a/src/core/adios_clock.h
+++ b/src/core/adios_clock.h
@@ -21,6 +21,9 @@ unsigned long adios_gettime_ms();
 #ifndef CLOCK_MONOTONIC
 #   define CLOCK_MONOTONIC 1
 #endif
+#ifndef CLOCK_PROCESS_CPUTIME_ID
+#   define CLOCK_PROCESS_CPUTIME_ID 2
+#endif
 
 /* create a timespec variable and pass the pointer here */
 int adios_clock_gettime(clockid_t clk_id, struct timespec *ts);
diff --git a/src/core/adios_internals.c b/src/core/adios_internals.c
index 4bafe98..05fe248 100755
--- a/src/core/adios_internals.c
+++ b/src/core/adios_internals.c
@@ -267,6 +267,8 @@ int adios_parse_dimension (const char * dimension
         return 0;
     }
 
+    char * end;
+
     /* Get the local dimension */
     // one of the three fields below will be set, the other two remain 0
     dim->dimension.rank = 0;
@@ -383,7 +385,15 @@ int adios_parse_dimension (const char * dimension
     }
     else
     {
-        dim->dimension.rank = atoi (dimension);
+        int errno_save = errno;
+        unsigned long long t = strtoull (dimension, &end, 10);
+        if (errno != errno_save || (end != 0 && *end != '\0'))
+        {
+            adios_error (err_invalid_argument,
+                    "invalid integer value for local dimension of a variable: '%s'\n",dimension);
+            return 0;
+        }
+        dim->dimension.rank = (uint64_t) t;
     }
 
     if (!global_dimension)
@@ -509,7 +519,15 @@ int adios_parse_dimension (const char * dimension
     }
     else
     {
-        dim->global_dimension.rank = strtol (global_dimension, NULL, 10);
+        int errno_save = errno;
+        unsigned long long t = strtoull (global_dimension, &end, 10);
+        if (errno != errno_save || (end != 0 && *end != '\0'))
+        {
+            adios_error (err_invalid_argument,
+                    "invalid integer value for global dimension of a variable: '%s'\n",global_dimension);
+            return 0;
+        }
+        dim->global_dimension.rank = (uint64_t) t;
     }
 
     if (!local_offset)
@@ -635,7 +653,15 @@ int adios_parse_dimension (const char * dimension
     }
     else
     {
-        dim->local_offset.rank = strtol (local_offset, NULL, 10);
+        int errno_save = errno;
+        unsigned long long t = strtoull (local_offset, &end, 10);
+        if (errno != errno_save || (end != 0 && *end != '\0'))
+        {
+            adios_error (err_invalid_argument,
+                    "invalid integer value for offset of a variable: '%s'\n",local_offset);
+            return 0;
+        }
+        dim->local_offset.rank = (uint64_t) t;
     }
 
     return 1;
@@ -1367,7 +1393,7 @@ int adios_common_declare_group (int64_t * id, const char * name
     // ADIOS Schema
     g->meshs = NULL;
     g->mesh_count = 0;
-    g->last_buffer_size = 0;
+    g->max_pg_size = 0;
 
 #if defined ADIOS_TIMERS || defined ADIOS_TIMER_EVENTS
     g->timing_obj = 0;
diff --git a/src/core/adios_internals.h b/src/core/adios_internals.h
index 09a6d42..49a1eb9 100644
--- a/src/core/adios_internals.h
+++ b/src/core/adios_internals.h
@@ -162,7 +162,8 @@ struct adios_group_struct
     enum ADIOS_FLAG all_unique_mesh_names;
 
     int attrid_update_epoch; // ID of special attribute "/__adios__/update_time_epoch" to find it fast
-    uint64_t last_buffer_size; // remember how much buffer we used in previous output steps
+    uint64_t max_pg_size; // remember how much buffer we used locally in previous output steps (this is not global maximum)
+                          // Note: this variable is not set in time aggregation
 
 #if defined ADIOS_TIMERS || defined ADIOS_TIMER_EVENTS
     // Using a "double buffering" approach. Current write cycle stored in timing_obj, while timing info from
@@ -173,8 +174,8 @@ struct adios_group_struct
 #endif
     int do_ts_aggr; //Yuan: introduced for time steps buffering
     struct adios_file_struct *ts_fd; // save and keep open the file struct during time aggr.
-    uint64_t ts_buffsize; //Yuan: introduced for time steps buffering
-    int ts_to_buffer; //current time steps
+    uint64_t ts_buffsize; //Yuan: introduced for time steps buffering, buffer size specified by user
+    int ts_to_buffer; //how many time steps are left to buffer before flush (counts down from max_ts-1 to 0)
     int max_ts; //maximum time steps to buffer 
     struct adios_index_struct_v1 * index; //the indexes for current written PGs 
     int built_index; // FIXME: 0 or 1, if index has been built, do not build it during close()
diff --git a/src/core/adios_internals_mxml.c b/src/core/adios_internals_mxml.c
index 4c40a85..6a55612 100644
--- a/src/core/adios_internals_mxml.c
+++ b/src/core/adios_internals_mxml.c
@@ -2032,7 +2032,6 @@ static int parseBuffer (mxml_node_t * node)
         else
             sizestr = size_MB;
 
-        size = atoi (sizestr);
         errno = 0;
         size = strtol(sizestr, &end, 10);
         if (errno || (end != 0 && *end != '\0')) {
@@ -2076,8 +2075,15 @@ static int parseTimeAggregation (mxml_node_t * node, int rank)
 
     if (!buffersize)
         bufsize = 0;
-    else
-        bufsize = atoi (buffersize);
+    else {
+        char *end;
+        errno = 0;
+        bufsize = strtoull(buffersize, &end, 10);
+        if (errno || (end != 0 && *end != '\0')) {
+            adios_error (err_invalid_buffer_size, "config.xml: time-aggregation buffer size cannot be parsed: %s\n", buffersize);
+            return 0;
+        }
+    }
 
     if (!group)
     {
diff --git a/src/core/adios_subvolume.c b/src/core/adios_subvolume.c
index c2340f0..63f9633 100644
--- a/src/core/adios_subvolume.c
+++ b/src/core/adios_subvolume.c
@@ -36,13 +36,13 @@ uint64_t compute_volume(int ndim, const uint64_t *dims) {
 
 int intersect_segments(uint64_t start1, uint64_t len1, uint64_t start2, uint64_t len2,
                        uint64_t *inter_start, uint64_t *inter_len) {
-    int end1, end2;
-    int inter_end;
+    uint64_t end1, end2;
+    uint64_t inter_end;
 
     // Swap the segments if segment 1 starts after segment 2, to simplify calculations
     if (start1 > start2) {
-        int tmps = start1;
-        int tmpl = len1;
+        uint64_t tmps = start1;
+        uint64_t tmpl = len1;
         start1 = start2;
         len1 = len2;
         start2 = tmps;
diff --git a/src/core/adios_transform_methods.c b/src/core/adios_transform_methods.c
index 8cd8fe8..a95b8ac 100644
--- a/src/core/adios_transform_methods.c
+++ b/src/core/adios_transform_methods.c
@@ -1,12 +1,15 @@
 #include <stdlib.h>
 #include <string.h>
 #include "public/adios_transform_methods.h"
-#include "core/transforms/adios_transforms_hooks.h" 
+#include "core/transforms/adios_transforms_hooks.h"
 #include "core/transforms/adios_transforms_hooks_read.h"
 #include "core/transforms/adios_transforms_read.h"
 
 ADIOS_AVAILABLE_TRANSFORM_METHODS * adios_available_transform_methods()
 {
+    /* Ensure the transforms are initialized before accessing */
+    adios_transform_read_init();
+
     int i, n;
     n = 0;
     for (i = (int)adios_transform_none; i < num_adios_transform_types; i++) {
diff --git a/src/core/adiost_callback_internal.c b/src/core/adiost_callback_internal.c
new file mode 100644
index 0000000..d9e0977
--- /dev/null
+++ b/src/core/adiost_callback_internal.c
@@ -0,0 +1,185 @@
+/* 
+ * ADIOS is freely available under the terms of the BSD license described
+ * in the COPYING file in the top level directory of this source distribution.
+ *
+ * Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.
+ */
+
+#include "adiost_callback_internal.h"
+#include "adios_version.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define adiost_get_callback_success 1
+#define adiost_get_callback_failure 0
+#define no_tool_present 0
+#define ADIOST_API_ROUTINE static
+
+/* The do { ... } while (0) idiom ensures that the code acts like a statement
+ * (function call). The unconditional use of the code ensures that the compiler
+ * always checks that your debug code is valid — but the optimizer will remove
+ * the code when DEBUG is 0. */
+#define DEBUG 0
+#define debug_print(...) do { \
+    if (DEBUG) { \
+        fprintf(stderr, __VA_ARGS__); \
+        fflush(stderr);\
+    } \
+} while (0)
+
+/* static/global variables for this file */
+adiost_callbacks_t adiost_callbacks;
+static adiost_initialize_t adiost_initialize_fn = NULL;
+static adiost_interface_fn_t adiost_fn_lookup(const char *s);
+int adios_tool_enabled = 0;
+const char adiost_enabled_env_var[] = {"ADIOS_TOOL"};
+
+/* forward declaration of the weak (default) tool */
+
+//extern __attribute__ (( weak )) adiost_initialize_t adiost_tool(void);
+//extern adiost_initialize_t adiost_tool(void);
+extern __attribute__((visibility("default"))) adiost_initialize_t __attribute__((weak)) adiost_tool(void);
+
+/* Pre-initialization. */
+
+void adiost_pre_init(void) {
+    // prevent calling this function more than once
+    static int adiost_pre_initialized = 0;
+    if (adiost_pre_initialized) return;
+    adiost_pre_initialized = 1;
+
+    // check whether we are enabled or disabled
+    char *adiost_env_var = (char *)getenv(adiost_enabled_env_var);
+    adios_tool_setting_t tool_setting = adiost_error;
+
+    // convert the input to our internal enumeration
+    if (adiost_env_var == NULL || strlen(adiost_env_var) == 0) {
+        tool_setting = adiost_unset;
+    } else if (strcmp(adiost_env_var, "disabled") == 0) {
+        tool_setting = adiost_disabled;
+    } else if (strcmp(adiost_env_var, "enabled") == 0) {
+        tool_setting = adiost_enabled;
+    }
+
+    // validate the input
+    debug_print("%s: %s = %d\n", __func__, adiost_enabled_env_var, tool_setting);
+    switch(tool_setting) {
+        case adiost_disabled:
+            break;
+        case adiost_unset:
+        case adiost_enabled:
+            if (adiost_tool) {
+            	adiost_initialize_fn = adiost_tool();
+            	// if initialization is successful, we are enabled
+            	if (adiost_initialize_fn) {
+                	adios_tool_enabled = 1;
+            	}
+            }
+            break;
+        case adiost_error:
+            fprintf(stderr, "Warning: %s has invalid value '%s'.\n", 
+                adiost_enabled_env_var, adiost_env_var);
+            fprintf(stderr, "Legal values are NULL, 'enabled', 'disabled'.\n");
+            break;
+    }
+    debug_print("%s: adiost_enabled = %d\n", __func__, adios_tool_enabled);
+}
+
+/* Post-initialization */
+
+void adiost_post_init(void) {
+    // prevent calling this function more than once
+    static int adiost_post_initialized = 0;
+    if (adiost_post_initialized) return;
+    adiost_post_initialized = 1;
+
+    // initialize the tool if specified
+    if (adios_tool_enabled) {
+        adiost_initialize_fn(adiost_fn_lookup, ADIOS_VERSION, ADIOST_VERSION);
+    }
+}
+
+/* For shutting down the tool support */
+
+void adiost_finalize(void) {
+    if (adios_tool_enabled) {
+        // call the registered shutdown callback function
+        if (adiost_callbacks.adiost_callback(adiost_event_library_shutdown)) {
+            adiost_callbacks.adiost_callback(adiost_event_library_shutdown)();
+        }
+    }
+    // prevent any further callback API attempts
+    adios_tool_enabled = 0;
+}
+
+/*****************************************************************************
+ * interface operations
+ ****************************************************************************/
+
+/*****************************************************************************
+ * callbacks
+ ****************************************************************************/
+
+ADIOST_API_ROUTINE int adiost_set_callback(adiost_event_t evid, adiost_callback_t cb)
+{
+    switch (evid) {
+
+/* Define all callbacks using macro expansion */
+
+#define adiost_event_macro(event_name, callback_type, event_id)                  \
+    case event_name:                                                           \
+        adiost_callbacks.adiost_callback(event_name) = (callback_type) cb;     \
+        return adiost_set_result_registration_success;
+
+    FOREACH_ADIOST_EVENT(adiost_event_macro)
+
+#undef adiost_event_macro
+
+    default: return adiost_set_result_registration_error;
+    }
+}
+
+ADIOST_API_ROUTINE int adiost_get_callback(adiost_event_t evid, adiost_callback_t *cb)
+{
+    switch (evid) {
+
+/* Define all callbacks using macro expansion */
+
+#define adiost_event_macro(event_name, callback_type, event_id)                  \
+    case event_name:                                                           \
+        if (1) {                    \
+            adiost_callback_t mycb =                                             \
+                (adiost_callback_t) adiost_callbacks.adiost_callback(event_name);    \
+            if (mycb) {                                                        \
+                *cb = mycb;                                                    \
+                return adiost_get_callback_success;                              \
+            }                                                                  \
+        }                                                                      \
+        return adiost_get_callback_failure;
+
+    FOREACH_ADIOST_EVENT(adiost_event_macro)
+
+#undef adiost_event_macro
+
+    default: return adiost_get_callback_failure;
+    }
+}
+
+/*****************************************************************************
+ * API inquiry for tool
+ ****************************************************************************/
+
+static adiost_interface_fn_t adiost_fn_lookup(const char *s)
+{
+
+#define adiost_interface_fn(fn) \
+    if (strcmp(s, #fn) == 0) return (adiost_interface_fn_t) fn;
+
+    FOREACH_ADIOST_INQUIRY_FN(adiost_interface_fn)
+
+    //FOREACH_ADIOST_PLACEHOLDER_FN(adiost_interface_fn)
+
+    return (adiost_interface_fn_t) 0;
+}
+
diff --git a/src/core/adiost_callback_internal.h b/src/core/adiost_callback_internal.h
new file mode 100644
index 0000000..a106ebb
--- /dev/null
+++ b/src/core/adiost_callback_internal.h
@@ -0,0 +1,85 @@
+/* 
+ * ADIOS is freely available under the terms of the BSD license described
+ * in the COPYING file in the top level directory of this source distribution.
+ *
+ * Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.
+ */
+
+#ifndef __ADIOST_CALLBACK_INTERNAL_H__
+#define __ADIOST_CALLBACK_INTERNAL_H__
+
+/* ADIOS Event Callback API
+ *
+ * This pair of source files (callback_api.h/c) is used to define a callback
+ * API for any tool that wants to be notified when ADIOS events happen. For
+ * example, a performance tool may want to know when staged writes happen
+ * and be notified how many bytes are transferred, in order to estimate 
+ * effective bandwidth.
+ */
+
+#include <stddef.h>
+// we want our implementation of the tool to be weak, and exported.
+#define ADIOST_EXPORT __attribute__((visibility("default")))
+#define ADIOST_WEAK __attribute__ (( weak )) 
+#include "public/adiost_callback_api.h"
+
+/* Definitions */
+
+#define ADIOST_VERSION 20170202 // 2017, February 02
+#define ADIOST_EXTERN extern "C"
+extern int adios_tool_enabled;
+
+typedef enum adios_tool_setting_e {
+    adiost_error = 0,
+    adiost_unset,
+    adiost_disabled,
+    adiost_enabled
+} adios_tool_setting_t;
+
+/* management of registered function callbacks */
+#define adiost_callback(e) e ## _callback
+
+typedef struct adiost_callbacks_s {
+#define adiost_event_macro(event, callback, eventid) callback adiost_callback(event);
+
+    FOREACH_ADIOST_EVENT(adiost_event_macro)
+
+    #undef adiost_event_macro
+} adiost_callbacks_t;
+
+
+/* Global variables */
+
+extern adiost_callbacks_t adiost_callbacks;
+
+/* internal callback API functions */
+
+void adiost_pre_init(void);
+void adiost_post_init(void);
+void adiost_finalize(void);
+
+/* These variadic macros save us from having to add 4+ lines of source code
+ * each time that we want to make an event callback. */
+
+#define ADIOST_CALLBACK(__event, __fd, ...) \
+    if (adios_tool_enabled && \
+        adiost_callbacks.adiost_callback(__event)) { \
+          adiost_callbacks.adiost_callback(__event)((int64_t)__fd, \
+            adiost_event, ##__VA_ARGS__); \
+    } \
+
+#define ADIOST_CALLBACK_ENTER(__event, __fd, ...) \
+    if (adios_tool_enabled && \
+        adiost_callbacks.adiost_callback(__event)) { \
+          adiost_callbacks.adiost_callback(__event)((int64_t)__fd, \
+            adiost_event_enter, ##__VA_ARGS__); \
+    } \
+
+#define ADIOST_CALLBACK_EXIT(__event, __fd, ...) \
+    if (adios_tool_enabled && \
+        adiost_callbacks.adiost_callback(__event)) { \
+          adiost_callbacks.adiost_callback(__event)((int64_t)__fd, \
+            adiost_event_exit, ##__VA_ARGS__); \
+    } \
+
+#endif // #ifndef __ADIOST_CALLBACK_INTERNAL_H__
diff --git a/src/core/adiost_default_tool.c b/src/core/adiost_default_tool.c
new file mode 100644
index 0000000..81dd428
--- /dev/null
+++ b/src/core/adiost_default_tool.c
@@ -0,0 +1,348 @@
+/* 
+ * ADIOS is freely available under the terms of the BSD license described
+ * in the COPYING file in the top level directory of this source distribution.
+ *
+ * Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.
+ */
+
+/* ADIOS Event Callback API - Default tool implementation
+ *
+ * This source file is a default implementation of the ADIOS callback API
+ * for tools, or ADIOST. This is a simple tool that will add performance
+ * data to the ADIOS metadata.
+ */
+
+#include "config.h"
+// we want our implementation of the tool to be weak, and exported.
+#define ADIOST_EXPORT __attribute__((visibility("default")))
+#define ADIOST_WEAK __attribute__ (( weak )) 
+
+#include "public/adiost_callback_api.h"
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <inttypes.h>
+#include <time.h>
+#include "adios_clock.h"
+#define ADIOST_EXTERN 
+#define DEBUG_PRINT printf("In %s!\n", __func__); fflush(stdout);
+#define DEBUG_PRINT_FD printf("file_descriptor: %" PRId64 "!\n", file_descriptor); fflush(stdout);
+#define ONE_BILLION 1000000000
+#define ONE_BILLIONF 1000000000.0
+
+#ifndef _GNU_SOURCE 
+#define _GNU_SOURCE 
+#endif // _GNU_SOURCE 
+#include <errno.h> /* to get program name */
+
+/* The do { ... } while (0) idiom ensures that the code acts like a statement
+ * (function call). The unconditional use of the code ensures that the compiler
+ * always checks that your debug code is valid — but the optimizer will remove
+ * the code when DEBUG is 0. */
+#define DEBUG 0
+#define debug_print(...) do { \
+    if (DEBUG) { \
+        fprintf(stderr, __VA_ARGS__); \
+        fflush(stderr);\
+    } \
+} while (0)
+
+/* to get the program name from glibc */
+extern char *program_invocation_name;
+extern char *program_invocation_short_name;
+
+/* Enumeration of timer indices. */
+typedef enum adiost_timer_index {
+    adiost_thread_timer = 0,
+    adiost_open_timer,
+    adiost_close_timer,
+    adiost_open_to_close_timer,
+    adiost_read_timer,
+    adiost_write_timer,
+    adiost_advance_step_timer,
+    adiost_group_size_timer,
+    adiost_transform_timer,
+    adiost_fp_send_read_msg_timer,
+    adiost_fp_send_finalize_msg_timer,
+    adiost_fp_add_var_to_read_msg_timer,
+    adiost_fp_copy_buffer_timer,
+    adiost_last_timer_unused
+} adiost_timer_index_t;
+
+/* Enumeration of counter indices */
+typedef enum adiost_counter_index {
+    adiost_data_bytes_counter = 0,
+    adiost_total_bytes_counter,
+    adiost_last_counter_unused
+} adiost_counter_index_t;
+
+/* Array of timers for all timed events. This is a static
+ * array, limited to the number of events. */
+static uint64_t adiost_timers_accumulated[adiost_last_timer_unused] = {0ULL};
+static uint64_t adiost_timers_count[adiost_last_timer_unused] = {0ULL};
+static struct timespec adiost_timers_start_time[adiost_last_timer_unused];
+static uint64_t adiost_counters_count[adiost_last_counter_unused] = {0ULL};
+static uint64_t adiost_counters_accumulated[adiost_last_counter_unused] = {0ULL};
+
+void __timer_start(adiost_timer_index_t index) {
+    adios_clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &(adiost_timers_start_time[index]));
+}
+
+/* Subtract the ‘struct timeval’ values X and Y,
+   storing the result in RESULT.
+   Return the total difference in nanoseconds. */
+
+uint64_t timespec_subtract (struct timespec *end, struct timespec *start)
+{
+    struct timespec result;
+    /* Perform the carry for the later subtraction by updating start. */
+    if (end->tv_nsec < start->tv_nsec) {
+        uint64_t nsec = (start->tv_nsec - end->tv_nsec) / ONE_BILLION + 1;
+        start->tv_nsec -= ONE_BILLION * nsec;
+        start->tv_sec += nsec;
+    }
+    if (end->tv_nsec - start->tv_nsec > ONE_BILLION) {
+        uint64_t nsec = (end->tv_nsec - start->tv_nsec) / ONE_BILLION;
+        start->tv_nsec += ONE_BILLION * nsec;
+        start->tv_sec -= nsec;
+    }
+
+    /* Compute the time remaining to wait.
+        tv_nsec is certainly positive. */
+    result.tv_sec = end->tv_sec - start->tv_sec;
+    result.tv_nsec = end->tv_nsec - start->tv_nsec;
+    return (result.tv_sec * ONE_BILLION) + result.tv_nsec;
+}
+
+void __timer_stop(adiost_timer_index_t index) {
+    struct timespec end_time;
+    adios_clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &end_time);
+    uint64_t diff = timespec_subtract(&end_time, &(adiost_timers_start_time[index]));
+    adiost_timers_accumulated[index] = adiost_timers_accumulated[index] + diff;
+    adiost_timers_count[index] = adiost_timers_count[index] + 1;
+}
+
+ADIOST_EXTERN void my_thread(int64_t file_descriptor, char * name, adiost_event_type_t type) {
+    DEBUG_PRINT
+    DEBUG_PRINT_FD
+    if (type == adiost_event_enter) {
+        __timer_start(adiost_thread_timer);
+    } else {
+        __timer_stop(adiost_thread_timer);
+    }
+}
+
+ADIOST_EXTERN void my_open ( int64_t file_descriptor, adiost_event_type_t type,
+    const char * group_name, const char * file_name, const char * mode) {
+    DEBUG_PRINT
+    DEBUG_PRINT_FD
+    if (type == adiost_event_enter) {
+        debug_print("group_name: %s!\n", group_name);
+        debug_print("file_name: %s!\n", file_name);
+        debug_print("mode: %s!\n", mode);
+        __timer_start(adiost_open_to_close_timer);
+        __timer_start(adiost_open_timer);
+    } else {
+        __timer_stop(adiost_open_timer);
+    }
+}
+
+ADIOST_EXTERN void my_close(int64_t file_descriptor, adiost_event_type_t type) {
+    DEBUG_PRINT
+    DEBUG_PRINT_FD
+    if (type == adiost_event_enter) {
+        __timer_start(adiost_close_timer);
+    } else {
+        __timer_stop(adiost_close_timer);
+        __timer_stop(adiost_open_to_close_timer);
+    }
+}
+
+ADIOST_EXTERN void my_write( int64_t file_descriptor, adiost_event_type_t type) {
+    DEBUG_PRINT
+    DEBUG_PRINT_FD
+    if (type == adiost_event_enter) {
+        __timer_start(adiost_write_timer);
+    } else {
+        __timer_stop(adiost_write_timer);
+    }
+} 
+
+ADIOST_EXTERN void my_read( int64_t file_descriptor, adiost_event_type_t type) {
+    DEBUG_PRINT
+    DEBUG_PRINT_FD
+    if (type == adiost_event_enter) {
+        __timer_start(adiost_read_timer);
+    } else {
+        __timer_stop(adiost_read_timer);
+    }
+} 
+
+ADIOST_EXTERN void my_advance_step( int64_t file_descriptor,
+    adiost_event_type_t type) {
+    DEBUG_PRINT
+    DEBUG_PRINT_FD
+    if (type == adiost_event_enter) {
+        __timer_start(adiost_advance_step_timer);
+    } else {
+        __timer_stop(adiost_advance_step_timer);
+    }
+} 
+
+ADIOST_EXTERN void my_group_size(int64_t file_descriptor, 
+    adiost_event_type_t type, uint64_t data_size, uint64_t total_size) {
+    DEBUG_PRINT
+    DEBUG_PRINT_FD
+    if (type == adiost_event_enter) {
+        __timer_start(adiost_group_size_timer);
+    } else {
+        debug_print("data size: %" PRIu64 "!\n", data_size); fflush(stdout);
+        adiost_counters_accumulated[adiost_data_bytes_counter] = 
+            adiost_counters_accumulated[adiost_data_bytes_counter] + data_size;
+        adiost_counters_count[adiost_data_bytes_counter] = 
+            adiost_counters_count[adiost_data_bytes_counter] + 1;
+        debug_print("total size: %" PRIu64 "!\n", total_size); fflush(stdout);
+        adiost_counters_accumulated[adiost_total_bytes_counter] = 
+            adiost_counters_accumulated[adiost_total_bytes_counter] + total_size;
+        adiost_counters_count[adiost_total_bytes_counter] = 
+            adiost_counters_count[adiost_total_bytes_counter] + 1;
+        __timer_stop(adiost_group_size_timer);
+    }
+} 
+
+ADIOST_EXTERN void my_transform( int64_t file_descriptor,
+        adiost_event_type_t type) {
+    DEBUG_PRINT
+    DEBUG_PRINT_FD
+    if (type == adiost_event_enter) {
+        __timer_start(adiost_transform_timer);
+    } else {
+        __timer_stop(adiost_transform_timer);
+    }
+} 
+
+ADIOST_EXTERN void my_fp_send_read_msg(int64_t file_descriptor,
+        adiost_event_type_t type) { 
+    DEBUG_PRINT
+    DEBUG_PRINT_FD
+    if (type == adiost_event_enter) {
+        __timer_start(adiost_fp_send_read_msg_timer);
+    } else {
+        __timer_stop(adiost_fp_send_read_msg_timer);
+    }
+} 
+
+ADIOST_EXTERN void my_fp_send_finalize_msg(int64_t file_descriptor,
+        adiost_event_type_t type) { 
+    DEBUG_PRINT
+    DEBUG_PRINT_FD
+    if (type == adiost_event_enter) {
+        __timer_start(adiost_fp_send_finalize_msg_timer);
+    } else {
+        __timer_stop(adiost_fp_send_finalize_msg_timer);
+    }
+} 
+
+ADIOST_EXTERN void my_fp_add_var_to_read_msg(int64_t file_descriptor,
+        adiost_event_type_t type) { 
+    DEBUG_PRINT
+    DEBUG_PRINT_FD
+    if (type == adiost_event_enter) {
+        __timer_start(adiost_fp_add_var_to_read_msg_timer);
+    } else {
+        __timer_stop(adiost_fp_add_var_to_read_msg_timer);
+    }
+} 
+
+ADIOST_EXTERN void my_fp_copy_buffer(int64_t file_descriptor,
+        adiost_event_type_t type) { 
+    DEBUG_PRINT
+    DEBUG_PRINT_FD
+    if (type == adiost_event_enter) {
+        __timer_start(adiost_fp_copy_buffer_timer);
+    } else {
+        __timer_stop(adiost_fp_copy_buffer_timer);
+    }
+} 
+
+/* This function is for printing a timer */
+void print_timer(const char *_name, adiost_timer_index_t index) {
+    if (adiost_timers_count[index] > 0ULL) {
+        debug_print("%s: %s, %" PRIu64 " calls, %3.9f seconds\n",
+            program_invocation_short_name, _name,
+            adiost_timers_count[index],
+            ((double)adiost_timers_accumulated[index])/ONE_BILLIONF);
+    }
+}
+
+/* This function is for printing a counter */
+void print_counter(const char *_name, adiost_counter_index_t index) {
+    if (adiost_counters_count[index] > 0ULL) {
+        debug_print("%s: %s, %" PRIu64 " calls, %" PRIu64 " bytes\n",
+            program_invocation_short_name, _name,
+            adiost_counters_count[index],
+            adiost_counters_accumulated[index]);
+    }
+}
+
+ADIOST_EXTERN void my_finalize(void) {
+    DEBUG_PRINT
+    print_timer("adios_thread", adiost_thread_timer);
+    print_timer("adios_open", adiost_open_timer);
+    print_timer("adios_close", adiost_close_timer);
+    print_timer("adios_open_to_close", adiost_open_to_close_timer);
+    print_timer("adios_group_size", adiost_group_size_timer);
+    print_timer("adios_advance_step", adiost_advance_step_timer);
+    print_timer("adios_transform", adiost_transform_timer);
+    print_timer("adios_read", adiost_read_timer);
+    print_timer("adios_write", adiost_write_timer);
+    print_timer("flexpath send open msg", adiost_fp_send_read_msg_timer);
+    print_timer("flexpath send finalize msg", adiost_fp_send_finalize_msg_timer);
+    print_timer("flexpath send var msg", adiost_fp_add_var_to_read_msg_timer);
+    print_timer("flexpath copy buffer", adiost_fp_copy_buffer_timer);
+    print_counter("adios data written", adiost_data_bytes_counter);
+    print_counter("adios total written", adiost_total_bytes_counter);
+}
+
+// This function is for checking that the function registration worked.
+#define CHECK(EVENT,FUNCTION,NAME) \
+    debug_print("Registering ADIOST callback %s...",NAME); \
+    if (adiost_fn_set_callback(EVENT, (adiost_callback_t)(FUNCTION)) != \
+                    adiost_set_result_registration_success) { \
+        debug_print("\n\tFailed to register ADIOST callback %s!\n",NAME); \
+    } else { \
+        debug_print("success.\n"); \
+    } \
+
+ADIOST_EXTERN void default_adiost_initialize (adiost_function_lookup_t adiost_fn_lookup,
+    const char *runtime_version, unsigned int adiost_version) {
+
+    adiost_set_callback_t adiost_fn_set_callback = 
+        (adiost_set_callback_t)adiost_fn_lookup("adiost_set_callback");
+
+    if (!getenv("ADIOST")) return;
+    debug_print("Registering ADIOS tool events...\n");
+    CHECK(adiost_event_thread,       my_thread,        "adios_thread");
+    CHECK(adiost_event_open,         my_open,          "adios_open");
+    CHECK(adiost_event_close,        my_close,         "adios_close");
+    CHECK(adiost_event_write,        my_write,         "adios_write");
+    CHECK(adiost_event_read,         my_read,          "adios_read");
+    CHECK(adiost_event_advance_step, my_advance_step,  "adios_advance_step");
+    CHECK(adiost_event_group_size,   my_group_size,    "adios_group_size");
+    CHECK(adiost_event_transform,    my_transform,     "adios_transform");
+    CHECK(adiost_event_fp_send_read_msg, 
+        my_fp_send_read_msg, "adios_fp_send_read_msg");
+    CHECK(adiost_event_fp_send_finalize_msg, 
+        my_fp_send_finalize_msg, "adios_fp_send_finalize_msg");
+    CHECK(adiost_event_fp_add_var_to_read_msg, 
+        my_fp_add_var_to_read_msg, "adiost_fp_add_var_to_read_msg");
+    CHECK(adiost_event_fp_copy_buffer, 
+        my_fp_copy_buffer, "adios_fp_copy_buffer");
+    CHECK(adiost_event_library_shutdown, my_finalize, "adios_finalize");
+}
+
+/* Weak function definitions, declarations */
+
+extern adiost_initialize_t adiost_tool(void) { return default_adiost_initialize; }
+
+
diff --git a/src/core/bp_utils.c b/src/core/bp_utils.c
index 1526f9b..6c8f386 100644
--- a/src/core/bp_utils.c
+++ b/src/core/bp_utils.c
@@ -152,6 +152,31 @@ int get_time (struct adios_index_var_struct_v1 * v, int step)
 
 }
 
+/* Convert 'step' to time, which is used in ADIOS internals.
+ * 'step' should start from 0.
+ */
+int get_time_from_pglist(struct bp_index_pg_struct_v1 * pgs, int step)
+{
+    int i = 0;
+    int prev_ti = 0, counter = 0;
+
+    while (pgs != NULL)
+    {
+        if (pgs->time_index != prev_ti)
+        {
+            counter ++;
+            if (counter == (step + 1))
+            {
+                return pgs->time_index;
+            }
+            prev_ti = pgs->time_index;
+        }
+        pgs = pgs->next;
+    }
+    return -1;
+
+}
+
 /* This routine converts "step" to "time", which is an ADIOS internal thing.
  * The calculated "time" is needed by other BP routines to figure 
  * correct piece of var index to process.
@@ -197,7 +222,7 @@ int adios_step_to_time (const ADIOS_FILE * fp, int varid, int from_steps)
     return adios_step_to_time_v1 (fp, v, from_steps);
 }
 
-int bp_read_open (const char * filename,
+static int bp_read_open (const char * filename,
           MPI_Comm comm,
           BP_FILE * fh)
 {
@@ -229,6 +254,44 @@ int bp_read_open (const char * filename,
     return 0;
 }
 
+static int bp_read_open_rootonly (const char * filename,
+          MPI_Comm comm,
+          BP_FILE * fh)
+{
+    int  err;
+    int  rank;
+
+    MPI_Comm_rank (comm, &rank);
+
+    // variable definition
+    MPI_Offset  file_size = 0;
+
+    if (rank == 0)
+    {
+        // open a file by one processor then broadcast the size and the success
+        err = MPI_File_open (MPI_COMM_SELF, (char *) filename, MPI_MODE_RDONLY,
+                (MPI_Info) MPI_INFO_NULL, &(fh->mpi_fh));
+        if (err == MPI_SUCCESS) {
+            MPI_File_get_size (fh->mpi_fh, &file_size);
+            err = 0;
+        }
+    }
+    MPI_Bcast (&err, 1, MPI_INT, 0, comm);
+    MPI_Bcast (&file_size, 1, MPI_UNSIGNED_LONG_LONG, 0, comm);
+    fh->b->file_size = file_size;
+    fh->mfooter.file_size = file_size;
+    if (err)
+    {
+        char e [MPI_MAX_ERROR_STRING];
+        int len = 0;
+        memset (e, 0, MPI_MAX_ERROR_STRING);
+        MPI_Error_string (err, e, &len);
+        adios_error (err_file_open_error, "MPI open failed for %s: '%s'\n", filename, e);
+        return adios_flag_no;
+    }
+    return err;
+}
+
 /* This routine does the parallel bp file open and index parsing.
  */
 int bp_open (const char * fname,
@@ -236,13 +299,12 @@ int bp_open (const char * fname,
              BP_FILE * fh)
 {
     int rank;
-    uint64_t header_size;
 
     MPI_Comm_rank (comm, &rank);
 
     adios_buffer_struct_init (fh->b);
 
-    if (bp_read_open (fname, comm, fh))
+    if (bp_read_open_rootonly (fname, comm, fh))
     {
         return -1;
     }
@@ -259,22 +321,56 @@ int bp_open (const char * fname,
     /* Broadcast to all other processors */
     MPI_Bcast (&fh->mfooter, sizeof (struct bp_minifooter), MPI_BYTE, 0, comm);
 
-    header_size = fh->mfooter.file_size-fh->mfooter.pgs_index_offset;
+    if (fh->mfooter.pgs_index_offset > 0)
+    {
+        /* This BP file has data not just metadata. We need to open it
+         * by every reader process.
+         * This check is equivalent to has_subfiles(fh) but this makes it more
+         * secure for future if a metadata+data BP file will ever have subfiles.
+         */
+        if (rank == 0)
+            MPI_File_close(&fh->mpi_fh);
+        if (bp_read_open (fname, comm, fh))
+        {
+            return -1;
+        }
+    }
+
+    uint64_t footer_size = fh->mfooter.file_size-fh->mfooter.pgs_index_offset;
 
     if (rank != 0)
     {
         if (!fh->b->buff)
         {
-            bp_alloc_aligned (fh->b, header_size);
+            bp_alloc_aligned (fh->b, footer_size);
             assert (fh->b->buff);
 
-            memset (fh->b->buff, 0, header_size);
+            memset (fh->b->buff, 0, footer_size);
             fh->b->offset = 0;
         }
     }
 
     MPI_Barrier (comm);
-    MPI_Bcast (fh->b->buff, fh->mfooter.file_size-fh->mfooter.pgs_index_offset, MPI_BYTE, 0, comm);
+    // Broadcast the index which may be bigger than 2GB, so do it in chunks
+    uint64_t bytes_sent = 0;
+    int32_t to_send = 0;
+    int r, err;
+
+    while (bytes_sent < footer_size)
+    {
+        if (footer_size - bytes_sent > MAX_MPIWRITE_SIZE)
+        {
+            to_send = MAX_MPIWRITE_SIZE;
+        }
+        else
+        {
+            to_send = footer_size - bytes_sent;
+        }
+
+        MPI_Bcast (fh->b->buff + bytes_sent, to_send, MPI_BYTE, 0, comm);
+        bytes_sent += to_send;
+    }
+
 
     /* Everyone parses the index on its own */
     bp_parse_pgs (fh);
@@ -417,6 +513,7 @@ BP_FILE * BP_FILE_alloc (const char * fname, MPI_Comm comm)
     fh->subfile_handles.warning_printed = 0;
     fh->subfile_handles.head = NULL;
     fh->subfile_handles.tail = NULL;
+    fh->mpi_fh = MPI_FILE_NULL;
     return fh;
 }
 
@@ -500,7 +597,7 @@ int bp_close (BP_FILE * fh)
     MPI_File mpi_fh = fh->mpi_fh;
 
     adios_errno = 0;
-    if (fh->mpi_fh)
+    if (fh->mpi_fh != MPI_FILE_NULL)
         MPI_File_close (&mpi_fh);
 
     close_all_BP_subfiles (fh);
@@ -704,7 +801,6 @@ int bp_read_minifooter (BP_FILE * bp_struct)
     struct adios_bp_buffer_struct_v1 * b = bp_struct->b;
     struct bp_minifooter * mh = &bp_struct->mfooter;
     uint64_t attrs_end = b->file_size - MINIFOOTER_SIZE;
-    int r;
 
     MPI_Status status;
 
@@ -727,7 +823,9 @@ int bp_read_minifooter (BP_FILE * bp_struct)
        It also sets b->change_endianness */
     /* Note that b is not sent over to processes, only the minifooter and then b->buff (the footer) */
     b->offset = MINIFOOTER_SIZE - 4;
-    adios_parse_version (b, &mh->version);
+    uint32_t v;
+    adios_parse_version (b, &v);
+    mh->version = v;
     mh->change_endianness = b->change_endianness;
 
     // validity check
@@ -796,12 +894,56 @@ int bp_read_minifooter (BP_FILE * bp_struct)
     uint64_t footer_size = mh->file_size - mh->pgs_index_offset;
     bp_realloc_aligned (b, footer_size);
     MPI_File_seek (bp_struct->mpi_fh,
-                        (MPI_Offset)  mh->pgs_index_offset,
-                        MPI_SEEK_SET);
-    MPI_File_read (bp_struct->mpi_fh, b->buff, footer_size,
-            MPI_BYTE, &status);
+            (MPI_Offset)  mh->pgs_index_offset,
+            MPI_SEEK_SET);
+
+    // if we need to read > 2 GB, need to do it in parts
+    // since count is limited to MAX_MPIWRITE_SIZE (signed 32-bit max).
+    uint64_t bytes_read = 0;
+    int32_t to_read = 0;
+    int r, err;
+   
+    while (bytes_read < footer_size)
+    {
+        if (footer_size - bytes_read > MAX_MPIWRITE_SIZE)
+        {
+            to_read = MAX_MPIWRITE_SIZE;
+        }
+        else
+        {
+            to_read = footer_size - bytes_read;
+        }
 
-    MPI_Get_count (&status, MPI_BYTE, &r);
+        err = MPI_File_read (bp_struct->mpi_fh, b->buff+bytes_read, to_read, MPI_BYTE, &status); 
+        if (err != MPI_SUCCESS) 
+        {
+            char e [MPI_MAX_ERROR_STRING];
+            int len = 0;
+            memset (e, 0, MPI_MAX_ERROR_STRING);
+            MPI_Error_string (err, e, &len);
+            adios_error (err_file_open_error,
+                "Error while reading BP index, %" PRIu64 " bytes from file offset %" PRIu64 ": MPI_File_read error: '%s'\n",
+                to_read, mh->pgs_index_offset, e);
+        }
+        err = MPI_Get_count (&status, MPI_BYTE, &r);
+        if (err != MPI_SUCCESS) 
+        {
+            char e [MPI_MAX_ERROR_STRING];
+            int len = 0;
+            memset (e, 0, MPI_MAX_ERROR_STRING);
+            MPI_Error_string (err, e, &len);
+            adios_error (err_file_open_error,
+                "Error while reading BP index, %" PRIu64 " bytes from file offset %" PRIu64 ": MPI_Get_count error: '%s'\n",
+                to_read, mh->pgs_index_offset, e);
+        } 
+        else if (r != to_read) 
+        {
+            adios_error (err_file_open_error,
+                "Error while reading BP index, tried to read %" PRIu64 " bytes from file offset %" PRIu64 " but only got %" PRIu64 " bytes\n",
+                to_read, mh->pgs_index_offset);
+        }
+        bytes_read += to_read;
+    }
 
     // reset the pointer to the beginning of buffer
     b->offset = 0;
@@ -826,9 +968,9 @@ int bp_parse_pgs (BP_FILE * fh)
     b->change_endianness = (enum ADIOS_FLAG) mh->change_endianness;
 
     BUFREAD64(b, mh->pgs_count)
-    BUFREAD64(b, mh->pgs_length)
+        BUFREAD64(b, mh->pgs_length)
 
-    int j;
+        int j;
     uint64_t group_count = 0;
     char ** namelist;
     char fortran_flag;
@@ -1311,6 +1453,53 @@ int bp_parse_attrs (BP_FILE * fh)
     return 0;
 }
 
+static const uint64_t JOINEDDIM = 18446744073709551614ULL;
+static void process_joined_array(struct adios_index_var_struct_v1 *v)
+{
+    if (v->characteristics[0].value)  // scalar
+        return;
+    if (!is_global_array(&(v->characteristics[0])))
+        return;
+    int ndim = v->characteristics[0].dims.count;
+    int joindim = -1;
+    int i, j;
+    for (i = 0; i < ndim; i++)
+    {
+        if (v->characteristics[0].dims.dims[i*3+1] == JOINEDDIM)
+        {
+            joindim = i;
+            log_debug("Variable %s is a Joined Array in dimension %d\n", v->var_name, i);
+            break;
+        }
+    }
+    if (joindim >= 0)
+    {
+        uint64_t offset = 0;
+        uint32_t timeidx = v->characteristics[0].time_index;
+        log_debug("  Calculate joined array offsets for %" PRIu64 " blocks\n", v->characteristics_count);
+        //log_debug("  Time index start from %d\n", v->characteristics[0].time_index);
+        int startidx = 0; // first characteristics for the current time_index
+        for (i = 0; i < v->characteristics_count; ++i)
+        {
+            if (v->characteristics[i].time_index > timeidx)
+            {
+                //log_debug("  Time index change to %d\n", v->characteristics[i].time_index);
+                // Update global dimensions of all characteristics for this time_index now
+                for (j = startidx; j < i; ++j) {
+                    v->characteristics[j].dims.dims[joindim*3+1] = offset;
+                }
+                timeidx = v->characteristics[i].time_index;
+                offset = 0;
+                startidx = i;
+            }
+            //log_debug("    Calculated offset = %" PRIu64 "\n", offset);
+            v->characteristics[i].dims.dims[joindim*3+2] = offset;
+            offset += v->characteristics[i].dims.dims[joindim*3];
+        }
+    }
+}
+
+
 /*******************/
 /* Parse VARIABLES */
 /*******************/
@@ -1428,6 +1617,7 @@ int bp_parse_vars (BP_FILE * fh)
                         (*root)->characteristics [j].time_index);*/
             }
         }
+        process_joined_array((*root));
         root = &(*root)->next;
     }
 
@@ -1949,7 +2139,7 @@ int bp_seek_to_step (ADIOS_FILE * fp, int tostep, int show_hidden_attrs)
     else
     {
         allstep = 0;
-        t = get_time (var_root, tostep);
+        t = get_time_from_pglist (fh->pgs_root, tostep);
     }
 
     /* Prepare vars */
diff --git a/src/core/bp_utils.h b/src/core/bp_utils.h
index d7aed08..df45684 100644
--- a/src/core/bp_utils.h
+++ b/src/core/bp_utils.h
@@ -31,9 +31,7 @@ int bp_get_characteristics_data (void ** ptr_data,
                 int data_size,
                 enum ADIOS_DATATYPES type);
 int bp_read_close (struct adios_bp_buffer_struct_v1 * b);
-int bp_read_open (const char * filename,
-        MPI_Comm comm,
-        BP_FILE * fh);
+
 MPI_File * get_BP_subfile_handle(BP_FILE *fh, uint32_t file_index);
 void add_BP_subfile_handle (struct BP_FILE *fh, struct BP_file_handle * n);
 void close_all_BP_subfiles (BP_FILE * fh);
diff --git a/src/core/common_adios.c b/src/core/common_adios.c
index 1b90ef1..46510c1 100644
--- a/src/core/common_adios.c
+++ b/src/core/common_adios.c
@@ -7,27 +7,27 @@
 
 #include "config.h"
 
-#include <stdlib.h>
+#include <assert.h>
 #include <math.h>
+#include <stdint.h>
+#include <stdlib.h>
 #include <string.h>
+#include <sys/time.h>  // gettimeofday
 #include <unistd.h>
-#include <stdint.h>
-#include <sys/time.h> // gettimeofday
-#include <assert.h>
 
 // xml parser
 #include <mxml.h>
 
-#include "core/types.h"
+#include "core/adios_bp_v1.h"
 #include "core/adios_internals.h"
 #include "core/adios_internals_mxml.h"
-#include "core/common_adios.h"
-#include "core/adios_bp_v1.h"
-#include "core/buffer.h"
-#include "core/adios_transport_hooks.h"
 #include "core/adios_logger.h"
 #include "core/adios_timing.h"
+#include "core/adios_transport_hooks.h"
+#include "core/buffer.h"
+#include "core/common_adios.h"
 #include "core/qhashtbl.h"
+#include "core/types.h"
 #include "public/adios_error.h"
 
 // NCSU ALACRITY-ADIOS
@@ -43,555 +43,567 @@
 #include "dmalloc.h"
 #endif
 
-extern struct adios_transport_struct * adios_transports;
+#include "adiost_callback_internal.h"
+
+extern struct adios_transport_struct *adios_transports;
 extern int adios_errno;
 
 ///////////////////////////////////////////////////////////////////////////////
-int common_adios_init (const char * config, MPI_Comm comm)
-{
-    // parse the config file
-    if (comm == MPI_COMM_NULL)
-        comm = MPI_COMM_SELF;
-    adios_errno = err_no_error;
-    adios_parse_config (config, comm);
-    return adios_errno;
+int common_adios_init(const char *config, MPI_Comm comm) {
+  // parse the config file
+  if (comm == MPI_COMM_NULL) comm = MPI_COMM_SELF;
+  adios_errno = err_no_error;
+  adiost_pre_init();
+  adios_parse_config(config, comm);
+  adiost_post_init();
+  return adios_errno;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
 // all XML file pieces will be provided by another series of calls
-int common_adios_init_noxml (MPI_Comm comm)
-{
-    if (comm == MPI_COMM_NULL)
-        comm = MPI_COMM_SELF;
-    adios_errno = err_no_error;
-    adios_local_config (comm);
-    return adios_errno;
+int common_adios_init_noxml(MPI_Comm comm) {
+  if (comm == MPI_COMM_NULL) comm = MPI_COMM_SELF;
+  adios_errno = err_no_error;
+  adiost_pre_init();
+  adios_local_config(comm);
+  adiost_post_init();
+  return adios_errno;
 }
 
-
 ///////////////////////////////////////////////////////////////////////////////
-int common_adios_finalize (int mype)
-{
-    struct adios_method_list_struct * m;
-    struct adios_group_list_struct * g;
-
-    //Time Aggregation: there may be time steps left in the time aggregated buffer, which
-    // needs to be dumped out before finalize
-    for (g = adios_get_groups(); g; g = g->next)
-    {
-        if (TimeAggregationInProgress(g->group)) {
-            //log_debug("time buffering enabled and data left in finalize... close file\n");
-            /* At this point the buffer of the last step has been closed and
-             * the index has been built but it was not yet passed on to the
-             * method's close function.
-             * do_ts_finalize signals this special case to common_adios_close()
-             */
-            SetTimeAggregationFlush(g->group, 1);
-            // => TimeAggregationIsFlushing => TimeAggregationLastStep
-            common_adios_close (g->group->ts_fd); // close file
-            SetTimeAggregation(g->group, 0); //turn off ts buffering
-        }
+int common_adios_finalize(int mype) {
+  struct adios_method_list_struct *m;
+  struct adios_group_list_struct *g;
+
+  // Time Aggregation: there may be time steps left in the time aggregated
+  // buffer, which
+  // needs to be dumped out before finalize
+  for (g = adios_get_groups(); g; g = g->next) {
+    if (TimeAggregationInProgress(g->group)) {
+      // log_debug("time buffering enabled and data left in finalize... close
+      // file\n");
+      /* At this point the buffer of the last step has been closed and
+       * the index has been built but it was not yet passed on to the
+       * method's close function.
+       * do_ts_finalize signals this special case to common_adios_close()
+       */
+      SetTimeAggregationFlush(g->group, 1);
+      // => TimeAggregationIsFlushing => TimeAggregationLastStep
+      common_adios_close(g->group->ts_fd);  // close file
+      SetTimeAggregation(g->group, 0);      // turn off ts buffering
     }
-
-    adios_errno = err_no_error;
-    for (m = adios_get_methods (); m; m = m->next)
-    {
-        if (   m->method->m != ADIOS_METHOD_UNKNOWN
-                && m->method->m != ADIOS_METHOD_NULL
-                && adios_transports [m->method->m].adios_finalize_fn
-        )
-        {
-            adios_transports [m->method->m].adios_finalize_fn (mype, m->method);
-        }
+  }
+
+  adios_errno = err_no_error;
+  for (m = adios_get_methods(); m; m = m->next) {
+    if (m->method->m != ADIOS_METHOD_UNKNOWN &&
+        m->method->m != ADIOS_METHOD_NULL &&
+        adios_transports[m->method->m].adios_finalize_fn) {
+      adios_transports[m->method->m].adios_finalize_fn(mype, m->method);
     }
+  }
 
-    adios_cleanup ();
+  adios_cleanup();
 
 #if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 0)
-    timer_finalize ();
+  timer_finalize();
 #endif
 
-    return adios_errno;
+  adiost_finalize();
+  return adios_errno;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
-int common_adios_allocate_buffer (enum ADIOS_BUFFER_ALLOC_WHEN adios_buffer_alloc_when
-                                  ,uint64_t buffer_size)
-{
-    adios_errno = err_no_error;
-    log_warn ("adios_allocate_buffer is not supported anymore. "
-            "Use adios_set_max_buffer_size(size_in_MB) to set the maximum allowed "
-            "buffer size for each adios_open()...adios_close() operation.\n");
-    //adios_buffer_size_requested_set (buffer_size * 1024 * 1024);
-    //adios_buffer_alloc_when_set (adios_buffer_alloc_when);
-    //adios_set_buffer_size ();
-    return adios_errno;
+int common_adios_allocate_buffer(
+    enum ADIOS_BUFFER_ALLOC_WHEN adios_buffer_alloc_when,
+    uint64_t buffer_size) {
+  adios_errno = err_no_error;
+  log_warn(
+      "adios_allocate_buffer is not supported anymore. "
+      "Use adios_set_max_buffer_size(size_in_MB) to set the maximum allowed "
+      "buffer size for each adios_open()...adios_close() operation.\n");
+  // adios_buffer_size_requested_set (buffer_size * 1024 * 1024);
+  // adios_buffer_alloc_when_set (adios_buffer_alloc_when);
+  // adios_set_buffer_size ();
+  return adios_errno;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
 // Drew: used for experiments
 static uint32_t pinned_timestep = 0;
-void adios_pin_timestep(uint32_t ts) {
-    pinned_timestep = ts;
-}
-
+void adios_pin_timestep(uint32_t ts) { pinned_timestep = ts; }
 
 ///////////////////////////////////////////////////////////////////////////////
 static const char ADIOS_ATTR_PATH[] = "/__adios__";
 
-int common_adios_open (int64_t * fd_p, const char * group_name
-                       ,const char * name, const char * file_mode, MPI_Comm comm
-)
-{
+int common_adios_open(int64_t *fd_p, const char *group_name, const char *name,
+                      const char *file_mode, MPI_Comm comm) {
 #if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 0)
-    timer_start ("adios_open_to_close");
-    timer_start ("adios_open");
+  timer_start("adios_open_to_close");
+  timer_start("adios_open");
 #endif
+  ADIOST_CALLBACK_ENTER(adiost_event_open, *fd_p, group_name, name, file_mode);
+
+  struct adios_group_struct *g = NULL;
+  struct adios_method_list_struct *methods = NULL;
+  struct adios_file_struct *fd = NULL;
+  enum ADIOS_METHOD_MODE mode;
+
+  // printf("beginning of file open... bytes_written=%llu\n",
+  // fd->bytes_written);
+
+  adios_errno = err_no_error;
+  g = adios_common_get_group(group_name);
+  if (!g) {
+    adios_error(err_invalid_group,
+                "adios_open: try to open file %s with undefined group: %s\n",
+                name, group_name);
+    *fd_p = 0;
+    ADIOST_CALLBACK_EXIT(adiost_event_open, *fd_p, group_name, name, file_mode);
+    return adios_errno;
+  }
+
+  if (!strcasecmp(file_mode, "r"))
+    mode = adios_mode_read;
+  else if (!strcasecmp(file_mode, "w"))
+    mode = adios_mode_write;
+  else if (!strcasecmp(file_mode, "a"))
+    mode = adios_mode_append;
+  else if (!strcasecmp(file_mode, "u"))
+    mode = adios_mode_update;
+  else {
+    adios_error(err_invalid_file_mode,
+                "adios_open: unknown file mode: %s, supported r,w,a,u\n",
+                file_mode);
+
+    *fd_p = 0;
 
-    struct adios_group_struct * g = NULL;
-    struct adios_method_list_struct * methods = NULL;
-    struct adios_file_struct * fd = NULL;
-    enum ADIOS_METHOD_MODE mode;
-
-    //printf("beginning of file open... bytes_written=%llu\n", fd->bytes_written);
-
-    adios_errno = err_no_error;
-    g = adios_common_get_group (group_name);
-    if (!g) {
-        adios_error(err_invalid_group, 
-                    "adios_open: try to open file %s with undefined group: %s\n",
-                    name, group_name);
-        *fd_p = 0;
-        return adios_errno;
-    }
-
-    if (!strcasecmp (file_mode, "r"))
-        mode = adios_mode_read;
+    return adios_errno;
+  }
+
+  // Time Aggregation: if file name suddenly changes for the group
+  // we need to flush the buffer to the old file and start clean
+  if (TimeAggregationInProgress(g) && strcmp(name, g->ts_fd->name)) {
+    log_debug(
+        "TimeAggr: new filename during aggregation. Flush and start buffering "
+        "again\n");
+    SetTimeAggregationFlush(
+        g, 1);  // => TimeAggregationIsFlushing => TimeAggregationLastStep
+    common_adios_close(g->ts_fd);   // close old file
+    SetTimeAggregationFlush(g, 0);  // => NOT TimeAggregationIsFlushing
+    g->ts_fd =
+        NULL;  // => TimeAggregationJustBegan AND NOT TimeAggregationInProgress
+  }
+
+  // printf("ts_to buffer=%d max_tx=%d\n", g->ts_to_buffer, g->max_ts);
+  // Time Aggregation: buffering time steps doesn't need to init file open every
+  // time
+  if (TimeAggregationInProgress(g)) {
+    fd = g->ts_fd;  // continue writing to the previous file
+    //   printf("skip file init... bytes_written=%llu file_handle_addr=%llu\n",
+    //   fd->bytes_written, fd);
+    //  printf("open: fd->pgs_written->pg_start_in_file=%lld,
+    //  fd->current_pg->pg_start_in_file=%lld\n",
+    //  fd->pgs_written->pg_start_in_file, fd->current_pg->pg_start_in_file);
+    log_debug("TimeAggr: skip file name and group assignment\n");
+  } else {
+    log_debug("TimeAggr: new open... file struct init\n");
+    fd = (struct adios_file_struct *)malloc(sizeof(struct adios_file_struct));
+    adios_file_struct_init(fd);
+    fd->name = strdup(name);
+    fd->subfile_index = -1;  // subfile index is by default -1
+    fd->group = g;
+    fd->mode = mode;
+    if (comm == MPI_COMM_NULL)
+      fd->comm = MPI_COMM_NULL;
+    else if (comm == MPI_COMM_SELF)
+      fd->comm = MPI_COMM_SELF;
     else
-        if (!strcasecmp (file_mode, "w"))
-            mode = adios_mode_write;
-        else
-            if (!strcasecmp (file_mode, "a"))
-                mode = adios_mode_append;
-            else
-                if (!strcasecmp (file_mode, "u"))
-                    mode = adios_mode_update;
-                else
-                {
-                    adios_error(err_invalid_file_mode,
-                                "adios_open: unknown file mode: %s, supported r,w,a,u\n",
-                                file_mode);
-
-                    *fd_p = 0;
-
-                    return adios_errno;
-                }
-
-    //printf("ts_to buffer=%d max_tx=%d\n", g->ts_to_buffer, g->max_ts);
-    //Time Aggregation: buffering time steps doesn't need to init file open every time
-    if (TimeAggregationInProgress(g)) {
-        fd = g->ts_fd; //continue writing to the previous file
-        //   printf("skip file init... bytes_written=%llu file_handle_addr=%llu\n", fd->bytes_written, fd);
-        //  printf("open: fd->pgs_written->pg_start_in_file=%lld, fd->current_pg->pg_start_in_file=%lld\n", fd->pgs_written->pg_start_in_file, fd->current_pg->pg_start_in_file);
-        log_debug("TimeAggr: skip file name and group assignment\n");
-    }
-    else {
-
-        log_debug("TimeAggr: new open... file struct init\n");
-        fd = (struct adios_file_struct *) malloc (sizeof (struct adios_file_struct));
-        adios_file_struct_init (fd);
-        fd->name = strdup (name);
-        fd->subfile_index = -1; // subfile index is by default -1
-        fd->group = g;
-        fd->mode = mode;
-        if (comm == MPI_COMM_NULL)
-            fd->comm = MPI_COMM_NULL;
-        else if (comm == MPI_COMM_SELF)
-            fd->comm = MPI_COMM_SELF;
-        else
-            MPI_Comm_dup(comm, &fd->comm);
+      MPI_Comm_dup(comm, &fd->comm);
+  }
+
+  methods = g->methods;
+
+  // Time Aggregation: if time aggregation is turned on, only open() at the
+  // first time step
+  if (TimeAggregationInProgress(g)) {
+    *fd_p = (int64_t)fd;
+    // printf("time buffering.... skip open\n");
+    // printf("open: fd->offset=%llu, group_offset=%llu\n", fd->offset,
+    // g->group_offset);
+  } else {
+    while (methods) {
+      if (methods->method->m != ADIOS_METHOD_UNKNOWN &&
+          methods->method->m != ADIOS_METHOD_NULL &&
+          adios_transports[methods->method->m].adios_open_fn) {
+        adios_transports[methods->method->m].adios_open_fn(fd, methods->method,
+                                                           fd->comm);
+      }
+
+      methods = methods->next;
     }
 
-    methods = g->methods;
-
-    //Time Aggregation: if time aggregation is turned on, only open() at the first time step
-    if (TimeAggregationInProgress(g))
-    {
-        *fd_p=(int64_t)fd;
-        //printf("time buffering.... skip open\n");
-        //printf("open: fd->offset=%llu, group_offset=%llu\n", fd->offset, g->group_offset);
+    if (!adios_errno) {
+      *fd_p = (int64_t)fd;
+    } else {
+      // free (fd_p);
+      fd_p = 0L;
     }
-    else
-    {
-        while (methods)
-        {
-            if (   methods->method->m != ADIOS_METHOD_UNKNOWN
-                    && methods->method->m != ADIOS_METHOD_NULL
-                    && adios_transports [methods->method->m].adios_open_fn
-            )
-            {
-                adios_transports [methods->method->m].adios_open_fn
-                (fd, methods->method, fd->comm);
-            }
-
-            methods = methods->next;
-        }
-
-        if (!adios_errno) 
-        {
-            *fd_p = (int64_t) fd;
-        } else 
-        {
-            //free (fd_p);
-            fd_p = 0L;
+  }
+
+  /* Time index
+   * It increases in write/append mode, it does not change in update/read mode.
+   * This piece should be after calling the method's open function, which sets
+   * the time index from the existing file in case of append/update. */
+  if (mode == adios_mode_write || mode == adios_mode_append) {
+    /* Traditionally, time=1 at the first step, and for subsequent file
+       creations, time increases. Although, each file contains one step,
+       the time index indicates that they are in a series.
+     */
+    g->time_index++;
+  }
+  /* time starts from 1 not from 0 in the BP design although it does not have
+   * any meaning */
+  if (g->time_index == 0) g->time_index = 1;
+
+  // Drew: for experiments
+  if (pinned_timestep > 0) g->time_index = pinned_timestep;
+
+  if (!adios_errno && fd->mode != adios_mode_read) {
+    /* Add ADIOS internal attributes now */
+    if ((fd->group->process_id == 0 || fd->subfile_index != -1)) {
+      struct timeval tp;
+      char epoch[16];
+      gettimeofday(&tp, NULL);
+      sprintf(epoch, "%d", (int)tp.tv_sec);
+
+      /* FIXME: this code works fine, it does not duplicate the attribute,
+         but the index will still contain all copies and the read will see
+         only the first one. Thus updating an attribute does not work
+         in practice.
+       */
+
+      if (fd->group->time_index == 1) {
+        log_debug(
+            "Define ADIOS extra attributes, "
+            "time = %d, rank = %d, epoch = %s subfile=%d\n",
+            fd->group->time_index, fd->group->process_id, epoch,
+            fd->subfile_index);
+
+        adios_common_define_attribute((int64_t)fd->group, "version",
+                                      ADIOS_ATTR_PATH, adios_string, VERSION,
+                                      NULL);
+
+        adios_common_define_attribute((int64_t)fd->group, "create_time_epoch",
+                                      ADIOS_ATTR_PATH, adios_integer, epoch,
+                                      NULL);
+        adios_common_define_attribute((int64_t)fd->group, "update_time_epoch",
+                                      ADIOS_ATTR_PATH, adios_integer, epoch,
+                                      NULL);
+        // id of last attribute is fd->group->member_count
+        fd->group->attrid_update_epoch = fd->group->member_count;
+
+      } else {
+        // update attribute of update time (define would duplicate it)
+        struct adios_attribute_struct *attr = adios_find_attribute_by_id(
+            fd->group->attributes, fd->group->attrid_update_epoch);
+        if (attr) {
+          log_debug(
+              "Update ADIOS extra attribute name=%s, "
+              "time = %d, rank = %d, epoch = %s, subfile=%d\n",
+              attr->name, fd->group->time_index, fd->group->process_id, epoch,
+              fd->subfile_index);
+
+          free(attr->value);
+          adios_parse_scalar_string(adios_integer, (void *)epoch, &attr->value);
         }
+      }
     }
 
-
-    /* Time index
-     * It increases in write/append mode, it does not change in update/read mode.
-     * This piece should be after calling the method's open function, which sets
-     * the time index from the existing file in case of append/update. */
-    if (mode == adios_mode_write || mode == adios_mode_append)
-    {
-        /* Traditionally, time=1 at the first step, and for subsequent file
-           creations, time increases. Although, each file contains one step,
-           the time index indicates that they are in a series.
-         */
-        g->time_index++;
+    /* Add first PG to the group */
+    if (NotTimeAggregated(g) || TimeAggregationJustBegan(g)) {
+      assert(!fd->pgs_written);  // the start of the PG list
+      assert(!fd->current_pg);   // the last of the PG list
     }
-    /* time starts from 1 not from 0 in the BP design although it does not have any meaning */
-    if (g->time_index == 0)
-        g->time_index = 1;
-
-    // Drew: for experiments
-    if (pinned_timestep > 0)
-        g->time_index = pinned_timestep;
-
-
-
-    if ( !adios_errno && fd->mode != adios_mode_read )
-    {
-        /* Add ADIOS internal attributes now */
-        if ( (fd->group->process_id == 0 || fd->subfile_index != -1) )
-        {
-            struct timeval tp;
-            char epoch[16];
-            gettimeofday(&tp, NULL);
-            sprintf(epoch, "%d", (int) tp.tv_sec);
-
-            /* FIXME: this code works fine, it does not duplicate the attribute,
-               but the index will still contain all copies and the read will see
-               only the first one. Thus updating an attribute does not work
-               in practice.
-             */
-
-            if (fd->group->time_index == 1)
-            {
-                log_debug ("Define ADIOS extra attributes, "
-                        "time = %d, rank = %d, epoch = %s subfile=%d\n",
-                        fd->group->time_index, fd->group->process_id, epoch, fd->subfile_index);
-
-                adios_common_define_attribute ((int64_t)fd->group, "version", ADIOS_ATTR_PATH,
-                                               adios_string, VERSION, NULL);
-
-                adios_common_define_attribute ((int64_t)fd->group, "create_time_epoch", ADIOS_ATTR_PATH,
-                                               adios_integer, epoch, NULL);
-                adios_common_define_attribute ((int64_t)fd->group, "update_time_epoch", ADIOS_ATTR_PATH,
-                                               adios_integer, epoch, NULL);
-                // id of last attribute is fd->group->member_count
-                fd->group->attrid_update_epoch = fd->group->member_count;
-
-            }
-            else
-            {
-                // update attribute of update time (define would duplicate it)
-                struct adios_attribute_struct * attr = adios_find_attribute_by_id
-                        (fd->group->attributes, fd->group->attrid_update_epoch);
-                if (attr) {
-                    log_debug ("Update ADIOS extra attribute name=%s, "
-                            "time = %d, rank = %d, epoch = %s, subfile=%d\n",
-                            attr->name, fd->group->time_index, fd->group->process_id,
-                            epoch, fd->subfile_index);
-
-                    free(attr->value);
-                    adios_parse_scalar_string (adios_integer, (void *) epoch, &attr->value);
-                }
-            }
-        }
-
-        /* Add first PG to the group */
-        if (NotTimeAggregated(g) || TimeAggregationJustBegan(g))
-        {
-            assert (!fd->pgs_written); // the start of the PG list
-            assert (!fd->current_pg);  // the last of the PG list
-        }
-        //printf("rank %d: fd->bytes-written=%llu\n",fd->group->process_id, fd->bytes_written);
-        add_new_pg_written (fd);
-        //keep a record of the PG offsets.
-        // FIXME: Time Aggregation: Assume every process writes the same amount of data
-        if(TimeAggregated(g))
-            fd->current_pg->pg_start_in_file=fd->bytes_written;
-
-
+    // printf("rank %d: fd->bytes-written=%llu\n",fd->group->process_id,
+    // fd->bytes_written);
+    add_new_pg_written(fd);
+    // keep a record of the PG offsets.
+    // FIXME: Time Aggregation: Assume every process writes the same amount of
+    // data
+    if (TimeAggregated(g)) fd->current_pg->pg_start_in_file = fd->bytes_written;
 
 #ifdef ADIOS_TIMERS
-        /* Add timer variable definitions to this output */
-        adios_add_timing_variables (fd);
+    /* Add timer variable definitions to this output */
+    adios_add_timing_variables(fd);
 #endif
 
-        /* Now ask the methods if anyone wants common-layer BP formatted buffering */
-        methods = g->methods;
-
-        if (NotTimeAggregated(g) || TimeAggregationJustBegan(g))
-        {
-            while (methods)
-            {
-                enum BUFFERING_STRATEGY bufstrat = no_buffering;
-                if (   methods->method->m != ADIOS_METHOD_UNKNOWN
-                        && methods->method->m != ADIOS_METHOD_NULL
-                        && adios_transports [methods->method->m].adios_should_buffer_fn
-                )
-                {
-                    bufstrat = adios_transports [methods->method->m].
-                            adios_should_buffer_fn (fd, methods->method);
-                }
-
-                if (bufstrat != no_buffering) {
-                    fd->shared_buffer = adios_flag_yes;
-                    fd->bufstrat = bufstrat;
-                    /* FIXME: last method determines the value of buffering strategy here. This whole
-                       buffer overflow thing does not work if there are multiple methods called 
-                       and they want something else (stop vs continue vs continue with new PG
-                     */
-                }
-
-                methods = methods->next;
-            }
-        }
+    /* Now ask the methods if anyone wants common-layer BP formatted buffering
+     */
+    methods = g->methods;
 
-        if (fd->bufstrat != no_buffering)
-        {
-            /* Allocate BP buffer with remembered size or max size or default size */
-            uint64_t bufsize;
-
-            if (NotTimeAggregated(g)) {
-                if (g->last_buffer_size > 0)
-                    bufsize = g->last_buffer_size;
-                else
-                    bufsize = adios_databuffer_get_extension_size (fd);
-            } else {
-                /* Time Aggregation: set the buffer size at the first time step to be buffered.
-                   ts buffering doesn't need buffer extension,
-                   only one time allocation at the first time step
-                 */
-                if (TimeAggregationJustBegan(g)) {
-                    adios_databuffer_set_max_size(g->ts_buffsize);
-                    bufsize=g->ts_buffsize;
-                }
-            }
+    if (NotTimeAggregated(g) || TimeAggregationJustBegan(g)) {
+      while (methods) {
+        enum BUFFERING_STRATEGY bufstrat = no_buffering;
+        if (methods->method->m != ADIOS_METHOD_UNKNOWN &&
+            methods->method->m != ADIOS_METHOD_NULL &&
+            adios_transports[methods->method->m].adios_should_buffer_fn) {
+          bufstrat =
+              adios_transports[methods->method->m].adios_should_buffer_fn(
+                  fd, methods->method);
+        }
 
-            //printf("==open bufsize=%llu\n", bufsize);
-
-            //Time Aggregation: when ts buffering is on, only the first step needs to
-            //allocate the buffer
-            if (NotTimeAggregated(g) || TimeAggregationJustBegan(g))
-            {
-                if (adios_databuffer_resize (fd, bufsize))
-                {
-                    fd->bufstate = buffering_stopped;
-                    adios_error (err_no_memory, 
-                                 "Cannot allocate %" PRIu64 " bytes for buffered output "
-                                 "of group %s in adios_open(). Output will fail.\n", 
-                                 fd->buffer_size, g->name);
-                    return adios_errno;
-                }
-            }
-            fd->bufstate = buffering_ongoing;
+        if (bufstrat != no_buffering) {
+          fd->shared_buffer = adios_flag_yes;
+          fd->bufstrat = bufstrat;
+          /* FIXME: last method determines the value of buffering strategy here.
+             This whole
+             buffer overflow thing does not work if there are multiple methods
+             called
+             and they want something else (stop vs continue vs continue with new
+             PG
+           */
+        }
 
-            // write the process group header
-            adios_write_open_process_group_header_v1 (fd);
+        methods = methods->next;
+      }
+    }
 
-            // setup for writing vars
-            adios_write_open_vars_v1 (fd);
+    if (fd->bufstrat != no_buffering) {
+      /* Allocate BP buffer with remembered size or max size or default size */
+      uint64_t expected_bufsize;
 
+      if (NotTimeAggregated(g)) {
+        if (g->max_pg_size > 0)
+          expected_bufsize = g->max_pg_size;
+        else
+          expected_bufsize = adios_databuffer_get_extension_size(fd);
+      } else {
+        /* Time Aggregation: set the user given buffer size at the first time
+         * step to be buffered.
+         * Later, check if the calculated number of timesteps knowing the size
+         * encountered so far
+         * would still fit. If not, try to increase the buffer to accommodate
+         * it. The reason for this is
+         * that we must try to avoid buffer overflow in time aggregation, which
+         * situation is not handled.
+         */
+        if (TimeAggregationJustBegan(g)) {
+          adios_databuffer_set_max_size(g->ts_buffsize);
+          expected_bufsize = g->ts_buffsize;
+        } else {
+          // fd->bytes_written is the size of (g->max_ts - g->ts_to_buffer)
+          // steps already buffered
+          expected_bufsize =
+              g->max_ts * fd->bytes_written / (g->max_ts - g->ts_to_buffer);
+          if (expected_bufsize > fd->buffer_size) {
+            adios_databuffer_set_max_size(
+                expected_bufsize);  // allow more than what user specified
+                                    // (g->ts_buffsize)
+          }
         }
+      }
+
+      // printf("==open expected_bufsize=%llu\n", expected_bufsize);
+
+      // Time Aggregation: when ts buffering is on, only the first step needs to
+      // allocate the buffer here
+      if (NotTimeAggregated(g) || TimeAggregationJustBegan(g))
+        if (expected_bufsize > fd->buffer_size) {
+          if (adios_databuffer_resize(fd, expected_bufsize)) {
+            fd->bufstate = buffering_stopped;
+            adios_error(err_no_memory,
+                        "Cannot allocate %" PRIu64
+                        " bytes for buffered output "
+                        "of group %s in adios_open(). Output will fail.\n",
+                        fd->buffer_size, g->name);
+            return adios_errno;
+          }
+        }
+      fd->bufstate = buffering_ongoing;
 
-        //printf("end of adios_open fd->offset=%llu bytes_written=%llu\n", fd->offset, fd->bytes_written);
+      // write the process group header
+      adios_write_open_process_group_header_v1(fd);
 
+      // setup for writing vars
+      adios_write_open_vars_v1(fd);
     }
 
+    // printf("end of adios_open fd->offset=%llu bytes_written=%llu\n",
+    // fd->offset, fd->bytes_written);
+  }
+
 #if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 0)
-    timer_stop ("adios_open");
+  timer_stop("adios_open");
 #endif
-    return adios_errno;
+  ADIOST_CALLBACK_EXIT(adiost_event_open, *fd_p, group_name, name, file_mode);
+  return adios_errno;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
 
-int common_adios_group_size (int64_t fd_p, uint64_t data_size, uint64_t * total_size)
-{
-
+int common_adios_group_size(int64_t fd_p, uint64_t data_size,
+                            uint64_t *total_size) {
 #if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 0)
-    timer_start ("adios_group_size");
+  timer_start("adios_group_size");
 #endif
-    //printf("enter adios_group_size datasize= %llu\n", data_size);
+  // printf("enter adios_group_size datasize= %llu\n", data_size);
+  ADIOST_CALLBACK_ENTER(adiost_event_group_size, fd_p, data_size, *total_size);
 
-    adios_errno = err_no_error;
-    struct adios_file_struct * fd; 
-    fd = (struct adios_file_struct *) fd_p;
+  adios_errno = err_no_error;
+  struct adios_file_struct *fd;
+  fd = (struct adios_file_struct *)fd_p;
 
-    if (!fd)
-    {
-        adios_error (err_invalid_file_pointer, "Invalid handle passed to adios_group_size\n");
-        return adios_errno;
-    }
+  if (!fd) {
+    adios_error(err_invalid_file_pointer,
+                "Invalid handle passed to adios_group_size\n");
+    ADIOST_CALLBACK_EXIT(adiost_event_group_size, fd_p, data_size, *total_size);
+    return adios_errno;
+  }
 
-    struct adios_method_list_struct * m = fd->group->methods;
-    if (m && m->next == NULL && m->method->m == ADIOS_METHOD_NULL)
-    {
-        *total_size = 0;
+  struct adios_method_list_struct *m = fd->group->methods;
+  if (m && m->next == NULL && m->method->m == ADIOS_METHOD_NULL) {
+    *total_size = 0;
 #if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 0)
-        timer_stop ("adios_group_size");
+    timer_stop("adios_group_size");
 #endif
-        return err_no_error;
-    }
-
-    if (fd->buffer_size == 0) {
-        *total_size = 0; 
-        return err_no_error;
-    }
+    ADIOST_CALLBACK_EXIT(adiost_event_group_size, fd_p, data_size, *total_size);
+    return err_no_error;
+  }
 
+  if (fd->buffer_size == 0) {
+    *total_size = 0;
+    ADIOST_CALLBACK_EXIT(adiost_event_group_size, fd_p, data_size, *total_size);
+    return err_no_error;
+  }
 
 #ifdef ADIOS_TIMERS
-    data_size += fd->group->tv_size;
+  data_size += fd->group->tv_size;
 #endif
 
-
-    uint64_t overhead = adios_calc_overhead_v1 (fd);
-    *total_size = data_size + overhead;
-
-    // NCSU ALACRITY-ADIOS - Current solution to group_size problem: find
-    // the most "expansive" transform method used in the file, and assume
-    // all of the data uses that method, for a very rough but safe upper bound.
-    //
-    // (see the comment in the top of adios_transforms.c, under section
-    // 'The "group size" problem,' for more details)
-    uint64_t wc_transformed_size = adios_transform_worst_case_transformed_group_size(data_size, fd);
-    if (wc_transformed_size > data_size)
-    {
-        log_debug("Computed worst-case bound on transformed data for a group size of %" PRIu64 " is %" PRIu64 "; increasing group size to match.\n",
-                  data_size, wc_transformed_size);
-
-        *total_size += (wc_transformed_size - data_size);
-    }
-
-    if (*total_size > fd->buffer_size && fd->bufstate == buffering_ongoing) 
-    {
-        if (adios_databuffer_resize (fd, *total_size))
-        {
-            log_warn ("Cannot reallocate data buffer to %" PRIu64 " bytes "
-                      "for group %s in adios_group_size(). Continue buffering "
-                      "with buffer size %" PRIu64 " MB\n",
-                      *total_size, fd->group->name, fd->buffer_size/1048576L);
-        }
+  uint64_t overhead = adios_calc_overhead_v1(fd);
+  *total_size = data_size + overhead;
+
+  // NCSU ALACRITY-ADIOS - Current solution to group_size problem: find
+  // the most "expansive" transform method used in the file, and assume
+  // all of the data uses that method, for a very rough but safe upper bound.
+  //
+  // (see the comment in the top of adios_transforms.c, under section
+  // 'The "group size" problem,' for more details)
+  uint64_t wc_transformed_size =
+      adios_transform_worst_case_transformed_group_size(data_size, fd);
+  if (wc_transformed_size > data_size) {
+    log_debug(
+        "Computed worst-case bound on transformed data for a group size of "
+        "%" PRIu64 " is %" PRIu64 "; increasing group size to match.\n",
+        data_size, wc_transformed_size);
+
+    *total_size += (wc_transformed_size - data_size);
+  }
+
+  if (*total_size > fd->buffer_size && fd->bufstate == buffering_ongoing) {
+    if (adios_databuffer_resize(fd, *total_size)) {
+      log_warn("Cannot reallocate data buffer to %" PRIu64
+               " bytes "
+               "for group %s in adios_group_size(). Continue buffering "
+               "with buffer size %" PRIu64 " MB\n",
+               *total_size, fd->group->name, fd->buffer_size / 1048576L);
     }
-
-
+  }
 
 #if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 0)
-    timer_stop ("adios_group_size");
+  timer_stop("adios_group_size");
 #endif
-    // each var will be added to the buffer by the adios_write calls
-    // attributes will be added by adios_close
+  // each var will be added to the buffer by the adios_write calls
+  // attributes will be added by adios_close
 
-    return adios_errno;
+  ADIOST_CALLBACK_EXIT(adiost_event_group_size, fd_p, data_size, *total_size);
+  return adios_errno;
 }
 
+static int common_adios_write_transform_helper(struct adios_file_struct *fd,
+                                               struct adios_var_struct *v) {
+  int use_shared_buffer = (fd->bufstrat != no_buffering);
+  int wrote_to_shared_buffer = 0;
+
+  if (fd->bufstrat == no_buffering) {
+    int ret = adios_transform_variable_data(fd, v, use_shared_buffer,
+                                            &wrote_to_shared_buffer);
+    assert(!wrote_to_shared_buffer);
+    assert(v->data);
+    return ret;
+  } else if (fd->bufstate == buffering_ongoing) {
+    // If we are using the shared buffer, transform the data directly into it
+    uint16_t header_size = adios_calc_var_overhead_v1(v);
+    uint64_t header_offset;
+    uint64_t payload_offset;
+    uint64_t end_offset;
+
+    // Reserve space for the variable header (it will need to be written after
+    // the transform to capture updated metadata)
+    header_offset = fd->offset;
+    fd->offset += header_size;
+    payload_offset = fd->offset;
+
+    // This function will either:
+    // a) write to the shared buffer, leave v->data, v->data_size and
+    //    v->free_data untouched, and return 1, OR
+    // b) write to v->data, set v->data_size and v->free_data, and return 0
+    //
+    int success = adios_transform_variable_data(fd, v, use_shared_buffer,
+                                                &wrote_to_shared_buffer);
+    if (!success) {
+      fd->offset = header_offset;
+      return 0;
+    }
 
-static int common_adios_write_transform_helper(struct adios_file_struct * fd, struct adios_var_struct * v) {
-    int use_shared_buffer = (fd->bufstrat != no_buffering);
-    int wrote_to_shared_buffer = 0;
-
-    if (fd->bufstrat == no_buffering)
-    {
-        int ret = adios_transform_variable_data(fd, v, use_shared_buffer, &wrote_to_shared_buffer);
-        assert(!wrote_to_shared_buffer);
-        assert(v->data);
-        return ret;
-    } 
-    else if (fd->bufstate == buffering_ongoing) 
-    {
-        // If we are using the shared buffer, transform the data directly into it
-        uint16_t header_size = adios_calc_var_overhead_v1(v);
-        uint64_t header_offset;
-        uint64_t payload_offset;
-        uint64_t end_offset;
-
-        // Reserve space for the variable header (it will need to be written after
-        // the transform to capture updated metadata)
-        header_offset = fd->offset;
-        fd->offset += header_size;
-        payload_offset = fd->offset;
-
-        // This function will either:
-        // a) write to the shared buffer, leave v->data, v->data_size and
-        //    v->free_data untouched, and return 1, OR
-        // b) write to v->data, set v->data_size and v->free_data, and return 0
-        //
-        int success = adios_transform_variable_data(fd, v, use_shared_buffer, &wrote_to_shared_buffer);
-        if (!success) {
-            fd->offset = header_offset;
-            return 0;
-        }
-
-        // Assumption: we don't change the header size, just contents, in
-        // adios_transform_variable_data
-        assert(adios_calc_var_overhead_v1(v) == header_size);
-
-        // Store the ending offset of the payload write (if any)
-        end_offset = fd->offset;
-
-        // Rewind and write the header back where it should be
-        fd->offset = header_offset;
-        // var payload sent for sizing information
-        adios_write_var_header_v1(fd, v);
-
-        assert(fd->offset == payload_offset);
-
-        // If the data was stored to the shared buffer, update v->data,
-        // v->data_size and v->free_data. Else, write the payload to the shared
-        // buffer (the other v->* fields have already been updated)
-        if (wrote_to_shared_buffer) {
-            v->adata = fd->buffer + payload_offset;
-            v->data_size = end_offset - payload_offset;
-            v->free_data = adios_flag_no;
-            v->data = v->adata;
-
-            // Update the buffer back to the end of the header+payload
-            fd->offset = end_offset;
-        } else {
-            /* FIXME: This branch should not happen for memory reasons. 
-               The buffer either had enough space to store the transformation 
-               in place, or buffering has stopped.
-               However, identity transform does no buffering, so we do it here.
-             */
-            // either no transformation happened (original data is in v->data), or
-            // data was transformed into v->adata
-            if (v->adata) {
-                v->data = v->adata;
-            }
-            // write payload
-            adios_write_var_payload_v1 (fd, v);
-
-            // fd->offset now points to the end of the header+payload
-        }
-
-        // Success!
-        return 1;
+    // Assumption: we don't change the header size, just contents, in
+    // adios_transform_variable_data
+    assert(adios_calc_var_overhead_v1(v) == header_size);
+
+    // Store the ending offset of the payload write (if any)
+    end_offset = fd->offset;
+
+    // Rewind and write the header back where it should be
+    fd->offset = header_offset;
+    // var payload sent for sizing information
+    adios_write_var_header_v1(fd, v);
+
+    assert(fd->offset == payload_offset);
+
+    // If the data was stored to the shared buffer, update v->data,
+    // v->data_size and v->free_data. Else, write the payload to the shared
+    // buffer (the other v->* fields have already been updated)
+    if (wrote_to_shared_buffer) {
+      v->adata = fd->buffer + payload_offset;
+      v->data_size = end_offset - payload_offset;
+      v->free_data = adios_flag_no;
+      v->data = v->adata;
+
+      // Update the buffer back to the end of the header+payload
+      fd->offset = end_offset;
+    } else {
+      /* FIXME: This branch should not happen for memory reasons.
+         The buffer either had enough space to store the transformation
+         in place, or buffering has stopped.
+         However, identity transform does no buffering, so we do it here.
+       */
+      // either no transformation happened (original data is in v->data), or
+      // data was transformed into v->adata
+      if (v->adata) {
+        v->data = v->adata;
+      }
+      // write payload
+      adios_write_var_payload_v1(fd, v);
+
+      // fd->offset now points to the end of the header+payload
     }
-    /* else: shared buffer but buffering has stopped, nothing needs to be done */
+
+    // Success!
     return 1;
+  }
+  /* else: shared buffer but buffering has stopped, nothing needs to be done */
+  return 1;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -599,435 +611,415 @@ static int common_adios_write_transform_helper(struct adios_file_struct * fd, st
  * structures. This is because C and Fortran implementations of adios_write are
  * different for some part and this is the common part.
  */
-int common_adios_write (struct adios_file_struct * fd, struct adios_var_struct * v, const void * var)
-{
+int common_adios_write(struct adios_file_struct *fd, struct adios_var_struct *v,
+                       const void *var) {
 #if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 0)
-    timer_start ("adios_write");
+  timer_start("adios_write");
 #endif
-    adios_errno = err_no_error;
-    struct adios_method_list_struct * m = fd->group->methods;
-
-    // First, before doing any transformation, compute variable statistics,
-    // as we can't do this after the data is transformed
-    adios_generate_var_characteristics_v1 (fd, v);
-
-
-    uint64_t vsize = 0;
-    if (fd->bufstate == buffering_ongoing)
-    {
-        // Second, estimate the size needed for buffering and extend buffer when needed
-        // and handle the error if buffer cannot be extended
-        vsize = adios_transform_worst_case_transformed_var_size(v);
-
-        if (fd->buffer_size < fd->offset + vsize)
-        {
-            //    printf("adios_write fd->offset=%llu for variable= %s buffer_size=%llu\n", fd->offset, v->name, fd->buffer_size);
-            //            printf("max_ts=%d ts_to_buffer=%d\n", fd->group->max_ts, fd->group->ts_to_buffer);
-            /* Trouble: this variable does not fit into the current buffer */
-            // First, try to realloc the buffer 
-            uint64_t extrasize = adios_databuffer_get_extension_size (fd);
-            if (extrasize < vsize)
-                extrasize = vsize;
-            if (adios_databuffer_resize (fd, fd->buffer_size + extrasize))
-            {
-                /* Second, let the method deal with it */
-                log_debug ("adios_write(): buffer needs to be dumped before buffering variable %s/%s\n", v->path, v->name);
-                // these calls don't extend the buffer but we will get a completed PG here
-                adios_write_close_vars_v1 (fd);
-                adios_write_close_process_group_header_v1 (fd);
-
-                /* Ask the method to do something with the current buffer then we either
-                   1. continue buffering from start with a new PG or
-                   2. skip buffering variables from now on, then method gets the same buffer again in close()
-                 */
-
-                m = fd->group->methods;
-                while (m)
-                {
-                    if (   m->method->m != ADIOS_METHOD_UNKNOWN
-                            && m->method->m != ADIOS_METHOD_NULL
-                            && adios_transports [m->method->m].adios_buffer_overflow_fn
-                    )
-                    {
-                        adios_transports [m->method->m].adios_buffer_overflow_fn (fd, m->method);
-                    }
-                    m = m->next;
-                }
-
-                if (fd->bufstrat == continue_with_new_pg) 
-                {
-                    // special case: fd->buffer_size is smaller than this single variable, and the extension failed:
-                    // try to extend it to contain this single variable (plus headers) in the next PG
-                    if (fd->buffer_size < vsize + 1024)
-                    {
-                        if (adios_databuffer_resize (fd, vsize+1024))
-                        {
-                            adios_error (err_no_memory, "adios_write(): buffer cannot accommodate variable %s/%s "
-                                         "with its storage size of %" PRIu64 " bytes at all. "
-                                         "No more variables will be written.\n", v->path, v->name, vsize);
-                            //"This variable won't be written.\n", v->path, v->name, vsize);
-                            fd->bufstate = buffering_stopped;
-                            /* FIXME: This stops all writing, not just this variable! */
-                            /* FIXME: so maybe we should give the method a chance to write this variable directly? */
-                        }
-                    }
-                    /* Start buffering from scratch (a new PG) */
-                    fd->offset = 0;
-                    adios_write_open_process_group_header_v1 (fd);
-                    adios_write_open_vars_v1 (fd);
-                    add_new_pg_written (fd);
-                } 
-                else if (fd->bufstrat == stop_on_overflow)
-                {
-                    fd->bufstate = buffering_stopped;
-                    if (!adios_errno)
-                    {
-                        // method is expected to throw an error in this case but we can ensure it here
-                        // to signal error upward to not count this var in index
-                        adios_errno = err_buffer_overflow; 
-                    }
-                }
-            }
+  ADIOST_CALLBACK_ENTER(adiost_event_write, fd);
+  adios_errno = err_no_error;
+  struct adios_method_list_struct *m = fd->group->methods;
+
+  // First, before doing any transformation, compute variable statistics,
+  // as we can't do this after the data is transformed
+  adios_generate_var_characteristics_v1(fd, v);
+
+  uint64_t vsize = 0;
+  if (fd->bufstate == buffering_ongoing) {
+    // Second, estimate the size needed for buffering and extend buffer when
+    // needed
+    // and handle the error if buffer cannot be extended
+    vsize = adios_transform_worst_case_transformed_var_size(v);
+
+    if (fd->buffer_size < fd->offset + vsize) {
+      //    printf("adios_write fd->offset=%llu for variable= %s
+      //    buffer_size=%llu\n", fd->offset, v->name, fd->buffer_size);
+      //            printf("max_ts=%d ts_to_buffer=%d\n", fd->group->max_ts,
+      //            fd->group->ts_to_buffer);
+      /* Trouble: this variable does not fit into the current buffer */
+      // First, try to realloc the buffer
+      uint64_t extrasize = adios_databuffer_get_extension_size(fd);
+      if (extrasize < vsize) extrasize = vsize;
+      if (adios_databuffer_resize(fd, fd->buffer_size + extrasize)) {
+        /* Second, let the method deal with it */
+        log_debug(
+            "adios_write(): buffer needs to be dumped before buffering "
+            "variable %s/%s\n",
+            v->path, v->name);
+        // these calls don't extend the buffer but we will get a completed PG
+        // here
+        adios_write_close_vars_v1(fd);
+        adios_write_close_process_group_header_v1(fd);
+
+        /* Ask the method to do something with the current buffer then we either
+           1. continue buffering from start with a new PG or
+           2. skip buffering variables from now on, then method gets the same
+           buffer again in close()
+         */
+
+        m = fd->group->methods;
+        while (m) {
+          if (m->method->m != ADIOS_METHOD_UNKNOWN &&
+              m->method->m != ADIOS_METHOD_NULL &&
+              adios_transports[m->method->m].adios_buffer_overflow_fn) {
+            adios_transports[m->method->m].adios_buffer_overflow_fn(fd,
+                                                                    m->method);
+          }
+          m = m->next;
         }
-    }
 
-    // If no transform is specified, do the normal thing (write to shared
-    // buffer immediately, if one exists)
-    if (v->transform_type == adios_transform_none)
-    {
-        if (fd->bufstate == buffering_ongoing)
-        {
-            /* Now buffer only if we have the buffer for it */
-            if (fd->buffer_size > fd->offset + vsize)
-            {
-                // var payload sent for sizing information
-                adios_write_var_header_v1 (fd, v);
-
-                // write payload
-                adios_write_var_payload_v1 (fd, v);
+        if (fd->bufstrat == continue_with_new_pg) {
+          // special case: fd->buffer_size is smaller than this single variable,
+          // and the extension failed:
+          // try to extend it to contain this single variable (plus headers) in
+          // the next PG
+          if (fd->buffer_size < vsize + 1024) {
+            if (adios_databuffer_resize(fd, vsize + 1024)) {
+              adios_error(
+                  err_no_memory,
+                  "adios_write(): buffer cannot accommodate variable %s/%s "
+                  "with its storage size of %" PRIu64
+                  " bytes at all. "
+                  "No more variables will be written.\n",
+                  v->path, v->name, vsize);
+              //"This variable won't be written.\n", v->path, v->name, vsize);
+              fd->bufstate = buffering_stopped;
+              /* FIXME: This stops all writing, not just this variable! */
+              /* FIXME: so maybe we should give the method a chance to write
+               * this variable directly? */
             }
+          }
+          /* Start buffering from scratch (a new PG) */
+          fd->offset = 0;
+          adios_write_open_process_group_header_v1(fd);
+          adios_write_open_vars_v1(fd);
+          add_new_pg_written(fd);
+        } else if (fd->bufstrat == stop_on_overflow) {
+          fd->bufstate = buffering_stopped;
+          if (!adios_errno) {
+            // method is expected to throw an error in this case but we can
+            // ensure it here
+            // to signal error upward to not count this var in index
+            adios_errno = err_buffer_overflow;
+          }
         }
+      }
+    }
+  }
+
+  // If no transform is specified, do the normal thing (write to shared
+  // buffer immediately, if one exists)
+  if (v->transform_type == adios_transform_none) {
+    if (fd->bufstate == buffering_ongoing) {
+      /* Now buffer only if we have the buffer for it */
+      if (fd->buffer_size > fd->offset + vsize) {
+        // var payload sent for sizing information
+        adios_write_var_header_v1(fd, v);
+
+        // write payload
+        adios_write_var_payload_v1(fd, v);
+      }
     }
-    else // Else, do a transform
-    {
+  } else  // Else, do a transform
+  {
 #if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 0)
-        timer_start ("adios_transform");
+    timer_start("adios_transform");
 #endif
-        int success = common_adios_write_transform_helper(fd, v);
-        if (success) {
-            // Make it appear as if the user had supplied the transformed data
-            var = v->data;
-        } else {
-            log_error("Error: unable to apply transform %s to variable %s; likely ran out of memory, check previous error messages\n", adios_transform_plugin_primary_xml_alias(v->transform_type), v->name);
-            // FIXME: Reverse the transform metadata and write raw data as usual
-        }
+    ADIOST_CALLBACK_ENTER(adiost_event_transform, fd);
+    int success = common_adios_write_transform_helper(fd, v);
+    if (success) {
+      // Make it appear as if the user had supplied the transformed data
+      var = v->data;
+    } else {
+      log_error(
+          "Error: unable to apply transform %s to variable %s; likely ran out "
+          "of memory, check previous error messages\n",
+          adios_transform_plugin_primary_xml_alias(v->transform_type), v->name);
+      // FIXME: Reverse the transform metadata and write raw data as usual
+    }
+    ADIOST_CALLBACK_EXIT(adiost_event_transform, fd);
 #if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 0)
-        timer_stop ("adios_transform");
+    timer_stop("adios_transform");
 #endif
+  }
+
+  // now tell each transport attached that it is being written unless buffering
+  // is stopped
+  if (fd->bufstate == buffering_ongoing || fd->bufstrat == no_buffering) {
+    m = fd->group->methods;
+    while (m) {
+      if (m->method->m != ADIOS_METHOD_UNKNOWN &&
+          m->method->m != ADIOS_METHOD_NULL &&
+          adios_transports[m->method->m].adios_write_fn) {
+        adios_transports[m->method->m].adios_write_fn(fd, v, var, m->method);
+      }
+
+      m = m->next;
     }
-
-    // now tell each transport attached that it is being written unless buffering is stopped
-    if (fd->bufstate == buffering_ongoing || fd->bufstrat == no_buffering)
-    {
-        m = fd->group->methods;
-        while (m)
-        {
-            if (   m->method->m != ADIOS_METHOD_UNKNOWN
-                    && m->method->m != ADIOS_METHOD_NULL
-                    && adios_transports [m->method->m].adios_write_fn
-            )
-            {
-                adios_transports [m->method->m].adios_write_fn
-                (fd, v, var, m->method);
-            }
-
-            m = m->next;
-        }
-    }
-    else
-    {
-        adios_errno = err_buffer_overflow; // signal error but don't print anything anymore
-    }
-
-    if (v->dimensions)
-    {
-        // NCSU ALACRITY-ADIOS - Free transform-method-allocated data buffers
-        // TODO: Is this correct? Normally v->data is a user buffer, so we
-        //   can't free it. However, after a transform, we probably do need
-        //   to free it. We mark this by setting the free_data flag. However,
-        //   as this flag is hardly ever used, I don't know whether this is
-        //   using the flag correctly or not. Need verification with
-        //   Gary/Norbert/someone knowledgable about ADIOS internals.
-        if (v->transform_type != adios_transform_none && v->free_data == adios_flag_yes && v->adata)
-        {
-            free(v->adata);
-        }
-        v->data = v->adata = 0; // throw away pointers to user data in case of arrays to avoid trying
-        // to free them in possible forthcoming adios_write() of the same variable
-    }
-
-    if (!adios_errno) {
-        v->write_count++;
+  } else {
+    adios_errno =
+        err_buffer_overflow;  // signal error but don't print anything anymore
+  }
+
+  if (v->dimensions) {
+    // NCSU ALACRITY-ADIOS - Free transform-method-allocated data buffers
+    // TODO: Is this correct? Normally v->data is a user buffer, so we
+    //   can't free it. However, after a transform, we probably do need
+    //   to free it. We mark this by setting the free_data flag. However,
+    //   as this flag is hardly ever used, I don't know whether this is
+    //   using the flag correctly or not. Need verification with
+    //   Gary/Norbert/someone knowledgable about ADIOS internals.
+    if (v->transform_type != adios_transform_none &&
+        v->free_data == adios_flag_yes && v->adata) {
+      free(v->adata);
     }
+    v->data = v->adata = 0;  // throw away pointers to user data in case of
+                             // arrays to avoid trying
+    // to free them in possible forthcoming adios_write() of the same variable
+  }
+
+  if (!adios_errno) {
+    v->write_count++;
+  }
 #if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 0)
-    timer_stop ("adios_write");
+  timer_stop("adios_write");
 #endif
-    // printf ("var: %s written %d\n", v->name, v->write_count);
-    return adios_errno;
+  ADIOST_CALLBACK_EXIT(adiost_event_write, fd);
+  // printf ("var: %s written %d\n", v->name, v->write_count);
+  return adios_errno;
 }
 
-
 ///////////////////////////////////////////////////////////////////////////////
-int common_adios_write_byid (struct adios_file_struct * fd, struct adios_var_struct * v, const void * var)
-{
-    struct adios_method_list_struct * m = fd->group->methods;
-
-    adios_errno = err_no_error;
-    if (m && m->next == NULL && m->method->m == ADIOS_METHOD_NULL)
-    {
-        return adios_errno;
-    }
-
-    if (v->adata)
-    {
-        assert (v->dimensions==NULL); // this must happen only for scalars where we copied the value
-        free (v->adata);
-        v->adata = 0;
-    }
+int common_adios_write_byid(struct adios_file_struct *fd,
+                            struct adios_var_struct *v, const void *var) {
+  struct adios_method_list_struct *m = fd->group->methods;
+
+  ADIOST_CALLBACK_ENTER(adiost_event_write, fd);
+  adios_errno = err_no_error;
+  if (m && m->next == NULL && m->method->m == ADIOS_METHOD_NULL) {
+    ADIOST_CALLBACK_EXIT(adiost_event_write, fd);
+    return adios_errno;
+  }
+
+  if (v->adata) {
+    assert(
+        v->dimensions ==
+        NULL);  // this must happen only for scalars where we copied the value
+    free(v->adata);
+    v->adata = 0;
+  }
+
+  if (v->dimensions) {
+    v->data = var;
+  } else {
+    uint64_t element_size = adios_get_type_size(v->type, var);
+
+    switch (v->type) {
+      case adios_byte:
+      case adios_short:
+      case adios_integer:
+      case adios_long:
+      case adios_unsigned_byte:
+      case adios_unsigned_short:
+      case adios_unsigned_integer:
+      case adios_unsigned_long:
+      case adios_real:
+      case adios_double:
+      case adios_long_double:
+      case adios_complex:
+      case adios_double_complex:
+        v->adata = malloc(element_size);
+        if (!v->adata) {
+          adios_error(
+              err_no_memory,
+              "In adios_write, cannot allocate %lld bytes to copy scalar %s\n",
+              element_size, v->name);
+          ADIOST_CALLBACK_EXIT(adiost_event_write, fd);
+          return adios_errno;
+        }
 
-    if (v->dimensions)
-    {
-        v->data = var;
-    }
-    else
-    {
-        uint64_t element_size = adios_get_type_size (v->type, var);
-
-        switch (v->type)
-        {
-            case adios_byte:
-            case adios_short:
-            case adios_integer:
-            case adios_long:
-            case adios_unsigned_byte:
-            case adios_unsigned_short:
-            case adios_unsigned_integer:
-            case adios_unsigned_long:
-            case adios_real:
-            case adios_double:
-            case adios_long_double:
-            case adios_complex:
-            case adios_double_complex:
-                v->adata = malloc (element_size);
-                if (!v->adata)
-                {
-                    adios_error (err_no_memory,
-                                 "In adios_write, cannot allocate %lld bytes to copy scalar %s\n",
-                                 element_size, v->name);
-                    return adios_errno;
-                }
-
-                memcpy ((char *) v->adata, var, element_size);
-                v->data = v->adata;
-                break;
-
-            case adios_string:
-                v->adata = malloc (element_size + 1);
-                if (!v->adata)
-                {
-                    adios_error (err_no_memory,
-                                 "In adios_write, cannot allocate %lld bytes to copy string %s\n",
-                                 element_size, v->name);
-                    return adios_errno;
-                }
-                ((char *) v->adata) [element_size] = 0;
-                memcpy ((char *) v->adata, var, element_size);
-                v->data = v->adata;
-                break;
-
-            default:
-                v->data = 0;
-                break;
+        memcpy((char *)v->adata, var, element_size);
+        v->data = v->adata;
+        break;
+
+      case adios_string:
+        v->adata = malloc(element_size + 1);
+        if (!v->adata) {
+          adios_error(
+              err_no_memory,
+              "In adios_write, cannot allocate %lld bytes to copy string %s\n",
+              element_size, v->name);
+          ADIOST_CALLBACK_EXIT(adiost_event_write, fd);
+          return adios_errno;
         }
+        ((char *)v->adata)[element_size] = 0;
+        memcpy((char *)v->adata, var, element_size);
+        v->data = v->adata;
+        break;
+
+      default:
+        v->data = 0;
+        break;
     }
+  }
 
-    common_adios_write (fd, v, var);
-    // v->data is set to NULL in the above call for arrays, 
-    // but it's pointing to v->adata, which is allocated in ADIOS, for scalars
-    // to remember their value if used as dimension in forthcoming writes of arrays.
+  common_adios_write(fd, v, var);
+  // v->data is set to NULL in the above call for arrays,
+  // but it's pointing to v->adata, which is allocated in ADIOS, for scalars
+  // to remember their value if used as dimension in forthcoming writes of
+  // arrays.
 
-    if (!adios_errno && fd->mode != adios_mode_read)
-    {
-        adios_copy_var_written (fd, v);
-    }
+  if (!adios_errno && fd->mode != adios_mode_read) {
+    adios_copy_var_written(fd, v);
+  }
 
-    return adios_errno;
+  ADIOST_CALLBACK_EXIT(adiost_event_write, fd);
+  return adios_errno;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
-int common_adios_get_write_buffer (int64_t fd_p, const char * name
-                                   ,uint64_t * size
-                                   ,void ** buffer
-)
-{
-    struct adios_file_struct * fd = (struct adios_file_struct *) fd_p;
-    adios_errno = err_no_error;
-    if (!fd)
-    {
-        adios_error (err_invalid_file_pointer, "Invalid handle passed to adios_group_size\n");
-        return adios_errno;
-    }
-    struct adios_var_struct * v = fd->group->vars;
-    struct adios_method_list_struct * m = fd->group->methods;
-
-    v = adios_find_var_by_name (fd->group, name);
-
-    if (!v)
-    {
-        adios_error (err_invalid_varname, "Bad var name (ignored): '%s' (%c%c%c)\n",
-                     name, name[0], name[1], name[2]);
-        return adios_errno;
-    }
+int common_adios_get_write_buffer(int64_t fd_p, const char *name,
+                                  uint64_t *size, void **buffer) {
+  struct adios_file_struct *fd = (struct adios_file_struct *)fd_p;
+  adios_errno = err_no_error;
+  if (!fd) {
+    adios_error(err_invalid_file_pointer,
+                "Invalid handle passed to adios_group_size\n");
+    return adios_errno;
+  }
+  struct adios_var_struct *v = fd->group->vars;
+  struct adios_method_list_struct *m = fd->group->methods;
 
-    if (fd->mode == adios_mode_read)
-    {
-        adios_error (err_invalid_file_mode,
-                     "write attempted on %s in %s. This was opened for read\n",
-                     name , fd->name);
-        return adios_errno;
-    }
+  v = adios_find_var_by_name(fd->group, name);
 
-    // since we are only getting one buffer, get it from the first
-    // transport method that can provide it.
-    while (m)
-    {
-        if (   m->method->m != ADIOS_METHOD_UNKNOWN
-                && m->method->m != ADIOS_METHOD_NULL
-                && adios_transports [m->method->m].adios_get_write_buffer_fn
-        )
-        {
-            adios_transports [m->method->m].adios_get_write_buffer_fn
-            (fd, v, size, buffer, m->method);
-            m = 0;
-        }
-        else
-            m = m->next;
-    }
+  if (!v) {
+    adios_error(err_invalid_varname, "Bad var name (ignored): '%s' (%c%c%c)\n",
+                name, name[0], name[1], name[2]);
+    return adios_errno;
+  }
 
+  if (fd->mode == adios_mode_read) {
+    adios_error(err_invalid_file_mode,
+                "write attempted on %s in %s. This was opened for read\n", name,
+                fd->name);
     return adios_errno;
+  }
+
+  // since we are only getting one buffer, get it from the first
+  // transport method that can provide it.
+  while (m) {
+    if (m->method->m != ADIOS_METHOD_UNKNOWN &&
+        m->method->m != ADIOS_METHOD_NULL &&
+        adios_transports[m->method->m].adios_get_write_buffer_fn) {
+      adios_transports[m->method->m].adios_get_write_buffer_fn(
+          fd, v, size, buffer, m->method);
+      m = 0;
+    } else
+      m = m->next;
+  }
+
+  return adios_errno;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
 
-int common_adios_read (int64_t fd_p, const char * name, void * buffer
-                       ,uint64_t buffer_size
-)
-{
-    struct adios_file_struct * fd = (struct adios_file_struct *) fd_p;
-    adios_errno = err_no_error;
-    if (!fd)
-    {
-        adios_error (err_invalid_file_pointer, "Invalid handle passed to adios_group_size\n");
-
-        return adios_errno;
-    }
-    struct adios_var_struct * v;
-    struct adios_method_list_struct * m = fd->group->methods;
+int common_adios_read(int64_t fd_p, const char *name, void *buffer,
+                      uint64_t buffer_size) {
+  ADIOST_CALLBACK_ENTER(adiost_event_read, fd_p);
+  struct adios_file_struct *fd = (struct adios_file_struct *)fd_p;
+  adios_errno = err_no_error;
+  if (!fd) {
+    adios_error(err_invalid_file_pointer,
+                "Invalid handle passed to adios_group_size\n");
+    ADIOST_CALLBACK_EXIT(adiost_event_read, fd_p);
 
-    if (m && m->next == NULL && m->method->m == ADIOS_METHOD_NULL)
-    {
-        // nothing to do so just return
-        return err_no_error;
-    }
+    return adios_errno;
+  }
+  struct adios_var_struct *v;
+  struct adios_method_list_struct *m = fd->group->methods;
 
-    if (!(fd->mode == adios_mode_read))
-    {
-        adios_error (err_invalid_file_mode,
-                     "read attempted on %s which was opened for write\n",
-                     fd->name);
+  if (m && m->next == NULL && m->method->m == ADIOS_METHOD_NULL) {
+    // nothing to do so just return
+    ADIOST_CALLBACK_EXIT(adiost_event_read, fd_p);
+    return err_no_error;
+  }
 
-        return adios_errno;
-    }
+  if (!(fd->mode == adios_mode_read)) {
+    adios_error(err_invalid_file_mode,
+                "read attempted on %s which was opened for write\n", fd->name);
 
-    v = adios_find_var_by_name (fd->group, name);
-    if (v)
-    {
-        // since can only read from one place into the buffer,
-        // read from the first transport method that can
-        while (m)
-        {
-            if (   m->method->m != ADIOS_METHOD_UNKNOWN
-                    && m->method->m != ADIOS_METHOD_NULL
-                    && adios_transports [m->method->m].adios_read_fn
-            )
-            {
-                adios_transports [m->method->m].adios_read_fn
-                (fd, v, buffer, buffer_size, m->method);
-                m = 0;
-            }
-            else
-                m = m->next;
-        }
-    }
-    else
-    {
-        adios_error (err_invalid_varname, "var %s in file %s not found on read\n",
-                     name, fd->name);
-
-        return adios_errno;
+    ADIOST_CALLBACK_EXIT(adiost_event_read, fd_p);
+    return adios_errno;
+  }
+
+  v = adios_find_var_by_name(fd->group, name);
+  if (v) {
+    // since can only read from one place into the buffer,
+    // read from the first transport method that can
+    while (m) {
+      if (m->method->m != ADIOS_METHOD_UNKNOWN &&
+          m->method->m != ADIOS_METHOD_NULL &&
+          adios_transports[m->method->m].adios_read_fn) {
+        adios_transports[m->method->m].adios_read_fn(fd, v, buffer, buffer_size,
+                                                     m->method);
+        m = 0;
+      } else
+        m = m->next;
     }
+  } else {
+    adios_error(err_invalid_varname, "var %s in file %s not found on read\n",
+                name, fd->name);
 
+    ADIOST_CALLBACK_EXIT(adiost_event_read, fd_p);
     return adios_errno;
+  }
+
+  ADIOST_CALLBACK_EXIT(adiost_event_read, fd_p);
+  return adios_errno;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
 // OBSOLETE, kept only for backward compatibility
-int common_adios_set_path (int64_t fd_p, const char * path)
-{
-    struct adios_file_struct * fd = (struct adios_file_struct *) fd_p;
-    adios_errno = err_no_error;
-    if (!fd)
-    {
-        adios_error (err_invalid_file_pointer, "Invalid handle passed to adios_set_path\n");
-
-        return adios_errno;
-    }
-    struct adios_group_struct * t = fd->group;
-    struct adios_var_struct * v = t->vars;
-    struct adios_attribute_struct * a = t->attributes;
-
-    while (v)
-    {
-        if (v->path)
-        {
-            free (v->path);
-        }
-
-        v->path = strdup (path);
+int common_adios_set_path(int64_t fd_p, const char *path) {
+  struct adios_file_struct *fd = (struct adios_file_struct *)fd_p;
+  adios_errno = err_no_error;
+  if (!fd) {
+    adios_error(err_invalid_file_pointer,
+                "Invalid handle passed to adios_set_path\n");
 
-        v = v->next;
+    return adios_errno;
+  }
+  struct adios_group_struct *t = fd->group;
+  struct adios_var_struct *v = t->vars;
+  struct adios_attribute_struct *a = t->attributes;
+
+  while (v) {
+    if (v->path) {
+      free(v->path);
     }
 
-    while (a)
-    {
-        // skip internal attributes
-        if (a->path && strstr (a->path, "__adios__"))
-        {
-            a = a->next;
-            continue;
-        }
+    v->path = strdup(path);
 
-        if (a->path)
-        {
-            free (a->path);
-        }
+    v = v->next;
+  }
 
-        a->path = strdup (path);
+  while (a) {
+    // skip internal attributes
+    if (a->path && strstr(a->path, "__adios__")) {
+      a = a->next;
+      continue;
+    }
 
-        a = a->next;
+    if (a->path) {
+      free(a->path);
     }
 
-    return adios_errno;
+    a->path = strdup(path);
+
+    a = a->next;
+  }
+
+  return adios_errno;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -1035,468 +1027,443 @@ int common_adios_set_path (int64_t fd_p, const char * path)
 // Inconsistent behavior with new ADIOS variable naming
 // The variable is not replaced with the new path in the hash table here, so
 // it is still found using the old path!
-int common_adios_set_path_var (int64_t fd_p, const char * path
-                               ,const char * name
-)
-{
-    struct adios_file_struct * fd = (struct adios_file_struct *) fd_p;
-    adios_errno = err_no_error;
-    if (!fd)
-    {
-        adios_error (err_invalid_file_pointer, "Invalid handle passed to adios_set_path_var\n");
-
-        return adios_errno;
-    }
-    struct adios_group_struct * t = fd->group;
-    struct adios_var_struct * v = t->vars;
+int common_adios_set_path_var(int64_t fd_p, const char *path,
+                              const char *name) {
+  struct adios_file_struct *fd = (struct adios_file_struct *)fd_p;
+  adios_errno = err_no_error;
+  if (!fd) {
+    adios_error(err_invalid_file_pointer,
+                "Invalid handle passed to adios_set_path_var\n");
 
-    // check for vars and then attributes
-    v = adios_find_var_by_name (t, name);
+    return adios_errno;
+  }
+  struct adios_group_struct *t = fd->group;
+  struct adios_var_struct *v = t->vars;
 
-    if (v)
-    {
-        if (v->path)
-        {
-            free (v->path);
-        }
+  // check for vars and then attributes
+  v = adios_find_var_by_name(t, name);
 
-        v->path = strdup (path);
+  if (v) {
+    if (v->path) {
+      free(v->path);
+    }
 
-        /* Possible new behavior: replace the old path with the new path
-         * in the hash table so that the variable is found by
-         * the new path. Inconsistent with old codes that only used
-         * the variable name without the path in adios_write()
-         */
-        //remove var from hash table by old fullpath...
-        //t->hashtbl_vars->remove (t->hashtbl_vars, name);
-        // and add it back with new fullpath
-        //t->hashtbl_vars->put2 (t->hashtbl_vars, v->path, v->name, v);
+    v->path = strdup(path);
 
-    }
-    else
-    {
-        adios_error (err_invalid_varname,
-                     "adios_set_path_var (path=%s, var=%s): var not found\n",
-                     path, name);
+    /* Possible new behavior: replace the old path with the new path
+     * in the hash table so that the variable is found by
+     * the new path. Inconsistent with old codes that only used
+     * the variable name without the path in adios_write()
+     */
+    // remove var from hash table by old fullpath...
+    // t->hashtbl_vars->remove (t->hashtbl_vars, name);
+    // and add it back with new fullpath
+    // t->hashtbl_vars->put2 (t->hashtbl_vars, v->path, v->name, v);
 
-        return adios_errno;
-    }
+  } else {
+    adios_error(err_invalid_varname,
+                "adios_set_path_var (path=%s, var=%s): var not found\n", path,
+                name);
 
     return adios_errno;
+  }
+
+  return adios_errno;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
 // hint that we reached the end of an iteration (for asynchronous pacing)
-int common_adios_end_iteration ()
-{
-    struct adios_method_list_struct * m;
-
-    adios_errno = err_no_error;
-    for (m = adios_get_methods (); m; m = m->next)
-    {
-        if (   m->method->m != ADIOS_METHOD_UNKNOWN
-                && m->method->m != ADIOS_METHOD_NULL
-                && adios_transports [m->method->m].adios_end_iteration_fn
-        )
-        {
-            adios_transports [m->method->m].adios_end_iteration_fn
-            (m->method);
-        }
+int common_adios_end_iteration() {
+  struct adios_method_list_struct *m;
+
+  adios_errno = err_no_error;
+  for (m = adios_get_methods(); m; m = m->next) {
+    if (m->method->m != ADIOS_METHOD_UNKNOWN &&
+        m->method->m != ADIOS_METHOD_NULL &&
+        adios_transports[m->method->m].adios_end_iteration_fn) {
+      adios_transports[m->method->m].adios_end_iteration_fn(m->method);
     }
+  }
 
-    return adios_errno;
+  return adios_errno;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
 // hint to start communicating
-int common_adios_start_calculation ()
-{
-    struct adios_method_list_struct * m;
-
-    adios_errno = err_no_error;
-    for (m = adios_get_methods (); m; m = m->next)
-    {
-        if (   m->method->m != ADIOS_METHOD_UNKNOWN
-                && m->method->m != ADIOS_METHOD_NULL
-                && adios_transports [m->method->m].adios_start_calculation_fn
-        )
-        {
-            adios_transports [m->method->m].adios_start_calculation_fn
-            (m->method);
-        }
+int common_adios_start_calculation() {
+  struct adios_method_list_struct *m;
+
+  adios_errno = err_no_error;
+  for (m = adios_get_methods(); m; m = m->next) {
+    if (m->method->m != ADIOS_METHOD_UNKNOWN &&
+        m->method->m != ADIOS_METHOD_NULL &&
+        adios_transports[m->method->m].adios_start_calculation_fn) {
+      adios_transports[m->method->m].adios_start_calculation_fn(m->method);
     }
+  }
 
-    return adios_errno;
+  return adios_errno;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
 // hint to stop communicating
-int common_adios_stop_calculation ()
-{
-    struct adios_method_list_struct * m;
-
-    adios_errno = err_no_error;
-    for (m = adios_get_methods (); m; m = m->next)
-    {
-        if (   m->method->m != ADIOS_METHOD_UNKNOWN
-                && m->method->m != ADIOS_METHOD_NULL
-                && adios_transports [m->method->m].adios_stop_calculation_fn
-        )
-        {
-            adios_transports [m->method->m].adios_stop_calculation_fn
-            (m->method);
-        }
+int common_adios_stop_calculation() {
+  struct adios_method_list_struct *m;
+
+  adios_errno = err_no_error;
+  for (m = adios_get_methods(); m; m = m->next) {
+    if (m->method->m != ADIOS_METHOD_UNKNOWN &&
+        m->method->m != ADIOS_METHOD_NULL &&
+        adios_transports[m->method->m].adios_stop_calculation_fn) {
+      adios_transports[m->method->m].adios_stop_calculation_fn(m->method);
     }
+  }
 
-    return adios_errno;
+  return adios_errno;
 }
 
-
 ///////////////////////////////////////////////////////////////////////////////
-int common_adios_close (struct adios_file_struct * fd)
-{
+int common_adios_close(struct adios_file_struct *fd) {
 #if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 0)
-    timer_start ("adios_close");
+  timer_start("adios_close");
 #endif
-    adios_errno = err_no_error;
+  adios_errno = err_no_error;
 
-    if (!fd)
-    {
-        adios_error (err_invalid_file_pointer, "Invalid handle passed to adios_close\n");
+  ADIOST_CALLBACK_ENTER(adiost_event_close, fd);
+  if (!fd) {
+    adios_error(err_invalid_file_pointer,
+                "Invalid handle passed to adios_close\n");
 
-        return adios_errno;
-    }
+    ADIOST_CALLBACK_EXIT(adiost_event_close, fd);
+    return adios_errno;
+  }
 
-    struct adios_method_list_struct * m = fd->group->methods;
-    if (m && m->next == NULL && m->method->m == ADIOS_METHOD_NULL)
-    {
-        // nothing to do so just return
+  struct adios_method_list_struct *m = fd->group->methods;
+  if (m && m->next == NULL && m->method->m == ADIOS_METHOD_NULL) {
+// nothing to do so just return
 #if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 0)
-        timer_stop ("adios_close");
-        timer_stop ("adios_open_to_close");
+    timer_stop("adios_close");
+    timer_stop("adios_open_to_close");
 #endif
-        return 0;
-    }
+    ADIOST_CALLBACK_EXIT(adiost_event_close, fd);
+    return 0;
+  }
 
 #ifdef ADIOS_TIMERS
-    if (fd->mode != adios_mode_read) {
-        adios_write_timing_variables (fd);
-    }
+  if (fd->mode != adios_mode_read) {
+    adios_write_timing_variables(fd);
+  }
 #endif
 
-
-    struct adios_attribute_struct * a = fd->group->attributes;
-    struct adios_var_struct * v = fd->group->vars;
-
-    if (fd->mode != adios_mode_read && !TimeAggregationIsFlushing(fd->group))
-    {
-        //printf("=====common_adios_close offset=%llu %llu\n max_ts=%d ts_to_buffer=%d \n", fd->pgs_written->pg_start_in_file, fd->current_pg->pg_start_in_file, fd->group->max_ts, fd->group->ts_to_buffer);
-        //        fd->current_pg=fd->pgs_written;
-        if (fd->bufstate == buffering_ongoing)
-        {
-            adios_write_close_vars_v1 (fd);
-        }
-
-        /* Even if buffering has stopped on overflow, let's try to squeeze in the attributes 
-           to the end of the buffer */
-        if (fd->bufstrat != no_buffering)
-        {
-            /* FIXME: this strategy writes all attributes defined in time step 0
-               and thus duplicates them in the PGs and in the attribute index.
-               For write mode, where files are new, this is good.
-               For append/update it is unnecessary and replicates the attributes
-               in the index.
-               One should write the newly created attributes only in append mode.
-             */
-            uint64_t asize = 12; // 12 bytes to store empty attribute list in a PG (the opening bytes)
-            if (!fd->group->process_id || fd->subfile_index != -1) {
-                // from ADIOS 1.4, only rank 0 writes attributes (or each process to its subfile)
-                asize = adios_calc_attrs_overhead_v1(fd); // size of full attribute list
-            }
-            if (fd->buffer_size < fd->offset + asize) 
-            {
-                /* Trouble, attributes just don't fit into the end of buffer */
-                // try to extend the buffer first
-                log_debug("Need more space for attributes in close(). "
-                        "Current buffer usage=%" PRIu64 " Attributes need %" PRIu64 " bytes "
-                        "var_start offset=%" PRIu64 " and bytes_written=%" PRIu64
-                        "\n",
-                        fd->offset, asize, fd->vars_start, fd->bytes_written
-                        );
-
-                if (adios_databuffer_resize (fd, fd->offset + asize))
-                {
-                    /* FIXME:  Well, drop them in this case */
-                    log_error ("adios_close(): There is not enough buffer to write the attributes. "
-                            "They will be missing from the output\n");
-                }
-            }
-
-            if (fd->buffer_size >= fd->offset + asize) 
-            {
-                adios_write_open_attributes_v1 (fd); // this writes 12 bytes into the buffer
-                if (!fd->group->process_id || fd->subfile_index != -1) {
-                    while (a) {
-                        adios_write_attribute_v1 (fd, a);
-                        a = a->next;
-                    }
-                }
-                adios_write_close_attributes_v1 (fd);
-            }
-
-            adios_write_close_process_group_header_v1 (fd);
-        }
+  struct adios_attribute_struct *a = fd->group->attributes;
+  struct adios_var_struct *v = fd->group->vars;
+
+  if (fd->mode != adios_mode_read && !TimeAggregationIsFlushing(fd->group)) {
+    // printf("=====common_adios_close offset=%llu %llu\n max_ts=%d
+    // ts_to_buffer=%d \n", fd->pgs_written->pg_start_in_file,
+    // fd->current_pg->pg_start_in_file, fd->group->max_ts,
+    // fd->group->ts_to_buffer);
+    //        fd->current_pg=fd->pgs_written;
+    if (fd->bufstate == buffering_ongoing) {
+      adios_write_close_vars_v1(fd);
     }
 
-
-    if (TimeAggregationJustBegan(fd->group))
-    {
-        // first close in time aggregation: we need to figure out how many
-        // time steps we can buffer given the buffer size
-        if( fd->group->ts_to_buffer > 0 && fd->group->ts_buffsize > 0) {
-            fd->group->max_ts = fd->group->ts_buffsize/fd->bytes_written;
-            // max_ts may be different on different processes, we need to use the minimum of them
-            int min_max_ts;
-            MPI_Allreduce(&fd->group->max_ts, &min_max_ts, 1, MPI_INT, MPI_MIN, fd->comm);
-            fd->group->max_ts = min_max_ts;
-            fd->group->ts_to_buffer = fd->group->max_ts-1; // we already have one in our hand
-            //    printf("ts_buffsize=%llu bytes_writen=%llu\n", fd->group->ts_buffsize, fd->bytes_written);
-            //    printf("max_ts=%d ts_to_buffer=%d\n", fd->group->max_ts, fd->group->ts_to_buffer);
+    /* Even if buffering has stopped on overflow, let's try to squeeze in the
+       attributes
+       to the end of the buffer */
+    if (fd->bufstrat != no_buffering) {
+      /* FIXME: this strategy writes all attributes defined in time step 0
+         and thus duplicates them in the PGs and in the attribute index.
+         For write mode, where files are new, this is good.
+         For append/update it is unnecessary and replicates the attributes
+         in the index.
+         One should write the newly created attributes only in append mode.
+       */
+      uint64_t asize = 12;  // 12 bytes to store empty attribute list in a PG
+                            // (the opening bytes)
+      if (!fd->group->process_id || fd->subfile_index != -1) {
+        // from ADIOS 1.4, only rank 0 writes attributes (or each process to its
+        // subfile)
+        asize +=
+            adios_calc_attrs_overhead_v1(fd);  // size of full attribute list
+      }
+      if (fd->buffer_size < fd->offset + asize) {
+        /* Trouble, attributes just don't fit into the end of buffer */
+        // try to extend the buffer first
+        log_debug(
+            "Need more space for attributes in close(). "
+            "Current buffer usage=%" PRIu64 " Attributes need %" PRIu64
+            " bytes "
+            "var_start offset=%" PRIu64 " and bytes_written=%" PRIu64 "\n",
+            fd->offset, asize, fd->vars_start, fd->bytes_written);
+
+        if (adios_databuffer_resize(fd, fd->offset + asize)) {
+          /* FIXME:  Well, drop them in this case */
+          log_error(
+              "adios_close(): There is not enough buffer to write the "
+              "attributes. "
+              "They will be missing from the output\n");
+        }
+      }
+
+      if (fd->buffer_size >= fd->offset + asize) {
+        adios_write_open_attributes_v1(
+            fd);  // this writes 12 bytes into the buffer
+        if (!fd->group->process_id || fd->subfile_index != -1) {
+          while (a) {
+            adios_write_attribute_v1(fd, a);
+            a = a->next;
+          }
         }
-        // if we can only have one step in the buffer, now TimeAggregationLastStep() holds.
-        // TimeAggregationJustBegan() still holds (fd->group->ts_fd == NULL).
+        adios_write_close_attributes_v1(fd);
+      }
 
-        fd->group->ts_fd = fd;
-        // TimeAggregationJustBegan() now moved into TimeAggregationInProgress()
+      adios_write_close_process_group_header_v1(fd);
     }
-
-    // in order to get the index assembled, we need to do it in the
-    // transport once we have collected all of the pieces
-
-    // now tell all of the transports to write the buffer during close
-    for (;m; m = m->next)
-    {
-        if (   m->method->m != ADIOS_METHOD_UNKNOWN
-                && m->method->m != ADIOS_METHOD_NULL
-                && adios_transports [m->method->m].adios_close_fn
-        )
-        {
-
-            if (NotTimeAggregated(fd->group))
-            {
-                adios_transports [m->method->m].adios_close_fn
-                (fd, m->method);
-            }
-            else
-            {
-                if (!TimeAggregationIsFlushing(fd->group))
-                {
-                    // Time Aggregation: build index for current step and merge it in to
-                    // the aggregated index
-                    struct adios_index_struct_v1 * current_index;
-                    current_index=adios_alloc_index_v1(1);
-                    adios_build_index_v1 (fd, current_index);
-                    //printf("current->index time=%d offset=%llu\n", current_index->vars_root->characteristics[0].time_index, current_index->vars_root->characteristics[0].offset);
-                    if (fd->group->index == NULL)
-                    {
-                        //first time step, we just built the index for the group
-                        fd->group->index = current_index;
-                    }
-                    else
-                    {
-                        adios_merge_index_v1 (fd->group->index, current_index->pg_root,
-                                current_index->vars_root, current_index->attrs_root, 1);
-                        adios_free_index_v1 (current_index);
-                    }
-                    //printf("fd->group->index time=%d offset=%llu\n", fd->group->index->vars_root->characteristics[1].time_index, fd->group->index->vars_root->characteristics[1].offset);
-                }
-
-                if (TimeAggregationLastStep(fd->group))
-                {
-                    // in last step, move the PG pointer to the first pg
-                    // to build correct starting offset of this process for all aggregated steps
-                    fd->current_pg=fd->pgs_written;
-                    fd->group->built_index=1;
-                    //printf("bytes-writen=%llu time index=%lu\n", fd->bytes_written, fd->group->index->pg_root->time_index);
-
-                    adios_transports [m->method->m].adios_close_fn
-                    (fd, m->method);
-
-                    /* the method clears the full index data including the one built here.
-                     * we need to just free the container structure.
-                     */
-                    adios_free_index_v1 (fd->group->index);
-                    fd->group->index = NULL;
-                }
-            }
-        }
+  }
+
+  if (TimeAggregationJustBegan(fd->group)) {
+    // first close in time aggregation: we need to figure out how many
+    // time steps we can buffer given the buffer size
+    if (fd->group->ts_to_buffer > 0 && fd->group->ts_buffsize > 0) {
+      fd->group->max_ts = fd->group->ts_buffsize / fd->bytes_written;
+      // max_ts may be different on different processes, we need to use the
+      // minimum of them
+      int min_max_ts;
+      MPI_Allreduce(&fd->group->max_ts, &min_max_ts, 1, MPI_INT, MPI_MIN,
+                    fd->comm);
+      fd->group->max_ts = min_max_ts;
+      fd->group->ts_to_buffer =
+          fd->group->max_ts - 1;  // we already have one in our hand
+      //    printf("ts_buffsize=%llu bytes_writen=%llu\n",
+      //    fd->group->ts_buffsize, fd->bytes_written);
+      //    printf("max_ts=%d ts_to_buffer=%d\n", fd->group->max_ts,
+      //    fd->group->ts_to_buffer);
     }
+    // if we can only have one step in the buffer, now TimeAggregationLastStep()
+    // holds.
+    // TimeAggregationJustBegan() still holds (fd->group->ts_fd == NULL).
+
+    fd->group->ts_fd = fd;
+    // TimeAggregationJustBegan() now moved into TimeAggregationInProgress()
+  }
+
+  // in order to get the index assembled, we need to do it in the
+  // transport once we have collected all of the pieces
+
+  // now tell all of the transports to write the buffer during close
+  for (; m; m = m->next) {
+    if (m->method->m != ADIOS_METHOD_UNKNOWN &&
+        m->method->m != ADIOS_METHOD_NULL &&
+        adios_transports[m->method->m].adios_close_fn) {
+      if (NotTimeAggregated(fd->group)) {
+        adios_transports[m->method->m].adios_close_fn(fd, m->method);
+      } else {
+        if (!TimeAggregationIsFlushing(fd->group)) {
+          // Time Aggregation: build index for current step and merge it in to
+          // the aggregated index
+          struct adios_index_struct_v1 *current_index;
+          current_index = adios_alloc_index_v1(1);
+          adios_build_index_v1(fd, current_index);
+          // printf("current->index time=%d offset=%llu\n",
+          // current_index->vars_root->characteristics[0].time_index,
+          // current_index->vars_root->characteristics[0].offset);
+          if (fd->group->index == NULL) {
+            // first time step, we just built the index for the group
+            fd->group->index = current_index;
+          } else {
+            adios_merge_index_v1(fd->group->index, current_index->pg_root,
+                                 current_index->vars_root,
+                                 current_index->attrs_root, 1);
+            adios_free_index_v1(current_index);
+          }
+          // printf("fd->group->index time=%d offset=%llu\n",
+          // fd->group->index->vars_root->characteristics[1].time_index,
+          // fd->group->index->vars_root->characteristics[1].offset);
+        }
 
-
-    /* Synced groups for time-aggregation.
-     * Force close on those groups that are time-aggregated and are synced with this group
-     */
-    if (NotTimeAggregated(fd->group) || TimeAggregationLastStep(fd->group))
-    {
-        if (TimeAggregationIsaSyncGroup(fd->group))
-        {
-            struct adios_group_struct ** syncedgroups;
-            int ngroups, i;
-            TimeAggregationGetSyncedGroups(fd->group, &syncedgroups, &ngroups );
-            for (i=0; i<ngroups; i++)
-            {
-                struct adios_group_struct *sg = syncedgroups[i];
-                if (sg->ts_fd != NULL)
-                {
-                    if (fd->group->process_id == 0) {
-                        log_info ("Sync flush group '%s' because we just wrote group '%s'. "
-                                "Synced group size is currently %" PRIu64 " bytes holding %d steps\n",
-                                sg->name, fd->group->name, sg->ts_fd->bytes_written,
-                                sg->max_ts-sg->ts_to_buffer-1);
-                    }
-                    SetTimeAggregationFlush(sg, 1);
-                    // => TimeAggregationIsFlushing => TimeAggregationLastStep
-                    common_adios_close (sg->ts_fd); // close file for sync'd group
-                    SetTimeAggregationFlush(sg, 0);
-                }
-            }
+        if (TimeAggregationLastStep(fd->group)) {
+          // in last step, move the PG pointer to the first pg
+          // to build correct starting offset of this process for all aggregated
+          // steps
+          fd->current_pg = fd->pgs_written;
+          fd->group->built_index = 1;
+          // printf("bytes-writen=%llu time index=%lu\n", fd->bytes_written,
+          // fd->group->index->pg_root->time_index);
+
+          adios_transports[m->method->m].adios_close_fn(fd, m->method);
+
+          /* the method clears the full index data including the one built here.
+           * we need to just free the container structure.
+           */
+          adios_free_index_v1(fd->group->index);
+          fd->group->index = NULL;
         }
+      }
     }
-
-
-    //Time Aggregation: only free the buffer if 1) we are not buffering time steps;
-    //2) we have enough time steps buffered  
-    //printf("close: do_ts_aggr=%d  max_ts=%d ts_to_buffer=%d\n", fd->group->do_ts_aggr, fd->group->max_ts, fd->group->ts_to_buffer);
-    if (NotTimeAggregated(fd->group) || TimeAggregationLastStep(fd->group))
-    {
-        while (v)
-        {
-            v->write_offset = 0;
-            if (v->adata)
-            {
-                free (v->adata);
-                v->data = v->adata = 0;
-            }
-
-            v = v->next;
+  }
+
+  /* Synced groups for time-aggregation.
+   * Force close on those groups that are time-aggregated and are synced with
+   * this group
+   */
+  if (NotTimeAggregated(fd->group) || TimeAggregationLastStep(fd->group)) {
+    if (TimeAggregationIsaSyncGroup(fd->group)) {
+      struct adios_group_struct **syncedgroups;
+      int ngroups, i;
+      TimeAggregationGetSyncedGroups(fd->group, &syncedgroups, &ngroups);
+      for (i = 0; i < ngroups; i++) {
+        struct adios_group_struct *sg = syncedgroups[i];
+        if (sg->ts_fd != NULL) {
+          if (fd->group->process_id == 0) {
+            log_info(
+                "Sync flush group '%s' because we just wrote group '%s'. "
+                "Synced group size is currently %" PRIu64
+                " bytes holding %d steps\n",
+                sg->name, fd->group->name, sg->ts_fd->bytes_written,
+                sg->max_ts - sg->ts_to_buffer - 1);
+          }
+          SetTimeAggregationFlush(sg, 1);
+          // => TimeAggregationIsFlushing => TimeAggregationLastStep
+          common_adios_close(sg->ts_fd);  // close file for sync'd group
+          SetTimeAggregationFlush(sg, 0);
         }
+      }
+    }
+  }
+
+  // Time Aggregation: only free the buffer if 1) we are not buffering time
+  // steps;
+  // 2) we have enough time steps buffered
+  // printf("close: do_ts_aggr=%d  max_ts=%d ts_to_buffer=%d\n",
+  // fd->group->do_ts_aggr, fd->group->max_ts, fd->group->ts_to_buffer);
+  if (NotTimeAggregated(fd->group) || TimeAggregationLastStep(fd->group)) {
+    while (v) {
+      v->write_offset = 0;
+      if (v->adata) {
+        free(v->adata);
+        v->data = v->adata = 0;
+      }
+
+      v = v->next;
+    }
 
-        /* clean-up all copied variables with statistics and data in all PGs attached to this file */
-        adios_free_pglist (fd);
+    /* clean-up all copied variables with statistics and data in all PGs
+     * attached to this file */
+    adios_free_pglist(fd);
 
-        if (fd->name)
-        {
-            free (fd->name);
-            fd->name = 0;
-        }
+    if (fd->name) {
+      free(fd->name);
+      fd->name = 0;
+    }
 
-        if (fd->comm != MPI_COMM_NULL && fd->comm != MPI_COMM_SELF) {
-            MPI_Comm_free (&fd->comm);
-        }
+    if (fd->comm != MPI_COMM_NULL && fd->comm != MPI_COMM_SELF) {
+      MPI_Comm_free(&fd->comm);
     }
+  }
 
 #ifdef ADIOS_TIMER_EVENTS
-    /* This has to come here before freeing the buffer that zeros out fd->bytes_written */
-    char* extension = ".perf";
-    int name_len = strlen (fd->name);
-    int fn_len = name_len + strlen (extension) + 1;
-    char* fn = (char*) malloc (sizeof (char) * fn_len);
+  /* This has to come here before freeing the buffer that zeros out
+   * fd->bytes_written */
+  char *extension = ".perf";
+  int name_len = strlen(fd->name);
+  int fn_len = name_len + strlen(extension) + 1;
+  char *fn = (char *)malloc(sizeof(char) * fn_len);
 
-    sprintf (fn, "%s%s", fd->name, extension);
+  sprintf(fn, "%s%s", fd->name, extension);
 
-    adios_timing_write_xml_common (fd_p, fn);
+  adios_timing_write_xml_common(fd_p, fn);
 #endif
 
-
-    //Time Aggregation: add time step aggregation logic
-    //ts aggregation will keep the buffer for next time steps
-    //only free the buffer when ts aggregation is not required, or it
-    //has reached the MAX_TS. 
-    //printf("close: bytes_written=%llu buffer_siz=%llu fd->group->last_buffer_size=%llu\n", fd->bytes_written, fd->buffer_size, fd->group->last_buffer_size);
-    if (fd->bufstrat != no_buffering)
-    {
-        //printf("rank %d group %s last buffer size = %" PRIu64 " buffer_size = %" PRIu64 "\n",
-        //        fd->group->process_id, fd->group->name, fd->group->last_buffer_size, fd->buffer_size);
-
-        if (fd->group->last_buffer_size < fd->buffer_size) {
-            // Remember how much buffer we used for the next cycle.
-            // Time Aggregation: with ts buffering, it will be the total amount of data
-            // written; however last_buffer_size isn't used anyways
-            if(TimeAggregated(fd->group))
-                fd->group->last_buffer_size = fd->buffer_size;
-            else
-                fd->group->last_buffer_size = fd->bytes_written;
-        }
-        if (NotTimeAggregated(fd->group) || TimeAggregationLastStep(fd->group)) {
-            adios_databuffer_free (fd);
-        }
+  // Time Aggregation: add time step aggregation logic
+  // ts aggregation will keep the buffer for next time steps
+  // only free the buffer when ts aggregation is not required, or it
+  // has reached the MAX_TS.
+  // printf("close: bytes_written=%llu buffer_siz=%llu
+  // fd->group->max_pg_size=%llu\n", fd->bytes_written, fd->buffer_size,
+  // fd->group->max_pg_size);
+  if (fd->bufstrat != no_buffering) {
+    // printf("rank %d group %s last buffer size = %" PRIu64 " buffer_size = %"
+    // PRIu64 "\n",
+    //        fd->group->process_id, fd->group->name, fd->group->max_pg_size,
+    //        fd->buffer_size);
+
+    // Remember how much buffer we used for this group for helping buffer
+    // allocation in the next cycle.
+    // This only works for non-time-aggregation. In time aggregation,
+    // bytes_written is the current size of all buffered steps
+    if (NotTimeAggregated(fd->group)) {
+      if (fd->group->max_pg_size < fd->bytes_written) {
+        fd->group->max_pg_size = fd->bytes_written;
+      }
     }
-
-    if (TimeAggregated(fd->group))
-    {
-        if (TimeAggregationLastStep(fd->group))
-        {
-            //Time Aggregation: reset the ts counter when the last ts is in
-            //printf("group %s reset ts_to_buffer to %d\n", fd->group->name, fd->group->max_ts);
-            fd->group->ts_to_buffer = fd->group->max_ts;
-            fd->group->ts_fd = NULL;
-            free (fd);
-        }
-        else
-        {
-            // fd->group->new_write_offset=fd->current_pg->pg_start_in_file+
-            fd->group->ts_to_buffer--;
-            // TimeAggregationInProgress() may have moved into
-            //   TimeAggregationInProgress && TimeAggregationLastStep (i.e. ts_to_buffer==0)
-            //printf("didn't free fd, continue buffering addr=%lld\n", fd_p);
-        }
+    if (NotTimeAggregated(fd->group) || TimeAggregationLastStep(fd->group)) {
+      adios_databuffer_free(fd);
     }
-    else
-    {
-        free (fd);
+  }
+
+  if (TimeAggregated(fd->group)) {
+    if (TimeAggregationLastStep(fd->group)) {
+      // Time Aggregation: reset the ts counter when the last ts is in
+      // printf("group %s reset ts_to_buffer to %d\n", fd->group->name,
+      // fd->group->max_ts);
+      fd->group->ts_to_buffer = fd->group->max_ts;
+      fd->group->ts_fd = NULL;
+      free(fd);
+    } else {
+      // fd->group->new_write_offset=fd->current_pg->pg_start_in_file+
+      fd->group->ts_to_buffer--;
+      // TimeAggregationInProgress() may have moved into
+      //   TimeAggregationInProgress && TimeAggregationLastStep (i.e.
+      //   ts_to_buffer==0)
+      // printf("didn't free fd, continue buffering addr=%lld\n", fd_p);
     }
+  } else {
+    free(fd);
+  }
 
-    //printf("close file==============\n");
-    /*
-    printf("close: do_ts_aggr=%d  max_ts=%d ts_to_buffer=%d\n",
-            fd->group->do_ts_aggr, fd->group->max_ts, fd->group->ts_to_buffer);
+// printf("close file==============\n");
+/*
+printf("close: do_ts_aggr=%d  max_ts=%d ts_to_buffer=%d\n",
+        fd->group->do_ts_aggr, fd->group->max_ts, fd->group->ts_to_buffer);
 
-    printf("close: fd->offset=%lld, group_offset=%lld\n", fd->offset,
-            fd->group->group_offset); 
+printf("close: fd->offset=%lld, group_offset=%lld\n", fd->offset,
+        fd->group->group_offset);
 
-    printf("close: fd->pgs_written->pg_start_in_file=%lld, fd->current_pg->pg_start_in_file=%lld\n", 
-            fd->pgs_written->pg_start_in_file, fd->current_pg->pg_start_in_file);
-     */
+printf("close: fd->pgs_written->pg_start_in_file=%lld,
+fd->current_pg->pg_start_in_file=%lld\n",
+        fd->pgs_written->pg_start_in_file, fd->current_pg->pg_start_in_file);
+ */
 #if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 0)
-    timer_stop ("adios_close");
-    timer_stop ("adios_open_to_close");
-    //    printf ("Timers, ");
-    //    printf ("%d, ", fd->group->process_id);
-    //    printf ("%d, ", fd->group->time_index);
-    //    printf ("%lf, ", timer_get_total_interval ("adios_open" ));
-    //    printf ("%lf, ", timer_get_total_interval ("adios_group_size"));
-    //    printf ("%lf, ", timer_get_total_interval ("adios_transform" ));
-    //    printf ("%lf, ", timer_get_total_interval ("adios_write" ));
-    //    printf ("%lf\n", timer_get_total_interval ("adios_close"     ));
-    //    timer_reset_timers ();
-
-    printf("[TIMERS] Proc: %d Time: %d ", fd->group->process_id, fd->group->time_index);
-    int i;
-    timer_result_t *results = timer_get_results_sorted();
-    for (i = 0; i < timer_get_num_timers(); i++) {
-        printf("%s: %0.4lf ", results[i].name, results[i].time);
-    }
-    printf("\n");
-    free(results);
-
-    //timer_reset_timers ();
+  timer_stop("adios_close");
+  timer_stop("adios_open_to_close");
+  //    printf ("Timers, ");
+  //    printf ("%d, ", fd->group->process_id);
+  //    printf ("%d, ", fd->group->time_index);
+  //    printf ("%lf, ", timer_get_total_interval ("adios_open" ));
+  //    printf ("%lf, ", timer_get_total_interval ("adios_group_size"));
+  //    printf ("%lf, ", timer_get_total_interval ("adios_transform" ));
+  //    printf ("%lf, ", timer_get_total_interval ("adios_write" ));
+  //    printf ("%lf\n", timer_get_total_interval ("adios_close"     ));
+  //    timer_reset_timers ();
+
+  printf("[TIMERS] Proc: %d Time: %d ", fd->group->process_id,
+         fd->group->time_index);
+  int i;
+  timer_result_t *results = timer_get_results_sorted();
+  for (i = 0; i < timer_get_num_timers(); i++) {
+    printf("%s: %0.4lf ", results[i].name, results[i].time);
+  }
+  printf("\n");
+  free(results);
+
+// timer_reset_timers ();
 #endif
 
-
-    return adios_errno;
+  ADIOST_CALLBACK_EXIT(adiost_event_close, fd);
+  return adios_errno;
 }
 
-
 //////////////////////////////////////////////////////////////////////////////
 // Methods normally only called by the XML parser
 //////////////////////////////////////////////////////////////////////////////
diff --git a/src/core/common_read.c b/src/core/common_read.c
index ccf8c13..15daa38 100644
--- a/src/core/common_read.c
+++ b/src/core/common_read.c
@@ -34,6 +34,7 @@
 #include "dmalloc.h"
 #endif
 
+#include "adiost_callback_internal.h"
 
 /* Note: MATLAB reloads the mex64 files each time, so all static variables get the original value.
    Therefore static variables cannot be used to pass info between two Matlab/ADIOS calls */
@@ -83,6 +84,7 @@ int common_read_init_method (enum ADIOS_READ_METHOD method,
     int retval;
     char *end;
 
+    adiost_pre_init();
     adios_errno = err_no_error;
     if ((int)method < 0 || (int)method >= ADIOS_READ_METHOD_COUNT) {
         adios_error (err_invalid_read_method,
@@ -170,6 +172,7 @@ int common_read_init_method (enum ADIOS_READ_METHOD method,
     // init the query API; may call it multiple times here in multiple read methods' init;
     common_query_init(); 
 
+    adiost_post_init();
     return retval;
 }
 
@@ -203,6 +206,7 @@ int common_read_finalize_method(enum ADIOS_READ_METHOD method)
 
     // finalize the query API; may call it multiple times here in multiple read methods' finalize;
     common_query_finalize(); 
+    adiost_finalize();
     return retval;
 }
 
@@ -379,9 +383,12 @@ ADIOS_FILE * common_read_open (const char * fname,
     struct common_read_internals_struct * internals; 
     long i;
 
+    ADIOST_CALLBACK_ENTER(adiost_event_open, fp, "", "", "");
+
     if ((int)method < 0 || (int)method >= ADIOS_READ_METHOD_COUNT) {
         adios_error (err_invalid_read_method,
             "Invalid read method (=%d) passed to adios_read_open().\n", (int)method);
+        ADIOST_CALLBACK_EXIT(adiost_event_open, fp, "", "", "");
         return NULL;
     }
 
@@ -397,6 +404,7 @@ ADIOS_FILE * common_read_open (const char * fname,
         adios_error (err_invalid_read_method, 
             "Read method (=%d) passed to adios_read_open() is not provided "
             "by this build of ADIOS.\n", (int)method);
+        ADIOST_CALLBACK_EXIT(adiost_event_open, fp, "", "", "");
         return NULL;
     }
 
@@ -410,8 +418,10 @@ ADIOS_FILE * common_read_open (const char * fname,
 	internals->infocache = adios_infocache_new();
 
     fp = adios_read_hooks[internals->method].adios_read_open_fn (fname, comm, lock_mode, timeout_sec);
-    if (!fp)
+    if (!fp) {
+        ADIOST_CALLBACK_EXIT(adiost_event_open, fp, "", "", "");
         return fp;
+    }
 
     fp->is_streaming = 1; // Mark file handle as streaming
 
@@ -439,6 +449,7 @@ ADIOS_FILE * common_read_open (const char * fname,
 
     common_read_link (fp);
 
+    ADIOST_CALLBACK_EXIT(adiost_event_open, fp, "", "", "");
     return fp;
 }
 
@@ -529,6 +540,8 @@ int common_read_close (ADIOS_FILE *fp)
     struct common_read_internals_struct * internals;
     int retval;
 
+    ADIOST_CALLBACK_ENTER(adiost_event_close, fp);
+
     adios_errno = err_no_error;
     if (fp) {
         internals = (struct common_read_internals_struct *) fp->internal_data;
@@ -566,6 +579,8 @@ int common_read_close (ADIOS_FILE *fp)
         adios_error ( err_invalid_file_pointer, "Invalid file pointer at adios_read_close()\n");
         retval = err_invalid_file_pointer;
     }
+
+    ADIOST_CALLBACK_EXIT(adiost_event_close, fp);
     return retval;
 }
 
@@ -626,6 +641,8 @@ int common_read_advance_step (ADIOS_FILE *fp, int last, float timeout_sec)
     int retval;
     long i;
     
+    ADIOST_CALLBACK_ENTER(adiost_event_advance_step, fp);
+
     adios_errno = err_no_error;
     if (fp) {
         if (fp->is_streaming)
@@ -669,6 +686,8 @@ int common_read_advance_step (ADIOS_FILE *fp, int last, float timeout_sec)
         adios_error ( err_invalid_file_pointer, "Invalid file pointer at adios_advance_step()\n");
         retval = err_invalid_file_pointer;
     }
+
+    ADIOST_CALLBACK_EXIT(adiost_event_advance_step, fp);
     return retval;
 }
 
@@ -3660,6 +3679,8 @@ int common_read_perform_reads (const ADIOS_FILE *fp, int blocking)
     struct common_read_internals_struct * internals;
     int retval;
 
+    ADIOST_CALLBACK_ENTER(adiost_event_read, fp);
+
     adios_errno = err_no_error;
     if (fp) {
         internals = (struct common_read_internals_struct *) fp->internal_data;
@@ -3677,6 +3698,8 @@ int common_read_perform_reads (const ADIOS_FILE *fp, int blocking)
         adios_error (err_invalid_file_pointer, "Null pointer passed as file to adios_perform_reads()\n");
         retval = err_invalid_file_pointer;
     }
+
+    ADIOST_CALLBACK_EXIT(adiost_event_read, fp);
     return retval;
 }
 
diff --git a/src/core/flexpath.h b/src/core/flexpath.h
index 3a59441..c41dec3 100644
--- a/src/core/flexpath.h
+++ b/src/core/flexpath.h
@@ -14,6 +14,9 @@
 #define FP_DST_ATTR_NAME "fp_dst_rank"
 #define FP_DIM_ATTR_NAME "fp_dim"
 #define FP_NDIMS_ATTR_NAME "fp_ndims"
+#define FP_TIMESTEP "fp_timestep"
+#define FP_ONLY_SCALARS "fp_only_scalars"
+#define FP_NATTRS "fp_number_of_attrs"
 
 #define CLOSE_MSG 0
 #define OPEN_MSG 1
@@ -33,8 +36,8 @@
 	    }
 #define fp_verbose(flxp_file, ...)                             \
             if(flxp_file->verbose) {    \
-		fprintf(stderr, "file %p: %s %d:", flxp_file, FLEXPATH_SIDE, flxp_file->rank); \
-		fprintf(stderr, __VA_ARGS__);			   \
+		fprintf(stdout, "file %p: %s %d:", flxp_file, FLEXPATH_SIDE, flxp_file->rank); \
+		fprintf(stdout, __VA_ARGS__);			   \
             }
             
 
@@ -42,18 +45,43 @@
 
 #define CONTACT_STR_LEN 50
 
-typedef enum {FORMAT, DATA, EVGROUP, STEP } Flush_type;
+typedef struct _finalize_close_msg {
+    int finalize;
+    int close;
+    int final_timestep;
+} finalize_close_msg, * finalize_close_msg_ptr;
 
-typedef struct _update_step_msg{
-    int step;
-    int finalized;
-    int condition;
-}update_step_msg;
 
-typedef struct _drop_evgroup{
-    int step;
+typedef struct _reader_register_msg {
+    uint64_t writer_file;
+    uint64_t reader_file;
     int condition;
-}drop_evgroup_msg;
+    int contact_count;
+    char **contacts;
+} reader_register_msg;
+
+static FMField reader_register_field_list[] =
+{
+    {"writer_file", "integer", sizeof(uint64_t), FMOffset(reader_register_msg*, writer_file)},
+    {"reader_file", "integer", sizeof(uint64_t), FMOffset(reader_register_msg*, reader_file)},
+    {"condition", "integer", sizeof(int), FMOffset(reader_register_msg*, condition)},
+    {"contact_count", "integer", sizeof(int), FMOffset(reader_register_msg*, contact_count)},
+    {"contacts", "string[contact_count]", sizeof(char*), FMOffset(reader_register_msg*, contacts)},
+    {NULL, NULL, 0, 0}
+};
+
+typedef struct _reader_go_msg {
+    uint64_t reader_file;
+    int start_timestep;
+} reader_go_msg;
+
+static FMField reader_go_field_list[] =
+{
+    {"reader_file", "integer", sizeof(uint64_t), FMOffset(reader_go_msg*, reader_file)},
+    {"start_timestep", "integer", sizeof(int), FMOffset(reader_go_msg*, start_timestep)},
+    {NULL, NULL, 0, 0}
+};
+
 /*
  * Contains the offset information for a variable for all writers.
  * offsets_per_rank is == ndims.
@@ -81,27 +109,15 @@ typedef struct _evgroup {
     global_var* vars;
 } evgroup, *evgroup_ptr;
 
-typedef struct _op_msg
-{
-    int process_id;
-    char *file_name;
-    int type; //4 = end_of_stream, 3 = init, 2 = ack, 1 = open, 0 = close,
-    int step;
-    int condition;
-} op_msg, *op_msg_ptr;
  
-typedef struct flush_msg_ {
-    Flush_type type;
-    int process_id;
-    int condition;
-    int id;
-} Flush_msg, *Flush_msg_ptr;
-
-typedef struct var_msg_ {
-    char* var_name;
-    int process_id;
-    int condition;
-} Var_msg, *Var_msg_ptr;
+typedef struct _reader_request_msg {
+    int     condition;
+    int     timestep_requested;
+    int     process_return_id;
+    int     current_lamport_min;
+    int     var_count;
+    char**  var_name_array;
+} read_request_msg, *read_request_msg_ptr;
 
 typedef struct _complex_dummy
 {
@@ -115,32 +131,24 @@ typedef struct _double_complex_dummy
     double i;
 } double_complex_dummy;
 
-static FMField complex_dummy_field_list[] =
-{
-    {"r", "float", sizeof(float), FMOffset(complex_dummy*, r)},
-    {"i", "float", sizeof(float), FMOffset(complex_dummy*, i)},
-    {NULL, NULL, 0, 0}
-};
-
-static FMField double_complex_dummy_field_list[] =
-{
-    {"r", "double", sizeof(double), FMOffset(double_complex_dummy*, r)},
-    {"i", "double", sizeof(double), FMOffset(double_complex_dummy*, i)},
-    {NULL, NULL, 0, 0}
-};
+typedef struct _queue_size_msg {
+    int queue_size;
+} queue_size_msg, *queue_size_msg_ptr;
 
-static FMField update_step_msg_field_list[]=
+static FMField queue_size_msg_field_list[]=
 {
-    {"step", "integer", sizeof(int), FMOffset(update_step_msg*, step)},
-    {"finalized", "integer", sizeof(int), FMOffset(update_step_msg*, finalized)},
-    {"condition", "integer", sizeof(int), FMOffset(update_step_msg*, condition)},
+    {"size", "integer", sizeof(int), FMOffset(queue_size_msg_ptr, queue_size)},
     {NULL, NULL, 0, 0}
 };
 
-static FMField drop_evgroup_msg_field_list[]=
+static FMField read_request_msg_field_list[]=
 {
-    {"step", "integer", sizeof(int), FMOffset(drop_evgroup_msg*, step)},
-    {"condition", "integer", sizeof(int), FMOffset(drop_evgroup_msg*, condition)},
+    {"condition", "integer", sizeof(int), FMOffset(read_request_msg_ptr, condition)},
+    {"timestep_requested", "integer", sizeof(int), FMOffset(read_request_msg_ptr, timestep_requested)},
+    {"process_return_id", "integer",  sizeof(int), FMOffset(read_request_msg_ptr, process_return_id)},
+    {"current_lamport_min", "integer",  sizeof(int), FMOffset(read_request_msg_ptr, current_lamport_min)},
+    {"var_count", "integer", sizeof(int), FMOffset(read_request_msg_ptr, var_count)},
+    {"var_name_array", "string[var_count]", sizeof(char *), FMOffset(read_request_msg_ptr, var_name_array)},
     {NULL, NULL, 0, 0}
 };
 
@@ -162,55 +170,46 @@ static FMField global_var_field_list[]=
     {NULL, NULL, 0, 0}
 };
 
-static FMField evgroup_field_list[]=
+static FMField complex_dummy_field_list[] =
 {
-    {"condition", "integer", sizeof(int), FMOffset(evgroup_ptr, condition)},
-    {"num_vars", "integer", sizeof(int), FMOffset(evgroup_ptr, num_vars)},
-    {"step", "integer", sizeof(int), FMOffset(evgroup_ptr, step)},
-    {"process_id", "integer", sizeof(int), FMOffset(evgroup_ptr, process_id)},
-    {"group_name", "string", sizeof(char*), FMOffset(evgroup_ptr, group_name)},
-    {"vars", "global_var[num_vars]", sizeof(global_var), FMOffset(evgroup_ptr, vars)},
+    {"r", "float", sizeof(float), FMOffset(complex_dummy*, r)},
+    {"i", "float", sizeof(float), FMOffset(complex_dummy*, i)},
     {NULL, NULL, 0, 0}
 };
 
-static FMField flush_field_list[] =
-{   
-    {"type", "integer", sizeof(Flush_type), FMOffset(Flush_msg_ptr, type)},
-    {"process_id", "integer", sizeof(int), FMOffset(Flush_msg_ptr, process_id)},
-    {"condition", "integer", sizeof(int), FMOffset(Flush_msg_ptr, condition)},
-    {"id", "integer", sizeof(int), FMOffset(Flush_msg_ptr, id)},
+static FMField double_complex_dummy_field_list[] =
+{
+    {"r", "double", sizeof(double), FMOffset(double_complex_dummy*, r)},
+    {"i", "double", sizeof(double), FMOffset(double_complex_dummy*, i)},
     {NULL, NULL, 0, 0}
 };
 
-static FMField var_field_list[] =
+static FMField evgroup_field_list[]=
 {
-    {"var_name", "string", sizeof(char*), FMOffset(Var_msg_ptr, var_name)},
-    {"process_id", "integer", sizeof(int), FMOffset(Var_msg_ptr, process_id)},
+    {"condition", "integer", sizeof(int), FMOffset(evgroup_ptr, condition)},
+    {"num_vars", "integer", sizeof(int), FMOffset(evgroup_ptr, num_vars)},
+    {"step", "integer", sizeof(int), FMOffset(evgroup_ptr, step)},
+    {"process_id", "integer", sizeof(int), FMOffset(evgroup_ptr, process_id)},
+    {"group_name", "string", sizeof(char*), FMOffset(evgroup_ptr, group_name)},
+    {"vars", "global_var[num_vars]", sizeof(global_var), FMOffset(evgroup_ptr, vars)},
     {NULL, NULL, 0, 0}
 };
 
 
-static FMField op_file_field_list[] =
+static FMField finalize_close_msg_field_list[] =
 {
-    {"process_id", "integer", sizeof(int), FMOffset(op_msg_ptr, process_id)},
-    {"file_name", "string", sizeof(char*), FMOffset(op_msg_ptr, file_name)},
-    {"type", "integer", sizeof(int), FMOffset(op_msg_ptr, type)},
-    {"step", "integer", sizeof(int), FMOffset(op_msg_ptr, step)},
-    {"condition", "integer", sizeof(int), FMOffset(op_msg_ptr, condition)},
+    {"finalize", "integer", sizeof(int), FMOffset(finalize_close_msg_ptr, finalize)},
+    {"close", "integer", sizeof(int), FMOffset(finalize_close_msg_ptr, close)},
+    {"final_timestep", "integer", sizeof(int), FMOffset(finalize_close_msg_ptr, final_timestep)},
     {NULL, NULL, 0, 0}
 };
 
-static FMStructDescRec update_step_msg_format_list[]=
+static FMStructDescRec finalize_close_msg_format_list[]=
 {
-    {"update_step_msg", update_step_msg_field_list, sizeof(update_step_msg), NULL},
+    {"finalize_close_msg", finalize_close_msg_field_list, sizeof(finalize_close_msg), NULL},
     {NULL, NULL, 0, 0}
 };
 
-static FMStructDescRec drop_evgroup_msg_format_list[]=
-{
-    {"drop_evgroup_msg", drop_evgroup_msg_field_list, sizeof(drop_evgroup_msg), NULL},
-    {NULL, NULL, 0, 0}
-};
 
 static FMStructDescRec offset_struct_format_list[] =
 {
@@ -218,6 +217,11 @@ static FMStructDescRec offset_struct_format_list[] =
     {NULL, NULL, 0, 0}
 };
 
+static FMStructDescRec read_request_format_list[] =
+{
+    {"read_request", read_request_msg_field_list, sizeof(read_request_msg), NULL},
+    {NULL, NULL, 0, NULL}
+};
 
 static FMStructDescRec evgroup_format_list[] =
 {   
@@ -227,15 +231,9 @@ static FMStructDescRec evgroup_format_list[] =
     {NULL,NULL,0,NULL}
 };
 
-static FMStructDescRec flush_format_list[] =
-{   
-    {"flush", flush_field_list, sizeof(Flush_msg), NULL},
-    {NULL,NULL,0,NULL}
-};
- 
-static FMStructDescRec var_format_list[] =
+static FMStructDescRec queue_size_msg_format_list[] =
 {
-    {"varMsg", var_field_list, sizeof(Var_msg), NULL},
+    {"queue_size_msg", queue_size_msg_field_list, sizeof(queue_size_msg), NULL},
     {NULL, NULL, 0, NULL}
 };
 
@@ -245,11 +243,6 @@ static FMStructDescRec data_format_list[] =
     {NULL, NULL, 0, NULL}
 };
 
-static FMStructDescRec op_format_list[] =
-{
-    {"op_msg", op_file_field_list, sizeof(op_msg), NULL},
-    {NULL, NULL, 0, NULL}
-};
 
 static char *getFixedName(char *name);
 
diff --git a/src/core/globals.c b/src/core/globals.c
index bee3ede..96c4744 100644
--- a/src/core/globals.c
+++ b/src/core/globals.c
@@ -11,7 +11,9 @@
 
 #include "globals.h"
 #include <inttypes.h>
-
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
 
 static int globals_adios_appid = -1;
 static int globals_adios_was_set = 0;
@@ -341,3 +343,103 @@ void icee_contactinfo_print(const icee_contactinfo_rec_ptr_t cp)
 }
 
 #endif
+
+#ifdef HAVE_FLEXPATH
+
+static char ascii_array[128];
+static char reverse_array[128];
+
+static void init_arrays()
+{
+    int i;
+    char translate = 'A';
+    memset(reverse_array, 0, 128);
+    for (i=0; i < sizeof(ascii_array) ; i++) {
+	if (!isprint((char)i)) {
+	    ascii_array[i] = 0;
+	} else {
+	    /* printable character */
+	    if (isalnum((char)i)) {
+		ascii_array[i] = 1;
+	    } else {
+		ascii_array[i] = translate;
+		reverse_array[translate] = i;
+		translate++;
+		if (translate == '[') {
+		    translate = 'a';
+		}
+	    }
+	}
+    }
+}
+
+char*
+flexpath_mangle(const char *name)
+{
+    char *mangle = NULL;
+    const char *tmp = name;
+    int len = 0;
+    int bad = 0;
+    static int first = 1;
+
+    if (first) {
+	first = 0;
+	init_arrays();
+    }
+    if (!name) return NULL;
+    while (*tmp) {
+	if (!isalnum(*tmp) && (*tmp != '_')) {
+	    bad++;
+	}
+	tmp++;
+    }
+    if (!bad) {
+	return strdup(name);
+    }
+    mangle = malloc(2*strlen(name) + 4);  /* worst case */
+    memset(mangle, 0, 2*strlen(name) + 4);
+    strcpy(mangle, "Z__");
+    int end = strlen(mangle);
+    while (name[0]) {
+	if (ascii_array[name[0]] > 1) {
+	    mangle[end++] = '_';
+	    mangle[end++] = ascii_array[name[0]];
+	} else {
+	    mangle[end++] = name[0];
+	}
+	name++;
+    }
+    return mangle;
+}
+
+char*
+flexpath_unmangle(const char *name)
+{
+    static int first = 1;
+    char *unmangle = NULL;
+    int end = 0;
+
+    if (first) {
+	first = 0;
+	init_arrays();
+    }
+    if (!name) return NULL;
+    if (strncmp(name, "Z__", 3)) {
+	return strdup(name);
+    }
+    unmangle = malloc(strlen(name));  /* worst case */
+    memset(unmangle, 0, strlen(name));
+    name += 3;
+    end = 0;
+    while (name[0]) {
+	if (name[0] == '_') {
+	    name++;
+	    unmangle[end++] = reverse_array[name[0]];
+	} else {
+	    unmangle[end++] = name[0];
+	}
+	name++;
+    }
+    return unmangle;
+}
+#endif
diff --git a/src/core/globals.h b/src/core/globals.h
index ad59519..30579d1 100644
--- a/src/core/globals.h
+++ b/src/core/globals.h
@@ -82,4 +82,8 @@ void icee_fileinfo_print(const void* item);
 void icee_contactinfo_print(const icee_contactinfo_rec_ptr_t cp);
 #endif
 
+#ifdef HAVE_FLEXPATH
+extern char *flexpath_unmangle(const char*name);
+extern char *flexpath_mangle(const char*name);
+#endif
 #endif  /*__GLOBALS_H__*/
diff --git a/src/mxml/Makefile.in b/src/mxml/Makefile.in
index 2796ac5..2ce3c95 100644
--- a/src/mxml/Makefile.in
+++ b/src/mxml/Makefile.in
@@ -100,7 +100,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -108,8 +108,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -337,6 +337,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -413,6 +417,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/src/public/adios_error.h b/src/public/adios_error.h
index c4af3e8..1d1b66e 100644
--- a/src/public/adios_error.h
+++ b/src/public/adios_error.h
@@ -46,6 +46,7 @@ enum ADIOS_ERRCODES {
     err_too_many_files                  = -24, /* some staging methods allow for using only
                                                   a fixed number of different filenames    */
 
+    err_file_read_error                 = -25,
     err_unknown_char                    = -30,
 
     // XML parsing errors
diff --git a/src/public/adios_version.h b/src/public/adios_version.h
index 651f624..37f29cf 100644
--- a/src/public/adios_version.h
+++ b/src/public/adios_version.h
@@ -9,9 +9,9 @@
 #define ADIOS_VERSION_H
 
 /* ADIOS Software release version */
-#define ADIOS_VERSION "1.11.0"
+#define ADIOS_VERSION "1.12.0"
 #define ADIOS_VERSION_MAJOR 1
-#define ADIOS_VERSION_MINOR 11
+#define ADIOS_VERSION_MINOR 12
 #define ADIOS_VERSION_PATCH 0
 
 /* macros for comparing the version */
@@ -27,7 +27,7 @@
 
 /* ADIOS Software release version as strings*/
 #define ADIOS_VERSION_MAJOR_STRING "1"
-#define ADIOS_VERSION_MINOR_STRING "11"
+#define ADIOS_VERSION_MINOR_STRING "12"
 #define ADIOS_VERSION_PATCH_STRING "0"
 
 /* BP File format version
diff --git a/src/public/adiost_callback_api.h b/src/public/adiost_callback_api.h
new file mode 100644
index 0000000..6a74466
--- /dev/null
+++ b/src/public/adiost_callback_api.h
@@ -0,0 +1,153 @@
+/* 
+ * ADIOS is freely available under the terms of the BSD license described
+ * in the COPYING file in the top level directory of this source distribution.
+ *
+ * Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.
+ */
+
+#ifndef __ADIOST_CALLBACK_API_H__
+#define __ADIOST_CALLBACK_API_H__
+
+/****************************************************************************
+ * System include files
+ ****************************************************************************/
+
+#include <stdint.h>
+#ifndef ADIOST_EXPORT 
+#define ADIOST_EXPORT 
+#endif
+#ifndef ADIOST_WEAK
+#define ADIOST_WEAK
+#endif
+
+/****************************************************************************
+ * iteration macros - to be expanded by other macros in multiple places
+ ****************************************************************************/
+
+#define FOREACH_ADIOST_INQUIRY_FN(macro)  \
+    macro (adiost_set_callback)           \
+    macro (adiost_get_callback)
+
+/* For each event, specify the callback type and the enumeration value. */
+#define FOREACH_ADIOST_EVENT(macro) \
+macro(adiost_event_thread,                  adiost_thread_callback_t,      1) \
+macro(adiost_event_open,                    adiost_open_callback_t,        3) \
+macro(adiost_event_close,                   adiost_file_callback_t,        5) \
+macro(adiost_event_write,                   adiost_file_callback_t,        10) \
+macro(adiost_event_read,                    adiost_file_callback_t,        12) \
+macro(adiost_event_advance_step,            adiost_file_callback_t,        14) \
+macro(adiost_event_group_size,              adiost_group_size_callback_t,  51) \
+macro(adiost_event_transform,               adiost_file_callback_t,        52) \
+macro(adiost_event_fp_send_finalize_msg,    adiost_file_callback_t,       102) \
+macro(adiost_event_fp_send_read_msg,        adiost_file_callback_t,       105) \
+macro(adiost_event_fp_add_var_to_read_msg,  adiost_file_callback_t,       106) \
+macro(adiost_event_fp_copy_buffer,          adiost_file_callback_t,       205) \
+macro(adiost_event_library_shutdown,        adiost_callback_t,            999) \
+
+#endif // #ifdef __ADIOST_CALLBACK_API_H__
+
+typedef enum {
+#define adiost_event_macro(event, callback, eventid) event = eventid,
+    FOREACH_ADIOST_EVENT(adiost_event_macro)
+    #undef adiost_event_macro
+} adiost_event_t;
+
+/*---------------------
+ * set callback results
+ *---------------------*/
+typedef enum {
+    adiost_set_result_registration_success            = 0,
+    adiost_set_result_registration_error              = 1
+} adiost_set_result_t;
+
+typedef enum {
+    adiost_event_enter,
+    adiost_event_exit,
+    adiost_event
+} adiost_event_type_t;
+
+/****************************************************************************
+ * Callback signature types
+ ****************************************************************************/
+
+/* initialization */
+typedef void (*adiost_interface_fn_t)(void);
+
+typedef adiost_interface_fn_t (*adiost_function_lookup_t)(
+    const char *                      /* entry point to look up       */
+);
+
+/* Events: adios_thread */
+typedef void (*adiost_thread_callback_t)(
+    int64_t file_descriptor,
+    adiost_event_type_t type,
+    const char * thread_name
+);
+
+/* Events: adios_open */
+typedef void (*adiost_open_callback_t)(
+    int64_t file_descriptor,
+    adiost_event_type_t type,
+    const char * group_name,
+    const char * file_name,
+    const char * mode
+);
+
+/* Events: adios_close, adios_read_begin...adios_write_end */
+typedef void (*adiost_file_callback_t)(
+    int64_t file_descriptor, 
+    adiost_event_type_t type);
+
+/* Events: adios_group_size */
+typedef void (*adiost_group_size_callback_t)(
+    int64_t file_descriptor,
+    adiost_event_type_t type,
+    uint64_t data_size,
+    uint64_t total_size
+);
+
+/* Events: adiost_event_library_shutdown */
+typedef void (*adiost_callback_t)(void);
+
+/****************************************************************************
+ * ADIOST API
+ ****************************************************************************/
+
+#ifdef  __cplusplus
+extern "C" {
+#endif
+
+#define ADIOST_API_FNTYPE(fn) fn##_t
+
+#define ADIOST_API_FUNCTION(return_type, fn, args)  \
+    typedef return_type (*ADIOST_API_FNTYPE(fn)) args
+
+/****************************************************************************
+ * Initialization functions
+ ****************************************************************************/
+
+ADIOST_API_FUNCTION(void, adiost_initialize, (
+    adiost_function_lookup_t adiost_fn_lookup,
+    const char *runtime_version,
+    unsigned int adiost_version
+));
+
+/* initialization interface - to be defined by tool */
+ADIOST_EXPORT adiost_initialize_t ADIOST_WEAK adiost_tool(void);
+
+/* Registering a callback function */
+ADIOST_API_FUNCTION(int, adiost_set_callback, (
+    adiost_event_t event,
+    adiost_callback_t callback
+));
+
+/* Getting a callback function */
+ADIOST_API_FUNCTION(int, adiost_get_callback, (
+    adiost_event_t event,
+    adiost_callback_t *callback
+));
+
+#ifdef  __cplusplus
+}
+#endif
+
diff --git a/src/public/mpidummy.h b/src/public/mpidummy.h
index 72bdc3d..6310462 100644
--- a/src/public/mpidummy.h
+++ b/src/public/mpidummy.h
@@ -56,10 +56,13 @@ typedef enum mpi_operation MPI_Op;
 #define MPI_INT                     1
 #define MPI_CHAR                    2
 #define MPI_DOUBLE                  3
+#define MPI_UINT64_T                4
+#define MPI_UNSIGNED_LONG_LONG      8
 
 #define MPI_ANY_SOURCE              0
 #define MPI_ANY_TAG                 0
 
+#define MPI_FILE_NULL               0
 
 #define MPI_MAX_PROCESSOR_NAME      32
 int MPI_Init(int *argc, char ***argv);
diff --git a/src/read/read_bp.c b/src/read/read_bp.c
index 982d7ba..3cde677 100644
--- a/src/read/read_bp.c
+++ b/src/read/read_bp.c
@@ -18,6 +18,7 @@
 #include "public/adios_read.h"
 #include "public/adios_error.h"
 #include "public/adios_types.h"
+#include "core/adios_internals.h"
 #include "core/util.h"
 #include "core/bp_utils.h"
 #include "core/bp_types.h"
@@ -66,6 +67,37 @@ static int adios_wbidx_to_pgidx (const ADIOS_FILE * fp, read_request * r, int st
     }\
 }\
 
+/* emulate MPI_File_read with support for data >2GiB */
+#define MPI_FILE_READ64(fh, buff, size, type, status)                               \
+    {                                                                               \
+        int read_len = 0;                                                           \
+        uint64_t total_read = 0;                                                    \
+        uint64_t to_read = size;                                                    \
+        int count;                                                                  \
+        while (to_read > 0)                                                         \
+        {                                                                           \
+            read_len = (to_read > MAX_MPIWRITE_SIZE) ? MAX_MPIWRITE_SIZE : to_read; \
+            MPI_File_read (fh                                                       \
+                          ,(char*)buff + total_read                                 \
+                          ,read_len                                                 \
+                          ,type                                                     \
+                          ,status                                                   \
+                          );                                                        \
+            MPI_Get_count (status, type, &count);                                   \
+            int err;                                                                \
+            if (count != read_len)                                                  \
+            {                                                                       \
+                log_error ("Need to do multi-read (tried: "                         \
+                        "%d read: %d) errno %d\n",                                  \
+                        read_len, count, errno);                                    \
+                err = count;                                                        \
+                break;                                                              \
+            }                                                                       \
+            total_read += count;                                                    \
+            to_read -= count;                                                       \
+        }                                                                           \
+    }
+
 #define MPI_FILE_READ_OPS1                          \
         bp_realloc_aligned(fh->b, slice_size);      \
         fh->b->offset = 0;                          \
@@ -74,13 +106,12 @@ static int adios_wbidx_to_pgidx (const ADIOS_FILE * fp, read_request * r, int st
                       ,(MPI_Offset)slice_offset     \
                       ,MPI_SEEK_SET                 \
                       );                            \
-                                                    \
-        MPI_File_read (fh->mpi_fh                   \
-                      ,fh->b->buff                  \
-                      ,slice_size                   \
-                      ,MPI_BYTE                     \
-                      ,&status                      \
-                      );                            \
+        MPI_FILE_READ64 (fh->mpi_fh                 \
+                        ,fh->b->buff                \
+                        ,slice_size                 \
+                        ,MPI_BYTE                   \
+                        ,&status                    \
+                        );                          \
         fh->b->offset = 0;                          \
 
 // To read subfiles
@@ -135,12 +166,12 @@ static int adios_wbidx_to_pgidx (const ADIOS_FILE * fp, read_request * r, int st
                       ,(MPI_Offset)slice_offset                                             \
                       ,MPI_SEEK_SET                                                         \
                       );                                                                    \
-        MPI_File_read (*sfh                                                                 \
-                      ,fh->b->buff                                                          \
-                      ,slice_size                                                           \
-                      ,MPI_BYTE                                                             \
-                      ,&status                                                              \
-                      );                                                                    \
+        MPI_FILE_READ64 (*sfh                                                               \
+                        ,fh->b->buff                                                        \
+                        ,slice_size                                                         \
+                        ,MPI_BYTE                                                           \
+                        ,&status                                                            \
+                        );                                                                  \
         fh->b->offset = 0;                                                                  \
 
 //We also need to be able to read old .bp which doesn't have 'payload_offset'
@@ -157,7 +188,7 @@ static int adios_wbidx_to_pgidx (const ADIOS_FILE * fp, read_request * r, int st
         MPI_File_seek (fh->mpi_fh                                                           \
                       ,(MPI_Offset) (v->characteristics[start_idx + idx].offset)     \
                       ,MPI_SEEK_SET);                                                       \
-        MPI_File_read (fh->mpi_fh, fh->b->buff, tmpcount + 8, MPI_BYTE, &status);           \
+        MPI_FILE_READ64 (fh->mpi_fh, fh->b->buff, tmpcount + 8, MPI_BYTE, &status);         \
         fh->b->offset = 0;                                                                  \
         adios_parse_var_data_header_v1 (fh->b, &var_header);                                \
 
@@ -168,13 +199,12 @@ static int adios_wbidx_to_pgidx (const ADIOS_FILE * fp, read_request * r, int st
                       ,(MPI_Offset)slice_offset     \
                       ,MPI_SEEK_SET                 \
                       );                            \
-                                                    \
-        MPI_File_read (fh->mpi_fh                   \
-                      ,(buf)                        \
-                      ,slice_size                   \
-                      ,MPI_BYTE                     \
-                      ,&status                      \
-                      );
+        MPI_FILE_READ64 (fh->mpi_fh                 \
+                        ,(buf)                      \
+                        ,slice_size                 \
+                        ,MPI_BYTE                   \
+                        ,&status                    \
+                        );
 
 // To read subfiles
 #define MPI_FILE_READ_OPS2_BUF(buf)                                                         \
@@ -225,12 +255,12 @@ static int adios_wbidx_to_pgidx (const ADIOS_FILE * fp, read_request * r, int st
                       ,(MPI_Offset)slice_offset                                             \
                       ,MPI_SEEK_SET                                                         \
                       );                                                                    \
-        MPI_File_read (*sfh                                                                 \
-                      ,(buf)                                                                \
-                      ,slice_size                                                           \
-                      ,MPI_BYTE                                                             \
-                      ,&status                                                              \
-                      );
+        MPI_FILE_READ64 (*sfh                                                               \
+                        ,(buf)                                                              \
+                        ,slice_size                                                         \
+                        ,MPI_BYTE                                                           \
+                        ,&status                                                            \
+                        );
 
 
 /* This routine release one step. It only frees the var/attr namelist. */
diff --git a/src/read/read_flexpath.c b/src/read/read_flexpath.c
index 360a1de..ce921dd 100644
--- a/src/read/read_flexpath.c
+++ b/src/read/read_flexpath.c
@@ -1,9 +1,3 @@
-/*
-    read_flexpath.c
-    Goal: to create evpath io connection layer in conjunction with
-    write/adios_flexpath.c
-
-*/
 // system libraries
 #include <stdio.h>
 #include <stdlib.h>
@@ -20,6 +14,7 @@
 #include <ctype.h>
 #include <pthread.h>
 #include <unistd.h>
+#include <stdlib.h>
 
 // evpath libraries
 #include <ffs.h>
@@ -44,6 +39,8 @@
 #define  FLEXPATH_SIDE "READER"
 #include "core/flexpath.h"
 #include "core/futils.h"
+#include "core/globals.h"
+#include "core/adiost_callback_internal.h"
 
 #include "core/transforms/adios_transforms_common.h" // NCSU ALACRITY-ADIOS
 
@@ -52,18 +49,26 @@
 #include "dmalloc.h"
 #endif
 
-#define FP_BATCH_SIZE 4
+#define FP_BATCH_SIZE 100
 
 #define MAX(x, y) (((x) > (y)) ? (x) : (y))
 #define MIN(x, y) (((x) < (y)) ? (x) : (y))
 
+//This is a linked list for the linked list of fp_vars
+//This is necessary to support push based gloabl metadata updates
+
+typedef struct _global_metadata
+{
+    evgroup * metadata;
+    struct _global_metadata * next;
+} global_metadata, * global_metadata_ptr;
+
 typedef struct _bridge_info
 {
     EVstone bridge_stone;
-    EVsource flush_source;
-    EVsource var_source;
-    EVsource op_source;
-    int their_num;
+    EVsource read_source;
+    EVsource finalize_source;
+    int remote_stone_ID;
     char *contact;
     int created;
     int opened;
@@ -73,7 +78,6 @@ typedef struct _bridge_info
 
 typedef struct _flexpath_read_request
 {
-    long pad1, pad2, pad3, pad4, pad5;
     int num_pending;
     int num_completed;
     int condition;
@@ -82,7 +86,6 @@ typedef struct _flexpath_read_request
 typedef struct _flexpath_var_chunk
 {
     int has_data;
-    int rank; // the writer's rank this chunk represents. not used or needed right now
     void *data;
     void *user_buf;
 } flexpath_var_chunk;
@@ -101,6 +104,7 @@ typedef struct _array_displ
 
 typedef struct _flexpath_var
 {
+    int is_attr;
     int id;
     char *varname;
     char *varpath;
@@ -108,10 +112,9 @@ typedef struct _flexpath_var
     enum ADIOS_DATATYPES type;
     uint64_t type_size; // type size, not arrays size
 
-    int time_dim; // -1 means it is not a time dimension
     int ndims;
     uint64_t *global_dims; // ndims size (if ndims>0)
-    uint64_t *local_dims; // for local arrays
+    uint64_t *local_dims; // for local arrays 
     uint64_t array_size; // not relevant for scalars
 
     int num_chunks;
@@ -126,6 +129,15 @@ typedef struct _flexpath_var
     struct _flexpath_var *next;
 } flexpath_var;
 
+typedef struct _fp_var_list
+{
+    int timestep;
+    int is_list_filled;
+    flexpath_read_request req_cond;
+    flexpath_var * var_list;    
+    struct _fp_var_list * next;
+} timestep_separated_lists;
+
 typedef struct _flexpath_reader_file
 {
     char *file_name;
@@ -134,7 +146,8 @@ typedef struct _flexpath_reader_file
 
     int verbose;
 
-    EVstone stone;
+    EVstone terminal_stone;
+    EVstone feedback_bridge;
 
     MPI_Comm comm;
     int rank;
@@ -143,22 +156,26 @@ typedef struct _flexpath_reader_file
     int num_bridges;
     bridge_info *bridges;
     int writer_coordinator;
+    int writer_coordinator_end;
 
-    int num_vars;
-    flexpath_var *var_list;
-    evgroup *gp;
+    timestep_separated_lists * ts_var_list;
+    global_metadata_ptr global_info;
+    evgroup * current_global_info;
+    //timestep_condition_ptr global_metadata_conditions;
 
     int writer_finalized;
     int last_writer_step;
     int mystep;
     int num_sendees;
     int *sendees;
+    read_request_msg *var_read_requests;
+    int go_cond;
 
+    int num_vars;
     uint64_t data_read; // for perf measurements.
     double time_in; // for perf measurements.
-    flexpath_read_request req;
-    pthread_mutex_t data_mutex;
-    pthread_cond_t data_condition;
+    pthread_mutex_t queue_mutex;
+    pthread_cond_t queue_condition;
 } flexpath_reader_file;
 
 typedef struct _local_read_data
@@ -170,26 +187,286 @@ typedef struct _local_read_data
 
     // EVPath stuff
     CManager cm;
-    atom_t CM_TRANSPORT;
 } flexpath_read_data;
 
 flexpath_read_data* fp_read_data = NULL;
 
+static atom_t RANK_ATOM = -1;
+static atom_t TIMESTEP_ATOM = -1;
+static atom_t SCALAR_ATOM = -1;
+static atom_t NATTRS = -1;
+static atom_t CM_TRANSPORT = -1;
+
 /********** Helper functions. **********/
 
-static void
-reverse_dims(uint64_t *dims, int len)
+flexpath_var*
+new_flexpath_var(const char *varname, int id, uint64_t type_size)
+{
+    flexpath_var *var = malloc(sizeof(flexpath_var));
+    if (var == NULL) {
+	log_error("Error creating new var: %s\n", varname);
+	return NULL;
+    }
+
+    memset(var, 0, sizeof(flexpath_var));
+    // free this when freeing vars.
+    var->varname = strdup(varname);
+    var->id = id;
+    var->type_size = type_size;
+    var->displ = NULL;
+    return var;
+}
+
+//We need to copy the names and set up the flexpath vars when the data comes in
+flexpath_var*
+pseudo_copy_flexpath_vars(flexpath_var *f)
+{
+    flexpath_var *vars = NULL;
+
+    while (f != NULL) {
+	flexpath_var *curr_var = new_flexpath_var(f->varname, f->id, f->type_size);
+
+	curr_var->num_chunks = 1;
+	curr_var->chunks =  malloc(sizeof(flexpath_var_chunk)*curr_var->num_chunks);
+	memset(curr_var->chunks, 0, sizeof(flexpath_var_chunk)*curr_var->num_chunks);
+	curr_var->sel = NULL;
+	curr_var->type = f->type;
+
+        //Make an exact copy of the list if possible
+        if(!vars)
+            vars = curr_var;
+        else
+        {
+            flexpath_var * last_var = vars;
+            while(last_var->next != NULL) last_var = last_var->next;
+            last_var->next = curr_var;
+        }
+
+	f = f->next;
+    }
+    return vars;
+}
+
+static void create_flexpath_var_for_timestep(flexpath_reader_file *fp, int timestep)
+{
+    timestep_separated_lists *curr = fp->ts_var_list;
+    timestep_separated_lists *prev = NULL;
+
+    // Check to see if we have made a mistake and we are trying to create
+    // something that has already
+    // been created
+    while (curr) {
+        if (curr->timestep == timestep) {
+            fp_verbose(fp, "Already created the timestep for timestep:%d\n",
+                       timestep);
+            return;
+        }
+        prev = curr;
+        curr = curr->next;
+    }
+
+    // We are the first element in the queue
+    if (!prev) {
+        fp->ts_var_list = calloc(1, sizeof(*fp->ts_var_list));
+        fp->ts_var_list->timestep = timestep;
+    } else {
+        // We are not the first element in the queue
+        prev->next = calloc(1, sizeof(*fp->ts_var_list));
+        prev->next->timestep = timestep;
+        prev->next->var_list =
+            pseudo_copy_flexpath_vars(fp->ts_var_list->var_list);
+    }
+}
+
+static timestep_separated_lists *find_var_list(flexpath_reader_file *fp,
+                                               int timestep)
+{
+    timestep_separated_lists *temp = fp->ts_var_list;
+    while (temp) {
+        if (temp->timestep == timestep)
+            break;
+
+        temp = temp->next;
+    }
+    return temp;
+}
+
+static evgroup *find_current_global_data(flexpath_reader_file *fp)
+{
+    global_metadata_ptr curr = fp->global_info;
+    int reader_step = fp->mystep;
+    while (curr) {
+        if (curr->metadata->step == reader_step)
+            break;
+
+        curr = curr->next;
+    }
+
+    if (!curr) {
+        fprintf(stderr, "Error: evgroup queue has been messed up!\n");
+        return NULL;
+    }
+
+    return curr->metadata;
+}
+
+flexpath_var *
+find_fp_var(flexpath_var * var_list, const char * varname)
+{
+    while (var_list) {
+	if (!var_list->is_attr && !strcmp(varname, var_list->varname)) {
+	    return var_list;
+	}
+	var_list = var_list->next;
+    }
+    return NULL;
+}
+
+flexpath_var *
+find_any_var(flexpath_var * var_list, const char * varname)
+{
+    while (var_list) {
+	if (!strcmp(varname, var_list->varname)) {
+	    return var_list;
+	}
+	var_list = var_list->next;
+    }
+    return NULL;
+}
+
+flexpath_var *
+find_fp_attr(flexpath_var * var_list, const char * varname)
+{
+    while (var_list) {
+	if (var_list->is_attr && !strcmp(varname, var_list->varname)) {
+	    return var_list;
+	}
+	var_list = var_list->next;
+    }
+    return NULL;
+}
+
+/*Here we are setting the dimensions of the flexpath vars from the 
+  global metadata */
+static void share_global_information(flexpath_reader_file *fp)
 {
     int i;
-    for (i = 0; i<(len/2); i++) {
-        uint64_t tmp = dims[i];
-        int end = len-1-i;
-        //printf("%d %d\n", dims[i], dims[end]);
-        dims[i] = dims[end];
-        dims[end] = tmp;
+    for (i = 0; i < fp->current_global_info->num_vars; i++) {
+        global_var *gblvar = &(fp->current_global_info->vars[i]);
+        timestep_separated_lists *ts_var_list = find_var_list(fp, fp->mystep);
+        if (!ts_var_list) {
+            fprintf(stderr, "Error: could not find var list after it was "
+                            "reported that we had it!!\n");
+            fprintf(stderr, "Severe logic error!\n");
+            exit(1);
+        }
+        flexpath_var *fpvar = find_fp_var(ts_var_list->var_list, gblvar->name);
+
+        if (fpvar) {
+            offset_struct *offset = &gblvar->offsets[0];
+            uint64_t *global_dimensions = offset->global_dimensions;
+            fpvar->ndims = offset->offsets_per_rank;
+            fpvar->global_dims = malloc(sizeof(uint64_t) * fpvar->ndims);
+            memcpy(fpvar->global_dims, global_dimensions,
+                   sizeof(uint64_t) * fpvar->ndims);
+        } else {
+            adios_error(
+                err_corrupted_variable,
+                "Mismatch between global variables and variables specified %s.",
+                gblvar->name);
+            fprintf(stderr, "Error: Global variable mismatch!!\n");
+            // Not sure what the protocol is here, we will have to figure that
+            // out later
+            // return err_corrupted_variable;
+        }
     }
 }
 
+static void dump_timestep_separated_lists(flexpath_reader_file *fp)
+{
+    timestep_separated_lists *curr_list = fp->ts_var_list;
+    int count = 0;
+    fprintf(stderr, "************* Dumping the timestep separated var lists "
+                    "*****************\n");
+    while (curr_list) {
+        fprintf(stderr, "List Index: %d\n", count++);
+        fprintf(stderr, "Timestep: %d\n", curr_list->timestep);
+        fprintf(stderr, "Is_List_Filled: %d\n", curr_list->is_list_filled);
+        flexpath_var *curr_var = curr_list->var_list;
+        while (curr_var) {
+            fprintf(stderr, "\t\tFlexpath variable: %s\n", curr_var->varname);
+            curr_var = curr_var->next;
+        }
+
+        curr_list = curr_list->next;
+        fprintf(stderr, "\n");
+    }
+}
+
+static timestep_separated_lists *
+flexpath_get_curr_timestep_list(flexpath_reader_file *fp)
+{
+    pthread_mutex_lock(&(fp->queue_mutex));
+    timestep_separated_lists *curr_var_list = find_var_list(fp, fp->mystep);
+    if (!curr_var_list) {
+        fprintf(stderr,
+                "Severe logic error in flexpath_get_curr_timestep_list!\n");
+        fp_verbose(fp, "Severe logic error in flexpath_get_curr_timestep_list "
+                       "for timestep: %d\n",
+                   fp->mystep);
+        dump_timestep_separated_lists(fp);
+        exit(1);
+    }
+    pthread_mutex_unlock(&(fp->queue_mutex));
+
+    return curr_var_list;
+}
+
+/*  This function will check to see if we have the global metadata and scalar
+    values for the timestep that we specify in the second paramater.  It locks
+    and unlocks the pthread queue mutex */
+void flexpath_wait_for_global_metadata(flexpath_reader_file *fp, int timestep)
+{
+
+    fp_verbose(fp, "Checking for global metadata for timestep: %d\n", timestep);
+    pthread_mutex_lock(&(fp->queue_mutex));
+    timestep_separated_lists *ts_var_list = find_var_list(fp, timestep);
+    if (ts_var_list == NULL) {
+        fp_verbose(fp,
+                   "Creating the global metadata structures for timestep: %d\n",
+                   timestep);
+        create_flexpath_var_for_timestep(fp, timestep);
+        ts_var_list = find_var_list(fp, timestep);
+    }
+
+    // If we don't have the scalar data or if we haven't received a finalized
+    // message, wait
+    while (ts_var_list->is_list_filled == 0 &&
+           fp->mystep != fp->last_writer_step) {
+        fp_verbose(
+            fp, "Waiting for writer to send the global data for timestep: %d\n",
+            timestep);
+        pthread_cond_wait(&(fp->queue_condition), &(fp->queue_mutex));
+        fp_verbose(fp, "Received signal! Last_writer_step:%d\t\tMystep:%d\n",
+                   fp->last_writer_step, timestep);
+    }
+
+    // To avoid a deadlock when the writer is slow to send the finalize message
+    if (fp->mystep == fp->last_writer_step) {
+        pthread_mutex_unlock(&(fp->queue_mutex));
+        return;
+    }
+
+    // This is called to marry the metadata with the flexpath vars after we
+    // receive the second message
+    // This is a bad way to do this, it may need to be fixed, ultimately
+    fp->current_global_info = find_current_global_data(fp);
+    share_global_information(fp);
+    pthread_mutex_unlock(&(fp->queue_mutex));
+    fp_verbose(fp, "Finished checking on global data for timestep: %d\n",
+               fp->mystep);
+}
+
 void build_bridge(bridge_info* bridge)
 {
     attr_list contact_list = attr_list_from_string(bridge->contact);
@@ -197,65 +474,290 @@ void build_bridge(bridge_info* bridge)
 	bridge->bridge_stone =
 	    EVcreate_bridge_action(fp_read_data->cm,
 				   contact_list,
-				   (EVstone)bridge->their_num);
-
-	bridge->flush_source =
-	    EVcreate_submit_handle(fp_read_data->cm,
-				   bridge->bridge_stone,
-				   flush_format_list);
+				   (EVstone)bridge->remote_stone_ID);
 
-	bridge->var_source =
-	    EVcreate_submit_handle(fp_read_data->cm,
-				   bridge->bridge_stone,
-				   var_format_list);
+        bridge->read_source = 
+            EVcreate_submit_handle(fp_read_data->cm,
+                                    bridge->bridge_stone,
+                                    read_request_format_list);
 
-	bridge->op_source =
-	    EVcreate_submit_handle(fp_read_data->cm,
-				   bridge->bridge_stone,
-				   op_format_list);
+        bridge->finalize_source = 
+            EVcreate_submit_handle(fp_read_data->cm,
+                                    bridge->bridge_stone,
+                                    finalize_close_msg_format_list);
 
 	bridge->created = 1;
     }
+    free_attr_list(contact_list);
 }
 
-void
-free_displacements(array_displacements *displ, int num)
+
+
+static void
+flexpath_free_displacements(array_displacements **displ, int num)
 {
-    if (displ) {
+    if (*displ) {
 	int i;
 	for (i=0; i<num; i++) {
-	    free(displ[i].start);
-	    free(displ[i].count);
+	    free((*displ)[i].start);
+	    free((*displ)[i].count);
 	}
-	free(displ);
+	free(*displ);
+        *displ = NULL;
     }
 }
 
-void
-free_evgroup(evgroup *gp)
+static void
+flexpath_free_read_requests(int num_requests, read_request_msg * read_requests)
+{
+    int i = 0;
+    for(; i < num_requests; i++)
+    {
+        int j = 0;
+        read_request_msg * current_msg = read_requests + i;
+        //Free the inner variable name strings
+        for(; j < current_msg->var_count; j++)
+        {
+            free(current_msg->var_name_array[j]);
+        }
+        current_msg->var_count = 0;
+        //Free the outer array pointing to the strings
+        free(current_msg->var_name_array);
+    }
+    //Free the outer structures
+    free(read_requests);
+}
+
+static void flexpath_free_bridges(int num_bridges,
+                                  bridge_info *start_of_bridge_array)
+{
+    int i = 0;
+    for (i = 0; i < num_bridges; i++) {
+        if (start_of_bridge_array[i].contact) {
+            free(start_of_bridge_array[i].contact);
+            start_of_bridge_array[i].contact = NULL;
+        }
+
+        if (start_of_bridge_array[i].created) {
+            EVfree_source(start_of_bridge_array[i].read_source);
+            EVfree_source(start_of_bridge_array[i].finalize_source);
+            EVfree_stone(fp_read_data->cm,
+                         start_of_bridge_array[i].bridge_stone);
+        }
+    }
+
+    free(start_of_bridge_array);
+}
+
+static void
+flexpath_var_free(flexpath_var * tmpvars)
+{
+    int i;
+    while (tmpvars) {
+
+        if(tmpvars->varname) {
+            free(tmpvars->varname);
+            tmpvars->varname = NULL;
+        }
+
+        if(tmpvars->varpath) {
+            free(tmpvars->varpath);
+            tmpvars->varpath = NULL;
+        }
+
+	if (tmpvars->ndims > 0) {
+	    free(tmpvars->global_dims);
+	    tmpvars->ndims = 0;
+	}
+	if (tmpvars->displ) {
+	    flexpath_free_displacements(&(tmpvars->displ), tmpvars->num_displ);
+	}
+
+	if (tmpvars->sel) {
+	    a2sel_free(tmpvars->sel);
+	    tmpvars->sel = NULL;
+	}
+
+	tmpvars->sel = NULL;
+	for (i=0; i<tmpvars->num_chunks; i++) {
+	    flexpath_var_chunk *chunk = &tmpvars->chunks[i];
+	    if (chunk->has_data) {
+		//free(chunk->data);
+		chunk->data = NULL;
+		chunk->has_data = 0;
+	    }
+	}
+	
+
+
+        flexpath_var * tmp = tmpvars->next;
+        free(tmpvars);
+	tmpvars = tmp;
+    }
+}
+
+static void
+flexpath_free_evgroup(evgroup *gp)
 {
     EVreturn_event_buffer(fp_read_data->cm, gp);
 }
 
-flexpath_var*
-new_flexpath_var(const char *varname, int id, uint64_t type_size)
+static void flexpath_free_filedata(flexpath_reader_file *fp)
 {
-    flexpath_var *var = malloc(sizeof(flexpath_var));
-    if (var == NULL) {
-	log_error("Error creating new var: %s\n", varname);
-	return NULL;
+    fp_verbose(fp, "Freeing the flexpath_reader_file metadata structure!\n");
+
+    // Free the stream name
+    if (fp->file_name) {
+        free(fp->file_name);
+        fp->file_name = NULL;
+    }
+
+    // Free the adios group name
+    if (fp->group_name) {
+        free(fp->group_name);
+        fp->file_name = NULL;
+    }
+
+    // Free the bridge data structure by calling the function that does that,
+    // then setting the pointer to NULL
+    if (fp->bridges) {
+        flexpath_free_bridges(fp->num_bridges, fp->bridges);
+        fp->num_bridges = 0;
+        fp->bridges = NULL;
+    }
+
+    // Free the queue, no data should be coming in at this point, but I'm
+    // locking the queue anyway
+    pthread_mutex_lock(&(fp->queue_mutex));
+    timestep_separated_lists *curr = fp->ts_var_list;
+    while (curr) {
+        flexpath_var *v = curr->var_list;
+        flexpath_var_free(v);
+        timestep_separated_lists *temp = curr->next;
+        free(curr);
+        curr = temp;
+    }
+    fp->ts_var_list = NULL;
+    pthread_mutex_unlock(&(fp->queue_mutex));
+
+    // Free the global metadata by calling a function that essentially gives
+    // back the EVpath buffer
+    if (fp->global_info) {
+        while (fp->global_info) {
+            global_metadata_ptr temp = fp->global_info->next;
+            flexpath_free_evgroup(fp->global_info->metadata);
+            free(fp->global_info);
+            fp->global_info = temp;
+        }
     }
 
-    memset(var, 0, sizeof(flexpath_var));
-    // free this when freeing vars.
-    var->varname = strdup(varname);
-    var->time_dim = -1;
-    var->id = id;
-    var->type_size = type_size;
-    var->displ = NULL;
-    return var;
+    if (fp->sendees) {
+        free(fp->sendees);
+        fp->sendees = NULL;
+    }
+
+    if (fp->var_read_requests) {
+        flexpath_free_read_requests(fp->num_sendees, fp->var_read_requests);
+        fp->var_read_requests = NULL;
+    }
+
+    // Free the mutex and the condition variable...do we need to free
+    // CMCondition?
+    fp_verbose(fp, "FileData is freed, better call open or exit!\n");
+}
+
+
+
+//Return the number of elements removed, don't remove if there's only one in the list
+static int
+cleanup_flexpath_vars(flexpath_reader_file *fp, int timestep)
+{
+    timestep_separated_lists *curr = fp->ts_var_list;
+    timestep_separated_lists *prev = NULL;
+
+    int number_timesteps_in_list = 0;
+    int number_removed = 0;
+    while (curr) {
+        number_timesteps_in_list++;
+        curr = curr->next;
+    }
+
+    curr = fp->ts_var_list;
+    while (number_timesteps_in_list > 1 && curr) {
+        if (curr->timestep <= timestep) {
+            flexpath_var_free(curr->var_list);
+            if (!prev) {
+                fp->ts_var_list = curr->next;
+                free(curr);
+                curr = fp->ts_var_list;
+            } else {
+                prev->next = curr->next;
+                free(curr);
+                curr = prev->next;
+            }
+            number_removed++;
+            number_timesteps_in_list--;
+            continue;
+        }
+
+        prev = curr;
+        curr = curr->next;
+    }
+
+    return number_removed;
+}
+
+//Return the number of elements removed
+static int remove_relevant_global_data(flexpath_reader_file *fp, int timestep)
+{
+    global_metadata_ptr curr = fp->global_info;
+    global_metadata_ptr prev = NULL;
+    int count = 0;
+    while (curr != NULL) {
+        if (timestep >= curr->metadata->step) {
+            global_metadata_ptr temp;
+            if (!prev) // We are at the front of the queue
+            {
+                fp->global_info = curr->next;
+                temp = fp->global_info;
+            } else // We are not at the front of the queue
+            {
+                prev->next = curr->next;
+                temp = prev->next;
+            }
+
+            flexpath_free_evgroup(curr->metadata);
+            free(curr);
+            count++;
+
+            curr = temp;
+        } else {
+            prev = curr;
+            curr = curr->next;
+        }
+    }
+    return count;
 }
 
+
+
+static void
+reverse_dims(uint64_t *dims, int len)
+{
+    int i;
+    for (i = 0; i<(len/2); i++) {
+        uint64_t tmp = dims[i];
+        int end = len-1-i;
+        //printf("%d %d\n", dims[i], dims[end]);
+        dims[i] = dims[end];
+        dims[end] = tmp;
+    }
+}
+
+
+
+
+
 flexpath_reader_file*
 new_flexpath_reader_file(const char *fname)
 {
@@ -268,142 +770,139 @@ new_flexpath_reader_file(const char *fname)
     fp->file_name = strdup(fname);
     fp->writer_coordinator = -1;
     fp->last_writer_step = -1;
-    fp->req = (flexpath_read_request) {.pad1 = 0, .pad2 = 0, .pad3 = 0, .pad4 = 0, .pad5=0,.num_pending = 0, .num_completed = 0, .condition = -1};
-    pthread_mutex_init(&fp->data_mutex, NULL);
-    pthread_cond_init(&fp->data_condition, NULL);
+    fp->go_cond = -1;
+    pthread_mutex_init(&fp->queue_mutex, NULL);
+    pthread_cond_init(&fp->queue_condition, NULL);
     return fp;
 }
 
-enum ADIOS_DATATYPES
-ffs_type_to_adios_type(const char *ffs_type, int size)
-
+enum ADIOS_DATATYPES ffs_type_to_adios_type(const char *ffs_type, int size)
 {
     char *bracket = "[";
     size_t posfound = strcspn(ffs_type, bracket);
     char *filtered_type = NULL;
+    char *free_pointer;
     if (strlen(ffs_type) == strlen(bracket)) {
         filtered_type = strdup(ffs_type);
+    } else {
+        filtered_type = malloc(posfound + 1);
+        memset(filtered_type, '\0', posfound + 1);
+        strncpy(filtered_type, ffs_type, posfound);
     }
-    else {
-        filtered_type = malloc(posfound+1);
-        memset(filtered_type, '\0', posfound+1);
-        filtered_type = strncpy(filtered_type, ffs_type, posfound);
-    }
+    free_pointer = filtered_type;
 
-    if (!strcmp("integer", filtered_type)) {
-	if (size == sizeof(int)) {
-	    return adios_integer;
-	} else if (size == sizeof(long)) {
-	    return adios_long;
-	}
-    }
-    else if (!strcmp("unsigned integer", filtered_type)) {
-	    if (size == sizeof(unsigned int)) {
-		return adios_unsigned_integer;
-	    } else if (size == sizeof(unsigned long)) {
-		return adios_unsigned_long;
-	    }
-	}	   
-    else if (!strcmp("float", filtered_type))
-	return adios_real;
-    else if (!strcmp("string", filtered_type))
-	return adios_string;
-    else if (!strcmp("double", filtered_type)) {
-	if (size == sizeof(double)) {
-	    return adios_double;
-	} else if (size == sizeof(long double)) {
-	    return adios_long_double;
-	}
+    if (filtered_type[0] == '*') {
+        /*  skip "*(" at the beginning */
+        filtered_type += 2;
     }
-    else if (!strcmp("char", filtered_type))
-	return adios_byte;
-    else if (!strcmp("complex", filtered_type))
-	return adios_complex;
-    else if (!strcmp("double_complex", filtered_type))
+    if (!strcmp("integer", filtered_type)) {
+        if (size == sizeof(int)) {
+            free(free_pointer);
+            return adios_integer;
+        } else if (size == sizeof(long)) {
+            free(free_pointer);
+            return adios_long;
+        }
+    } else if (!strcmp("unsigned integer", filtered_type)) {
+        if (size == sizeof(unsigned int)) {
+            free(free_pointer);
+            return adios_unsigned_integer;
+        } else if (size == sizeof(unsigned long)) {
+            free(free_pointer);
+            return adios_unsigned_long;
+        }
+    } else if (!strcmp("float", filtered_type)) {
+        free(free_pointer);
+        return adios_real;
+    } else if (!strcmp("string", filtered_type)) {
+        free(free_pointer);
+        return adios_string;
+    } else if (!strcmp("double", filtered_type)) {
+        if (size == sizeof(double)) {
+            free(free_pointer);
+            return adios_double;
+        } else if (size == sizeof(long double)) {
+            free(free_pointer);
+            return adios_long_double;
+        }
+    } else if (!strcmp("char", filtered_type)) {
+        free(free_pointer);
+        return adios_byte;
+    } else if (!strcmp("complex", filtered_type)) {
+        free(free_pointer);
+        return adios_complex;
+    } else if (!strcmp("double_complex", filtered_type)) {
+        free(free_pointer);
         return adios_double_complex;
+    }
 
     fprintf(stderr, "returning unknown for: ffs_type: %s\n", ffs_type);
+    free(free_pointer);
     return adios_unknown;
 }
 
-ADIOS_VARINFO*
-convert_var_info(flexpath_var * fpvar,
-		 ADIOS_VARINFO * v,
-		 const char* varname,
-		 const ADIOS_FILE *adiosfile)
+ADIOS_VARINFO *convert_var_info(flexpath_var *fpvar, ADIOS_VARINFO *v,
+                                const char *varname,
+                                const ADIOS_FILE *adiosfile)
 {
     int i;
-    flexpath_reader_file *fp = (flexpath_reader_file*)adiosfile->fh;
+    flexpath_reader_file *fp = (flexpath_reader_file *)adiosfile->fh;
     v->type = fpvar->type;
     v->ndim = fpvar->ndims;
     // needs to change. Has to get information from write.
     v->nsteps = 1;
-    v->nblocks = malloc(sizeof(int)*v->nsteps);
+    v->nblocks = malloc(sizeof(int) * v->nsteps);
     v->sum_nblocks = 1;
     v->nblocks[0] = 1;
     v->statistics = NULL;
     v->blockinfo = NULL;
 
     if (v->ndim == 0) {
-	int value_size = fpvar->type_size;
-	v->value = malloc(value_size);
-	if(!v->value) {
-	    adios_error(err_no_memory,
-			"Cannot allocate buffer in adios_read_flexpath_inq_var()");
-	    return NULL;
-	}
-	flexpath_var_chunk * chunk = &fpvar->chunks[0];
-	memcpy(v->value, chunk->data, value_size);
-	v->global = 0;
+        int value_size = fpvar->type_size;
+        v->value = malloc(value_size);
+        if (!v->value) {
+            adios_error(
+                err_no_memory,
+                "Cannot allocate buffer in adios_read_flexpath_inq_var()");
+            return NULL;
+        }
+        flexpath_var_chunk *chunk = &fpvar->chunks[0];
+        memcpy(v->value, chunk->data, value_size);
+        v->global = 0;
     } else { // arrays
-	v->dims = (uint64_t*)malloc(v->ndim * sizeof(uint64_t));
-	if (!v->dims) {
-	    adios_error(err_no_memory,
-			"Cannot allocate buffer in adios_read_flexpath_inq_var()");
-	    return NULL;
-	}
-	// broken.  fix. -- why did I put this comment here?
-	int cpysize = fpvar->ndims*sizeof(uint64_t);
-	if (fpvar->global_dims) {
-	    v->global = 1;
-	    memcpy(v->dims, fpvar->global_dims, cpysize);
-	}
-	else {
-	    v->global = 0;
-	}
+        v->dims = (uint64_t *)malloc(v->ndim * sizeof(uint64_t));
+        if (!v->dims) {
+            adios_error(
+                err_no_memory,
+                "Cannot allocate buffer in adios_read_flexpath_inq_var()");
+            return NULL;
+        }
+        // broken.  fix. -- why did I put this comment here?
+        int cpysize = fpvar->ndims * sizeof(uint64_t);
+        if (fpvar->global_dims) {
+            v->global = 1;
+            memcpy(v->dims, fpvar->global_dims, cpysize);
+        } else {
+            v->global = 0;
+        }
     }
     return v;
 }
 
-flexpath_var *
-find_fp_var(flexpath_var * var_list, const char * varname)
-{
-    while (var_list) {
-	if (!strcmp(varname, var_list->varname)) {
-	    return var_list;
-	}
-	var_list = var_list->next;
-    }
-    return NULL;
-}
-
-global_var*
-find_gbl_var(global_var *vars, const char *name, int num_vars)
+global_var *find_gbl_var(global_var *vars, const char *name, int num_vars)
 {
     int i;
-    for (i=0; i<num_vars; i++) {
-	if (!strcmp(vars[i].name, name))
-	    return &vars[i];
+    for (i = 0; i < num_vars; i++) {
+        if (!strcmp(vars[i].name, name))
+            return &vars[i];
     }
     return NULL;
 }
 
-static FMField*
-find_field_by_name (const char *name, const FMFieldList flist)
+static FMField *find_field_by_name(const char *name, const FMFieldList flist)
 {
     FMField *f = flist;
-    while (f->field_name != NULL)
-    {
+    while (f->field_name != NULL) {
         if (!strcmp(name, f->field_name))
             return f;
         else
@@ -412,50 +911,6 @@ find_field_by_name (const char *name, const FMFieldList flist)
     return NULL;
 }
 
-static uint64_t
-calc_ffspacket_size(FMField *f, attr_list attrs, void *buffer)
-{
-    uint64_t size = 0;
-    while (f->field_name) {
-        char atom_name[200] = "";
-
-        strcat(atom_name, FP_NDIMS_ATTR_NAME);
-        strcat(atom_name, "_");
-        strcat(atom_name, f->field_name);
-        int num_dims = 0;
-        get_int_attr(attrs, attr_atom_from_string(atom_name), &num_dims);
-	if (num_dims == 0) {
-	    size += (uint64_t)f->field_size;
-	}
-	else {
-	    int i;
-	    uint64_t tmpsize = (uint64_t)f->field_size;
-	    for (i=0; i<num_dims; i++) {
-		char *dim;
-		char atom_name[200] ="";
-		strcat(atom_name, FP_DIM_ATTR_NAME);
-		strcat(atom_name, "_");
-		strcat(atom_name, f->field_name);
-		strcat(atom_name, "_");
-		char dim_num[10] = "";
-		sprintf(dim_num, "%d", i+1);
-		strcat(atom_name, dim_num);
-		get_string_attr(attrs, attr_atom_from_string(atom_name), &dim);
-
-		FMField *temp_field = find_field_by_name(dim, f);
-		uint64_t *temp_val = get_FMfieldAddr_by_name(temp_field,
-							     temp_field->field_name,
-							     buffer);
-		uint64_t dimval = *temp_val;
-		tmpsize *= dimval;
-	    }
-	    size += tmpsize;
-	}
-	f++;
-    }
-    return size;
-}
-
 void
 print_displacement(array_displacements *disp, int myrank)
 {
@@ -489,7 +944,6 @@ find_displacement(array_displacements *list, int rank, int num_displ)
     return NULL;
 }
 
-
 array_displacements*
 get_writer_displacements(
     int writer_rank,
@@ -519,17 +973,19 @@ get_writer_displacements(
 	    int start = sel->u.bb.start[i] - offsets[pos+i];
 	    displ->start[i] = start;
 	}
+
+
 	if ((sel->u.bb.start[i] + sel->u.bb.count[i] - 1) <=
 	   (offsets[pos+i] + local_dims[pos+i] - 1)) {
 	    int count = ((sel->u.bb.start[i] + sel->u.bb.count[i] - 1) -
 			 offsets[pos+i]) - displ->start[i] + 1;
 	    displ->count[i] = count;
-
-
 	} else {
 	    int count = (local_dims[pos+i] - 1) - displ->start[i] + 1;
 	    displ->count[i] = count;
 	}
+
+
 	_size *= displ->count[i];
     }
     *size = _size;
@@ -550,71 +1006,57 @@ need_writer(
     //for each dimension
     int i=0;
     offset_struct var_offsets = gvar->offsets[0];
+    //if(fp->rank == 1)
+    //    printf("Offsets array data********************\n");
+
     for (i=0; i< var_offsets.offsets_per_rank; i++) {
 	int pos = writer*(var_offsets.offsets_per_rank) + i;
+        //if(fp->rank == 1)
+        //    printf("Global pos: %d\n", pos);
 
         uint64_t sel_offset = sel->u.bb.start[i];
+        //if(fp->rank == 1)
+        //    printf("Select offset: %ld\n", sel_offset);
         uint64_t sel_size = sel->u.bb.count[i];
+        //if(fp->rank == 1)
+        //    printf("Select size: %ld\n", sel_size);
 
         uint64_t rank_offset = var_offsets.local_offsets[pos];
+        //if(fp->rank == 1)
+        //    printf("rank_offset: %ld\n", rank_offset);
         uint64_t rank_size = var_offsets.local_dimensions[pos];
+        //if(fp->rank == 1)
+        //    printf("rank_size: %ld\n\n", rank_size);
 
-	/* printf("need writer rank: %d writer: %d sel_start: %d sel_count: %d rank_offset: %d rank_size: %d\n", */
-	/*        fp->rank, writer, (int)sel_offset, (int)sel_size, (int)rank_offset, (int)rank_size); */
+	/* fprintf(stderr, "need writer rank: %d writer: %d sel_start: %d sel_count: %d rank_offset: %d rank_size: %d\n",
+           fp->rank, writer, (int)sel_offset, (int)sel_size, (int)rank_offset, (int)rank_size); */
 
-        if ((rank_offset <= sel_offset) && (rank_offset + rank_size - 1 >=sel_offset)) {
-	     log_debug("matched overlap type 1\n");
-        }
+        if ((rank_size == 0) || (sel_size == 0)) return 0;
 
-        else if ((rank_offset <= sel_offset + sel_size - 1) && \
-		(rank_offset+rank_size>=sel_offset+sel_size-1)) {
-        } else if ((sel_offset <= rank_offset) && (rank_offset+rank_size<= sel_offset+sel_size-1)) {
-        } else {
+        if ((rank_offset < sel_offset && (rank_offset + rank_size) <= sel_offset) || (rank_offset >= sel_offset + sel_size))
+        {
             return 0;
         }
     }
     return 1;
 }
 
-void
-free_fmstructdesclist(FMStructDescList struct_list)
-{
-    FMField *f = struct_list[0].field_list;
-
-    //cant free field_name because it's const.
-    /* FMField *temp = f; */
-    /* while (temp->field_name) { */
-    /* 	free(temp->field_name); */
-    /* 	temp++; */
-    /* } */
-    free(f);
-    free(struct_list[0].opt_info);
-    free(struct_list);
-}
-
-int
-get_ndims_attr(const char *field_name, attr_list attrs)
-{
-    char atom_name[200] = "";
-    strcat(atom_name, FP_NDIMS_ATTR_NAME);
-    strcat(atom_name, "_");
-    strcat(atom_name, field_name);
-    int num_dims;
-    atom_t atm = attr_atom_from_string(atom_name);
-    get_int_attr(attrs, atm, &num_dims);
-    return num_dims;
-}
-
 flexpath_var*
-setup_flexpath_vars(FMField *f, int *num)
+setup_flexpath_vars(FMField *f, int *num, int nattrs)
 {
     flexpath_var *vars = NULL;
     int var_count = 0;
 
     while (f->field_name != NULL) {
-	flexpath_var *curr_var = new_flexpath_var(f->field_name,
+	char *unmangle = flexpath_unmangle(f->field_name);
+	flexpath_var *curr_var = new_flexpath_var(unmangle,
 						  var_count,
 						  f->field_size);
+	if (var_count < nattrs) {
+	    curr_var->is_attr = 1;
+	} else {
+	    curr_var->id -= nattrs;
+	}
 	curr_var->num_chunks = 1;
 	curr_var->chunks =  malloc(sizeof(flexpath_var_chunk)*curr_var->num_chunks);
 	memset(curr_var->chunks, 0, sizeof(flexpath_var_chunk)*curr_var->num_chunks);
@@ -623,170 +1065,136 @@ setup_flexpath_vars(FMField *f, int *num)
 	flexpath_var *temp = vars;
 	curr_var->next = temp;
 	vars = curr_var;
-	if (strncmp(f->field_name, "FPDIM", 5)) {
+	if (strncmp(unmangle, "FPDIM", 5)) {
 	    var_count++;
 	}
 	f++;
+        free(unmangle);
     }
     *num = var_count;
     return vars;
 }
 
+
 /*****************Messages to writer procs**********************/
 
 void
-send_open_msg(flexpath_reader_file *fp, int destination)
+send_finalize_msg(flexpath_reader_file *fp)
 {
-    if (!fp->bridges[destination].created) {
-	build_bridge(&(fp->bridges[destination]));
-    }
-    op_msg msg;
-    msg.process_id = fp->rank;
-    msg.file_name = fp->file_name;
-    msg.step = fp->mystep;
-    msg.type = OPEN_MSG;
-    int cond = CMCondition_get(fp_read_data->cm, NULL);
-    msg.condition = cond;
+    ADIOST_CALLBACK_ENTER(adiost_event_fp_send_finalize_msg, fp);
+    int i; 
+    if((fp->rank / fp->num_bridges) == 0)
+    {
+        int num_iterations = (fp->num_bridges / fp->size) + 1;
 
-    fp_verbose(fp, "sending open msg, WAITING on response\n");
-    EVsubmit(fp->bridges[destination].op_source, &msg, NULL);
-    CMCondition_wait(fp_read_data->cm, cond);
-    fp_verbose(fp, "WAIT finished, setting opened to 1, destination %d\n", destination);
-    fp->bridges[destination].opened = 1;
-}
+        for(i = 0; i < num_iterations; i++)
+        {
+            int send_to = fp->rank + fp->size * i;
+            if(send_to >= fp->num_bridges)
+                break;
 
-void
-send_close_msg(flexpath_reader_file *fp, int destination)
-{
-    if (!fp->bridges[destination].created) {
-	build_bridge(&(fp->bridges[destination]));
-    }
-    op_msg msg;
-    msg.process_id = fp->rank;
-    msg.file_name = fp->file_name;
-    msg.step = fp->mystep;
-    msg.type = CLOSE_MSG;
-    //msg.condition = -1;
-    int cond = CMCondition_get(fp_read_data->cm, NULL);
-    msg.condition = cond;
-    EVsubmit(fp->bridges[destination].op_source, &msg, NULL);
-    fp_verbose(fp, "sending close msg, setting opened to 0, destination %d, WAITING\n", destination);
-    CMCondition_wait(fp_read_data->cm, cond);
-    fp_verbose(fp, "Done with WAIT\n");
-    fp->bridges[destination].opened = 0;
-}
+            finalize_close_msg msg;
+            msg.finalize = 1;
+            msg.close = 1;
+            msg.final_timestep = fp->last_writer_step;
+            //Create bridge if needed
+            if (!fp->bridges[send_to].created) {
+                build_bridge(&(fp->bridges[send_to]));
+	    }
 
-void
-send_finalize_msg(flexpath_reader_file *fp, int destination)
-{
-    if (!fp->bridges[destination].created) {
-	build_bridge(&(fp->bridges[destination]));
-    }
-    op_msg msg;
-    msg.process_id = fp->rank;
-    msg.file_name = fp->file_name;
-    msg.step = fp->mystep;
-    msg.type = FINALIZE_MSG;
-    //msg.condition = -1;
-    int cond = CMCondition_get(fp_read_data->cm, NULL);
-    msg.condition = cond;
-    EVsubmit(fp->bridges[destination].op_source, &msg, NULL);
-    fp_verbose(fp, "sending finalize msg, setting opened to 0, destination %d, WAITING\n", destination);
-    CMCondition_wait(fp_read_data->cm, cond);
-    fp_verbose(fp, "Done with WAIT\n");
-    fp->bridges[destination].opened = 0;
+            EVsubmit(fp->bridges[send_to].finalize_source, &msg, NULL);
+        }
+    }
+    ADIOST_CALLBACK_EXIT(adiost_event_fp_send_finalize_msg, fp);
 }
 
-void
-send_flush_msg(flexpath_reader_file *fp, int destination, Flush_type type, int use_condition)
+static void
+send_read_msg(flexpath_reader_file *fp, int index, int use_condition)
 {
-    Flush_msg msg;
-    msg.type = type;
-    msg.process_id = fp->rank;
-    msg.id = fp->mystep;
+    ADIOST_CALLBACK_ENTER(adiost_event_fp_send_read_msg, fp);
+    //Initial sanity check
+    if(index >= fp->num_sendees)
+    {
+        fprintf(stderr, "Error: index requested greater than num_sendees\n");
+        exit(1);
+    }
 
-    if (use_condition)
-	msg.condition = CMCondition_get(fp_read_data->cm, NULL);
+    read_request_msg_ptr msg = fp->var_read_requests + index;
+    int destination = fp->sendees[index];
+    //Give it a condition if we need to block
+    //and then set the lamport min
+    if(use_condition)
+        msg->condition = CMCondition_get(fp_read_data->cm, NULL);
     else
-	msg.condition = -1;
-    // maybe check to see if the bridge is create first.
-    EVsubmit(fp->bridges[destination].flush_source, &msg, NULL);
-    if (use_condition) {
-	fp_verbose(fp, "WAIT in send_flush_msg\n");
-	CMCondition_wait(fp_read_data->cm, msg.condition);
+        msg->condition = -1;
+
+    //TODO: Change this part for the EVstore stuff
+    msg->current_lamport_min = -1;
+    //Basic error checking so we don't break on simple things in the future
+
+
+
+    if(!fp->bridges[destination].opened) 
+    {
+        fprintf(stderr, "Error: trying to send to a bridge that is not open yet!\n");
+        exit(1);
+    }
+
+    fp_verbose(fp, "Submitting read request to %d\n", destination);
+    EVsubmit(fp->bridges[destination].read_source, msg, NULL);
+    if(use_condition) {
+	fp_verbose(fp, "WAIT in read_request_msg send\n");
+	CMCondition_wait(fp_read_data->cm, msg->condition);
 	fp_verbose(fp, "Done with WAIT\n");
     }
+    ADIOST_CALLBACK_EXIT(adiost_event_fp_send_read_msg, fp);
 }
 
 void
-send_var_message(flexpath_reader_file *fp, int destination, char *varname)
+add_var_to_read_message(flexpath_reader_file *fp, int destination, char *varname)
 {
+    ADIOST_CALLBACK_ENTER(adiost_event_fp_add_var_to_read_msg, fp);
         int i = 0;
         int found = 0;
+        int index = -1;
         for (i=0; i<fp->num_sendees; i++) {
             if (fp->sendees[i]==destination) {
-                found=1;
+                index = i;
                 break;
             }
         }
-        if (!found) {
+        if (index == -1) {
             fp->num_sendees+=1;
             fp->sendees=realloc(fp->sendees, fp->num_sendees*sizeof(int));
+            fp->var_read_requests=realloc(fp->var_read_requests, fp->num_sendees*sizeof(read_request_msg));
             fp->sendees[fp->num_sendees-1] = destination;
+	    memset(&fp->var_read_requests[fp->num_sendees-1], 0, sizeof(read_request_msg));
+            fp->var_read_requests[fp->num_sendees-1].process_return_id = fp->rank;
+            fp->var_read_requests[fp->num_sendees-1].timestep_requested = fp->mystep;
+            fp->var_read_requests[fp->num_sendees-1].current_lamport_min = -1;
+            fp->var_read_requests[fp->num_sendees-1].condition = -1;
+            fp->var_read_requests[fp->num_sendees-1].var_name_array = malloc(sizeof(char*));
+            fp->var_read_requests[fp->num_sendees-1].var_name_array[0] = strdup(varname);
+            fp->var_read_requests[fp->num_sendees-1].var_count = 1;
+        } else {
+            read_request_msg_ptr msg = &(fp->var_read_requests[index]);
+            msg->var_name_array = realloc(msg->var_name_array, sizeof(char*)*(msg->var_count +1));
+            msg->var_name_array[msg->var_count] = strdup(varname);
+            msg->var_count++;
         }
         if (!fp->bridges[destination].created) {
             build_bridge(&(fp->bridges[destination]));
 	}
+        //TODO: Remove the open nature here
 	if (!fp->bridges[destination].opened) {
-	    fp_verbose(fp, "sending open msg in var_message, destination %d, opened was %d\n", destination, fp->bridges[destination].opened);
 	    fp->bridges[destination].opened = 1;
-	    send_open_msg(fp, destination);
 	}
-	Var_msg var;
-	var.process_id = fp->rank;
-	var.var_name = varname;
-	EVsubmit(fp->bridges[destination].var_source, &var, NULL);
+    ADIOST_CALLBACK_EXIT(adiost_event_fp_add_var_to_read_msg, fp);
 }
 
 /********** EVPath Handlers **********/
 
 static int
-update_step_msg_handler(
-    CManager cm,
-    void *vevent,
-    void *client_data,
-    attr_list attrs)
-{
-    update_step_msg *msg = (update_step_msg*)vevent;
-    ADIOS_FILE *adiosfile = (ADIOS_FILE*)client_data;
-    flexpath_reader_file *fp = (flexpath_reader_file*)adiosfile->fh;
-
-    fp->last_writer_step = msg->step;
-    fp->writer_finalized = msg->finalized;
-    adiosfile->last_step = msg->step;
-    CMCondition_signal(fp_read_data->cm, msg->condition);
-    return 0;
-}
-
-static int
-op_msg_handler(CManager cm, void *vevent, void *client_data, attr_list attrs) {
-    op_msg* msg = (op_msg*)vevent;
-    ADIOS_FILE *adiosfile = (ADIOS_FILE*)client_data;
-    flexpath_reader_file *fp = (flexpath_reader_file*)adiosfile->fh;
-    if (msg->type==ACK_MSG) {
-	if (msg->condition != -1) {
-	    CMCondition_signal(fp_read_data->cm, msg->condition);
-	}
-        //ackCondition = CMCondition_get(fp_read_data->cm, NULL);
-    }
-    if (msg->type == EOS_MSG) {
-	adios_errno = err_end_of_stream;
-	CMCondition_signal(fp_read_data->cm, msg->condition);
-    }
-    return 0;
-}
-
-static int
 group_msg_handler(CManager cm, void *vevent, void *client_data, attr_list attrs)
 {
     EVtake_event_buffer(fp_read_data->cm, vevent);
@@ -796,44 +1204,73 @@ group_msg_handler(CManager cm, void *vevent, void *client_data, attr_list attrs)
     if (fp->group_name == NULL) {
         fp->group_name = strdup(msg->group_name);
     }
-    fp->gp = msg;
-    int i;
-    for (i = 0; i<msg->num_vars; i++) {
-	global_var *gblvar = &msg->vars[i];
-	flexpath_var *fpvar = find_fp_var(fp->var_list, gblvar->name);
-	if (fpvar) {
-	    offset_struct *offset = &gblvar->offsets[0];
-	    uint64_t *local_dimensions = offset->local_dimensions;
-	    uint64_t *local_offsets = offset->local_offsets;
-	    uint64_t *global_dimensions = offset->global_dimensions;
-
-	    fpvar->ndims = offset->offsets_per_rank;
-	    fpvar->global_dims = malloc(sizeof(uint64_t)*fpvar->ndims);
-	    memcpy(fpvar->global_dims, global_dimensions, sizeof(uint64_t)*fpvar->ndims);
-	} else {
-	    adios_error(err_corrupted_variable,
-			"Mismatch between global variables and variables specified %s.",
-			gblvar->name);
-	    return err_corrupted_variable;
-	}
+    
+    pthread_mutex_lock(&(fp->queue_mutex));
+    global_metadata_ptr curr = fp->global_info;
+    while(curr && curr->next)
+        curr = curr->next;
+
+    if(!curr)
+    {
+        fp->global_info = calloc(1, sizeof(global_metadata));
+        curr = fp->global_info;
+    }
+    else
+    {
+        curr->next = calloc(1, sizeof(global_metadata));
+        curr = curr->next;
+    }
+
+    curr->metadata = msg;
+    //Made for debugging purposes, not needed but worked too hard to remove
+    /*if(fp->rank == 1)
+    {
+        printf("Group message_info****************\n");
+        printf("Condition: %d\n", msg->condition);
+        printf("Num_vars: %d\n", msg->num_vars);
+        printf("Step: %d\n", msg->step);
+        printf("Process_id: %d\n", msg->process_id);
+        printf("Group_name: %s\n", msg->group_name);
+        int i;
+        for(i = 0; i < msg->num_vars; i++)
+        {
+            printf("\t\tVariable_name: %s\n", msg->vars->name);
+            printf("\t\tNumber offset_structs: %d\n", msg->vars->noffset_structs);
+            int j;
+            for(j = 0; j < msg->vars->noffset_structs; j++)
+            {
+                printf("\t\t\t\tOffsets_per_rank: %d\n", msg->vars->offsets->offsets_per_rank);
+                printf("\t\t\t\tTotal_offsets: %d\n", msg->vars->offsets->total_offsets);
+                printf("\t\t\t\tLocal_dimensions: ");
+                int k;
+                for(k = 0; k < msg->vars->offsets->total_offsets; k++)
+                    printf("%ld ", msg->vars->offsets->local_dimensions[k]);
+
+                printf("\n\t\t\t\tLocal_offsets: ");
+                for(k = 0; k < msg->vars->offsets->total_offsets; k++)
+                    printf("%ld ", msg->vars->offsets->local_offsets[k]);
+                printf("\n");
+            }
+        }
     }
-    CMCondition_signal(fp_read_data->cm, msg->condition);
+*/
+    
+    pthread_mutex_unlock(&(fp->queue_mutex));
     return 0;
 }
 
-
-int
-increment_index(int64_t ndim, uint64_t *dimen_array, uint64_t *index_array)
+static int
+finalize_msg_handler(CManager cm, void * vevent, void * client_data, attr_list attrs)
 {
-    ndim--;
-    while (ndim >= 0) {
-	index_array[ndim]++;
-	if (index_array[ndim] < dimen_array[ndim]) {
-	    return 1;
-	}
-	index_array[ndim] = 0;
-	ndim--;
-    }
+    ADIOS_FILE *adiosfile = client_data;
+    flexpath_reader_file * fp = (flexpath_reader_file*)adiosfile->fh;
+    finalize_close_msg_ptr msg = (finalize_close_msg_ptr)vevent;
+    fp_verbose(fp, "Received the finalize message from the writer\n");
+    pthread_mutex_lock(&(fp->queue_mutex));
+    fp->writer_finalized = 1;
+    fp->last_writer_step = msg->final_timestep;
+    pthread_cond_signal(&(fp->queue_condition));
+    pthread_mutex_unlock(&(fp->queue_mutex));
     return 0;
 }
 
@@ -941,6 +1378,8 @@ extract_selection_from_partial(int element_size, uint64_t dims, uint64_t *global
     free(partial_index);
     source_block_start_offset *= element_size;
 
+    double * temp_doub = (double *) selection;
+
     data += source_block_start_offset;
     selection += dest_block_start_offset;
     int i;
@@ -949,19 +1388,23 @@ extract_selection_from_partial(int element_size, uint64_t dims, uint64_t *global
 	data += source_block_stride;
 	selection += dest_block_stride;
     }
+    free(first_index);
 }
 
-    static int
+static int
 raw_handler(CManager cm, void *vevent, int len, void *client_data, attr_list attrs)
 {
     ADIOS_FILE *adiosfile = client_data;
     flexpath_reader_file *fp = (flexpath_reader_file*)adiosfile->fh;
+    fp_verbose(fp, "Received data message!\n");
     int writer_rank;
-    int flush_id;
-    double data_start;
-    get_double_attr(attrs, attr_atom_from_string("fp_starttime"), &data_start);
-    get_int_attr(attrs, attr_atom_from_string(FP_RANK_ATTR_NAME), &writer_rank);
-    get_int_attr(attrs, attr_atom_from_string("fp_flush_id"), &flush_id);
+    int timestep;
+    int only_scalars = 0;
+    int nattrs = 0;
+    get_int_attr(attrs, RANK_ATOM, &writer_rank);
+    get_int_attr(attrs, TIMESTEP_ATOM, &timestep);
+    get_int_attr(attrs, SCALAR_ATOM, &only_scalars);
+    get_int_attr(attrs, NATTRS, &nattrs);
     /* fprintf(stderr, "\treader rank:%d:got data from writer:%d:step:%d\n", */
     /* 	    fp->rank, writer_rank, fp->mystep); */
     FMContext context = CMget_FMcontext(cm);
@@ -969,29 +1412,39 @@ raw_handler(CManager cm, void *vevent, int len, void *client_data, attr_list att
     FMFormat format = FMformat_from_ID(context, vevent);
 
     // copy //FMfree_struct_desc_list call
-    FMStructDescList struct_list =
-	FMcopy_struct_list(format_list_of_FMFormat(format));
+    FMStructDescList struct_list = FMcopy_struct_list(format_list_of_FMFormat(format));
     FMField *f = struct_list[0].field_list;
-
-#if 0
-    uint64_t packet_size = calc_ffspacket_size(f, attrs, base_data);
-    fp->data_read += packet_size;
-#endif
     /* setting up initial vars from the format list that comes along with the
        message. Message contains both an FFS description and the data. */
     if (fp->num_vars == 0) {
+        fp_verbose(fp, "Setting up initial vars!\n");
 	int var_count = 0;
-	fp->var_list = setup_flexpath_vars(f, &var_count);
+
+        pthread_mutex_lock(&(fp->queue_mutex));
+        create_flexpath_var_for_timestep(fp, timestep);
+        timestep_separated_lists * ts_var_list = find_var_list(fp, timestep);
+	ts_var_list->var_list = setup_flexpath_vars(f, &var_count, nattrs);
+        pthread_mutex_unlock(&(fp->queue_mutex));
 
 	adiosfile->var_namelist = malloc(var_count * sizeof(char *));
+	adiosfile->attr_namelist = malloc(nattrs * sizeof(char *));
 	int i = 0;
 	while (f->field_name != NULL) {
-	    if (strncmp(f->field_name, "FPDIM", 5)) {
-		adiosfile->var_namelist[i++] = strdup(f->field_name);
+	    char *unmangle = flexpath_unmangle(f->field_name);
+	    if (i < nattrs) {
+		adiosfile->attr_namelist[i++] = unmangle;
+	    } else {
+		if (strncmp(unmangle, "FPDIM", 5)) {
+		    adiosfile->var_namelist[i - nattrs] = unmangle;
+		    i++;
+		} else {
+		    free(unmangle);
+		}
 	    }
 	    f++;
 	}
-	adiosfile->nvars = var_count;
+	adiosfile->nvars = var_count - nattrs;
+	adiosfile->nattrs = nattrs;
 	fp->num_vars = var_count;
     }
 
@@ -1000,7 +1453,20 @@ raw_handler(CManager cm, void *vevent, int len, void *client_data, attr_list att
 
     while (f->field_name) {
         char atom_name[200] = "";
-    	flexpath_var *var = find_fp_var(fp->var_list, f->field_name);
+	char *unmangle = flexpath_unmangle(f->field_name);
+	char *dims[100]; /* more than we should ever need */
+
+        pthread_mutex_lock(&(fp->queue_mutex));
+        timestep_separated_lists * ts_var_list = find_var_list(fp, timestep);
+        if(ts_var_list == NULL)
+        {
+            fp_verbose(fp, "Created timestep in raw handler -- timestep:%d\n", timestep);
+            create_flexpath_var_for_timestep(fp, timestep);
+            ts_var_list = find_var_list(fp, timestep);
+        }
+	flexpath_var * var = find_any_var(ts_var_list->var_list, unmangle);
+        pthread_mutex_unlock(&(fp->queue_mutex));
+        free(unmangle);
 
     	if (!var) {
     	    adios_error(err_file_open_error,
@@ -1008,14 +1474,28 @@ raw_handler(CManager cm, void *vevent, int len, void *client_data, attr_list att
     	    return err_file_open_error;
     	}
 
-	int num_dims = get_ndims_attr(f->field_name, attrs);
+	int num_dims = 0;
+	if (f->field_type) {
+	    char *tmp = index(f->field_type, '[');
+	    while (tmp != NULL) {
+		int len;
+		tmp++;
+		len = index(tmp, ']') - tmp;
+		dims[num_dims] = calloc(len + 1, 1);
+		strncpy(dims[num_dims], tmp, len);
+		tmp = index(tmp+1, '[');
+		num_dims++;
+	    }
+	}
     	var->ndims = num_dims;
-
 	flexpath_var_chunk *curr_chunk = &var->chunks[0];
+	int i;
 
-	// has the var been scheduled?
+	// Has the var been scheduled
 	if (var->sel) {
+            //fp_verbose(fp, "Vars have been scheduled for timestep:%d\n", timestep);
 	    if (var->sel->type == ADIOS_SELECTION_WRITEBLOCK) {
+                //fp_verbose(fp, "Var is type selection_writeblock for scalars!\n");
 		if (num_dims == 0) { // writeblock selection for scalar
 		    if (var->sel->u.block.index == writer_rank) {
 			void *tmp_data = get_FMfieldAddr_by_name(f,
@@ -1025,22 +1505,12 @@ raw_handler(CManager cm, void *vevent, int len, void *client_data, attr_list att
 		    }
 		}
 		else { // writeblock selection for arrays
+                    //fp_verbose(fp, "Var is type selection_writeblock for arrays!\n");
 		    if (var->sel->u.block.index == writer_rank) {
 			var->array_size = var->type_size;
-			int i;
 			for (i=0; i<num_dims; i++) {
-			    char *dim;
-			    atom_name[0] ='\0';
-			    strcat(atom_name, FP_DIM_ATTR_NAME);
-			    strcat(atom_name, "_");
-			    strcat(atom_name, f->field_name);
-			    strcat(atom_name, "_");
-			    char dim_num[10] = "";
-			    sprintf(dim_num, "%d", i+1);
-			    strcat(atom_name, dim_num);
-			    get_string_attr(attrs, attr_atom_from_string(atom_name), &dim);
-
-			    FMField *temp_field = find_field_by_name(dim, f);
+			    char *dim = dims[i];
+			    FMField *temp_field = find_field_by_name(dim, struct_list[0].field_list);
 			    if (!temp_field) {
 				adios_error(err_corrupted_variable,
 					    "Could not find fieldname: %s\n",
@@ -1067,18 +1537,21 @@ raw_handler(CManager cm, void *vevent, int len, void *client_data, attr_list att
 	    }
 	    else if (var->sel->type == ADIOS_SELECTION_BOUNDINGBOX) {
 
+                //fp_verbose(fp, "Var is type selection_boundingbox for arrays!\n");
 		if (var->ndims > 0) { // arrays
 		    int i;
-		    global_var *gv = find_gbl_var(fp->gp->vars,
+		    global_var *gv = find_gbl_var(fp->current_global_info->vars,
 						  var->varname,
-						  fp->gp->num_vars);
+						  fp->current_global_info->num_vars);
 
 		    array_displacements *disp = find_displacement(var->displ,
 								  writer_rank,
 								  var->num_displ);
 		    if (disp) { // does this writer hold a chunk we've asked for
+                        //fp_verbose(fp, "Var is in the displacement, it should have data that we've asked for!\n");
 
-			//print_displacement(disp, fp->rank);
+			//if(fp->rank == 0)
+			    //print_displacement(disp, fp->rank);
 
 			uint64_t *global_sel_start = var->sel->u.bb.start;
 			uint64_t *global_sel_count = var->sel->u.bb.count;
@@ -1093,6 +1566,22 @@ raw_handler(CManager cm, void *vevent, int len, void *client_data, attr_list att
 									   f->field_name,
 									   base_data, 1);
 			char *reader_array = (char*)var->chunks[0].user_buf;
+			/*if(fp->rank == 0 && writer_rank == 0)
+			{
+			    printf("Global_sel_start: %ld, %ld, ...\n", global_sel_start[0], global_sel_start[1]);
+			    printf("Global_sel_count: %ld, %ld, ...\n", global_sel_count[0], global_sel_count[1]);
+			    printf("Global_dimensions: %ld, %ld, ...\n", global_dimensions[0], global_dimensions[1]);
+			    printf("disp->ndims: %ld\n", disp->ndims);
+			    printf("offsets_per_rank: %d\n", offsets_per_rank);
+			    printf("Writer_sizes: %ld, %ld, ...\n", writer_sizes[0], writer_sizes[1]);
+			    printf("Writer_offsets: %ld, %ld, ...\n", writer_offsets[0], writer_offsets[1]);
+			    printf("Writer_array: %f, %f, ...\n", ((double *)writer_array)[0],((double *) writer_array)[1]);
+			}
+			*/
+
+
+
+			    //printf("User_buffer_pointer:%p\n", var->chunks[0].user_buf);
 
 			extract_selection_from_partial(f->field_size, disp->ndims, global_dimensions,
 						       writer_offsets, writer_sizes,
@@ -1102,37 +1591,70 @@ raw_handler(CManager cm, void *vevent, int len, void *client_data, attr_list att
 		}
 	    }
 	}
-	else { //var has not been scheduled;
-	    if (num_dims == 0) { // only worry about scalars
-		flexpath_var_chunk *chunk = &var->chunks[0];
-		if (!chunk->has_data) {
+
+	if (num_dims == 0) { // only worry about scalars
+	    flexpath_var_chunk *chunk = &var->chunks[0];
+	    if (!chunk->has_data) {
+		if (var->type != adios_string) {
 		    void *tmp_data = get_FMfieldAddr_by_name(f, f->field_name, base_data);
 		    chunk->data = malloc(f->field_size);
 		    memcpy(chunk->data, tmp_data, f->field_size);
 		    chunk->has_data = 1;
+		} else {
+		    void *xmit_str = get_FMPtrField_by_name(f, f->field_name, base_data, /*encoded (raw)*/1);
+		    chunk->data = strdup(xmit_str);
+		    chunk->has_data = 1;
 		}
+
 	    }
 	}
+        //Clean up the temporary memory
+        for(i = 0; i < num_dims; i++)
+            free(dims[i]);
         f++;
     }
 
+    //We need this to differentiate between real data messages and the global metadata hack message that gets sent with every
+    //EVgroup message on the writer side
+    if(!only_scalars)
+    {
+        timestep_separated_lists * curr_var_list = flexpath_get_curr_timestep_list(fp);
+        fp_verbose(fp, "Reporting received data for timestep:%d from writer %d\n", timestep, writer_rank);
+        curr_var_list->req_cond.num_completed++;
+        fp_verbose(fp, "Received data message!  (%d of %d)\n", curr_var_list->req_cond.num_completed, curr_var_list->req_cond.num_pending);
+        /* fprintf(stderr, "\t\treader rank:%d:step:%d:num_completed:%d:num_pending:%d\n", */
+        /* 	    fp->rank, fp->mystep, fp->req.num_completed, fp->req.num_pending); */
+        if (curr_var_list->req_cond.num_completed == curr_var_list->req_cond.num_pending) {
+            /* fprintf(stderr, "\t\treader rank:%d:step:%d:signalling_on:%d\n", */
+            /* 	fp->rank, fp->mystep, fp->req.condition); */
+            CMCondition_signal(fp_read_data->cm, curr_var_list->req_cond.condition);
+        }
 
-    fp->req.num_completed++;
-    /* fprintf(stderr, "\t\treader rank:%d:step:%d:num_completed:%d:num_pending:%d\n", */
-    /* 	    fp->rank, fp->mystep, fp->req.num_completed, fp->req.num_pending); */
-    if (fp->req.num_completed == fp->req.num_pending) {
-	/* fprintf(stderr, "\t\treader rank:%d:step:%d:signalling_on:%d\n", */
-	/* 	fp->rank, fp->mystep, fp->req.condition); */
-        CMCondition_signal(fp_read_data->cm, fp->req.condition);
+    }
+    else
+    {
+        fp_verbose(fp, "Only scalars message received for timestep:%d from writer %d\n", timestep, writer_rank);
+        pthread_mutex_lock(&(fp->queue_mutex));
+        timestep_separated_lists * ts_var_list = find_var_list(fp, timestep);
+        ts_var_list->is_list_filled = 1;
+        pthread_cond_signal(&(fp->queue_condition));
+        pthread_mutex_unlock(&(fp->queue_mutex));
     }
 
-
-    free_fmstructdesclist(struct_list);
+    FMfree_struct_list(struct_list);
     return 0;
 }
 
 /********** Core ADIOS Read functions. **********/
 
+extern void
+reader_go_handler(CManager cm, CMConnection conn, void *vmsg, void *client_data, attr_list attrs)
+{
+    reader_go_msg *msg = (reader_go_msg *)vmsg;
+    flexpath_reader_file* fp = (flexpath_reader_file *)msg->reader_file;
+    CMCondition_signal(cm, fp->go_cond);
+}
+
 /*
  * Gathers basic MPI information; sets up reader CM.
  */
@@ -1140,6 +1662,13 @@ int
 adios_read_flexpath_init_method (MPI_Comm comm, PairStruct* params)
 {
     setenv("CMSelfFormats", "1", 1);
+    // setup ATOMS for attribute lists
+    RANK_ATOM = attr_atom_from_string(FP_RANK_ATTR_NAME);
+    TIMESTEP_ATOM = attr_atom_from_string(FP_TIMESTEP);
+    SCALAR_ATOM = attr_atom_from_string(FP_ONLY_SCALARS);
+    NATTRS = attr_atom_from_string(FP_NATTRS);
+    CM_TRANSPORT = attr_atom_from_string("CM_TRANSPORT");
+
     fp_read_data = malloc(sizeof(flexpath_read_data));
     if (!fp_read_data) {
         adios_error(err_no_memory, "Cannot allocate memory for flexpath.");
@@ -1147,7 +1676,6 @@ adios_read_flexpath_init_method (MPI_Comm comm, PairStruct* params)
     }
     memset(fp_read_data, 0, sizeof(flexpath_read_data));
 
-    fp_read_data->CM_TRANSPORT = attr_atom_from_string("CM_TRANSPORT");
     attr_list listen_list = NULL;
     char * transport = NULL;
     transport = getenv("CMTransport");
@@ -1170,7 +1698,7 @@ adios_read_flexpath_init_method (MPI_Comm comm, PairStruct* params)
       }
     } else {
 	listen_list = create_attr_list();
-	add_attr(listen_list, fp_read_data->CM_TRANSPORT, Attr_String,
+	add_attr(listen_list, CM_TRANSPORT, Attr_String,
 		 (attr_value)strdup(transport));
 	CMlisten_specific(fp_read_data->cm, listen_list);
     }
@@ -1179,6 +1707,8 @@ adios_read_flexpath_init_method (MPI_Comm comm, PairStruct* params)
 	fprintf(stderr, "reader %d failed to fork comm_thread.\n", fp_read_data->rank);
 	/*log_debug( "forked\n");*/
     }
+    CMFormat format = CMregister_simple_format(fp_read_data->cm, "Flexpath reader go", reader_go_field_list, sizeof(reader_go_msg));
+    CMregister_handler(format, reader_go_handler, NULL);
     return 0;
 }
 
@@ -1191,6 +1721,34 @@ adios_read_flexpath_open_file(const char * fname, MPI_Comm comm)
     return NULL;
 }
 
+char *
+get_writer_contact_info_filesystem(const char *fname, flexpath_reader_file * fp)
+{
+    char writer_info_filename[200];
+
+    sprintf(writer_info_filename, "%s_%s", fname, WRITER_CONTACT_FILE);
+    FILE *fp_in;
+    fp_verbose(fp, "Looking for writer contact in file %s\n", writer_info_filename);
+redo:
+    fp_in = fopen(writer_info_filename, "r");
+    while (!fp_in) {
+        CMusleep(fp_read_data->cm, 500);
+        fp_in = fopen(writer_info_filename, "r");
+    }
+    struct stat buf;
+    fstat(fileno(fp_in), &buf);
+    int size = buf.st_size;
+    if(size == 0) {
+        fp_verbose(fp, "Size of writer contact file is zero, but it shouldn't be! Retrying!\n");
+        goto redo;
+    }
+    
+    char *buffer = calloc(1, size + 1);
+    int temp = fread(buffer, size, 1, fp_in);
+    fclose(fp_in);
+    return buffer;
+}
+
 /*
  * Still have work to do here.
  * Change it so that we can support the timeouts and lock_modes.
@@ -1209,6 +1767,7 @@ adios_read_flexpath_open(const char * fname,
 			 enum ADIOS_LOCKMODE lock_mode,
 			 float timeout_sec)
 {
+    int i;
     ADIOS_FILE *adiosfile = malloc(sizeof(ADIOS_FILE));
     if (!adiosfile) {
 	adios_error (err_no_memory,
@@ -1217,174 +1776,164 @@ adios_read_flexpath_open(const char * fname,
     }
 
     flexpath_reader_file *fp = new_flexpath_reader_file(fname);
-    fp_verbose(fp, "entering flexpath_open\n");
     fp->host_language = futils_is_called_from_fortran();
     adios_errno = 0;
-    fp->stone = EValloc_stone(fp_read_data->cm);
+    fp->terminal_stone = EValloc_stone(fp_read_data->cm);
+    fp->feedback_bridge = -1;
     fp->comm = comm;
+    
+    adiosfile->fh = (uint64_t)fp;
+    adiosfile->current_step = 0;
 
     MPI_Comm_size(fp->comm, &(fp->size));
     MPI_Comm_rank(fp->comm, &(fp->rank));
 
-    EVassoc_terminal_action(fp_read_data->cm,
-			    fp->stone,
-			    op_format_list,
-			    op_msg_handler,
-			    adiosfile);
-
-    EVassoc_terminal_action(fp_read_data->cm,
-			    fp->stone,
-			    update_step_msg_format_list,
-			    update_step_msg_handler,
-			    adiosfile);
-
+    fp_verbose(fp, "entering flexpath_open\n");
 
     EVassoc_terminal_action(fp_read_data->cm,
-			    fp->stone,
+			    fp->terminal_stone,
 			    evgroup_format_list,
 			    group_msg_handler,
 			    adiosfile);
 
+    EVassoc_terminal_action(fp_read_data->cm,
+                            fp->terminal_stone,
+                            finalize_close_msg_format_list,
+                            finalize_msg_handler,
+                            adiosfile);
+                            
     EVassoc_raw_terminal_action(fp_read_data->cm,
-				fp->stone,
+				fp->terminal_stone,
 				raw_handler,
 				adiosfile);
 
-    /* Gather the contact info from the other readers
-       and write it to a file. Create a ready file so
-       that the writer knows it can parse this file. */
-    char writer_ready_filename[200];
-    char writer_info_filename[200];
-    char reader_ready_filename[200];
-    char reader_info_filename[200];
-
-    sprintf(reader_ready_filename, "%s_%s", fname, READER_READY_FILE);
-    sprintf(reader_info_filename, "%s_%s", fname, READER_CONTACT_FILE);
-    sprintf(writer_ready_filename, "%s_%s", fname, WRITER_READY_FILE);
-    sprintf(writer_info_filename, "%s_%s", fname, WRITER_CONTACT_FILE);
-
     char *string_list;
-    char data_contact_info[CONTACT_LENGTH];
+    char data_contact_info[CONTACT_LENGTH] = {0};
     string_list = attr_list_to_string(CMget_contact_list(fp_read_data->cm));
-    sprintf(&data_contact_info[0], "%d:%s", fp->stone, string_list);
+    sprintf(&data_contact_info[0], "%d:%s", fp->terminal_stone, string_list);
     free(string_list);
 
+    //volatile int qur = 0;
+    //while(qur == 0) { /*Change qur in debugger */ }
+    //MPI_Barrier(MPI_COMM_WORLD);
     char * recvbuf;
     if (fp->rank == 0) {
+        char *contact_info;
 	recvbuf = (char*)malloc(sizeof(char)*CONTACT_LENGTH*(fp->size));
-    }
-
-    MPI_Gather(data_contact_info, CONTACT_LENGTH, MPI_CHAR, recvbuf,
-	       CONTACT_LENGTH, MPI_CHAR, 0, fp->comm);
-
-    if (fp->rank == 0) {
-	// print our own contact information
-	FILE * fp_out = fopen(reader_info_filename, "w");
-	int i;
-	if (!fp_out) {
-	    adios_error(err_file_open_error,
-			"File for contact info could not be opened for writing.\n");
-	    exit(1);
-	}
+        fp_verbose(fp, "Running MPI_Gather for reader contact information!\n");
+        MPI_Gather(data_contact_info, CONTACT_LENGTH, MPI_CHAR, recvbuf,
+                   CONTACT_LENGTH, MPI_CHAR, 0, fp->comm);
+
+        contact_info = get_writer_contact_info_filesystem(fname, fp);
+        
+        char in_contact[CONTACT_LENGTH] = "";
+        int num_bridges = 0;
+        int their_stone;
+        int return_condition;
+
+        char *send_buffer = malloc(CONTACT_LENGTH);
+        void *writer_filedata;
+        char *point = contact_info;
+        //fprintf(stderr, "%s", point);
+        sscanf(point, "%d\n", &return_condition);
+        point = index(point, '\n') + 1;
+        sscanf(point, "%p\n", &writer_filedata);
+        point = index(point, '\n') + 1;
+        while (*point != '\0') {
+            //printf("Point: %s\nInputNewLineAbove\n", point);
+            sscanf(point, "%d:%[^\t\n]", &their_stone, in_contact);
+            point = index(point, '\n'); if (point) point++;
+            fp->bridges = realloc(fp->bridges,
+                                  sizeof(bridge_info) * (num_bridges+1));
+            send_buffer = realloc(send_buffer, (num_bridges+1)*CONTACT_LENGTH);
+            fp->bridges[num_bridges].remote_stone_ID = their_stone;
+            fp->bridges[num_bridges].contact = strdup(in_contact);
+            sprintf(&send_buffer[num_bridges*CONTACT_LENGTH], "%d:%s", their_stone, in_contact);
+            fp->bridges[num_bridges].created = 0;
+            fp->bridges[num_bridges].step = 0;
+            fp->bridges[num_bridges].opened = 0;
+            fp->bridges[num_bridges].scheduled = 0;
+            num_bridges++;
+            //printf("Num_bridges: %d\n", num_bridges);
+        }
+        fp->num_bridges = num_bridges;
+        free(contact_info);
+
+        // broadcast writer contact info to all reader ranks
+        fp_verbose(fp, "Broadcasting writer data to all ranks!\n");
+        MPI_Bcast(&fp->num_bridges, 1, MPI_INT, 0, MPI_COMM_WORLD);
+        
+        MPI_Bcast(send_buffer, fp->num_bridges*CONTACT_LENGTH, MPI_CHAR, 0, MPI_COMM_WORLD);
+        
+	// prepare to send all ranks contact info to writer root
+        reader_register_msg reader_register;
+        reader_register.condition = return_condition;
+        reader_register.writer_file = (uint64_t) writer_filedata;
+        reader_register.reader_file = (uint64_t) fp;
+        reader_register.contact_count = fp->size;
+        reader_register.contacts = malloc(fp->size * sizeof(char*));
 	for (i=0; i<fp->size; i++) {
-	    fprintf(fp_out,"%s\n", &recvbuf[i*CONTACT_LENGTH]);
+            reader_register.contacts[i] = &recvbuf[i*CONTACT_LENGTH];
 	}
-	fclose(fp_out);
-	free(recvbuf);
 
-	FILE * read_ready = fopen(reader_ready_filename, "w");
-	fprintf(read_ready, "ready");
-	fclose(read_ready);
-    }
-    fp_verbose(fp, "waiting on First barrier in OPEN\n");
-    MPI_Barrier(fp->comm);
-    fp_verbose(fp, "done with First barrier in OPEN\n");
+        CMFormat format = CMregister_simple_format(fp_read_data->cm, "Flexpath reader register", reader_register_field_list, sizeof(reader_register_msg));
+        attr_list writer_rank0_contact = attr_list_from_string(fp->bridges[0].contact);
+        CMConnection conn = CMget_conn (fp_read_data->cm, writer_rank0_contact);
+        fp->go_cond = CMCondition_get(fp_read_data->cm, conn);
+        CMwrite(conn, format, &reader_register);
+
+        /* wait for "go" from writer */
+        fp_verbose(fp, "waiting for go message in read_open, WAITING, condition %d\n", fp->go_cond);
+        CMCondition_wait(fp_read_data->cm, fp->go_cond);
+        fp_verbose(fp, "finished wait for go message in read_open\n");
+        //Cleanup
+        free(send_buffer);
+        free(reader_register.contacts);
+	free(recvbuf);
+        free_attr_list(writer_rank0_contact);
 
-    FILE * fp_in = fopen(writer_ready_filename,"r");
-    while (!fp_in) {
-	//CMsleep(fp_read_data->cm, 1);
-	fp_in = fopen(writer_ready_filename, "r");
+        //CMConnection_close(conn);
+        MPI_Barrier(MPI_COMM_WORLD);
+    } else {
+        /* not rank 0 */
+        fp_verbose(fp, "About to run the normal setup for bridges before MPI_Gather operation!\n");
+        char *this_side_contact_buffer;
+        MPI_Gather(data_contact_info, CONTACT_LENGTH, MPI_CHAR, recvbuf,
+                   CONTACT_LENGTH, MPI_CHAR, 0, fp->comm);
+        MPI_Bcast(&fp->num_bridges, 1, MPI_INT, 0, MPI_COMM_WORLD);
+        this_side_contact_buffer = malloc(fp->num_bridges*CONTACT_LENGTH);
+        MPI_Bcast(this_side_contact_buffer, fp->num_bridges*CONTACT_LENGTH, MPI_CHAR, 0, MPI_COMM_WORLD);
+        fp->bridges = malloc(sizeof(bridge_info) * fp->num_bridges);
+        for (i = 0; i < fp->num_bridges; i++) {
+            int their_stone;
+            char in_contact[CONTACT_LENGTH];
+            sscanf(&this_side_contact_buffer[i*CONTACT_LENGTH], "%d:%s", &their_stone, in_contact);
+            fp->bridges[i].remote_stone_ID = their_stone;
+            fp->bridges[i].contact = strdup(in_contact);
+            fp->bridges[i].created = 0;
+            fp->bridges[i].step = 0;
+            fp->bridges[i].opened = 0;
+            fp->bridges[i].scheduled = 0;
+        }
+        MPI_Barrier(MPI_COMM_WORLD);
+        fp_verbose(fp, "Past the MPI_Barrier on the non-root side\n");
     }
-    fclose(fp_in);
 
-    fp_in = fopen(writer_info_filename, "r");
-    while (!fp_in) {
-	//CMsleep(fp_read_data->cm, 1);
-	fp_in = fopen(writer_info_filename, "r");
-    }
-
-    char in_contact[CONTACT_LENGTH] = "";
-    //fp->bridges = malloc(sizeof(bridge_info));
-    int num_bridges = 0;
-    int their_stone;
-
-    // change to read all numbers, dont create stones, turn bridge array into linked list
-    while (fscanf(fp_in, "%d:%s", &their_stone, in_contact) != EOF) {
-	//fprintf(stderr, "writer contact: %d:%s\n", their_stone, in_contact);
-	fp->bridges = realloc(fp->bridges,
-					  sizeof(bridge_info) * (num_bridges+1));
-	fp->bridges[num_bridges].their_num = their_stone;
-	fp->bridges[num_bridges].contact = strdup(in_contact);
-	fp->bridges[num_bridges].created = 0;
-	fp->bridges[num_bridges].step = 0;
-	fp->bridges[num_bridges].opened = 0;
-	fp->bridges[num_bridges].scheduled = 0;
-	num_bridges++;
-    }
-    fclose(fp_in);
-    fp->num_bridges = num_bridges;
-    // clean up of writer's files
-    fp_verbose(fp, "waiting on second barrier in OPEN\n");
-    MPI_Barrier(fp->comm);
-    fp_verbose(fp, "done with second barrier in OPEN\n");
-    if (fp->rank == 0) {
-	unlink(writer_info_filename);
-	unlink(writer_ready_filename);
-    }
 
-    adiosfile->fh = (uint64_t)fp;
-    adiosfile->current_step = 0;
+    //EVstore Setup
 
-    /* Init with a writer to get initial scalar
-       data so we can handle inq_var calls and
-       also populate the ADIOS_FILE struct. */
-    if (fp->size < num_bridges) {
-    	int mystart = (num_bridges/fp->size) * fp->rank;
-    	int myend = (num_bridges/fp->size) * (fp->rank+1);
-    	fp->writer_coordinator = mystart;
-    	int z;
-    	for (z=mystart; z<myend; z++) {
-    	    build_bridge(&fp->bridges[z]);
-    	}
-    }
-    else {
-	int writer_rank = fp->rank % num_bridges;
-	build_bridge(&fp->bridges[writer_rank]);
-	fp->writer_coordinator = writer_rank;
-    }
 
+    fp_verbose(fp, "About to lock mutex and access timstep_separated_var_list\n");
     // requesting initial data.
-    fp_verbose(fp, "sending open msg in read_open\n");
-    send_open_msg(fp, fp->writer_coordinator);
+    
+    fp_verbose(fp, "Waiting on timestep %d\n", fp->mystep);
+    flexpath_wait_for_global_metadata(fp, fp->mystep);
 
-
-    fp->data_read = 0;
-    fp->req.condition = CMCondition_get(fp_read_data->cm, NULL);
-    fp->req.num_pending = 1;
-    fp->req.num_completed = 0;
-    send_flush_msg(fp, fp->writer_coordinator, DATA, 0);
-    fp_verbose(fp, "sent flush msg in read_open, WAITING\n");
-    CMCondition_wait(fp_read_data->cm, fp->req.condition);
-    fp_verbose(fp, "done with WAIT in read_open\n");
-
-    send_flush_msg(fp, fp->writer_coordinator, EVGROUP, 1);
+    //Fix the last of the info the reader will need
+    fp_verbose(fp, "Reader now has all of the information to begin scheduling reads for the first timestep\n");
+    
     fp->data_read = 0;
-    // this has to change. Writer needs to have some way of
-    // taking the attributes out of the xml document
-    // and sending them over ffs encoded. Not yet implemented.
-    // the rest of this info for adiosfile gets filled in raw_handler.
-    adiosfile->nattrs = 0;
-    adiosfile->attr_namelist = NULL;
+
     // first step is at least one, otherwise raw_handler will not execute.
     // in reality, writer might be further along, so we might have to make
     // the writer explitly send across messages each time it calls close, to
@@ -1400,8 +1949,34 @@ adios_read_flexpath_open(const char * fname,
     return adiosfile;
 }
 
+extern EVsource
+adios_flexpath_create_feedback_source(ADIOS_FILE *adiosfile, FMStructDescList format_list)
+{
+    flexpath_reader_file *fp = (flexpath_reader_file*)adiosfile->fh;
+    static int first = 1;
+    static atom_t global_stone_ID;
+    if (first) {
+        /*
+         * we don't have a means of assigning these truely "globally", so we'll leverage the 32-bit 
+         * atom name hashing mechanisms (which we use in ATL and rely upon to hopefully avoid collisions)
+         */
+        global_stone_ID = attr_atom_from_string("flexpath feedback stone");
+        global_stone_ID |= 0x80000000;
+        first = 0;
+    }
+    if (fp->feedback_bridge == -1) {
+        attr_list contact_list = attr_list_from_string(fp->bridges[0].contact);
+        fp->feedback_bridge = EVcreate_bridge_action(fp_read_data->cm, contact_list, 
+                                                     global_stone_ID);
+//        free(contact_list);
+    }
+    return EVcreate_submit_handle(fp_read_data->cm, fp->feedback_bridge, format_list);
+}
+
 int adios_read_flexpath_finalize_method ()
 {
+    /* oddly, ADIOS doesn't let us close a single file.  Instead, this finalizes all operations.  Commented out below is the body that we should have when we can close a file. */
+
     /* flexpath_reader_file *fp = (flexpath_reader_file*)adiosfile->fh; */
     /* int i; */
     /* for (i=0; i<fp->num_bridges; i++) { */
@@ -1410,148 +1985,96 @@ int adios_read_flexpath_finalize_method ()
     /* 	    send_finalize_msg(fp, i); */
     /*     } */
     /* } */
-    /* return 1; */
+    return 1;
 }
 
+
+//A lot of the complexity of the underlying linked lists is hidden in the functions
 void adios_read_flexpath_release_step(ADIOS_FILE *adiosfile) {
     int i;
     flexpath_reader_file *fp = (flexpath_reader_file*)adiosfile->fh;
-    fp_verbose(fp, "waiting at flexpath_release step barrier\n");
-    MPI_Barrier(fp->comm);
-    fp_verbose(fp, "done with flexpath_release step barrier\n");
-    for (i=0; i<fp->num_bridges; i++) {
-        if (fp->bridges[i].created && !fp->bridges[i].opened) {
-	    fp_verbose(fp, "sending open msg in flexpath_release_step\n");
-	    send_open_msg(fp, i);
-        }
-    }
-    free_evgroup(fp->gp);
-    fp->gp = NULL;
-
-    flexpath_var *tmpvars = fp->var_list;
-    while (tmpvars) {
-
-	if (tmpvars->ndims > 0) {
-	    free(tmpvars->global_dims);
-	    tmpvars->ndims = 0;
-	}
-	if (tmpvars->displ) {
-	    free_displacements(tmpvars->displ, tmpvars->num_displ);
-	    tmpvars->displ = NULL;
-	}
-
-	if (tmpvars->sel) {
-	    a2sel_free(tmpvars->sel);
-	    tmpvars->sel = NULL;
-	}
-
-	tmpvars->sel = NULL;
-	for (i=0; i<tmpvars->num_chunks; i++) {
-	    flexpath_var_chunk *chunk = &tmpvars->chunks[i];
-	    if (chunk->has_data) {
-		free(chunk->data);
-		chunk->data = NULL;
-		chunk->has_data = 0;
-	    }
-	    chunk->rank = 0;
-	}
-	tmpvars = tmpvars->next;
-    }
+    //fp_verbose(fp, "waiting at flexpath_release step barrier\n");
+    //MPI_Barrier(fp->comm);
+    //fp_verbose(fp, "done with flexpath_release step barrier\n");
+
+    pthread_mutex_lock(&(fp->queue_mutex));
+    remove_relevant_global_data(fp, fp->mystep);
+    pthread_mutex_unlock(&(fp->queue_mutex));
+    fp->current_global_info = NULL;
+
+    pthread_mutex_lock(&(fp->queue_mutex));
+    cleanup_flexpath_vars(fp, fp->mystep);
+    pthread_mutex_unlock(&(fp->queue_mutex));
 }
 
 int
 adios_read_flexpath_advance_step(ADIOS_FILE *adiosfile, int last, float timeout_sec)
 {    
     flexpath_reader_file *fp = (flexpath_reader_file*)adiosfile->fh;
-    fp_verbose(fp, " waiting on first barrier in flexpath_advance_step:step:%d\n", fp->mystep);
+    fp_verbose(fp, "Entering Flexpath Advance Step!\n");
     MPI_Barrier(fp->comm);
-    fp_verbose(fp, " wait complete in flexpath_advance_step:step:%d\n", fp->mystep);
-    int count = 0; // for perf measurements
-    fp_verbose(fp, "advance_step:sending flush step to coordinator:%d:step:%d\n", fp->writer_coordinator,fp->mystep);
-    send_flush_msg(fp, fp->writer_coordinator, STEP, 1);
-    //fprintf(stderr, "reader_rank:%d:advance_step:advance_step:after sending flush step to:%d:step:%d\n", fp->writer_coordinator,fp->mystep);
-    //put this on a timer, so to speak, for timeout_sec
-    while (fp->mystep == fp->last_writer_step) {
-	if (fp->writer_finalized) {
-	    adios_errno = err_end_of_stream;
-	    return err_end_of_stream;
-	}
-	CMsleep(fp_read_data->cm, 1);
-	fp_verbose(fp, "advance_step:while loop sending flush step to coordinator:%d:step:%d\n", fp->writer_coordinator,fp->mystep);
-	send_flush_msg(fp, fp->writer_coordinator, STEP, 1);
-	//fprintf(stderr, "reader_rank:%d:advance_step:after while loop sending flush step to coordinator:%d:step:%d\n", fp->writer_coordinator,fp->mystep);
+    int count = 0;
+    
+    fp->mystep++;
+
+    adiosfile->current_step = fp->mystep;
+    adiosfile->last_step = adiosfile->current_step;
+
+    //Check to see if we have the next steps global metadata
+    fp_verbose(fp, "Waiting for global metadata in timestep:%d\n", fp->mystep);
+    flexpath_wait_for_global_metadata(fp, fp->mystep);
+
+    //If finalized, err_end_of_stream
+    if(fp->last_writer_step == fp->mystep)
+    {
+        fp_verbose(fp, "Received the writer_finalized message! Reader returning err_end_of_stream!\n");
+        adios_errno = err_end_of_stream;
+        return err_end_of_stream;
     }
 
-    int i=0;
-    for (i=0; i<fp->num_bridges; i++) {
-        if (fp->bridges[i].created && fp->bridges[i].opened) {
-	    count++;
-	    send_close_msg(fp, i);
-	}
+    //Remove obsolete bookeeping information and update current_global_info
+    pthread_mutex_lock(&(fp->queue_mutex));
+    
+    int global_data_cleaned = remove_relevant_global_data(fp, fp->mystep - 1);
+    int flexpath_var_cleaned = cleanup_flexpath_vars(fp, fp->mystep - 1);
+    if(!fp->current_global_info)
+    {
+        fprintf(stderr, "Severe logic error!\n");
+        exit(1);
     }
-    fp_verbose(fp, "waiting on second barrier in flexpath_advance_step:step:%d\n", fp->mystep);
-    MPI_Barrier(fp->comm);
-    fp_verbose(fp, "done with second barrier in flexpath_advance_step:step:%d\n", fp->mystep);
+    fp_verbose(fp, "Cleaned the global data and the flexpath vars!\n"
+                    "Global metadata removed: %d\t\tFlexpath vars removed: %d\n", global_data_cleaned, flexpath_var_cleaned);
+    pthread_mutex_unlock(&(fp->queue_mutex));
 
-    count = 0;
-    adiosfile->current_step++;
-    fp->mystep = adiosfile->current_step;
+    //Fix the last of the info the reader will need, this locks and unlocks the mutex so that's why we have it out here
+
+    //Wait for all readers to reach this step, this should change in extended version
+    //MPI_Barrier(fp->comm);
 
-    for (i=0; i<fp->num_bridges; i++) {
-	if (fp->bridges[i].created && !fp->bridges[i].opened) {
-	    fp_verbose(fp, "sending open msg in flexpath_advance_step\n");
-	    send_open_msg(fp, i);
-	    count++;
-        }
-    }
-    // need to remove selectors from each var now.
-    fp->req.num_completed = 0;
-    fp->req.num_pending = 1;
-    fp->req.condition = CMCondition_get(fp_read_data->cm, NULL);
-    fp_verbose(fp, "advance_step: sending flush DATA to coordinator, then WAITING:%d:step:%d\n", fp->writer_coordinator,fp->mystep);
-    send_flush_msg(fp, fp->writer_coordinator, DATA, 0);
-    CMCondition_wait(fp_read_data->cm, fp->req.condition);
-    fp_verbose(fp, "advance_step:Condition wait is complete:%d:step:%d\n", fp->writer_coordinator,fp->mystep);
-    // should only happen if there are more steps available.
-    // writer should have advanced.
-    fp_verbose(fp, "advance_step: sending flush EVGROUP to coordinator:%d:step:%d\n", fp->writer_coordinator,fp->mystep);
-    send_flush_msg(fp, fp->writer_coordinator, EVGROUP, 1);
-    //fprintf(stderr, "reader_rank:%d:advance_step:while loop after flush EVGROUP to coordinator:%d:step:%d\n", fp->writer_coordinator,fp->mystep);
     return 0;
 }
 
 int adios_read_flexpath_close(ADIOS_FILE * fp)
 {
     flexpath_reader_file *file = (flexpath_reader_file*)fp->fh;
-    //send to each opened link
-    int i;
-    for (i = 0; i<file->num_bridges; i++) {
-        if (file->bridges[i].created && file->bridges[i].opened) {
-	    send_close_msg(file, i);
-        }
-    }
+
+    MPI_Barrier(file->comm);
+
+    
+    send_finalize_msg(file);
+
     /*
-    start to cleanup.  Clean up var_lists for now, as the
+    Clean up everything, as the
     data has already been copied over to ADIOS_VARINFO structs
     that the user maintains a copy of.
     */
-    flexpath_var *v = file->var_list;
-    while (v) {
-    	// free chunks; data has already been copied to user
-    	int i;
-    	for (i = 0; i<v->num_chunks; i++) {
-    	    flexpath_var_chunk *c = &v->chunks[i];
-	    if (!c)
-		log_error("FLEXPATH: %s This should not happen! line %d\n",__func__,__LINE__);
-	    //free(c->data);
-	    c->data = NULL;
-	    free(c);
-	}
-	flexpath_var *tmp = v->next;
-	free(v);
-	v = tmp;
-    	//v=v->next;
-    }
+
+    flexpath_free_filedata(file);
+    CManager_close(fp_read_data->cm);
+
+    //Cleaning the ADIOS FILE
+
+
     return 0;
 }
 
@@ -1590,42 +2113,54 @@ int adios_read_flexpath_perform_reads(const ADIOS_FILE *adiosfile, int blocking)
     int num_sendees = fp->num_sendees;
     int total_sent = 0;
     fp->time_in = 0.00;
-    fp->req.num_completed = 0;
-    fp->req.num_pending = FP_BATCH_SIZE;
-    fp->req.condition = CMCondition_get(fp_read_data->cm, NULL);
+
+    timestep_separated_lists * curr_var_list = flexpath_get_curr_timestep_list(fp);
+
+    curr_var_list->req_cond.num_completed = 0;
+    curr_var_list->req_cond.num_pending = num_sendees < FP_BATCH_SIZE ? num_sendees : FP_BATCH_SIZE;
+    curr_var_list->req_cond.condition = CMCondition_get(fp_read_data->cm, NULL);
+    
 
     for (i = 0; i<num_sendees; i++) {
-	int sendee = fp->sendees[i];
-	batchcount++;
-	total_sent++;
 		/* fprintf(stderr, "reader rank:%d:flush_data to writer:%d:of:%d:step:%d:batch:%d:total_sent:%d\n", */
 		/* 	fp->rank, sendee, num_sendees, fp->mystep, batchcount, total_sent); */
-	send_flush_msg(fp, sendee, DATA, 0);
+	send_read_msg(fp, i, 0);
+	total_sent++;
 
 	if ((total_sent % FP_BATCH_SIZE == 0) || (total_sent == num_sendees)) {
-            fp->req.num_pending = batchcount;
-
-	    fp_verbose(fp, "in perform_reads, blocking on:%d:step:%d\n", fp->req.condition, fp->mystep);
-            CMCondition_wait(fp_read_data->cm, fp->req.condition);
-	    fp_verbose(fp, "after blocking:%d:step:%d\n", fp->req.condition, fp->mystep);
-	    fp->req.num_completed = 0;
-	    //fp->req.num_pending = 0;
-	    //total_sent = 0;
-            batchcount = 0;
-            fp->req.condition = CMCondition_get(fp_read_data->cm, NULL);
+
+	    fp_verbose(fp, "in perform_reads, blocking on:%d:step:%d\n", curr_var_list->req_cond.condition, fp->mystep);
+            CMCondition_wait(fp_read_data->cm, curr_var_list->req_cond.condition);
+	    fp_verbose(fp, "after blocking:%d:step:%d\n", curr_var_list->req_cond.condition, fp->mystep);
+	    curr_var_list->req_cond.num_completed = 0;
+            curr_var_list->req_cond.condition = CMCondition_get(fp_read_data->cm, NULL);
+            int amount_left = num_sendees - total_sent;
+            if (amount_left > 0)
+            {
+                curr_var_list->req_cond.num_pending = amount_left < FP_BATCH_SIZE ? amount_left : FP_BATCH_SIZE;
+            }
 	}
 
     }
 
+    //Immediate_cleanup of sendee information
     free(fp->sendees);
     fp->sendees = NULL;
+
+    //Cleanup read_request_messages!
+    flexpath_free_read_requests(fp->num_sendees, fp->var_read_requests);
+    fp->var_read_requests = NULL;
     fp->num_sendees = 0;
 
-    flexpath_var *tmpvars = fp->var_list;
+    
+    //Get the current var_list
+    //TODO: call single function instead
+    //timestep_separated_lists * curr_var_list = flexpath_get_curr_timestep_list(fp);
+    flexpath_var *tmpvars = curr_var_list->var_list;
+
     while (tmpvars) {
 	if (tmpvars->displ) {
-	    free_displacements(tmpvars->displ, tmpvars->num_displ);
-	    tmpvars->displ = NULL;
+	    flexpath_free_displacements(&(tmpvars->displ), tmpvars->num_displ);
 	}
 
 	if (tmpvars->sel) {
@@ -1661,11 +2196,13 @@ adios_read_flexpath_schedule_read_byid(const ADIOS_FILE *adiosfile,
 				       void *data)
 {
     flexpath_reader_file *fp = (flexpath_reader_file*)adiosfile->fh;
-    flexpath_var *fpvar = fp->var_list;
+    fp_verbose(fp, "Entering schedule_read_by_id\n");
+    timestep_separated_lists * curr_var_list = flexpath_get_curr_timestep_list(fp);
+    flexpath_var *fpvar = curr_var_list->var_list;
 
-    fp_verbose(fp, "entering schedule_read_byid\n");
+    fp_verbose(fp, "entering schedule_read_byid, varid %d\n", varid);
     while (fpvar) {
-        if (fpvar->id == varid)
+        if ((!fpvar->is_attr) && (fpvar->id == varid))
         	break;
         else
 	    fpvar=fpvar->next;
@@ -1676,12 +2213,13 @@ adios_read_flexpath_schedule_read_byid(const ADIOS_FILE *adiosfile,
 		    varid);
         return err_invalid_varid;
     }
+
     //store the user allocated buffer.
     flexpath_var_chunk *chunk = &fpvar->chunks[0];
     if (nsteps != 1) {
 	adios_error (err_invalid_timestep,
                      "Only one step can be read from a stream at a time. "
-                     "You requested % steps in adios_schedule_read()\n",
+                     "You requested %d steps in adios_schedule_read()\n",
 		     nsteps);
         return err_invalid_timestep;
     }
@@ -1711,19 +2249,25 @@ adios_read_flexpath_schedule_read_byid(const ADIOS_FILE *adiosfile,
         chunk->user_buf = data;
         fpvar->start_position = 0;
 	int writer_index = fpvar->sel->u.block.index;
-	if (writer_index > fp->num_bridges) {
+	if (writer_index >= fp->num_bridges) {
 	    adios_error(err_out_of_bound,
 			"No process exists on the writer side matching the index.\n");
 	    return err_out_of_bound;
 	}
-	send_var_message(fp, writer_index, fpvar->varname);
+        fp_verbose(fp, "Adding var to read message for ADIOS_SELECTION_WRITEBLOCK for writer_index: %d\n", writer_index);
+	add_var_to_read_message(fp, writer_index, fpvar->varname);
 	break;
     }
     case ADIOS_SELECTION_BOUNDINGBOX:
     {
         // boundingbox for a scalar; handle it as we do with inq_var
         if (fpvar->ndims == 0) {
-            memcpy(data, chunk->data, fpvar->type_size);
+	    if (chunk->has_data) {
+		memcpy(data, chunk->data, fpvar->type_size);
+                fp_verbose(fp, "Grabbing scalar data immediately, no need for message!\n");
+	    } else {
+		printf("Trying to schedule read on scalar %s, no data fpvar %p, chunk %p\n", fpvar->varname, fpvar, chunk);
+	    }
         } else {
             if (fp->host_language == FP_FORTRAN_MODE) {
                 reverse_dims(sel->u.bb.start, sel->u.bb.ndim);
@@ -1731,20 +2275,20 @@ adios_read_flexpath_schedule_read_byid(const ADIOS_FILE *adiosfile,
             }
             chunk->user_buf = data;
             fpvar->start_position = 0;
-            free_displacements(fpvar->displ, fpvar->num_displ);
-            fpvar->displ = NULL;
+            flexpath_free_displacements(&(fpvar->displ), fpvar->num_displ);
             int j=0;
             int need_count = 0;
             array_displacements *all_disp = NULL;
             uint64_t pos = 0;
             for (j=0; j<fp->num_bridges; j++) {
                 int destination=0;
-                if (need_writer(fp, j, fpvar->sel, fp->gp, fpvar->varname)==1) {
-		    //printf("\t\trank: %d need_writer: %d\n", fp->rank, j);
+                evgroup * the_gp = fp->current_global_info;
+                if (need_writer(fp, j, fpvar->sel, the_gp, fpvar->varname)==1) {
+		    /* fprintf(stderr, "\t\trank: %d need_writer: %d\n", fp->rank, j); */
                     uint64_t _pos = 0;
                     need_count++;
                     destination = j;
-                    global_var *gvar = find_gbl_var(fp->gp->vars, fpvar->varname, fp->gp->num_vars);
+                    global_var *gvar = find_gbl_var(the_gp->vars, fpvar->varname, the_gp->num_vars);
                     // displ is freed in release_step.
                     array_displacements *displ = get_writer_displacements(j, fpvar->sel, gvar, &_pos);
                     displ->pos = pos;
@@ -1752,10 +2296,23 @@ adios_read_flexpath_schedule_read_byid(const ADIOS_FILE *adiosfile,
                     pos += _pos;
 
                     all_disp = realloc(all_disp, sizeof(array_displacements)*need_count);
+                    //TODO: Figure this out with Greg...
                     all_disp[need_count-1] = *displ;
-                    send_var_message(fp, j, fpvar->varname);
+                    fp_verbose(fp, "Adding var to read message for ADIOS_SELECTION_BOUNDINGBOX for writer: %d\n", j);
+                    add_var_to_read_message(fp, j, fpvar->varname);
+                    //free displ
+                    if(displ) {
+                        //if(displ->start) free(displ->start);
+                        //if(displ->count) free(displ->count);
+                        free(displ);
+                    }
                 }
             }
+            if (all_disp == NULL) {
+                adios_error(err_operation_not_supported,
+                            "Selection does not match data written by any writer.");
+                return 1;
+            }                
             fpvar->displ = all_disp;
             fpvar->num_displ = need_count;
         }
@@ -1774,7 +2331,7 @@ adios_read_flexpath_schedule_read_byid(const ADIOS_FILE *adiosfile,
 	break;
     }
     }
-    fp_verbose(fp, "entering schedule_read_byid\n");
+    fp_verbose(fp, "exiting schedule_read_byid\n");
     return 0;
 }
 
@@ -1786,23 +2343,46 @@ adios_read_flexpath_schedule_read(const ADIOS_FILE *adiosfile,
 			int nsteps,
 			void * data)
 {
-    fprintf(stderr, "schedule_read is called\n");
-    return 0;
+    flexpath_reader_file *fp = (flexpath_reader_file*)adiosfile->fh;
+    fp_verbose(fp, "entering schedule_read, var: %s\n", varname);
+    timestep_separated_lists * curr_var_list = flexpath_get_curr_timestep_list(fp);
+
+    flexpath_var *fpvar = find_fp_var(curr_var_list->var_list, varname);
+
+    if (!fpvar) {
+        adios_error(err_invalid_varid,
+		    "Invalid variable id: %s\n",
+		    varname);
+        return err_invalid_varid;
+    }
+
+    int id = fpvar->id;
+
+    fp_verbose(fp, "Calling read_by_id, var: %d\n", id);
+    return adios_read_flexpath_schedule_read_byid(adiosfile, sel, id, from_steps, nsteps, data);
 }
 
 int
-adios_read_flexpath_get_attr (int *gp, const char *attrname,
+adios_read_flexpath_get_attr (const ADIOS_FILE *adiosfile, const char *attrname,
                                  enum ADIOS_DATATYPES *type,
                                  int *size, void **data)
 {
-    //log_debug( "debug: adios_read_flexpath_get_attr\n");
-    // TODO: borrowed from dimes
-    adios_error(err_invalid_read_method,
-		"adios_read_flexpath_get_attr is not implemented.");
-    *size = 0;
-    *type = adios_unknown;
-    *data = 0;
-    return adios_errno;
+    flexpath_reader_file *fp = (flexpath_reader_file*)adiosfile->fh;
+    timestep_separated_lists * curr_var_list = flexpath_get_curr_timestep_list(fp);
+
+    flexpath_var *fpvar = find_fp_attr(curr_var_list->var_list, attrname);
+
+    if (!fpvar) {
+        adios_error(err_invalid_attrid,
+		    "Invalid attribute id: %s\n",
+		   attrname);
+        return err_invalid_attrid;
+    }
+
+    *type = fpvar->type;
+    *size = fpvar->type_size;
+    *data = fpvar->chunks[0].data;
+    return 0;
 }
 
 int
@@ -1810,14 +2390,17 @@ adios_read_flexpath_get_attr_byid (const ADIOS_FILE *adiosfile, int attrid,
 				   enum ADIOS_DATATYPES *type,
 				   int *size, void **data)
 {
-//    log_debug( "debug: adios_read_flexpath_get_attr_byid\n");
-    // TODO: borrowed from dimes
-    adios_error(err_invalid_read_method,
-		"adios_read_flexpath_get_attr_byid is not implemented.");
-    *size = 0;
-    *type = adios_unknown;
-    *data = 0;
-    return adios_errno;
+    flexpath_reader_file *fp = (flexpath_reader_file*)adiosfile->fh;
+    if (attrid >= 0 && attrid < adiosfile->nattrs) {
+	int ret = adios_read_flexpath_get_attr(adiosfile, adiosfile->attr_namelist[attrid],
+					       type, size, data);
+	//fp_verbose(fp, "leaving flexpath_inq_attr_byid\n");
+	return ret;
+    }
+    else {
+        adios_error(err_invalid_attrid, "FLEXPATH method: Cannot find attr %d\n", attrid);
+        return adios_errno;
+    }
 }
 
 ADIOS_VARINFO*
@@ -1826,8 +2409,11 @@ adios_read_flexpath_inq_var(const ADIOS_FILE * adiosfile, const char* varname)
     flexpath_reader_file *fp = (flexpath_reader_file*)adiosfile->fh;
     ADIOS_VARINFO *v = NULL;
 
-    fp_verbose(fp, "entering flexpath_inq_var\n");
-    flexpath_var *fpvar = find_fp_var(fp->var_list, varname);
+    fp_verbose(fp, "entering flexpath_inq_var, varname: %s\n", varname);
+
+    timestep_separated_lists * ts_var_list = flexpath_get_curr_timestep_list(fp);
+    flexpath_var *fpvar = find_fp_var(ts_var_list->var_list, varname);
+
     if (fpvar) {
         v = calloc(1, sizeof(ADIOS_VARINFO));
 
@@ -1850,10 +2436,10 @@ ADIOS_VARINFO*
 adios_read_flexpath_inq_var_byid (const ADIOS_FILE * adiosfile, int varid)
 {
     flexpath_reader_file *fp = (flexpath_reader_file*)adiosfile->fh;
-    fp_verbose(fp, "entering flexpath_inq_var_byid\n");
+    //fp_verbose(fp, "entering flexpath_inq_var_byid, varid: %d\n", varid);
     if (varid >= 0 && varid < adiosfile->nvars) {
 	ADIOS_VARINFO *v = adios_read_flexpath_inq_var(adiosfile, adiosfile->var_namelist[varid]);
-	fp_verbose(fp, "leaving flexpath_inq_var_byid\n");
+	//fp_verbose(fp, "leaving flexpath_inq_var_byid\n");
 	return v;
     }
     else {
diff --git a/src/transforms/Makefile.plugins b/src/transforms/Makefile.plugins
index 819100c..7d55b8c 100644
--- a/src/transforms/Makefile.plugins
+++ b/src/transforms/Makefile.plugins
@@ -29,3 +29,11 @@ transforms_read_method_SOURCES += transforms/adios_transform_alacrity_read.c
 # zfp plugin:
 transforms_write_method_SOURCES += transforms/adios_transform_zfp_write.c
 transforms_read_method_SOURCES += transforms/adios_transform_zfp_read.c
+
+# sz plugin:
+transforms_write_method_SOURCES += transforms/adios_transform_sz_write.c
+transforms_read_method_SOURCES += transforms/adios_transform_sz_read.c
+
+# LZ4 plugin:
+transforms_write_method_SOURCES += transforms/adios_transform_lz4_write.c
+transforms_read_method_SOURCES += transforms/adios_transform_lz4_read.c
diff --git a/src/transforms/adios_transform_lz4_common.h b/src/transforms/adios_transform_lz4_common.h
new file mode 100644
index 0000000..bb149b7
--- /dev/null
+++ b/src/transforms/adios_transform_lz4_common.h
@@ -0,0 +1,18 @@
+/*
+ * adios_transform_lz4_common.h
+ *
+ * 	Author: Rene Widera
+ * 	contact: r.widera at hzdr.de
+ */
+#ifndef ADIOS_TRANSFORM_LZ4_COMMON_H
+#define ADIOS_TRANSFORM_LZ4_COMMON_H
+
+#include "lz4.h"
+
+/** LZ4 type to define sizes */
+typedef int adiosLz4Size_t;
+
+/** largest allowed input size (in byte) for the native LZ4 compression call */
+#define ADIOS_LZ4_MAX_INPUT_SIZE LZ4_MAX_INPUT_SIZE
+
+#endif /* ADIOS_TRANSFORM_LZ4_COMMON_H */
diff --git a/src/transforms/adios_transform_lz4_read.c b/src/transforms/adios_transform_lz4_read.c
new file mode 100644
index 0000000..a0ec051
--- /dev/null
+++ b/src/transforms/adios_transform_lz4_read.c
@@ -0,0 +1,170 @@
+/*
+ * adios_transform_lz4_read.c
+ *
+ * 	Author: Rene Widera
+ * 	Contact: r.widera at hzdr.de
+ *
+ *  This code based on `adios_transform_zlib_read.c`.
+ */
+
+#include <stdlib.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <assert.h>
+
+#include "core/util.h"
+#include "core/adios_logger.h"
+#include "core/transforms/adios_transforms_hooks_read.h"
+#include "core/transforms/adios_transforms_reqgroup.h"
+#include "core/adios_internals.h" // adios_get_type_size()
+
+#ifdef LZ4
+
+#include "lz4.h"
+#include "adios_transform_lz4_common.h"
+
+int adios_transform_lz4_is_implemented(void)
+{
+    return 1;
+}
+
+/** decompress lz4 compressed data
+ * 
+ * @param stream [in|out] LZ4 decode stream object
+ * @param input_data [in] data to decompress
+ * @param input_len size of the input data (in byte)
+ * @param output_data [out] buffer for the decompressed output
+ * @param max_output_len size of the output buffer (in byte)
+ * @param decoded_byte [out] number of decompressed bytes from the input buffer (can be smaller than input_len)
+ * @return zero (0) if something goes wrong else non zero
+ */
+int adios_transform_lz4_decompress(LZ4_streamDecode_t* stream,
+                                   const char* input_data,
+                                   const adiosLz4Size_t input_len,
+                                   char* output_data,
+                                   const adiosLz4Size_t max_output_len,
+                                   adiosLz4Size_t* decoded_byte)
+{
+    assert(stream != NULL &&
+           input_data != NULL &&
+           input_len > 0 &&
+           output_data != NULL &&
+           max_output_len > 0);
+
+
+    adiosLz4Size_t result = LZ4_decompress_fast_continue(stream, input_data, output_data, max_output_len);
+
+    *decoded_byte = 0;
+    if (result > 0)
+    {
+        *decoded_byte = result;
+    }
+
+    return result <= 0;
+}
+
+int adios_transform_lz4_generate_read_subrequests(adios_transform_read_request *reqgroup,
+                                                  adios_transform_pg_read_request *pg_reqgroup)
+{
+    void *buf = malloc(pg_reqgroup->raw_var_length);
+    assert(buf);
+    adios_transform_raw_read_request *subreq = adios_transform_raw_read_request_new_whole_pg(pg_reqgroup, buf);
+    adios_transform_raw_read_request_append(pg_reqgroup, subreq);
+    return 0;
+}
+
+/* Do nothing for individual subrequest */
+adios_datablock * adios_transform_lz4_subrequest_completed(adios_transform_read_request *reqgroup,
+                                                           adios_transform_pg_read_request *pg_reqgroup,
+                                                           adios_transform_raw_read_request *completed_subreq)
+{
+    return NULL;
+}
+
+adios_datablock * adios_transform_lz4_pg_reqgroup_completed(adios_transform_read_request *reqgroup,
+                                                            adios_transform_pg_read_request *completed_pg_reqgroup)
+{
+    uint64_t input_size = (uint64_t) completed_pg_reqgroup->raw_var_length;
+    char* input_buff = (char*) (completed_pg_reqgroup->subreqs->data);
+
+    // number of full chunks
+    adiosLz4Size_t num_chunks = *((adiosLz4Size_t*) completed_pg_reqgroup->transform_metadata);
+    // compressed size of the last chunk
+    adiosLz4Size_t compressed_size_last_chunk = *((adiosLz4Size_t*) (completed_pg_reqgroup->transform_metadata + sizeof (adiosLz4Size_t)));
+
+    // flag to mark compressed data (0 means not compressed)
+    int is_compressed = 1;
+    if (num_chunks == 0 && compressed_size_last_chunk == 0)
+        is_compressed = 0;
+
+    /* size of data after compression */
+    uint64_t uncompressed_size = adios_get_type_size(reqgroup->transinfo->orig_type, "");
+    int d = 0;
+    for (d = 0; d < reqgroup->transinfo->orig_ndim; d++)
+    {
+        uncompressed_size *= (uint64_t) (completed_pg_reqgroup->orig_varblock->count[d]);
+    }
+
+    char* output_buff = (char*) malloc(uncompressed_size);
+    if (!output_buff)
+    {
+        log_error("Out of memory allocating %" PRIu64 " bytes in lz4 transform (read)\n", uncompressed_size);
+        return NULL;
+    }
+
+    LZ4_streamDecode_t lz4StreamDecode_body = {0};
+    LZ4_streamDecode_t* lz4StreamDecode = &lz4StreamDecode_body;
+
+    /* offset inside the input buffer */
+    uint64_t input_offset = 0;
+    /* count decompressed data size */
+    uint64_t actual_output_size = 0;
+
+    adiosLz4Size_t chunk = 0;
+    for (; (chunk < num_chunks || input_offset < input_size) && is_compressed; ++chunk)
+    { 
+        const char* in_ptr = input_buff + input_offset;
+        char* out_ptr = output_buff + actual_output_size;
+
+        adiosLz4Size_t max_output_size = ADIOS_LZ4_MAX_INPUT_SIZE;
+        // handle the last not full chunk
+        if (chunk >= num_chunks)
+            max_output_size = uncompressed_size - actual_output_size;
+
+        adiosLz4Size_t max_chunk_size = LZ4_compressBound(max_output_size);
+        adiosLz4Size_t decoded_bytes = 0;
+        int rtn = adios_transform_lz4_decompress(lz4StreamDecode, in_ptr, max_chunk_size,
+                                                 out_ptr, max_output_size, &decoded_bytes);
+        /* abort if decompression failed */
+        if (0 != rtn)
+        {
+            return NULL;
+        }
+        actual_output_size += (uint64_t) max_output_size;
+        input_offset += (uint64_t) decoded_bytes;
+    }
+
+    if (is_compressed == 0)
+    {
+        memcpy(output_buff, input_buff, input_size);
+        actual_output_size = input_size;
+        input_offset += input_size;
+    }
+    
+    assert(input_offset == input_size);
+    assert(actual_output_size == uncompressed_size);
+
+    return adios_datablock_new_whole_pg(reqgroup, completed_pg_reqgroup, output_buff);
+}
+
+adios_datablock * adios_transform_lz4_reqgroup_completed(adios_transform_read_request *completed_reqgroup)
+{
+    return NULL;
+}
+
+
+#else
+
+DECLARE_TRANSFORM_READ_METHOD_UNIMPL(lz4);
+
+#endif
diff --git a/src/transforms/adios_transform_lz4_write.c b/src/transforms/adios_transform_lz4_write.c
new file mode 100644
index 0000000..e67a0ba
--- /dev/null
+++ b/src/transforms/adios_transform_lz4_write.c
@@ -0,0 +1,278 @@
+/*
+ * adios_transform_lz4_write.c
+ *
+ * 	Author: Rene Widera
+ * 	Contact: r.widera at hzdr.de
+ *
+ *  This code based on `adios_transform_zlib_write.c`.
+ */
+
+#include <stdint.h>
+#include <inttypes.h>
+#include <assert.h>
+#include <limits.h>
+#include <sys/time.h>
+
+#include "core/adios_logger.h"
+#include "core/transforms/adios_transforms_common.h"
+#include "core/transforms/adios_transforms_write.h"
+#include "core/transforms/adios_transforms_hooks_write.h"
+#include "core/transforms/adios_transforms_util.h"
+
+#ifdef LZ4
+
+#include <lz4.h>
+#include "adios_transform_lz4_common.h"
+
+
+/** compress data with LZ4
+ * 
+ * @param stream [in|out] LZ4 stream object
+ * @param input_data [in] data to compress
+ * @param input_len size of the input data (in byte)
+ * @param output_data [out] buffer for the compressed output
+ * @param max_output_len size of the output buffer (in byte)
+ * @param compressed_size [out] number of bytes after compression
+ * @param compress_level LZ4 compression level
+ * @return zero (0) if something goes wrong else non zero
+ */
+static int adios_transform_lz4_compress(LZ4_stream_t* stream,
+                                              const char* input_data,
+                                              const adiosLz4Size_t input_len,
+                                              char* output_data,
+                                              const adiosLz4Size_t max_output_len,
+                                              adiosLz4Size_t* compressed_size,
+                                              int compress_level)
+{
+    assert(stream != NULL &&
+           input_data != NULL &&
+           input_len > 0 &&
+           output_data != NULL &&
+           max_output_len > 0 &&
+           compressed_size != NULL);
+
+
+    adiosLz4Size_t result = LZ4_compress_fast_continue(stream,
+                                                       input_data,
+                                                       output_data,
+                                                       input_len,
+                                                       max_output_len,
+                                                       compress_level);
+    *compressed_size = 0;
+    if (result > 0)
+    {
+        *compressed_size = result;
+    }
+
+    return result <= 0;
+}
+
+uint16_t adios_transform_lz4_get_metadata_size(struct adios_transform_spec *transform_spec)
+{
+    /* number of chunks with max size and compressed size of the last chunk 
+     * if both are zero the data are uncompressed
+     */
+    return (sizeof (adiosLz4Size_t) + sizeof (adiosLz4Size_t));
+}
+
+/** calculate the maximum data overhead for non compressible data
+ * 
+ * @param input_size data size in byte of the input data
+ * @param n_full_chunks [out] number of full chunks needed to compress the data (NULL is allowed)
+ * @param max_size_last_chunks [out] maximum size in bytes needed to compress the last not full chunk (NULL is allowed)
+ * @return overhead of bytes for non compressible data
+ */
+uint64_t adios_transform_lz4_max_overhead(const uint64_t input_size, uint64_t* n_full_chunks, uint64_t* max_size_last_chunks)
+{
+    const uint64_t max_input_per_chunk = ADIOS_LZ4_MAX_INPUT_SIZE;
+    const uint64_t num_full_chunks = input_size / max_input_per_chunk;
+    const uint64_t size_last_chunk = input_size % max_input_per_chunk;
+
+    const uint64_t max_output_per_chunk = LZ4_compressBound(ADIOS_LZ4_MAX_INPUT_SIZE);
+    const uint64_t max_output_last_chunk = LZ4_compressBound(size_last_chunk);
+
+    if (n_full_chunks)
+        *n_full_chunks = num_full_chunks;
+    if (max_size_last_chunks)
+        *max_size_last_chunks = max_output_last_chunk;
+
+    const uint64_t full_size = max_output_per_chunk * num_full_chunks + max_output_last_chunk;
+    return full_size - input_size;
+}
+
+void adios_transform_lz4_transformed_size_growth(
+                                                 const struct adios_var_struct *var, const struct adios_transform_spec *transform_spec,
+                                                 uint64_t *constant_factor, double *linear_factor, double *capped_linear_factor, uint64_t *capped_linear_cap)
+{
+    struct adios_var_struct *var_no_const = (struct adios_var_struct *) var;
+    const uint64_t input_size = adios_transform_get_pre_transform_var_size(var_no_const);
+
+    const uint64_t max_overhead = adios_transform_lz4_max_overhead(input_size, NULL, NULL);
+
+    *constant_factor = max_overhead;
+}
+
+int adios_transform_lz4_apply(struct adios_file_struct *fd,
+                              struct adios_var_struct *var,
+                              uint64_t *transformed_len,
+                              int use_shared_buffer,
+                              int *wrote_to_shared_buffer)
+{
+    // Assume this function is only called for LZ4 transform type
+    assert(var->transform_type == adios_transform_lz4);
+
+    // Get the input data and data length
+    const uint64_t input_size = adios_transform_get_pre_transform_var_size(var);
+    const char *input_buff = (char*) var->data;
+
+    int compress_level = 1;
+    /* input size under this bound (in byte) would not compressed */
+    uint64_t threshold_size = 128;
+
+    int num_param = var->transform_spec->param_count;
+    int p;
+    for (p = 0; p < num_param; ++p)
+    {
+        /* Which zfp mode to use */
+        const struct adios_transform_spec_kv_pair * const param = &var->transform_spec->params[p];
+        if (strcmp(param->key, "lvl") == 0)
+        {
+            compress_level = atoi(param->value);
+            if (compress_level < 1)
+                compress_level = 1;
+        }
+        else if (strcmp(param->key, "threshold") == 0)
+        {
+            threshold_size = atoi(param->value);
+            if (threshold_size < 128)
+                threshold_size = 128;
+        }
+        else
+        {
+            adios_error(err_invalid_argument, "An unknown LZ4 compression mode '%s' was specified for variable %s. "
+                        "Available choices are: lvl, threshold.\n",
+                        param->key, var->name);
+            return 0;
+        }
+    }
+    // number of full chunks
+    uint64_t num_chunks = 0;
+    // maximum size for the last not full chunk
+    uint64_t max_size_last_chunk = 0;
+    const uint64_t max_overhead = adios_transform_lz4_max_overhead(input_size, &num_chunks, &max_size_last_chunk);
+
+    // maximum size (in byte) for the full output buffer
+    uint64_t output_size = input_size + max_overhead;
+    char* output_buff = NULL;
+
+    if (use_shared_buffer) // If shared buffer is permitted, serialize to there
+    {
+        *wrote_to_shared_buffer = 1;
+        if (!shared_buffer_reserve(fd, output_size))
+        {
+            log_error("Out of memory allocating %" PRIu64 " bytes for %s for lz4 transform\n", output_size, var->name);
+            return 0;
+        }
+
+        // Write directly to the shared buffer
+        output_buff = (char*) (fd->buffer + fd->offset);
+    }
+    else // Else, fall back to var->adata memory allocation
+    {
+        *wrote_to_shared_buffer = 0;
+        output_buff = (char*) malloc(output_size);
+        if (!output_buff)
+        {
+            log_error("Out of memory allocating %" PRIu64 " bytes for %s for lz4 transform\n", output_size, var->name);
+            return 0;
+        }
+    }
+
+    // temporary data for lz4 stream compression
+    LZ4_stream_t lz4Stream_body = {0};
+    LZ4_stream_t* lz4Stream = &lz4Stream_body;
+
+    uint64_t actual_output_size = 0;
+    uint64_t input_offset = 0;
+
+    int disable_compression = 0;
+    if (input_size < threshold_size)
+    {
+        /* disable compression */
+        disable_compression = 1;
+    }
+
+    adiosLz4Size_t compressed_size_last_chunk = 0;
+    uint64_t chunk = 0;
+    for (; (chunk < num_chunks || input_offset < input_size) && !disable_compression; ++chunk)
+    {
+        adiosLz4Size_t max_intput_size = ADIOS_LZ4_MAX_INPUT_SIZE;
+        // handle the last not full chunk
+        if (chunk >= num_chunks)
+            max_intput_size = input_size - input_offset;
+        adiosLz4Size_t max_chunk_size = LZ4_compressBound(max_intput_size);
+
+        const char* in_ptr = input_buff + input_offset;
+        char* out_ptr = output_buff + actual_output_size;
+
+        adiosLz4Size_t compressed_size = 0;
+        disable_compression = adios_transform_lz4_compress(lz4Stream, in_ptr,
+                                                           max_intput_size,
+                                                           out_ptr, max_chunk_size,
+                                                           &compressed_size,
+                                                           compress_level);
+
+        if (chunk >= num_chunks)
+            compressed_size_last_chunk = compressed_size;
+
+        /* add size to written output data */
+        input_offset += (uint64_t) max_intput_size;
+        actual_output_size += (int64_t) compressed_size;
+    }
+
+    if (!disable_compression)
+        assert(input_offset == input_size);
+
+    if (disable_compression)
+    {
+        memcpy(output_buff, input_buff, input_size);
+        actual_output_size = input_size;
+    }
+
+    // Wrap up, depending on buffer mode
+    if (use_shared_buffer)
+    {
+        shared_buffer_mark_written(fd, actual_output_size);
+    }
+    else
+    {
+        var->adata = output_buff;
+        var->data_size = actual_output_size;
+        var->free_data = adios_flag_yes;
+    }
+
+    if (var->transform_metadata && var->transform_metadata_len > 0)
+    {
+        adiosLz4Size_t n_chunks = num_chunks;
+
+        if (disable_compression)
+        {
+            n_chunks = 0;
+            compressed_size_last_chunk = 0;
+        }
+        /* store number of full chunks */
+        memcpy((char*) var->transform_metadata, &n_chunks, sizeof (adiosLz4Size_t));
+        /* size (in byte) of the last not full chunk */
+        memcpy((char*) var->transform_metadata + sizeof (adiosLz4Size_t), &compressed_size_last_chunk, sizeof (adiosLz4Size_t));
+    }
+
+    // return the size of the data buffer
+    *transformed_len = actual_output_size; 
+    return 1;
+}
+
+#else
+
+DECLARE_TRANSFORM_WRITE_METHOD_UNIMPL(lz4)
+
+#endif
diff --git a/src/transforms/adios_transform_sz_read.c b/src/transforms/adios_transform_sz_read.c
new file mode 100644
index 0000000..ce67d03
--- /dev/null
+++ b/src/transforms/adios_transform_sz_read.c
@@ -0,0 +1,122 @@
+#include <stdlib.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <assert.h>
+
+#include "util.h"
+#include "adios_logger.h"
+#include "adios_transforms_hooks_read.h"
+#include "adios_transforms_reqgroup.h"
+
+#ifdef HAVE_SZ
+
+#include "sz.h"
+
+int adios_transform_sz_is_implemented (void) {return 1;}
+
+int adios_transform_sz_generate_read_subrequests(adios_transform_read_request *reqgroup,
+                                                 adios_transform_pg_read_request *pg_reqgroup)
+{
+    //log_debug("function: %s\n", __FUNCTION__);
+    void *buf = malloc(pg_reqgroup->raw_var_length);
+    adios_transform_raw_read_request *subreq = adios_transform_raw_read_request_new_whole_pg(pg_reqgroup, buf);
+    adios_transform_raw_read_request_append(pg_reqgroup, subreq);
+    return 0;
+}
+
+// Do nothing for individual subrequest
+adios_datablock * adios_transform_sz_subrequest_completed(adios_transform_read_request *reqgroup,
+                                                          adios_transform_pg_read_request *pg_reqgroup,
+                                                          adios_transform_raw_read_request *completed_subreq)
+{
+    //log_debug("function: %s\n", __FUNCTION__);
+    return NULL;
+}
+
+
+
+adios_datablock * adios_transform_sz_pg_reqgroup_completed(adios_transform_read_request *reqgroup,
+                                                           adios_transform_pg_read_request *completed_pg_reqgroup)
+{
+    //log_debug("function: %s\n", __FUNCTION__);
+    int raw_size = (int) completed_pg_reqgroup->raw_var_length;
+    unsigned char *raw_buff = completed_pg_reqgroup->subreqs->data;
+
+    // Get type info
+    int dtype;
+    switch (reqgroup->transinfo->orig_type)
+    {
+        case adios_double:
+            dtype = SZ_DOUBLE;
+            break;
+        case adios_real:
+            dtype = SZ_FLOAT;
+            break;
+        default:
+            adios_error(err_transform_failure, "No supported data type\n");
+            return NULL;
+            break;
+    }
+
+    // Get dimension info
+    int ndims = reqgroup->transinfo->orig_ndim;
+    if (ndims > 5)
+    {
+        adios_error(err_transform_failure, "No more than 5 dimension is supported.\n");
+        return NULL;
+    }
+
+    int r[5] = {0,0,0,0,0};
+    int i = 0;
+    for(i = 0; i < ndims; i++)
+    {
+        uint64_t dsize = (uint64_t)(completed_pg_reqgroup->orig_varblock->count[i]);
+        r[ndims-i-1] = dsize;
+    }
+
+    void* orig_buff;
+    orig_buff = SZ_decompress(dtype, raw_buff, raw_size, r[4], r[3], r[2], r[1], r[0]);
+
+    if (dtype == SZ_FLOAT)
+    {
+        log_debug("%10s: %g %g %g %g %g ... \n", "out",
+                  ((float*)orig_buff)[0], ((float*)orig_buff)[1], ((float*)orig_buff)[2], ((float*)orig_buff)[3], ((float*)orig_buff)[4]);
+    }
+    else if (dtype == SZ_DOUBLE)
+    {
+        log_debug("%10s: %g %g %g %g %g ... \n", "out",
+                  ((double*)orig_buff)[0], ((double*)orig_buff)[1], ((double*)orig_buff)[2], ((double*)orig_buff)[3], ((double*)orig_buff)[4]);
+    }
+    //log_debug("=== SZ decompress ===\n");
+    log_debug("%s: %d\n", "SZ dtype", dtype);
+    log_debug("%s: %d\n", "SZ raw_size", raw_size);
+    /*
+    log_debug("%s: %d %d %d %d %d ... %d %d %d %d %d\n", "SZ out_buff",
+              raw_buff[0], raw_buff[1], raw_buff[2], raw_buff[3], raw_buff[4],
+              raw_buff[raw_size-5], raw_buff[raw_size-4], raw_buff[raw_size-3], raw_buff[raw_size-2], raw_buff[raw_size-1]);
+    int sum = 0;
+    for (i=0; i<raw_size; i++)
+    {
+        sum += raw_buff[i];
+    }
+    log_debug("%s: %d\n", "SZ sum", sum);
+     */
+    log_debug("%s: %d %d %d %d %d\n", "SZ dim", r[0], r[1], r[2], r[3], r[4]);
+    //log_debug("=====================\n");
+
+    return adios_datablock_new_whole_pg(reqgroup, completed_pg_reqgroup, orig_buff);
+}
+
+// Do nothing for the full read request complete (typical)
+adios_datablock * adios_transform_sz_reqgroup_completed(adios_transform_read_request *completed_reqgroup)
+{
+    //log_debug("function: %s\n", __FUNCTION__);
+    return NULL;
+}
+
+
+#else
+
+DECLARE_TRANSFORM_READ_METHOD_UNIMPL(sz);
+
+#endif
diff --git a/src/transforms/adios_transform_sz_write.c b/src/transforms/adios_transform_sz_write.c
new file mode 100644
index 0000000..fca49b0
--- /dev/null
+++ b/src/transforms/adios_transform_sz_write.c
@@ -0,0 +1,343 @@
+/*
+ * adios_transform_sz_write.c
+ *
+ * 	Author: Jong Choi
+ * 	Contact: choij at ornl.gov
+ */
+
+#include <stdint.h>
+#include <assert.h>
+#include <limits.h>
+#include <sys/time.h>
+
+#include "adios_logger.h"
+#include "adios_transforms_common.h"
+#include "adios_transforms_write.h"
+#include "adios_transforms_hooks_write.h"
+#include "adios_transforms_util.h"
+
+#ifdef HAVE_SZ
+
+#include "sz.h"
+
+typedef unsigned int uint;
+
+typedef struct
+{
+    int r[5];
+} sz_info_t;
+
+uint16_t adios_transform_sz_get_metadata_size(struct adios_transform_spec *transform_spec)
+{
+    //log_debug("function: %s\n", __FUNCTION__);
+    return 0; // Set amount of transform-internal metadata space to allocate
+}
+
+void adios_transform_sz_transformed_size_growth(const struct adios_var_struct *var, const struct adios_transform_spec *transform_spec,
+                                                uint64_t *constant_factor, double *linear_factor, double *capped_linear_factor, uint64_t *capped_linear_cap)
+{
+    //log_debug("function: %s\n", __FUNCTION__);
+}
+
+int adios_transform_sz_apply(struct adios_file_struct *fd,
+                             struct adios_var_struct *var,
+                             uint64_t *transformed_len,
+                             int use_shared_buffer,
+                             int *wrote_to_shared_buffer)
+{
+    //log_debug("function: %s\n", __FUNCTION__);
+    //log_debug("use_shared_buffer: %d\n", use_shared_buffer);
+
+    // Get the input data and data length
+    const uint64_t input_size = adios_transform_get_pre_transform_var_size(var);
+    const void *input_buff = var->data;
+
+    sz_params sz;
+    memset(&sz, 0, sizeof(sz_params));
+    sz.max_quant_intervals = 65536;
+    sz.quantization_intervals = 0;
+    sz.dataEndianType = LITTLE_ENDIAN_DATA;
+    sz.sysEndianType = LITTLE_ENDIAN_DATA;
+    sz.sol_ID = SZ;
+    sz.layers = 1;
+    sz.sampleDistance = 100;
+    sz.predThreshold = 0.99;
+    sz.offset = 0;
+    sz.szMode = SZ_BEST_COMPRESSION; //SZ_BEST_SPEED; //SZ_BEST_COMPRESSION;
+    sz.gzipMode = 1;
+    sz.errorBoundMode = ABS;
+    sz.absErrBound = 1E-4;
+    sz.relBoundRatio = 1E-3;
+    sz.pw_relBoundRatio = 1E-5;
+    sz.segment_size = 32;
+
+    unsigned char *bytes;
+    int outsize;
+    int r[5] = {0,0,0,0,0};
+
+    /* SZ parameters */
+    int use_configfile = 0;
+    char *sz_configfile = NULL;
+    struct adios_transform_spec_kv_pair* param;
+    int i = 0;
+    if (adios_verbose_level>7) log_debug("param_count: %d\n", var->transform_spec->param_count);
+    for (i=0; i<var->transform_spec->param_count; i++)
+    {
+        param = &(var->transform_spec->params[i]);
+        if (adios_verbose_level>7) log_debug("param: %s %s\n", param->key, param->value);
+        if (strcmp(param->key, "init") == 0)
+        {
+            use_configfile = 1;
+            sz_configfile = strdup(param->value);
+        }
+        else if (strcmp(param->key, "max_quant_intervals") == 0)
+        {
+            sz.max_quant_intervals = atoi(param->value);
+        }
+        else if (strcmp(param->key, "quantization_intervals") == 0)
+        {
+            sz.quantization_intervals = atoi(param->value);
+        }
+        else if (strcmp(param->key, "dataEndianType") == 0)
+        {
+            sz.dataEndianType = atoi(param->value);
+        }
+        else if (strcmp(param->key, "sysEndianType") == 0)
+        {
+            sz.sysEndianType = atoi(param->value);
+        }
+        else if (strcmp(param->key, "sol_ID") == 0)
+        {
+            sz.sol_ID = atoi(param->value);
+        }
+        else if (strcmp(param->key, "layers") == 0)
+        {
+            sz.layers = atoi(param->value);
+        }
+        else if (strcmp(param->key, "sampleDistance") == 0)
+        {
+            sz.sampleDistance = atoi(param->value);
+        }
+        else if (strcmp(param->key, "predThreshold") == 0)
+        {
+            sz.predThreshold = atof(param->value);
+        }
+        else if (strcmp(param->key, "offset") == 0)
+        {
+            sz.offset = atoi(param->value);
+        }
+        else if (strcmp(param->key, "szMode") == 0)
+        {
+            int szMode = SZ_BEST_SPEED;
+            if (strcmp(param->value, "SZ_BEST_SPEED") == 0)
+            {
+              szMode = SZ_BEST_SPEED;
+            }
+            else if (strcmp(param->value, "SZ_BEST_COMPRESSION") == 0)
+            {
+              szMode = SZ_BEST_COMPRESSION;
+            }
+            else if (strcmp(param->value, "SZ_DEFAULT_COMPRESSION") == 0)
+            {
+              szMode = SZ_DEFAULT_COMPRESSION;
+            }
+            else
+            {
+              log_warn("An unknown szMode: %s\n", param->value);
+            }
+            sz.szMode = szMode;
+        }
+        else if (strcmp(param->key, "gzipMode") == 0)
+        {
+            sz.gzipMode = atoi(param->value);
+        }
+        else if (strcmp(param->key, "errorBoundMode") == 0)
+        {
+            int errorBoundMode = ABS;
+            if (strcmp(param->value, "ABS") == 0)
+            {
+              errorBoundMode = ABS;
+            }
+            else if (strcmp(param->value, "REL") == 0)
+            {
+              errorBoundMode = REL;
+            }
+            else if (strcmp(param->value, "ABS_AND_REL") == 0)
+            {
+              errorBoundMode = ABS_AND_REL;
+            }
+            else if (strcmp(param->value, "ABS_OR_REL") == 0)
+            {
+              errorBoundMode = ABS_OR_REL;
+            }
+            else if (strcmp(param->value, "PW_REL") == 0)
+            {
+              errorBoundMode = PW_REL;
+            }
+            else
+            {
+              log_warn("An unknown errorBoundMode: %s\n", param->value);
+            }
+            sz.errorBoundMode = errorBoundMode;
+        }
+        else if (strcmp(param->key, "absErrBound") == 0)
+        {
+            sz.absErrBound = atof(param->value);
+        }
+        else if (strcmp(param->key, "relBoundRatio") == 0)
+        {
+            sz.relBoundRatio = atof(param->value);
+        }
+        else if (strcmp(param->key, "pw_relBoundRatio") == 0)
+        {
+            sz.pw_relBoundRatio = atof(param->value);
+        }
+        else if (strcmp(param->key, "segment_size") == 0)
+        {
+            sz.segment_size = atoi(param->value);
+        }
+        else if (!strcmp(param->key, "abs") || !strcmp(param->key, "absolute") || !strcmp(param->key, "accuracy"))
+        {
+            sz.errorBoundMode = ABS;
+            sz.absErrBound = atof(param->value);
+        }
+        else if (!strcmp(param->key, "rel") || !strcmp(param->key, "relative"))
+        {
+            sz.errorBoundMode = REL;
+            sz.relBoundRatio = atof(param->value);
+        }
+        else
+        {
+            log_warn("An unknown SZ parameter: %s\n", param->key);
+        }
+    }
+
+    if (use_configfile)
+    {
+        log_debug("%s: %s\n", "SZ config", sz_configfile);
+        SZ_Init(sz_configfile);
+        free(sz_configfile);
+    }
+    else
+    {
+        if (adios_verbose_level>7)
+        {
+            log_debug("%s: %d\n", "sz.max_quant_intervals", sz.max_quant_intervals);
+            log_debug("%s: %d\n", "sz.quantization_intervals", sz.quantization_intervals);
+            log_debug("%s: %d\n", "sz.dataEndianType", sz.dataEndianType);
+            log_debug("%s: %d\n", "sz.sysEndianType", sz.sysEndianType);
+            log_debug("%s: %d\n", "sz.sol_ID", sz.sol_ID);
+            log_debug("%s: %d\n", "sz.layers", sz.layers);
+            log_debug("%s: %d\n", "sz.sampleDistance", sz.sampleDistance);
+            log_debug("%s: %g\n", "sz.predThreshold", sz.predThreshold);
+            log_debug("%s: %d\n", "sz.offset", sz.offset);
+            log_debug("%s: %d\n", "sz.szMode", sz.szMode);
+            log_debug("%s: %d\n", "sz.gzipMode", sz.gzipMode);
+            log_debug("%s: %d\n", "sz.errorBoundMode", sz.errorBoundMode);
+            log_debug("%s: %g\n", "sz.absErrBound", sz.absErrBound);
+            log_debug("%s: %g\n", "sz.relBoundRatio", sz.relBoundRatio);
+            log_debug("%s: %g\n", "sz.pw_relBoundRatio", sz.pw_relBoundRatio);
+            log_debug("%s: %d\n", "sz.segment_size", sz.segment_size);
+        }
+        SZ_Init_Params(&sz);
+    }
+
+    // Get type info
+    int dtype;
+    switch (var->pre_transform_type)
+    {
+        case adios_double:
+            dtype = SZ_DOUBLE;
+            break;
+        case adios_real:
+            dtype = SZ_FLOAT;
+            break;
+        default:
+            adios_error(err_transform_failure, "No supported data type\n");
+            return -1;
+            break;
+    }
+
+    // Get dimension info
+    struct adios_dimension_struct* d = var->pre_transform_dimensions;
+    int ndims = (uint) count_dimensions(d);
+    //log_debug("ndims: %d\n", ndims);
+    if (ndims > 5)
+    {
+        adios_error(err_transform_failure, "No more than 5 dimension is supported.\n");
+        return -1;
+    }
+
+    // r[0] is the fastest changing dimension and r[4] is the lowest changing dimension
+    // In C, r[0] is the last dimension. In Fortran, r[0] is the first dimension
+    for (i=0; i<ndims; i++)
+    {
+        uint dsize = (uint) adios_get_dim_value(&d->dimension);
+        if (fd->group->adios_host_language_fortran == adios_flag_yes)
+            r[i] = dsize;
+        else
+            r[ndims-i-1] = dsize;
+        d = d->next;
+    }
+
+    bytes = SZ_compress (dtype, (void *) input_buff, &outsize,
+                         r[4], r[3], r[2], r[1], r[0]);
+
+    unsigned char *raw_buff = (unsigned char*) bytes;
+
+    int raw_size = outsize;
+    //log_debug("=== SZ compress ===\n");
+    log_debug("%s: %d\n", "SZ dtype", dtype);
+    log_debug("%s: %d\n", "SZ out_size", raw_size);
+    /*
+    log_debug("%s: %d %d %d %d %d ... %d %d %d %d %d\n", "SZ out_buff",
+              raw_buff[0], raw_buff[1], raw_buff[2], raw_buff[3], raw_buff[4],
+              raw_buff[raw_size-5], raw_buff[raw_size-4], raw_buff[raw_size-3], raw_buff[raw_size-2], raw_buff[raw_size-1]);
+    int sum = 0;
+    for (i=0; i<raw_size; i++)
+    {
+        sum += raw_buff[i];
+    }
+    log_debug("%s: %d\n", "SZ sum", sum);
+     */
+    log_debug("%s: %d %d %d %d %d\n", "SZ dim", r[0], r[1], r[2], r[3], r[4]);
+    //log_debug("===================\n");
+
+    // Output
+    uint64_t output_size = outsize/* Compute how much output size we need */;
+    void* output_buff;
+
+    if (use_shared_buffer) {
+        // If shared buffer is permitted, serialize to there
+        assert(shared_buffer_reserve(fd, output_size));
+
+        // Write directly to the shared buffer
+        output_buff = fd->buffer + fd->offset;
+        memcpy(output_buff, bytes, outsize);
+    } else { // Else, fall back to var->adata memory allocation
+        output_buff = bytes;
+        //assert(output_buff);
+    }
+    *wrote_to_shared_buffer = use_shared_buffer;
+
+    // Do transform from input_buff into output_buff, and update output_size to the true output size
+
+    // Wrap up, depending on buffer mode
+    if (*wrote_to_shared_buffer) {
+        shared_buffer_mark_written(fd, output_size);
+    } else {
+        var->adata = output_buff;
+        var->data_size = output_size;
+        var->free_data = adios_flag_yes;
+    }
+
+    *transformed_len = output_size; // Return the size of the data buffer
+    SZ_Finalize();
+    return 1;
+}
+
+#else
+
+DECLARE_TRANSFORM_WRITE_METHOD_UNIMPL(sz)
+
+#endif
diff --git a/src/transforms/transform_plugins.h b/src/transforms/transform_plugins.h
index a0b97d9..d7c7135 100644
--- a/src/transforms/transform_plugins.h
+++ b/src/transforms/transform_plugins.h
@@ -12,4 +12,5 @@ REGISTER_TRANSFORM_PLUGIN(isobar, "isobar", "ncsu-isobar", "ISOBAR compression")
 REGISTER_TRANSFORM_PLUGIN(aplod, "aplod", "ncsu-aplod", "APLOD byte-columnar precision-level-of-detail access format")
 REGISTER_TRANSFORM_PLUGIN(alacrity, "alacrity", "ncsu-alacrity", "ALACRITY indexing")
 REGISTER_TRANSFORM_PLUGIN(zfp, "zfp", "zfp", "zfp compression")
-
+REGISTER_TRANSFORM_PLUGIN(sz, "sz", "sz", "sz compression")
+REGISTER_TRANSFORM_PLUGIN(lz4, "lz4", "lz4", "lz4 compression")
diff --git a/src/write/adios_flexpath.c b/src/write/adios_flexpath.c
index e462074..4e6fa7b 100644
--- a/src/write/adios_flexpath.c
+++ b/src/write/adios_flexpath.c
@@ -12,11 +12,13 @@
 #include <math.h>
 #include <string.h>
 #include <errno.h>
+#include <stdarg.h>
 
 #include <pthread.h>
 
 // xml parser
 #include <mxml.h>
+#include <cod.h>
 
 // add by Kimmy 10/15/2012
 #include <sys/types.h>
@@ -36,24 +38,25 @@
 #include "core/buffer.h"
 #include "core/util.h"
 #include "core/adios_logger.h"
+#include "core/globals.h"
+#include "core/adiost_callback_internal.h"
 
 #if HAVE_FLEXPATH==1
 
 // // evpath libraries
 #include <evpath.h>
-#include <cod.h>
 #define FLEXPATH_SIDE "WRITER"
 #include "core/flexpath.h"
 #include <sys/queue.h>
 
 /************************* Structure and Type Definitions ***********************/
 // used for messages in the control queue
-typedef enum {VAR=0, DATA_FLUSH, OPEN, CLOSE, INIT, EVGROUP_FLUSH, DATA_BUFFER, FINALIZE} FlexpathMessageType;
+typedef enum {VAR=0, DATA_FLUSH, OPEN, CLOSE, DATA_BUFFER, FINALIZE} FlexpathMessageType;
 
 // maintains connection information
 typedef struct _flexpath_stone {
-    int myNum;
-    int theirNum;
+    int bridge_stoneID;
+    int reader_stoneID;
     int step;
     int opened;
     int created;
@@ -103,11 +106,35 @@ typedef struct _flexpath_fm_structure {
     int size;
     unsigned char *buffer;
     FMFormat ioFormat;
-    attr_list attrList;	
+    int nattrs;
     LIST_HEAD(tableHead, _flexpath_name_table) nameList;
     LIST_HEAD(dims, _flexpath_dim_names) dimList;
 } FlexpathFMStructure;
 
+struct _flexpath_write_file_data;
+
+typedef struct _flexpath_per_subscriber_info {
+    CMConnection reader_0_conn;
+    uint64_t reader_file;
+    //We need to hold the full list somewhere, but this can be freed
+    int total_num_readers;
+    EVstone multiStone;
+    EVstone splitStone;
+    EVstone sinkStone;
+
+    EVsource dataSource;
+    EVsource scalarDataSource;
+    EVsource offsetSource;
+    EVsource finalizeSource;
+
+    int numBridges;
+    FlexpathStone* bridges;
+    int final_condition;
+
+    struct _flexpath_write_file_data *parent_file;
+
+} *subscriber_info;
+
 // information used per each flexpath file
 typedef struct _flexpath_write_file_data {
     // MPI stuff
@@ -115,42 +142,19 @@ typedef struct _flexpath_write_file_data {
     int rank;
     int size;
     int host_language;
-    // EVPath stuff
-    EVstone multiStone;
-    EVstone sinkStone;
-
-    EVsource dataSource;
-    EVsource offsetSource;
-    EVsource dropSource;
-    EVsource opSource;
-    EVsource stepSource;
 
-    EVaction multi_action;
-    FlexpathStone* bridges;
-    int numBridges;
-    attr_list attrs;
 
     // server state
     int maxQueueSize;
-    int openCount;
-    int readerStep;
+    pthread_mutex_t queue_size_mutex;
+    pthread_cond_t queue_size_condition;
+
     int writerStep; // how many times has the writer called closed?
     int finalized; // have we finalized?
-    int use_ctrl_thread;
 
     FlexpathFMStructure* fm;
-    FlexpathVarNode* askedVars;
-    FlexpathVarNode* writtenVars;
-    FlexpathVarNode* formatVars;
-    FlexpathQueueNode* controlQueue;
-    FlexpathQueueNode* dataQueue;   
-    pthread_mutex_t openMutex;
-    pthread_mutex_t controlMutex;
-    pthread_mutex_t dataMutex;
-    pthread_cond_t controlCondition;
-    pthread_cond_t dataCondition; //fill
-    pthread_t ctrl_thr_id;    
 
+    subscriber_info subscribers;
     // global array distribution data
     int globalCount;
     evgroup *gp;
@@ -158,9 +162,11 @@ typedef struct _flexpath_write_file_data {
     // for maintaining open file list
     struct _flexpath_write_file_data* next;
     char* name;
+    void *adios_file_data;
 
     // general
     int verbose;
+    int failed;   /* set if all output stones are closed */
 } FlexpathWriteFileData;
 
 typedef struct _flexpath_write_data {
@@ -170,16 +176,17 @@ typedef struct _flexpath_write_data {
 } FlexpathWriteData;
 
 /************************* Global Variable Declarations *************************/
-// used for sanitizing names
-#define OPLEN 7
-static char opList[OPLEN] = { '+', '-', '*', '/', '.', '>', '<' };
-static char *opRepList[OPLEN] = { "_plus_", "_minus_", "_mult_", "_div_", "_dot_", "_greater_", "_less_" };
+static atom_t RANK_ATOM = -1;
+static atom_t TIMESTEP_ATOM = -1;
+static atom_t SCALAR_ATOM = -1;
+static atom_t CM_TRANSPORT = -1;
+static atom_t QUEUE_SIZE = -1;
+static atom_t NATTRS = -1;
 
 // used for global communication and data structures
 FlexpathWriteData flexpathWriteData;
 
 /**************************** Function Definitions *********************************/
-
 static void 
 reverse_dims(uint64_t *dims, int len)
 {
@@ -193,14 +200,14 @@ reverse_dims(uint64_t *dims, int len)
     }
 }
 
-char*
-resolve_path_name(char *path, char *name)
+static char*
+append_path_name(char *path, char *name)
 {
     char *fullname = NULL;
     if (name) {
         if (path) {
             if (strcmp(path, "")) {
-                fullname = malloc(strlen(path) + strlen(name) + 2);
+                fullname = malloc(strlen(path) + strlen(name) + 8);
                 strcpy(fullname, path);
                 strcat(fullname, "/");
                 strcat(fullname, name);
@@ -214,109 +221,6 @@ resolve_path_name(char *path, char *name)
     return NULL;
 }
 
-// add an attr for each dimension to an attr_list
-void 
-set_attr_dimensions(char* varName, char* altName, int numDims, attr_list attrs) 
-{
-    char atomName[200] = "";
-    char dimNum[10];
-    strcat(atomName, FP_DIM_ATTR_NAME);
-    strcat(atomName, "_");
-    strcat(atomName, varName);
-    strcat(atomName, "_");
-    sprintf(dimNum, "%d", numDims);
-    strcat(atomName, dimNum);
-    atom_t dimAtom = attr_atom_from_string(atomName);
-    add_string_attr(attrs, dimAtom, altName);
-    atomName[0] = '\0';
-    strcat(atomName, FP_NDIMS_ATTR_NAME);
-    strcat(atomName, "_");
-    strcat(atomName, altName);
-
-    atom_t ndimsAtom = attr_atom_from_string(atomName);
-    add_int_attr(attrs, ndimsAtom, 0);
-}
-
-
-attr_list 
-set_flush_id_atom(attr_list attrs, int value) 
-{
-    atom_t dst_atom = attr_atom_from_string("fp_flush_id");
-    int dst;
-    if (!get_int_attr(attrs, dst_atom, &dst)) {
-        add_int_attr(attrs, dst_atom, value);
-    }
-    set_int_attr(attrs, dst_atom, value);
-    return attrs;
-}
-
-// sets a size atom
-attr_list 
-set_size_atom(attr_list attrs, int value) 
-{
-    atom_t dst_atom = attr_atom_from_string("fp_size");
-    int size;
-    if (!get_int_attr(attrs, dst_atom, &size)) {
-        add_int_attr(attrs, dst_atom, value);
-    }
-    set_int_attr(attrs, dst_atom, value);
-    return attrs;
-}
-
-// sets a dst rank atom
-attr_list 
-set_dst_rank_atom(attr_list attrs, int value) 
-{
-    atom_t dst_atom = attr_atom_from_string("fp_dst_rank");
-    int dst;
-    if (!get_int_attr(attrs, dst_atom, &dst)) {
-        add_int_attr(attrs, dst_atom, value);
-    }
-    set_int_attr(attrs, dst_atom, value);
-    return attrs;
-}
-
-// sets a dst condition atom
-attr_list 
-set_dst_condition_atom(attr_list attrs, int condition)
-{
-    atom_t dst_atom = attr_atom_from_string("fp_dst_condition");
-    int dst;
-    if (!get_int_attr(attrs, dst_atom, &dst)) {
-	add_int_attr(attrs, dst_atom, condition);
-    }
-    set_int_attr(attrs, dst_atom, condition);
-    return attrs;
-}
-
-// free format packets once EVPath is finished with them
-
-void
-evgroup_msg_free(void *eventData, void *clientData)
-{
-    
-    /* evgroup *msg = (evgroup*)eventData; */
-    /* int num_vars = msg->num_vars; */
-    /* int i; */
-    /* for (i=0; i<num_vars; i++) { */
-    /* 	free(msg->vars[i].offsets); */
-    /* } */
-    /* free(msg); */
-}
-
-void
-drop_evgroup_msg_free(void *eventData, void *clientData)
-{
-    free(eventData);
-}
-
-void
-update_step_msg_free(void *eventData, void *clientData)
-{
-        update_step_msg *msg = (update_step_msg*)eventData;
-        free(msg);
-} 
-
 // free data packets once EVPath is finished with them
 void 
 data_free(void* eventData, void* clientData) 
@@ -326,124 +230,26 @@ data_free(void* eventData, void* clientData)
     free(eventData);
 }
 
-// free op packets once EVPath is finished with them
-void 
-op_free(void* eventData, void* clientData) 
-{
-//    fp_write_log("OP", "freeing an op message\n");
-    op_msg* op = (op_msg*) eventData;
-    if (op->file_name) {
-        free(op->file_name);
-    }
-    free(op);
-}
 
-// message queue count
-int 
-queue_count(FlexpathQueueNode** queue) 
-{
-    if (*queue==NULL) {
-        return 0;
-    }
-    int count = 1;
-    FlexpathQueueNode* current = *queue;
-    while (current && current->next) {
-        count++;
-        current = current->next;
-    }
-    return count;
-}
-
-// message queue add to head
-void 
-threaded_enqueue(
-    FlexpathQueueNode **queue, 
-    void* item, 
-    FlexpathMessageType type, 
-    pthread_mutex_t *mutex, 
-    pthread_cond_t *condition,
-    int max_size) 
-{
-    pthread_mutex_lock(mutex);
-    if (max_size > 0) {
-	while (queue_count(queue) > max_size) {
-	    pthread_cond_wait(condition, mutex);
-	}
-    }
-    FlexpathQueueNode* newNode = malloc(sizeof(FlexpathQueueNode));
-    newNode->data = item;
-    newNode->type = type;
-    newNode->next = *queue;
-    *queue = newNode;
-    pthread_cond_broadcast(condition);
-    pthread_mutex_unlock(mutex);
-}
-
-// remove from tail of a message queue
-FlexpathQueueNode* 
-threaded_dequeue(
-    FlexpathQueueNode **queue, 
-    pthread_mutex_t *mutex, 
-    pthread_cond_t *condition, 
-    int signal_dequeue) 
-{
-    pthread_mutex_lock(mutex);
-    while (queue_count(queue) == 0) {
-        pthread_cond_wait(condition, mutex);
-    }
-    FlexpathQueueNode *tail;
-    FlexpathQueueNode *prev = NULL;
-    tail = *queue;
-    while (tail && tail->next) {
-        prev=tail;
-        tail=tail->next;
-    }
-    if (prev) {
-        prev->next = NULL;
-    } else {
-        *queue = NULL;
-    }
-    pthread_mutex_unlock(mutex);
-    if (signal_dequeue==1) {
-        pthread_cond_broadcast(condition);
-    }
-    return tail;
-}
-
-// peek at tail of message queue
-FlexpathQueueNode* 
-threaded_peek(FlexpathQueueNode** queue, 
-	      pthread_mutex_t *mutex, 
-	      pthread_cond_t *condition) 
-{
-    pthread_mutex_lock(mutex);
-    int q = queue_count(queue);
-    if (q == 0) {	
-	pthread_cond_wait(condition, mutex);
-    }
-    FlexpathQueueNode* tail;
-    tail = *queue;
-    while (tail && tail->next) {
-        tail=tail->next;
-    }
-    pthread_mutex_unlock(mutex);
-    return tail;
-}
 
 // add new var to a var list
 FlexpathVarNode* 
 add_var(FlexpathVarNode* queue, char* varName, FlexpathVarNode* dims, int rank)
 {
+    FlexpathVarNode *tmp = queue;
+    FlexpathVarNode *new;
+
+    new = (FlexpathVarNode*) malloc(sizeof(FlexpathVarNode));
+    new->varName = strdup(varName);
+    new->dimensions = dims;
+    new->next = NULL;
+    new->rank = rank;
     if (queue) {
-        queue->next=add_var(queue->next, varName, dims, rank);
+	while (tmp->next != NULL) tmp = tmp->next;
+	tmp->next = new;
         return queue;
     } else {
-        queue = (FlexpathVarNode*) malloc(sizeof(FlexpathVarNode));
-        queue->varName = strdup(varName);
-        queue->dimensions = dims;
-        queue->next = NULL;
-        queue->rank = rank;
-        return queue;
+        return new;
     }
 }
 
@@ -458,40 +264,20 @@ free_vars(FlexpathVarNode* queue)
     }
 }
 
-// search a var list
-FlexpathVarNode* 
-queue_contains(FlexpathVarNode* queue, const char* name, int rank) 
-{
-    int compare_rank = 0;
-    if (rank >= 0 ) {
-        compare_rank = 1;
-    }
-    FlexpathVarNode* tmp = queue;
-    while (tmp) {
-        if (strcmp(tmp->varName, name)==0) {
-            if (compare_rank) {
-                if (tmp->rank == rank) {
-                    return tmp;
-                }
-            } else {
-                return tmp;
-            }
-        }
-        tmp = tmp->next;
-    }
-    return NULL;
-}
 
 // returns a name with the dimension prepended
 static char*
 get_alt_name(char *name, char *dimName) 
 {
+    /* 
+     *  Formerly, this created an alternative dimension name for each variable, so that transformation code 
+     *  might modify it without affecting other vars.  This facility is deprecated, so simplifying.
+     *  Just return a new copy of the original name.
+     */
+
     int len = strlen(name) + strlen(dimName) + strlen("FPDIM_") + 2;
     char *newName = malloc(sizeof(char) * len);
-    strcpy(newName, "FPDIM_");
-    strcat(newName, dimName);
-    strcat(newName, "_");
-    strcat(newName, name);
+    strcpy(newName, dimName);
     return newName;
 }
 
@@ -523,7 +309,7 @@ find_alt_name(FlexpathFMStructure *currentFm, char *dimName, char *varName)
     FMField *field = (FMField *) malloc(sizeof(FMField));
     a->field = field;
     field->field_name = strdup(altName);
-    // TO FIX: Should really check datatype (another paramater?)
+    // TO FIX: Should really check datatype (another parameter?)
     field->field_type = strdup("integer");
     field->field_size = sizeof(int);
     field->field_offset = -1;
@@ -531,6 +317,18 @@ find_alt_name(FlexpathFMStructure *currentFm, char *dimName, char *varName)
     return a;
 }
 
+static int
+get_dim_count(struct adios_var_struct *v)
+{
+    struct adios_dimension_struct * dim_list = v->dimensions;
+    int ndims = 0;
+    while (dim_list) {
+        ndims++;
+        dim_list = dim_list->next;
+    }
+    return ndims;
+}
+
 // populates offsets array
 int 
 get_var_offsets(struct adios_var_struct *v, 
@@ -573,62 +371,95 @@ get_var_offsets(struct adios_var_struct *v,
 }
 
 // creates multiqueue function to handle ctrl messages for given bridge stones 
-char *multiqueue_action = "{\n\
-    int found = 0;\n\
-    int flush_data_count = 0; \n\
-    int my_rank = -1;\n\
-    attr_list mine;\n\
-    if (EVcount_varMsg()>0) {\n\
-        EVdiscard_and_submit_varMsg(0, 0);\n\
-    }\n\
-    if (EVcount_update_step_msg() > 1) {\n\
-        EVdiscard_update_step_msg(0);\n\
-    }\n\
-    if (EVcount_drop_evgroup_msg()>0) {\n\
-       if (EVcount_evgroup()>0) {\n\
-          EVdiscard_evgroup(0);\n\
-       }\n\
-       EVdiscard_and_submit_drop_evgroup_msg(0,0);\n\
-    }\n\
-    if (EVcount_op_msg()>0) {\n\
-        op_msg *msg = EVdata_op_msg(0);\n\
-        mine = EVget_attrs_op_msg(0);\n\
-        found = attr_ivalue(mine, \"fp_dst_rank\");\n\
-        if (found > 0) {\n\
-            EVdiscard_and_submit_op_msg(found, 0);\n\
-        } else {\n\
-            EVdiscard_and_submit_op_msg(0,0);\n\
+/* 
+    1) If reader_request
+        a) Check for data that matches reader timestamp
+        b) If timestamp is lower, discard
+        c) If timestamp matches, submit to request
+    
+*/
+
+
+char * multiqueue_action = "{\n\
+    static int lowest_timestamp = 0;\n\
+    attr_list attrs;\n\
+    int old_num_data_in_queue = EVcount_anonymous();\n\
+    if(EVcount_read_request() > 0)\n\
+    {\n\
+        int i = 0;\n\
+        for(i = 0; i < EVcount_read_request(); i++)\n\
+        {\n\
+            read_request *read_msg;\n\
+            int time_req;\n\
+            read_msg = EVdata_read_request(0);\n\
+            time_req = read_msg->timestep_requested;\n\
+	    fp_verbose(\"Read request received for timestep %d, from reader %d\\n\", time_req, read_msg->process_return_id);\n \
+            int j;\n\
+            for(j = 0; j < EVcount_anonymous(); j++)\n\
+            {\n\
+                int data_timestep;\n\
+                attrs = EVget_attrs_anonymous(j);\n\
+                data_timestep = attr_ivalue(attrs, \"fp_timestep\");\n\
+                if(data_timestep < time_req)\n\
+                {\n\
+                    EVdiscard_anonymous(j);\n\
+                    j--;\n\
+                }\n\
+                else if(data_timestep == time_req)\n\
+                {\n\
+                    int target;\n\
+                    target = read_msg->process_return_id;\n\
+		    fp_verbose(\"Data for timestep %d sent to reader %d\\n\", read_msg->timestep_requested, read_msg->process_return_id);\n\
+                    EVsubmit_anonymous(target + 1, j);\n\
+                    EVdiscard_read_request(i);\n\
+                    i--;\n\
+                }\n\
+            }\n\
         }\n\
     }\n\
-    if (EVcount_flush()>0) {\n\
-        flush *c = EVdata_flush(0);\n\
-         if (c->type == 2) { \n\
-             if (EVcount_evgroup()>0) {\n\
-               evgroup *g = EVdata_evgroup(0); \n\
-               g->condition = c->condition;\n\
-               EVsubmit(c->process_id+1, g);\n\
-               EVdiscard_flush(0);\n\
-             }\n\
-         }\n\
-         else if (c->type == 3) {\n\
-            if (EVcount_update_step_msg()>0) {\n\
-               update_step_msg *stepmsg = EVdata_update_step_msg(0);\n\
-               stepmsg->condition = c->condition;\n\
-               EVsubmit(c->process_id+1, stepmsg);\n\
-               EVdiscard_flush(0);\n\
-            }\n\
-          }\n\
-         else {\n\
-            EVdiscard_and_submit_flush(0,0);\n\
-            flush_data_count++;\n\
-         }\n\
+    if(EVcount_finalize_close_msg() > 0)\n\
+    {\n\
+        EVdiscard_and_submit_finalize_close_msg(0, 0);\n\
     }\n\
-    if (EVcount_anonymous()>0) {\n\
-        mine = EVget_attrs_anonymous(0);\n\
-        found = attr_ivalue(mine, \"fp_dst_rank\");\n\
-        EVdiscard_and_submit_anonymous(found+1,0);\n\
+    int num_data_in_queue = EVcount_anonymous();\n\
+    set_int_attr(stone_attrs, \"queue_size\", num_data_in_queue);\n\
+    if(old_num_data_in_queue > num_data_in_queue)\n\
+    {\n\
+        queue_size_msg new;\n\
+        new.size = num_data_in_queue;\n\
+        EVsubmit(0, new);\n\
     }\n\
- }";
+}";
+
+
+static int
+finalize_msg_handler(CManager cm, void *vevent, void *client_data, attr_list attrs)
+{
+    FlexpathWriteFileData * fp = (FlexpathWriteFileData *) client_data;
+    int cond = fp->subscribers->final_condition;
+    fp->subscribers->final_condition = -1;
+    if (cond != -1) {
+        CMCondition_signal(flexpathWriteData.cm, cond);
+        fp_verbose(fp, "Finalize msg handler called and signalled condition %d!", cond);
+    } else {
+        fp_verbose(fp, "Finalize msg handler called and condition already signalled...");
+    }
+
+
+    return 0;
+}
+
+static int
+queue_size_msg_handler(CManager cm, void*vevent, void*client_data, attr_list attrs)
+{
+    FlexpathWriteFileData * fp = (FlexpathWriteFileData *) client_data;
+    fp_verbose(fp, "Sending the condition signal that the queue_size has changed!\n");
+    pthread_mutex_lock(&(fp->queue_size_mutex));
+    pthread_cond_signal(&(fp->queue_size_condition));
+    pthread_mutex_unlock(&(fp->queue_size_mutex));
+    return 0;
+}
+
 
 // sets a field based on data type
 void 
@@ -668,6 +499,13 @@ set_field(int type, FMFieldList* field_list_ptr, int fieldNo, int* size)
 	*size += sizeof(unsigned char *);
 	break;
 
+    case adios_string_array:
+	field_list[fieldNo].field_type = strdup("string");
+	field_list[fieldNo].field_size = sizeof(char *);
+	field_list[fieldNo].field_offset = *size;
+	*size += sizeof(unsigned char *);
+	break;
+
     case adios_double:
 	field_list[fieldNo].field_type = strdup("double");
 	field_list[fieldNo].field_size = sizeof(double);
@@ -750,7 +588,7 @@ get_dim_name (struct adios_dimension_item_struct *d)
 {
     char *vname = NULL;
     if (d->var) {	
-        vname = resolve_path_name(d->var->path, d->var->name);
+        vname = append_path_name(d->var->path, d->var->name);
     } else if (d->attr) {
         if (d->attr->var) 
             vname = d->attr->var->name;
@@ -761,6 +599,198 @@ get_dim_name (struct adios_dimension_item_struct *d)
     return vname;
 }
 
+static int
+set_field_type(int type, FMFieldList field_list, int fieldNo, char *dims, int all_static, FlexpathFMStructure *currentFm) 
+{
+    switch (type) {
+    case adios_unknown:
+        fprintf(stderr, "set_format: Bad Type Error\n");
+        fieldNo--;
+        break;
+		      
+    case adios_integer:
+        field_list[fieldNo].field_type =
+            (char *) malloc(sizeof(char) * 255);
+        if (all_static) {
+            snprintf((char *) field_list[fieldNo].field_type, 255,
+                     "*(integer%s)", dims);
+        } else {
+            snprintf((char *) field_list[fieldNo].field_type, 255,
+                     "integer%s", dims);
+        }
+        field_list[fieldNo].field_size = sizeof(int);
+		      
+        field_list[fieldNo].field_offset = currentFm->size;
+        currentFm->size += sizeof(void *);
+        break;
+		      
+    case adios_unsigned_integer:
+        field_list[fieldNo].field_type =
+            (char *) malloc(sizeof(char) * 255);
+        if (all_static) {
+            snprintf((char *) field_list[fieldNo].field_type, 255,
+                     "*(unsigned integer%s)", dims);
+        } else {
+            snprintf((char *) field_list[fieldNo].field_type, 255,
+                     "unsigned integer%s", dims);
+        }
+        field_list[fieldNo].field_size = sizeof(unsigned int);
+	
+        field_list[fieldNo].field_offset = currentFm->size;
+        currentFm->size += sizeof(void *);
+        break;
+        
+    case adios_real:
+        field_list[fieldNo].field_type =
+            (char *) malloc(sizeof(char) * 255);
+        if (all_static) {
+            snprintf((char *) field_list[fieldNo].field_type, 255,
+                     "*(float%s)", dims);
+        } else {
+            snprintf((char *) field_list[fieldNo].field_type, 255,
+                     "float%s", dims);
+        }
+        field_list[fieldNo].field_size = sizeof(float);
+        field_list[fieldNo].field_offset = currentFm->size;
+        currentFm->size += sizeof(void *);
+        break;
+        
+    case adios_string:
+        field_list[fieldNo].field_type = strdup("string");
+        field_list[fieldNo].field_size = sizeof(char);
+        field_list[fieldNo].field_offset = currentFm->size;
+        currentFm->size += sizeof(void *);
+        break;
+        
+    case adios_string_array:
+        field_list[fieldNo].field_type = strdup("string");
+        field_list[fieldNo].field_size = sizeof(char);
+        field_list[fieldNo].field_offset = currentFm->size;
+        currentFm->size += sizeof(void *);
+        break;
+        
+    case adios_double:
+        field_list[fieldNo].field_type =
+            (char *) malloc(sizeof(char) * 255);
+        if (all_static) {
+            snprintf((char *) field_list[fieldNo].field_type, 255,
+                     "*(double%s)", dims);
+        } else {
+            snprintf((char *) field_list[fieldNo].field_type, 255,
+                     "double%s", dims);
+        }
+        field_list[fieldNo].field_size = sizeof(double);
+        field_list[fieldNo].field_offset = currentFm->size;
+        currentFm->size += sizeof(void *);
+        break;
+	
+    case adios_long_double:
+        field_list[fieldNo].field_type =
+            (char *) malloc(sizeof(char) * 255);
+        if (all_static) {
+            snprintf((char *) field_list[fieldNo].field_type, 255,
+                     "*(double%s)", dims);
+        } else {
+            snprintf((char *) field_list[fieldNo].field_type, 255,
+                     "double%s", dims);
+        }		    
+        field_list[fieldNo].field_size = sizeof(long double);
+        field_list[fieldNo].field_offset = currentFm->size;
+        currentFm->size += sizeof(void *);
+        break;
+        
+    case adios_byte:
+        field_list[fieldNo].field_type =
+            (char *) malloc(sizeof(char) * 255);
+        if (all_static) {
+            snprintf((char *) field_list[fieldNo].field_type, 255, "*(char%s)",
+                     dims);
+        } else {
+            snprintf((char *) field_list[fieldNo].field_type, 255, "*(char%s)",
+                     dims);
+        }
+        field_list[fieldNo].field_size = sizeof(char);
+        field_list[fieldNo].field_offset = currentFm->size;
+        currentFm->size += sizeof(void *);
+        break;
+        
+    case adios_long: // needs to be unsigned integer in ffs
+        // to distinguish on reader_side, I have to look at the size also
+        field_list[fieldNo].field_type =
+            (char *) malloc(sizeof(char) * 255);
+        if (all_static) {
+            snprintf((char *) field_list[fieldNo].field_type, 255,
+                     "*(integer%s)", dims);
+        } else {
+            snprintf((char *) field_list[fieldNo].field_type, 255,
+                     "integer%s", dims);
+        }
+        field_list[fieldNo].field_size = sizeof(long);
+	
+        field_list[fieldNo].field_offset = currentFm->size;
+        currentFm->size += sizeof(void *);
+        break;
+	
+    case adios_unsigned_long: // needs to be unsigned integer in ffs
+        // to distinguish on reader_side, I have to look at the size also
+        field_list[fieldNo].field_type =
+            (char *) malloc(sizeof(char) * 255);
+        if (all_static) {
+            snprintf((char *) field_list[fieldNo].field_type, 255,
+                     "*(unsigned integer%s)", dims);
+        } else {
+            snprintf((char *) field_list[fieldNo].field_type, 255,
+                     "unsigned integer%s", dims);
+        }		    
+        field_list[fieldNo].field_size = sizeof(unsigned long);
+	
+        field_list[fieldNo].field_offset = currentFm->size;
+        currentFm->size += sizeof(void *);
+        break;
+        
+    case adios_complex:
+        field_list[fieldNo].field_type =
+            (char *) malloc(sizeof(char) * 255);
+        if (all_static) {
+            snprintf((char *) field_list[fieldNo].field_type, 255, "*(complex%s)",
+                     dims);
+        } else {
+            snprintf((char *) field_list[fieldNo].field_type, 255, "complex%s",
+                     dims);
+        }
+        field_list[fieldNo].field_size = sizeof(complex_dummy);
+        field_list[fieldNo].field_offset = currentFm->size;
+        currentFm->size += sizeof(void *);
+        break;
+        
+    case adios_double_complex:
+        field_list[fieldNo].field_type =
+            (char *) malloc(sizeof(char) * 255);
+        if (all_static) {
+            snprintf((char *) field_list[fieldNo].field_type, 255, "*(double_complex%s)",
+                     dims);
+        } else {
+            snprintf((char *) field_list[fieldNo].field_type, 255, "double_complex%s",
+                     dims);
+        }
+        field_list[fieldNo].field_size = sizeof(double_complex_dummy);
+        field_list[fieldNo].field_offset = currentFm->size;
+        currentFm->size += sizeof(void *);
+        break;
+        
+    default:
+        fprintf(stderr, "Rejecting field %d, name %s\n", fieldNo, field_list[fieldNo].field_name);
+        adios_error(err_invalid_group, 
+                    "set_format: Unknown Type Error %d: name: %s\n", 
+                    type, field_list[fieldNo].field_name);
+        fieldNo--;	      
+        return 1;
+        //break;
+    }
+    return 0;
+}
+
+
 // construct an fm structure based off the group xml file
 FlexpathFMStructure* 
 set_format(struct adios_group_struct *t, 
@@ -779,7 +809,7 @@ set_format(struct adios_group_struct *t,
 	return NULL;
     }
 
-    FMFieldList field_list = malloc(sizeof(FMField) * ((int)t->hashtbl_vars->size(t->hashtbl_vars) + 1));
+    FMFieldList field_list = malloc(sizeof(FMField) * 2);
     if (field_list == NULL) {
 	adios_error(err_invalid_group, 
 		    "set_format: Field List Memory Allocation Failed. t->hashtbl_vars->size: %d\n", 
@@ -789,17 +819,56 @@ set_format(struct adios_group_struct *t,
 
     int fieldNo = 0;
     int altvarcount = 0;
+    int i;
+    currentFm->nattrs = 0;
+
+    struct adios_attribute_struct *attr;
+    for (attr = t->attributes; attr != NULL; attr = attr->next, fieldNo++) {
+	char *fullname = append_path_name(attr->path, attr->name);
+	char *mangle_name = flexpath_mangle(fullname);
+	for (i = 0; i < fieldNo; i++) {
+	    if (strcmp(mangle_name, field_list[i].field_name) == 0) {
+		adios_error(err_invalid_group, "set_format:  The Flexpath transport does not allow multiple writes using the same name in a single group, variable %s is disallowed\n", fullname);
+		return NULL;
+	    }
+	}
+	field_list[fieldNo].field_name = mangle_name;
+	if (!attr->nelems) {
+	    // set the field type size and offset approrpriately
+	    set_field(attr->type, &field_list, fieldNo, &currentFm->size);
+	} else {
+	    //it's a vector!
+            char dims[100];
+            sprintf(&dims[0], "[%d]", attr->nelems);
+            set_field_type(attr->type, field_list, fieldNo, dims, /* all static */ 1, currentFm);
+        }
+	field_list = (FMFieldList) realloc(field_list, sizeof(FMField) * (fieldNo + 2));
+
+	fp_verbose(fileData, "Attribute %d -> field: %s, %s, %d, %d\n", 
+		   currentFm->nattrs,
+		   field_list[fieldNo].field_name, 
+		   field_list[fieldNo].field_type,
+		   field_list[fieldNo].field_size,
+		   field_list[fieldNo].field_offset); 
+	currentFm->nattrs++;
+    }
 
     // for each type look through all the fields
     struct adios_var_struct *adios_var;
     for (adios_var = t->vars; adios_var != NULL; adios_var = adios_var->next, fieldNo++) {
-	char *fullname = resolve_path_name(adios_var->path, adios_var->name);
+	char *fullname = append_path_name(adios_var->path, adios_var->name);
+	char *mangle_name = flexpath_mangle(fullname);
 
+	for (i = 0; i < fieldNo; i++) {
+	    if (strcmp(mangle_name, field_list[i].field_name) == 0) {
+		adios_error(err_invalid_group, "set_format:  The Flexpath transport does not allow multiple writes using the same name in a single group, variable %s is disallowed\n", fullname);
+		return NULL;
+	    }
+	}
 	// use the mangled name for the field.
-	field_list[fieldNo].field_name = fullname;
+	field_list[fieldNo].field_name = mangle_name;
         if (fullname!=NULL) {
             int num_dims = 0;
-            char atom_name[200] = "";
             FlexpathVarNode *dims=NULL;
             if (adios_var->dimensions) {
                 struct adios_dimension_struct *adim = adios_var->dimensions;  
@@ -813,30 +882,23 @@ set_format(struct adios_group_struct *t,
 			//printf("vname: %s\n", vname);
 			//char *name = find_fixed_name(currentFm, vname);
 			char *aname = get_alt_name(fullname, vname);
+			char *mangle_dim = flexpath_mangle(aname);
 			//printf("aname: %s\n", aname);
-			dims=add_var(dims, strdup(aname), NULL, 0);
-			set_attr_dimensions(fullname, aname, num_dims, fileData->attrs);
+			dims=add_var(dims, mangle_dim, NULL, 0);
 		    }
                     char *gname = get_dim_name(&adim->global_dimension);
 		    if (gname) {
 			fileData->globalCount++;
 			//char *name = find_fixed_name(currentFm, gname);
 			char *aname = get_alt_name(fullname, gname);
-			dims=add_var(dims, strdup(aname), NULL, 0);
-			set_attr_dimensions(fullname, aname, num_dims, fileData->attrs);
+			char *mangle_dim = flexpath_mangle(aname);
+			dims=add_var(dims, mangle_dim, NULL, 0);
 		    }
 		    if (adim->global_dimension.rank > 0) {
 			fileData->globalCount++;
 		    }
                 }
             }
-            // attach ndims attr
-            strcat(atom_name, FP_NDIMS_ATTR_NAME);
-            strcat(atom_name, "_");
-            strcat(atom_name, fullname);
-            atom_t ndims_atom = attr_atom_from_string(strdup(atom_name));
-            add_int_attr(fileData->attrs, ndims_atom, num_dims);
-            fileData->formatVars = add_var(fileData->formatVars, fullname, dims, 0);
         }
 	// if its a single field
 	if (!adios_var->dimensions) {
@@ -850,17 +912,17 @@ set_format(struct adios_group_struct *t,
             char dims[DIMSIZE] = "";
 	    char el[ELSIZE] = "";
 	    int v_offset=-1;
+	    int all_static = 1;
 		  
 	    //create the textual representation of the dimensions
 	    for (; d != NULL; d = d->next) {
                 char *vname = get_dim_name(&d->dimension);
                 if (vname) {
-		    
-		    //char *name = find_fixed_name(currentFm, vname);
-		    FlexpathAltName *a = find_alt_name(currentFm, vname, (char*)field_list[fieldNo].field_name);
-		    altvarcount++;
-		    snprintf(el, ELSIZE, "[%s]", a->name);
+		    vname = flexpath_mangle(vname);
+		    snprintf(el, ELSIZE, "[%s]", vname);
+		    free(vname);
 		    v_offset = 0;
+		    all_static = 0;
 		} else {
 		    snprintf(el, ELSIZE, "[%" PRIu64 "]", d->dimension.rank);
 		    v_offset *= d->dimension.rank;
@@ -873,164 +935,9 @@ set_format(struct adios_group_struct *t,
 		currentFm->size ++;					
 	    }
 		  
-	    switch (adios_var->type) {
-	    case adios_unknown:
-		fprintf(stderr, "set_format: Bad Type Error\n");
-		fieldNo--;
-		break;
-		      
-	    case adios_integer:
-		field_list[fieldNo].field_type =
-		    (char *) malloc(sizeof(char) * 255);
-		snprintf((char *) field_list[fieldNo].field_type, 255,
-			 "integer%s", dims);
-		field_list[fieldNo].field_size = sizeof(int);
-		      
-		field_list[fieldNo].field_offset = currentFm->size;
-		if (v_offset == 0 ) // pointer to variably sized array
-		{ currentFm->size += sizeof(void *);  } 
-		else // statically sized array allocated inline
-		{  currentFm->size += (v_offset * sizeof(int));  } 
-		break;
-		      
-	    case adios_unsigned_integer:
-		field_list[fieldNo].field_type =
-		    (char *) malloc(sizeof(char) * 255);
-		snprintf((char *) field_list[fieldNo].field_type, 255,
-			 "unsigned integer%s", dims);
-		field_list[fieldNo].field_size = sizeof(unsigned int);
-		      
-		field_list[fieldNo].field_offset = currentFm->size;
-		if (v_offset == 0 ) // pointer to variably sized array
-		{ currentFm->size += sizeof(void *);  } 
-		else // statically sized array allocated inline
-		{  currentFm->size += (v_offset * sizeof(unsigned int));  } 
-		break;
-
-	    case adios_real:
-		field_list[fieldNo].field_type =
-		    (char *) malloc(sizeof(char) * 255);
-		snprintf((char *) field_list[fieldNo].field_type, 255,
-			 "float%s", dims);
-		field_list[fieldNo].field_size = sizeof(float);
-		field_list[fieldNo].field_offset = currentFm->size;
-		if (v_offset == 0 ) // pointer to variably sized array
-		{ currentFm->size += sizeof(void *);  } 
-		else // statically sized array allocated inline
-		{  currentFm->size += (v_offset * sizeof(float));  } 
-		break;
-
-	    case adios_string:
-		field_list[fieldNo].field_type = strdup("string");
-		field_list[fieldNo].field_size = sizeof(char);
-		field_list[fieldNo].field_offset = currentFm->size;
-		currentFm->size += sizeof(void *);
-		break;
-
-	    case adios_double:
-		field_list[fieldNo].field_type =
-		    (char *) malloc(sizeof(char) * 255);
-		snprintf((char *) field_list[fieldNo].field_type, 255,
-			 "double%s", dims);
-		field_list[fieldNo].field_size = sizeof(double);
-		field_list[fieldNo].field_offset = currentFm->size;
-		if (v_offset == 0 ) // pointer to variably sized array
-		{ currentFm->size += sizeof(void *);  } 
-		else // statically sized array allocated inline
-		{  currentFm->size += (v_offset * sizeof(double));  } 
-		break;
-		
-	    case adios_long_double:
-		field_list[fieldNo].field_type =
-		    (char *) malloc(sizeof(char) * 255);
-		snprintf((char *) field_list[fieldNo].field_type, 255,
-			 "double%s", dims);
-		field_list[fieldNo].field_size = sizeof(long double);
-		field_list[fieldNo].field_offset = currentFm->size;
-		if (v_offset == 0 ) // pointer to variably sized array
-		{ currentFm->size += sizeof(void *);  } 
-		else // statically sized array allocated inline
-		{  currentFm->size += (v_offset * sizeof(long double));  } 
-		break;
-
-	    case adios_byte:
-		field_list[fieldNo].field_type =
-		    (char *) malloc(sizeof(char) * 255);
-		snprintf((char *) field_list[fieldNo].field_type, 255, "char%s",
-			 dims);
-		field_list[fieldNo].field_size = sizeof(char);
-		field_list[fieldNo].field_offset = currentFm->size;
-		if (v_offset == 0 ) // pointer to variably sized array
-		{ currentFm->size += sizeof(void *);  } 
-		else // statically sized array allocated inline
-		{  currentFm->size += (v_offset * sizeof(char));  } 
-		break;
-
-	    case adios_long: // needs to be unsigned integer in ffs
-                // to distinguish on reader_side, I have to look at the size also
-		field_list[fieldNo].field_type =
-		    (char *) malloc(sizeof(char) * 255);
-		snprintf((char *) field_list[fieldNo].field_type, 255,
-			 "integer%s", dims);
-		field_list[fieldNo].field_size = sizeof(long);
-		      
-		field_list[fieldNo].field_offset = currentFm->size;
-		if (v_offset == 0 ) // pointer to variably sized array
-		{ currentFm->size += sizeof(void *);  } 
-		else // statically sized array allocated inline
-		{  currentFm->size += (v_offset * sizeof(long));  } 
-		break;
-		
-	    case adios_unsigned_long: // needs to be unsigned integer in ffs
-                // to distinguish on reader_side, I have to look at the size also
-		field_list[fieldNo].field_type =
-		    (char *) malloc(sizeof(char) * 255);
-		snprintf((char *) field_list[fieldNo].field_type, 255,
-			 "unsigned integer%s", dims);
-		field_list[fieldNo].field_size = sizeof(unsigned long);
-		      
-		field_list[fieldNo].field_offset = currentFm->size;
-		if (v_offset == 0 ) // pointer to variably sized array
-		{ currentFm->size += sizeof(void *);  } 
-		else // statically sized array allocated inline
-		{  currentFm->size += (v_offset * sizeof(unsigned long));  } 
-		break;
-
-	    case adios_complex:
-		field_list[fieldNo].field_type =
-		    (char *) malloc(sizeof(char) * 255);
-		snprintf((char *) field_list[fieldNo].field_type, 255, "complex%s",
-			 dims);
-		field_list[fieldNo].field_size = sizeof(complex_dummy);
-		field_list[fieldNo].field_offset = currentFm->size;
-		if (v_offset == 0 ) // pointer to variably sized array
-		{ currentFm->size += sizeof(void *);  } 
-		else // statically sized array allocated inline
-		{  currentFm->size += (v_offset * sizeof(complex_dummy));  } 
-		break;
-
-            case adios_double_complex:
-		field_list[fieldNo].field_type =
-		    (char *) malloc(sizeof(char) * 255);
-		snprintf((char *) field_list[fieldNo].field_type, 255, "double_complex%s",
-			 dims);
-		field_list[fieldNo].field_size = sizeof(double_complex_dummy);
-		field_list[fieldNo].field_offset = currentFm->size;
-		if (v_offset == 0 ) // pointer to variably sized array
-		{ currentFm->size += sizeof(void *);  } 
-		else // statically sized array allocated inline
-		{  currentFm->size += (v_offset * sizeof(double_complex_dummy)); } 
-		break;
-
-	    default:
-		adios_error(err_invalid_group, 
-			    "set_format: Unknown Type Error %d: name: %s\n", 
-			    adios_var->type, field_list[fieldNo].field_name);
-		fieldNo--;	      
-		return NULL;
-		//break;
-	    }
-	}
+            set_field_type(adios_var->type, field_list, fieldNo, dims, all_static, currentFm);
+        }        
+	field_list = (FMFieldList) realloc(field_list, sizeof(FMField) * (fieldNo + 2));
 
 	fp_verbose(fileData, "field: %s, %s, %d, %d\n", 
 		     field_list[fieldNo].field_name, 
@@ -1040,7 +947,7 @@ set_format(struct adios_group_struct *t,
     }
 
     FlexpathDimNames *d = NULL;
-    field_list = (FMFieldList) realloc(field_list, sizeof(FMField) * (altvarcount + (int)t->hashtbl_vars->size(t->hashtbl_vars) + 1));
+    field_list = (FMFieldList) realloc(field_list, sizeof(FMField) * (altvarcount + fieldNo + 1));
 
     for (d = currentFm->dimList.lh_first; d != NULL; d = d->entries.le_next) {
 	FlexpathAltName *a = NULL;
@@ -1052,12 +959,11 @@ set_format(struct adios_group_struct *t,
 	}
     }
 
-    for (; fieldNo < (t->hashtbl_vars->size(t->hashtbl_vars) + 1+altvarcount); fieldNo++) {
-	field_list[fieldNo].field_type = NULL;
-	field_list[fieldNo].field_name = NULL;
-	field_list[fieldNo].field_offset = 0;
-	field_list[fieldNo].field_size = 0;
-    }
+    field_list[fieldNo].field_type = NULL;
+    field_list[fieldNo].field_name = NULL;
+    field_list[fieldNo].field_offset = 0;
+    field_list[fieldNo].field_size = 0;
+
 
     format[0].field_list = field_list;
     format[1].format_name = strdup("complex");
@@ -1073,313 +979,24 @@ set_format(struct adios_group_struct *t,
     return currentFm;
 }
 
-// copies buffer zeroing out arrays that havent been asked for
-void* copy_buffer(void* buffer, int rank, FlexpathWriteFileData* fileData)
+// copies buffer zeroing out pointers to arrays 
+void *copy_buffer_without_array(void *buffer, FlexpathWriteFileData *fileData)
 {
-    char* temp = (char*)malloc(fileData->fm->size);
+    ADIOST_CALLBACK_ENTER(adiost_event_fp_copy_buffer, fileData);
+    char *temp = (char *)malloc(fileData->fm->size);
     memcpy(temp, buffer, fileData->fm->size);
     FMField *f = fileData->fm->format[0].field_list;
-    while (f->field_name != NULL)
-    {
-        FlexpathVarNode* a;
-        if (!queue_contains(fileData->askedVars, f->field_name, rank)) {
-            if ((a=queue_contains(fileData->formatVars, f->field_name, -1)) 
-	       && 
-	       (a->dimensions != NULL)) {
-                FlexpathVarNode* dim = a->dimensions;
-                while (dim) {
-                    FMField *f2 = fileData->fm->format[0].field_list;
-                    while (f2->field_name != NULL) {
-                        if (strcmp(f2->field_name, dim->varName)==0) {
-                            break;
-                        }
-                        f2++;
-                    }
-                    if (f2->field_name != NULL) {
-                        memset(&temp[f2->field_offset], 0, f2->field_size);
-                    }
-                    dim = dim->next;
-                }
-                memset(&temp[f->field_offset], 0, f->field_size);
-            }
-        }   
+
+    while (f->field_name) {
+        if (index(f->field_type, '[')) {
+            *(void**)&temp[f->field_offset] = NULL;
+        }
         f++;
     }
+    ADIOST_CALLBACK_EXIT(adiost_event_fp_copy_buffer, fileData);
     return temp;
 }
 
-void 
-process_data_flush(FlexpathWriteFileData *fileData, 
-		   Flush_msg *flushMsg, 
-		   FlexpathQueueNode *dataNode)
-{
-    //fprintf(stderr, "writer:%d:processing flush for reader:%d:reader_step:%d:writer_step:%d\n", fileData->rank, flushMsg->process_id, fileData->readerStep, fileData->writerStep);
-    void* temp = copy_buffer(dataNode->data, flushMsg->process_id, fileData);
-   
-    fileData->attrs = set_dst_rank_atom(fileData->attrs, flushMsg->process_id);
-    fileData->attrs = set_flush_id_atom(fileData->attrs, flushMsg->id);
-    
-    if (!fileData->bridges[flushMsg->process_id].opened) {
-	fileData->bridges[flushMsg->process_id].opened=1;
-	fileData->openCount++;
-    }
-    //EVsubmit_general(fileData->dataSource, temp, data_free, fileData->attrs);
-    EVsubmit_general(fileData->dataSource, temp, NULL, fileData->attrs);
-    //fprintf(stderr, "writer:%d:processed flush for reader:%d:reader_step:%d:writer_step:%d\n", fileData->rank, flushMsg->process_id, fileData->readerStep, fileData->writerStep);
-}
-
-void
-process_var_msg(FlexpathWriteFileData *fileData, Var_msg *varMsg)
-{
-    fp_verbose(fileData, "process Var msg for variable \"%s\"\n", varMsg->var_name);
-    fileData->askedVars = add_var(fileData->askedVars, 
-				  strdup(varMsg->var_name), 
-				  NULL, 
-				  varMsg->process_id);
-}
-
-void
-drop_queued_data(FlexpathWriteFileData *fileData, int timestep)
-{
-    FlexpathQueueNode* node = threaded_dequeue(&fileData->dataQueue,
-					       &fileData->dataMutex,
-					       &fileData->dataCondition, 1);
-    FMfree_var_rec_elements(fileData->fm->ioFormat, node->data);
-
-    drop_evgroup_msg *dropMsg = malloc(sizeof(drop_evgroup_msg));
-    dropMsg->step = fileData->readerStep;
-    int wait = CMCondition_get(flexpathWriteData.cm, NULL);
-    dropMsg->condition = wait;
-    fp_verbose(fileData, "******* Triggering drop MSG\n");
-    EVsubmit_general(fileData->dropSource, dropMsg, drop_evgroup_msg_free, fileData->attrs);
-    //EVsubmit_general(fileData->dropSource, dropMsg, NULL, fileData->attrs);
-    // Will have to change when not using ctrl thread.
-    CMCondition_wait(flexpathWriteData.cm,  wait);
-    
-    fileData->readerStep++;
-}
-
-void
-process_open_msg(FlexpathWriteFileData *fileData, op_msg *open)
-{
-    fp_verbose(fileData, " Process Open msg, bridge %d, timestep %d\n", open->process_id, open->step);
-    fileData->bridges[open->process_id].step = open->step;
-    fileData->bridges[open->process_id].condition = open->condition;
-    if (!fileData->bridges[open->process_id].created) {
-	fileData->bridges[open->process_id].created = 1;
-	fileData->bridges[open->process_id].myNum = 
-	    EVcreate_bridge_action(
-		flexpathWriteData.cm, 
-		attr_list_from_string(fileData->bridges[open->process_id].contact), 
-		fileData->bridges[open->process_id].theirNum);		    
-	
-	EVaction_set_output(flexpathWriteData.cm, 
-			    fileData->multiStone, 
-			    fileData->multi_action, 
-			    open->process_id+1, 
-			    fileData->bridges[open->process_id].myNum);
-    }	
-	
-    if (open->step == fileData->readerStep + 1) {
-	drop_queued_data(fileData, fileData->readerStep);
-    }
-
-    if (open->step == fileData->readerStep) {
-	pthread_mutex_lock(&fileData->openMutex);
-	fileData->openCount++;  
-	fileData->bridges[open->process_id].opened = 1;
-	pthread_mutex_unlock(&fileData->openMutex);
-
-	op_msg *ack = malloc(sizeof(op_msg));
-	ack->file_name = strdup(fileData->name);
-	ack->process_id = fileData->rank;
-	ack->step = fileData->readerStep;
-	ack->type = 2;
-	ack->condition = open->condition;
-	fileData->attrs = set_dst_rank_atom(fileData->attrs, open->process_id+1);
-	EVsubmit_general(fileData->opSource, ack, op_free, fileData->attrs);
-    } 
-    else if (open->step < fileData->readerStep) {
-	log_error("Flexpath method control_thread: Received Past Step Open\n");
-    } 
-    else {
-	fp_verbose(fileData, "received op with future step\n");
-    }
-}
-
-void
-process_finalize_msg(FlexpathWriteFileData *fileData, op_msg *finalize)
-{
-    fp_verbose(fileData, " Process Finalize msg, bridge %d, timestep %d\n", finalize->process_id, finalize->step);
-	
-    FlexpathQueueNode* node = threaded_dequeue(&fileData->dataQueue,
-					       &fileData->dataMutex,
-					       &fileData->dataCondition, 1);
-    FMfree_var_rec_elements(fileData->fm->ioFormat, node->data);
-
-    drop_evgroup_msg *dropMsg = malloc(sizeof(drop_evgroup_msg));
-    dropMsg->step = fileData->readerStep;
-    int wait = CMCondition_get(flexpathWriteData.cm, NULL);
-    dropMsg->condition = wait;
-    fp_verbose(fileData, "******* Triggering drop MSG\n");
-    EVsubmit_general(fileData->dropSource, dropMsg, drop_evgroup_msg_free, fileData->attrs);
-    //EVsubmit_general(fileData->dropSource, dropMsg, NULL, fileData->attrs);
-    // Will have to change when not using ctrl thread.
-    CMCondition_wait(flexpathWriteData.cm,  wait);
-}
-
-void
-process_close_msg(FlexpathWriteFileData *fileData, op_msg *close)
-{
-
-    fp_verbose(fileData, " process close msg, bridge %d\n", close->process_id);
-    pthread_mutex_lock(&fileData->openMutex);
-    fileData->openCount--;
-    fileData->bridges[close->process_id].opened=0;
-    fileData->bridges[close->process_id].condition = close->condition;
-    pthread_mutex_unlock(&fileData->openMutex);
-
-    /* if (fileData->openCount==0) { */
-    /* 	FlexpathQueueNode* node = threaded_dequeue(&fileData->dataQueue,  */
-    /* 						   &fileData->dataMutex,  */
-    /* 						   &fileData->dataCondition, 1); */
-    /* 	FMfree_var_rec_elements(fileData->fm->ioFormat, node->data); */
-
-    /* 	drop_evgroup_msg *dropMsg = malloc(sizeof(drop_evgroup_msg)); */
-    /* 	dropMsg->step = fileData->readerStep; */
-    /* 	int wait = CMCondition_get(flexpathWriteData.cm, NULL); */
-    /* 	dropMsg->condition = wait; */
-    /* 	EVsubmit_general(fileData->dropSource, dropMsg, drop_evgroup_msg_free, fileData->attrs); */
-    /* 	//EVsubmit_general(fileData->dropSource, dropMsg, NULL, fileData->attrs); */
-    /* 	// Will have to change when not using ctrl thread. */
-    /* 	CMCondition_wait(flexpathWriteData.cm,  wait); 		     */
-		     
-    /* 	fileData->readerStep++; */
-    /* } */
-		
-    op_msg *ack = malloc(sizeof(op_msg));
-    ack->file_name = strdup(fileData->name);
-    ack->process_id = fileData->rank;
-    ack->step = fileData->readerStep;
-    ack->type = 2;
-    ack->condition = close->condition;
-    fileData->attrs = set_dst_rank_atom(fileData->attrs, close->process_id + 1);
-    EVsubmit_general(fileData->opSource, 
-		     ack, 
-		     op_free, 
-		     fileData->attrs);		
-		
-}
-
-
-static int 
-var_handler(CManager cm, void *vevent, void *client_data, attr_list attrs)
-{
-    FlexpathWriteFileData* fileData = (FlexpathWriteFileData*) client_data;
-    Var_msg* msg = (Var_msg*) vevent;
-    fp_verbose(fileData, " var_msg received and queued\n");
-    EVtake_event_buffer(cm, vevent);
-    threaded_enqueue(&fileData->controlQueue, msg, VAR, 
-		     &fileData->controlMutex, &fileData->controlCondition, -1);
-    return 0;
-}
-
-static int 
-flush_handler(CManager cm, void* vevent, void* client_data, attr_list attrs) 
-{
-    FlexpathWriteFileData* fileData = (FlexpathWriteFileData*) client_data;
-    Flush_msg* msg = (Flush_msg*) vevent;
-    int err = EVtake_event_buffer(cm, vevent);
-    fp_verbose(fileData, "flush_msg received and queued\n");
-    threaded_enqueue(&fileData->controlQueue, msg, DATA_FLUSH, 
-		     &fileData->controlMutex, &fileData->controlCondition,
-		     -1);
-    //fprintf(stderr, "writer:%d:enqueued flush for reader:%d:reader_step:%d:writer_step:%d\n", fileData->rank, msg->process_id, fileData->readerStep, fileData->writerStep);
-    return 0;
-}
-
-static int
-drop_evgroup_handler(CManager cm, void *vevent, void *client_data, attr_list attrs) {
-    FlexpathWriteFileData* fileData = (FlexpathWriteFileData*) client_data;
-    drop_evgroup_msg *msg = vevent;
-    // will have to change when not using control thread.
-    fp_verbose(fileData, "got drop evgroup message, signalling\n");
-    CMCondition_signal(cm, msg->condition);    
-    return 0;
-}
-
-static int 
-op_handler(CManager cm, void* vevent, void* client_data, attr_list attrs) 
-{
-    FlexpathWriteFileData* fileData = (FlexpathWriteFileData*) client_data;
-    op_msg* msg = (op_msg*) vevent;
-    EVtake_event_buffer(cm, vevent);
-    fp_verbose(fileData, " op_msg received, message type %d\n", msg->type);
-    if(msg->type == OPEN_MSG) {
-	fp_verbose(fileData, " enqueueing open msg, bridge %d, step %d\n", msg->process_id, msg->step);
-        threaded_enqueue(&fileData->controlQueue, msg, OPEN, 
-			 &fileData->controlMutex, &fileData->controlCondition, -1);
-    } else if(msg->type == CLOSE_MSG) {
-	fp_verbose(fileData, " enqueueing close msg, bridge %d, step %d\n", msg->process_id, msg->step);
-        threaded_enqueue(&fileData->controlQueue, msg, CLOSE, 
-			 &fileData->controlMutex, &fileData->controlCondition, -1);  			
-    } else if(msg->type == FINALIZE_MSG) {
-	fp_verbose(fileData, " enqueueing finalize msg, bridge %d\n", msg->process_id);
-        threaded_enqueue(&fileData->controlQueue, msg, FINALIZE, 
-			 &fileData->controlMutex, &fileData->controlCondition, -1);  			
-    }
-    return 0;
-}
-
-// processes messages from control queue
-void 
-control_thread(void *arg) 
-{
-    FlexpathWriteFileData *fileData = (FlexpathWriteFileData*)arg;
-    int rank = fileData->rank;
-    FlexpathQueueNode *controlMsg;
-    FlexpathQueueNode *dataNode;
-    while (1) {
-//	fp_verbose(fileData, " Control thread waiting on msg\n");
-	if ((controlMsg = threaded_dequeue(&fileData->controlQueue, 
-	    &fileData->controlMutex, &fileData->controlCondition, 0))) {
-//	    fp_verbose(fileData, " Control thread got a msg\n");
-	    if (controlMsg->type==VAR) {
-		Var_msg *varMsg = (Var_msg*) controlMsg->data;
-		process_var_msg(fileData, varMsg);
-		EVreturn_event_buffer(flexpathWriteData.cm,controlMsg->data);
-	    }
-	    else if (controlMsg->type==DATA_FLUSH) {
-		Flush_msg *flushMsg = (Flush_msg*)controlMsg->data;
-		dataNode = threaded_peek(&fileData->dataQueue, 
-					 &fileData->dataMutex, 
-					 &fileData->dataCondition);
-		process_data_flush(fileData, flushMsg, dataNode);
-
-	    }
-	    else if (controlMsg->type==OPEN) {
-                op_msg *open = (op_msg*) controlMsg->data;
-		process_open_msg(fileData, open);                
-		EVreturn_event_buffer(flexpathWriteData.cm, open);
-            }
-	    else if (controlMsg->type==FINALIZE) {
-                op_msg *open = (op_msg*) controlMsg->data;
-		process_finalize_msg(fileData, open);                
-		EVreturn_event_buffer(flexpathWriteData.cm, open);
-            }
-	    else if (controlMsg->type==CLOSE) {
-                op_msg* close = (op_msg*) controlMsg->data;
-		process_close_msg(fileData, close);
-		EVreturn_event_buffer(flexpathWriteData.cm, close);
-	    }
-	    else {
-		log_error("control_thread: Unrecognized Control Message\n");
-	    }
-	}
-    }
-    return;
-}
-
 // adds an open file handle to global open file list
 void 
 add_open_file(FlexpathWriteFileData* newFile) 
@@ -1406,42 +1023,115 @@ find_open_file(char* name)
     return file;
 }
 
+FlexpathWriteFileData* 
+find_flexpath_fileData(void *adios_file_data) 
+{
+    FlexpathWriteFileData* file = flexpathWriteData.openFiles;
+    while (file && (file->adios_file_data != adios_file_data)) {
+        file = file->next;
+    }
+    return file;
+}
+
 
 void
 stone_close_handler(CManager cm, CMConnection conn, int closed_stone, void *client_data)
 {
     FlexpathWriteFileData* file = flexpathWriteData.openFiles;
+    fp_verbose(file, "IN STONE CLOSE_HANDLER, closed stone %d\n", closed_stone);
     while (file) {
 	int i;
-	for (i=0; i < file->numBridges; i++) {
-	    if (file->bridges[i].myNum == closed_stone) {
-		int j;
-		file->bridges[i].opened = 0;
-		for (j=0; j< file->numBridges; j++) {
-		    if (file->bridges[j].opened == 1) {
-			/* if any bridge still open, simply return at this point, we're done */
-			return;
-		    }
-		}
-		/* no bridges in this file still open, drop all data */
-		drop_queued_data(file, -1);
+	for (i=0; i < 1; i++) {
+            int j;
+            subscriber_info sub = file->subscribers;
+            for (j=0; j < sub->numBridges; j++) {
+                if (sub->bridges[j].bridge_stoneID == closed_stone) {
+                    int cond = sub->final_condition;
+                    sub->final_condition = -1;
+                    sub->bridges[j].opened = 0;
+                    sub->parent_file->failed = 1;
+                    if (cond != -1) {
+                        /* hearing from one is sufficient for waiting */
+                        fp_verbose(file, "IN STONE CLOSE_HANDLER, signaling final condition for File %p, subscriber %p\n", file, sub);
+                        CMCondition_signal(cm, cond);
+                    }
+                }
 	    }
 	}
         file = file->next;
     }
 }
 
+extern void
+reader_register_handler(CManager cm, CMConnection conn, void *vmsg, void *client_data, attr_list attrs)
+{
+    int i;
+    reader_register_msg *msg = (reader_register_msg *)vmsg;
+    FlexpathWriteFileData *fileData = (void*)msg->writer_file;
+    subscriber_info sub = fileData->subscribers;
+    sub->numBridges = msg->contact_count;
+    sub->reader_0_conn = conn;
+    sub->reader_file = msg->reader_file;
+    CMConnection_add_reference(conn);
+    char *recv_buf;
+    char ** recv_buf_ptr = CMCondition_get_client_data(cm, msg->condition);
+    recv_buf = (char *)calloc(sub->numBridges, CONTACT_LENGTH);
+    fp_verbose(fileData, "Reader Register handler called, will signal condition %d!\n", msg->condition);
+    int total_num_readers;
+    sub->total_num_readers = msg->contact_count;
+    for (i = 0; i < msg->contact_count; i++) {
+        strcpy(&recv_buf[i*CONTACT_LENGTH], msg->contacts[i]);
+        //Writer_reader_information, done this way to keep the determining logic in one place (currently on the reader side)
+    }
+
+    *recv_buf_ptr = recv_buf;
+
+
+    CMCondition_signal(cm, msg->condition);
+}
+
+static void
+fp_verbose_wrapper(char *format, ...)
+{
+    static int fp_verbose_set = -1;
+    static int MPI_rank = -1;
+    if (fp_verbose_set == -1) {
+        fp_verbose_set = (getenv("FLEXPATH_VERBOSE") != NULL);
+        MPI_Comm_rank(MPI_COMM_WORLD, &MPI_rank);
+    }
+    if (fp_verbose_set) {
+        va_list args;
+
+        va_start(args, format);
+        fprintf(stdout, "%s %d:", FLEXPATH_SIDE, MPI_rank);
+        vfprintf(stdout, format, args);
+        va_end(args);
+    }
+}
+
 // Initializes flexpath write local data structures
 extern void 
 adios_flexpath_init(const PairStruct *params, struct adios_method_struct *method) 
 {
-    setenv("CMSelfFormats", "1", 1);
+    static cod_extern_entry externs[] = {   {"fp_verbose", (void*) 0},    {NULL, NULL}};
     // global data structure creation
     flexpathWriteData.rank = -1;
     flexpathWriteData.openFiles = NULL;
-    
+
+    // setup ATOMS for attribute lists
+    RANK_ATOM = attr_atom_from_string(FP_RANK_ATTR_NAME);
+    TIMESTEP_ATOM = attr_atom_from_string(FP_TIMESTEP);
+    SCALAR_ATOM = attr_atom_from_string(FP_ONLY_SCALARS);
+    NATTRS = attr_atom_from_string(FP_NATTRS);
+    CM_TRANSPORT = attr_atom_from_string("CM_TRANSPORT");
+    QUEUE_SIZE = attr_atom_from_string("queue_size");
+
+    externs[0].extern_value = fp_verbose_wrapper;
+
     // setup CM
+    setenv("CMSelfFormats", "1", 1);
     flexpathWriteData.cm = CManager_create();
+    EVadd_standard_routines(flexpathWriteData.cm, "void fp_verbose(string format, ...);",  externs);
     atom_t CM_TRANSPORT = attr_atom_from_string("CM_TRANSPORT");
     char * transport = getenv("CMTransport");
     if (transport == NULL) {
@@ -1459,27 +1149,29 @@ adios_flexpath_init(const PairStruct *params, struct adios_method_struct *method
 	attr_list listen_list = create_attr_list();
 	add_attr(listen_list, CM_TRANSPORT, Attr_String, (attr_value)strdup(transport));
 	CMlisten_specific(flexpathWriteData.cm, listen_list);
+        free_attr_list(listen_list);
     }
     
-    // configuration setup
-    //gen_pthread_init();
-    setenv("CMSelfFormats", "1", 1);
-    
     // fork communications thread
     int forked = CMfork_comm_thread(flexpathWriteData.cm);   
     if (!forked) {
-	fprintf(stderr, "Wrtier error forking comm thread\n");
+	fprintf(stderr, "Writer error forking comm thread\n");
     }
 
     EVregister_close_handler(flexpathWriteData.cm, stone_close_handler, &flexpathWriteData);
+    CMFormat format = CMregister_simple_format(flexpathWriteData.cm, "Flexpath reader register", reader_register_field_list, sizeof(reader_register_msg));
+    CMregister_handler(format, reader_register_handler, NULL);
 }
 
 extern int 
-adios_flexpath_open(struct adios_file_struct *fd, 
-		    struct adios_method_struct *method, 
-		    MPI_Comm comm) 
-{    
-    if ( fd == NULL || method == NULL) {
+adios_flexpath_open(struct adios_file_struct *fd,
+                    struct adios_method_struct *method,
+                    MPI_Comm comm)
+{
+    EVaction split_action;
+    EVaction multi_action;
+    int i;
+    if (fd == NULL || method == NULL) {
         perr("open: Bad input parameters\n");
         return -1;
     }
@@ -1491,191 +1183,203 @@ adios_flexpath_open(struct adios_file_struct *fd,
     }
 
     FlexpathWriteFileData *fileData = malloc(sizeof(FlexpathWriteFileData));
+    subscriber_info sub = malloc(sizeof(struct _flexpath_per_subscriber_info));
     mem_check(fileData, "fileData");
     memset(fileData, 0, sizeof(FlexpathWriteFileData));
     fp_verbose_init(fileData);
 
-    fileData->maxQueueSize = 1;
-    fileData->use_ctrl_thread = 1;
+    fileData->maxQueueSize = 42;
     if (method->parameters) {
-        sscanf(method->parameters,"QUEUE_SIZE=%d;", &fileData->maxQueueSize);
+        sscanf(method->parameters, "QUEUE_SIZE=%d;", &fileData->maxQueueSize);
     }
-   
-    // setup step state
-    fileData->attrs = create_attr_list();
-    fileData->openCount = 0;
-    //fileData->readerStep = 0;
-
-    pthread_mutex_init(&fileData->controlMutex, NULL);
-    pthread_mutex_init(&fileData->dataMutex, NULL);
-    pthread_mutex_init(&fileData->openMutex, NULL);
-     
-    pthread_cond_init(&fileData->controlCondition, NULL);
-    pthread_cond_init(&fileData->dataCondition, NULL);
+
+    pthread_mutex_init(&fileData->queue_size_mutex, NULL);
+    pthread_cond_init(&fileData->queue_size_condition, NULL);
 
     // communication channel setup
     char writer_info_filename[200];
-    char writer_ready_filename[200];
-    char reader_info_filename[200];
-    char reader_ready_filename[200];   
+    char writer_info_tmp[200];
 
-    int i=0;
+    i = 0;
     flexpathWriteData.rank = fileData->rank;
     fileData->globalCount = 0;
 
-    // mpi setup
+    // mpi setup, why?
     MPI_Comm_dup(comm, &fileData->mpiComm);
 
     MPI_Comm_rank((fileData->mpiComm), &fileData->rank);
     MPI_Comm_size((fileData->mpiComm), &fileData->size);
     char *recv_buff = NULL;
-    char sendmsg[CONTACT_LENGTH];
+    char sendmsg[CONTACT_LENGTH] = {0};
     if (fileData->rank == 0) {
-        recv_buff = (char *) malloc(fileData->size*CONTACT_LENGTH*sizeof(char));
+        recv_buff = (char *)malloc(fileData->size * CONTACT_LENGTH * sizeof(char));
     }
-        
+
+    fileData->subscribers = sub;
+    sub->parent_file = fileData;
+    sub->multiStone = EValloc_stone(flexpathWriteData.cm);
+    sub->splitStone = EValloc_stone(flexpathWriteData.cm);
+    sub->sinkStone = EValloc_stone(flexpathWriteData.cm);
+
     // send out contact string
-    char * contact = attr_list_to_string(CMget_contact_list(flexpathWriteData.cm));
-    fileData->multiStone = EValloc_stone(flexpathWriteData.cm);
-    fileData->sinkStone = EValloc_stone(flexpathWriteData.cm);
-    sprintf(&sendmsg[0], "%d:%s", fileData->multiStone, contact);
+    char *contact = attr_list_to_string(CMget_contact_list(flexpathWriteData.cm));
+    sprintf(&sendmsg[0], "%d:%s", sub->multiStone, contact);
     MPI_Gather(sendmsg, CONTACT_LENGTH, MPI_CHAR, recv_buff, 
-        CONTACT_LENGTH, MPI_CHAR, 0, (fileData->mpiComm));
+               CONTACT_LENGTH, MPI_CHAR, 0, (fileData->mpiComm));
 
+    fp_verbose(fileData, "Gather of writer contact data to rank 0 is complete\n");
+    //TODO: recv_buff has a small memory leak here because of register_reader_handler
     // rank 0 prints contact info to file
     if (fileData->rank == 0) {
         sprintf(writer_info_filename, "%s_%s", fd->name, "writer_info.txt");
-        FILE* writer_info = fopen(writer_info_filename,"w");
-        for (i=0; i<fileData->size; i++) {
-            fprintf(writer_info, "%s\n",&recv_buff[i*CONTACT_LENGTH]); 
+        sprintf(writer_info_tmp, "%s_%s", fd->name, "writer_info.tmp");
+        FILE *writer_info = fopen(writer_info_filename, "w");
+        int condition = CMCondition_get(flexpathWriteData.cm, NULL);
+        fp_verbose(fileData, "Setting condition %d\n", condition);
+        CMCondition_set_client_data(flexpathWriteData.cm, condition, &recv_buff);
+        fprintf(writer_info, "%d\n", condition);
+        fprintf(writer_info, "%p\n", fileData);
+        for (i = 0; i < fileData->size; i++) {
+            fprintf(writer_info, "%s\n", &recv_buff[i * CONTACT_LENGTH]);
         }
         fclose(writer_info);
+        rename(writer_info_tmp, writer_info_filename);
+        free(recv_buff);
+        fp_verbose(fileData, "wrote writer information to writer_info file  %s, waiting for condition %d\n", writer_info_filename, condition);
+        /* wait for reader to wake up, tell us he's ready (and provide his contact info) */
+
+        CMCondition_wait(flexpathWriteData.cm, condition);
+        /* recv_buff and fileData->numBridges have been filled in by the reader_register_handler */
+        MPI_Bcast(&sub->numBridges, 1, MPI_INT, 0, MPI_COMM_WORLD);
+        MPI_Bcast(&sub->total_num_readers, 1, MPI_INT, 0, MPI_COMM_WORLD);
+        MPI_Bcast(recv_buff, sub->numBridges * CONTACT_LENGTH, MPI_CHAR, 0, MPI_COMM_WORLD);
+        unlink(writer_info_filename);
+    } else {
+        MPI_Bcast(&sub->numBridges, 1, MPI_INT, 0, MPI_COMM_WORLD);
+        MPI_Bcast(&sub->total_num_readers, 1, MPI_INT, 0, MPI_COMM_WORLD);
+        recv_buff = (char *)malloc(sub->numBridges * CONTACT_LENGTH * sizeof(char));
+        MPI_Bcast(recv_buff, sub->numBridges * CONTACT_LENGTH, MPI_CHAR, 0, MPI_COMM_WORLD);
     }
 
-    // poll file - race condition issues
-    FILE* reader_ready = NULL;
-    sprintf(reader_ready_filename, "%s_%s", fd->name, "reader_ready.txt");
-    while (!reader_ready) {
-	reader_ready = fopen(reader_ready_filename,"r");
-    }
-    fclose(reader_ready);
-
-    // read contact list
-    sprintf(reader_info_filename, "%s_%s", fd->name, "reader_info.txt");
-    FILE* reader_info = fopen(reader_info_filename, "r");
-    if (!reader_info) {
-	reader_info = fopen(reader_info_filename, "r");
-    }
-    char in_contact[CONTACT_LENGTH] = "";
-    int numBridges = 0;
-    int stone_num;
     // build a bridge per line
-    while (fscanf(reader_info, "%d:%s",&stone_num, in_contact)!=EOF) {
-	//fprintf(stderr, "reader contact: %d:%s\n", stone_num, in_contact);
-        fileData->bridges = realloc(fileData->bridges, sizeof(FlexpathStone) * (numBridges + 1));
+    int numBridges = sub->numBridges;
+    sub->bridges = malloc(sizeof(FlexpathStone) * numBridges);
+    for (i = 0; i < numBridges; i++) {
+        char in_contact[CONTACT_LENGTH];
+        int their_main_stone;
+        int their_sink_stone;
+        sscanf(&recv_buff[i * CONTACT_LENGTH], "%d:%s", &their_main_stone,
+               in_contact);
+        // fprintf(stderr, "reader contact: %d:%s\n", stone_num, in_contact);
         attr_list contact_list = attr_list_from_string(in_contact);
-        fileData->bridges[numBridges].opened = 0;
-	fileData->bridges[numBridges].created = 0;
-        fileData->bridges[numBridges].step = 0;
-        fileData->bridges[numBridges].theirNum = stone_num;
-        fileData->bridges[numBridges].contact = strdup(in_contact);
-        numBridges += 1;
+        sub->bridges[i].opened = 1;
+        sub->bridges[i].created = 1;
+        sub->bridges[i].step = 0;
+        sub->bridges[i].reader_stoneID = their_main_stone;
+        sub->bridges[i].contact = strdup(in_contact);
     }
-    fileData->numBridges = numBridges;
-    fclose(reader_info);
 
     MPI_Barrier((fileData->mpiComm));
-    
-    // cleanup of reader files (writer is done with it).
-    if (fileData->rank == 0) {
-	unlink(reader_info_filename);
-	unlink(reader_ready_filename);
-    }
 
-	
-    //process group format
+    // process group format
     struct adios_group_struct *t = method->group;
     if (t == NULL) {
-	adios_error(err_invalid_group, "Invalid group.\n");
-	return err_invalid_group;
+        adios_error(err_invalid_group, "Invalid group.\n");
+        return err_invalid_group;
     }
     fileData->host_language = t->adios_host_language_fortran;
     struct adios_var_struct *fields = t->vars;
-	
+
     if (fields == NULL) {
-	adios_error(err_invalid_group, "Group has no variables.\n");
-	return err_invalid_group;
-    }	
+        adios_error(err_invalid_group, "Group has no variables.\n");
+        return err_invalid_group;
+    }
 
     fileData->fm = set_format(t, fields, fileData);
 
-
     // attach rank attr and add file to open list
-    fileData->name = strdup(method->group->name); 
+    fileData->name = strdup(method->group->name);
+    fileData->adios_file_data = fd;
     add_open_file(fileData);
-    atom_t rank_atom = attr_atom_from_string(FP_RANK_ATTR_NAME);
-    add_int_attr(fileData->attrs, rank_atom, fileData->rank);   
-
-    //generate multiqueue function that sends formats or all data based on flush msg
-
-    FMStructDescList queue_list[] = {flush_format_list, 
-				     var_format_list, 
-				     op_format_list, 
-				     evgroup_format_list,
-				     drop_evgroup_msg_format_list,
-				     data_format_list,
-				     update_step_msg_format_list,
-				     NULL};
-    char* q_action_spec = create_multityped_action_spec(queue_list, 
-							multiqueue_action); 
-    fileData->multi_action = EVassoc_multi_action(flexpathWriteData.cm, 
-						  fileData->multiStone, 
-						  q_action_spec, 
-						  NULL);
-    fileData->dataSource = EVcreate_submit_handle(flexpathWriteData.cm, 
-						  fileData->multiStone, 
-						  fileData->fm->format);						 
-
-    fileData->opSource = EVcreate_submit_handle(flexpathWriteData.cm, 
-						fileData->multiStone, 
-						op_format_list); 
-    
-    fileData->offsetSource = EVcreate_submit_handle(flexpathWriteData.cm, 
-						    fileData->multiStone, 
-						    evgroup_format_list);
-    fileData->dropSource = EVcreate_submit_handle(flexpathWriteData.cm, 
-						  fileData->multiStone, 
-						  drop_evgroup_msg_format_list);
-    
-    fileData->stepSource = EVcreate_submit_handle(flexpathWriteData.cm,
-						  fileData->multiStone, 
-						  update_step_msg_format_list);
-
-    EVassoc_terminal_action(flexpathWriteData.cm, fileData->sinkStone, 
-			    var_format_list, var_handler, fileData);
-    EVassoc_terminal_action(flexpathWriteData.cm, fileData->sinkStone, 
-			    op_format_list, op_handler, fileData);
-    EVassoc_terminal_action(flexpathWriteData.cm, fileData->sinkStone, 
-			    drop_evgroup_msg_format_list, drop_evgroup_handler, fileData);
-    EVassoc_terminal_action(flexpathWriteData.cm, fileData->sinkStone, 
-	flush_format_list, flush_handler, fileData);
-
-    //link multiqueue to sink
-    EVaction_set_output(flexpathWriteData.cm, fileData->multiStone, 
-        fileData->multi_action, 0, fileData->sinkStone);
-	
+    // Template for all other attrs set here
+
+    //generate multiqueue function that sends formats or all data based on data request msg
+
+    FMStructDescList queue_list[] = {read_request_format_list,
+                                     finalize_close_msg_format_list,
+                                     queue_size_msg_format_list,
+                                     data_format_list, 
+                                     NULL};
+
+    char *q_action_spec = create_multityped_action_spec(queue_list, multiqueue_action);
+
+    multi_action = EVassoc_multi_action(flexpathWriteData.cm, sub->multiStone, q_action_spec, NULL);
+    split_action = EVassoc_split_action(flexpathWriteData.cm, sub->splitStone, NULL);
+
+    EVassoc_terminal_action(flexpathWriteData.cm, sub->sinkStone, finalize_close_msg_format_list,
+                            finalize_msg_handler, fileData);
+    EVassoc_terminal_action(flexpathWriteData.cm, sub->sinkStone, queue_size_msg_format_list,
+                            queue_size_msg_handler, fileData);
+    //This is just set so the first get_attr doesn't throw an error message
+    attr_list multiqueue_stone_attrs = EVextract_attr_list(flexpathWriteData.cm, sub->multiStone);
+    add_int_attr(multiqueue_stone_attrs, QUEUE_SIZE, 0);   
+
+    sub->dataSource = EVcreate_submit_handle(flexpathWriteData.cm, sub->multiStone,
+                                             fileData->fm->format);
+
+    sub->scalarDataSource = EVcreate_submit_handle(flexpathWriteData.cm, sub->splitStone,
+                                                   fileData->fm->format);
+
+    sub->offsetSource = EVcreate_submit_handle(flexpathWriteData.cm, sub->splitStone,
+                                               evgroup_format_list);
+
+    sub->finalizeSource = EVcreate_submit_handle(flexpathWriteData.cm, sub->splitStone,
+                                                 finalize_close_msg_format_list);
+
+    // link multiqueue to sink
+
+    EVaction_set_output(flexpathWriteData.cm, sub->multiStone,
+                        multi_action, 0, sub->sinkStone);
+
+    // Set each output to the rank + 1 and preserve the 0 output for a sink
+    // stone just in case
+    // we need it for control one day
+    for (i = 0; i < numBridges; i++) {
+        sub->bridges[i].bridge_stoneID = EVcreate_bridge_action(
+            flexpathWriteData.cm,
+            attr_list_from_string(sub->bridges[i].contact),
+            sub->bridges[i].reader_stoneID);
+
+        EVaction_set_output(flexpathWriteData.cm, sub->multiStone,
+                            multi_action, i + 1,
+                            sub->bridges[i].bridge_stoneID);
+    }
+
+    // Set up split stone to peer'd readers
+    for (i = 0; i < sub->total_num_readers; i++) {
+        if ((i % fileData->size) == fileData->rank) {
+            EVaction_add_split_target(flexpathWriteData.cm,
+                                      sub->splitStone, split_action,
+                                      sub->bridges[i].bridge_stoneID);
+        }
+    }
+
     FMContext my_context = create_local_FMcontext();
     fileData->fm->ioFormat = register_data_format(my_context, fileData->fm->format);
-    
-    sprintf(writer_ready_filename, "%s_%s", fd->name, "writer_ready.txt");
+
+    // Set this up here so that the reader can close without waiting for the end
+    // of the stream
+    sub->final_condition = CMCondition_get(flexpathWriteData.cm, NULL);
+
     if (fileData->rank == 0) {
-        FILE* writer_info = fopen(writer_ready_filename, "w");
-        fprintf(writer_info, "ready");
-        fclose(writer_info);
-    }       
-    
-    pthread_create(&fileData->ctrl_thr_id, NULL, (void*)&control_thread, fileData);   
-    return 0;	
+        reader_go_msg go_msg;
+        go_msg.reader_file = sub->reader_file;
+        go_msg.start_timestep = 0;
+        CMFormat format = CMregister_simple_format(flexpathWriteData.cm, "Flexpath reader go", reader_go_field_list, sizeof(reader_go_msg));
+        fp_verbose(fileData, "Writer Rank 0 sending GO message to reader rank 0\n");
+        CMwrite(sub->reader_0_conn, format, &go_msg);
+    }
+    return 0;
 }
 
 
@@ -1702,8 +1406,9 @@ adios_flexpath_write(
     
     FMFieldList flist = fm->format[0].field_list;
     FMField *field = NULL;
-    char *fullname = resolve_path_name(f->path, f->name);
-    field = internal_find_field(fullname, flist);
+    char *fullname = append_path_name(f->path, f->name);
+    char *mangle_name = flexpath_mangle(fullname);
+    field = internal_find_field(mangle_name, flist);
 
     if (field != NULL) {
 	//scalar quantity
@@ -1712,7 +1417,8 @@ adios_flexpath_write(
 		//why wouldn't it have data?
 		if (f->type == adios_string) {
 		    char *tmpstr = strdup((char*)data);
-		    set_FMPtrField_by_name(flist, fullname, fm->buffer, tmpstr);
+		    if (!set_FMPtrField_by_name(flist, mangle_name, fm->buffer, tmpstr)) 
+			fprintf(stderr, "Set fmprtfield by name failed, name %s\n", mangle_name);
 		} else {
 		    memcpy(&fm->buffer[field->field_offset], data, field->field_size);
 		}
@@ -1729,7 +1435,9 @@ adios_flexpath_write(
 			    for (a = d->altList.lh_first; a != NULL; a = a->entries.le_next) {
 				if (f->type == adios_string) {
 				    char *tmpstr = strdup((char*)data);
-				    set_FMPtrField_by_name(flist, fullname, fm->buffer, tmpstr);
+				    if (!set_FMPtrField_by_name(flist, mangle_name, fm->buffer, tmpstr)) 
+					fprintf(stderr, "Set2 fmprtfield by name failed, name %s\n", mangle_name);
+
 				    //(strcpy(&fm->buffer[a->field->field_offset], (char*)data));
 				} else {
 				    memcpy(&fm->buffer[a->field->field_offset], 
@@ -1747,21 +1455,18 @@ adios_flexpath_write(
 	    //vector quantity
 	    if (data) {	    
                 struct adios_dimension_struct *dims = f->dimensions;
-                int arraysize = 0;
+                int arraysize = field->field_size;
                 while (dims) {
                     int size = adios_get_dim_value(&dims->dimension);
-                    if (arraysize) {
-                        arraysize *= size;
-                    }
-                    else
-                        arraysize = size;
+		    arraysize *= size;
                     dims = dims->next;
                 }
-                arraysize *= field->field_size;
                 void *datacpy = malloc(arraysize);
                 //void *temp = get_FMPtrField_by_name(flist, fullname, fm->buffer, 0);
                 memcpy(datacpy, data, arraysize);
-                set_FMPtrField_by_name(flist, fullname, fm->buffer, datacpy);
+                if (!set_FMPtrField_by_name(flist, mangle_name, fm->buffer, datacpy)) 
+		    fprintf(stderr, "Set3 fmprtfield by name failed, name %s\n", mangle_name);
+
 	    } else {
 		log_error("adios_flexpath_write: no array data found for var: %s. Bad.\n", f->name);	
 	    }
@@ -1769,114 +1474,265 @@ adios_flexpath_write(
     }
 }
 
+static void 
+exchange_dimension_data(struct adios_file_struct *fd, evgroup *gp, FlexpathWriteFileData *fileData)
+{
+    // process local offsets here       
+    struct adios_pg_struct * pg = fd->pgs_written;
+    struct adios_group_struct * g = fd->group;
+    int num_gbl_vars = 0;
+    global_var * gbl_vars = malloc(sizeof(global_var));
+    int num_vars = 0;
+    int myrank = fileData->rank;
+    int commsize = fileData->size;
+    int send_count = 0;   /* dimension count, sending size and offset per */
+    uint64_t *send_block = malloc(1);
+    
+    while (pg) {
+        struct adios_var_struct * list = pg->vars_written;
+        while (list) {
+            char *fullname = append_path_name(list->path, list->name);
+            //int num_local_offsets = 0;
+            uint64_t *local_offsets = NULL;
+            uint64_t *local_dimensions = NULL;
+            uint64_t *global_dimensions = NULL; // same at each rank.
+            int ndims = get_var_offsets(list, g, &local_offsets, 
+                                        &local_dimensions, &global_dimensions);
+
+            if (ndims == 0) {
+                list=list->next;
+                continue;
+            }
+
+            // flip for fortran here.
+            if (fileData->host_language == FP_FORTRAN_MODE) {
+                reverse_dims(local_offsets, ndims);
+                reverse_dims(local_dimensions, ndims);
+                reverse_dims(global_dimensions, ndims);
+            }
+            
+            send_block = realloc(send_block, (send_count + ndims * 2) * sizeof(send_block[0]));
+            memcpy(&send_block[send_count], local_dimensions, ndims * sizeof(send_block[0]));
+            memcpy(&send_block[send_count+ndims], local_offsets, ndims * sizeof(send_block[0]));
+            
+            
+            offset_struct *ostruct = malloc(sizeof(offset_struct));
+            ostruct->offsets_per_rank = ndims;
+            ostruct->total_offsets = ndims * commsize;
+            ostruct->global_dimensions = global_dimensions;
+                
+            num_gbl_vars++;
+            gbl_vars = realloc(gbl_vars, sizeof(global_var) * num_gbl_vars);
+            gbl_vars[num_gbl_vars - 1].name = fullname;
+            gbl_vars[num_gbl_vars - 1].noffset_structs = 1;
+            gbl_vars[num_gbl_vars - 1].offsets = ostruct;
+
+            send_count += ndims * 2;
+            list=list->next;
+        }
+        pg = pg->next;
+    }
+    int buf_size = send_count * commsize * sizeof(uint64_t);                
+    uint64_t *comm_block = malloc(buf_size);
+
+    MPI_Allgather(send_block, send_count, MPI_UINT64_T,
+                  comm_block, send_count, MPI_UINT64_T,
+                  fileData->mpiComm);
+
+    pg = fd->pgs_written;
+    int block_index = 0;
+    int gbl_var_index = 0;
+    while (pg) {
+        struct adios_var_struct * list = pg->vars_written;
+        while (list) {
+            int i, ndims = get_dim_count(list);
+
+            if (ndims == 0) {
+                list=list->next;
+                continue;
+            }
+
+            uint64_t *all_offsets = malloc(ndims*commsize*sizeof(uint64_t));
+            uint64_t *all_local_dims = malloc(ndims*commsize*sizeof(uint64_t));
+                
+
+            // extract dimensions for rank i from comm block
+            //block_index = which global variable
+            //i = which MPI rank
+            //send_count = size of the total number of global variables per process * numdimensions * 2
+            for (i = 0; i < commsize; i++) {
+                memcpy(&all_local_dims[i*ndims], &comm_block[i*send_count + block_index], ndims * sizeof(send_block[0]));
+                memcpy(&all_offsets[i*ndims], &comm_block[i*send_count + block_index + ndims], ndims * sizeof(send_block[0]));
+            }
+            gbl_vars[gbl_var_index].offsets->local_offsets = all_offsets;
+            gbl_vars[gbl_var_index].offsets->local_dimensions = all_local_dims;
+
+            gbl_var_index++;
+            block_index += ndims * 2;
+            list=list->next;
+        }
+        
+        pg = pg->next;
+    }
+    
+    free(comm_block);
+    if (num_gbl_vars == 0) {
+        free(gbl_vars);
+        gbl_vars = NULL;
+    }
+    gp->num_vars = num_gbl_vars;
+    gp->vars = gbl_vars;
+    //fileData->gp = gp;       
+}
+
+extern void
+adios_flexpath_feedback_handler(struct adios_file_struct *fd, 
+                                FMStructDescList format_list, 
+                                EVSimpleHandlerFunc handler, void *client_data)
+{
+    static int first = 1;
+    static atom_t global_stone_ID;
+    if (first) {
+        /*
+         * we don't have a means of assigning these truely "globally", so we'll leverage the 32-bit 
+         * atom name hashing mechanisms (which we use in ATL and rely upon to hopefully avoid collisions)
+         */
+        global_stone_ID = attr_atom_from_string("flexpath feedback stone");
+        global_stone_ID |= 0x80000000;
+        first = 0;
+    }
+    FlexpathWriteFileData* fileData = find_flexpath_fileData(fd);
+    subscriber_info sub = fileData->subscribers;
+    CMadd_stone_to_global_lookup(flexpathWriteData.cm, sub->sinkStone, global_stone_ID);
+    EVassoc_terminal_action(flexpathWriteData.cm, sub->sinkStone, format_list, 
+                            handler, client_data);
+}
+
+
+
+/* This function is used to free the data when it is no longer needed by EVPath */
+static void
+free_data_buffer(void * event_data, void * client_data)
+{
+    free(event_data);
+}
+
+void
+set_attributes_in_buffer(FlexpathWriteFileData *fileData, struct adios_group_struct *group, char *buffer)
+{
+    struct adios_attribute_struct *attr;
+    FlexpathFMStructure* fm = fileData->fm;
+    FMFieldList flist = fm->format[0].field_list;
+    for (attr = group->attributes; attr != NULL; attr = attr->next) {
+	FMField *field = NULL;
+	char *fullname = append_path_name(attr->path, attr->name);
+	char *mangle_name = flexpath_mangle(fullname);
+	field = internal_find_field(mangle_name, flist);
+
+	if (field != NULL) {
+	    void *data = attr->value;
+	    if (attr->type == adios_string) {
+		char *tmpstr = strdup((char*)data);
+		if (!set_FMPtrField_by_name(flist, mangle_name, buffer, tmpstr)) 
+		    fp_verbose(fileData, "Set fmprtfield by name failed, name %s\n", mangle_name);
+	    } else {
+		memcpy(&buffer[field->field_offset], data, field->field_size);
+	    }
+	}
+    }
+}
+
+/*Flexpath_close:
+ 
+    In this function we send out the global metadata and the scalars to our 
+    EVsources that are connected to the split stone for this member of the writer cohort.
+    The split stone is connected in adios_open to the bridge stones of the appropriate reader 
+    cohort members.  In addition we send all of the available data on this writer cohort to 
+    the multiqueue stone, where it is stored and managed.
+
+    There exists a single MPI_ALL_Gather operation in the exchange_dimension_data function in 
+    adios_close.  This is the synchronization point for the writers and it does not exist in the 
+    absence of global variables.
+*/
 extern void 
 adios_flexpath_close(struct adios_file_struct *fd, struct adios_method_struct *method) 
 {
+    attr_list attrs = create_attr_list();
     FlexpathWriteFileData *fileData = find_open_file(method->group->name);
-    void *buffer = malloc(fileData->fm->size);    
-    memcpy(buffer, fileData->fm->buffer, fileData->fm->size);
+    subscriber_info sub = fileData->subscribers;
 
     fp_verbose(fileData, " adios_flexpath_close called\n");
-    threaded_enqueue(&fileData->dataQueue, buffer, 
-		     DATA_BUFFER,
-		     &fileData->dataMutex, 
-		     &fileData->dataCondition,
-		     fileData->maxQueueSize);
+
+    //Timestep attr needed for raw handler on the reader side to determine which timestep the piece of data is 
+    //refering too.
+    add_int_attr(attrs, RANK_ATOM, fileData->rank);   
+    add_int_attr(attrs, NATTRS, fileData->fm->nattrs);
+    set_int_attr(attrs, TIMESTEP_ATOM, fileData->writerStep);
+
+    //We create two attr_lists because we reference count them underneath and the two messages that we
+    //send out have got to be different.  We want to identify what is the only scalars message on the 
+    //reader side to process it differently.
+    attr_list temp_attr_scalars = attr_copy_list(attrs);
+    attr_list temp_attr_noscalars = attr_copy_list(attrs);
     
     // now gather offsets and send them via MPI to root
-    struct adios_group_struct * g = fd->group;
-    struct adios_pg_struct * pg = fd->pgs_written;
     evgroup *gp = malloc(sizeof(evgroup));    
+    memset(gp, 0, sizeof(evgroup));
     gp->group_name = strdup(method->group->name);
     gp->process_id = fileData->rank;
-    if (fileData->globalCount == 0 ) {
+    gp->step = fileData->writerStep;
 
+    set_attributes_in_buffer(fileData, method->group, fileData->fm->buffer);
+
+    if (fileData->globalCount == 0 ) {
 	gp->num_vars = 0;
-	gp->step = fileData->writerStep;
 	gp->vars = NULL;
-	EVsubmit_general(fileData->offsetSource, gp, evgroup_msg_free, fileData->attrs);
-    }
-
-    else {	
-        // process local offsets here	
-	int num_gbl_vars = 0;
-        global_var * gbl_vars = NULL;
-	int num_vars = 0;
-	int myrank = fileData->rank;
-	int commsize = fileData->size;
-
-        while (pg) {
-            struct adios_var_struct * list = pg->vars_written;
-            while (list) {
-                char *fullname = resolve_path_name(list->path, list->name);
-                //int num_local_offsets = 0;
-                uint64_t *local_offsets = NULL;
-                uint64_t *local_dimensions = NULL;
-                uint64_t *global_dimensions = NULL; // same at each rank.
-                int num_local_offsets = get_var_offsets(list, g, 
-                        &local_offsets, 
-                        &local_dimensions, 
-                        &global_dimensions);
-                // flip for fortran here.
-                if (fileData->host_language == FP_FORTRAN_MODE) {
-                    reverse_dims(local_offsets, num_local_offsets);
-                    reverse_dims(local_dimensions, num_local_offsets);
-                    reverse_dims(global_dimensions, num_local_offsets);
-                }
-
-                if (num_local_offsets > 0) {
-                    uint64_t *all_offsets = NULL;
-                    uint64_t *all_local_dims = NULL;
-
-                    int buf_size = num_local_offsets * commsize * sizeof(uint64_t);		    
-                    all_offsets = malloc(buf_size);		
-                    all_local_dims = malloc(buf_size);
+    } else {    
+        //Synchronization point due to MPI_All_Gather operation
+        exchange_dimension_data(fd, gp, fileData);
+    }   
 
-                    int arr_size = num_local_offsets * sizeof(uint64_t);
-                    MPI_Allgather(local_offsets, arr_size, MPI_BYTE, 
-                            all_offsets, arr_size, MPI_BYTE,
-                            fileData->mpiComm);
+    //Used to strip out the array data and send only scalar data, array data is stripped out by setting pointer to NULL
+    void* temp = copy_buffer_without_array(fileData->fm->buffer, fileData);
+   
+    set_int_attr(temp_attr_scalars, SCALAR_ATOM, 1);
+    set_int_attr(temp_attr_noscalars, SCALAR_ATOM, 0);
 
-                    MPI_Allgather(local_dimensions, arr_size, MPI_BYTE, 
-                            all_local_dims, arr_size, MPI_BYTE,
-                            fileData->mpiComm);
+    //Need to make a copy as we reuse the fileData->fm in every step...
+    void *buffer = malloc(fileData->fm->size);    
+    memcpy(buffer, fileData->fm->buffer, fileData->fm->size);
 
-                    num_gbl_vars++;
-                    offset_struct *ostruct = malloc(sizeof(offset_struct));
-                    ostruct->offsets_per_rank = num_local_offsets;
-                    ostruct->total_offsets = num_local_offsets * commsize;
-                    ostruct->local_offsets = all_offsets;
-                    ostruct->local_dimensions = all_local_dims;
-                    ostruct->global_dimensions = global_dimensions;
+    //Submit the messages that will get forwarded on immediately to the designated readers through split stone
+    EVsubmit_general(sub->offsetSource, gp, NULL, temp_attr_scalars);
+    EVsubmit_general(sub->scalarDataSource, temp, free_data_buffer, temp_attr_scalars);
 
-                    gbl_vars = realloc(gbl_vars, sizeof(global_var) * num_gbl_vars);
-                    gbl_vars[num_gbl_vars - 1].name = fullname;
-                    gbl_vars[num_gbl_vars - 1].noffset_structs = 1;
-                    gbl_vars[num_gbl_vars - 1].offsets = ostruct;
+    //Testing against the maxqueuesize
+    int current_queue_size; 
+    attr_list multiqueue_attrs = EVextract_attr_list(flexpathWriteData.cm, sub->multiStone);
+    if(!get_int_attr(multiqueue_attrs, QUEUE_SIZE, &current_queue_size)) {
+        fprintf(stderr, "Error: Couldn't find queue_size in multiqueue stone attrs!\n");
+    }
 
-                }
-                list=list->next;
-            }
+    while(current_queue_size == fileData->maxQueueSize) {
+        pthread_mutex_lock(&(fileData->queue_size_mutex));
+        fp_verbose(fileData, "Waiting for queue to become less full on timestep: %d\n", fileData->writerStep);
+        pthread_cond_wait(&(fileData->queue_size_condition), &(fileData->queue_size_mutex));
+        fp_verbose(fileData, "Received queue_size signal!\n");
+        pthread_mutex_unlock(&(fileData->queue_size_mutex));
 
-            pg = pg->next;
+        if(!get_int_attr(multiqueue_attrs, QUEUE_SIZE, &current_queue_size)) {
+            fprintf(stderr, "Error: Couldn't find queue_size in multiqueue stone attrs!\n");
         }
-
-	gp->num_vars = num_gbl_vars;
-	gp->step = fileData->writerStep;
-	gp->vars = gbl_vars;
-	//fileData->gp = gp;       
     }
-    
-    update_step_msg *stepmsg = malloc(sizeof(update_step_msg));
-    stepmsg->finalized = 0;
-    stepmsg->step = fileData->writerStep;
-    stepmsg->condition = -1;
-    EVsubmit_general(fileData->stepSource, stepmsg, update_step_msg_free, fileData->attrs);
-    
-    fileData->attrs = set_size_atom(fileData->attrs, fileData->size);
-    EVsubmit_general(fileData->offsetSource, gp, evgroup_msg_free, fileData->attrs);
 
+
+    //Full data is submitted to multiqueue stone
+    EVsubmit_general(sub->dataSource, buffer, free_data_buffer, temp_attr_noscalars);
+
+    free_attr_list(temp_attr_scalars);
+    free_attr_list(temp_attr_noscalars);
     fileData->writerStep++;
+    fp_verbose(fileData, " adios_flexpath_close exit\n");
 }
 
 // wait until all open files have finished sending data to shutdown
@@ -1885,24 +1741,39 @@ adios_flexpath_finalize(int mype, struct adios_method_struct *method)
 {
     FlexpathWriteFileData* fileData = flexpathWriteData.openFiles;
     fp_verbose(fileData, "adios_flexpath_finalize called\n");
-    while(fileData) {
-
-	update_step_msg *stepmsg = malloc(sizeof(update_step_msg));
-	stepmsg->finalized = 1;
-	stepmsg->step = fileData->writerStep - 1;
-	stepmsg->condition = -1;
-	EVsubmit_general(fileData->stepSource, stepmsg, update_step_msg_free, fileData->attrs);
-
-        pthread_mutex_lock(&fileData->dataMutex);
-        while (fileData->dataQueue != NULL) {
-	    fp_verbose(fileData, " Wait in flexpath finalize\n");
-	    pthread_cond_wait(&fileData->dataCondition, &fileData->dataMutex);
-	}
-	pthread_mutex_unlock(&fileData->dataMutex);
+    subscriber_info sub = fileData->subscribers;
 
+    while(fileData) {
+        attr_list attrs = create_attr_list();
+        finalize_close_msg end_msg;
+        if (fileData->failed) {
+            fp_verbose(fileData, "adios_flexpath_finalize file %p already-failed output stream, rolling on\n", fileData);
+        } else {
+            int cond;
+            end_msg.finalize = 1;
+            end_msg.close = 1;
+            end_msg.final_timestep = fileData->writerStep;
+            add_int_attr(attrs, RANK_ATOM, fileData->rank);   
+            EVsubmit_general(sub->finalizeSource, &end_msg, NULL, attrs);
+            free_attr_list(attrs);
+
+            fp_verbose(fileData, "Sent finalize message to readers \n");
+
+            /*TODO:Very Bad!!! This means that our finalization is not going to be able to 
+              differentiate between streams...but the API doesn't support that yet, so...*/
+            cond = sub->final_condition;
+            if (cond != -1) {
+                fp_verbose(fileData, "Waiting on condition %d for the reader to be done!\n", cond);
+                CMCondition_wait(flexpathWriteData.cm, cond);
+            }
+            fp_verbose(fileData, "Finished Wait for reader cohort to be finished!\n");
+        }
 	fileData->finalized = 1;
 	fileData = fileData->next;	    
     }
+
+    //fp_verbose(fileData, "Finished all waits! Exiting finalize method now!\n");
+
 }
 
 // provides unknown functionality
diff --git a/src/write/adios_icee.c b/src/write/adios_icee.c
index 99dca22..0a03f78 100644
--- a/src/write/adios_icee.c
+++ b/src/write/adios_icee.c
@@ -40,7 +40,7 @@
 #include "core/util.h"
 #include "core/adios_logger.h"
 #include "core/adios_clock.h"
-
+#include "core/adiost_callback_internal.h"
 
 #ifdef HAVE_ICEE
 
@@ -222,6 +222,7 @@ job_cleanup(thr_pool_t *pool)
 static void *
 worker_thread(void *arg)
 {
+    ADIOST_CALLBACK_ENTER(adiost_event_thread, NULL, "ICEE worker thread");
     thr_pool_t *pool = (thr_pool_t *)arg;
     int timedout;
     job_t *job;
@@ -302,6 +303,7 @@ worker_thread(void *arg)
         }
     }
     pthread_cleanup_pop(1); /* worker_cleanup(pool) */
+    ADIOST_CALLBACK_EXIT(adiost_event_thread, NULL, "ICEE worker thread");
     return (NULL);
 }
 
diff --git a/src/write/adios_mpi.c b/src/write/adios_mpi.c
index bf0c642..46df727 100644
--- a/src/write/adios_mpi.c
+++ b/src/write/adios_mpi.c
@@ -290,6 +290,12 @@ static void init_mpi_chain(MPI_Comm comm)
     {
     	MPI_Recv (&token, 1, MPI_INT, rank-1, rank-1, comm, &status);
     }
+
+    // Wait for Isend to complete before otherwise the request variable may disappear from the stack
+    if (rank < size-1)
+    {
+        MPI_Wait(&req, &status);
+    }
 }
 
 void adios_mpi_init (const PairStruct * parameters
diff --git a/src/write/adios_mpi_amr.c b/src/write/adios_mpi_amr.c
index 981b6c2..7f5c740 100644
--- a/src/write/adios_mpi_amr.c
+++ b/src/write/adios_mpi_amr.c
@@ -29,6 +29,7 @@
 #include "core/buffer.h"
 #include "core/util.h"
 #include "core/adios_logger.h"
+#include "core/adiost_callback_internal.h"
 
 #if defined ADIOS_TIMERS || defined ADIOS_TIMER_EVENTS
 #include "core/adios_timing.h"
@@ -921,6 +922,7 @@ void * adios_mpi_amr_do_mkdir (char * path)
 
 void * adios_mpi_amr_do_open_thread (void * param)
 {
+    ADIOST_CALLBACK_ENTER(adiost_event_thread, NULL, __func__);
     struct adios_MPI_thread_data_open * td = (struct adios_MPI_thread_data_open *) param;
     int err;
 
@@ -948,6 +950,7 @@ void * adios_mpi_amr_do_open_thread (void * param)
                      td->md->subfile_name, e);
     }
 
+    ADIOST_CALLBACK_ENTER(adiost_event_thread, NULL, __func__);
     return NULL;
 }
 
@@ -1046,6 +1049,7 @@ void * adios_mpi_amr_do_reopen_thread (void * param)
 
 void * adios_mpi_amr_do_write_thread (void * param)
 {
+    ADIOST_CALLBACK_ENTER(adiost_event_thread, NULL, __func__);
     struct adios_MPI_thread_data_write * td = (struct adios_MPI_thread_data_write *) param;
 
     uint64_t count = adios_mpi_amr_striping_unit_write(
@@ -1062,6 +1066,7 @@ void * adios_mpi_amr_do_write_thread (void * param)
             count, td->total_data_size);
     }
 
+    ADIOST_CALLBACK_EXIT(adiost_event_thread, NULL, __func__);
     return NULL;
 }
 
diff --git a/src/write/adios_posix.c b/src/write/adios_posix.c
index 35d6c66..e547e62 100644
--- a/src/write/adios_posix.c
+++ b/src/write/adios_posix.c
@@ -23,6 +23,7 @@
 #include <mxml.h>
 
 #include "public/adios_mpi.h" // MPI or dummy MPI for seq. build
+#include "public/adios_error.h"
 #include "core/adios_transport_hooks.h"
 #include "core/adios_bp_v1.h"
 #include "core/adios_internals.h"
@@ -64,8 +65,10 @@ struct adios_POSIX_data_struct
     int rank;
     int size;
 #endif
-    int g_have_mdf;
+    int g_have_mdf; // = 1 write global metadata file
+    int local_fs; // = N  every N processes are writing to a local file system
     int file_is_open; // = 1 if in append mode we leave the file open (close at finalize)
+    char *filename; // remember the currently opened filename to recognize when user suddenly changes to another one
     int index_is_in_memory; // = 1 when index is kept in memory, no need to read from file. =1 after first 'append/update' is completed but not after first 'write'.
     uint64_t pg_start_next; // remember end of PG data for future append steps
 
@@ -99,10 +102,46 @@ void adios_posix_init (const PairStruct * parameters
     p->size = 0;
 #endif
     p->g_have_mdf = 1;
+    p->local_fs = 0; // only rank 0 creates the directory for sub-files
     p->file_is_open = 0;  // = 1 when posix file is open (used in append mode only)
+    p->filename = NULL;
     p->index_is_in_memory = 0; 
     p->pg_start_next = 0;
     p->total_bytes_written = 0;
+
+
+    // process user parameters
+    const PairStruct *ps = parameters;
+    while (ps) {
+        if (!strcasecmp (ps->name, "have_metadata_file")) 
+        {
+            errno = 0;
+            p->g_have_mdf = strtol(ps->value, NULL, 10);
+            if (!errno) {
+                log_debug ("Parameter 'have_metadata_file' set to %d for POSIX write method\n",
+                           p->g_have_mdf);
+            } else {
+                log_error ("Invalid 'have_metadata_file' parameter given to the POSIX write "
+                           "method: '%s'\n", ps->value);
+            }
+        } 
+        else if (!strcasecmp (ps->name, "local-fs")) 
+        {
+            errno = 0;
+            p->local_fs = strtol(ps->value, NULL, 10);
+            if (!errno) {
+                log_debug ("Parameter 'local-fs' set to %d for POSIX write method\n",
+                           p->local_fs);
+            } else {
+                log_error ("Invalid 'local-fs' parameter given to the POSIX write "
+                           "method: '%s'\n", ps->value);
+            }
+        } else {
+            log_error ("Parameter name %s is not recognized by the POSIX write "
+                        "method\n", ps->name);
+        }
+        ps = ps->next;
+    }
 }
 
 
@@ -128,25 +167,6 @@ int adios_posix_open (struct adios_file_struct * fd
     struct adios_POSIX_data_struct * p = (struct adios_POSIX_data_struct *)
                                                           method->method_data;
 
-    char *temp_string, *m_size;
-
-    temp_string = a2s_trim_spaces (method->parameters);
-    if ( (m_size = strstr (temp_string, "have_metadata_file")) )
-    {
-        char * m = strchr (m_size, '=');
-        char * n = strtok (m, ";");
-
-        if (!n)
-            p->g_have_mdf = atoi (n + 1);
-        else
-            p->g_have_mdf = atoi (m + 1);
-    }
-    else
-    {
-        // by default, write metadata file. 
-        p->g_have_mdf = 1;
-    }
-    free (temp_string);
 
 #if defined ADIOS_TIMERS || defined ADIOS_TIMER_EVENTS
     int timer_count = 8;
@@ -246,6 +266,27 @@ START_TIMER (ADIOS_TIMER_AD_OPEN);
     fd->subfile_index = p->rank; // Only if HAVE_MPI
 #endif
 
+    // if an app writes multiple files with each multiple steps,
+    // i.e. with a w,a,a,a then w to another filename pattern, then
+    // we need to free up stuff kept in memory about the previous file
+    if (!p->filename) {
+        //printf ("ADIOS POSIX Open: First filename %s\n", subfile_name);
+        p->filename = strdup(subfile_name);
+    } else if (strcmp(subfile_name, p->filename)) {
+        //printf ("ADIOS POSIX Open: Change filename %s\n", subfile_name);
+        if (p->file_is_open) {
+            //printf ("ADIOS POSIX Open: Clear up previous file %s\n", p->filename);
+            adios_clear_index_v1 (p->index); // append and update methods never cleared the index and kept file open
+            adios_posix_close_internal (&p->b);
+            p->file_is_open = 0;
+            p->index_is_in_memory = 0;
+            p->b.end_of_pgs = 0;
+        }
+        free (p->filename);
+        p->filename = strdup(subfile_name);
+    }
+
+
     p->total_bytes_written = 0; // counts bytes written only in this open()..close() step
 
     switch (fd->mode)
@@ -255,7 +296,7 @@ START_TIMER (ADIOS_TIMER_AD_OPEN);
             p->b.f = open (subfile_name, O_RDONLY | O_LARGEFILE);
             if (p->b.f == -1)
             {
-                fprintf (stderr, "ADIOS POSIX: file not found: %s\n", fd->name);
+                log_error("ADIOS POSIX: file not found: %s\n", fd->name);
 
                 free (subfile_name);
 
@@ -275,8 +316,15 @@ START_TIMER (ADIOS_TIMER_AD_OPEN);
             // create dir to keep all the subfiles
             if (p->group_comm != MPI_COMM_SELF)
             {
-                if (p->rank == 0)
+                /* p->local_fs controls who creates directories.
+                   local_fs = 0 means only rank 0 does
+                   local_fs = N means every Nth rank does
+                */
+                if ( (p->local_fs == 0 && p->rank == 0) ||
+                     (p->local_fs > 0 && p->rank % p->local_fs == 0)
+                   )
                 {
+                    log_debug ("ADIOS POSIX: mkdir by rank %d\n", p->rank);
                     char * dir_name = malloc (strlen (fd->name) + 4 + 1);
                     sprintf (dir_name, "%s%s"
                                      , fd->name
@@ -297,7 +345,7 @@ START_TIMER (ADIOS_TIMER_AD_OPEN);
                             );
             if (p->b.f == -1)
             {
-                fprintf (stderr, "adios_posix_open failed for "
+                log_error("adios_posix_open failed for "
                                  "base_path %s, subfile name %s\n"
                         ,method->base_path, subfile_name
                         );
@@ -322,7 +370,7 @@ START_TIMER (ADIOS_TIMER_AD_OPEN);
                              );
                     if (p->mf == -1)
                     {
-                        fprintf (stderr, "adios_posix_open failed for "
+                        log_error("adios_posix_open failed for "
                                          "base_path %s, metadata file name %s\n"
                                 ,method->base_path, mdfile_name
                                 );
@@ -382,7 +430,7 @@ START_TIMER (ADIOS_TIMER_AD_OPEN);
                                   S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
                     if (p->b.f == -1)
                     {
-                        fprintf (stderr, "adios_posix_open failed to create  file %s\n" ,subfile_name);
+                        log_error("adios_posix_open failed to create  file %s\n" ,subfile_name);
 
                         free (subfile_name);
                         free (mdfile_name);
@@ -414,7 +462,7 @@ START_TIMER (ADIOS_TIMER_AD_OPEN);
                             );
                     if (p->mf == -1)
                     {
-                        fprintf (stderr, "adios_posix_open failed to create  file %s\n" ,mdfile_name);
+                        log_error("adios_posix_open failed to create  file %s\n" ,mdfile_name);
                         free (subfile_name);
                         free (mdfile_name);
 
@@ -482,7 +530,7 @@ START_TIMER (ADIOS_TIMER_AD_OPEN);
                             break;
 
                         default:
-                            fprintf (stderr, "Unknown bp version: %d.  "
+                            log_error("Unknown bp version: %d.  "
                                     "Cannot append\n"
                                     ,version
                                     );
@@ -514,7 +562,7 @@ START_TIMER (ADIOS_TIMER_AD_OPEN);
 
         default:
         {
-            fprintf (stderr, "Unknown file mode: %d\n", fd->mode);
+            log_error("Unknown file mode: %d\n", fd->mode);
 
             free (subfile_name);
             free (mdfile_name);
@@ -600,7 +648,7 @@ void adios_posix_get_write_buffer (struct adios_file_struct * fd
         if (!*buffer)
         {
             adios_method_buffer_free (mem_allowed);
-            fprintf (stderr, "Out of memory allocating %" PRIu64 " bytes for %s\n"
+            log_error("Out of memory allocating %" PRIu64 " bytes for %s\n"
                     ,*size, v->name
                     );
             v->got_buffer = adios_flag_no;
@@ -621,7 +669,7 @@ void adios_posix_get_write_buffer (struct adios_file_struct * fd
     else
     {
         adios_method_buffer_free (mem_allowed);
-        fprintf (stderr, "OVERFLOW: Cannot allocate requested buffer of %" PRIu64 " "
+        log_error("OVERFLOW: Cannot allocate requested buffer of %" PRIu64 " "
                          "bytes for %s\n"
                 ,*size
                 ,v->name
@@ -659,6 +707,8 @@ static void adios_posix_write_pg (struct adios_file_struct * fd
     off_t offset = fd->current_pg->pg_start_in_file;
 
     /* FIXME: what is this check? Should never happen ? */
+    //printf ("%s: p->b.end_of_pgs = %" PRIu64 " fd->current_pg->pg_start_in_file = %"
+    //        PRIu64 "\n", __func__, p->b.end_of_pgs, fd->current_pg->pg_start_in_file);
     assert (p->b.end_of_pgs <= fd->current_pg->pg_start_in_file);
     if (p->b.end_of_pgs > fd->current_pg->pg_start_in_file)
         offset = p->b.end_of_pgs;
@@ -669,30 +719,33 @@ static void adios_posix_write_pg (struct adios_file_struct * fd
 
     lseek (p->b.f, offset, SEEK_SET);
 
-    if (fd->bytes_written > MAX_MPIWRITE_SIZE)
-    {
-        to_write = MAX_MPIWRITE_SIZE;
-    }
-    else
-    {
-        to_write = (int32_t) fd->bytes_written;
-    }
-
     while (bytes_written < fd->bytes_written)
     {
-        write (p->b.f, fd->buffer, to_write);
+        if (fd->bytes_written - bytes_written > MAX_MPIWRITE_SIZE)
+        {
+            to_write = MAX_MPIWRITE_SIZE;
+        }
+        else
+        {
+            to_write = fd->bytes_written - bytes_written;
+        }
+
+        ssize_t wrote = write (p->b.f, fd->buffer+bytes_written, to_write);
         bytes_written += to_write;
-        if (fd->bytes_written > bytes_written)
+
+        if (wrote == -1)
         {
-            if (fd->bytes_written - bytes_written > MAX_MPIWRITE_SIZE)
-            {
-                to_write = MAX_MPIWRITE_SIZE;
-            }
-            else
-            {
-                to_write = fd->bytes_written - bytes_written;
-            }
+            adios_error (err_write_error, "Failure to write data to file %s by rank %d: %s\n",
+                    fd->name, p->rank, strerror(errno));
+            break;
         }
+        else if (wrote != to_write)
+        {
+            adios_error (err_write_error, "Failure to write data completely to file %s by rank %d: "
+                    "Wanted to write %ld bytes to file at once but only %ld was written\n",
+                    fd->name, p->rank, to_write, wrote);
+        }
+
     }
 
     p->total_bytes_written += bytes_written;
@@ -845,7 +898,7 @@ static void adios_posix_do_read (struct adios_file_struct * fd
         }
 
         default:
-            fprintf (stderr, "POSIX read: file version unknown: %u\n", version);
+            log_error("POSIX read: file version unknown: %u\n", version);
             return;
     }
 
@@ -936,7 +989,7 @@ void adios_posix_close (struct adios_file_struct * fd
 
                     recv_buffer = malloc (total_size);
                     START_TIMER (ADIOS_TIMER_COMM);
-                    MPI_Gatherv (&size, 0, MPI_BYTE
+                    MPI_Gatherv (buffer, 0, MPI_BYTE // 0 == index_sizes[0]
                                 ,recv_buffer, index_sizes, index_offsets
                                 ,MPI_BYTE, 0, p->group_comm
                                 );
@@ -998,7 +1051,7 @@ void adios_posix_close (struct adios_file_struct * fd
                     STOP_TIMER (ADIOS_TIMER_IO);
                     if (s != global_index_buffer_offset)
                     {
-                        fprintf (stderr, "POSIX method tried to write %" PRIu64 ", "
+                        log_error("POSIX method tried to write %" PRIu64 ", "
                                          "only wrote %" PRId64 ". %s:%d\n"
                                          ,fd->bytes_written
                                          ,(int64_t)s
@@ -1013,13 +1066,13 @@ void adios_posix_close (struct adios_file_struct * fd
                 {
                     START_TIMER (ADIOS_TIMER_COMM);
                     // Added this explicit cast to avoid truncation of low-order bytes on BGP
-                    int i_buffer_size = (int) buffer_offset;
-                    MPI_Gather (&i_buffer_size, 1, MPI_INT
+                    int i_buffer_offset = (int) buffer_offset;
+                    MPI_Gather (&i_buffer_offset, 1, MPI_INT
                                ,0, 0, MPI_INT
                                ,0, p->group_comm
                                );
 
-                    MPI_Gatherv (buffer, i_buffer_size, MPI_BYTE
+                    MPI_Gatherv (buffer, i_buffer_offset, MPI_BYTE
                                 ,0, 0, 0, MPI_BYTE
                                 ,0, p->group_comm
                                 );
@@ -1094,7 +1147,7 @@ void adios_posix_close (struct adios_file_struct * fd
                     int * index_offsets = malloc (4 * p->size);
                     char * recv_buffer = 0;
                     int i;
-                    uint32_t size = buffer_size;
+                    uint32_t size = buffer_offset;
                     uint32_t total_size = 0;
 
                     // Need to make a temporary copy of p->index and merge
@@ -1121,10 +1174,9 @@ void adios_posix_close (struct adios_file_struct * fd
                     }
 
                     recv_buffer = malloc (total_size);
-                    memcpy (recv_buffer, buffer, index_sizes[0]);
 
                     START_TIMER (ADIOS_TIMER_COMM);
-                    MPI_Gatherv (&size, 0, MPI_BYTE
+                    MPI_Gatherv (buffer, index_sizes[0], MPI_BYTE
                                 ,recv_buffer, index_sizes, index_offsets
                                 ,MPI_BYTE, 0, p->group_comm
                                 );
@@ -1190,7 +1242,7 @@ void adios_posix_close (struct adios_file_struct * fd
                     STOP_TIMER (ADIOS_TIMER_IO);
                     if (s != global_index_buffer_offset)
                     {
-                        fprintf (stderr, "POSIX method tried to write %" PRIu64 ", "
+                        log_error("POSIX method tried to write %" PRIu64 ", "
                                          "only wrote %" PRId64 ", Mode: a. %s:%d\n"
                                          ,global_index_buffer_offset
                                          ,(int64_t)s
@@ -1207,12 +1259,14 @@ void adios_posix_close (struct adios_file_struct * fd
                 else
                 {
                     START_TIMER (ADIOS_TIMER_COMM);
-                    MPI_Gather (&buffer_size, 1, MPI_INT
+                    // Added this explicit cast to avoid truncation of low-order bytes on BGP
+                    int i_buffer_offset = (int) buffer_offset;
+                    MPI_Gather (&i_buffer_offset, 1, MPI_INT
                                ,0, 0, MPI_INT
                                ,0, p->group_comm
                                );
 
-                    MPI_Gatherv (buffer, buffer_size, MPI_BYTE
+                    MPI_Gatherv (buffer, i_buffer_offset, MPI_BYTE
                                 ,0, 0, 0, MPI_BYTE
                                 ,0, p->group_comm
                                 );
@@ -1248,7 +1302,7 @@ void adios_posix_close (struct adios_file_struct * fd
 
         default:
         {
-            fprintf (stderr, "Unknown file mode: %d\n", fd->mode);
+            log_error("Unknown file mode: %d\n", fd->mode);
 
             return;
         }
@@ -1284,6 +1338,11 @@ void adios_posix_finalize (int mype, struct adios_method_struct * method)
 
     adios_free_index_v1 (p->index);
 
+    if (p->filename) {
+        free (p->filename);
+        p->filename = NULL;
+    }
+
     if (adios_posix_initialized)
         adios_posix_initialized = 0;
 }
diff --git a/src/zfp/Makefile.in b/src/zfp/Makefile.in
index 411d9e0..0cae0c3 100644
--- a/src/zfp/Makefile.in
+++ b/src/zfp/Makefile.in
@@ -100,7 +100,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -108,8 +108,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -341,6 +341,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -417,6 +421,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/tests/C/Makefile.in b/tests/C/Makefile.in
index 6eaa73f..b29204f 100644
--- a/tests/C/Makefile.in
+++ b/tests/C/Makefile.in
@@ -101,7 +101,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -109,8 +109,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -369,6 +369,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -445,6 +449,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/tests/C/fgr_tests/Makefile.in b/tests/C/fgr_tests/Makefile.in
index 8795cf4..be1a734 100644
--- a/tests/C/fgr_tests/Makefile.in
+++ b/tests/C/fgr_tests/Makefile.in
@@ -101,7 +101,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -109,8 +109,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -327,6 +327,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -403,6 +407,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/tests/C/flexpath_tests/1D_arr_global/Makefile.in b/tests/C/flexpath_tests/1D_arr_global/Makefile.in
index 2a55814..497ad66 100644
--- a/tests/C/flexpath_tests/1D_arr_global/Makefile.in
+++ b/tests/C/flexpath_tests/1D_arr_global/Makefile.in
@@ -101,7 +101,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -109,8 +109,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -335,6 +335,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -411,6 +415,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/tests/C/flexpath_tests/1D_arr_global/reader.c b/tests/C/flexpath_tests/1D_arr_global/reader.c
index e67cb0a..0e8a44b 100644
--- a/tests/C/flexpath_tests/1D_arr_global/reader.c
+++ b/tests/C/flexpath_tests/1D_arr_global/reader.c
@@ -28,7 +28,7 @@
 
 
 int main (int argc, char **argv){
-	int rank =0, size =0;
+	int rank =0, writer_size =0;
 	int NX = 0;
 	double *t = NULL;
 	// this is an array we expect as a reference array
@@ -45,6 +45,10 @@ int main (int argc, char **argv){
 	MPI_Init( &argc, &argv);
 	MPI_Comm_rank (comm, &rank);
 
+        /*volatile int qur = 0;
+        while(qur == 0) {  Wait for gdb  }
+        MPI_Barrier(comm);*/
+
 	// depending on the method
 	SET_ERROR_IF_NOT_ZERO(adios_read_init_method(adios_opts.method, comm, adios_opts.adios_options), err.adios);
 	RET_IF_ERROR(err.adios, rank);
@@ -65,27 +69,20 @@ int main (int argc, char **argv){
 	// read how many processors wrote that array
 	avi = adios_inq_var (adios_handle, "size");
 	if (!avi){
-		p_error("rank %d: Quitting ... (%d) %s\n", rank, adios_errno, adios_errmsg());
+		p_error("rank %d: Quitting no inq var for writer size... (%d) %s\n", rank, adios_errno, adios_errmsg());
 		CLOSE_ADIOS_READER(adios_handle, adios_opts.method);
 		return DIAG_ERR;
 	}
-	size = *((int*)avi->value);
+	writer_size = *((int*)avi->value);
 	adios_free_varinfo(avi);
 	avi = NULL;
 
-	// if I run the more readers than writers; just release
-	// the excessive readers
-	if (rank >= size){
-		p_info("rank %d: I am an excessive rank. Nothing to read ...\n", rank);
-		CLOSE_ADIOS_READER(adios_handle, adios_opts.method);
-		return DIAG_OK;
-	}
 
-	// read the size of the array
+	// read the size of the array per process
 	avi = adios_inq_var (adios_handle, "NX");
 	if (!avi){
 		p_error("rank %d: Quitting ... (%d) %s\n", rank, adios_errno, adios_errmsg());
-		CLOSE_ADIOS_READER(adios_handle, adios_opts.method);
+		CLOSE_ADIOS_READER(adios_handle, adios_opts.method)
 		return DIAG_ERR;
 	}
 
@@ -106,11 +103,11 @@ int main (int argc, char **argv){
 	uint64_t count[2] = {1,0};
 	count[1] = NX;
 	uint64_t start[2] = {0,0};
-	start[0] = rank;
+	start[0] = rank % writer_size;
 
 	sel = adios_selection_boundingbox(2,start, count);
 	if( !sel ){
-		p_error("rank %d: Quitting ... (%d) %s\n", rank, adios_errno, adios_errmsg());
+		p_error("rank %d: Quitting because no sel... (%d) %s\n", rank, adios_errno, adios_errmsg());
 		diag = DIAG_ERR;
 		goto close_adios;
 	}
@@ -119,45 +116,53 @@ int main (int argc, char **argv){
 	t = calloc(NX, sizeof(double));
 
 	if (adios_schedule_read(adios_handle, sel, "var_1d_array",0,1,t) != 0){
-		p_error("rank %d: Quitting ...(%d) %s\n", rank, adios_errno, adios_errmsg());
+		p_error("rank %d: Quitting schedule read for var array failed...(%d) %s\n", 
+                                    rank, adios_errno, adios_errmsg());
 		diag = DIAG_ERR;
 		goto just_clean;
 	}
 
 	// not sure if this assumption is correct; difficult to find in the ADIOS sources
 	if (adios_perform_reads(adios_handle, 1) != 0){
-		p_error("rank %d: Quitting ...(%d) %s\n", rank, adios_errno, adios_errmsg());
+		p_error("rank %d: Couldn't perform the read...(%d) %s\n", rank, adios_errno, adios_errmsg());
 		diag = DIAG_ERR;
 		goto just_clean;
 	}
 
 	// make the reference array with reference values I expect to get
 	t_ref = calloc(NX, sizeof(double));
-	gen_1D_array(t_ref, NX, rank);
+	gen_1D_array(t_ref, NX, (rank % writer_size));
 
 	// compare the values what you get with what you expect
 	int i = 0;
+        if(rank == 0)
+        {
+            printf("Reader received array: ");
+        }
 	for (i = 0; i < NX; ++i) {
+                if(rank == 0)
+                    printf("%f ", t[i]);
 		if (t[i] != t_ref[i]) {
-			p_test_failed("%s: rank %d: for t[%d] (expected %.1f, got %.1f)\n",
-					test_result.name, rank, i, t_ref[i], t[i]);
+		    	test_failed(test_result.name, rank);
 			test_result.result = TEST_FAILED;
 			break;
 		}
 	}
+        if(rank == 0)
+            printf("\n");
 
 	if (TEST_PASSED == test_result.result)
-		p_test_passed("%s: rank %d\n", test_result.name, rank);
+		test_passed(test_result.name, rank);
 	else 
-	    p_test_failed("%s: rank %d\n", test_result.name, rank);
+	    test_failed(test_result.name, rank);
 
 
 	adios_release_step(adios_handle);
 	// 0 - next available step, block for max 30 seconds until the next step
 	// is available
 	adios_advance_step(adios_handle, 0, 30);
-	if (0 == adios_errno){
-		printf("Rank %d: proceeding to the next step ...\n", rank);
+	if (err_end_of_stream == adios_errno){
+		printf("Rank %d: finished the step and moved on appropriately\n", rank);
 	} else {
 		printf("ERROR: adios_advance_step(); anyway Quitting ... Rank %d: (%d) %s\n", rank, adios_errno, adios_errmsg());
 	}
diff --git a/tests/C/flexpath_tests/1D_arr_global/writer.c b/tests/C/flexpath_tests/1D_arr_global/writer.c
index ec04dd6..33ac73d 100644
--- a/tests/C/flexpath_tests/1D_arr_global/writer.c
+++ b/tests/C/flexpath_tests/1D_arr_global/writer.c
@@ -17,9 +17,9 @@
 #include "adios.h"
 #include "adios_read.h"  // for adios_errno
 
+#include "cfg.h"
 #include "misc.h"
 #include "utils.h"
-#include "cfg.h"
 #include "test_common.h"
 
 #include <stdio.h>
@@ -60,14 +60,27 @@ int main(int argc, char ** argv){
 		return DIAG_ERR;
 	}
 
+        if ((rank == 0) && test_verbose) {
+            printf("Writer side array: ");
+            int j;
+            for(j = 0; j < NX; j++)
+            {
+                printf("%f ", t[j]);
+            }
+            printf("\n");
+        }
+
+
 	uint64_t adios_groupsize, adios_totalsize;
 
 	// open with the group name as specified in the xml file
 	adios_open( &adios_handle, "temperature", FILE_NAME, "w", comm);
 	adios_groupsize = 4 + 4 + 4 + 8 * (NX);
 	retval=adios_group_size (adios_handle, adios_groupsize, &adios_totalsize);
-	fprintf(stderr, "Rank=%d adios_group_size(): adios_groupsize=%" PRIu64 ", adios_totalsize=%" PRIu64 ", retval=%d\n",
-			rank, adios_groupsize, adios_totalsize, retval);
+	if (test_verbose) {
+	    fprintf(stderr, "Rank=%d adios_group_size(): adios_groupsize=%" PRIu64 ", adios_totalsize=%" PRIu64 ", retval=%d\n",
+		    rank, adios_groupsize, adios_totalsize, retval);
+	}
 
 	// write; don't check errors for simplicity reasons
 	adios_write(adios_handle, "NX", &NX);
@@ -75,7 +88,9 @@ int main(int argc, char ** argv){
 	adios_write(adios_handle, "rank", &rank);
 	adios_write(adios_handle, "var_1d_array", t);
 
-	fprintf(stderr, "Rank=%d committed write\n", rank);
+	if (test_verbose) {
+	    fprintf(stderr, "Rank=%d committed write\n", rank);
+	}
 
 	adios_close(adios_handle);
 
@@ -83,6 +98,7 @@ int main(int argc, char ** argv){
 	adios_finalize(rank);
 	MPI_Finalize();
 
+
 	return DIAG_OK;
 }
 
diff --git a/tests/C/flexpath_tests/1D_arr_global_noxml/Makefile.in b/tests/C/flexpath_tests/1D_arr_global_noxml/Makefile.in
index 8f11e6a..e602c49 100644
--- a/tests/C/flexpath_tests/1D_arr_global_noxml/Makefile.in
+++ b/tests/C/flexpath_tests/1D_arr_global_noxml/Makefile.in
@@ -102,7 +102,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -110,8 +110,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -342,6 +342,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -418,6 +422,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/tests/C/flexpath_tests/1D_arr_global_noxml/writer.c b/tests/C/flexpath_tests/1D_arr_global_noxml/writer.c
index fab08c6..4425cf6 100644
--- a/tests/C/flexpath_tests/1D_arr_global_noxml/writer.c
+++ b/tests/C/flexpath_tests/1D_arr_global_noxml/writer.c
@@ -94,8 +94,10 @@ int main(int argc, char ** argv){
 	uint64_t adios_totalsize = 0;
 
 	retval=adios_group_size (adios_handle, adios_groupsize, &adios_totalsize);
-	fprintf(stderr, "Rank=%d adios_group_size(): adios_groupsize=%" PRIu64 ", adios_totalsize=%" PRIu64 ", retval=%d\n",
-				rank, adios_groupsize, adios_totalsize, retval);
+	if (test_verbose) {
+	    fprintf(stderr, "Rank=%d adios_group_size(): adios_groupsize=%" PRIu64 ", adios_totalsize=%" PRIu64 ", retval=%d\n",
+		    rank, adios_groupsize, adios_totalsize, retval);
+	}
 
 	// init the array that I will transport over the sea
 	if (gen_1D_array(t, NX, rank) == DIAG_ERR){
@@ -111,7 +113,9 @@ int main(int argc, char ** argv){
 	adios_write(adios_handle, "offsets", &offsets);
 	adios_write(adios_handle, "var_1d_array", t);
 
-	fprintf(stderr, "Rank=%d committed write\n", rank);
+	if (test_verbose) {
+	    fprintf(stderr, "Rank=%d committed write\n", rank);
+	}
 
 	adios_close(adios_handle);
 
diff --git a/tests/C/flexpath_tests/CMakeLists.txt b/tests/C/flexpath_tests/CMakeLists.txt
index ae40d2f..859f462 100644
--- a/tests/C/flexpath_tests/CMakeLists.txt
+++ b/tests/C/flexpath_tests/CMakeLists.txt
@@ -2,7 +2,6 @@ add_subdirectory(1D_arr_global)
 add_subdirectory(1D_arr_global_noxml)
 add_subdirectory(global_range_select)
 add_subdirectory(maya_noxml)
-add_subdirectory(maya_append)
 add_subdirectory(scalar)
 
 file(COPY README DESTINATION ${PROJECT_BINARY_DIR}/tests/C/flexpath_tests/)
diff --git a/tests/C/flexpath_tests/Makefile.am b/tests/C/flexpath_tests/Makefile.am
index 5a751b4..8d9c6ab 100644
--- a/tests/C/flexpath_tests/Makefile.am
+++ b/tests/C/flexpath_tests/Makefile.am
@@ -1,4 +1,4 @@
-SUBDIRS=1D_arr_global 1D_arr_global_noxml global_range_select maya_noxml maya_append scalar
+SUBDIRS=1D_arr_global 1D_arr_global_noxml global_range_select maya_noxml scalar local_arrays
 
 EXTRA_DIST = include/misc.h include/test_common.h  include/utils.h  
 
diff --git a/tests/C/flexpath_tests/Makefile.in b/tests/C/flexpath_tests/Makefile.in
index dddcd69..24bde93 100644
--- a/tests/C/flexpath_tests/Makefile.in
+++ b/tests/C/flexpath_tests/Makefile.in
@@ -99,7 +99,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -107,8 +107,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -333,6 +333,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -409,6 +413,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
@@ -477,7 +484,7 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-SUBDIRS = 1D_arr_global 1D_arr_global_noxml global_range_select maya_noxml maya_append scalar
+SUBDIRS = 1D_arr_global 1D_arr_global_noxml global_range_select maya_noxml scalar local_arrays
 EXTRA_DIST = include/misc.h include/test_common.h  include/utils.h  
 all: all-recursive
 
diff --git a/tests/C/flexpath_tests/README b/tests/C/flexpath_tests/README
index 9d27d3d..a19edae 100644
--- a/tests/C/flexpath_tests/README
+++ b/tests/C/flexpath_tests/README
@@ -22,8 +22,6 @@ Existing Directories
   
 * maya_noxml - inspired by maya; same variables written multiple times (doesn't work with Flexpath)
 
-* maya_append - inspired by maya; testing the append mode (doesn't work with Flexpath)
-  
 How to build and clean the build 
 --------------------------------
 # build
@@ -74,7 +72,6 @@ TEST_PASSED 1D_arr_global: rank 0
 TEST_PASSED 1D_arr_global: rank 1
 TEST_PASSED 1D_arr_global_noxml: rank 0
 TEST_PASSED 1D_arr_global_noxml: rank 1
-TEST_PASSED maya_append: rank 0
 TEST_PASSED maya_noxml: rank 0
 
 FLEXPATH transport (2013-09-04) - my laptop
@@ -86,7 +83,7 @@ TEST_PASSED 1D_arr_global: rank 1
 TEST_PASSED 1D_arr_global_noxml: rank 0
 TEST_PASSED 1D_arr_global_noxml: rank 1
 
-maya_append and maya_noxml tests failed
+maya_noxml tests failed
 
 Some tests produced message
 
diff --git a/tests/C/flexpath_tests/common/utils.c b/tests/C/flexpath_tests/common/utils.c
index c3ac0ef..624b0ae 100644
--- a/tests/C/flexpath_tests/common/utils.c
+++ b/tests/C/flexpath_tests/common/utils.c
@@ -170,7 +170,7 @@ diag_t gen_1D_array_int(int *p_arr, int arr_len, int rank){
  *         DIAG_ERR if some errors, e.g., the option has not been found
  *
  */
-diag_t get_options(struct adios_tsprt_opts * p_tsprt_opts, int argc, char ** argv, int *p_show_help){
+diag_t get_options(struct adios_tsprt_opts * p_tsprt_opts, int argc, char ** argv, int *p_show_help, int *p_verbose){
 
 	diag_t diag = DIAG_OK;
 	int c;
@@ -182,16 +182,16 @@ diag_t get_options(struct adios_tsprt_opts * p_tsprt_opts, int argc, char ** arg
 	// assume that no showing help
 	*p_show_help = 0;
 
-	while( (c = getopt(argc, argv, "ht:")) != -1){
+	while( (c = getopt(argc, argv, "hvt:")) != -1){
 		switch(c){
 		case 'h':
 			*p_show_help = 1;
 			break;
+		case 'v':
+			*p_verbose = 1;
+			break;
 		case 't':
 			cvalue = optarg;
-			// by default I set adios options to be verbosed
-			// TODO might be changed to the actual option
-			strcpy(p_tsprt_opts->adios_options, "verbose=4; show hidden_attrs");
 
 			if (strcmp(cvalue, "flx") == 0){
 				p_tsprt_opts->method = ADIOS_READ_METHOD_FLEXPATH;
@@ -311,7 +311,7 @@ diag_t gen_maya_var_name(char *buf, int buf_size, char *maya_var_pfx, int number
 	}
 
 	memset(buf, 0, buf_size);
-	sprintf(buf, "%s%d", maya_var_pfx, number);
+	sprintf(buf, "/%s%d", maya_var_pfx, number);
 
 	return DIAG_OK;
 }
diff --git a/tests/C/flexpath_tests/global_range_select/CMakeLists.txt b/tests/C/flexpath_tests/global_range_select/CMakeLists.txt
index 2f60783..cf89e72 100644
--- a/tests/C/flexpath_tests/global_range_select/CMakeLists.txt
+++ b/tests/C/flexpath_tests/global_range_select/CMakeLists.txt
@@ -1,15 +1,15 @@
 include_directories(${PROJECT_SOURCE_DIR}/src/public)
 include_directories(${PROJECT_SOURCE_DIR}/src)
-include_directories(${PROJECT_SOURCE_DIR}/test/C/flexpath_tests/include)
+include_directories(${PROJECT_SOURCE_DIR}/tests/C/flexpath_tests/include)
 include_directories(${PROJECT_BINARY_DIR}/src/public)
 link_directories(${PROJECT_SOURCE_DIR}/src)
 link_directories(${PROJECT_BINARY_DIR}/src)
 
 
-add_executable(arrays_writer arrays_write.c)
-target_link_libraries(arrays_writer adios ${ADIOSLIB_LDADD} ${MPI_C_LIBRARIES}) 
+add_executable(writer writer.c ../common/utils.c)
+target_link_libraries(writer adios ${ADIOSLIB_LDADD} ${MPI_C_LIBRARIES}) 
 
-add_executable(arrays_reader arrays_read.c)
-target_link_libraries(arrays_reader adios ${ADIOSLIB_LDADD} ${MPI_C_LIBRARIES})
+add_executable(reader reader.c ../common/utils.c)
+target_link_libraries(reader adios ${ADIOSLIB_LDADD} ${MPI_C_LIBRARIES})
 
-file(COPY arrays.xml DESTINATION ${PROJECT_BINARY_DIR}/tests/C/flexpath_tests/global_range_select)
+file(COPY test_config_flex.xml DESTINATION ${PROJECT_BINARY_DIR}/tests/C/flexpath_tests/global_range_select)
diff --git a/tests/C/flexpath_tests/global_range_select/Makefile.am b/tests/C/flexpath_tests/global_range_select/Makefile.am
index 396fb1d..dbf2578 100644
--- a/tests/C/flexpath_tests/global_range_select/Makefile.am
+++ b/tests/C/flexpath_tests/global_range_select/Makefile.am
@@ -1,21 +1,21 @@
 AM_CPPFLAGS = $(all_includes)
 AM_CPPFLAGS += -I$(top_builddir)/src/public -I$(top_srcdir)/src -I$(top_srcdir)/src/public -I$(srcdir)/../include
 
-AUTOMAKE_OPTIONS = no-dependencies
+AUTOMAKE_OPTIONS = no-dependencies subdir-objects
 
 all-local:
 	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/*.xml $(builddir)
 	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/run_tests.pl $(builddir)
 
-noinst_PROGRAMS = arrays_write arrays_read
+noinst_PROGRAMS = writer_range reader_range
 
-arrays_write_SOURCES = arrays_write.c
-arrays_write_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
-arrays_write_LDFLAGS = $(ADIOSLIB_LDFLAGS) $(ADIOSLIB_EXTRA_LDFLAGS)
-arrays_read_SOURCES = arrays_read.c
-arrays_read_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
-arrays_read_LDFLAGS = $(ADIOSLIB_LDFLAGS) $(ADIOSLIB_EXTRA_LDFLAGS)
+writer_range_SOURCES = writer.c ../common/utils.c
+writer_range_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+writer_range_LDFLAGS = $(ADIOSLIB_LDFLAGS) $(ADIOSLIB_EXTRA_LDFLAGS)
+reader_range_SOURCES = reader.c ../common/utils.c
+reader_range_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+reader_range_LDFLAGS = $(ADIOSLIB_LDFLAGS) $(ADIOSLIB_EXTRA_LDFLAGS)
 
 CLEANFILES = *.bp
 CC=$(MPICC)
-EXTRA_DIST = arrays.xml run_tests.pl
+EXTRA_DIST = test_config_flex.xml run_tests.pl
diff --git a/tests/C/flexpath_tests/global_range_select/Makefile.in b/tests/C/flexpath_tests/global_range_select/Makefile.in
index bcde1a9..b84f58a 100644
--- a/tests/C/flexpath_tests/global_range_select/Makefile.in
+++ b/tests/C/flexpath_tests/global_range_select/Makefile.in
@@ -78,7 +78,7 @@ PRE_UNINSTALL = :
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
-noinst_PROGRAMS = arrays_write$(EXEEXT) arrays_read$(EXEEXT)
+noinst_PROGRAMS = writer_range$(EXEEXT) reader_range$(EXEEXT)
 subdir = tests/C/flexpath_tests/global_range_select
 DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -101,7 +101,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -109,8 +109,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -125,25 +125,26 @@ CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 PROGRAMS = $(noinst_PROGRAMS)
-am_arrays_read_OBJECTS = arrays_read.$(OBJEXT)
-arrays_read_OBJECTS = $(am_arrays_read_OBJECTS)
+am__dirstamp = $(am__leading_dot)dirstamp
+am_reader_range_OBJECTS = reader.$(OBJEXT) ../common/utils.$(OBJEXT)
+reader_range_OBJECTS = $(am_reader_range_OBJECTS)
 am__DEPENDENCIES_1 =
-arrays_read_DEPENDENCIES = $(top_builddir)/src/libadios.a \
+reader_range_DEPENDENCIES = $(top_builddir)/src/libadios.a \
 	$(am__DEPENDENCIES_1)
 AM_V_lt = $(am__v_lt_ at AM_V@)
 am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
 am__v_lt_0 = --silent
 am__v_lt_1 = 
-arrays_read_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+reader_range_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-	$(arrays_read_LDFLAGS) $(LDFLAGS) -o $@
-am_arrays_write_OBJECTS = arrays_write.$(OBJEXT)
-arrays_write_OBJECTS = $(am_arrays_write_OBJECTS)
-arrays_write_DEPENDENCIES = $(top_builddir)/src/libadios.a \
+	$(reader_range_LDFLAGS) $(LDFLAGS) -o $@
+am_writer_range_OBJECTS = writer.$(OBJEXT) ../common/utils.$(OBJEXT)
+writer_range_OBJECTS = $(am_writer_range_OBJECTS)
+writer_range_DEPENDENCIES = $(top_builddir)/src/libadios.a \
 	$(am__DEPENDENCIES_1)
-arrays_write_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+writer_range_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-	$(arrays_write_LDFLAGS) $(LDFLAGS) -o $@
+	$(writer_range_LDFLAGS) $(LDFLAGS) -o $@
 AM_V_P = $(am__v_P_ at AM_V@)
 am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
 am__v_P_0 = false
@@ -177,8 +178,8 @@ AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
 am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
 am__v_CCLD_0 = @echo "  CCLD    " $@;
 am__v_CCLD_1 = 
-SOURCES = $(arrays_read_SOURCES) $(arrays_write_SOURCES)
-DIST_SOURCES = $(arrays_read_SOURCES) $(arrays_write_SOURCES)
+SOURCES = $(reader_range_SOURCES) $(writer_range_SOURCES)
+DIST_SOURCES = $(reader_range_SOURCES) $(writer_range_SOURCES)
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
     n|no|NO) false;; \
@@ -334,6 +335,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -410,6 +415,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
@@ -481,15 +489,15 @@ top_srcdir = @top_srcdir@
 AM_CPPFLAGS = $(all_includes) -I$(top_builddir)/src/public \
 	-I$(top_srcdir)/src -I$(top_srcdir)/src/public \
 	-I$(srcdir)/../include
-AUTOMAKE_OPTIONS = no-dependencies
-arrays_write_SOURCES = arrays_write.c
-arrays_write_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
-arrays_write_LDFLAGS = $(ADIOSLIB_LDFLAGS) $(ADIOSLIB_EXTRA_LDFLAGS)
-arrays_read_SOURCES = arrays_read.c
-arrays_read_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
-arrays_read_LDFLAGS = $(ADIOSLIB_LDFLAGS) $(ADIOSLIB_EXTRA_LDFLAGS)
+AUTOMAKE_OPTIONS = no-dependencies subdir-objects
+writer_range_SOURCES = writer.c ../common/utils.c
+writer_range_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+writer_range_LDFLAGS = $(ADIOSLIB_LDFLAGS) $(ADIOSLIB_EXTRA_LDFLAGS)
+reader_range_SOURCES = reader.c ../common/utils.c
+reader_range_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+reader_range_LDFLAGS = $(ADIOSLIB_LDFLAGS) $(ADIOSLIB_EXTRA_LDFLAGS)
 CLEANFILES = *.bp
-EXTRA_DIST = arrays.xml run_tests.pl
+EXTRA_DIST = test_config_flex.xml run_tests.pl
 all: all-am
 
 .SUFFIXES:
@@ -533,17 +541,22 @@ clean-noinstPROGRAMS:
 	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
 	echo " rm -f" $$list; \
 	rm -f $$list
+../common/$(am__dirstamp):
+	@$(MKDIR_P) ../common
+	@: > ../common/$(am__dirstamp)
+../common/utils.$(OBJEXT): ../common/$(am__dirstamp)
 
-arrays_read$(EXEEXT): $(arrays_read_OBJECTS) $(arrays_read_DEPENDENCIES) $(EXTRA_arrays_read_DEPENDENCIES) 
-	@rm -f arrays_read$(EXEEXT)
-	$(AM_V_CCLD)$(arrays_read_LINK) $(arrays_read_OBJECTS) $(arrays_read_LDADD) $(LIBS)
+reader_range$(EXEEXT): $(reader_range_OBJECTS) $(reader_range_DEPENDENCIES) $(EXTRA_reader_range_DEPENDENCIES) 
+	@rm -f reader_range$(EXEEXT)
+	$(AM_V_CCLD)$(reader_range_LINK) $(reader_range_OBJECTS) $(reader_range_LDADD) $(LIBS)
 
-arrays_write$(EXEEXT): $(arrays_write_OBJECTS) $(arrays_write_DEPENDENCIES) $(EXTRA_arrays_write_DEPENDENCIES) 
-	@rm -f arrays_write$(EXEEXT)
-	$(AM_V_CCLD)$(arrays_write_LINK) $(arrays_write_OBJECTS) $(arrays_write_LDADD) $(LIBS)
+writer_range$(EXEEXT): $(writer_range_OBJECTS) $(writer_range_DEPENDENCIES) $(EXTRA_writer_range_DEPENDENCIES) 
+	@rm -f writer_range$(EXEEXT)
+	$(AM_V_CCLD)$(writer_range_LINK) $(writer_range_OBJECTS) $(writer_range_LDADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
+	-rm -f ../common/*.$(OBJEXT)
 
 distclean-compile:
 	-rm -f *.tab.c
@@ -676,6 +689,7 @@ clean-generic:
 distclean-generic:
 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
 	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+	-rm -f ../common/$(am__dirstamp)
 
 maintainer-clean-generic:
 	@echo "This command is intended for maintainers to use"
diff --git a/tests/C/flexpath_tests/global_range_select/arrays_read.c b/tests/C/flexpath_tests/global_range_select/arrays_read.c
deleted file mode 100644
index a5c7989..0000000
--- a/tests/C/flexpath_tests/global_range_select/arrays_read.c
+++ /dev/null
@@ -1,113 +0,0 @@
-/* 
- * ADIOS is freely available under the terms of the BSD license described
- * in the COPYING file in the top level directory of this source distribution.
- *
- * Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.
- */
-
-/*************************************************************/
-/*          Example of reading arrays in ADIOS               */
-/*    which were written from the same number of processors  */
-/*                                                           */
-/*        Similar example is manual/2_adios_read.c           */
-/*************************************************************/
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdint.h>
-#include <string.h>
-#include "mpi.h"
-#include "adios.h"
-#include "public/adios_read.h"
-
-int main (int argc, char ** argv) 
-{
-    int         rank, j;
-    int         NX, NY; 
-    double      *t;
-    MPI_Comm    comm = MPI_COMM_WORLD;
-
-    MPI_Init (&argc, &argv);
-    MPI_Comm_rank (comm, &rank);
-
-    adios_read_init_method(ADIOS_READ_METHOD_FLEXPATH, comm, "");
-
-    ADIOS_SELECTION global_range_select;
-    //if(rank == 0){
-    global_range_select.type=ADIOS_SELECTION_BOUNDINGBOX;
-    global_range_select.u.bb.start = malloc(sizeof(uint64_t)*2);
-    global_range_select.u.bb.count = malloc(sizeof(uint64_t)*2);
-    (global_range_select.u.bb.start)[0] = 0;
-    (global_range_select.u.bb.count)[0] = 4;
-    (global_range_select.u.bb.start)[1] = 0;
-    (global_range_select.u.bb.count)[1] = 40;
-    global_range_select.u.bb.ndim = 2;
-
-    ADIOS_SELECTION scalar_block_select;
-    scalar_block_select.type = ADIOS_SELECTION_WRITEBLOCK;
-    scalar_block_select.u.block.index = rank;
-    //fprintf(stderr, "app got here\n");
-    /* schedule_read of a scalar. */    
-    int test_scalar = -1;
-    ADIOS_FILE* afile = adios_read_open("arrays", 
-                                         ADIOS_READ_METHOD_FLEXPATH, 
-                                         comm,
-                                         ADIOS_LOCKMODE_NONE, 0.0);
-    
-    int ii = 0;
-    while(adios_errno != err_end_of_stream){
-        
-        /* get a bounding box - rank 0 for now*/
-        ADIOS_VARINFO* nx_info = adios_inq_var( afile, "NX");
-        ADIOS_VARINFO* ny_info = adios_inq_var( afile, "NY");
-
-        if(nx_info->value) {
-            NX = *((int *)nx_info->value);
-        }
-        if(ny_info->value){
-            NY= *((int*)ny_info->value);
-        }
-    
-        //printf("\trank=%d: NX=%d\n", rank, NX);
-        //printf("\trank=%d: NY=%d\n", rank, NY);
-    
-        /* Allocate space for the arrays */
-        int nelem = 160;
-        int arr_size = sizeof(double) * nelem;
-        t = (double *) malloc (arr_size);
-        memset(t, 0, arr_size);
-        //fprintf(stderr, "t %p\n", t);
-      
-        /* Read the arrays */        
-        adios_schedule_read (afile, 
-                             &global_range_select, 
-                             "var_2d_array", 
-                             0, 1, t);
-	adios_schedule_read (afile,
-			     &scalar_block_select,
-			     "test_scalar",
-			     0, 1, &test_scalar);
-
-        adios_perform_reads (afile, 1);                
-    
-        //sleep(20);
-    
-        printf("Rank=%d: test_scalar: %d step: %d, t[0,5+x] = [%6.2f", rank, test_scalar, ii, t[0]);
-        for(j=0; j<nelem; j++) {
-            printf(", %6.2f", t[j]);
-        }
-        printf("]\n");
-        adios_release_step(afile);
-        adios_advance_step(afile, 0, 30);
-        ii++;
-        //MPI_Barrier (comm);
-        //sleep(1);
-    }
-    //
-    adios_read_close(afile);
-
-    adios_read_finalize_method(ADIOS_READ_METHOD_FLEXPATH);
-
-    //MPI_Finalize ();
-
-    return 0;
-}
diff --git a/tests/C/flexpath_tests/global_range_select/arrays_write.c b/tests/C/flexpath_tests/global_range_select/arrays_write.c
deleted file mode 100644
index 8c74518..0000000
--- a/tests/C/flexpath_tests/global_range_select/arrays_write.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/* 
- * ADIOS is freely available under the terms of the BSD license described
- * in the COPYING file in the top level directory of this source distribution.
- *
- * Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.
- */
-
-#include <stdio.h>
-#include <string.h>
-#include "mpi.h"
-#include "adios.h"
-
-/*************************************************************/
-/*          Example of writing arrays in ADIOS               */
-/*                                                           */
-/*        Similar example is manual/2_adios_write.c          */
-/*************************************************************/
-int main (int argc, char ** argv) 
-{
-    char        filename [256];
-    int         rank, size, i;
-    int         NX = 40; 
-    int         NY = 1;
-    double      t[NX];
-    MPI_Comm    comm = MPI_COMM_WORLD;
-
-    int64_t     adios_handle;
-
-    MPI_Init (&argc, &argv);
-    MPI_Comm_rank (comm, &rank);
-    MPI_Comm_size (comm, &size);
-    
-    strcpy (filename, "arrays");
-    adios_init ("arrays.xml", comm);
-    
-    int test_scalar = rank * 1000;
-    int ii;
-    for(ii = 0; ii<20; ii++){
-      for (i = 0; i < NX; i++)
-        t[i] = rank * NX + i;
-    
-      adios_open (&adios_handle, "temperature", filename, "w", comm);
-    
-      adios_write (adios_handle, "NX", &NX);
-      adios_write (adios_handle, "NY", &NY);
-      adios_write (adios_handle, "test_scalar", &test_scalar);
-      adios_write (adios_handle, "size", &size);
-      adios_write (adios_handle, "rank", &rank);
-      adios_write (adios_handle, "var_2d_array", t);
-    
-      adios_close (adios_handle);
-      fprintf(stderr, "Rank=%d commited write %d\n", rank, ii);
-    }
-    adios_finalize (rank);
-
-    //MPI_Finalize ();
-    return 0;
-}
diff --git a/tests/C/flexpath_tests/global_range_select/reader.c b/tests/C/flexpath_tests/global_range_select/reader.c
new file mode 100644
index 0000000..df9b0e5
--- /dev/null
+++ b/tests/C/flexpath_tests/global_range_select/reader.c
@@ -0,0 +1,132 @@
+/*
+ * ADIOS is freely available under the terms of the BSD license described
+ * in the COPYING file in the top level directory of this source distribution.
+ *
+ * Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.
+ */
+
+/*************************************************************/
+/*          Example of reading arrays in ADIOS               */
+/*    which were written from the same number of processors  */
+/*                                                           */
+/*        Similar example is manual/2_adios_read.c           */
+/*************************************************************/
+#include "adios.h"
+#include "mpi.h"
+#include "public/adios_read.h"
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "misc.h"
+#include "test_common.h"
+#include "utils.h"
+
+int main(int argc, char **argv)
+{
+    int rank, j;
+    int NX, NY;
+    int writer_size;
+    double *t;
+    MPI_Comm comm = MPI_COMM_WORLD;
+    diag_t return_val;
+
+    struct err_counts err = {0, 0};
+    struct adios_tsprt_opts adios_opts;
+    struct test_info test_result = {TEST_PASSED, "global_range_select"};
+
+    GET_ENTRY_OPTIONS(
+        adios_opts,
+        "Runs readers.");
+    MPI_Init(&argc, &argv);
+    MPI_Comm_rank(comm, &rank);
+
+    SET_ERROR_IF_NOT_ZERO(adios_read_init_method(adios_opts.method, comm,
+                                                 adios_opts.adios_options),
+                          err.adios);
+    RET_IF_ERROR(err.adios, rank);
+
+    /* schedule_read of a scalar. */
+    int test_scalar = -1;
+    ADIOS_FILE *afile = adios_read_open(FILE_NAME, adios_opts.method, comm,
+                                        ADIOS_LOCKMODE_NONE, 0.0);
+
+    int ii = 0;
+    while (adios_errno != err_end_of_stream) {
+
+        /* get a bounding box - rank 0 for now*/
+        ADIOS_VARINFO *nx_info = adios_inq_var(afile, "NX");
+        ADIOS_VARINFO *ny_info = adios_inq_var(afile, "NY");
+        ADIOS_VARINFO *writer_size_info = adios_inq_var(afile, "size");
+
+        if (nx_info->value) {
+            NX = *((int *)nx_info->value);
+        } else {
+            test_failed(test_result.name, rank);
+            return_val = DIAG_ERR;
+        }
+
+        if (ny_info->value) {
+            NY = *((int *)ny_info->value);
+        } else {
+            test_failed(test_result.name, rank);
+            return_val = DIAG_ERR;
+        }
+
+        if (writer_size_info->value) {
+            writer_size = *((int *)writer_size_info->value);
+        } else {
+            test_failed(test_result.name, rank);
+            return_val = DIAG_ERR;
+        }
+
+        int sel_index = rank % writer_size;
+        int k;
+
+        /* Allocate space for the arrays */
+        ADIOS_SELECTION *global_range_select;
+        ADIOS_SELECTION *scalar_block_select;
+
+        int nelem = writer_size * NX * NY;
+        size_t arr_size = sizeof(double) * nelem;
+        t = (double *)malloc(arr_size);
+        memset(t, 0, arr_size);
+
+        uint64_t *start_array = malloc(sizeof(uint64_t) * (NY + 1));
+        uint64_t *count_array = malloc(sizeof(uint64_t) * (NY + 1));
+        start_array[0] = 0;
+        count_array[0] = writer_size;
+        for (k = 1; k < (NY + 1); ++k) {
+            start_array[k] = 0;
+            count_array[k] = NX;
+        }
+
+        global_range_select =
+            adios_selection_boundingbox((NY + 1), start_array, count_array);
+        scalar_block_select = adios_selection_writeblock(sel_index);
+
+        /* Read the arrays */
+        adios_schedule_read(afile, global_range_select, "var_2d_array", 0, 1,
+                            t);
+        adios_schedule_read(afile, scalar_block_select, "test_scalar", 0, 1,
+                            &test_scalar);
+
+        adios_perform_reads(afile, 1);
+
+        adios_release_step(afile);
+        adios_advance_step(afile, 0, 30);
+        ii++;
+    }
+
+just_clean:
+    // clean everything
+    free(t);
+    t = NULL;
+
+close_adios:
+    CLOSE_ADIOS_READER(afile, adios_opts.method);
+
+    return 0;
+}
diff --git a/tests/C/flexpath_tests/global_range_select/arrays.xml b/tests/C/flexpath_tests/global_range_select/test_config_flex.xml
similarity index 88%
rename from tests/C/flexpath_tests/global_range_select/arrays.xml
rename to tests/C/flexpath_tests/global_range_select/test_config_flex.xml
index 2330ab1..f02a154 100644
--- a/tests/C/flexpath_tests/global_range_select/arrays.xml
+++ b/tests/C/flexpath_tests/global_range_select/test_config_flex.xml
@@ -11,7 +11,7 @@
     </global-bounds>
 </adios-group>
 
-<method group="temperature"  method="FLEXPATH">QUEUE_SIZE=4;</method>
+<method group="temperature"  method="FLEXPATH"></method>
 
 <buffer max-size-MB="20"/>
 
diff --git a/tests/C/flexpath_tests/global_range_select/writer.c b/tests/C/flexpath_tests/global_range_select/writer.c
new file mode 100644
index 0000000..48ddd7c
--- /dev/null
+++ b/tests/C/flexpath_tests/global_range_select/writer.c
@@ -0,0 +1,77 @@
+/*
+ * ADIOS is freely available under the terms of the BSD license described
+ * in the COPYING file in the top level directory of this source distribution.
+ *
+ * Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.
+ */
+
+#include "adios.h"
+#include "mpi.h"
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "misc.h"
+#include "test_common.h"
+#include "utils.h"
+/*************************************************************/
+/*          Example of writing arrays in ADIOS               */
+/*                                                           */
+/*        Similar example is manual/2_adios_write.c          */
+/*************************************************************/
+int main(int argc, char **argv)
+{
+    char filename[256];
+    int rank, size, i;
+    int NX = 40;
+    int NY = 1;
+    double t[NX];
+    MPI_Comm comm = MPI_COMM_WORLD;
+
+    int64_t adios_handle;
+    struct adios_tsprt_opts adios_opts;
+    int err_count = 0;
+
+    GET_ENTRY_OPTIONS(
+        adios_opts,
+        "Runs writers. It is recommended to run as many writers as readers.");
+
+    MPI_Init(&argc, &argv);
+    MPI_Comm_rank(comm, &rank);
+    MPI_Comm_size(comm, &size);
+
+    SET_ERROR_IF_NOT_ZERO(adios_init(adios_opts.xml_adios_init_filename, comm),
+                          err_count);
+    RET_IF_ERROR(err_count, rank);
+
+    int test_scalar = rank * 1000;
+    int group_num;
+    for (group_num = 0; group_num < 20; group_num++) {
+        for (i = 0; i < NX; i++)
+            t[i] = rank * NX + i + 100 * group_num;
+
+        adios_open(&adios_handle, "temperature", FILE_NAME, "w", comm);
+
+        test_scalar++;
+        adios_write(adios_handle, "NX", &NX);
+        adios_write(adios_handle, "NY", &NY);
+        adios_write(adios_handle, "test_scalar", &test_scalar);
+        adios_write(adios_handle, "size", &size);
+        adios_write(adios_handle, "rank", &rank);
+        adios_write(adios_handle, "var_2d_array", t);
+
+        if (test_verbose) {
+            fprintf(stderr,
+                    "Writer side Rank=%d: test_scalar: %d step: %d, t[0] = %6.2f\n",
+                    rank, test_scalar, group_num, t[0]);
+        }
+
+        adios_close(adios_handle);
+        if (test_verbose)
+            fprintf(stderr, "Rank=%d commited write %d\n", rank, group_num);
+    }
+    adios_finalize(rank);
+
+    MPI_Finalize();
+    return 0;
+}
diff --git a/tests/C/flexpath_tests/include/misc.h b/tests/C/flexpath_tests/include/misc.h
index 7a0d4b5..d85bb1f 100644
--- a/tests/C/flexpath_tests/include/misc.h
+++ b/tests/C/flexpath_tests/include/misc.h
@@ -36,10 +36,6 @@
 #define TRANSPORT "MPI"
 #endif
 
-//! options how verbose is ADIOS (see  adios_read_init_method)
-//! 0=quiet, ..., 4=debug
-#define ADIOS_OPTIONS "verbose=4; show hidden_attrs"
-
 //! defines if the test passed
 #define TEST_PASSED 0
 //! defines if the test failed
diff --git a/tests/C/flexpath_tests/include/test_common.h b/tests/C/flexpath_tests/include/test_common.h
index 5e0fcd1..fbb8821 100644
--- a/tests/C/flexpath_tests/include/test_common.h
+++ b/tests/C/flexpath_tests/include/test_common.h
@@ -46,23 +46,37 @@
 
 #define p_test_failed(fmt, args...)                             \
     do {                                                  \
-         printf("%s " fmt, DBG_TEST_FAILED_STR,  ##args);  \
+	 fprintf(stderr, "%s "fmt, DBG_TEST_FAILED_STR,  ##args);	\
          fflush(stdout);  											\
     } while(0)
 
 #define p_test_passed(fmt, args...)                             \
+    do {if(test_verbose){					   \
+         fprintf(stderr, "%s "fmt, DBG_TEST_PASSED_STR,  ##args);  \
+         fflush(stdout);  											\
+	}} while(0)
+
+#define test_failed(prog_name, rank)                             \
     do {                                                  \
-         printf("%s " fmt, DBG_TEST_PASSED_STR,  ##args);  \
+	 fprintf(stdout, "%s\t\tProgram name: %s\tRank: %d\n", DBG_TEST_FAILED_STR, prog_name, rank);	\
          fflush(stdout);  											\
     } while(0)
 
+#define test_passed(prog_name, rank)                             \
+    do {                                                  \
+         fprintf(stdout, "%s\t\tProgram name: %s\tRank: %d\n", DBG_TEST_PASSED_STR, prog_name, rank);  \
+         fflush(stdout);  											\
+    } while(0)
+
+
+
 
 
 //! @todo do something like that but smarter without unnecessary copying
 #define p_error(fmt, args...)                             				\
     do {                                                                \
         if((DBG_ERROR) <= DBG_LEVEL) {                                  \
-            printf("%s(%d) %s:%s:%d: " fmt, DBG_ERROR_STR, (DBG_ERROR), __FILE__, __FUNCTION__, __LINE__, ##args);   \
+            fprintf(stderr, "%s(%d) %s:%s:%d: " fmt, DBG_ERROR_STR, (DBG_ERROR), __FILE__, __FUNCTION__, __LINE__, ##args);   \
             fflush(stdout);  											\
         }                                                               \
     } while(0)
@@ -71,7 +85,7 @@
 #define p_warn(fmt, args...) \
 	do {                                                                \
         if((DBG_WARNING) <= DBG_LEVEL) {                                      \
-        	printf("%s(%d) %s:%s:%d: " fmt, DBG_WARN_STR, (DBG_ERROR), __FILE__, __FUNCTION__, __LINE__, ##args);   \
+        	fprintf(stderr, "%s(%d) %s:%s:%d: " fmt, DBG_WARN_STR, (DBG_ERROR), __FILE__, __FUNCTION__, __LINE__, ##args);   \
             fflush(stdout);												\
         }                                                               \
     } while(0)
@@ -79,7 +93,7 @@
 #define p_info(fmt, args...) \
 	do {                                                                \
         if((DBG_INFO) <= DBG_LEVEL) {                                      \
-        	printf("%s(%d) %s:%s:%d: " fmt, DBG_INFO_STR, (DBG_ERROR), __FILE__, __FUNCTION__, __LINE__, ##args);   \
+        	fprintf(stderr, "%s(%d) %s:%s:%d: " fmt, DBG_INFO_STR, (DBG_ERROR), __FILE__, __FUNCTION__, __LINE__, ##args);   \
             fflush(stdout);												\
         }                                                               \
     } while(0)
@@ -87,7 +101,7 @@
 #define p_debug(fmt, args...) \
 	do {                                                                \
         if((DBG_DEBUG) <= DBG_LEVEL) {                                      \
-        	printf("%s(%d) %s:%s:%d: " fmt, DBG_DEBUG_STR, (DBG_ERROR), __FILE__, __FUNCTION__, __LINE__, ##args);   \
+        	fprintf(stderr, "%s(%d) %s:%s:%d: " fmt, DBG_DEBUG_STR, (DBG_ERROR), __FILE__, __FUNCTION__, __LINE__, ##args);   \
             fflush(stdout);												\
         }                                                               \
     } while(0)
@@ -109,14 +123,16 @@
  *
  * The macro causes to return DIAG_ERR if getting options returned errors
  */
-#define GET_ENTRY_OPTIONS(adios_opts, help_string) \
+static int test_verbose = 0;
+
+#define GET_ENTRY_OPTIONS(adios_opts, help_string)	\
 	if (1 == argc){ \
 		p_error("See '-h' for options. At least transport param needs to be specified. Quitting ...\n"); \
 		return DIAG_ERR; \
 	} \
 	do { \
 		int show_help = 0; \
-		if( DIAG_OK != get_options(&adios_opts, argc, argv, &show_help) ){ \
+		if( DIAG_OK != get_options(&adios_opts, argc, argv, &show_help, &test_verbose) ){ \
 			p_error("Got from get_options(). Quitting ...\n."); \
 			return DIAG_ERR; \
 		} \
@@ -223,7 +239,7 @@
 #define TEST_INT_EQUAL(value_ref, value, err_count, test_res) \
 	if (value != value_ref ){ \
 		test_res = TEST_FAILED; \
-		p_test_failed("(expected=%d, got=%d)\n", value_ref, value); \
+		p_test_failed("("#value_ref" != "#value"  -> expected=%d, got=%d)\n", value_ref, value); \
 		err_count++; \
 	}
 
@@ -238,7 +254,7 @@
 #define TEST_LONG_EQUAL(value_ref, value, err_count, test_res) \
 	if (value != value_ref ){ \
 		test_res = TEST_FAILED; \
-		p_test_failed("(expected=%" PRIu64 ", got=%" PRIu64 ")\n", value_ref, value); \
+		p_test_failed("("#value_ref" != "#value"  -> expected=%" PRIu64 ", got=%" PRIu64 ")\n", value_ref, value); \
 		err_count++; \
 	}
 
@@ -253,7 +269,7 @@
 #define TEST_DOUBLE_EQUAL(value_ref, value, err_count, test_res) \
 	if (value != value_ref ){ \
 		test_res = TEST_FAILED; \
-		p_test_failed("(expected=%0.2f, got=%0.2f)\n", value_ref, value); \
+		p_test_failed("("#value_ref" != "#value"  -> expected=%g, got=%g)\n", value_ref, value); \
 		err_count++; \
 	}
 
diff --git a/tests/C/flexpath_tests/include/utils.h b/tests/C/flexpath_tests/include/utils.h
index dbd8647..b3f3f60 100644
--- a/tests/C/flexpath_tests/include/utils.h
+++ b/tests/C/flexpath_tests/include/utils.h
@@ -12,7 +12,7 @@ extern diag_t usage(char *program_name, char *program_desc);
 extern diag_t gen_1D_array(double *p_arr, int arr_len, int rank);
 extern diag_t gen_1D_array2(double *p_arr, int arr_len, int rank);
 extern diag_t gen_1D_array_int(int *p_arr, int arr_len, int rank);
-extern diag_t get_options(struct adios_tsprt_opts * p_tsprt_opts, int argc, char ** argv, int *p_show_help);
+extern diag_t get_options(struct adios_tsprt_opts * p_tsprt_opts, int argc, char ** argv, int *p_show_help, int *p_verbose);
 
 extern diag_t set_value(double *p_arr, int arr_len, double value);
 extern diag_t get_data_size(int *shape, int shape_elem_count, int* data_size);
diff --git a/tests/C/flexpath_tests/local_arrays/Makefile.am b/tests/C/flexpath_tests/local_arrays/Makefile.am
new file mode 100644
index 0000000..878c2f4
--- /dev/null
+++ b/tests/C/flexpath_tests/local_arrays/Makefile.am
@@ -0,0 +1,18 @@
+AM_CPPFLAGS = $(all_includes)
+AM_CPPFLAGS += -I$(top_builddir)/src/public -I$(top_srcdir)/src -I$(top_srcdir)/src/public -I$(srcdir)/../include
+
+AUTOMAKE_OPTIONS = no-dependencies subdir-objects
+
+noinst_PROGRAMS = writer_local reader_local
+
+writer_local_SOURCES = writer.c ../common/utils.c
+writer_local_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+writer_local_LDFLAGS = $(ADIOSLIB_LDFLAGS) $(ADIOSLIB_EXTRA_LDFLAGS)
+reader_local_SOURCES = reader.c ../common/utils.c
+reader_local_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+reader_local_LDFLAGS = $(ADIOSLIB_LDFLAGS) $(ADIOSLIB_EXTRA_LDFLAGS)
+
+CLEANFILES = *.bp
+CC=$(MPICC)
+
+EXTRA_DIST=cfg.h
diff --git a/tests/C/flexpath_tests/maya_append/Makefile.in b/tests/C/flexpath_tests/local_arrays/Makefile.in
similarity index 91%
rename from tests/C/flexpath_tests/maya_append/Makefile.in
rename to tests/C/flexpath_tests/local_arrays/Makefile.in
index 12544b8..fa5ccc5 100644
--- a/tests/C/flexpath_tests/maya_append/Makefile.in
+++ b/tests/C/flexpath_tests/local_arrays/Makefile.in
@@ -78,8 +78,8 @@ PRE_UNINSTALL = :
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
-noinst_PROGRAMS = writer_maya$(EXEEXT) reader_maya$(EXEEXT)
-subdir = tests/C/flexpath_tests/maya_append
+noinst_PROGRAMS = writer_local$(EXEEXT) reader_local$(EXEEXT)
+subdir = tests/C/flexpath_tests/local_arrays
 DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
@@ -101,7 +101,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -109,8 +109,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -126,25 +126,25 @@ CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 PROGRAMS = $(noinst_PROGRAMS)
 am__dirstamp = $(am__leading_dot)dirstamp
-am_reader_maya_OBJECTS = reader.$(OBJEXT) ../common/utils.$(OBJEXT)
-reader_maya_OBJECTS = $(am_reader_maya_OBJECTS)
+am_reader_local_OBJECTS = reader.$(OBJEXT) ../common/utils.$(OBJEXT)
+reader_local_OBJECTS = $(am_reader_local_OBJECTS)
 am__DEPENDENCIES_1 =
-reader_maya_DEPENDENCIES = $(top_builddir)/src/libadios.a \
+reader_local_DEPENDENCIES = $(top_builddir)/src/libadios.a \
 	$(am__DEPENDENCIES_1)
 AM_V_lt = $(am__v_lt_ at AM_V@)
 am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
 am__v_lt_0 = --silent
 am__v_lt_1 = 
-reader_maya_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+reader_local_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-	$(reader_maya_LDFLAGS) $(LDFLAGS) -o $@
-am_writer_maya_OBJECTS = writer.$(OBJEXT) ../common/utils.$(OBJEXT)
-writer_maya_OBJECTS = $(am_writer_maya_OBJECTS)
-writer_maya_DEPENDENCIES = $(top_builddir)/src/libadios.a \
+	$(reader_local_LDFLAGS) $(LDFLAGS) -o $@
+am_writer_local_OBJECTS = writer.$(OBJEXT) ../common/utils.$(OBJEXT)
+writer_local_OBJECTS = $(am_writer_local_OBJECTS)
+writer_local_DEPENDENCIES = $(top_builddir)/src/libadios.a \
 	$(am__DEPENDENCIES_1)
-writer_maya_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+writer_local_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-	$(writer_maya_LDFLAGS) $(LDFLAGS) -o $@
+	$(writer_local_LDFLAGS) $(LDFLAGS) -o $@
 AM_V_P = $(am__v_P_ at AM_V@)
 am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
 am__v_P_0 = false
@@ -178,8 +178,8 @@ AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
 am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
 am__v_CCLD_0 = @echo "  CCLD    " $@;
 am__v_CCLD_1 = 
-SOURCES = $(reader_maya_SOURCES) $(writer_maya_SOURCES)
-DIST_SOURCES = $(reader_maya_SOURCES) $(writer_maya_SOURCES)
+SOURCES = $(reader_local_SOURCES) $(writer_local_SOURCES)
+DIST_SOURCES = $(reader_local_SOURCES) $(writer_local_SOURCES)
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
     n|no|NO) false;; \
@@ -335,6 +335,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -411,6 +415,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
@@ -483,14 +490,14 @@ AM_CPPFLAGS = $(all_includes) -I$(top_builddir)/src/public \
 	-I$(top_srcdir)/src -I$(top_srcdir)/src/public \
 	-I$(srcdir)/../include
 AUTOMAKE_OPTIONS = no-dependencies subdir-objects
-writer_maya_SOURCES = writer.c ../common/utils.c
-writer_maya_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
-writer_maya_LDFLAGS = $(ADIOSLIB_LDFLAGS) $(ADIOSLIB_EXTRA_LDFLAGS)
-reader_maya_SOURCES = reader.c ../common/utils.c
-reader_maya_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
-reader_maya_LDFLAGS = $(ADIOSLIB_LDFLAGS) $(ADIOSLIB_EXTRA_LDFLAGS)
+writer_local_SOURCES = writer.c ../common/utils.c
+writer_local_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+writer_local_LDFLAGS = $(ADIOSLIB_LDFLAGS) $(ADIOSLIB_EXTRA_LDFLAGS)
+reader_local_SOURCES = reader.c ../common/utils.c
+reader_local_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+reader_local_LDFLAGS = $(ADIOSLIB_LDFLAGS) $(ADIOSLIB_EXTRA_LDFLAGS)
 CLEANFILES = *.bp
-EXTRA_DIST = cfg.h readme.txt
+EXTRA_DIST = cfg.h
 all: all-am
 
 .SUFFIXES:
@@ -504,9 +511,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/C/flexpath_tests/maya_append/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/C/flexpath_tests/local_arrays/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu tests/C/flexpath_tests/maya_append/Makefile
+	  $(AUTOMAKE) --gnu tests/C/flexpath_tests/local_arrays/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
@@ -539,13 +546,13 @@ clean-noinstPROGRAMS:
 	@: > ../common/$(am__dirstamp)
 ../common/utils.$(OBJEXT): ../common/$(am__dirstamp)
 
-reader_maya$(EXEEXT): $(reader_maya_OBJECTS) $(reader_maya_DEPENDENCIES) $(EXTRA_reader_maya_DEPENDENCIES) 
-	@rm -f reader_maya$(EXEEXT)
-	$(AM_V_CCLD)$(reader_maya_LINK) $(reader_maya_OBJECTS) $(reader_maya_LDADD) $(LIBS)
+reader_local$(EXEEXT): $(reader_local_OBJECTS) $(reader_local_DEPENDENCIES) $(EXTRA_reader_local_DEPENDENCIES) 
+	@rm -f reader_local$(EXEEXT)
+	$(AM_V_CCLD)$(reader_local_LINK) $(reader_local_OBJECTS) $(reader_local_LDADD) $(LIBS)
 
-writer_maya$(EXEEXT): $(writer_maya_OBJECTS) $(writer_maya_DEPENDENCIES) $(EXTRA_writer_maya_DEPENDENCIES) 
-	@rm -f writer_maya$(EXEEXT)
-	$(AM_V_CCLD)$(writer_maya_LINK) $(writer_maya_OBJECTS) $(writer_maya_LDADD) $(LIBS)
+writer_local$(EXEEXT): $(writer_local_OBJECTS) $(writer_local_DEPENDENCIES) $(EXTRA_writer_local_DEPENDENCIES) 
+	@rm -f writer_local$(EXEEXT)
+	$(AM_V_CCLD)$(writer_local_LINK) $(writer_local_OBJECTS) $(writer_local_LDADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
diff --git a/tests/C/flexpath_tests/local_arrays/cfg.h b/tests/C/flexpath_tests/local_arrays/cfg.h
new file mode 100644
index 0000000..f8f905d
--- /dev/null
+++ b/tests/C/flexpath_tests/local_arrays/cfg.h
@@ -0,0 +1,15 @@
+/**
+ * cfg.h
+ *
+ *  Created on: Sep 4, 2013
+ *  Author: Magda Slawinska aka Magic Magg magg dot gatech at gmail.com
+ */
+
+#ifndef CFG_H_
+#define CFG_H_
+
+//! size of the X dimension
+#define NX_DIM 10
+
+
+#endif /* CFG_H_ */
diff --git a/tests/C/flexpath_tests/1D_arr_global/reader.c b/tests/C/flexpath_tests/local_arrays/reader.c
similarity index 70%
copy from tests/C/flexpath_tests/1D_arr_global/reader.c
copy to tests/C/flexpath_tests/local_arrays/reader.c
index e67cb0a..9623345 100644
--- a/tests/C/flexpath_tests/1D_arr_global/reader.c
+++ b/tests/C/flexpath_tests/local_arrays/reader.c
@@ -1,5 +1,5 @@
 /**
- * reader.c
+ * arrays_read.c
  *
  * ADIOS is freely available under the terms of the BSD license described
  * in the COPYING file in the top level directory of this source distribution.
@@ -27,6 +27,11 @@
 #include <string.h>
 
 
+// for printing the values of the variable
+#define STR_BUFFER_SIZE 3000
+
+
+
 int main (int argc, char **argv){
 	int rank =0, size =0;
 	int NX = 0;
@@ -35,11 +40,11 @@ int main (int argc, char **argv){
 	double *t_ref = NULL;
 	MPI_Comm comm = MPI_COMM_WORLD;
 	diag_t diag = DIAG_OK;  // to store the diagnostic information
-	struct test_info test_result = { TEST_PASSED, "1D_arr_global" };
+	struct test_info test_result = {TEST_PASSED, "1D_arr_global_noxml"};
 	struct err_counts err = { 0, 0};
 	struct adios_tsprt_opts adios_opts;
 
-	GET_ENTRY_OPTIONS(adios_opts, "Runs readers. It is recommended to run as many readers as writers.");
+	GET_ENTRY_OPTIONS(adios_opts,  "Runs readers. It is recommended to run as many readers as writers.");
 
 	// adios read initialization
 	MPI_Init( &argc, &argv);
@@ -49,9 +54,10 @@ int main (int argc, char **argv){
 	SET_ERROR_IF_NOT_ZERO(adios_read_init_method(adios_opts.method, comm, adios_opts.adios_options), err.adios);
 	RET_IF_ERROR(err.adios, rank);
 
+
 	// I will be working with streams so the lock mode is necessary,
 	// return immediately if the stream unavailable
-	ADIOS_FILE *adios_handle = adios_read_open(FILE_NAME,adios_opts.method, comm, ADIOS_LOCKMODE_NONE, 0.0);
+	ADIOS_FILE *adios_handle = adios_read_open(FILE_NAME, adios_opts.method, comm, ADIOS_LOCKMODE_NONE, 0.0);
 	if ( !adios_handle){
 		p_error("Quitting ... (%d) %s\n", adios_errno, adios_errmsg());
 		return DIAG_ERR;
@@ -62,12 +68,17 @@ int main (int argc, char **argv){
 	ADIOS_VARINFO *avi = NULL;
 
 
+	// for storing the variables
+	char buf[STR_BUFFER_SIZE];
+
+	int step = 0;
+
 	// read how many processors wrote that array
 	avi = adios_inq_var (adios_handle, "size");
 	if (!avi){
 		p_error("rank %d: Quitting ... (%d) %s\n", rank, adios_errno, adios_errmsg());
-		CLOSE_ADIOS_READER(adios_handle, adios_opts.method);
-		return DIAG_ERR;
+		diag = DIAG_ERR;
+		goto close_adios;
 	}
 	size = *((int*)avi->value);
 	adios_free_varinfo(avi);
@@ -77,16 +88,16 @@ int main (int argc, char **argv){
 	// the excessive readers
 	if (rank >= size){
 		p_info("rank %d: I am an excessive rank. Nothing to read ...\n", rank);
-		CLOSE_ADIOS_READER(adios_handle, adios_opts.method);
-		return DIAG_OK;
+		diag = DIAG_OK;
+		goto close_adios;
 	}
 
 	// read the size of the array
 	avi = adios_inq_var (adios_handle, "NX");
 	if (!avi){
 		p_error("rank %d: Quitting ... (%d) %s\n", rank, adios_errno, adios_errmsg());
-		CLOSE_ADIOS_READER(adios_handle, adios_opts.method);
-		return DIAG_ERR;
+		diag = DIAG_ERR;
+		goto close_adios;
 	}
 
 	// I expect a scalar that will tell me the size of an array
@@ -98,23 +109,21 @@ int main (int argc, char **argv){
 	assert(NX_DIM == NX);
 	avi = NULL;
 
-
-	// this will define the slice that we want to read; each rank should
-	// read its own slice written by a corresponding writer rank
-	// the var_1d is a 2-dim ADIOS variable (because we decided to have
-	// it as a global array); that's why we need a 2-dim ADIOS variable
-	uint64_t count[2] = {1,0};
-	count[1] = NX;
-	uint64_t start[2] = {0,0};
-	start[0] = rank;
-
-	sel = adios_selection_boundingbox(2,start, count);
+	sel = adios_selection_writeblock(rank);
 	if( !sel ){
 		p_error("rank %d: Quitting ... (%d) %s\n", rank, adios_errno, adios_errmsg());
 		diag = DIAG_ERR;
 		goto close_adios;
 	}
 
+	// make the reference array with reference values I expect to get
+	t_ref = calloc(NX, sizeof(double));
+	if (gen_1D_array(t_ref, NX, rank) == DIAG_ERR){
+		p_error("Generating 1D array. Quitting ...\n");
+		diag = DIAG_ERR;
+		goto close_adios;
+	}
+
 	// allocate the memory for the actual array to be read
 	t = calloc(NX, sizeof(double));
 
@@ -131,16 +140,12 @@ int main (int argc, char **argv){
 		goto just_clean;
 	}
 
-	// make the reference array with reference values I expect to get
-	t_ref = calloc(NX, sizeof(double));
-	gen_1D_array(t_ref, NX, rank);
+	sprintf(buf, "Rank %d: var_1d_array: step %d: t: ", rank, step);
 
-	// compare the values what you get with what you expect
 	int i = 0;
-	for (i = 0; i < NX; ++i) {
-		if (t[i] != t_ref[i]) {
-			p_test_failed("%s: rank %d: for t[%d] (expected %.1f, got %.1f)\n",
-					test_result.name, rank, i, t_ref[i], t[i]);
+	for(i=0; i < NX; ++i){
+		if( t[i] != t_ref[i] ){
+			p_test_failed("%s: rank %d: for t[%d] (expected %.1f, got %.1f)\n", test_result.name, rank,  i, t_ref[i], t[i] );
 			test_result.result = TEST_FAILED;
 			break;
 		}
@@ -148,20 +153,6 @@ int main (int argc, char **argv){
 
 	if (TEST_PASSED == test_result.result)
 		p_test_passed("%s: rank %d\n", test_result.name, rank);
-	else 
-	    p_test_failed("%s: rank %d\n", test_result.name, rank);
-
-
-	adios_release_step(adios_handle);
-	// 0 - next available step, block for max 30 seconds until the next step
-	// is available
-	adios_advance_step(adios_handle, 0, 30);
-	if (0 == adios_errno){
-		printf("Rank %d: proceeding to the next step ...\n", rank);
-	} else {
-		printf("ERROR: adios_advance_step(); anyway Quitting ... Rank %d: (%d) %s\n", rank, adios_errno, adios_errmsg());
-	}
-
 
 just_clean:
 	// clean everything
diff --git a/tests/C/flexpath_tests/1D_arr_global_noxml/writer.c b/tests/C/flexpath_tests/local_arrays/writer.c
similarity index 78%
copy from tests/C/flexpath_tests/1D_arr_global_noxml/writer.c
copy to tests/C/flexpath_tests/local_arrays/writer.c
index fab08c6..c748d59 100644
--- a/tests/C/flexpath_tests/1D_arr_global_noxml/writer.c
+++ b/tests/C/flexpath_tests/local_arrays/writer.c
@@ -72,20 +72,10 @@ int main(int argc, char ** argv){
 	RET_IF_ERROR(err_count, rank);
 
 
-	// I am defining here a global array - global bounds is the size
-	// of global array for all writers; within that array there is
-	// an offset from which each rank has its space
-	int global_bounds= NX * size;
-	int		offsets= NX * rank;
-
-
 	adios_define_var (adios_grp, "NX", "", adios_integer, 0, 0, 0);
 	adios_define_var (adios_grp, "size", "", adios_integer, 0, 0, 0);
 	adios_define_var (adios_grp, "rank", "", adios_integer, 0, 0, 0);
-	adios_define_var (adios_grp, "global_bounds", "", adios_integer, 0, 0, 0);
-	adios_define_var (adios_grp, "offsets", "", adios_integer, 0, 0, 0);
-	// NX - local var dimensions, global_bounds - global dimension, offsets - variable local offsets
-	adios_define_var (adios_grp, "var_1d_array", "", adios_double, "NX", "global_bounds", "offsets");
+	adios_define_var (adios_grp, "var_1d_array", "", adios_double, "NX", "", "");
 
 	// open our group and transport method associated with it
 	adios_open (&adios_handle, "temperature", FILE_NAME, "w", comm);
@@ -94,8 +84,10 @@ int main(int argc, char ** argv){
 	uint64_t adios_totalsize = 0;
 
 	retval=adios_group_size (adios_handle, adios_groupsize, &adios_totalsize);
-	fprintf(stderr, "Rank=%d adios_group_size(): adios_groupsize=%" PRIu64 ", adios_totalsize=%" PRIu64 ", retval=%d\n",
-				rank, adios_groupsize, adios_totalsize, retval);
+	if (test_verbose) {
+	    fprintf(stderr, "Rank=%d adios_group_size(): adios_groupsize=%" PRIu64 ", adios_totalsize=%" PRIu64 ", retval=%d\n",
+		    rank, adios_groupsize, adios_totalsize, retval);
+	}
 
 	// init the array that I will transport over the sea
 	if (gen_1D_array(t, NX, rank) == DIAG_ERR){
@@ -107,11 +99,11 @@ int main(int argc, char ** argv){
 	adios_write(adios_handle, "NX", &NX);
 	adios_write(adios_handle, "size", &size);
 	adios_write(adios_handle, "rank", &rank);
-	adios_write(adios_handle, "global_bounds", &global_bounds);
-	adios_write(adios_handle, "offsets", &offsets);
 	adios_write(adios_handle, "var_1d_array", t);
 
-	fprintf(stderr, "Rank=%d committed write\n", rank);
+	if (test_verbose) {
+	    fprintf(stderr, "Rank=%d committed write\n", rank);
+	}
 
 	adios_close(adios_handle);
 
diff --git a/tests/C/flexpath_tests/maya_append/CMakeLists.txt b/tests/C/flexpath_tests/maya_append/CMakeLists.txt
deleted file mode 100644
index 82ccf86..0000000
--- a/tests/C/flexpath_tests/maya_append/CMakeLists.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-include_directories(${PROJECT_SOURCE_DIR}/src/public)
-include_directories(${PROJECT_SOURCE_DIR}/src)
-include_directories(${PROJECT_SOURCE_DIR}/tests/C/flexpath_tests/include)
-include_directories(${PROJECT_BINARY_DIR}/src/public)
-link_directories(${PROJECT_SOURCE_DIR}/src)
-link_directories(${PROJECT_BINARY_DIR}/src)
-
-
-add_executable(writer_maya writer.c ../common/utils.c)
-target_link_libraries(writer_maya adios ${ADIOSLIB_LDADD} ${MPI_C_LIBRARIES}) 
-
-add_executable(reader_maya reader.c ../common/utils.c)
-target_link_libraries(reader_maya adios ${ADIOSLIB_LDADD} ${MPI_C_LIBRARIES})
-
-file(COPY readme.txt DESTINATION ${PROJECT_BINARY_DIR}/tests/C/flexpath_tests/maya_append)
diff --git a/tests/C/flexpath_tests/maya_append/Makefile.am b/tests/C/flexpath_tests/maya_append/Makefile.am
deleted file mode 100644
index b728f14..0000000
--- a/tests/C/flexpath_tests/maya_append/Makefile.am
+++ /dev/null
@@ -1,19 +0,0 @@
-AM_CPPFLAGS = $(all_includes)
-AM_CPPFLAGS += -I$(top_builddir)/src/public -I$(top_srcdir)/src -I$(top_srcdir)/src/public -I$(srcdir)/../include
-
-AUTOMAKE_OPTIONS = no-dependencies subdir-objects
-
-noinst_PROGRAMS = writer_maya reader_maya
-
-writer_maya_SOURCES = writer.c ../common/utils.c
-writer_maya_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
-writer_maya_LDFLAGS = $(ADIOSLIB_LDFLAGS) $(ADIOSLIB_EXTRA_LDFLAGS)
-reader_maya_SOURCES = reader.c ../common/utils.c
-reader_maya_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
-reader_maya_LDFLAGS = $(ADIOSLIB_LDFLAGS) $(ADIOSLIB_EXTRA_LDFLAGS)
-
-CLEANFILES = *.bp
-CC=$(MPICC)
-
-EXTRA_DIST = cfg.h readme.txt
-
diff --git a/tests/C/flexpath_tests/maya_append/cfg.h b/tests/C/flexpath_tests/maya_append/cfg.h
deleted file mode 100644
index 52ce6d2..0000000
--- a/tests/C/flexpath_tests/maya_append/cfg.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- * cfg.h
- *
- *  Created on: Aug 23, 2013
- *  Author: Magda Slawinska aka Magic Magg magg dot gatech at gmail.com
- */
-
-#ifndef CFG_H_
-#define CFG_H_
-
-//! params for the method
-#define TRANSPORT_PARAMS ""
-
-//! adios buffer size in MB
-#define ADS_BUFFER_SIZE 50
-
-//! the name of adios group in the file
-#define GRP_NAME "carpet_var"
-
-//! how many loop iterations is in the writer
-#define TIMESTEP_COUNT 10
-
-//! the maya grid function prefix
-#define MAYA_GF_VAR_PFX "maya_gf_var"
-
-#endif /* CFG_H_ */
diff --git a/tests/C/flexpath_tests/maya_append/reader.c b/tests/C/flexpath_tests/maya_append/reader.c
deleted file mode 100644
index 0c96e3d..0000000
--- a/tests/C/flexpath_tests/maya_append/reader.c
+++ /dev/null
@@ -1,137 +0,0 @@
-/**
- * reader.c
- *
- *  Created on: Aug 21, 2013
- *  Author: Magda Slawinska aka Magic Magg magg dot gatech at gmail.com
- */
-
-#include <string.h>
-#include "mpi.h"
-#include "adios.h"
-#include "adios_read.h"
-
-#include "misc.h"
-#include "utils.h"
-#include "test_common.h"
-#include "cfg.h"
-
-
-/**
- * wrapper for scheduling adios reads; this macro assumes existence of
- * quite a few important variables; please take a look and be careful
- * how to use it
- *
- * @param path_str The path to the variable
- * @param out_buf  The output buffer
- */
-#define READ_FULLPATH(attribute, grid_func_name, out_buf) \
-	char fullpath[STR_BUFFER_SIZE]; \
-	sprintf(fullpath, "%s%s", attribute, grid_func_name);  \
-	SET_ERROR_IF_NOT_ZERO(adios_schedule_read(adios_handle, sel, fullpath,0,10, out_buf), error_counts.adios);
-
-
-// for printing the values of the variable
-#define STR_BUFFER_SIZE 100
-
-int main (int argc, char **argv){
-	int rank =0;
-	MPI_Comm comm = MPI_COMM_WORLD;
-	struct err_counts err = {0, 0};
-	struct test_info test_result = {TEST_PASSED, "maya_append"};
-	struct adios_tsprt_opts adios_opts;
-
-	GET_ENTRY_OPTIONS(adios_opts, "Runs readers. As many as you want to.");
-
-	// adios read initialization
-	MPI_Init( &argc, &argv);
-	MPI_Comm_rank (comm, &rank);
-
-	// depending on the method
-	SET_ERROR_IF_NOT_ZERO(adios_read_init_method(adios_opts.method, comm, adios_opts.adios_options), err.adios);
-	RET_IF_ERROR(err.adios, rank);
-
-
-	// I will be working with streams so the lock mode is necessary,
-	// return immediately if the stream unavailable
-	ADIOS_FILE *adios_handle = adios_read_open_file(FILE_NAME, adios_opts.method, comm);
-	if ( !adios_handle){
-		p_error("Quitting ... (%d) %s\n", adios_errno, adios_errmsg());
-		return DIAG_ERR;
-	}
-
-	int i = 0;
-	// I will only support reading TIMESTEP_COUNT integers for the level value
-	int level[TIMESTEP_COUNT];
-	int level_scalar[TIMESTEP_COUNT];
-	int cctk_bbox[TIMESTEP_COUNT * 6];
-	double *data = malloc(8 * 11* 12*13 * TIMESTEP_COUNT);
-
-	memset(level, 0, sizeof(int) * TIMESTEP_COUNT);
-	memset(cctk_bbox, 0, sizeof(int) * TIMESTEP_COUNT*6);
-	memset(data, 0, sizeof(double) * 11* 12*13 * TIMESTEP_COUNT);
-
-	// selection should be NULL or as a single variable
-	// just say that you want to take different steps
-	adios_schedule_read(adios_handle, NULL, "/level/maya_gf_var",0,10, level);
-	adios_schedule_read(adios_handle, NULL, "/scalar/maya_gf_var", 0, 10, level_scalar);
-	adios_schedule_read(adios_handle, NULL, "/cctk_bbox/maya_gf_var", 0, 10, cctk_bbox);
-
-	// now I will try to read with a single variable but with multiple steps
-	ADIOS_SELECTION *sel = NULL;
-	uint64_t start_3D[] = {0, 0, 0};
-	uint64_t count_3D[] = {11, 12, 13};
-	sel = adios_selection_boundingbox(3, start_3D, count_3D );
-	adios_schedule_read(adios_handle, sel, "/data/maya_gf_var", 0, 10, data);
-	adios_selection_delete(sel);
-	sel = NULL;
-
-	SET_ERROR_IF_NOT_ZERO(adios_perform_reads(adios_handle, 1), err.adios);
-
-	int j = 0;
-	if (err.adios){
-		test_result.result = TEST_FAILED;
-	} else {
-		// reference data
-		int level_ref[TIMESTEP_COUNT];
-		gen_1D_array_int(level_ref, TIMESTEP_COUNT, rank);
-
-		int cctk_bbox_ref[6];
-		gen_1D_array_int(cctk_bbox_ref, 6, rank);
-
-		double * data_ref =  (double *)malloc(11*12*13*sizeof(double));
-		gen_1D_array2(data_ref, 11*12*13, rank);
-
-		// compare with reference values
-		for( i = 0; i < TIMESTEP_COUNT; ++i){
-			TEST_INT_EQUAL(level_ref[i], level[i], err.test, test_result.result);
-			BREAK_IF_ERROR(err.test);
-			TEST_INT_EQUAL(level_ref[i], level_scalar[i], err.test, test_result.result);
-			BREAK_IF_ERROR(err.test);
-
-			for( j = 0; j < 6; ++j){
-				TEST_INT_EQUAL(cctk_bbox_ref[j], cctk_bbox[i*6 + j], err.test, test_result.result);
-				BREAK_IF_ERROR(err.test);
-			}
-			BREAK_IF_ERROR(err.test);
-
-			for( j = 0; j < 11 * 12 * 13; ++j){
-				TEST_DOUBLE_EQUAL(data_ref[j], data[i * 11 * 12 * 13 +j], err.test, test_result.result);
-				BREAK_IF_ERROR(err.test);
-			}
-			BREAK_IF_ERROR(err.test);
-		}
-
-		free(data_ref);
-		data_ref = NULL;
-	}
-
-	if (TEST_PASSED == test_result.result){
-		p_test_passed("%s: rank %d\n", test_result.name, rank);
-	}
-
-	free(data);
-	data = NULL;
-	CLOSE_ADIOS_READER(adios_handle, adios_opts.method);
-
-	return DIAG_OK;
-}
diff --git a/tests/C/flexpath_tests/maya_append/readme.txt b/tests/C/flexpath_tests/maya_append/readme.txt
deleted file mode 100644
index b385a9f..0000000
--- a/tests/C/flexpath_tests/maya_append/readme.txt
+++ /dev/null
@@ -1,64 +0,0 @@
-# readme.txt
-# Created on: Aug 21, 2013
-# Author: Magda S. aka Magic Magg magg dot gatech at gmail.com
-#
-DESCRIPTION
-===========
-The idea is to test how to write in an appended mode and read from
-that mode. This test is based on the Maya project.
-
-It is designed for two methods (use -t flx or -t mpi)
-
-1. MPI/ADIOS_READ_METHOD_BP
-2. FLEXPATH/ADIOS_READ_METHOD_FLEXPATH
-
-
-RUN
-===== 
-# to clean files hanging around after previous runs
-$ make -f Makefile.generic clean_test
-
-# you can run as many writers as you want and as many readers as you want
-# they write and read independently; the default is to run one writer
-# and one reader
-$ ./writer -f mpi
-$ ./reader -f mpi
-
-See Makefile for other options of running the test.
-
-PLAYING WITH TEST CONFIGURATION
-===============================
-To play with the test configuration, you can modify macros in the cfg.h file
-
-TIMESTEP_COUNT seems to be the only reasonable setting to play so far
-
-NOTES
-======
-2013-08-28 Test passes with the MPI method on my laptop; it fails with the FLEXPATH method
-enabled (branch v1.5.1)
-
-$ ./reader
-ERROR: FLEXPATH staging method does not support file mode for reading. Use adios_read_open() to open a staged dataset.
-
-
-
-TROUBLESHOOTING
-================
-
-2013-08-06, ERROR adios_allocate_buffer(): insufficient memory
-
-ERROR: adios_allocate_buffer (): insufficient memory: 5242880000 requested, 860221440 available.  Using available.
-
-$ grep ADS_BUFFER_SIZE cfg.h
-#define ADS_BUFFER_SIZE 50
-
-Try changing the ADS_BUFFER_SIZE in cfg.h to a smaller value.
-
-2013-0x-0y, txt files left
-
-There might be text files left; they should be removed for the next run.
-
-# EOF
-
-# EOF
-
diff --git a/tests/C/flexpath_tests/maya_append/writer.c b/tests/C/flexpath_tests/maya_append/writer.c
deleted file mode 100644
index f562c33..0000000
--- a/tests/C/flexpath_tests/maya_append/writer.c
+++ /dev/null
@@ -1,133 +0,0 @@
-/**
- * writer.c
- *
- *  Created on: Aug 21, 2013
- *  Author: Magda Slawinska aka Magic Magg magg dot gatech at gmail.com
- */
-
-#include "mpi.h"
-#include "adios.h"
-#include "adios_read.h"  // for adios_errno
-
-#include "misc.h"
-#include "test_common.h"
-#include "utils.h"
-#include "cfg.h"
-
-#include <string.h>
-
-// for printing the values of the variable
-#define STR_BUFFER_SIZE 100
-
-/**
- * wrapper for writes; this macro assumes existence fullpath
- * quite a few important variables; please take a look and be careful
- * how to use it
- *
- * I simulate Maya var name which consists of the attribute and the
- * grid function
- *
- * @param attribute The attribute (part of adios variable name or path)
- * @param grid_func_name The name of the grid function
- * @param var The var to be written out
- *
- */
-#define WRITE_VAR(attribute, grid_func_name, var) \
-	do { \
-		sprintf(fullpath, "%s%s", attribute, grid_func_name); \
-    	adios_write(adios_handle, fullpath, var); \
-	} while (0)
-
-
-int main(int argc, char ** argv){
-	int rank = 0, size = 0;
-	MPI_Comm comm = MPI_COMM_WORLD; // required for ADIOS
-	int64_t adios_handle;   		// the ADIOS file handler
-	int retval;
-
-	struct adios_tsprt_opts adios_opts;
-	int err_count = 0;
-
-	GET_ENTRY_OPTIONS(adios_opts, "Runs writers. As many as you want to.");
-
-	// ADIOS initialization
-	MPI_Init(&argc, &argv);
-	MPI_Comm_rank(comm, &rank);
-	MPI_Comm_size(comm, &size);
-
-	// From sources it just returns 1 (2013-07-16, whatever)
-	adios_init_noxml(comm);
-
-	// returns 0 (buffer allocated) or 1 (seems everything fine)
-	// I guess size of the buffer in MB
-	adios_set_max_buffer_size (ADS_BUFFER_SIZE);
-
-	// this will hold the group id for all variables defined within this group
-	int64_t	adios_grp = 0;
-
-	// now declare a group and variables you will have in the group
-	adios_declare_group(&adios_grp, GRP_NAME, "", adios_stat_default);
-
-	uint64_t adios_groupsize = 0;
-
-    adios_define_var (adios_grp, MAYA_GF_VAR_PFX, "/level", adios_integer, "1", "1", "0");
-    adios_groupsize += 4;
-
-    adios_define_var (adios_grp, MAYA_GF_VAR_PFX, "/scalar", adios_integer, "", "", "");
-    adios_groupsize += sizeof(uint64_t);
-
-    adios_define_var (adios_grp, MAYA_GF_VAR_PFX, "/cctk_bbox", adios_integer, "6", "6", "0" );
-    adios_groupsize += (4 * 2 * 3);
-
-    adios_define_var (adios_grp, MAYA_GF_VAR_PFX, "/data", adios_double, "11,12,13", "11,12,13", "0,0,0");
-    adios_groupsize += (8 * 11 * 12 *13);
-
-
-	SET_ERROR_IF_ZERO(adios_select_method(adios_grp, adios_opts.transport, "", ""), err_count);
-	RET_IF_ERROR(err_count, rank);
-
-
-    int i = 0;
-
-    // these are values that will be written
-    int level[TIMESTEP_COUNT];
-    gen_1D_array_int(level, TIMESTEP_COUNT, rank);
-
-    int cctk_bbox[6];
-    gen_1D_array_int(cctk_bbox, 6, rank);
-
-    double * data =  (double *)malloc(11*12*13*sizeof(double));
-    gen_1D_array2(data, 11*12*13, rank);
-
-
-    // required by WRITE_VAR macro (see the macro)
-    char fullpath[STR_BUFFER_SIZE];
-
-    // actually adios_write() doesn't write anything; the actual write
-    // is performed on or after adios_close() so having
-    // adios_open and adios_close out of the for loop will not produce
-    // the desired effect i.e., appending to values
-    for(i = 0; i < TIMESTEP_COUNT; ++i){
-    	// open our group and transport method associated with it
-    	adios_open (&adios_handle, GRP_NAME, FILE_NAME, "a", comm);
-
-    	uint64_t adios_totalsize = 0;
-    	retval=adios_group_size (adios_handle, adios_groupsize, &adios_totalsize);
-    	fprintf(stderr, "Rank=%d adios_group_size(): adios_groupsize=%" PRIu64 ", adios_totalsize=%" PRIu64 ", retval=%d\n",
-    				rank, adios_groupsize, adios_totalsize, retval);
-    	WRITE_VAR("/level/", MAYA_GF_VAR_PFX, &level[i]);
-    	WRITE_VAR("/scalar/", MAYA_GF_VAR_PFX, &level[i]);
-    	WRITE_VAR("/cctk_bbox/", MAYA_GF_VAR_PFX, cctk_bbox);
-    	WRITE_VAR("/data/", MAYA_GF_VAR_PFX, data);
-
-    	fprintf(stderr, "Rank=%d committed write\n", rank);
-    	adios_close(adios_handle);
-    }
-
-    free(data);
-    data = NULL;
-    adios_finalize(rank);
-    MPI_Finalize();
-
-	return 0;
-}
diff --git a/tests/C/flexpath_tests/maya_noxml/Makefile.in b/tests/C/flexpath_tests/maya_noxml/Makefile.in
index 3ae1812..edfc5af 100644
--- a/tests/C/flexpath_tests/maya_noxml/Makefile.in
+++ b/tests/C/flexpath_tests/maya_noxml/Makefile.in
@@ -102,7 +102,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -110,8 +110,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -341,6 +341,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -417,6 +421,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/tests/C/flexpath_tests/maya_noxml/reader.c b/tests/C/flexpath_tests/maya_noxml/reader.c
index 2464a58..d11c12a 100644
--- a/tests/C/flexpath_tests/maya_noxml/reader.c
+++ b/tests/C/flexpath_tests/maya_noxml/reader.c
@@ -61,7 +61,7 @@
  * @param out_buf  The output buffer
  */
 #define READ_FULLPATH(path_str, out_buf) \
-	sprintf(fullpath, "%s%s", path_str, fullname);  \
+	sprintf(fullpath, "%s%s", fullname, path_str);		\
 	SET_ERROR_IF_NOT_ZERO(adios_schedule_read(adios_handle, sel, fullpath,0,1, out_buf), error_counts.adios); \
 	BREAK_IF_ERROR(error_counts.adios);
 
@@ -135,22 +135,29 @@ int main (int argc, char **argv){
 	double delta[3];
 	int32_t iorigin[3];
 	uint64_t shape[3];
+	char fullpath[STR_BUFFER_SIZE];
 
 	// I think these are global variables, so shouldn't be a problem
 
 	// first schedule reading of the entire variables (so NULL selection)
 	// reading the patch_id doesn't make much sense as it seems that only the
 	// very first value is written out so we will get 0
-	SET_ERROR_IF_NOT_ZERO(adios_schedule_read(adios_handle, NULL, "patch_id",0,1, &patch_id), error_counts.adios);
+	gen_maya_var_name(fullname, MAYA_VAR_BUF_SIZE, MAYA_GF_VAR_PFX, 0);
+
+	sprintf(fullpath, "%s%s", fullname, "/patch_id");
+	SET_ERROR_IF_NOT_ZERO(adios_schedule_read(adios_handle, NULL, fullpath, 0,1, &patch_id), error_counts.adios);
 	RET_AND_CLOSE_ADIOS_READER_IF_ERROR(error_counts.adios, rank, adios_handle, adios_opts.method);
 
-	SET_ERROR_IF_NOT_ZERO(adios_schedule_read(adios_handle, NULL, "shape_dim_x",0,1, &shape_max_dims[0]), error_counts.adios);
+	sprintf(fullpath, "%s%s", fullname, "/shape_dim_x");
+	SET_ERROR_IF_NOT_ZERO(adios_schedule_read(adios_handle, NULL, fullpath, 0,1, &shape_max_dims[0]), error_counts.adios);
 	RET_AND_CLOSE_ADIOS_READER_IF_ERROR(error_counts.adios, rank, adios_handle, adios_opts.method);
 
-	SET_ERROR_IF_NOT_ZERO(adios_schedule_read(adios_handle, NULL, "shape_dim_y",0,1, &shape_max_dims[1]), error_counts.adios);
+	sprintf(fullpath, "%s%s", fullname, "/shape_dim_y");
+	SET_ERROR_IF_NOT_ZERO(adios_schedule_read(adios_handle, NULL, fullpath, 0,1, &shape_max_dims[1]), error_counts.adios);
 	RET_AND_CLOSE_ADIOS_READER_IF_ERROR(error_counts.adios, rank, adios_handle, adios_opts.method);
 
-	SET_ERROR_IF_NOT_ZERO(adios_schedule_read(adios_handle, NULL, "shape_dim_z",0,1, &shape_max_dims[2]), error_counts.adios);
+	sprintf(fullpath, "%s%s", fullname, "/shape_dim_z");
+	SET_ERROR_IF_NOT_ZERO(adios_schedule_read(adios_handle, NULL, fullpath, 0,1, &shape_max_dims[2]), error_counts.adios);
 	RET_AND_CLOSE_ADIOS_READER_IF_ERROR(error_counts.adios, rank, adios_handle, adios_opts.method);
 
 	// not sure if this assumption is correct; difficult to find in the ADIOS sources
@@ -196,19 +203,18 @@ int main (int argc, char **argv){
 
 
 	// for storing the name of the variable
-	char fullpath[STR_BUFFER_SIZE];
-	char * levelpath = "/level/";
-	char * datapath = "/data/";
-	char * mglevelpath = "/carpet_mglevel/";
-	char * timesteppath ="/timestep/";
-	char * group_timelevelpath = "/group_timelevel/";
-	char * timepath = "/time/";
-	char * cbbpath = "/cctk_bbox/";
-	char * cngzpath = "/cctk_nghostzones/";
-	char * originpath = "/origin/";
-	char * deltapath = "/delta/";
-	char * ioriginpath = "/iorigin/";
-	char * shapepath = "/shape/";
+	char * levelpath = "/level";
+	char * datapath = "/data";
+	char * mglevelpath = "/carpet_mglevel";
+	char * timesteppath ="/timestep";
+	char * group_timelevelpath = "/group_timelevel";
+	char * timepath = "/time";
+	char * cbbpath = "/cctk_bbox";
+	char * cngzpath = "/cctk_nghostzones";
+	char * originpath = "/origin";
+	char * deltapath = "/delta";
+	char * ioriginpath = "/iorigin";
+	char * shapepath = "/shape";
 
 	// read all variables with attributes
 	for(i = 0; i < MAYA_GRID_FUNC_COUNT; ++i){
@@ -289,13 +295,15 @@ int main (int argc, char **argv){
 		TEST_INT_EQUAL(i, level, error_counts.test, test_result.result);
 		BREAK_IF_ERROR(error_counts.test);
 
-		TEST_INT_EQUAL(i%2, carpet_mglevel, error_counts.test, test_result.result);
+		int j = i%2;
+		TEST_INT_EQUAL(j, carpet_mglevel, error_counts.test, test_result.result);
 		BREAK_IF_ERROR(error_counts.test);
 
 		TEST_INT_EQUAL(26, timestep, error_counts.test, test_result.result);
 		BREAK_IF_ERROR(error_counts.test);
 
-		TEST_INT_EQUAL(i%3, grp_tl, error_counts.test, test_result.result);
+		j=i%3;
+		TEST_INT_EQUAL(j, grp_tl, error_counts.test, test_result.result);
 		BREAK_IF_ERROR(error_counts.test);
 
 		TEST_DOUBLE_EQUAL(13.0, time_attr, error_counts.test, test_result.result);
@@ -344,29 +352,36 @@ int main (int argc, char **argv){
 		// this is assumed that the data are in this patch - we have to know
 		// how it was written out i-th grid function was outputted in i-th patch
 		// e.g., bpls -d test.bp -s"1,0,0,0" -c"1,shape[0],shape[1],shape[2] /data/maya_gf_var1 -n 12
-		uint64_t start_4D[] = {i, 0, 0, 0};
+		uint64_t start_4D[] = {rank, 0, 0, 0};
 
 		sel = adios_selection_boundingbox(4, start_4D, count_4D );
 		READ_FULLPATH(datapath, data);
 		adios_selection_delete(sel);
 		sel = NULL;
 
+		if( !(ref_data) || (set_value(ref_data, shape_max_dims[0] * shape_max_dims[1] *shape_max_dims[2], (double) 2*i + rank) != DIAG_OK) ){
+		    free(data);
+		    RET_IF_ERROR(1, rank);
+		}
 		SET_ERROR_IF_NOT_ZERO(adios_perform_reads(adios_handle, 1), error_counts.adios);
 		RET_AND_CLOSE_ADIOS_READER_IF_ERROR(error_counts.adios, rank, adios_handle, adios_opts.method);
 
-		// now compare what I got
-		for(k = 0 ; k < shape[0] *shape[1] *shape[2]; ++k){
-			TEST_DOUBLE_EQUAL(ref_data[k], data[k], error_counts.test, test_result.result);
-			BREAK_IF_ERROR(error_counts.test);
-		}
+		// We *should* be comparing the incoming "/data" array here.  But it isn't really written properly. 
+		// We only write slabs corresponding to the number of writers.  So lets just skip it.
+
 		BREAK_IF_ERROR(error_counts.test);
 	}
 
+	adios_release_step(adios_handle);
+	adios_advance_step(adios_handle, 0, 30);
 	adios_free_varinfo(avi);
 	avi = NULL;
 
-	if (TEST_PASSED == test_result.result)
-		p_test_passed("%s: rank %d\n", test_result.name, rank);
+        if (TEST_PASSED == test_result.result) {
+            p_test_passed("%s: rank %d\n", test_result.name, rank);
+        } else {
+            diag = DIAG_ERR;
+        }
 
 	CLOSE_ADIOS_READER(adios_handle, adios_opts.method);
 
diff --git a/tests/C/flexpath_tests/maya_noxml/writer.c b/tests/C/flexpath_tests/maya_noxml/writer.c
index 8e1b990..95e213e 100644
--- a/tests/C/flexpath_tests/maya_noxml/writer.c
+++ b/tests/C/flexpath_tests/maya_noxml/writer.c
@@ -36,8 +36,8 @@
  * @param path_str The path to the variable
  * @param variable  The var to be written out
  */
-#define WRITE_FULLPATH(path_str, var) \
-	sprintf(fullpath, "%s%s", path_str, fullname); \
+#define WRITE_FULLPATH(var_name, var) \
+    sprintf(fullpath, "%s%s", fullname, var_name);		\
 	adios_write(adios_handle, fullpath, var);
 
 
@@ -102,34 +102,38 @@ int main(int argc, char ** argv){
     // first define variable, since I am using no XML api
     for(i = 0; i < MAYA_GRID_FUNC_COUNT; ++i ){
     	// this is common for grid functions and scalars
-        adios_define_var (adios_grp, "patch_id", "", adios_unsigned_integer, "", "", "");
+
+    	gen_maya_var_name(fullname, MAYA_VAR_BUF_SIZE, MAYA_GF_VAR_PFX, i);
+
+        adios_define_var (adios_grp, "patch_id", fullname, adios_unsigned_integer, "", "", "");
         adios_groupsize += sizeof (uint64_t);
 
-        adios_define_var (adios_grp, "shape_dim_x", "", adios_unsigned_integer, "", "", "");
-        adios_define_var (adios_grp, "shape_dim_y", "", adios_unsigned_integer, "", "", "");
-        adios_define_var (adios_grp, "shape_dim_z", "", adios_unsigned_integer, "", "", "");
+        adios_define_var (adios_grp, "shape_dim_x", fullname, adios_integer, "", "", "");
+        adios_define_var (adios_grp, "shape_dim_y", fullname, adios_integer, "", "", "");
+        adios_define_var (adios_grp, "shape_dim_z", fullname, adios_integer, "", "", "");
         adios_groupsize += 3*sizeof (uint64_t); // can be bigger
 
         // I simulate writing grid functions
-        char * dimensions="1,shape_dim_x,shape_dim_y,shape_dim_z";
         // global dimensions should be, I suppose greater than shap_dim_xxx
         // i.e., shape_dim_x <= 48, shape_dim_y <= 89, shape_dim_z <= 116
         char * global_dimensions=GLOBAL_DIMENSIONS;
-        char * offsets="patch_id,0,0,0";
         // the name of maya variable
-        memset(fullname, 0, MAYA_VAR_BUF_SIZE);
-        sprintf(fullname, MAYA_GF_VAR_PFX "%d", i );
-
+	char *offsets = malloc(strlen(fullname) + strlen("patch_id,0,0,0") + 4);
+	sprintf(offsets, "%d,0,0,0", rank);
+	char *dimensions = malloc(strlen(fullname)*3 + strlen("shape_dim_x,shape_dim_y,shape_dim_z") + 12);
+	sprintf(dimensions, "1,%s/shape_dim_x,%s/shape_dim_y,%s/shape_dim_z", fullname, fullname, fullname);
         // I think this is for dataset size for doubles
+	char *single_offset = malloc(strlen(fullname) + strlen("/patch_id") + 1);
+	sprintf(single_offset, "%s/patch_id", fullname);
         adios_groupsize += max_data_size;
-        adios_define_var (adios_grp, fullname, "/data", adios_double, dimensions, global_dimensions, offsets);
-
-        adios_groupsize += (4 + 4 + 4 + 4 + 8);
-        adios_define_var (adios_grp, fullname, "/level", adios_integer, "1", "P", "patch_id") ;
-        adios_define_var (adios_grp, fullname, "/carpet_mglevel", adios_integer, "1", "P", "patch_id");
-        adios_define_var (adios_grp, fullname, "/timestep", adios_integer, "1", "P", "patch_id");
-        adios_define_var (adios_grp, fullname, "/group_timelevel", adios_integer, "1", "P", "patch_id");
-        adios_define_var (adios_grp, fullname, "/time", adios_double, "1", "P", "patch_id");
+        adios_define_var (adios_grp, "data", fullname, adios_double, dimensions, global_dimensions, offsets);
+ 
+	adios_groupsize += (4 + 4 + 4 + 4 + 8);
+        adios_define_var (adios_grp, "level", fullname, adios_integer, "1", "P", single_offset) ;
+        adios_define_var (adios_grp, "carpet_mglevel", fullname, adios_integer, "1", "P", single_offset);
+        adios_define_var (adios_grp, "timestep", fullname, adios_integer, "1", "P", single_offset);
+        adios_define_var (adios_grp, "group_timelevel", fullname, adios_integer, "1", "P", single_offset);
+        adios_define_var (adios_grp, "time", fullname, adios_double, "1", "P", single_offset);
 
         char ndim[16];
         char global_dims[18];
@@ -138,30 +142,34 @@ int main(int argc, char ** argv){
         adios_groupsize += (4 * 2 * dim);
         sprintf(ndim, "1,%d", 2 * dim);
         sprintf(global_dims, "P,%d", 2 * dim);
-        sprintf(local_offsets, "patch_id,0");
-        adios_define_var(adios_grp, fullname, "/cctk_bbox", adios_integer, ndim, global_dims, local_offsets);
+        sprintf(local_offsets, "%s/patch_id,0", fullname);
+        adios_define_var(adios_grp, "cctk_bbox", fullname, adios_integer, ndim, global_dims, local_offsets);
 
         adios_groupsize += (4 * dim);
         sprintf(ndim, "1,%d", dim);
         sprintf(global_dims, "P,%d", dim);
-        adios_define_var(adios_grp, fullname, "/cctk_nghostzones",adios_integer, ndim, global_dims, local_offsets);
+        adios_define_var(adios_grp, "cctk_nghostzones", fullname, adios_integer, ndim, global_dims, local_offsets);
 
         adios_groupsize += (8 * dim);
         sprintf(ndim, "1,%d", dim);
         sprintf(global_dims, "P,%d", dim);
-        adios_define_var(adios_grp, fullname, "/origin", adios_double, ndim, global_dims, local_offsets);
+        adios_define_var(adios_grp, "origin", fullname, adios_double, ndim, global_dims, local_offsets);
 
         adios_groupsize += (8 * dim);
-        adios_define_var(adios_grp, fullname, "/delta", adios_double, ndim, global_dims, local_offsets);
+        adios_define_var(adios_grp, "delta", fullname, adios_double, ndim, global_dims, local_offsets);
 
         adios_groupsize += (4 * dim);
-        adios_define_var(adios_grp, fullname, "/iorigin", adios_integer, ndim, global_dims, local_offsets);
+        adios_define_var(adios_grp, "iorigin", fullname, adios_integer, ndim, global_dims, local_offsets);
 
         adios_groupsize += (sizeof(uint64_t) * dim);
-        adios_define_var(adios_grp, fullname, "/shape", adios_unsigned_long,ndim, global_dims, local_offsets);
+        adios_define_var(adios_grp, "shape", fullname, adios_unsigned_long,ndim, global_dims, local_offsets);
+
+	free(dimensions);
+	free(offsets);
+
     }
 
-    SET_ERROR_IF_ZERO(adios_select_method(adios_grp, adios_opts.transport, "", ""), err_count);
+    SET_ERROR_IF_NOT_ZERO(adios_select_method(adios_grp, adios_opts.transport, "", ""), err_count);
     RET_IF_ERROR(err_count, rank);
 
 	// open our group and transport method associated with it
@@ -169,11 +177,12 @@ int main(int argc, char ** argv){
 	uint64_t adios_totalsize = 0;
 
 	retval=adios_group_size (adios_handle, adios_groupsize, &adios_totalsize);
-	fprintf(stderr, "Rank=%d adios_group_size(): adios_groupsize=%" PRIu64 ", adios_totalsize=%" PRIu64 ", retval=%d\n",
-				rank, adios_groupsize, adios_totalsize, retval);
-
-	printf("Writing checkpoint to file %s using the %s method: group size is %" PRIu64 ", total size is %" PRIu64 ". \n", FILE_NAME, adios_opts.transport, adios_groupsize, adios_totalsize);
+	if (test_verbose) {
+            fprintf(stderr, "Rank=%d adios_group_size(): adios_groupsize=%" PRIu64 ", adios_totalsize=%" PRIu64 ", retval=%d\n",
+                    rank, adios_groupsize, adios_totalsize, retval);
 
+            printf("Writing checkpoint to file %s using the %s method: group size is %" PRIu64 ", total size is %" PRIu64 ". \n", FILE_NAME, adios_opts.transport, adios_groupsize, adios_totalsize);
+        }
 
     // arbitrary, but this is what I am getting from Maya
 	// the number of patches I want to write
@@ -184,18 +193,18 @@ int main(int argc, char ** argv){
 	// now goes adWRiteGroupVar
 
     char fullpath[STR_BUFFER_SIZE];
-    char * levelpath = "/level/";
-    char * datapath = "/data/";
-    char * mglevelpath = "/carpet_mglevel/";
-    char * timesteppath ="/timestep/";
-    char * group_timelevelpath = "/group_timelevel/";
-    char * timepath = "/time/";
-    char * cbbpath = "/cctk_bbox/";
-    char * cngzpath = "/cctk_nghostzones/";
-    char * originpath = "/origin/";
-    char * deltapath = "/delta/";
-    char * ioriginpath = "/iorigin/";
-    char * shapepath = "/shape/";
+    char * levelpath = "/level";
+    char * datapath = "/data";
+    char * mglevelpath = "/carpet_mglevel";
+    char * timesteppath ="/timestep";
+    char * group_timelevelpath = "/group_timelevel";
+    char * timepath = "/time";
+    char * cbbpath = "/cctk_bbox";
+    char * cngzpath = "/cctk_nghostzones";
+    char * originpath = "/origin";
+    char * deltapath = "/delta";
+    char * ioriginpath = "/iorigin";
+    char * shapepath = "/shape";
 
     assert(shape[0] * shape[1] *shape[2] * 8 == data_size);
     assert(max_shape[0] * max_shape[1] * max_shape[2] * 8 == max_data_size);
@@ -216,6 +225,8 @@ int main(int argc, char ** argv){
     for(i = 0; i < MAYA_GRID_FUNC_COUNT; ++i){
 
     	// generate the name of maya variable
+        memset(fullname, 0, MAYA_VAR_BUF_SIZE);
+
     	gen_maya_var_name(fullname, MAYA_VAR_BUF_SIZE, MAYA_GF_VAR_PFX, i);
 
     	// the purpose of writing this variable is to enable
@@ -230,16 +241,20 @@ int main(int argc, char ** argv){
     	// you need to have adios_write(patch_id) here; not above the
     	// for loop
     	// the idea was to write each variable with a designated different patch
-    	adios_write (adios_handle, "patch_id", &my_patch_index);
+    	WRITE_FULLPATH ("/patch_id", &my_patch_index);
     	my_patch_index++;
     	my_patch_index %= global_patch_count;
 
     	// these max shape dims; this also tests if we can rewrite the
     	// same variable over and over; as we did this for the Maya
-    	adios_write (adios_handle, "shape_dim_x", &max_shape[0]) ;
-    	adios_write (adios_handle, "shape_dim_y", &max_shape[1]) ;
-    	adios_write (adios_handle, "shape_dim_z", &max_shape[2]) ;
-
+    	WRITE_FULLPATH ("/shape_dim_x", &max_shape[0]) ;
+    	WRITE_FULLPATH ("/shape_dim_y", &max_shape[1]) ;
+    	WRITE_FULLPATH ("/shape_dim_z", &max_shape[2]) ;
+
+        if( set_value(my_data, max_shape[0] * max_shape[1] *max_shape[2], (double) 2*i+rank) != DIAG_OK ){
+            p_error("with generating data. Quitting\n");
+            return DIAG_ERR;
+        }
     	// Write the data
     	WRITE_FULLPATH(datapath, my_data);
 
@@ -274,8 +289,9 @@ int main(int argc, char ** argv){
     	WRITE_FULLPATH(shapepath, dim_3_uint64_t);
     }
 
-	fprintf(stderr, "Rank=%d committed write\n", rank);
-
+	if (test_verbose) {
+            fprintf(stderr, "Rank=%d committed write\n", rank);
+        }
 	free(my_data);
 	my_data = NULL;
 
@@ -285,8 +301,6 @@ int main(int argc, char ** argv){
 	adios_finalize(rank);
 	MPI_Finalize();
 
-	printf("\n");
-
 	return 0;
 }
 
diff --git a/tests/C/flexpath_tests/scalar/Makefile.in b/tests/C/flexpath_tests/scalar/Makefile.in
index fe81a63..0798a24 100644
--- a/tests/C/flexpath_tests/scalar/Makefile.in
+++ b/tests/C/flexpath_tests/scalar/Makefile.in
@@ -101,7 +101,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -109,8 +109,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -335,6 +335,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -411,6 +415,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/tests/C/flexpath_tests/scalar/writer.c b/tests/C/flexpath_tests/scalar/writer.c
index 17d2e61..76b4306 100644
--- a/tests/C/flexpath_tests/scalar/writer.c
+++ b/tests/C/flexpath_tests/scalar/writer.c
@@ -53,15 +53,19 @@ int main(int argc, char ** argv){
 	adios_open( &adios_handle, "scalar", FILE_NAME, "w", comm);
 	adios_groupsize = 4 + 4 + 4;
 	retval=adios_group_size (adios_handle, adios_groupsize, &adios_totalsize);
-	fprintf(stderr, "Rank=%d adios_group_size(): adios_groupsize=%" PRIu64 ", adios_totalsize=%" PRIu64 ", retval=%d\n",
-			rank, adios_groupsize, adios_totalsize, retval);
+	if (test_verbose) {
+	    fprintf(stderr, "Rank=%d adios_group_size(): adios_groupsize=%" PRIu64 ", adios_totalsize=%" PRIu64 ", retval=%d\n",
+		    rank, adios_groupsize, adios_totalsize, retval);
+	}
 
 	// write; don't check errors for simplicity reasons
 	adios_write(adios_handle, "size", &size);
 	adios_write(adios_handle, "rank", &rank);
 	adios_write(adios_handle, "lucky_scalar", &rank);
 
-	fprintf(stderr, "Rank=%d committed write\n", rank);
+	if (test_verbose) {
+	    fprintf(stderr, "Rank=%d committed write\n", rank);
+	}
 
 	// close and finalize the ADIOS and friends
 	adios_close(adios_handle);
diff --git a/tests/C/query/Makefile.in b/tests/C/query/Makefile.in
index feef088..dba4b3b 100644
--- a/tests/C/query/Makefile.in
+++ b/tests/C/query/Makefile.in
@@ -101,7 +101,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -109,8 +109,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -335,6 +335,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -411,6 +415,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/tests/C/query/alacrity/Makefile.in b/tests/C/query/alacrity/Makefile.in
index f099486..85e3538 100644
--- a/tests/C/query/alacrity/Makefile.in
+++ b/tests/C/query/alacrity/Makefile.in
@@ -105,7 +105,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -113,8 +113,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -379,6 +379,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -455,6 +459,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/tests/C/query/alacrity/adios_alac_query.c b/tests/C/query/alacrity/adios_alac_query.c
index d10060d..c511e3f 100644
--- a/tests/C/query/alacrity/adios_alac_query.c
+++ b/tests/C/query/alacrity/adios_alac_query.c
@@ -57,7 +57,7 @@ int performQuery(ADIOS_QUERY_TEST_INFO *queryInfo, ADIOS_FILE *f)
 {
     int i = 0, timestep = 0 ;
     ADIOS_VARINFO * tempVar = adios_inq_var(f, queryInfo->varName);
-    fprintf(stderr,"times steps for variable is: [%d, %d], batch size is %llu\n", queryInfo->fromStep, queryInfo->fromStep + queryInfo->numSteps, queryInfo->batchSize);
+    fprintf(stderr,"times steps for variable is: [%d, %d], batch size is %" PRIu64 "\n", queryInfo->fromStep, queryInfo->fromStep + queryInfo->numSteps, queryInfo->batchSize);
     for (timestep = queryInfo->fromStep; timestep < queryInfo->fromStep + queryInfo->numSteps; timestep ++) {
         fprintf(stderr,"querying on timestep %d \n", timestep );
 
diff --git a/tests/C/query/common/Makefile.in b/tests/C/query/common/Makefile.in
index 8dcd42a..0fb099b 100644
--- a/tests/C/query/common/Makefile.in
+++ b/tests/C/query/common/Makefile.in
@@ -103,7 +103,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -111,8 +111,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -359,6 +359,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -435,6 +439,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/tests/C/query/fastbit/Makefile.in b/tests/C/query/fastbit/Makefile.in
index ac21b1e..7a681b0 100644
--- a/tests/C/query/fastbit/Makefile.in
+++ b/tests/C/query/fastbit/Makefile.in
@@ -104,7 +104,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -112,8 +112,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -334,6 +334,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -410,6 +414,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/tests/Fortran/Makefile.in b/tests/Fortran/Makefile.in
index e4d50c8..a85eb70 100644
--- a/tests/Fortran/Makefile.in
+++ b/tests/Fortran/Makefile.in
@@ -101,7 +101,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -109,8 +109,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -324,6 +324,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -400,6 +404,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/tests/Makefile.in b/tests/Makefile.in
index 4fcdd2d..2125ef7 100644
--- a/tests/Makefile.in
+++ b/tests/Makefile.in
@@ -102,7 +102,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -110,8 +110,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -336,6 +336,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -412,6 +416,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/tests/bp_read/Makefile.in b/tests/bp_read/Makefile.in
index 7b4cfef..7838944 100644
--- a/tests/bp_read/Makefile.in
+++ b/tests/bp_read/Makefile.in
@@ -105,7 +105,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -113,8 +113,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -375,6 +375,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -451,6 +455,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/tests/genarray/CMakeLists.txt b/tests/genarray/CMakeLists.txt
index 8a14d86..1d65f4c 100644
--- a/tests/genarray/CMakeLists.txt
+++ b/tests/genarray/CMakeLists.txt
@@ -4,7 +4,7 @@ include_directories(${PROJECT_SOURCE_DIR}/tests/genarray)
 include_directories(${PROJECT_BINARY_DIR}/tests/genarray)
 link_directories(${PROJECT_BINARY_DIR}/tests/genarray)
 
-add_executable(genarray genarray.F90 gwrite_genarray.fh)
+add_executable(genarray genarray.F90)
 target_link_libraries(genarray adiosf ${ADIOSLIB_LDADD})
 set_target_properties(genarray PROPERTIES COMPILE_FLAGS "${ADIOSLIB_CPPFLAGS} ${ADIOSLIB_CFLAGS}")
 
@@ -12,7 +12,7 @@ add_executable(genarray2D genarray2D.F90)
 target_link_libraries(genarray2D adiosf ${ADIOSLIB_LDADD})
 set_target_properties(genarray2D PROPERTIES COMPILE_FLAGS "${ADIOSLIB_CPPFLAGS} ${ADIOSLIB_CFLAGS}")
 
-add_executable(copyarray copyarray.F90 gread_genarray.fh)
+add_executable(copyarray copyarray.F90)
 target_link_libraries(copyarray adiosf ${ADIOSLIB_LDADD})
 set_target_properties(copyarray PROPERTIES COMPILE_FLAGS "${ADIOSLIB_CPPFLAGS} ${ADIOSLIB_CFLAGS}")
 
@@ -20,18 +20,4 @@ add_executable(copyarray2D copyarray2D.F90)
 target_link_libraries(copyarray2D adiosf ${ADIOSLIB_LDADD})
 set_target_properties(copyarray2D PROPERTIES COMPILE_FLAGS "${ADIOSLIB_CPPFLAGS} ${ADIOSLIB_CFLAGS}")
 
-add_custom_command(
-	OUTPUT gwrite_genarray.fh
-	COMMAND rm -f gwrite_genarray.fh gread_genarray.fh 
-	COMMAND ${PROJECT_BINARY_DIR}/utils/gpp/gpp.py ${PROJECT_SOURCE_DIR}/tests/genarray/genarray3d.xml
-	DEPENDS genarray3d.xml
-	)
-
-add_custom_command(
-        OUTPUT gread_genarray.fh 
-	COMMAND rm -f gwrite_genarray.fh gread_genarray.fh 
-	COMMAND ${PROJECT_BINARY_DIR}/utils/gpp/gpp.py ${PROJECT_SOURCE_DIR}/tests/genarray/genarray3d.xml
-	DEPENDS genarray3d.xml
-	)
-
 file(COPY genarray.xml genarray3d.xml job.ewok job2D.ewok DESTINATION ${PROJECT_BINARY_DIR}/tests/genarray) 
diff --git a/tests/genarray/Makefile.am b/tests/genarray/Makefile.am
index 13c1e8e..161a975 100644
--- a/tests/genarray/Makefile.am
+++ b/tests/genarray/Makefile.am
@@ -31,15 +31,15 @@ copyarray2D_LDFLAGS = $(ADIOSLIB_LDFLAGS) $(ADIOSLIB_EXTRA_LDFLAGS)
 
 FC=$(MPIFC)
 
-genarray.F90: gwrite_genarray.fh
-copyarray.F90: gwrite_genarray.fh gread_genarray.fh
-
-gwrite_genarray.fh: genarray3d.xml
-	rm -f gwrite_genarray.fh gread_genarray.fh
-	$(top_builddir)/utils/gpp/gpp.py $(srcdir)/genarray3d.xml
-gread_genarray.fh: genarray3d.xml
-	rm -f gwrite_genarray.fh gread_genarray.fh
-	$(top_builddir)/utils/gpp/gpp.py $(srcdir)/genarray3d.xml
+#genarray.F90: gwrite_genarray.fh
+#copyarray.F90: gwrite_genarray.fh gread_genarray.fh
+#
+#gwrite_genarray.fh: genarray3d.xml
+#	rm -f gwrite_genarray.fh gread_genarray.fh
+#	$(top_builddir)/utils/gpp/gpp.py $(srcdir)/genarray3d.xml
+#gread_genarray.fh: genarray3d.xml
+#	rm -f gwrite_genarray.fh gread_genarray.fh
+#	$(top_builddir)/utils/gpp/gpp.py $(srcdir)/genarray3d.xml
 
 FCLINK = \
 	$(LIBTOOL) --mode=link --tag F77 $(FC) \
diff --git a/tests/genarray/Makefile.in b/tests/genarray/Makefile.in
index 5a37f21..c73ff42 100644
--- a/tests/genarray/Makefile.in
+++ b/tests/genarray/Makefile.in
@@ -102,7 +102,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -110,8 +110,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -348,6 +348,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -424,6 +428,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
@@ -515,6 +522,16 @@ copyarray2D_CPPFLAGS = $(AM_CPPFLAGS) $(ADIOSLIB_CPPFLAGS)
 copyarray2D_CFLAGS = $(ADIOSLIB_CFLAGS)
 copyarray2D_LDADD = $(top_builddir)/src/libadiosf.a $(ADIOSLIB_LDADD)
 copyarray2D_LDFLAGS = $(ADIOSLIB_LDFLAGS) $(ADIOSLIB_EXTRA_LDFLAGS)
+
+#genarray.F90: gwrite_genarray.fh
+#copyarray.F90: gwrite_genarray.fh gread_genarray.fh
+#
+#gwrite_genarray.fh: genarray3d.xml
+#	rm -f gwrite_genarray.fh gread_genarray.fh
+#	$(top_builddir)/utils/gpp/gpp.py $(srcdir)/genarray3d.xml
+#gread_genarray.fh: genarray3d.xml
+#	rm -f gwrite_genarray.fh gread_genarray.fh
+#	$(top_builddir)/utils/gpp/gpp.py $(srcdir)/genarray3d.xml
 FCLINK = \
 	$(LIBTOOL) --mode=link --tag F77 $(FC) \
 	$(AM_FCFLAGS) $(FCFLAGS) $(LDFLAGS) -o $@
@@ -829,16 +846,6 @@ uninstall-am:
 	tags tags-am uninstall uninstall-am
 
 
-genarray.F90: gwrite_genarray.fh
-copyarray.F90: gwrite_genarray.fh gread_genarray.fh
-
-gwrite_genarray.fh: genarray3d.xml
-	rm -f gwrite_genarray.fh gread_genarray.fh
-	$(top_builddir)/utils/gpp/gpp.py $(srcdir)/genarray3d.xml
-gread_genarray.fh: genarray3d.xml
-	rm -f gwrite_genarray.fh gread_genarray.fh
-	$(top_builddir)/utils/gpp/gpp.py $(srcdir)/genarray3d.xml
-
 all-local:
 	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/genarray3d.xml $(srcdir)/genarray.xml $(builddir)
 
diff --git a/tests/genarray/copyarray.F90 b/tests/genarray/copyarray.F90
index 364ddf1..bcad40b 100644
--- a/tests/genarray/copyarray.F90
+++ b/tests/genarray/copyarray.F90
@@ -204,7 +204,18 @@ subroutine readArray()
 ! TODO: Fix this to use the new read API
 
     call adios_open (adios_handle, group, inputfile, "r", group_comm, adios_err)
-#include "gread_genarray.fh"
+    call adios_selection_writeblock (s, rank)
+    call adios_schedule_read (fp, s, "var1", 0, 1, double_xyz, adios_err)
+    call adios_schedule_read (fp, s, "var2", 0, 1, double_xyz, adios_err)
+    call adios_schedule_read (fp, s, "var3", 0, 1, double_xyz, adios_err)
+    call adios_schedule_read (fp, s, "var4", 0, 1, double_xyz, adios_err)
+    call adios_schedule_read (fp, s, "var5", 0, 1, double_xyz, adios_err)
+    call adios_schedule_read (fp, s, "var6", 0, 1, double_xyz, adios_err)
+    call adios_schedule_read (fp, s, "var7", 0, 1, double_xyz, adios_err)
+    call adios_schedule_read (fp, s, "var8", 0, 1, double_xyz, adios_err)
+    call adios_schedule_read (fp, s, "var9", 0, 1, double_xyz, adios_err)
+    call adios_perform_reads (fp, adios_err)
+    call adios_selection_delete (s)
     call MPI_BARRIER(MPI_COMM_WORLD,adios_err)
     cache_end_time = MPI_WTIME()
     cache_total_time = cache_end_time - cache_start_time
@@ -234,7 +245,52 @@ subroutine writeArray()
 
     group = "genarray"
     call adios_open (adios_handle, group, outputfile, "w", group_comm, adios_err)
-#include "gwrite_genarray.fh"
+    adios_groupsize = 0
+    adios_groupsize = adios_groupsize + 4_8 &
+                + 4_8 &
+                + 4_8 &
+                + 4_8 &
+                + 4_8 &
+                + 4_8 &
+                + 4_8 &
+                + 4_8 &
+                + 4_8 &
+                + 4_8 &
+                + 4_8 &
+                + 4_8 &
+                + 4_8 &
+                + 8_8 * (ndx) * (ndy) * (ndz) &
+                + 8_8 * (ndx) * (ndy) * (ndz) &
+                + 8_8 * (ndx) * (ndy) * (ndz) &
+                + 8_8 * (ndx) * (ndy) * (ndz) &
+                + 8_8 * (ndx) * (ndy) * (ndz) &
+                + 8_8 * (ndx) * (ndy) * (ndz) &
+                + 8_8 * (ndx) * (ndy) * (ndz) &
+                + 8_8 * (ndx) * (ndy) * (ndz) &
+                + 8_8 * (ndx) * (ndy) * (ndz)
+    call adios_group_size (adios_handle, adios_groupsize, adios_totalsize, adios_err)
+    call adios_write (adios_handle, "/dimensions/gndx", gndx, adios_err)
+    call adios_write (adios_handle, "/dimensions/gndy", gndy, adios_err)
+    call adios_write (adios_handle, "/dimensions/gndz", gndz, adios_err)
+    call adios_write (adios_handle, "/info/nproc", nproc, adios_err)
+    call adios_write (adios_handle, "/info/npx", npx, adios_err)
+    call adios_write (adios_handle, "/info/npy", npy, adios_err)
+    call adios_write (adios_handle, "/info/npz", npz, adios_err)
+    call adios_write (adios_handle, "/aux/offx", offx, adios_err)
+    call adios_write (adios_handle, "/aux/offy", offy, adios_err)
+    call adios_write (adios_handle, "/aux/offz", offz, adios_err)
+    call adios_write (adios_handle, "/aux/ndx", ndx, adios_err)
+    call adios_write (adios_handle, "/aux/ndy", ndy, adios_err)
+    call adios_write (adios_handle, "/aux/ndz", ndz, adios_err)
+    call adios_write (adios_handle, "/var/var1", double_xyz, adios_err)
+    call adios_write (adios_handle, "/var/var2", double_xyz, adios_err)
+    call adios_write (adios_handle, "/var/var3", double_xyz, adios_err)
+    call adios_write (adios_handle, "/var/var4", double_xyz, adios_err)
+    call adios_write (adios_handle, "/var/var5", double_xyz, adios_err)
+    call adios_write (adios_handle, "/var/var6", double_xyz, adios_err)
+    call adios_write (adios_handle, "/var/var7", double_xyz, adios_err)
+    call adios_write (adios_handle, "/var/var8", double_xyz, adios_err)
+    call adios_write (adios_handle, "/var/var9", double_xyz, adios_err)
     call MPI_BARRIER(MPI_COMM_WORLD,adios_err)
     cache_end_time = MPI_WTIME()
     cache_total_time = cache_end_time - cache_start_time
diff --git a/tests/genarray/genarray.F90 b/tests/genarray/genarray.F90
index 6d22f6e..e83169c 100644
--- a/tests/genarray/genarray.F90
+++ b/tests/genarray/genarray.F90
@@ -182,7 +182,52 @@ subroutine writeArray()
         group = "genarray"
         write (outfilename,'(a,".",i3.3,".bp")') trim(outputfile),tstep
         call adios_open (adios_handle, group, outfilename, mode, group_comm, adios_err)
-#include "gwrite_genarray.fh"
+        adios_groupsize = 0
+        adios_groupsize = adios_groupsize + 4_8 &
+                + 4_8 &
+                + 4_8 &
+                + 4_8 &
+                + 4_8 &
+                + 4_8 &
+                + 4_8 &
+                + 4_8 &
+                + 4_8 &
+                + 4_8 &
+                + 4_8 &
+                + 4_8 &
+                + 4_8 &
+                + 8_8 * (ndx) * (ndy) * (ndz) &
+                + 8_8 * (ndx) * (ndy) * (ndz) &
+                + 8_8 * (ndx) * (ndy) * (ndz) &
+                + 8_8 * (ndx) * (ndy) * (ndz) &
+                + 8_8 * (ndx) * (ndy) * (ndz) &
+                + 8_8 * (ndx) * (ndy) * (ndz) &
+                + 8_8 * (ndx) * (ndy) * (ndz) &
+                + 8_8 * (ndx) * (ndy) * (ndz) &
+                + 8_8 * (ndx) * (ndy) * (ndz)
+        call adios_group_size (adios_handle, adios_groupsize, adios_totalsize, adios_err)
+        call adios_write (adios_handle, "/dimensions/gndx", gndx, adios_err)
+        call adios_write (adios_handle, "/dimensions/gndy", gndy, adios_err)
+        call adios_write (adios_handle, "/dimensions/gndz", gndz, adios_err)
+        call adios_write (adios_handle, "/info/nproc", nproc, adios_err)
+        call adios_write (adios_handle, "/info/npx", npx, adios_err)
+        call adios_write (adios_handle, "/info/npy", npy, adios_err)
+        call adios_write (adios_handle, "/info/npz", npz, adios_err)
+        call adios_write (adios_handle, "/aux/offx", offx, adios_err)
+        call adios_write (adios_handle, "/aux/offy", offy, adios_err)
+        call adios_write (adios_handle, "/aux/offz", offz, adios_err)
+        call adios_write (adios_handle, "/aux/ndx", ndx, adios_err)
+        call adios_write (adios_handle, "/aux/ndy", ndy, adios_err)
+        call adios_write (adios_handle, "/aux/ndz", ndz, adios_err)
+        call adios_write (adios_handle, "/var/var1", double_xyz, adios_err)
+        call adios_write (adios_handle, "/var/var2", double_xyz, adios_err)
+        call adios_write (adios_handle, "/var/var3", double_xyz, adios_err)
+        call adios_write (adios_handle, "/var/var4", double_xyz, adios_err)
+        call adios_write (adios_handle, "/var/var5", double_xyz, adios_err)
+        call adios_write (adios_handle, "/var/var6", double_xyz, adios_err)
+        call adios_write (adios_handle, "/var/var7", double_xyz, adios_err)
+        call adios_write (adios_handle, "/var/var8", double_xyz, adios_err)
+        call adios_write (adios_handle, "/var/var9", double_xyz, adios_err)
         call adios_close (adios_handle, adios_err)
         call MPI_BARRIER(MPI_COMM_WORLD,ierr)
         io_end_time = MPI_WTIME()
@@ -251,9 +296,9 @@ subroutine processArgs()
         call getarg(5, ndx_str)
         call getarg(6, ndy_str)
         call getarg(7, ndz_str)
-        read (ndx_str,'(i6)') ndx
-        read (ndy_str,'(i6)') ndy
-        read (ndz_str,'(i6)') ndz
+        read (ndx_str,'(i12)') ndx
+        read (ndy_str,'(i12)') ndy
+        read (ndz_str,'(i12)') ndz
         inputfile=char(0)
         common_size = .true.
         call getarg(8, time_str)
diff --git a/tests/genarray/genarray.xml b/tests/genarray/genarray.xml
index 66f994d..e02afa8 100644
--- a/tests/genarray/genarray.xml
+++ b/tests/genarray/genarray.xml
@@ -52,6 +52,5 @@
   <method group="genarray" method="MPI"></method>
   <!--method group="genarray" method="VAR_MERGE">chunk_size=1048576,io_method=MPI_LUSTRE,io_parameters=stripe_count=16,stripe_size=1048576</method-->
 
-  <buffer max-size-MB="400"/>
 
 </adios-config>
diff --git a/tests/genarray/genarray2D.F90 b/tests/genarray/genarray2D.F90
index 87baccb..51792e8 100644
--- a/tests/genarray/genarray2D.F90
+++ b/tests/genarray/genarray2D.F90
@@ -194,9 +194,9 @@ subroutine writeArray()
     ! Write out data using ADIOS
     group = "genarray"
     !  calculate how much we write from this processor
-    group_size = 4 * 9               + &  ! X,Y, nproc, all size_ and offs_ integers
-                 4 * ndx * ndy       + &  ! int_xy
-                 4 * ndx * ndy            ! int_xyt
+    group_size = 4_8 * 9_8           + &  ! X,Y, nproc, all size_ and offs_ integers
+                 ndx * ndy * 4_8     + &  ! int_xy
+                 ndx * ndy * 4_8          ! int_xyt
 
     adios_totalsize = group_size
 
@@ -297,8 +297,8 @@ subroutine processArgs()
         call getarg(4, ndx_str)
         call getarg(5, ndy_str)
         call getarg(6, time_str)
-        read (ndx_str,'(i6)') ndx
-        read (ndy_str,'(i6)') ndy
+        read (ndx_str,'(i12)') ndx
+        read (ndy_str,'(i12)') ndy
         read (time_str,'(i6)') timesteps
         inputfile=char(0)
         common_size = .true.
diff --git a/tests/genarray/genarray3d.xml b/tests/genarray/genarray3d.xml
index e32b310..275d62e 100644
--- a/tests/genarray/genarray3d.xml
+++ b/tests/genarray/genarray3d.xml
@@ -45,6 +45,5 @@
   <method group="genarray" method="MPI"></method>
   <!--method group="genarray" method="VAR_MERGE">chunk_size=1048576;io_method=MPI_LUSTRE;io_parameters=stripe_count=16,stripe_size=1048576</method-->
 
-  <buffer max-size-MB="20"/>
 
 </adios-config>
diff --git a/tests/suite/Makefile.in b/tests/suite/Makefile.in
index 241a952..4183688 100644
--- a/tests/suite/Makefile.in
+++ b/tests/suite/Makefile.in
@@ -99,7 +99,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -107,8 +107,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -333,6 +333,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -409,6 +413,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/tests/suite/programs/CMakeLists.txt b/tests/suite/programs/CMakeLists.txt
index 8ee6a89..363dadd 100644
--- a/tests/suite/programs/CMakeLists.txt
+++ b/tests/suite/programs/CMakeLists.txt
@@ -23,7 +23,8 @@ set (WRITE_PROGS1 local_array_time
   set_path_var
   steps_write
   blocks
-  build_standard_dataset)
+  build_standard_dataset
+  test_singlevalue)
 
 set(WRITE_PROGS2 adios_staged_read
                  adios_staged_read_v2 
@@ -75,3 +76,5 @@ file(COPY adios_amr_write.xml adios_amr_write_2vars.xml posix_method.xml
           path_test.xml adios_transforms.xml set_path.xml set_path_var.xml
           two_groups.xml
      DESTINATION ${PROJECT_BINARY_DIR}/tests/suite/programs)
+
+add_subdirectory(examples)
diff --git a/tests/suite/programs/Makefile.am b/tests/suite/programs/Makefile.am
index 429bde5..ff4ff5f 100644
--- a/tests/suite/programs/Makefile.am
+++ b/tests/suite/programs/Makefile.am
@@ -33,7 +33,8 @@ check_C=local_array_time \
 	steps_read_stream \
 	blocks \
 	build_standard_dataset \
-	transforms_writeblock_read 
+	transforms_writeblock_read \
+	test_singlevalue
 
 test_C=
 
@@ -190,6 +191,11 @@ transforms_writeblock_read_SOURCES = transforms_writeblock_read.c
 transforms_writeblock_read_LDADD = $(top_builddir)/src/libadiosread.a $(ADIOSREADLIB_LDADD) 
 transforms_writeblock_read_LDFLAGS = $(AM_LDFLAGS) $(ADIOSREADLIB_LDFLAGS)
 
+test_singlevalue_SOURCES=test_singlevalue.c
+test_singlevalue_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+test_singlevalue_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS) $(ADIOSLIB_EXTRA_LDFLAGS)
+test_singlevalue.o: test_singlevalue.c
+
 #transforms_SOURCES=transforms.c
 #transforms_CPPFLAGS = -DADIOS_USE_READ_API_1
 #transforms_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
diff --git a/tests/suite/programs/Makefile.in b/tests/suite/programs/Makefile.in
index 4297e96..1e7986c 100644
--- a/tests/suite/programs/Makefile.in
+++ b/tests/suite/programs/Makefile.in
@@ -103,7 +103,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -111,8 +111,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -143,7 +143,8 @@ CONFIG_CLEAN_VPATH_FILES =
 @BUILD_WRITE_TRUE@	steps_read_file$(EXEEXT) \
 @BUILD_WRITE_TRUE@	steps_read_stream$(EXEEXT) blocks$(EXEEXT) \
 @BUILD_WRITE_TRUE@	build_standard_dataset$(EXEEXT) \
- at BUILD_WRITE_TRUE@	transforms_writeblock_read$(EXEEXT)
+ at BUILD_WRITE_TRUE@	transforms_writeblock_read$(EXEEXT) \
+ at BUILD_WRITE_TRUE@	test_singlevalue$(EXEEXT)
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am__EXEEXT_2 =  \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	posix_method$(EXEEXT)
 am__EXEEXT_3 =
@@ -316,6 +317,14 @@ steps_write_DEPENDENCIES = $(top_builddir)/src/libadios.a \
 steps_write_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
 	$(steps_write_LDFLAGS) $(LDFLAGS) -o $@
+am_test_singlevalue_OBJECTS = test_singlevalue.$(OBJEXT)
+test_singlevalue_OBJECTS = $(am_test_singlevalue_OBJECTS)
+test_singlevalue_DEPENDENCIES = $(top_builddir)/src/libadios.a \
+	$(am__DEPENDENCIES_1)
+test_singlevalue_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(AM_CFLAGS) $(CFLAGS) $(test_singlevalue_LDFLAGS) $(LDFLAGS) \
+	-o $@
 am_transforms_writeblock_read_OBJECTS =  \
 	transforms_writeblock_read.$(OBJEXT)
 transforms_writeblock_read_OBJECTS =  \
@@ -409,6 +418,7 @@ SOURCES = $(adios_amr_write_SOURCES) $(adios_amr_write_2vars_SOURCES) \
 	$(selections_SOURCES) $(set_path_SOURCES) \
 	$(set_path_var_SOURCES) $(steps_read_file_SOURCES) \
 	$(steps_read_stream_SOURCES) $(steps_write_SOURCES) \
+	$(test_singlevalue_SOURCES) \
 	$(transforms_writeblock_read_SOURCES) $(two_groups_SOURCES) \
 	$(write_alternate_SOURCES) $(write_read_SOURCES)
 DIST_SOURCES = $(adios_amr_write_SOURCES) \
@@ -423,6 +433,7 @@ DIST_SOURCES = $(adios_amr_write_SOURCES) \
 	$(selections_SOURCES) $(set_path_SOURCES) \
 	$(set_path_var_SOURCES) $(steps_read_file_SOURCES) \
 	$(steps_read_stream_SOURCES) $(steps_write_SOURCES) \
+	$(test_singlevalue_SOURCES) \
 	$(transforms_writeblock_read_SOURCES) $(two_groups_SOURCES) \
 	$(write_alternate_SOURCES) $(write_read_SOURCES)
 RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
@@ -823,6 +834,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -899,6 +914,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
@@ -1002,7 +1020,8 @@ check_readonly_C =
 @BUILD_WRITE_TRUE@	steps_read_stream \
 @BUILD_WRITE_TRUE@	blocks \
 @BUILD_WRITE_TRUE@	build_standard_dataset \
- at BUILD_WRITE_TRUE@	transforms_writeblock_read 
+ at BUILD_WRITE_TRUE@	transforms_writeblock_read \
+ at BUILD_WRITE_TRUE@	test_singlevalue
 
 @BUILD_WRITE_TRUE at test_C = 
 @BUILD_WRITE_TRUE at SUBDIRS = examples
@@ -1092,6 +1111,9 @@ build_standard_dataset_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS) $(ADIOSLIB_EX
 transforms_writeblock_read_SOURCES = transforms_writeblock_read.c 
 transforms_writeblock_read_LDADD = $(top_builddir)/src/libadiosread.a $(ADIOSREADLIB_LDADD) 
 transforms_writeblock_read_LDFLAGS = $(AM_LDFLAGS) $(ADIOSREADLIB_LDFLAGS)
+test_singlevalue_SOURCES = test_singlevalue.c
+test_singlevalue_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+test_singlevalue_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS) $(ADIOSLIB_EXTRA_LDFLAGS)
 
 #transforms_SOURCES=transforms.c
 #transforms_CPPFLAGS = -DADIOS_USE_READ_API_1
@@ -1237,6 +1259,10 @@ steps_write$(EXEEXT): $(steps_write_OBJECTS) $(steps_write_DEPENDENCIES) $(EXTRA
 	@rm -f steps_write$(EXEEXT)
 	$(AM_V_CCLD)$(steps_write_LINK) $(steps_write_OBJECTS) $(steps_write_LDADD) $(LIBS)
 
+test_singlevalue$(EXEEXT): $(test_singlevalue_OBJECTS) $(test_singlevalue_DEPENDENCIES) $(EXTRA_test_singlevalue_DEPENDENCIES) 
+	@rm -f test_singlevalue$(EXEEXT)
+	$(AM_V_CCLD)$(test_singlevalue_LINK) $(test_singlevalue_OBJECTS) $(test_singlevalue_LDADD) $(LIBS)
+
 transforms_writeblock_read$(EXEEXT): $(transforms_writeblock_read_OBJECTS) $(transforms_writeblock_read_DEPENDENCIES) $(EXTRA_transforms_writeblock_read_DEPENDENCIES) 
 	@rm -f transforms_writeblock_read$(EXEEXT)
 	$(AM_V_CCLD)$(transforms_writeblock_read_LINK) $(transforms_writeblock_read_OBJECTS) $(transforms_writeblock_read_LDADD) $(LIBS)
@@ -1279,6 +1305,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/steps_read_file.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/steps_read_stream.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/steps_write.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test_singlevalue.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/transforms_writeblock_read.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/two_groups.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/write_alternate.Po at am__quote@
@@ -1786,6 +1813,7 @@ steps_write.o: steps_write.c
 steps_read_file.o: steps_read_file.c
 steps_read_stream.o: steps_read_stream.c
 blocks.o: blocks.c
+test_singlevalue.o: test_singlevalue.c
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/tests/suite/programs/adios_amr_write.c b/tests/suite/programs/adios_amr_write.c
index a6247b7..74b9c81 100644
--- a/tests/suite/programs/adios_amr_write.c
+++ b/tests/suite/programs/adios_amr_write.c
@@ -14,6 +14,7 @@
 */
 #include <stdio.h>
 #include <string.h>
+#include <stdlib.h>
 #include "adios.h"
 int main (int argc, char ** argv) 
 {
diff --git a/tests/suite/programs/adios_amr_write_2vars.c b/tests/suite/programs/adios_amr_write_2vars.c
index e1d2ec9..2067101 100644
--- a/tests/suite/programs/adios_amr_write_2vars.c
+++ b/tests/suite/programs/adios_amr_write_2vars.c
@@ -14,6 +14,7 @@
 */
 #include <stdio.h>
 #include <string.h>
+#include <stdlib.h>
 #include "adios.h"
 int main (int argc, char ** argv) 
 {
diff --git a/tests/suite/programs/big_file.c b/tests/suite/programs/big_file.c
index 88cde53..a586c2f 100644
--- a/tests/suite/programs/big_file.c
+++ b/tests/suite/programs/big_file.c
@@ -178,13 +178,13 @@ int write_file (int step)
     adios_open (&fh, "bigdata", FILENAME, (step ? "a" : "w"), comm);
     
     groupsize  = (4 + NBLOCKS*2) * sizeof(int);             // dimensions 
-    log ("  groupsize calculated = %llu\n", groupsize);
+    log ("  groupsize calculated = %" PRIu64 "\n", groupsize);
     groupsize += ldim1 * ldim2 * sizeof(int);     // 2D  blocks
     //groupsize +=1024;
-    log ("  groupsize calculated = %llu\n", groupsize);
+    log ("  groupsize calculated = %" PRIu64 "\n", groupsize);
 
     adios_group_size (fh, groupsize, &totalsize);
-    log ("  groupsize %llu, totalsize %llu\n", groupsize, totalsize);
+    log ("  groupsize %" PRIu64 ", totalsize %" PRIu64 "\n", groupsize, totalsize);
 
     v = VALUE(rank, step);
     log ("  Write data to %s\n", FILENAME);
@@ -238,7 +238,7 @@ int write_file (int step)
 #define CHECK_ARRAY(VARNAME,A,N,VALUE,STEP,i) \
     for (i=0;i<N;i++) \
         if (A[i] != VALUE) { \
-            printE ("%s[%d] step %d: wrote %d but read %d\n",VARNAME,i,STEP,VALUE,A[i]);\
+            printE ("%s[%ld] step %d: wrote %d but read %d\n",VARNAME,(unsigned long int)i,STEP,VALUE,A[i]);\
             err = 104; \
             /*goto endread;*/\
             break; \
@@ -249,7 +249,7 @@ int write_file (int step)
     for (i=0;i<DIM1;i++) {\
         for (j=0;j<DIM2;j++) {\
             if (A[k] != VALUE) { \
-                printE ("%s[%d,%d] step %d: wrote %d but read %d\n",VARNAME,i,j,STEP,VALUE,A[k]);\
+                printE ("%s[%ld,%ld] step %d: wrote %d but read %d\n",VARNAME,(unsigned long int)i,(unsigned long int)j,STEP,VALUE,A[k]);\
                 err = 104; \
                /*goto endread;*/\
                i=DIM1; /*break to end */\
@@ -310,7 +310,7 @@ int read_file ()
         set_offsets();
         start[0] = offs1;
         start[1] = offs2;
-        log ("    Step %d bounding box start={%llu,%llu}, count={%llu,%llu}\n", 
+        log ("    Step %d bounding box start={%" PRIu64 ",%" PRIu64 "}, count={%" PRIu64 ",%" PRIu64 "}\n", 
              step, start[0], start[1], count[0], count[1]);
         sel2 = adios_selection_boundingbox (2, start, count); 
 
diff --git a/tests/suite/programs/blocks.c b/tests/suite/programs/blocks.c
index 5000130..9042b09 100644
--- a/tests/suite/programs/blocks.c
+++ b/tests/suite/programs/blocks.c
@@ -180,10 +180,10 @@ void print_written_info()
     printf ("\n------- Information recorded on rank 0 (read will compare to this info)  --------\n");
     for (s = 0; s < nsteps; s++) {
         printf ("Step %d:\n", s);
-        printf ("  Global dim = %llu\n", gdims[s]);
+        printf ("  Global dim = %" PRIu64 "\n", gdims[s]);
         for (r = 0; r < size; r++) {
             for (b = 0; b < nblocks_per_step; b++) {
-                printf ("  rank %d: block %d: size=%llu, offset=%llu\n", r, b+1, 
+                printf ("  rank %d: block %d: size=%" PRIu64 ", offset=%" PRIu64 "\n", r, b+1, 
                         block_count  [s*nblocks_per_step*size + nblocks_per_step*r + b],
                         block_offset [s*nblocks_per_step*size + nblocks_per_step*r + b]
                        );
@@ -192,7 +192,7 @@ void print_written_info()
     }
 }
 
-int print_varinfo (ADIOS_FILE *f, int start_step) 
+void print_varinfo (ADIOS_FILE *f, int start_step) 
 {
     ADIOS_VARINFO * v;
     int i,j,k;
@@ -202,10 +202,10 @@ int print_varinfo (ADIOS_FILE *f, int start_step)
     adios_inq_var_stat (f, v, 0, 1);
 
     printf ("ndim = %d\n",  v->ndim);
-    printf ("dims[%llu]",  v->dims[0]);
+    printf ("dims[%" PRIu64 "]",  v->dims[0]);
     if (v->dims[0] != gdims[start_step]) 
     {
-        printf ("\tERROR: expected [%llu]", gdims[start_step]);
+        printf ("\tERROR: expected [%" PRIu64 "]", gdims[start_step]);
         nerrors++;
     }
     printf("\n");
@@ -215,7 +215,7 @@ int print_varinfo (ADIOS_FILE *f, int start_step)
     for (i = 0; i < v->nsteps; i++) {
         printf ("  nblocks[%d] = %d\n", i, v->nblocks[i]);
         for (j = 0; j < v->nblocks[i]; j++) {
-            printf("    block %2d: [%llu:%llu]", j,
+            printf("    block %2d: [%" PRIu64 ":%" PRIu64 "]", j,
                         v->blockinfo[k].start[0],
                         v->blockinfo[k].start[0] + v->blockinfo[k].count[0]-1);
             
@@ -223,7 +223,7 @@ int print_varinfo (ADIOS_FILE *f, int start_step)
                 v->blockinfo[k].count[0] != block_count  [(start_step+i)*nblocks_per_step*size + j] ) 
             {
                 nerrors++;
-                printf ("\tERROR: expected [%llu:%llu]",
+                printf ("\tERROR: expected [%" PRIu64 ":%" PRIu64 "]",
                     block_offset [(start_step+i)*nblocks_per_step*size + j],
                     block_offset [(start_step+i)*nblocks_per_step*size + j] + 
                       block_count  [(start_step+i)*nblocks_per_step*size + j] -1
@@ -315,7 +315,7 @@ int read_stepbystep ()
 
 
 
-int print_scalar (ADIOS_FILE *f, char * name) 
+void print_scalar (ADIOS_FILE *f, char * name) 
 {
     ADIOS_VARINFO * v;
     int i,j,k;
@@ -359,7 +359,7 @@ int print_scalar (ADIOS_FILE *f, char * name)
                     nerrors++;
                     printf ("\tERROR expected = [");
                     for (j=0; j < v->nsteps; j++) {
-                        printf ("%llu", block_offset [j*nblocks_per_step*size + i]);
+                        printf ("%" PRIu64, block_offset [j*nblocks_per_step*size + i]);
                         if (j < v->nsteps-1) printf(",");
                     }
                     printf("]");
@@ -391,7 +391,7 @@ int print_scalar (ADIOS_FILE *f, char * name)
                     if (data[0] != 
                         block_offset [j*nblocks_per_step*size + i]) 
                     {
-                        printf ("\tERROR expected = %llu", 
+                        printf ("\tERROR expected = %" PRIu64, 
                                 block_offset [j*nblocks_per_step*size + i]);
                         nerrors++;
                     }
@@ -419,7 +419,7 @@ int print_scalar (ADIOS_FILE *f, char * name)
                 if (*(int*)stat->blocks->mins[blockid] != 
                         block_offset [j*nblocks_per_step*size + i]) 
                 {
-                    printf ("\tERROR expected = %llu", 
+                    printf ("\tERROR expected = %" PRIu64, 
                             block_offset [j*nblocks_per_step*size + i]);
                     nerrors++;
                 }
@@ -499,7 +499,7 @@ int read_scalar_stepbystep ()
             if (value != 
                     block_count [f->current_step*nblocks_per_step*size]) 
             {
-                printf ("\tERROR expected = %llu", 
+                printf ("\tERROR expected = %" PRIu64, 
                         block_count [f->current_step*nblocks_per_step*size]);
                 nerrors++;
             }
diff --git a/tests/suite/programs/build_standard_dataset.c b/tests/suite/programs/build_standard_dataset.c
index 09271f2..42f9bb0 100644
--- a/tests/suite/programs/build_standard_dataset.c
+++ b/tests/suite/programs/build_standard_dataset.c
@@ -120,7 +120,7 @@ static void produce_xml(
 		fprintf(outfile, VAR_XML, xml_spec->varnames[i], adios_type_to_string_int(xml_spec->vartypes[i]), dimvar_list_buf1, transform_name);
 	}
 
-	fprintf(outfile, GLOBALBOUNDS_FOOTER_XML);
+	fprintf(outfile, "%s", GLOBALBOUNDS_FOOTER_XML);
 	fprintf(outfile, FOOTER_XML, xml_spec->group_name, xml_spec->write_transport_method, xml_spec->buffer_size_mb);
 }
 
diff --git a/tests/suite/programs/examples/CMakeLists.txt b/tests/suite/programs/examples/CMakeLists.txt
new file mode 100644
index 0000000..8cdb4d7
--- /dev/null
+++ b/tests/suite/programs/examples/CMakeLists.txt
@@ -0,0 +1,5 @@
+add_subdirectory(attributes)
+add_subdirectory(scalars)
+add_subdirectory(global_array)
+add_subdirectory(global_array_time)
+add_subdirectory(local_array)
diff --git a/tests/suite/programs/examples/Makefile.in b/tests/suite/programs/examples/Makefile.in
index 7d9f693..ddfe030 100644
--- a/tests/suite/programs/examples/Makefile.in
+++ b/tests/suite/programs/examples/Makefile.in
@@ -99,7 +99,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -107,8 +107,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -333,6 +333,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -409,6 +413,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/tests/suite/programs/examples/attributes/CMakeLists.txt b/tests/suite/programs/examples/attributes/CMakeLists.txt
index e0f4e45..24bda23 100644
--- a/tests/suite/programs/examples/attributes/CMakeLists.txt
+++ b/tests/suite/programs/examples/attributes/CMakeLists.txt
@@ -1,11 +1,12 @@
 include_directories(${PROJECT_SOURCE_DIR}/src/public)
 include_directories(${PROJECT_SOURCE_DIR}/src)
-include_directories(${PROJECT_SOURCE_DIR}/test/suite/programs/examples/attributes)
+include_directories(${PROJECT_SOURCE_DIR}/tests/suite/programs/examples/attributes)
 include_directories(${PROJECT_BINARY_DIR}/src)
 include_directories(${PROJECT_BINARY_DIR}/src/public)
-link_directories(${PROJECT_BINARY_DIR}/test/suite/programs/examples/attributes)
+include_directories(${PROJECT_BINARY_DIR}/tests/suite/programs/examples/attributes)
+link_directories(${PROJECT_BINARY_DIR}/tests/suite/programs/examples/attributes)
 
-add_executable(attributes_write_C attributes_write_C.c)
+add_executable(attributes_write_C attributes_write_C.c gwrite_temperature.ch)
 if(MPI_COMPILE_FLAGS)
   set_target_properties(attributes_write_C PROPERTIES COMPILE_FLAGS "${MPI_C_COMPILE_FLAGS}")
 endif()
@@ -30,5 +31,6 @@ endif()
 target_link_libraries(attributes_read_C adiosread ${ADIOSREADLIB_LDADD} ${MPI_C_LIBRARIES})
 #set_target_properties(attributes_read PROPERTIES COMPILE_FLAGS "-DADIOS_USE_READ_API_1")
 
-#install(FILES attributes.xml gwrite_temperature.ch gread_temperature.ch DESTINATION ${PROJECT_BINARY_DIR}/examples/C/attributes)
+file(COPY attributes_C.xml
+     DESTINATION ${PROJECT_BINARY_DIR}/tests/suite/programs/examples/attributes)
 
diff --git a/tests/suite/programs/examples/attributes/Makefile.in b/tests/suite/programs/examples/attributes/Makefile.in
index b775687..d7d46fe 100644
--- a/tests/suite/programs/examples/attributes/Makefile.in
+++ b/tests/suite/programs/examples/attributes/Makefile.in
@@ -101,7 +101,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -109,8 +109,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -336,6 +336,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -412,6 +416,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/tests/suite/programs/examples/global_array/CMakeLists.txt b/tests/suite/programs/examples/global_array/CMakeLists.txt
index 8776a9d..dfecd57 100644
--- a/tests/suite/programs/examples/global_array/CMakeLists.txt
+++ b/tests/suite/programs/examples/global_array/CMakeLists.txt
@@ -1,11 +1,12 @@
 include_directories(${PROJECT_SOURCE_DIR}/src/public)
 include_directories(${PROJECT_SOURCE_DIR}/src)
-include_directories(${PROJECT_SOURCE_DIR}/test/suite/programs/examples/global_array)
+include_directories(${PROJECT_SOURCE_DIR}/tests/suite/programs/examples/global_array)
 include_directories(${PROJECT_BINARY_DIR}/src)
 include_directories(${PROJECT_BINARY_DIR}/src/public)
-link_directories(${PROJECT_BINARY_DIR}/test/suite/programs/examples/global_array)
+include_directories(${PROJECT_BINARY_DIR}/tests/suite/programs/examples/global_array)
+link_directories(${PROJECT_BINARY_DIR}/tests/suite/programs/examples/global_array)
 
-add_executable(global_array_write_C global_array_write_C.c)
+add_executable(global_array_write_C global_array_write_C.c gwrite_temperature.ch)
 target_link_libraries(global_array_write_C adios ${ADIOSLIB_LDADD})
 add_custom_command(
 	OUTPUT gwrite_temperature.ch
@@ -46,19 +47,19 @@ foreach (PROG ${PROGS} )
 endforeach()
 
 if(BUILD_FORTRAN)
-    add_executable(global_array_write_F global_array_write_F.F90)
+    add_executable(global_array_write_F global_array_write_F.F90 gwrite_temperature.fh)
     target_link_libraries(global_array_write_F adiosf ${ADIOSLIB_LDADD})
     add_custom_command(
 	OUTPUT gwrite_temperature.fh
-	COMMAND ${PROJECT_SOURCE_DIR}/utils/gpp/gpp.py ${PROJECT_SOURCE_DIR}/tests/suite/programs/examples/global_array/global_array_F.xml
+	COMMAND ${PROJECT_BINARY_DIR}/utils/gpp/gpp.py ${PROJECT_SOURCE_DIR}/tests/suite/programs/examples/global_array/global_array_F.xml
 	DEPENDS global_array_F.xml
 	)
     add_executable(global_array_write_noxml_F global_array_write_noxml_F.F90)
     target_link_libraries(global_array_write_noxml_F adiosf ${ADIOSLIB_LDADD})
     add_executable(global_array_write_byid_noxml_F global_array_write_byid_noxml_F.F90)
     target_link_libraries(global_array_write_byid_noxml_F adiosf ${ADIOSLIB_LDADD})
-endif
+endif()
 
-
-#install(FILES adios_global.xml gread_temperature.ch gwrite_temperature.ch job.pbs DESTINATION ${PROJECT_BINARY_DIR}/examples/C/global-array)
+file(COPY global_array_C.xml  global_array_F.xml 
+     DESTINATION ${PROJECT_BINARY_DIR}/tests/suite/programs/examples/global_array)
 
diff --git a/tests/suite/programs/examples/global_array/Makefile.in b/tests/suite/programs/examples/global_array/Makefile.in
index 72729db..b3bd6e8 100644
--- a/tests/suite/programs/examples/global_array/Makefile.in
+++ b/tests/suite/programs/examples/global_array/Makefile.in
@@ -107,7 +107,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -115,8 +115,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -464,6 +464,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -540,6 +544,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/tests/suite/programs/examples/global_array/global_array_read_C.c b/tests/suite/programs/examples/global_array/global_array_read_C.c
index 321c831..1ce232b 100644
--- a/tests/suite/programs/examples/global_array/global_array_read_C.c
+++ b/tests/suite/programs/examples/global_array/global_array_read_C.c
@@ -73,7 +73,7 @@ int main (int argc, char ** argv)
     adios_perform_reads (f, 1);
 
     for (i = 0; i < slice_size; i++) {
-        log_test ("rank %d: [%lld,%d:%lld]", rank, start[0]+i, 0, slice_size);
+        log_test ("rank %d: [%" PRIu64 ",%d:%" PRIu64 "]", rank, start[0]+i, 0, slice_size);
         for (j = 0; j < v->dims[1]; j++)
             log_test (" %6.6g", * ((double *)data + i * v->dims[1] + j));
         log_test ("\n");
diff --git a/tests/suite/programs/examples/global_array/global_array_read_byid_noxml_C.c b/tests/suite/programs/examples/global_array/global_array_read_byid_noxml_C.c
index f68fa7a..656ccfb 100644
--- a/tests/suite/programs/examples/global_array/global_array_read_byid_noxml_C.c
+++ b/tests/suite/programs/examples/global_array/global_array_read_byid_noxml_C.c
@@ -78,7 +78,7 @@ int main (int argc, char ** argv)
     log_test (" ======== Rank %d ========== \n", rank);
     npl = 10;
     for (i = 0; i < slice_size; i+=npl) {
-        log_test ("[%4.4lld]  ", rank*slice_size+i);
+        log_test ("[%4.4" PRIu64 "]  ", rank*slice_size+i);
         for (j= 0; j < npl; j++) {
             log_test (" %6.6g", * ((double *)data + i + j));
         }
diff --git a/tests/suite/programs/examples/global_array/global_array_read_noxml_C.c b/tests/suite/programs/examples/global_array/global_array_read_noxml_C.c
index 50afe5d..05002ff 100644
--- a/tests/suite/programs/examples/global_array/global_array_read_noxml_C.c
+++ b/tests/suite/programs/examples/global_array/global_array_read_noxml_C.c
@@ -78,7 +78,7 @@ int main (int argc, char ** argv)
     log_test (" ======== Rank %d ========== \n", rank);
     npl = 10;
     for (i = 0; i < slice_size; i+=npl) {
-        log_test ("[%4.4lld]  ", rank*slice_size+i);
+        log_test ("[%4.4" PRIu64 "]  ", rank*slice_size+i);
         for (j= 0; j < npl; j++) {
             log_test (" %6.6g", * ((double *)data + i + j));
         }
diff --git a/tests/suite/programs/examples/global_array_time/CMakeLists.txt b/tests/suite/programs/examples/global_array_time/CMakeLists.txt
index 531f511..3e03128 100644
--- a/tests/suite/programs/examples/global_array_time/CMakeLists.txt
+++ b/tests/suite/programs/examples/global_array_time/CMakeLists.txt
@@ -1,19 +1,23 @@
 include_directories(${PROJECT_SOURCE_DIR}/src/public)
 include_directories(${PROJECT_SOURCE_DIR}/src)
-include_directories(${PROJECT_SOURCE_DIR}/test/suite/programs/examples/global_array_time)
+include_directories(${PROJECT_SOURCE_DIR}/tests/suite/programs/examples/global_array_time)
 include_directories(${PROJECT_BINARY_DIR}/src)
 include_directories(${PROJECT_BINARY_DIR}/src/public)
-link_directories(${PROJECT_BINARY_DIR}/test/suite/programs/examples/global_array_time)
+include_directories(${PROJECT_BINARY_DIR}/tests/suite/programs/examples/global_array_time)
+link_directories(${PROJECT_BINARY_DIR}/tests/suite/programs/examples/global_array_time)
 
-add_executable(global_array_time_write_C global_array_time_write_C.c)
+add_executable(global_array_time_write_C global_array_time_write_C.c gwrite_restart.ch)
 target_link_libraries(global_array_time_write_C adios ${ADIOSLIB_LDADD})
 add_custom_command(
         OUTPUT gwrite_restart.ch
         COMMAND ${PROJECT_BINARY_DIR}/utils/gpp/gpp.py
         ${PROJECT_SOURCE_DIR}/tests/suite/programs/examples/global_array_time/global_array_time_C.xml
-        DEPENDS global_array_C.xml
+        DEPENDS global_array_time_C.xml
         )
 
+add_executable(global_array_time_write_multifile_C global_array_time_write_multifile_C.c gwrite_restart.ch)
+target_link_libraries(global_array_time_write_multifile_C adios ${ADIOSLIB_LDADD})
+
 add_executable(global_array_time_read_as_file_C global_array_time_read_as_file_C.c)
 target_link_libraries(global_array_time_read_as_file_C adiosread ${ADIOSREADLIB_LDADD})
 #set_target_properties(global_array_time_read_as_file_C PROPERTIES COMPILE_FLAGS "-DADIOS_USE_READ_API_1")
@@ -34,14 +38,16 @@ endforeach()
 
 
 if(BUILD_FORTRAN)
-    add_executable(global_array_time_write_F global_array_time_write_F.F90)
+    add_executable(global_array_time_write_F global_array_time_write_F.F90 gwrite_restart.fh)
     target_link_libraries(global_array_time_write_F adiosf ${ADIOSLIB_LDADD})
     add_custom_command(
         OUTPUT gwrite_restart.fh
         COMMAND ${PROJECT_BINARY_DIR}/utils/gpp/gpp.py
         ${PROJECT_SOURCE_DIR}/tests/suite/programs/examples/global_array_time/global_array_time_F.xml
-        DEPENDS global_array_F.xml
+        DEPENDS global_array_time_F.xml
         )
-endif
+endif()
+
+file(COPY global_array_time_aggr_C.xml  global_array_time_C.xml  global_array_time_F.xml
+     DESTINATION ${PROJECT_BINARY_DIR}/tests/suite/programs/examples/global_array_time)
 
-#install(FILES global_array_time_write_C.xml gread_restart.ch gwrite_restart.ch job.pbs DESTINATION ${PROJECT_BINARY_DIR}/examples/C/global-array-time)
diff --git a/tests/suite/programs/examples/global_array_time/Makefile.am b/tests/suite/programs/examples/global_array_time/Makefile.am
index cafa035..4310ed2 100644
--- a/tests/suite/programs/examples/global_array_time/Makefile.am
+++ b/tests/suite/programs/examples/global_array_time/Makefile.am
@@ -6,7 +6,8 @@ AUTOMAKE_OPTIONS = no-dependencies
 all-local:
 	test "$(srcdir)" = "$(builddir)" || cp -p $(srcdir)/*.xml $(builddir)
 
-check_PROGRAMS = global_array_time_write_C global_array_time_read_as_file_C global_array_time_read_as_stream_C
+check_PROGRAMS = global_array_time_write_C global_array_time_read_as_file_C global_array_time_read_as_stream_C \
+                 global_array_time_write_multifile_C
 
 global_array_time_write_C_SOURCES = global_array_time_write_C.c
 global_array_time_write_C_LDADD = $(top_builddir)/src/libadios.a
@@ -16,6 +17,12 @@ global_array_time_write_C.o: gwrite_restart.ch
 gwrite_restart.ch: global_array_time_C.xml
 	$(top_builddir)/utils/gpp/gpp.py $(srcdir)/global_array_time_C.xml
 
+global_array_time_write_multifile_C_SOURCES = global_array_time_write_multifile_C.c
+global_array_time_write_multifile_C_LDADD = $(top_builddir)/src/libadios.a
+global_array_time_write_multifile_C_LDFLAGS = $(ADIOSLIB_LDFLAGS) $(ADIOSLIB_EXTRA_LDFLAGS)
+global_array_time_write_multifile_C_LDADD += $(ADIOSLIB_LDADD)
+global_array_time_write_multifile_C.o: gwrite_restart.ch
+
 global_array_time_read_as_file_C_SOURCES = global_array_time_read_as_file_C.c
 global_array_time_read_as_file_C_LDADD = $(top_builddir)/src/libadiosread.a
 global_array_time_read_as_file_C_LDFLAGS = $(ADIOSREADLIB_LDFLAGS)
diff --git a/tests/suite/programs/examples/global_array_time/Makefile.in b/tests/suite/programs/examples/global_array_time/Makefile.in
index eeec105..f1a0618 100644
--- a/tests/suite/programs/examples/global_array_time/Makefile.in
+++ b/tests/suite/programs/examples/global_array_time/Makefile.in
@@ -79,7 +79,8 @@ build_triplet = @build@
 host_triplet = @host@
 check_PROGRAMS = global_array_time_write_C$(EXEEXT) \
 	global_array_time_read_as_file_C$(EXEEXT) \
-	global_array_time_read_as_stream_C$(EXEEXT) $(am__EXEEXT_1)
+	global_array_time_read_as_stream_C$(EXEEXT) \
+	global_array_time_write_multifile_C$(EXEEXT) $(am__EXEEXT_1)
 @BUILD_FORTRAN_TRUE at am__append_1 = global_array_time_write_F
 subdir = tests/suite/programs/examples/global_array_time
 DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
@@ -103,7 +104,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -111,8 +112,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -175,6 +176,17 @@ global_array_time_write_F_LINK = $(LIBTOOL) $(AM_V_lt) --tag=FC \
 	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(FCLD) \
 	$(AM_FCFLAGS) $(FCFLAGS) $(global_array_time_write_F_LDFLAGS) \
 	$(LDFLAGS) -o $@
+am_global_array_time_write_multifile_C_OBJECTS =  \
+	global_array_time_write_multifile_C.$(OBJEXT)
+global_array_time_write_multifile_C_OBJECTS =  \
+	$(am_global_array_time_write_multifile_C_OBJECTS)
+global_array_time_write_multifile_C_DEPENDENCIES =  \
+	$(top_builddir)/src/libadios.a $(am__DEPENDENCIES_1)
+global_array_time_write_multifile_C_LINK = $(LIBTOOL) $(AM_V_lt) \
+	--tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
+	$(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(global_array_time_write_multifile_C_LDFLAGS) $(LDFLAGS) -o \
+	$@
 AM_V_P = $(am__v_P_ at AM_V@)
 am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
 am__v_P_0 = false
@@ -226,11 +238,13 @@ am__v_CCLD_1 =
 SOURCES = $(global_array_time_read_as_file_C_SOURCES) \
 	$(global_array_time_read_as_stream_C_SOURCES) \
 	$(global_array_time_write_C_SOURCES) \
-	$(global_array_time_write_F_SOURCES)
+	$(global_array_time_write_F_SOURCES) \
+	$(global_array_time_write_multifile_C_SOURCES)
 DIST_SOURCES = $(global_array_time_read_as_file_C_SOURCES) \
 	$(global_array_time_read_as_stream_C_SOURCES) \
 	$(global_array_time_write_C_SOURCES) \
-	$(am__global_array_time_write_F_SOURCES_DIST)
+	$(am__global_array_time_write_F_SOURCES_DIST) \
+	$(global_array_time_write_multifile_C_SOURCES)
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
     n|no|NO) false;; \
@@ -386,6 +400,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -462,6 +480,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
@@ -538,6 +559,10 @@ global_array_time_write_C_SOURCES = global_array_time_write_C.c
 global_array_time_write_C_LDADD = $(top_builddir)/src/libadios.a \
 	$(ADIOSLIB_LDADD)
 global_array_time_write_C_LDFLAGS = $(ADIOSLIB_LDFLAGS) $(ADIOSLIB_EXTRA_LDFLAGS)
+global_array_time_write_multifile_C_SOURCES = global_array_time_write_multifile_C.c
+global_array_time_write_multifile_C_LDADD =  \
+	$(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+global_array_time_write_multifile_C_LDFLAGS = $(ADIOSLIB_LDFLAGS) $(ADIOSLIB_EXTRA_LDFLAGS)
 global_array_time_read_as_file_C_SOURCES = global_array_time_read_as_file_C.c
 global_array_time_read_as_file_C_LDADD =  \
 	$(top_builddir)/src/libadiosread.a $(ADIOSREADLIB_LDADD)
@@ -617,6 +642,10 @@ global_array_time_write_F$(EXEEXT): $(global_array_time_write_F_OBJECTS) $(globa
 	@rm -f global_array_time_write_F$(EXEEXT)
 	$(AM_V_FCLD)$(global_array_time_write_F_LINK) $(global_array_time_write_F_OBJECTS) $(global_array_time_write_F_LDADD) $(LIBS)
 
+global_array_time_write_multifile_C$(EXEEXT): $(global_array_time_write_multifile_C_OBJECTS) $(global_array_time_write_multifile_C_DEPENDENCIES) $(EXTRA_global_array_time_write_multifile_C_DEPENDENCIES) 
+	@rm -f global_array_time_write_multifile_C$(EXEEXT)
+	$(AM_V_CCLD)$(global_array_time_write_multifile_C_LINK) $(global_array_time_write_multifile_C_OBJECTS) $(global_array_time_write_multifile_C_LDADD) $(LIBS)
+
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
 
@@ -856,6 +885,7 @@ all-local:
 global_array_time_write_C.o: gwrite_restart.ch
 gwrite_restart.ch: global_array_time_C.xml
 	$(top_builddir)/utils/gpp/gpp.py $(srcdir)/global_array_time_C.xml
+global_array_time_write_multifile_C.o: gwrite_restart.ch
 @BUILD_FORTRAN_TRUE at global_array_time_write_F.o: gwrite_restart.fh
 @BUILD_FORTRAN_TRUE at gwrite_restart.fh: global_array_time_F.xml
 @BUILD_FORTRAN_TRUE@	$(top_builddir)/utils/gpp/gpp.py $(srcdir)/global_array_time_F.xml
diff --git a/tests/suite/programs/examples/global_array_time/global_array_time_aggr_C.xml b/tests/suite/programs/examples/global_array_time/global_array_time_aggr_C.xml
index ff4e6a8..ef84ed8 100644
--- a/tests/suite/programs/examples/global_array_time/global_array_time_aggr_C.xml
+++ b/tests/suite/programs/examples/global_array_time/global_array_time_aggr_C.xml
@@ -20,7 +20,7 @@
   </adios-group>
 
   <method group="restart" method="MPI"/>
-  <time-aggregation group="restart" buffer-size=3000/>
+  <time-aggregation group="restart" buffer-size="3000"/>
 
   <buffer max-size-MB="5"/>
 
diff --git a/tests/suite/programs/examples/global_array_time/global_array_time_read_as_file_C.c b/tests/suite/programs/examples/global_array_time/global_array_time_read_as_file_C.c
index d86b1e6..6ece8c6 100644
--- a/tests/suite/programs/examples/global_array_time/global_array_time_read_as_file_C.c
+++ b/tests/suite/programs/examples/global_array_time/global_array_time_read_as_file_C.c
@@ -66,7 +66,7 @@ int main (int argc, char ** argv)
     adios_perform_reads (f, 1);
 
     if (rank == 0) 
-        log_test ("Array size of temperature [0:%lld,0:%lld]\n", v->dims[0], v->dims[1]);   
+        log_test ("Array size of temperature [0:%" PRIu64 ",0:%" PRIu64 "]\n", v->dims[0], v->dims[1]);   
 
     if (rank > 0) {
         MPI_Recv (&token, 1, MPI_INT, rank-1, 0, comm, &status);
@@ -75,7 +75,7 @@ int main (int argc, char ** argv)
     log_test("------------------------------------------------\n");
     log_test("rank=%d: \n", rank);
     for (i = 0; i < 2; i++) {
-        log_test ("step %lld = [\n", step+i);   
+        log_test ("step %" PRIu64 " = [\n", step+i);   
         for (j = 0; j < v->dims[0]; j++) {
             log_test (" [");
             for (k = 0; k < v->dims[1]; k++) {
diff --git a/tests/suite/programs/examples/global_array_time/global_array_time_read_as_stream_C.c b/tests/suite/programs/examples/global_array_time/global_array_time_read_as_stream_C.c
index 39b9c4a..59188d7 100644
--- a/tests/suite/programs/examples/global_array_time/global_array_time_read_as_stream_C.c
+++ b/tests/suite/programs/examples/global_array_time/global_array_time_read_as_stream_C.c
@@ -65,7 +65,7 @@ int main (int argc, char ** argv)
 
         log_test ("rank %d: ndim = %d\n", rank, v->ndim);
         //log_test ("nsteps = %d\n",  v->nsteps);
-        log_test ("rank %d: dims[%llu][%llu]\n", rank, v->dims[0], v->dims[1]);
+        log_test ("rank %d: dims[%" PRIu64 "][%" PRIu64 "]\n", rank, v->dims[0], v->dims[1]);
 
         uint64_t slice_size = v->dims[0]/size;
         if (rank == size-1)
@@ -86,7 +86,7 @@ int main (int argc, char ** argv)
             adios_schedule_read (f, sel, "temperature", 0, 1, data);
             adios_perform_reads (f, 1);
 
-            log_test("rank=%d: step %d: [0:%lld,0:%lld] = [", rank, f->current_step, v->dims[0], v->dims[1]);
+            log_test("rank=%d: step %d: [0:%" PRIu64 ",0:%" PRIu64 "] = [", rank, f->current_step, v->dims[0], v->dims[1]);
             for (i = 0; i < slice_size; i++) {
                 log_test (" [");
                 for (j = 0; j < v->dims[1]; j++) {
diff --git a/tests/suite/programs/examples/global_array_time/global_array_time_write_multifile_C.c b/tests/suite/programs/examples/global_array_time/global_array_time_write_multifile_C.c
new file mode 100644
index 0000000..29e664c
--- /dev/null
+++ b/tests/suite/programs/examples/global_array_time/global_array_time_write_multifile_C.c
@@ -0,0 +1,64 @@
+/* 
+ * ADIOS is freely available under the terms of the BSD license described
+ * in the COPYING file in the top level directory of this source distribution.
+ *
+ * Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include "mpi.h"
+#include "adios.h"
+int main (int argc, char ** argv) 
+{
+    char        filename [256];
+    int         rank, size, i, it, fidx;
+    int         NX = 10;
+        // NY = 1 for testing purpose
+    int         NY = 1; 
+    double      t[NX];
+    double      p[NY];
+    char        mode[2] = "w";
+
+    /* ADIOS variables declarations for matching gwrite_temperature.ch */
+    uint64_t    adios_groupsize, adios_totalsize;
+    int64_t     adios_handle;
+    MPI_Comm    comm=MPI_COMM_WORLD;
+ 
+    MPI_Init (&argc, &argv);
+    MPI_Comm_rank (MPI_COMM_WORLD, &rank);
+    MPI_Comm_size (comm, &size);
+
+    adios_init ("global_array_time_aggr_C.xml", comm);
+    fidx = 0;
+    for (it = 0; it < 25; it++) {
+
+        for (i = 0; i < NX; i++)
+            t[i] = (it+1)*100.0 + rank*NX + i;
+
+        for (i = 0; i < NY; i++)
+            p[i] = (it+1)*1000.0 + rank*NY + i;
+
+        if (it % 10 == 0) {
+            fidx++; // increases at every 10 steps
+            mode[0] = 'w';
+            //printf ("Reached it=%d, increase file index to %d\n", it, fidx);
+        } else {
+            mode[0] = 'a';
+        }
+        sprintf (filename, "global_array_time_C_%d.bp", fidx);
+        adios_open (&adios_handle, "restart", filename, mode, comm);
+
+#       include "gwrite_restart.ch"
+        adios_close (adios_handle);
+        MPI_Barrier (comm);
+        //if (rank==0) printf("Timestep %d written\n", it+1);
+    }
+    MPI_Barrier (comm);
+    //if (rank==0) printf("Finalize adios\n");
+    adios_finalize (rank);
+
+    //if (rank==0) printf("Finalize MPI\n");
+    MPI_Finalize ();
+    return 0;
+}
diff --git a/tests/suite/programs/examples/local_array/CMakeLists.txt b/tests/suite/programs/examples/local_array/CMakeLists.txt
index f6b2da6..1afef5f 100644
--- a/tests/suite/programs/examples/local_array/CMakeLists.txt
+++ b/tests/suite/programs/examples/local_array/CMakeLists.txt
@@ -1,11 +1,12 @@
 include_directories(${PROJECT_SOURCE_DIR}/src/public)
 include_directories(${PROJECT_SOURCE_DIR}/src)
-include_directories(${PROJECT_SOURCE_DIR}/test/suite/programs/examples/local_array)
+include_directories(${PROJECT_SOURCE_DIR}/tests/suite/programs/examples/local_array)
 include_directories(${PROJECT_BINARY_DIR}/src)
 include_directories(${PROJECT_BINARY_DIR}/src/public)
+include_directories(${PROJECT_BINARY_DIR}/tests/suite/programs/examples/local_array)
 link_directories(${PROJECT_BINARY_DIR}/test/suite/programs/examples/local_array)
 
-add_executable(local_array_write_C local_array_write_C.c)
+add_executable(local_array_write_C local_array_write_C.c gwrite_arrays.ch)
 if(MPI_COMPILE_FLAGS)
   set_target_properties(local_array_write_C PROPERTIES COMPILE_FLAGS "${MPI_C_COMPILE_FLAGS}")
 endif()
@@ -29,5 +30,6 @@ if(MPI_LINK_FLAGS)
 endif()
 target_link_libraries(local_array_read_C adiosread ${ADIOSREADLIB_LDADD} ${MPI_C_LIBRARIES})
 
-#install(FILES arrays.xml gwrite_arrays.ch gread_arrays.ch job.pbs  DESTINATION ${PROJECT_BINARY_DIR}/examples/C/arrays)
+file(COPY local_array_C.xml
+     DESTINATION ${PROJECT_BINARY_DIR}/tests/suite/programs/examples/local_array)
 
diff --git a/tests/suite/programs/examples/local_array/Makefile.in b/tests/suite/programs/examples/local_array/Makefile.in
index 71a4362..f7ec517 100644
--- a/tests/suite/programs/examples/local_array/Makefile.in
+++ b/tests/suite/programs/examples/local_array/Makefile.in
@@ -101,7 +101,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -109,8 +109,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -336,6 +336,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -412,6 +416,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/tests/suite/programs/examples/scalars/CMakeLists.txt b/tests/suite/programs/examples/scalars/CMakeLists.txt
index a9305ea..155af05 100644
--- a/tests/suite/programs/examples/scalars/CMakeLists.txt
+++ b/tests/suite/programs/examples/scalars/CMakeLists.txt
@@ -1,9 +1,10 @@
 include_directories(${PROJECT_SOURCE_DIR}/src/public)
 include_directories(${PROJECT_SOURCE_DIR}/src)
-include_directories(${PROJECT_SOURCE_DIR}/test/suite/programs/examples/scalars)
+include_directories(${PROJECT_SOURCE_DIR}/tests/suite/programs/examples/scalars)
 include_directories(${PROJECT_BINARY_DIR}/src)
 include_directories(${PROJECT_BINARY_DIR}/src/public)
-link_directories(${PROJECT_BINARY_DIR}/test/suite/programs/examples/scalars)
+include_directories(${PROJECT_BINARY_DIR}/tests/suite/programs/examples/scalars)
+link_directories(${PROJECT_BINARY_DIR}/tests/suite/programs/examples/scalars)
 
 add_executable(scalars_write_C scalars_write_C.c gwrite_scalars.ch)
 if(MPI_COMPILE_FLAGS)
@@ -36,10 +37,9 @@ if(BUILD_FORTRAN)
 	COMMAND ${PROJECT_BINARY_DIR}/utils/gpp/gpp.py ${PROJECT_SOURCE_DIR}/tests/suite/programs/examples/scalars/scalars_F.xml
 	DEPENDS scalars_F.xml
 	)
-
-
     add_executable(scalars_read_F scalars_read_F.F90)
     target_link_libraries(scalars_read_F adiosreadf ${ADIOSREADLIB_LDADD})
-endif
+endif()
 
-#install(FILES scalars.xml gwrite_scalars.ch gread_scalars.ch job.pbs DESTINATION ${PROJECT_BINARY_DIR}/examples/C/scalars)
+file(COPY scalars_C.xml  scalars_F.xml  
+     DESTINATION ${PROJECT_BINARY_DIR}/tests/suite/programs/examples/scalars)
diff --git a/tests/suite/programs/examples/scalars/Makefile.in b/tests/suite/programs/examples/scalars/Makefile.in
index d11ba96..3c81e86 100644
--- a/tests/suite/programs/examples/scalars/Makefile.in
+++ b/tests/suite/programs/examples/scalars/Makefile.in
@@ -102,7 +102,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -110,8 +110,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -378,6 +378,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -454,6 +458,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/tests/suite/programs/examples/scalars/scalars_read_C.c b/tests/suite/programs/examples/scalars/scalars_read_C.c
index 3ae4764..33a252e 100644
--- a/tests/suite/programs/examples/scalars/scalars_read_C.c
+++ b/tests/suite/programs/examples/scalars/scalars_read_C.c
@@ -87,12 +87,12 @@ int main (int argc, char ** argv)
         fprintf (outf, "byte        v1  = %d\n", v1);
         fprintf (outf, "short       v2  = %d\n", v2);
         fprintf (outf, "integer     v3  = %d\n", v3);
-        fprintf (outf, "long        v4  = %lld\n", v4);
+        fprintf (outf, "long        v4  = %" PRId64 "\n", v4);
 
         fprintf (outf, "uns.byte    v5  = %u\n", v5);
         fprintf (outf, "uns.short   v6  = %u\n", v6);
         fprintf (outf, "uns.int     v7  = %u\n", v7);
-        fprintf (outf, "uns.long    v8  = %llu\n", v8);
+        fprintf (outf, "uns.long    v8  = %" PRIu64 "\n", v8);
 
         fprintf (outf, "float       v9  = %g\n", v9);
         fprintf (outf, "double      v10 = %g\n", v10);
diff --git a/tests/suite/programs/many_vars.c b/tests/suite/programs/many_vars.c
index f8b49c4..d3c949f 100644
--- a/tests/suite/programs/many_vars.c
+++ b/tests/suite/programs/many_vars.c
@@ -244,7 +244,7 @@ int write_file (int step)
     //groupsize +=1024;
 
     adios_group_size (fh, groupsize, &totalsize);
-    log ("  groupsize %lld, totalsize %lld\n", groupsize, totalsize);
+    log ("  groupsize %" PRIu64 ", totalsize %" PRIu64 "\n", groupsize, totalsize);
 
     adios_write (fh, "gdim1", &gdim1);
     adios_write (fh, "gdim2", &gdim2);
diff --git a/tests/suite/programs/reuse_dim.c b/tests/suite/programs/reuse_dim.c
index f3b2648..6459027 100755
--- a/tests/suite/programs/reuse_dim.c
+++ b/tests/suite/programs/reuse_dim.c
@@ -64,6 +64,7 @@ void fini_vars()
     free (r2);
 }
 
+int declare_group ();
 int write_file (char *fname);
 int read_file (char *fname);
 
diff --git a/tests/suite/programs/selections.c b/tests/suite/programs/selections.c
index db8ec35..de1f3ac 100644
--- a/tests/suite/programs/selections.c
+++ b/tests/suite/programs/selections.c
@@ -15,6 +15,7 @@
  */
 #include <stdio.h>
 #include <stdlib.h>
+#include <unistd.h>
 #include <stdint.h>
 #include <string.h>
 #include <errno.h>
diff --git a/tests/suite/programs/set_path.c b/tests/suite/programs/set_path.c
index c2a7c5f..9613464 100644
--- a/tests/suite/programs/set_path.c
+++ b/tests/suite/programs/set_path.c
@@ -136,8 +136,7 @@ int write_file ()
 {
     int64_t       fh;
     uint64_t      groupsize=0, totalsize;
-    char          *newpath, *oldpath;
-    char          varpath[128];
+    char          *newpath;
 
     log ("Write to %s\n", FILENAME);
     adios_open (&fh, "abc", FILENAME, "w", comm);
@@ -148,7 +147,7 @@ int write_file ()
     groupsize += 1000; // add for extra metadata of triplicated variables, which is not expected from the xml itself
 
     adios_group_size (fh, groupsize, &totalsize);
-    log ("Group size: data only = %lld, with metadata = %lld\n", groupsize, totalsize);
+    log ("Group size: data only = %" PRIu64 ", with metadata = %" PRIu64 "\n", groupsize, totalsize);
 
     adios_write (fh, "gdim1", &gdim1);
     adios_write (fh, "ldim1", &ldim1);
@@ -157,25 +156,25 @@ int write_file ()
     newpath = getpath(0);
     log ("  Change path of all variables to %s\n", newpath);
     adios_set_path (fh, newpath);
-    log ("    Write s0\n", varpath);
+    log ("    Write s0\n");
     adios_write (fh, "s0", &s0);
-    log ("    Write a1\n", varpath);
+    log ("    Write a1\n");
     adios_write (fh, "a1", a0);
 
     newpath = getpath(1);
     log ("  Change path of all variables to %s\n", newpath);
     adios_set_path (fh, newpath);
-    log ("    Write s0\n", varpath);
+    log ("    Write s0\n");
     adios_write (fh, "s0", &s1);
-    log ("    Write a1\n", varpath);
+    log ("    Write a1\n");
     adios_write (fh, "a1", a1);
 
     newpath = getpath(2);
     log ("  Change path of all variables to %s\n", newpath);
     adios_set_path (fh, newpath);
-    log ("    Write s0\n", varpath);
+    log ("    Write s0\n");
     adios_write (fh, "s0", &s2);
-    log ("    Write a1\n", varpath);
+    log ("    Write a1\n");
     adios_write (fh, "a1", a2);
 
     adios_close (fh);
diff --git a/tests/suite/programs/set_path_var.c b/tests/suite/programs/set_path_var.c
index 5b6968c..61e9aa7 100644
--- a/tests/suite/programs/set_path_var.c
+++ b/tests/suite/programs/set_path_var.c
@@ -148,7 +148,7 @@ int write_file ()
     groupsize += 1000; // add for extra metadata of triplicated variables, which is not expected from the xml itself
 
     adios_group_size (fh, groupsize, &totalsize);
-    log ("Group size: data only = %lld, with metadata = %lld\n", groupsize, totalsize);
+    log ("Group size: data only = %" PRIu64 ", with metadata = %" PRIu64 "\n", groupsize, totalsize);
 
     adios_write (fh, "gdim1", &gdim1);
     adios_write (fh, "ldim1", &ldim1);
diff --git a/tests/suite/programs/steps_read_file.c b/tests/suite/programs/steps_read_file.c
index ab7e773..57aa366 100644
--- a/tests/suite/programs/steps_read_file.c
+++ b/tests/suite/programs/steps_read_file.c
@@ -153,7 +153,7 @@ int process_metadata()
                 rank, "record", adios_errmsg());
         return 1;
     }
-    printf ("rank %d: record dims = %llu * %llu \n", rank, varinfo->dims[0], varinfo->dims[1]); 
+    printf ("rank %d: record dims = %" PRIu64 " * %" PRIu64 " \n", rank, varinfo->dims[0], varinfo->dims[1]); 
     printf ("rank %d: total nblocks = %d in %d steps\n", 
              rank, varinfo->sum_nblocks, varinfo->nsteps); 
 
diff --git a/tests/suite/programs/steps_read_stream.c b/tests/suite/programs/steps_read_stream.c
index 7d78f3b..df51cc5 100644
--- a/tests/suite/programs/steps_read_stream.c
+++ b/tests/suite/programs/steps_read_stream.c
@@ -188,7 +188,7 @@ int process_metadata()
         return 1;
     }
     nblocks = v->nblocks[0];
-    printf ("rank %d: record dims = %llu * %llu \n", rank, v->dims[0], v->dims[1]); 
+    printf ("rank %d: record dims = %" PRIu64 " * %" PRIu64 " \n", rank, v->dims[0], v->dims[1]); 
     adios_free_varinfo (v);
     printf ("rank %d: nblocks = %d\n", rank, nblocks); 
 
diff --git a/tests/suite/programs/test_singlevalue.c b/tests/suite/programs/test_singlevalue.c
new file mode 100644
index 0000000..4eba360
--- /dev/null
+++ b/tests/suite/programs/test_singlevalue.c
@@ -0,0 +1,350 @@
+/* 
+ * ADIOS is freely available under the terms of the BSD license described
+ * in the COPYING file in the top level directory of this source distribution.
+ *
+ * Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.
+ */
+
+/* ADIOS C test: 
+ *  Write the first variable only once: one process and one step only. 
+ *  Then write some other variables over multiple steps.
+ *  Then read them all and check if they are correct. 
+ *
+ *  This situation broke reading step-by-step because bp_utils.c:get_time() 
+ *  uses the the first variable to find the next timestep for all.
+ *
+ * How to run: mpirun -np <N> test_singlevalue
+ * Output: test_singlevalue.bp
+ *
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include "adios.h"
+#include "adios_read.h"
+
+#ifdef DMALLOC
+#include "dmalloc.h"
+#endif
+
+#define log(...) fprintf (stderr, "[rank=%3.3d, line %d]: ", rank, __LINE__); fprintf (stderr, __VA_ARGS__); fflush(stderr);
+#define printE(...) fprintf (stderr, "[rank=%3.3d, line %d]: ERROR: ", rank, __LINE__); fprintf (stderr, __VA_ARGS__); fflush(stderr);
+
+static const int NSTEPS = 3;
+static const char FILENAME[] = "test_singlevalue.bp";
+#define VALUE(rank, step) (rank * 100 + step)
+#define VALUE0(step) (step)
+
+/* Variables to write */
+int a0;
+int  *a1;
+
+
+/* Variables to read */
+int r0, rt0;
+int  *r1, *rt1;
+
+static const int ldim1 = 7;
+int gdim1;
+int offs1;
+
+MPI_Comm    comm = MPI_COMM_WORLD;
+int rank;
+int size;
+
+void alloc_vars()
+{
+    int n;
+
+    gdim1 = size*ldim1;
+    offs1 = rank*ldim1;
+    n = ldim1;
+    a1  = (int*) malloc (n * sizeof(int));
+    r1  = (int*) malloc (n * sizeof(int));
+    rt1 = (int*) malloc (n * sizeof(int));
+}
+
+void set_vars(int step)
+{
+    int n, i;
+    int v = VALUE(rank, step);
+
+    a0 = v;
+
+    n = ldim1;
+    for (i=0; i<n; i++) a1[i] = v;
+}
+
+void fini_vars()
+{
+    free (a1);
+    free (r1);
+    free (rt1);
+}
+
+
+int write_file (int step);
+int read_file ();
+int read_stream ();
+
+int main (int argc, char ** argv) 
+{
+    int err,i ; 
+
+    MPI_Init (&argc, &argv);
+    MPI_Comm_rank (comm, &rank);
+    MPI_Comm_size (comm, &size);
+
+    alloc_vars();
+    adios_init_noxml(comm);
+    err = adios_read_init_method(ADIOS_READ_METHOD_BP, comm, "verbose=2");
+    if (err) {
+        printE ("%s\n", adios_errmsg());
+    }
+
+    int64_t       m_adios_group;
+    adios_declare_group (&m_adios_group, "once", "", adios_stat_default);
+    adios_select_method (m_adios_group, "MPI", "", "");
+    adios_define_var (m_adios_group, "once", "", adios_integer, 0, 0, 0);
+    adios_define_var (m_adios_group, "onceperstep", "", adios_integer, 0, 0, 0);
+    adios_define_var (m_adios_group, "scalar", "", adios_integer, 0, 0, 0);
+    char gdimstr[32], ldimstr[32], offsstr[32];
+    sprintf(gdimstr, "%d", gdim1);
+    sprintf(ldimstr, "%d", ldim1);
+    sprintf(offsstr, "%d", offs1);
+    adios_define_var (m_adios_group, "a1", "", adios_integer,
+            ldimstr, gdimstr, offsstr);
+    
+    for (i=0; i<NSTEPS; i++) {
+        if (!err) {
+            set_vars (i);
+            err = write_file (i); 
+        }
+    }
+
+    if (!err)
+        err = read_file (); 
+
+    if (!err)
+        err = read_stream (); 
+
+    adios_finalize (rank);
+    fini_vars();
+    MPI_Finalize ();
+    return err;
+}
+
+
+int write_file (int step) 
+{
+    int64_t       fh;
+    uint64_t       groupsize=0, totalsize;
+
+    log ("Write step %d to %s\n", step, FILENAME);
+    adios_open (&fh, "once", FILENAME, (step ? "a" : "w"), comm);
+    
+    if (rank == 0) {
+        if (step == 0) {
+            adios_write (fh, "once", &a0);
+        }
+        adios_write (fh, "onceperstep", &a0);
+    }
+    adios_write (fh, "scalar", &a0);
+    adios_write (fh, "a1", a1);
+
+    adios_close (fh);
+    MPI_Barrier (comm);
+    return 0;
+}
+
+
+#define CHECK_VARINFO(VARNAME, NDIM, NSTEPS) \
+    vi = adios_inq_var (f, VARNAME); \
+    if (vi == NULL) { \
+        printE ("No such variable " VARNAME "\n"); \
+        err = 101; \
+        goto endread; \
+    } \
+    if (vi->ndim != NDIM) { \
+        printE ("Variable " VARNAME " has %d dimensions, but expected %d\n", vi->ndim, NDIM); \
+        err = 102; \
+        goto endread; \
+    } \
+    if (vi->nsteps != NSTEPS) { \
+        printE ("Variable " VARNAME " has %d steps, but expected %d\n", vi->nsteps, NSTEPS); \
+        err = 103; \
+        /*goto endread; */\
+    } \
+    adios_free_varinfo (vi);
+
+#define CHECK_SCALAR(VARNAME, VAR, VALUE, STEP) \
+    if (VAR != VALUE) { \
+        printE (#VARNAME " step %d: wrote %d but read %d\n",STEP,VALUE,VAR);\
+        err = 104; \
+        /*goto endread;*/\
+    }
+
+#define CHECK_ARRAY(VARNAME,A,N,VALUE,STEP,i) \
+    for (i=0;i<N;i++) \
+        if (A[i] != VALUE) { \
+            printE (#VARNAME "[%d] step %d: wrote %d but read %d\n",i,STEP,VALUE,A[i]);\
+            err = 104; \
+            /*goto endread;*/\
+            break; \
+        }
+
+void reset_readvars()
+{
+    int n;
+    
+    r0  = -1;
+    rt0 = -1;
+
+    n = ldim1;
+    memset (r1,  -1, n*sizeof(int));
+    memset (rt1, -1, n*sizeof(int));
+
+}
+
+int read_file ()
+{
+    ADIOS_SELECTION *sel0,*sel1;
+    ADIOS_FILE * f;
+    ADIOS_VARINFO * vi;
+    int err=0,v,v0,i,n;
+    int iMacro; // loop variable in macros
+
+    uint64_t start[1] = {offs1};
+    uint64_t count[1] = {ldim1};
+    uint64_t ndim;
+    
+    reset_readvars();
+
+    log ("Read and check data in %s\n", FILENAME);
+    f = adios_read_open_file (FILENAME, ADIOS_READ_METHOD_BP, comm);
+    if (f == NULL) {
+        printE ("Error at opening file: %s\n", adios_errmsg());
+        return 1;
+    }
+
+    sel0 = adios_selection_boundingbox (0, start, count); 
+    sel1 = adios_selection_boundingbox (1, start, count); 
+
+
+    log ("  Check variable definitions... %s\n", FILENAME);
+
+    CHECK_VARINFO("once", 0, 1)
+    CHECK_VARINFO("onceperstep", 0, NSTEPS)
+    CHECK_VARINFO("scalar", 0, NSTEPS)
+    CHECK_VARINFO("a1", 1, NSTEPS)
+
+    log ("  Check variable 'once'...\n");
+    v0 = VALUE0(0);
+    adios_schedule_read (f, sel0, "once",  0, 1, &r0);
+    adios_perform_reads (f, 1);
+    CHECK_SCALAR (once,  r0,  v0, i) // scalar is from writer rank 0, not this rank!
+
+    log ("  Check variables 'onceperstep', 'scalar', 'a1', steps=%d...\n",NSTEPS);
+    for (i=0; i<NSTEPS; i++) {
+        v = VALUE(rank,i);
+        v0 = VALUE0(i);
+        log ("    Step %d value %d\n", i, v);
+
+        adios_schedule_read (f, sel0, "onceperstep",  i, 1, &r0);
+        adios_schedule_read (f, sel0, "scalar", i, 1, &rt0);
+        adios_schedule_read (f, sel1, "a1",  i, 1, r1);
+        adios_perform_reads (f, 1);
+
+        CHECK_SCALAR (onceperstep,  r0,  v0, i) // scalar is from writer rank 0, not this rank!
+        CHECK_SCALAR (scalar, rt0, v0, i) // so value is v0 at step 'i', not v
+        CHECK_ARRAY (a1,  r1,  ldim1, v, i, iMacro)
+    } 
+
+endread:
+
+    adios_selection_delete (sel0);
+    adios_selection_delete (sel1);
+
+    adios_read_close(f);
+    MPI_Barrier (comm);
+    return err;
+}
+
+
+
+
+
+int read_stream ()
+{
+    ADIOS_SELECTION *sel0,*sel1;
+    ADIOS_FILE * f;
+    ADIOS_VARINFO * vi;
+    int err=0,v,v0,i,n;
+    int iMacro; // loop variable in macros
+
+    uint64_t start[3] = {offs1};
+    uint64_t count[3] = {ldim1};
+    uint64_t ndim;
+    
+    reset_readvars();
+
+    log ("Read as stream and check data in %s\n", FILENAME);
+    f = adios_read_open (FILENAME, ADIOS_READ_METHOD_BP, comm,
+                         ADIOS_LOCKMODE_NONE, 0.0);
+    if (f == NULL) {
+        printE ("Error at opening file as stream: %s\n", adios_errmsg());
+        return 1;
+    }
+
+    sel0 = adios_selection_boundingbox (0, start, count); 
+    sel1 = adios_selection_boundingbox (1, start, count); 
+
+    n = 0;
+    while (n < NSTEPS && adios_errno != err_end_of_stream) {
+        log ("  Step %d\n", n);
+
+        log ("    Check variable definitions... %s\n", FILENAME);
+        if (n == 0) {
+            CHECK_VARINFO("once", 0, 1)
+        }
+        CHECK_VARINFO("onceperstep", 0, 1)
+        CHECK_VARINFO("scalar", 0, 1)
+        CHECK_VARINFO("a1", 1, 1)
+
+        v = VALUE(rank,n);
+        v0 = VALUE0(n);
+
+        if (n == 0) {
+            log ("  Check variable 'once'...\n");
+            adios_schedule_read (f, sel0, "once",  n, 1, &r0);
+            adios_perform_reads (f, 1);
+            CHECK_SCALAR (once,  r0,  v0, n) // scalar is from writer rank 0, not this rank!
+        }
+
+        log ("  Check variables 'onceperstep', 'scalar', 'a1', Step %d value %d\n", n, v);
+
+        adios_schedule_read (f, sel0, "onceperstep",  0, 1, &r0);
+        adios_schedule_read (f, sel0, "scalar", 0, 1, &rt0);
+        adios_schedule_read (f, sel1, "a1",  0, 1, r1);
+        adios_perform_reads (f, 1);
+
+        CHECK_SCALAR (onceperstep,  r0,  v0, n) // scalar is from writer rank 0, not this rank!
+        CHECK_SCALAR (scalar, rt0, v0, n) // so value is v0 at 'n', not v
+        CHECK_ARRAY (a1,  r1,  ldim1, v, n, iMacro)
+
+        if (adios_advance_step (f, 0, 0.0) >= 0)
+            n = f->current_step;
+        else
+            n++; //just to end the loop
+    } 
+
+endread:
+
+    adios_selection_delete (sel0);
+    adios_selection_delete (sel1);
+
+    adios_read_close(f);
+    MPI_Barrier (comm);
+    return err;
+}
diff --git a/tests/suite/programs/transforms_writeblock_read.c b/tests/suite/programs/transforms_writeblock_read.c
index 9e5d45d..9c785c5 100644
--- a/tests/suite/programs/transforms_writeblock_read.c
+++ b/tests/suite/programs/transforms_writeblock_read.c
@@ -39,7 +39,7 @@ static void test_file_mode_reads_on_var(ADIOS_FILE *fp, const char *bp_filename,
 	MPI_Assert(COMM, varinfo->blockinfo);
 
 	const enum ADIOS_DATATYPES datatype = varinfo->type;
-	const int datatypesize = adios_get_type_size(datatype, NULL);
+	const int datatypesize = adios_type_size(datatype, NULL);
 
 	int timestep, timestep_blockidx, blockidx = 0;
 	for (timestep = 0; timestep < varinfo->nsteps; ++timestep) {
diff --git a/tests/suite/tests/05_global_array_time.sh b/tests/suite/tests/05_global_array_time.sh
index 5f1b585..cf894ce 100755
--- a/tests/suite/tests/05_global_array_time.sh
+++ b/tests/suite/tests/05_global_array_time.sh
@@ -24,6 +24,7 @@ cp $SRCDIR/programs/examples/global_array_time/global_array_time_read_as_file_C
 cp $SRCDIR/programs/examples/global_array_time/global_array_time_read_as_stream_C .
 cp $SRCDIR/programs/examples/global_array_time/global_array_time_C.xml .
 cp $SRCDIR/programs/examples/global_array_time/global_array_time_aggr_C.xml .
+cp $SRCDIR/programs/examples/global_array_time/global_array_time_write_multifile_C .
 
 # Insert transform=X if requested by user
 add_transform_to_xmls
@@ -94,7 +95,7 @@ $TRUNKDIR/utils/bpls/bpls -la ../global_array_time_C.bp -D -d temperature -n 10
 for BUFSIZE in 3000 300000 10000 1000 0 ; do
             
     echo "  Run time-aggregation with buffer size = $BUFSIZE"
-    cat ../global_array_time_aggr_C.xml | sed -e "s/buffer-size=[0-9]*/buffer-size=$BUFSIZE/" > global_array_time_C.xml
+    cat ../global_array_time_aggr_C.xml | sed -e "s/buffer-size=\"[0-9]*\"/buffer-size=\"$BUFSIZE\"/" > global_array_time_C.xml
     $MPIRUN $NP_MPIRUN $PROCS $EXEOPT ../global_array_time_write_C
     EX=$?
     if [ ! -f global_array_time_C.bp ]; then
@@ -129,6 +130,72 @@ done
 popd >/dev/null
 
 
+##################################################################################
+# run the time-aggregation test where multiple output files are written over time
+# Check if we have the correct number of steps in each file
+
+echo "Run C global_array_time_write_C with time-aggregation turned on in subdir time_aggr_multifile/ with various buffer sizes:"
+mkdir -p time_aggr_multifile
+pushd time_aggr_multifile >/dev/null
+
+for BUFSIZE in 3000 300000 10000 1000 0 ; do
+            
+	echo "  Run multi-file time-aggregation with buffer size = $BUFSIZE"
+    cat ../global_array_time_aggr_C.xml | sed -e "s/buffer-size=\"[0-9]*\"/buffer-size=\"$BUFSIZE\"/" > global_array_time_aggr_C.xml
+	$MPIRUN $NP_MPIRUN $PROCS $EXEOPT ../global_array_time_write_multifile_C
+    EX=$?
+    if [ $EX != 0 ]; then
+    	echo "ERROR: global_array_time_write_multifile_C failed. Exit code=$EX"
+        exit 1
+    fi
+
+    if [ ! -f global_array_time_C_1.bp ]; then
+        echo "ERROR: global_array_time_write_C failed. global_array_time_C_1.bp file is missing"
+        exit 1
+    fi
+    if [ ! -f global_array_time_C_2.bp ]; then
+        echo "ERROR: global_array_time_write_C failed. global_array_time_C_2.bp file is missing"
+        exit 1
+    fi
+    if [ ! -f global_array_time_C_3.bp ]; then
+        echo "ERROR: global_array_time_write_C failed. global_array_time_C_3.bp file is missing"
+        exit 1
+    fi
+
+	ADIR=bufsize_$BUFSIZE
+	mkdir $ADIR
+    mv global_array_time_aggr_C.xml $ADIR
+    mv global_array_time_C_*.bp  $ADIR
+    pushd $ADIR >/dev/null 
+
+    echo "    Check output with bpls"
+    N1=`$TRUNKDIR/utils/bpls/bpls -l global_array_time_C_1.bp temperature | cut -d 'e' -f 5 | cut -d '*' -f 1`
+    N2=`$TRUNKDIR/utils/bpls/bpls -l global_array_time_C_2.bp temperature | cut -d 'e' -f 5 | cut -d '*' -f 1`
+    N3=`$TRUNKDIR/utils/bpls/bpls -l global_array_time_C_3.bp temperature | cut -d 'e' -f 5 | cut -d '*' -f 1`
+	echo $N1 > steps.txt
+	echo $N2 >> steps.txt
+	echo $N3 >> steps.txt
+			
+    if [ "$N1" -ne "10" ]; then
+    	echo "ERROR: Expected 10 steps in global_array_time_C_1.bp. Instead got $N1 steps."
+        exit 1
+    fi
+    if [ "$N2" -ne "10" ]; then
+    	echo "ERROR: Expected 10 steps in global_array_time_C_2.bp. Instead got $N2 steps."
+        exit 1
+    fi
+    if [ "$N3" -ne "5" ]; then
+    	echo "ERROR: Expected 5 steps in global_array_time_C_3.bp. Instead got $N3 steps."
+        exit 1
+    fi
+    popd >/dev/null
+    
+done
+
+
+popd >/dev/null
+
+
 
 ###################################################
 # run the Fortran tests too if available
diff --git a/tests/suite/tests/21_test_singlevalue.sh b/tests/suite/tests/21_test_singlevalue.sh
new file mode 100755
index 0000000..7faabe1
--- /dev/null
+++ b/tests/suite/tests/21_test_singlevalue.sh
@@ -0,0 +1,37 @@
+#!/bin/bash
+#
+# Test if adios can stream back a file where the first variable
+# is written only in the first step. This bug was fixed after 1.11.1
+# Uses ../programs/test_singlevalue
+#
+# Environment variables set by caller:
+# MPIRUN        Run command
+# NP_MPIRUN     Run commands option to set number of processes
+# MAXPROCS      Max number of processes allowed
+# HAVE_FORTRAN  yes or no
+# SRCDIR        Test source dir (.. of this script)
+# TRUNKDIR      ADIOS trunk dir
+
+PROCS=2
+
+if [ $MAXPROCS -lt $PROCS ]; then
+    echo "WARNING: Needs $PROCS processes at least"
+    exit 77  # not failure, just skip
+fi
+
+# copy codes and inputs to . 
+cp $SRCDIR/programs/test_singlevalue .
+
+echo "Run test_singlevalue"
+$MPIRUN $NP_MPIRUN $PROCS $EXEOPT ./test_singlevalue
+EX=$?
+if [ ! -f test_singlevalue.bp ]; then
+    echo "ERROR: test_singlevalue failed at creating the BP file, test_singlevalue.bp. Exit code=$EX"
+    exit 1
+fi
+
+if [ $EX != 0 ]; then
+    echo "ERROR: test_singlevalue failed with exit code=$EX"
+    exit 1
+fi
+
diff --git a/tests/test_src/Makefile.am b/tests/test_src/Makefile.am
index 036f227..d2f75c3 100644
--- a/tests/test_src/Makefile.am
+++ b/tests/test_src/Makefile.am
@@ -12,7 +12,7 @@
 test_C = hashtest copy_subvolume text_to_pairstruct test_strutil points_1DtoND trim_spaces
 
 if BUILD_WRITE
-    test_C += transforms_specparse group_free_test query_minmax read_points_2d array_attribute array_attribute
+    test_C += transforms_specparse group_free_test query_minmax read_points_2d read_points_3d array_attribute array_attribute
 endif
 
 if BUILD_FORTRAN
@@ -103,6 +103,12 @@ read_points_2d_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_SEQ_LDFLAGS) $(ADIOSLIB_EXTRA_
 read_points_2d_CPPFLAGS = -I$(top_srcdir)/src $(ADIOSLIB_SEQ_CPPFLAGS) -I$(top_builddir)/src/public
 read_points_2d.o: read_points_2d.c
 
+read_points_3d_SOURCES=read_points_3d.c
+read_points_3d_LDADD = $(top_builddir)/src/libadios_nompi.a $(ADIOSLIB_SEQ_LDADD)
+read_points_3d_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_SEQ_LDFLAGS) $(ADIOSLIB_EXTRA_LDFLAGS)
+read_points_3d_CPPFLAGS = -I$(top_srcdir)/src $(ADIOSLIB_SEQ_CPPFLAGS) -I$(top_builddir)/src/public
+read_points_3d.o: read_points_3d.c
+
 array_attribute_SOURCES=array_attribute.c
 array_attribute_LDADD = $(top_builddir)/src/libadios_nompi.a $(ADIOSLIB_SEQ_LDADD)
 array_attribute_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_SEQ_LDFLAGS) $(ADIOSLIB_EXTRA_LDFLAGS)
diff --git a/tests/test_src/Makefile.in b/tests/test_src/Makefile.in
index e396bdb..c1419a5 100644
--- a/tests/test_src/Makefile.in
+++ b/tests/test_src/Makefile.in
@@ -88,7 +88,7 @@ PRE_UNINSTALL = :
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
- at BUILD_WRITE_TRUE@am__append_1 = transforms_specparse group_free_test query_minmax read_points_2d array_attribute array_attribute
+ at BUILD_WRITE_TRUE@am__append_1 = transforms_specparse group_free_test query_minmax read_points_2d read_points_3d array_attribute array_attribute
 check_PROGRAMS = $(am__EXEEXT_2) $(am__EXEEXT_3)
 TESTS = $(am__EXEEXT_2) $(am__EXEEXT_3)
 subdir = tests/test_src
@@ -114,7 +114,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -122,8 +122,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -141,6 +141,7 @@ CONFIG_CLEAN_VPATH_FILES =
 @BUILD_WRITE_TRUE@	group_free_test$(EXEEXT) \
 @BUILD_WRITE_TRUE@	query_minmax$(EXEEXT) \
 @BUILD_WRITE_TRUE@	read_points_2d$(EXEEXT) \
+ at BUILD_WRITE_TRUE@	read_points_3d$(EXEEXT) \
 @BUILD_WRITE_TRUE@	array_attribute$(EXEEXT) \
 @BUILD_WRITE_TRUE@	array_attribute$(EXEEXT)
 am__EXEEXT_2 = hashtest$(EXEEXT) copy_subvolume$(EXEEXT) \
@@ -207,6 +208,14 @@ read_points_2d_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
 	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
 	$(AM_CFLAGS) $(CFLAGS) $(read_points_2d_LDFLAGS) $(LDFLAGS) -o \
 	$@
+am_read_points_3d_OBJECTS = read_points_3d-read_points_3d.$(OBJEXT)
+read_points_3d_OBJECTS = $(am_read_points_3d_OBJECTS)
+read_points_3d_DEPENDENCIES = $(top_builddir)/src/libadios_nompi.a \
+	$(am__DEPENDENCIES_1)
+read_points_3d_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(AM_CFLAGS) $(CFLAGS) $(read_points_3d_LDFLAGS) $(LDFLAGS) -o \
+	$@
 am_selection_api_OBJECTS = selection_api.$(OBJEXT)
 selection_api_OBJECTS = $(am_selection_api_OBJECTS)
 selection_api_DEPENDENCIES =  \
@@ -299,15 +308,17 @@ am__v_CCLD_1 =
 SOURCES = $(array_attribute_SOURCES) $(copy_subvolume_SOURCES) \
 	$(group_free_test_SOURCES) $(hashtest_SOURCES) \
 	$(points_1DtoND_SOURCES) $(query_minmax_SOURCES) \
-	$(read_points_2d_SOURCES) $(selection_api_SOURCES) \
-	$(test_strutil_SOURCES) $(text_to_pairstruct_SOURCES) \
-	$(transforms_specparse_SOURCES) $(trim_spaces_SOURCES)
+	$(read_points_2d_SOURCES) $(read_points_3d_SOURCES) \
+	$(selection_api_SOURCES) $(test_strutil_SOURCES) \
+	$(text_to_pairstruct_SOURCES) $(transforms_specparse_SOURCES) \
+	$(trim_spaces_SOURCES)
 DIST_SOURCES = $(array_attribute_SOURCES) $(copy_subvolume_SOURCES) \
 	$(group_free_test_SOURCES) $(hashtest_SOURCES) \
 	$(points_1DtoND_SOURCES) $(query_minmax_SOURCES) \
-	$(read_points_2d_SOURCES) $(selection_api_SOURCES) \
-	$(test_strutil_SOURCES) $(text_to_pairstruct_SOURCES) \
-	$(transforms_specparse_SOURCES) $(trim_spaces_SOURCES)
+	$(read_points_2d_SOURCES) $(read_points_3d_SOURCES) \
+	$(selection_api_SOURCES) $(test_strutil_SOURCES) \
+	$(text_to_pairstruct_SOURCES) $(transforms_specparse_SOURCES) \
+	$(trim_spaces_SOURCES)
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
     n|no|NO) false;; \
@@ -671,6 +682,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -747,6 +762,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
@@ -875,6 +893,10 @@ read_points_2d_SOURCES = read_points_2d.c
 read_points_2d_LDADD = $(top_builddir)/src/libadios_nompi.a $(ADIOSLIB_SEQ_LDADD)
 read_points_2d_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_SEQ_LDFLAGS) $(ADIOSLIB_EXTRA_LDFLAGS)
 read_points_2d_CPPFLAGS = -I$(top_srcdir)/src $(ADIOSLIB_SEQ_CPPFLAGS) -I$(top_builddir)/src/public
+read_points_3d_SOURCES = read_points_3d.c
+read_points_3d_LDADD = $(top_builddir)/src/libadios_nompi.a $(ADIOSLIB_SEQ_LDADD)
+read_points_3d_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_SEQ_LDFLAGS) $(ADIOSLIB_EXTRA_LDFLAGS)
+read_points_3d_CPPFLAGS = -I$(top_srcdir)/src $(ADIOSLIB_SEQ_CPPFLAGS) -I$(top_builddir)/src/public
 array_attribute_SOURCES = array_attribute.c
 array_attribute_LDADD = $(top_builddir)/src/libadios_nompi.a $(ADIOSLIB_SEQ_LDADD)
 array_attribute_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_SEQ_LDFLAGS) $(ADIOSLIB_EXTRA_LDFLAGS)
@@ -960,6 +982,10 @@ read_points_2d$(EXEEXT): $(read_points_2d_OBJECTS) $(read_points_2d_DEPENDENCIES
 	@rm -f read_points_2d$(EXEEXT)
 	$(AM_V_CCLD)$(read_points_2d_LINK) $(read_points_2d_OBJECTS) $(read_points_2d_LDADD) $(LIBS)
 
+read_points_3d$(EXEEXT): $(read_points_3d_OBJECTS) $(read_points_3d_DEPENDENCIES) $(EXTRA_read_points_3d_DEPENDENCIES) 
+	@rm -f read_points_3d$(EXEEXT)
+	$(AM_V_CCLD)$(read_points_3d_LINK) $(read_points_3d_OBJECTS) $(read_points_3d_LDADD) $(LIBS)
+
 selection_api$(EXEEXT): $(selection_api_OBJECTS) $(selection_api_DEPENDENCIES) $(EXTRA_selection_api_DEPENDENCIES) 
 	@rm -f selection_api$(EXEEXT)
 	$(AM_V_FCLD)$(selection_api_LINK) $(selection_api_OBJECTS) $(selection_api_LDADD) $(LIBS)
@@ -993,6 +1019,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/points_1DtoND-points_1DtoND.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/query_minmax-query_minmax.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/read_points_2d-read_points_2d.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/read_points_3d-read_points_3d.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test_strutil-test_strutil.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/text_to_pairstruct-text_to_pairstruct.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/transforms_specparse-transforms_specparse.Po at am__quote@
@@ -1126,6 +1153,20 @@ read_points_2d-read_points_2d.obj: read_points_2d.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(read_points_2d_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o read_points_2d-read_points_2d.obj `if test -f 'read_points_2d.c'; then $(CYGPATH_W) 'read_points_2d.c'; else $(CYGPATH_W) '$(srcdir)/read_points_2d.c'; fi`
 
+read_points_3d-read_points_3d.o: read_points_3d.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(read_points_3d_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT read_points_3d-read_points_3d.o -MD -MP -MF $(DEPDIR)/read_points_3d-read_points_3d.Tpo -c -o read_points_3d-read_points_3d.o `test -f 'read_points_3d.c' || echo '$(srcdir)/'`read_points_3d.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/read_points_3d-read_points_3d.Tpo $(DEPDIR)/read_points_3d-read_points_3d.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='read_points_3d.c' object='read_points_3d-read_points_3d.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(read_points_3d_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o read_points_3d-read_points_3d.o `test -f 'read_points_3d.c' || echo '$(srcdir)/'`read_points_3d.c
+
+read_points_3d-read_points_3d.obj: read_points_3d.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(read_points_3d_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT read_points_3d-read_points_3d.obj -MD -MP -MF $(DEPDIR)/read_points_3d-read_points_3d.Tpo -c -o read_points_3d-read_points_3d.obj `if test -f 'read_points_3d.c'; then $(CYGPATH_W) 'read_points_3d.c'; else $(CYGPATH_W) '$(srcdir)/read_points_3d.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/read_points_3d-read_points_3d.Tpo $(DEPDIR)/read_points_3d-read_points_3d.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='read_points_3d.c' object='read_points_3d-read_points_3d.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(read_points_3d_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o read_points_3d-read_points_3d.obj `if test -f 'read_points_3d.c'; then $(CYGPATH_W) 'read_points_3d.c'; else $(CYGPATH_W) '$(srcdir)/read_points_3d.c'; fi`
+
 test_strutil-test_strutil.o: test_strutil.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_strutil_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_strutil-test_strutil.o -MD -MP -MF $(DEPDIR)/test_strutil-test_strutil.Tpo -c -o test_strutil-test_strutil.o `test -f 'test_strutil.c' || echo '$(srcdir)/'`test_strutil.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_strutil-test_strutil.Tpo $(DEPDIR)/test_strutil-test_strutil.Po
@@ -1451,6 +1492,13 @@ read_points_2d.log: read_points_2d$(EXEEXT)
 	--log-file $$b.log --trs-file $$b.trs \
 	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
 	"$$tst" $(AM_TESTS_FD_REDIRECT)
+read_points_3d.log: read_points_3d$(EXEEXT)
+	@p='read_points_3d$(EXEEXT)'; \
+	b='read_points_3d'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
 array_attribute.log: array_attribute$(EXEEXT)
 	@p='array_attribute$(EXEEXT)'; \
 	b='array_attribute'; \
@@ -1647,6 +1695,7 @@ transforms_specparse.o: transforms_specparse.c
 group_free_test.o: group_free_test.c
 query_minmax.o: query_minmax.c
 read_points_2d.o: read_points_2d.c
+read_points_3d.o: read_points_3d.c
 array_attribute.o: array_attribute.c
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
diff --git a/tests/test_src/query_minmax.c b/tests/test_src/query_minmax.c
index 21ce790..1d34107 100644
--- a/tests/test_src/query_minmax.c
+++ b/tests/test_src/query_minmax.c
@@ -197,12 +197,12 @@ int write_file (int step)
     adios_open (&fh, "query_minmax", FILENAME, (step ? "a" : "w"), comm);
     
     groupsize  = (4 + nblocks*2) * sizeof(int);             // dimensions
-    log ("  groupsize calculated = %llu\n", groupsize);
+    log ("  groupsize calculated = %" PRIu64 "\n", groupsize);
     groupsize += nblocks * ldim1 * ldim2 * sizeof(float);     // 2D  blocks
-    log ("  groupsize calculated = %llu\n", groupsize);
+    log ("  groupsize calculated = %" PRIu64 "\n", groupsize);
 
     adios_group_size (fh, groupsize, &totalsize);
-    log ("  groupsize %llu, totalsize %llu\n", groupsize, totalsize);
+    log ("  groupsize %" PRIu64 ", totalsize %" PRIu64 "\n", groupsize, totalsize);
 
     tb = MPI_Wtime();
     for (i=0; i<N; i++) {
@@ -296,7 +296,7 @@ int query_test (ADIOS_FILE *f, ADIOS_SELECTION *boxsel)
 
         // retrieve the whole query result at once
         int64_t batchSize = N*N;
-        log ("    set upper limit to total number of blocks in array  = %lld\n", batchSize);
+        log ("    set upper limit to total number of blocks in array  = %" PRId64 "\n", batchSize);
 
         teb = MPI_Wtime();
         ADIOS_QUERY_RESULT *result = adios_query_evaluate(q, boxsel, step, batchSize);
diff --git a/tests/test_src/read_points_3d.c b/tests/test_src/read_points_3d.c
new file mode 100644
index 0000000..84ac6dc
--- /dev/null
+++ b/tests/test_src/read_points_3d.c
@@ -0,0 +1,774 @@
+/* 
+ * ADIOS is freely available under the terms of the BSD license described
+ * in the COPYING file in the top level directory of this source distribution.
+ *
+ * Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.
+ */
+
+/* ADIOS C test: 
+ *  Write a 3D array of 8 3D blocks, multiple steps. Each block is a 5x5x5 array.
+ *  The whole array is 10x10x10 and is patterned like this: 10*step+<blockid>.<row><col><z>
+ *
+ *  Front 2D slice of the 3D array:
+ *  $ bpls -l read_points_3d.bp -d data -n 10 -f "%6.3f" -s "0,0,0,0" -c "1,10,10,1"
+  real     data                       2*{10, 10, 10} = 0 / 17.444 / 8.722 / 5.50184
+    slice (0:0, 0:9, 0:9, 0:0)
+    (0,0,0,0)     0.000  0.010  0.020  0.030  0.040  1.000  1.010  1.020  1.030  1.040
+    (0,1,0,0)     0.100  0.110  0.120  0.130  0.140  1.100  1.110  1.120  1.130  1.140
+    (0,2,0,0)     0.200  0.210  0.220  0.230  0.240  1.200  1.210  1.220  1.230  1.240
+    (0,3,0,0)     0.300  0.310  0.320  0.330  0.340  1.300  1.310  1.320  1.330  1.340
+    (0,4,0,0)     0.400  0.410  0.420  0.430  0.440  1.400  1.410  1.420  1.430  1.440
+    (0,5,0,0)     2.000  2.010  2.020  2.030  2.040  3.000  3.010  3.020  3.030  3.040
+    (0,6,0,0)     2.100  2.110  2.120  2.130  2.140  3.100  3.110  3.120  3.130  3.140
+    (0,7,0,0)     2.200  2.210  2.220  2.230  2.240  3.200  3.210  3.220  3.230  3.240
+    (0,8,0,0)     2.300  2.310  2.320  2.330  2.340  3.300  3.310  3.320  3.330  3.340
+    (0,9,0,0)     2.400  2.410  2.420  2.430  2.440  3.400  3.410  3.420  3.430  3.440
+ *
+ *  Back 2D slice of the 3D array
+ *  $ bpls -l read_points_3d.bp -d data -n 10 -f "%6.3f" -s "0,0,0,-1" -c "1,10,10,1"
+  real     data                       2*{10, 10, 10} = 0 / 17.444 / 8.722 / 5.50184
+    slice (0:0, 0:9, 0:9, 9:9)
+    (0,0,0,9)     4.004  4.014  4.024  4.034  4.044  5.004  5.014  5.024  5.034  5.044
+    (0,1,0,9)     4.104  4.114  4.124  4.134  4.144  5.104  5.114  5.124  5.134  5.144
+    (0,2,0,9)     4.204  4.214  4.224  4.234  4.244  5.204  5.214  5.224  5.234  5.244
+    (0,3,0,9)     4.304  4.314  4.324  4.334  4.344  5.304  5.314  5.324  5.334  5.344
+    (0,4,0,9)     4.404  4.414  4.424  4.434  4.444  5.404  5.414  5.424  5.434  5.444
+    (0,5,0,9)     6.004  6.014  6.024  6.034  6.044  7.004  7.014  7.024  7.034  7.044
+    (0,6,0,9)     6.104  6.114  6.124  6.134  6.144  7.104  7.114  7.124  7.134  7.144
+    (0,7,0,9)     6.204  6.214  6.224  6.234  6.244  7.204  7.214  7.224  7.234  7.244
+    (0,8,0,9)     6.304  6.314  6.324  6.334  6.344  7.304  7.314  7.324  7.334  7.344
+    (0,9,0,9)     6.404  6.414  6.424  6.434  6.444  7.404  7.414  7.424  7.434  7.444
+
+ * Next slice in Z-coord is similar with all values +0.001
+ *  Then test every possible reading of points
+ *    with a bounding box container, and without
+ *    with a writeblock container
+ *    1D and 3D points (local offset in contiguous space vs N-dim points)
+ *    multiple timesteps
+ *
+ * How to run: ./read_points_3d
+ * It writes 5x5x5 3D blocks organized into a 10x10x10 3D array.
+ * Output: read_points.bp
+ *
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include <errno.h>
+#include <math.h>
+#include <float.h>
+#include "public/adios.h"
+#include "public/adios_read.h"
+#include "public/adios_query.h"
+
+#ifdef DMALLOC
+#include "dmalloc.h"
+#endif
+
+#define log(...) fprintf (stderr, "[rank=%3.3d, line %d]: ", rank, __LINE__); fprintf (stderr, __VA_ARGS__); fflush(stderr);
+#define printE(...) fprintf (stderr, "[rank=%3.3d, line %d]: ERROR: ", rank, __LINE__); fprintf (stderr, __VA_ARGS__); fflush(stderr);
+
+/* user arguments */
+int N = 2;       // organize blocks in NxNxN shape
+int NSTEPS = 2;  // number of output steps
+
+static const char FILENAME[] = "read_points_3d.bp";
+#define VALUE(rank, step) (step * 1000 + rank + 1)
+
+#define LDIM1 5
+#define LDIM2 5
+#define LDIM3 5
+
+static const int ldim1 = LDIM1;
+static const int ldim2 = LDIM2;
+static const int ldim3 = LDIM3;
+
+int gdim1, gdim2, gdim3;
+int offs1, offs2, offs3;
+
+int64_t       m_adios_group;
+
+/* Variables to write */
+float  a3[LDIM1*LDIM2*LDIM3];
+
+/* Variables to read */
+float  r3[LDIM1*LDIM2*LDIM3];
+
+MPI_Comm    comm = MPI_COMM_SELF; // dummy comm for sequential code
+int rank;
+int size;
+
+
+void set_gdim()
+{
+    gdim1 = N*ldim1;
+    gdim2 = N*ldim2;
+    gdim3 = N*ldim3;
+}
+
+void set_offsets (int row, int col, int z)
+{
+    offs1 = row*ldim1;
+    offs2 = col*ldim2;
+    offs3 = z*ldim3;
+}
+
+void fill_block(int step, int row, int col, int z)
+{
+    int n;
+    float v_intpart = 10*step + row*N + col + z*N*N;
+    float v;
+    int i, j, k, idx;
+
+    n = ldim1 * ldim2 * ldim3;
+    //log ("  Fill up array of %d elements starting from value %f...\n",n,v_start);
+    idx = 0;
+    for (i=0; i<ldim1; i++) {
+        //v = v_intpart + i*0.1;
+        //log ("      row %d starts from value %f... (element %d)\n",i,v,k);
+        for (j=0; j<ldim2; j++) {
+            v = v_intpart + i*0.1 + j*0.01;
+            for (k=0; k<ldim3; k++) {
+                a3[idx] = v;
+                idx++;
+                v += 0.001;
+            }
+        }
+    }
+}
+
+
+void Usage() 
+{
+    printf("Usage: read_points <N> <nsteps>\n"
+            "    <N>:       Number of blocks in each of X and Y direction\n"
+            "    <nsteps>:  Number of write cycles (to same file)\n");
+}
+
+void define_vars ();
+int write_file (int step);
+int read_points ();
+
+int main (int argc, char ** argv) 
+{
+    int err,i ; 
+
+    MPI_Init (&argc, &argv);
+    MPI_Comm_rank (comm, &rank);
+    MPI_Comm_size (comm, &size);
+
+    if (argc == 1)
+    {
+        // this case is for the test harness. otherwise this should be calling for Usage();
+        N = 2;
+        NSTEPS = 2;
+        printf("Running read_points <N=%d> <nsteps=%d>\n", N, NSTEPS);
+    }
+    else
+    {
+        if (argc < 3) { Usage(); return 1; }
+
+        errno = 0;
+        i = strtol (argv[1], NULL, 10);
+        if (errno || i < 1) { printf("Invalid 1st argument %s\n", argv[1]); Usage(); return 1;}
+        N = i;
+
+        errno = 0;
+        i = strtol (argv[2], NULL, 10);
+        if (errno || i < 1) { printf("Invalid 2nd argument %s\n", argv[2]); Usage(); return 1;}
+        NSTEPS = i;
+    }
+    adios_init_noxml (comm);
+    err = adios_read_init_method(ADIOS_READ_METHOD_BP, comm, "verbose=2");
+    if (err) {
+        printE ("%s\n", adios_errmsg());
+    }
+
+    adios_declare_group (&m_adios_group, "read_points", "", adios_stat_default);
+    adios_select_method (m_adios_group, "POSIX", "", "");
+
+
+    define_vars();
+    set_gdim();
+    
+    for (i=0; i<NSTEPS; i++) {
+        if (!err) {
+            err = write_file (i); 
+        }
+    }
+
+    if (!err)
+        err = read_points ();
+
+    adios_read_finalize_method (ADIOS_READ_METHOD_BP);
+    adios_finalize (rank);
+    MPI_Finalize ();
+    return err;
+}
+
+void define_vars ()
+{
+    int i;
+
+    adios_define_var (m_adios_group, "ldim1", "", adios_integer, 0, 0, 0);
+    adios_define_var (m_adios_group, "ldim2", "", adios_integer, 0, 0, 0);
+    adios_define_var (m_adios_group, "ldim3", "", adios_integer, 0, 0, 0);
+    adios_define_var (m_adios_group, "gdim1", "", adios_integer, 0, 0, 0);
+    adios_define_var (m_adios_group, "gdim2", "", adios_integer, 0, 0, 0);
+    adios_define_var (m_adios_group, "gdim3", "", adios_integer, 0, 0, 0);
+    adios_define_var (m_adios_group, "offs1", "", adios_integer, 0, 0, 0);
+    adios_define_var (m_adios_group, "offs2", "", adios_integer, 0, 0, 0);
+    adios_define_var (m_adios_group, "offs3", "", adios_integer, 0, 0, 0);
+
+    for (i=0; i<N*N*N; i++) {
+        adios_define_var (m_adios_group, "data", "", adios_real,
+                "ldim1,ldim2,ldim3",
+                "gdim1,gdim2,gdim3",
+                "offs1,offs2,offs3");
+    }
+}
+
+int write_file (int step) 
+{
+    int64_t       fh;
+    int           i, j, k;
+    double        tb, te;
+
+    log ("Write step %d to %s\n", step, FILENAME);
+    adios_open (&fh, "read_points", FILENAME, (step ? "a" : "w"), comm);
+    
+    /*
+    groupsize  = (4 + nblocks*2) * sizeof(int);             // dimensions
+    log ("  groupsize calculated = %llu\n", groupsize);
+    groupsize += nblocks * ldim1 * ldim2 * sizeof(float);     // 2D  blocks
+    log ("  groupsize calculated = %llu\n", groupsize);
+
+    adios_group_size (fh, groupsize, &totalsize);
+    log ("  groupsize %llu, totalsize %llu\n", groupsize, totalsize);
+    */
+
+    tb = MPI_Wtime();
+    for (i=0; i<N; i++) {
+        for (j=0; j<N; j++) {
+            for (k=0; k<N; k++) {
+                set_offsets (i, j, k);
+                fill_block (step, i, j, k);
+                adios_write (fh, "gdim1", &gdim1);
+                adios_write (fh, "gdim2", &gdim2);
+                adios_write (fh, "gdim3", &gdim3);
+                adios_write (fh, "ldim1", &ldim1);
+                adios_write (fh, "ldim2", &ldim2);
+                adios_write (fh, "ldim3", &ldim3);
+                adios_write (fh, "offs1", &offs1);
+                adios_write (fh, "offs2", &offs2);
+                adios_write (fh, "offs3", &offs3);
+                adios_write (fh, "data", a3);
+            }
+         }
+    }
+    adios_close (fh);
+    te = MPI_Wtime();
+
+    if (rank==0) {
+        log ("  Write time for step %d was %6.3lf seconds\n", step, te-tb);
+    }
+    MPI_Barrier (comm);
+    return 0;
+}
+
+#define CHECK_VARINFO(VARNAME, NDIM, NSTEPS) \
+    vi = adios_inq_var (f, VARNAME); \
+    if (vi == NULL) { \
+        printE ("No such variable: %s\n", VARNAME); \
+        err = 101; \
+        goto endread; \
+    } \
+    if (vi->ndim != NDIM) { \
+        printE ("Variable %s has %d dimensions, but expected %d\n", VARNAME, vi->ndim, NDIM); \
+        err = 102; \
+        goto endread; \
+    } \
+    if (vi->nsteps != NSTEPS) { \
+        printE ("Variable %s has %d steps, but expected %d\n", VARNAME, vi->nsteps, NSTEPS); \
+        err = 103; \
+        /*goto endread; */\
+    } \
+    adios_free_varinfo (vi);
+
+
+void reset_readvars()
+{
+    size_t n;
+    n = (size_t)ldim1 * (size_t)ldim2;
+    memset (r3,  0, n*sizeof(float));
+}
+
+int nearlyEqual(float a, float b, float epsilon) {
+    float absA = fabsf(a);
+    float absB = fabsf(b);
+    float diff = fabsf(a - b);
+
+    if (a == b) { // shortcut, handles infinities
+        return 1;
+    } else if (a == 0 || b == 0 || diff < FLT_MIN) {
+        // a or b is zero or both are extremely close to it
+        // relative error is less meaningful here
+        return diff < (epsilon * FLT_MIN);
+    } else { // use relative error
+        return diff / fmin((absA + absB), FLT_MAX) < epsilon;
+    }
+}
+
+int test_read (ADIOS_FILE *f, ADIOS_SELECTION *pts, int from_steps, int nsteps,
+        float *expected)
+{
+    float *data = (float *) malloc (nsteps * pts->u.points.npoints * sizeof(float));
+    adios_schedule_read(f, pts, "data", from_steps, nsteps, data);
+    adios_perform_reads(f, 1);
+    int s, i, idx;
+
+    // print it out just for manual testing's sake
+    for (s = 0; s < nsteps; ++s) {
+        log ("    Step %2d: ", s);
+        idx = s * pts->u.points.npoints;
+        for (i = 0; i < pts->u.points.npoints; ++i) {
+            if (nearlyEqual(data[idx], expected[idx], 0.000001)) {
+                printf (" %7.3f  ", data[idx]);
+            } else {
+                printf ("**%6.3f* ", data[idx]);
+              }
+            idx++;
+        }
+        printf("\n");
+    }
+
+    for (s = 0; s < nsteps; ++s) {
+        idx = s * pts->u.points.npoints;
+        for (i = 0; i < pts->u.points.npoints; ++i) {
+            if (!nearlyEqual(data[idx], expected[idx], 0.000001))
+            {
+                printE ("Point %d in step %d value = %16.12f but was expected %16.12f\n",
+                        i, s, data[idx], expected[idx]);
+                free (data);
+                return 110;
+            }
+            idx++;
+        }
+    }
+
+
+    free (data);
+    return 0;
+}
+
+int read_points ()
+{
+    ADIOS_FILE * f;
+    ADIOS_VARINFO * vi;
+    int err=0;
+
+    reset_readvars();
+
+    log ("Open %s for reading\n", FILENAME);
+    f = adios_read_open_file (FILENAME, ADIOS_READ_METHOD_BP, comm);
+    if (f == NULL) {
+        printE ("Error at opening file: %s\n", adios_errmsg());
+        return 1;
+    }
+
+    log ("  Check variable definitions in %s\n", FILENAME);
+    CHECK_VARINFO("data", 3, NSTEPS)
+    MPI_Barrier (comm);
+
+    ADIOS_SELECTION *pts;
+    uint64_t start[100];
+    uint64_t count[100];
+    ADIOS_SELECTION *box;
+    uint64_t boxstart[3];
+    uint64_t boxcount[3];
+    ADIOS_SELECTION *wblock;
+    float expected[32]; // expected values of points
+
+    /*
+     * Points without containers based tests
+     */
+
+    // Test 1
+    // Read a single point with 3D coordinates in global space
+    // middle point of first 5x5x5 block, = 0.22
+    start[0] = 2; start[1] = 2; start[2] = 2;
+    pts = adios_selection_points(3, 1, start);
+    expected[0] = 0.222;
+    log ("  Read single 3D global point at one step\n");
+    err = test_read (f, pts, 0, 1, expected);
+    adios_selection_delete(pts);
+    if (err)
+        goto endread;
+
+    /*
+     * Points in BOUNDINGBOX based tests
+     */
+    log ("  --------------- Points in Boundinx Boxes -----------------------  \n");
+    // Test 2
+    // Read a single point with 3D coordinates in an 5x5x5 bounding box
+    // middle point of the 5x5x5 block, = 7.00
+    // Limit the query to the bounding box
+    boxstart[0] = 3; boxstart[1] = 3; boxstart[2] = 3;
+    boxcount[0] = 5; boxcount[1] = 5; boxcount[2] = 5;
+    box = adios_selection_boundingbox (3, boxstart, boxcount);
+
+    start[0] = 2; start[1] = 2; start[2] = 2; // 3D point of middle of a 5x5x5 array
+    pts = adios_selection_points(3, 1, start);
+    pts->u.points.container_selection = box;
+    expected[0] = 7.000;
+    log ("  Read single 3D point in a 3D bounding box at one step\n");
+    err = test_read (f, pts, 0, 1, expected);
+    adios_selection_delete(pts);
+    //adios_selection_delete (box); // deleted when pts is deleted
+    if (err)
+        goto endread;
+
+
+    // Test 3
+    // Read a single point with 1D offset in an 5x5x5 bounding box
+    // middle point of that 5x5x5 block, = 7.00
+    // Limit the query to the bounding box of the middle of the global array
+    // This is the same actual point as in Test 2
+    boxstart[0] = 3; boxstart[1] = 3; boxstart[2] = 3;
+    boxcount[0] = 5; boxcount[1] = 5; boxcount[2] = 5;
+    box = adios_selection_boundingbox (3, boxstart, boxcount);
+
+    start[0] = 62; // offset of middle of a 5x5x5 array: 2*25 + 2*5 + 2
+    pts = adios_selection_points(1, 1, start);
+    pts->u.points.container_selection = box;
+    expected[0] = 7.000;
+    log ("  Read single 1D point in a 3D bounding box at one step\n");
+    err = test_read (f, pts, 0, 1, expected);
+    adios_selection_delete(pts);
+    if (err)
+        goto endread;
+
+
+    // Test 4-5
+    // Read several single points with 3D coordinates in an 5x5x5 bounding box
+    // back diagonal of that 5x5x5 block, = 5.332  5.411  7.000  2.144  2.233
+    // Limit the query to the bounding box of the middle of the global array
+    /* See: $ bpls -l read_points_3d.bp -d data -n 5 -s "0,3,3,3" -c "1,5,5,5" -f "%6.3f "
+      real     data     2*{10, 10, 10} = 0 / 17.444 / 8.722 / 5.50184
+      slice (0:0, 3:7, 3:7, 3:7)
+      (0,3,3,3)     0.333   0.334   4.330   4.331   4.332
+      (0,3,4,3)     0.343   0.344   4.340   4.341   4.342
+      (0,3,5,3)     1.303   1.304   5.300   5.301   5.302
+      (0,3,6,3)     1.313   1.314   5.310   5.311   5.312
+      (0,3,7,3)     1.323   1.324   5.320   5.321  [5.322] <-- first point, bottom corner of first 2d slice
+      (0,4,3,3) ...
+      ...             v--------------------------------------- last point, top corner
+      (0,7,3,3)    [2.233]  2.234   6.230   6.231   6.232
+      (0,7,4,3)     2.243   2.244   6.240   6.241   6.242
+      (0,7,5,3)     3.203   3.204   7.200   7.201   7.202
+      (0,7,6,3)     3.213   3.214   7.210   7.211   7.212
+      (0,7,7,3)     3.223   3.224   7.220   7.221   7.222
+    */
+    boxstart[0] = 3; boxstart[1] = 3; boxstart[2] = 3;
+    boxcount[0] = 5; boxcount[1] = 5; boxcount[2] = 5;
+    box = adios_selection_boundingbox (3, boxstart, boxcount);
+
+    // back diagonal of the 5x5x5 array
+    start[0]  = 0; start[1]  = 4; start[2]  = 4;
+    start[3]  = 1; start[4]  = 3; start[5]  = 3;
+    start[6]  = 2; start[7]  = 2; start[8]  = 2;
+    start[9]  = 3; start[10] = 1; start[11] = 1;
+    start[12] = 4; start[13] = 0; start[14] = 0;
+
+    pts = adios_selection_points(3, 5, start);
+    pts->u.points.container_selection = box;
+    expected[0] = 5.322;
+    expected[1] = 5.411;
+    expected[2] = 7.000;
+    expected[3] = 2.144;
+    expected[4] = 2.233;
+    log ("  Read back diagonal of box with five 3D points in a 3D bounding box at one step\n");
+    err = test_read (f, pts, 0, 1, expected);
+    if (err) {
+        adios_selection_delete(pts);
+        goto endread;
+    }
+    expected[5] = 15.322;
+    expected[6] = 15.411;
+    expected[7] = 17.000;
+    expected[8] = 12.144;
+    expected[9] = 12.233;
+    log ("  Read back diagonal of box with five 3D points in a 3D bounding box at two steps\n");
+    err = test_read (f, pts, 0, 2, expected);
+    adios_selection_delete(pts);
+    if (err)
+        goto endread;
+
+
+    // Test 6-7
+    // Read several single points with 1D offset in an 5x5x5 bounding box
+    // back diagonal of that 5x5x5 block, = 5.332  5.411  7.000  2.144  2.233
+    // Limit the query to the bounding box of the middle of the global array
+    boxstart[0] = 3; boxstart[1] = 3; boxstart[2] = 3;
+    boxcount[0] = 5; boxcount[1] = 5; boxcount[2] = 5;
+    box = adios_selection_boundingbox (3, boxstart, boxcount);
+
+    // back diagonal of the 5x5x5 array
+    start[0] =                 4*ldim2 + 4;
+    start[1] = 1*ldim2*ldim3 + 3*ldim2 + 3;
+    start[2] = 2*ldim2*ldim3 + 2*ldim2 + 2;
+    start[3] = 3*ldim2*ldim3 + 1*ldim2 + 1;
+    start[4] = 4*ldim2*ldim3;
+    pts = adios_selection_points(1, 5, start);
+    pts->u.points.container_selection = box;
+    expected[0] = 5.322;
+    expected[1] = 5.411;
+    expected[2] = 7.000;
+    expected[3] = 2.144;
+    expected[4] = 2.233;
+    log ("  Read back diagonal of box with five 1D offsets in a 2D bounding box at one step\n");
+    err = test_read (f, pts, 0, 1, expected);
+    if (err) {
+        adios_selection_delete(pts);
+        goto endread;
+    }
+    expected[5] = 15.322;
+    expected[6] = 15.411;
+    expected[7] = 17.000;
+    expected[8] = 12.144;
+    expected[9] = 12.233;
+    log ("  Read back diagonal of box with five 1D points in a 2D bounding box at two steps\n");
+    err = test_read (f, pts, 0, 2, expected);
+    adios_selection_delete(pts);
+    if (err)
+        goto endread;
+
+
+    // Test 8
+    // Read "center cross" with 3D offset in an 5x5x5 bounding box
+    // points concentrated in 3x1x3 2D X-Z center plane to test the reduction of reading box size
+    // 5-point center of that 3x1x3 block, =          5.400
+    //                                          3.004 7.000 7.001
+    //                                                7.100
+    // The box-reduction should read a 3x3=9 element box instead of
+    // the full 5x5x5=125 elements
+    // (actually read_var_bb then will read more than this because it reads contiguous arrays)
+    // Limit the query to the bounding box of the middle of the global array
+    /*
+     * See the cross in file:
+    $ bpls -l read_points_3d.bp -d data -n 5 -s "0,4,5,5" -c "1,1,1,1" -f "%6.3f " -n 1
+    real     data                       2*{10, 10, 10} = 0 / 17.444 / 8.722 / 5.50184
+    slice (0:0, 4:4, 5:5, 5:5)
+    (0,4,5,5)     5.400
+
+    $ bpls -l read_points_3d.bp -d data -n 5 -s "0,5,5,4" -c "1,1,1,3" -f "%6.3f " -n 1
+    real     data                       2*{10, 10, 10} = 0 / 17.444 / 8.722 / 5.50184
+    slice (0:0, 5:5, 5:5, 4:6)
+    (0,5,5,4)     3.004
+    (0,5,5,5)     7.000
+    (0,5,5,6)     7.001
+
+    $ bpls -l read_points_3d.bp -d data -n 5 -s "0,6,5,5" -c "1,1,1,1" -f "%6.3f " -n 1
+    real     data                       2*{10, 10, 10} = 0 / 17.444 / 8.722 / 5.50184
+    slice (0:0, 6:6, 5:5, 5:5)
+    (0,6,5,5)     7.100
+     */
+    boxstart[0] = 3; boxstart[1] = 3; boxstart[2] = 3;
+    boxcount[0] = 5; boxcount[1] = 5; boxcount[2] = 5;
+    box = adios_selection_boundingbox (3, boxstart, boxcount);
+
+    // 5-point center cross in X-Z plane of the 5x5x5 array
+    start[0]  = 1; start[1]  = 2; start[2]  = 2;
+    start[3]  = 2; start[4]  = 2; start[5]  = 1;
+    start[6]  = 2; start[7]  = 2; start[8]  = 2;
+    start[9]  = 2; start[10] = 2; start[11] = 3;
+    start[12] = 3; start[13] = 2; start[14] = 2;
+    pts = adios_selection_points(3, 5, start);
+    pts->u.points.container_selection = box;
+    expected[0] = 5.400;
+    expected[1] = 3.004;
+    expected[2] = 7.000;
+    expected[3] = 7.001;
+    expected[4] = 7.100;
+    log ("  Read back center cross in X-Z plane with five 3D points in a 3D bounding box at one step\n");
+    err = test_read (f, pts, 0, 1, expected);
+    adios_selection_delete(pts);
+    if (err)
+        goto endread;
+
+
+    // Test 9
+    // Read "center cross" with 1D offset in an 5x5x5 bounding box
+    // points concentrated in 3x1x3 2D X-Z center plane to test the reduction of reading box size
+    // 5-point center of that 3x1x3 block, = 5.400 3.004 7.000 7.001 7.100
+    // The box-reduction should read a 3x5x5=75 element box instead of
+    // the full 5x5x5=125 elements
+    // Limit the query to the bounding box of the middle of the global array
+    // Same test as Test 8 but with 1D points
+
+    boxstart[0] = 3; boxstart[1] = 3; boxstart[2] = 3;
+    boxcount[0] = 5; boxcount[1] = 5; boxcount[2] = 5;
+    box = adios_selection_boundingbox (3, boxstart, boxcount);
+
+    // 5-point center cross in X-Z plane of the 5x5x5 array
+    start[0] = 1*ldim2*ldim3 + 2*ldim2 + 2;
+    start[1] = 2*ldim2*ldim3 + 2*ldim2 + 1;
+    start[2] = 2*ldim2*ldim3 + 2*ldim2 + 2;
+    start[3] = 2*ldim2*ldim3 + 2*ldim2 + 3;
+    start[4] = 3*ldim2*ldim3 + 2*ldim2 + 2;
+
+    pts = adios_selection_points(1, 5, start);
+    pts->u.points.container_selection = box;
+    expected[0] = 5.400;
+    expected[1] = 3.004;
+    expected[2] = 7.000;
+    expected[3] = 7.001;
+    expected[4] = 7.100;
+    log ("  Read back center cross in X-Z plane with five 1D points in a 3D bounding box at one step\n");
+    err = test_read (f, pts, 0, 1, expected);
+    adios_selection_delete(pts);
+    if (err)
+        goto endread;
+
+
+    /*
+     * Points in WRITEBLOCK based tests
+     */
+    log ("  --------------- Points in WriteBlocks -----------------------  \n");
+
+    // Test 8
+    // Read a single point with 3D coordinates in writeblock 2 (third block)
+    // block 2: [0:4, 5:9, 0:4] = 1 / 1.444/ 1.222/ 0.142134
+    // middle point of that 5x5x5 block, = 1.222
+    wblock = adios_selection_writeblock(2);
+
+    start[0] = 2; start[1] = 2; start[2] = 2; // 3D point of middle of a 5x5x5 writeblock
+    pts = adios_selection_points(3, 1, start);
+    pts->u.points.container_selection = wblock;
+    expected[0] = 1.222;
+    log ("  Read single 3D point in a 3D writeblock at one step\n");
+    err = test_read (f, pts, 0, 1, expected);
+    adios_selection_delete(pts);
+    //adios_selection_delete (wblock); // deleted when pts is deleted
+    if (err)
+        goto endread;
+
+
+    // Test 9
+    // Read a single point with 1D offset in an writeblock 2
+    // middle point of that 5x5x5 block, = 1.222
+    // This is the same actual point as in Test 8
+    wblock = adios_selection_writeblock(2);
+
+    start[0] = 62; // offset of middle of a 5x5x5 array
+    pts = adios_selection_points(1, 1, start);
+    pts->u.points.container_selection = wblock;
+    expected[0] = 1.222;
+    log ("  Read single 1D point in a 3D writeblock at one step\n");
+    err = test_read (f, pts, 0, 1, expected);
+    adios_selection_delete(pts);
+    if (err)
+        goto endread;
+
+
+    // Test 10-11
+    // Read several single points with 3D coordinates in writeblock 2
+    // back diagonal of that 5x5x5 block, = 1.044 1.133 1.222 1.311 1.400
+    /* See
+     * $ bpls -l read_points_3d.bp -d data -n 5 -s "0,0,5,0" -c "1,5,5,5" -f "%6.3f "
+       real     data                       2*{10, 10, 10} = 0 / 17.444 / 8.722 / 5.50184
+    slice (0:0, 0:4, 5:9, 0:4)
+    (0,0,5,0)     1.000   1.001   1.002   1.003   1.004
+    (0,0,6,0)     1.010   1.011   1.012   1.013   1.014
+    (0,0,7,0)     1.020   1.021   1.022   1.023   1.024
+    (0,0,8,0)     1.030   1.031   1.032   1.033   1.034
+    (0,0,9,0)     1.040   1.041   1.042   1.043  [1.044] <-- first point
+    ...
+                    v--------------------------------------- last point
+    (0,4,5,0)    [1.400]  1.401   1.402   1.403   1.404
+    (0,4,6,0)     1.410   1.411   1.412   1.413   1.414
+    (0,4,7,0)     1.420   1.421   1.422   1.423   1.424
+    (0,4,8,0)     1.430   1.431   1.432   1.433   1.434
+    (0,4,9,0)     1.440   1.441   1.442   1.443   1.444
+     *
+     *
+     */
+
+    wblock = adios_selection_writeblock(2);
+
+    // back diagonal of the 5x5x5 array
+    start[0]  = 0; start[1]  = 4; start[2]  = 4;
+    start[3]  = 1; start[4]  = 3; start[5]  = 3;
+    start[6]  = 2; start[7]  = 2; start[8]  = 2;
+    start[9]  = 3; start[10] = 1; start[11] = 1;
+    start[12] = 4; start[13] = 0; start[14] = 0;
+    pts = adios_selection_points(3, 5, start);
+    pts->u.points.container_selection = wblock;
+    expected[0] = 1.044;
+    expected[1] = 1.133;
+    expected[2] = 1.222;
+    expected[3] = 1.311;
+    expected[4] = 1.400;
+    log ("  Read back diagonal of box with five 3D points in a 3D writeblock at one step\n");
+    err = test_read (f, pts, 0, 1, expected);
+    if (err) {
+        adios_selection_delete(pts);
+        goto endread;
+    }
+
+    expected[5] = 11.044;
+    expected[6] = 11.133;
+    expected[7] = 11.222;
+    expected[8] = 11.311;
+    expected[9] = 11.400;
+    log ("  Read back diagonal of box with five 3D points in a 3D writeblock at two steps\n");
+    err = test_read (f, pts, 0, 2, expected);
+    adios_selection_delete(pts);
+    if (err)
+        goto endread;
+
+
+    // Test 12-13
+    // Read several single points with 1D offset in writeblock 2
+    // back diagonal of that 5x5x5 block, = 1.044 1.133 1.222 1.311 1.400
+    // This is the same actual point as in Test 10-11
+    wblock = adios_selection_writeblock(2);
+
+    // back diagonal of the 5x5x5 array as 1D offsets
+    start[0] =                 4*ldim2 + 4;
+    start[1] = 1*ldim2*ldim3 + 3*ldim2 + 3;
+    start[2] = 2*ldim2*ldim3 + 2*ldim2 + 2;
+    start[3] = 3*ldim2*ldim3 + 1*ldim2 + 1;
+    start[4] = 4*ldim2*ldim3;
+    pts = adios_selection_points(1, 5, start);
+    pts->u.points.container_selection = wblock;
+    expected[0] = 1.044;
+    expected[1] = 1.133;
+    expected[2] = 1.222;
+    expected[3] = 1.311;
+    expected[4] = 1.400;
+    log ("  Read back diagonal of box with five 1D offsets in a 3D writeblock at one step\n");
+    err = test_read (f, pts, 0, 1, expected);
+    if (err) {
+        adios_selection_delete(pts);
+        goto endread;
+    }
+    expected[5] = 11.044;
+    expected[6] = 11.133;
+    expected[7] = 11.222;
+    expected[8] = 11.311;
+    expected[9] = 11.400;
+    log ("  Read back diagonal of box with five 1D points in a 3D writeblock at two steps\n");
+    err = test_read (f, pts, 0, 2, expected);
+    adios_selection_delete(pts);
+    if (err)
+        goto endread;
+
+endread:
+
+    adios_read_close(f);
+    MPI_Barrier (comm);
+    return err;
+}
+
diff --git a/utils/Makefile.in b/utils/Makefile.in
index 7a90f7b..555c747 100644
--- a/utils/Makefile.in
+++ b/utils/Makefile.in
@@ -104,7 +104,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -112,8 +112,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -340,6 +340,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -416,6 +420,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/utils/adios_lint/Makefile.in b/utils/adios_lint/Makefile.in
index d920b0f..2f32432 100644
--- a/utils/adios_lint/Makefile.in
+++ b/utils/adios_lint/Makefile.in
@@ -101,7 +101,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -109,8 +109,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -329,6 +329,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -405,6 +409,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/utils/adios_list_methods/Makefile.in b/utils/adios_list_methods/Makefile.in
index 72ce646..7aa81e2 100644
--- a/utils/adios_list_methods/Makefile.in
+++ b/utils/adios_list_methods/Makefile.in
@@ -109,7 +109,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -117,8 +117,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -380,6 +380,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -456,6 +460,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/utils/bp2ascii/Makefile.in b/utils/bp2ascii/Makefile.in
index 1e1b32a..b430cb5 100644
--- a/utils/bp2ascii/Makefile.in
+++ b/utils/bp2ascii/Makefile.in
@@ -101,7 +101,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -109,8 +109,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -327,6 +327,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -403,6 +407,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/utils/bp2bp/Makefile.in b/utils/bp2bp/Makefile.in
index 7fb309e..4a7e40a 100644
--- a/utils/bp2bp/Makefile.in
+++ b/utils/bp2bp/Makefile.in
@@ -101,7 +101,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -109,8 +109,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -330,6 +330,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -406,6 +410,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/utils/bp2bp/bp2bp.c b/utils/bp2bp/bp2bp.c
index 4060fdf..0848d4b 100644
--- a/utils/bp2bp/bp2bp.c
+++ b/utils/bp2bp/bp2bp.c
@@ -162,7 +162,7 @@ int main (int argc, char ** argv) {
         /* First create all of the groups */
         // now I need to create this group in the file that will be written
 
-        adios_declare_group(&new_adios_group,f->group_namelist[gidx],"",adios_flag_yes);
+        adios_declare_group(&new_adios_group,f->group_namelist[gidx],"",adios_stat_default);
 
 
         if(strcmp(argv[5],"MPI_LUSTRE")!=0)   //see whether or not the user uses MPI_LUSTRE method
diff --git a/utils/bp2h5/Makefile.in b/utils/bp2h5/Makefile.in
index 5a44569..6ce94d4 100644
--- a/utils/bp2h5/Makefile.in
+++ b/utils/bp2h5/Makefile.in
@@ -101,7 +101,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -109,8 +109,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -332,6 +332,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -408,6 +412,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/utils/bp2h5/bp2h5.c b/utils/bp2h5/bp2h5.c
index fa746bd..c73de90 100644
--- a/utils/bp2h5/bp2h5.c
+++ b/utils/bp2h5/bp2h5.c
@@ -37,7 +37,7 @@
 #include "adios_types.h"
 
 #include "hdf5.h"
-//#include "hdf5_hl.h"
+#include "H5LTpublic.h"
 
 #ifdef DMALLOC
 #include "dmalloc.h"
@@ -94,7 +94,7 @@ int main (int argc, char ** argv)
 {
     int         gidx, i, j;
     MPI_Comm    comm_dummy = MPI_COMM_WORLD;  /* MPI_Comm is defined through adios_read.h */
-    uint64_t    count[MAX_DIMS];
+    hsize_t     count[MAX_DIMS];
     herr_t      h5_err;
     char        h5name[256],aname[256],fname[256];
     int         h5i, level;
diff --git a/utils/bp2ncd/Makefile.in b/utils/bp2ncd/Makefile.in
index 809e5fb..1c39b01 100644
--- a/utils/bp2ncd/Makefile.in
+++ b/utils/bp2ncd/Makefile.in
@@ -101,7 +101,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -109,8 +109,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -330,6 +330,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -406,6 +410,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/utils/bpdiff/Makefile.in b/utils/bpdiff/Makefile.in
index 4669821..fdc6ff9 100644
--- a/utils/bpdiff/Makefile.in
+++ b/utils/bpdiff/Makefile.in
@@ -101,7 +101,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -109,8 +109,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -329,6 +329,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -405,6 +409,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/utils/bpdump/Makefile.in b/utils/bpdump/Makefile.in
index 06e83ff..63509ee 100644
--- a/utils/bpdump/Makefile.in
+++ b/utils/bpdump/Makefile.in
@@ -101,7 +101,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -109,8 +109,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -328,6 +328,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -404,6 +408,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/utils/bpls/Makefile.in b/utils/bpls/Makefile.in
index 161fa49..66dc32d 100644
--- a/utils/bpls/Makefile.in
+++ b/utils/bpls/Makefile.in
@@ -101,7 +101,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -109,8 +109,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -328,6 +328,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -404,6 +408,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/utils/bpls/bpls.c b/utils/bpls/bpls.c
index 4d22be1..a7748f2 100644
--- a/utils/bpls/bpls.c
+++ b/utils/bpls/bpls.c
@@ -453,7 +453,7 @@ void print_file_size(uint64_t size)
     }
     if (r > 511)
         s++;
-    printf ("  file size:     %" PRId64 " %s\n", s, sm[idx]);
+    printf ("  file size:     %" PRIu64 " %s\n", s, sm[idx]);
 }
 
 
@@ -588,9 +588,9 @@ int doList_group (ADIOS_FILE *fp)
                 if (timed) 
                     fprintf(outf, "%d*", vi->nsteps);
                 if (vi->ndim > 0) {
-                    fprintf(outf,"{%" PRId64, vi->dims[0]);
+                    fprintf(outf,"{%" PRIu64, vi->dims[0]);
                     for (j=1; j < vi->ndim; j++) {
-                        fprintf(outf,", %" PRId64, vi->dims[j]);
+                        fprintf(outf,", %" PRIu64, vi->dims[j]);
                     }
                     fprintf(outf,"}");
                 } else {
@@ -763,9 +763,9 @@ int doList_group (ADIOS_FILE *fp)
 #define PRINT_ARRAY64(str, ndim, dims, loopvar) \
     fprintf(outf,"%s",str); \
     if (ndim > 0) { \
-        fprintf(outf,"{%" PRId64, dims[0]); \
+        fprintf(outf,"{%" PRIu64, dims[0]); \
         for (loopvar=1; loopvar < ndim; loopvar++) { \
-            fprintf(outf,", %" PRId64, dims[loopvar]); \
+            fprintf(outf,", %" PRIu64, dims[loopvar]); \
         } \
         fprintf(outf,"}\n"); \
     } else { \
@@ -868,7 +868,7 @@ void printMeshes (ADIOS_FILE  *fp)
                 case ADIOS_MESH_UNSTRUCTURED:
                     fprintf(outf, "unstructured\n");
                     if (mi->unstructured->nvar_points <= 1) {
-                        fprintf(outf, "    npoints:      %" PRId64 "\n", mi->unstructured->npoints);
+                        fprintf(outf, "    npoints:      %" PRIu64 "\n", mi->unstructured->npoints);
                         fprintf(outf, "    points:       single-var: \"%s\"\n", 
                                 mi->unstructured->points[0]);
                     } else {
@@ -1163,7 +1163,7 @@ int getTypeInfo( enum ADIOS_DATATYPES adiosvartype, int* elemsize)
 }
 
 #define PRINT_DIMS64(str, v, n, loopvar) printf("%s = { ", str); \
-    for (loopvar=0; loopvar<n;loopvar++) printf("%" PRId64 " ", v[loopvar]);    \
+    for (loopvar=0; loopvar<n;loopvar++) printf("%" PRIu64 " ", v[loopvar]);    \
 printf("}")
 /** Read data of a variable and print 
  * Return: 0: ok, != 0 on error
@@ -1285,7 +1285,7 @@ int readVar(ADIOS_FILE *fp, ADIOS_VARINFO *vi, const char * name, bool timed)
         sum = sum * (uint64_t) count_t[i];
         actualreadn = actualreadn * readn[i];
     }
-    if (verbose>1) printf("    read %d elements at once, %" PRId64 " in total (nelems=%" PRId64 ")\n", actualreadn, sum, nelems);
+    if (verbose>1) printf("    read %d elements at once, %" PRIu64 " in total (nelems=%" PRIu64 ")\n", actualreadn, sum, nelems);
 
 
     // init s and c
@@ -1335,8 +1335,6 @@ int readVar(ADIOS_FILE *fp, ADIOS_VARINFO *vi, const char * name, bool timed)
             return 11;
         }
 
-        //if (verbose>2) printf("  read %" PRId64 " bytes\n", bytes_read);
-
         // print slice
         print_dataset(data, vi->type, s, c, tdims, ndigits_dims); 
 
@@ -1479,9 +1477,9 @@ void print_slice_info(int ndim, uint64_t *dims, int timed, int nsteps, uint64_t
             isaslice = true;
     }
     if (isaslice) {
-        fprintf(outf,"%c   slice (%" PRId64 ":%" PRId64, commentchar, s[0], s[0]+c[0]-1);
+        fprintf(outf,"%c   slice (%" PRIu64 ":%" PRIu64, commentchar, s[0], s[0]+c[0]-1);
         for (i=1; i<tdim; i++) {
-            fprintf(outf,", %" PRId64 ":%" PRId64, s[i], s[i]+c[i]-1);
+            fprintf(outf,", %" PRIu64 ":%" PRIu64, s[i], s[i]+c[i]-1);
         }
         fprintf(outf,")\n");
     }
@@ -1746,9 +1744,9 @@ int print_dataset(void *data, enum ADIOS_DATATYPES adiosvartype,
         idxstr[0] = '\0'; // empty idx string
         if (nextcol == 0) {
             if (!noindex && tdims > 0) {
-                sprintf(idxstr,"    (%*" PRId64,ndigits[0], ids[0]);
+                sprintf(idxstr,"    (%*" PRIu64,ndigits[0], ids[0]);
                 for (i=1; i<tdims; i++) {
-                    sprintf(buf,",%*" PRId64,ndigits[i],ids[i]);
+                    sprintf(buf,",%*" PRIu64,ndigits[i],ids[i]);
                     strcat(idxstr, buf);
                 }
                 strcat(idxstr,")    ");
@@ -1850,7 +1848,7 @@ void print_decomp(ADIOS_VARINFO *vi)
                 }
                 for (k=0; k < vi->ndim; k++) {
                     if (vi->blockinfo[blockid].count[k]) {
-                    fprintf(outf, "%*" PRId64 ":%*" PRId64,
+                    fprintf(outf, "%*" PRIu64 ":%*" PRIu64,
                             ndigits_dims[k],
                             vi->blockinfo[blockid].start[k],
                             ndigits_dims[k],
diff --git a/utils/bpmeta/Makefile.in b/utils/bpmeta/Makefile.in
index 5736f44..ce6cedb 100644
--- a/utils/bpmeta/Makefile.in
+++ b/utils/bpmeta/Makefile.in
@@ -101,7 +101,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -109,8 +109,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -328,6 +328,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -404,6 +408,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/utils/bpmeta/bpmeta.c b/utils/bpmeta/bpmeta.c
index 6656b7b..0fead88 100644
--- a/utils/bpmeta/bpmeta.c
+++ b/utils/bpmeta/bpmeta.c
@@ -283,11 +283,10 @@ int write_index (struct adios_index_struct_v1 * index, char * fname)
     uint64_t index_start = 0; 
     int f;
     uint16_t flag = 0;
-    ssize_t bytes_written = 0;
+
 
     flag |= ADIOS_VERSION_HAVE_SUBFILE;
-    adios_write_index_v1 (&buffer, &buffer_size, &buffer_offset
-            ,index_start, index);
+    adios_write_index_v1 (&buffer, &buffer_size, &buffer_offset, index_start, index);
     if (verbose>2) {
         printf ("buffer=%p size=%" PRId64 " offset=%" PRId64 "\n", buffer, buffer_size, buffer_offset);
     }
@@ -297,7 +296,7 @@ int write_index (struct adios_index_struct_v1 * index, char * fname)
         printf ("buffer=%p size=%" PRId64 " offset=%" PRId64 "\n", buffer, buffer_size, buffer_offset);
     }
 
-    f = open (fname, O_CREAT | O_RDWR, 0644);
+    f = open (fname, O_CREAT | O_WRONLY | O_TRUNC, 0644);
     if (f == -1)
     {
         fprintf (stderr, "Failed to create metadata file %s: %s\n", 
@@ -305,17 +304,56 @@ int write_index (struct adios_index_struct_v1 * index, char * fname)
         return -1;
     }
 
-    bytes_written = write (f, buffer, (size_t)buffer_offset);
-    if (bytes_written == -1) 
+    uint64_t bytes_written = 0;
+    size_t to_write;
+    const size_t MAX_WRITE_SIZE = 0x7ffff000; // = 2,147,479,552
+
+    if (verbose) {
+        printf ("Total size of metadata to write = %" PRIu64 " bytes\n", buffer_offset);
+    }
+
+    while (bytes_written < buffer_offset)
     {
-        fprintf (stderr, "Failed to write metadata to file %s: %s\n", 
-                 fname, strerror(errno));
-    } 
-    else if (bytes_written != (ssize_t) buffer_offset) 
+        if (buffer_offset - bytes_written > MAX_WRITE_SIZE)
+        {
+            to_write = MAX_WRITE_SIZE;
+        }
+        else
+        {
+            to_write = (size_t) (buffer_offset - bytes_written);
+        }
+    
+        if (verbose>2) {
+            printf ("total to write=%" PRIu64 " write now =%ld written so far=%" PRId64 "\n", 
+            buffer_offset, to_write, bytes_written);
+        }
+
+        ssize_t wrote = write (f, buffer+bytes_written, to_write);
+        bytes_written += wrote;
+
+        if (verbose>2) {
+            printf ("wrote=%ld bytes to file\n", wrote);
+        }
+
+        if (wrote == -1)
+        {
+            fprintf (stderr, "Failed to write metadata to file %s: %s\n",
+                     fname, strerror(errno));
+            break;
+        }
+        else if (wrote != to_write)
+        {
+            fprintf (stderr, "Failed to write (a portion of) metadata of %" PRId64 " bytes to file %s. "
+                    "Only wrote %ld bytes\n", buffer_offset, fname, wrote);
+        }
+    }
+
+    if (bytes_written != (ssize_t) buffer_offset)
     {
-        fprintf (stderr, "Failed to write metadata of %" PRId64 " bytes to file %s. "
+        fprintf (stderr, "Failed to write total metadata of %" PRId64 " bytes to file %s. "
                 "Only wrote %lld bytes\n", buffer_offset, fname, (long long)bytes_written);
     }
+
     close(f);
     return 0;
 }
@@ -383,9 +421,13 @@ int process_subfiles (int tid, int startidx, int endidx)
         adios_parse_vars_index_v1 (b[idx], &new_vars_root, NULL, NULL);
         print_variable_index (tid, new_vars_root);
 
-        adios_posix_read_attributes_index (b[idx]);
-        adios_parse_attributes_index_v1 (b[idx], &new_attrs_root);
-        print_attribute_index (tid, new_attrs_root);
+        if (idx == 0)
+        {
+            // only read attributes from the very first file. we don't merge attributes any more
+            adios_posix_read_attributes_index (b[idx]);
+            adios_parse_attributes_index_v1 (b[idx], &new_attrs_root);
+            print_attribute_index (tid, new_attrs_root);
+        }
 
         adios_merge_index_v1 (subindex[tid], new_pg_root, new_vars_root, new_attrs_root, 1); 
 
diff --git a/utils/bprecover/Makefile.in b/utils/bprecover/Makefile.in
index 946020b..a735477 100644
--- a/utils/bprecover/Makefile.in
+++ b/utils/bprecover/Makefile.in
@@ -101,7 +101,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -109,8 +109,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -329,6 +329,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -405,6 +409,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/utils/bpsplit/Makefile.in b/utils/bpsplit/Makefile.in
index 551cb7b..dd15d7f 100644
--- a/utils/bpsplit/Makefile.in
+++ b/utils/bpsplit/Makefile.in
@@ -101,7 +101,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -109,8 +109,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -344,6 +344,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -420,6 +424,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/utils/bpsplit/bpappend.c b/utils/bpsplit/bpappend.c
index 11d31cd..64163fe 100644
--- a/utils/bpsplit/bpappend.c
+++ b/utils/bpsplit/bpappend.c
@@ -353,6 +353,7 @@ void recalc_offsets(void) {
     while (vg) {
         for (i=0; i < vg->characteristics_count; i++) {
             vg->characteristics[i].offset += out_bp->pg_index_offset;
+            vg->characteristics[i].payload_offset += out_bp->pg_index_offset;
         }
         vg = vg->next;
     }
@@ -362,6 +363,7 @@ void recalc_offsets(void) {
     while (ag) {
         for (i=0; i < ag->characteristics_count; i++) {
             ag->characteristics[i].offset += out_bp->pg_index_offset;
+            ag->characteristics[i].payload_offset += out_bp->pg_index_offset;
         }
         ag = ag->next;
     }
diff --git a/utils/bpsplit/bpsplit.c b/utils/bpsplit/bpsplit.c
index 8a20ba9..31b0d28 100644
--- a/utils/bpsplit/bpsplit.c
+++ b/utils/bpsplit/bpsplit.c
@@ -462,6 +462,7 @@ void weed_out_indexes(void) {
                      vg->characteristics[i].offset <= out_offset_end) {
                 // recalc offset for output offset
                 vg->characteristics[i].offset -= out_offset_start; 
+                vg->characteristics[i].payload_offset -= out_offset_start;
                 count++;
             } else
                 break;
@@ -498,6 +499,7 @@ void weed_out_indexes(void) {
                      ag->characteristics[i].offset <= out_offset_end) {
                 // recalc offset for output offset
                 ag->characteristics[i].offset -= out_offset_start; 
+                ag->characteristics[i].payload_offset -= out_offset_start;
                 count++;
             } else
                 break;
diff --git a/utils/fastbit/Makefile.in b/utils/fastbit/Makefile.in
index 1a32496..8de2693 100644
--- a/utils/fastbit/Makefile.in
+++ b/utils/fastbit/Makefile.in
@@ -101,7 +101,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -109,8 +109,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -330,6 +330,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -406,6 +410,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/utils/fastbit/adios_index_fastbit.c b/utils/fastbit/adios_index_fastbit.c
index 127b7ac..3a78925 100644
--- a/utils/fastbit/adios_index_fastbit.c
+++ b/utils/fastbit/adios_index_fastbit.c
@@ -280,7 +280,7 @@ void onSelection(int rank, ADIOS_FILE* f, ADIOS_VARINFO* v, int timestep, char*
       sum_nb += nb; sum_nk += nk, sum_no += no;
 
       adios_allocate_buffer (ADIOS_BUFFER_ALLOC_NOW, 500); // +5MB for extra room in buffer
-      adios_declare_group (&gAdios_group, gGroupNameFastbitIdx, "", adios_flag_yes);
+      adios_declare_group (&gAdios_group, gGroupNameFastbitIdx, "", adios_stat_default);
       adios_select_method (gAdios_group, "MPI", "", "");
 
       adios_open (&gAdios_write_file, gGroupNameFastbitIdx, gIdxFileName, "w", MPI_COMM_WORLD);
@@ -790,14 +790,14 @@ int main (int argc, char** argv)
   
   /*
   adios_allocate_buffer (ADIOS_BUFFER_ALLOC_NOW, (f->file_size)*2/1048576 + 5); // +5MB for extra room in buffer
-  adios_declare_group (&gAdios_group, gGroupNameFastbitIdx, "", adios_flag_yes);
+  adios_declare_group (&gAdios_group, gGroupNameFastbitIdx, "", adios_stat_default);
   adios_select_method (gAdios_group, "MPI", "", "");
   */
   gIdxFileName = fastbit_adios_util_getFastbitIndexFileName(argv[1]);
   unlink(gIdxFileName);
 
       //adios_allocate_buffer (ADIOS_BUFFER_ALLOC_NOW, 500); // +5MB for extra room in buffer
-      adios_declare_group (&gAdios_group, gGroupNameFastbitIdx, "", adios_flag_yes);
+      adios_declare_group (&gAdios_group, gGroupNameFastbitIdx, "", adios_stat_default);
       adios_select_method (gAdios_group, "MPI", "", "");
 
       adios_open (&gAdios_write_file, gGroupNameFastbitIdx, gIdxFileName, "w", MPI_COMM_WORLD);
diff --git a/utils/gpp/Makefile.in b/utils/gpp/Makefile.in
index 05e5992..46bb493 100644
--- a/utils/gpp/Makefile.in
+++ b/utils/gpp/Makefile.in
@@ -102,7 +102,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -110,8 +110,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -306,6 +306,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -382,6 +386,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/utils/gpp/gpp.py b/utils/gpp/gpp.py
index 01c9c9c..6b73bab 100755
--- a/utils/gpp/gpp.py
+++ b/utils/gpp/gpp.py
@@ -66,17 +66,17 @@ def get_c_groupsize_code (group):
 
 def get_fortran_groupsize_code (group):
     #print('Get Fortran Groupsize code for group "'+group.get_name()+'"')
-    groupsize_code_string = ''
-    groupsize_code_string += 'adios_groupsize = '
+    groupsize_code_string = 'adios_groupsize = 0\n'
+    groupsize_code_string += 'adios_groupsize = adios_groupsize + '
     for v in group.get_vars():
         #print('  count variable "'+v.get_fullpath()+'"')
         if (v.is_scalar() ):
             if v.get_type() != 'string':
-                groupsize_code_string += ('%d' % type_mapper.get_size (v.get_type() ) + ' &\n                + ')
+                groupsize_code_string += ('%d_8' % type_mapper.get_size (v.get_type() ) + ' &\n                + ')
             else:
                 groupsize_code_string += ('len_trim(' + v.get_gwrite() + ')' + ' &\n                + ')
         else:
-            groupsize_code_string += ('%d * ' % type_mapper.get_size (v.get_type() ) )
+            groupsize_code_string += ('%d_8 * ' % type_mapper.get_size (v.get_type() ) )
 
             for d in v.get_dimensions():
                 #print('  count dim "'+d+'"')
diff --git a/utils/gpp/gpp.py.in b/utils/gpp/gpp.py.in
index cbb0d88..5108952 100755
--- a/utils/gpp/gpp.py.in
+++ b/utils/gpp/gpp.py.in
@@ -66,17 +66,17 @@ def get_c_groupsize_code (group):
 
 def get_fortran_groupsize_code (group):
     #print('Get Fortran Groupsize code for group "'+group.get_name()+'"')
-    groupsize_code_string = ''
-    groupsize_code_string += 'adios_groupsize = '
+    groupsize_code_string = 'adios_groupsize = 0\n'
+    groupsize_code_string += 'adios_groupsize = adios_groupsize + '
     for v in group.get_vars():
         #print('  count variable "'+v.get_fullpath()+'"')
         if (v.is_scalar() ):
             if v.get_type() != 'string':
-                groupsize_code_string += ('%d' % type_mapper.get_size (v.get_type() ) + ' &\n                + ')
+                groupsize_code_string += ('%d_8' % type_mapper.get_size (v.get_type() ) + ' &\n                + ')
             else:
                 groupsize_code_string += ('len_trim(' + v.get_gwrite() + ')' + ' &\n                + ')
         else:
-            groupsize_code_string += ('%d * ' % type_mapper.get_size (v.get_type() ) )
+            groupsize_code_string += ('%d_8 * ' % type_mapper.get_size (v.get_type() ) )
 
             for d in v.get_dimensions():
                 #print('  count dim "'+d+'"')
diff --git a/utils/skel/Makefile.in b/utils/skel/Makefile.in
index aacf829..fc6b93c 100644
--- a/utils/skel/Makefile.in
+++ b/utils/skel/Makefile.in
@@ -104,7 +104,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -112,8 +112,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -369,6 +369,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -445,6 +449,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/utils/skel/etc/Makefile.in b/utils/skel/etc/Makefile.in
index 036e92f..f0d2745 100644
--- a/utils/skel/etc/Makefile.in
+++ b/utils/skel/etc/Makefile.in
@@ -100,7 +100,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -108,8 +108,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -303,6 +303,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -379,6 +383,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/utils/skel/etc/templates/source_write_c.tmpl b/utils/skel/etc/templates/source_write_c.tmpl
index 73eaf5a..48e06da 100644
--- a/utils/skel/etc/templates/source_write_c.tmpl
+++ b/utils/skel/etc/templates/source_write_c.tmpl
@@ -65,7 +65,7 @@ int64_t skel_adios_group;
 int color = skel_mpi_rank / 2;
 
 adios_allocate_buffer (ADIOS_BUFFER_ALLOC_NOW, $bpy.get_buf_size_mb());
-adios_declare_group (&skel_adios_group, "${bpy.get_group_name()}", "", adios_flag_no);
+adios_declare_group (&skel_adios_group, "${bpy.get_group_name()}", "", adios_stat_no);
 
 char paramstring[<%= len(self.bpy.get_parameters()) + 64 %>];
 //sprintf (paramstring, "color:%i;%s", color, "$bpy.get_parameters()");
diff --git a/utils/skel/src/Makefile.in b/utils/skel/src/Makefile.in
index 8d4cddc..6c8dce8 100644
--- a/utils/skel/src/Makefile.in
+++ b/utils/skel/src/Makefile.in
@@ -103,7 +103,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -111,8 +111,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -363,6 +363,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -439,6 +443,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/utils/skeldump/Makefile.in b/utils/skeldump/Makefile.in
index 5439dbc..01891c1 100644
--- a/utils/skeldump/Makefile.in
+++ b/utils/skeldump/Makefile.in
@@ -101,7 +101,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
 	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
-	$(top_srcdir)/config/ac_mxml.m4 \
+	$(top_srcdir)/config/ac_lz4.m4 $(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
@@ -109,8 +109,8 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
 	$(top_srcdir)/config/ac_pami.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
-	$(top_srcdir)/config/ac_szip.m4 $(top_srcdir)/config/ac_zfp.m4 \
-	$(top_srcdir)/config/ac_zlib.m4 \
+	$(top_srcdir)/config/ac_sz.m4 $(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zfp.m4 $(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/config/libtool.m4 \
@@ -328,6 +328,10 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 LUSTRE_CPPFLAGS = @LUSTRE_CPPFLAGS@
 LUSTRE_LDFLAGS = @LUSTRE_LDFLAGS@
 LUSTRE_LIBS = @LUSTRE_LIBS@
+LZ4_CFLAGS = @LZ4_CFLAGS@
+LZ4_CPPFLAGS = @LZ4_CPPFLAGS@
+LZ4_LDFLAGS = @LZ4_LDFLAGS@
+LZ4_LIBS = @LZ4_LIBS@
 MACRODEFFLAG = @MACRODEFFLAG@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -404,6 +408,9 @@ STRIP = @STRIP@
 SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
 SZIP_LDFLAGS = @SZIP_LDFLAGS@
 SZIP_LIBS = @SZIP_LIBS@
+SZ_CPPFLAGS = @SZ_CPPFLAGS@
+SZ_LDFLAGS = @SZ_LDFLAGS@
+SZ_LIBS = @SZ_LIBS@
 VERSION = @VERSION@
 VERSION_MAJOR = @VERSION_MAJOR@
 VERSION_MICRO = @VERSION_MICRO@
diff --git a/wrappers/numpy/adios.cpp b/wrappers/numpy/adios.cpp
index dc001f0..db3944b 100644
--- a/wrappers/numpy/adios.cpp
+++ b/wrappers/numpy/adios.cpp
@@ -1,4 +1,4 @@
-/* Generated by Cython 0.24 */
+/* Generated by Cython 0.25.2 */
 
 #define PY_SSIZE_T_CLEAN
 #include "Python.h"
@@ -7,7 +7,7 @@
 #elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03020000)
     #error Cython requires Python 2.6+ or Python 3.2+.
 #else
-#define CYTHON_ABI "0_24"
+#define CYTHON_ABI "0_25_2"
 #include <stddef.h>
 #ifndef offsetof
   #define offsetof(type, member) ( (size_t) & ((type*)0) -> member )
@@ -29,6 +29,11 @@
 #ifndef DL_EXPORT
   #define DL_EXPORT(t) t
 #endif
+#ifndef HAVE_LONG_LONG
+  #if PY_VERSION_HEX >= 0x03030000 || (PY_MAJOR_VERSION == 2 && PY_VERSION_HEX >= 0x02070000)
+    #define HAVE_LONG_LONG
+  #endif
+#endif
 #ifndef PY_LONG_LONG
   #define PY_LONG_LONG LONG_LONG
 #endif
@@ -37,13 +42,110 @@
 #endif
 #ifdef PYPY_VERSION
   #define CYTHON_COMPILING_IN_PYPY 1
+  #define CYTHON_COMPILING_IN_PYSTON 0
   #define CYTHON_COMPILING_IN_CPYTHON 0
+  #undef CYTHON_USE_TYPE_SLOTS
+  #define CYTHON_USE_TYPE_SLOTS 0
+  #undef CYTHON_USE_ASYNC_SLOTS
+  #define CYTHON_USE_ASYNC_SLOTS 0
+  #undef CYTHON_USE_PYLIST_INTERNALS
+  #define CYTHON_USE_PYLIST_INTERNALS 0
+  #undef CYTHON_USE_UNICODE_INTERNALS
+  #define CYTHON_USE_UNICODE_INTERNALS 0
+  #undef CYTHON_USE_UNICODE_WRITER
+  #define CYTHON_USE_UNICODE_WRITER 0
+  #undef CYTHON_USE_PYLONG_INTERNALS
+  #define CYTHON_USE_PYLONG_INTERNALS 0
+  #undef CYTHON_AVOID_BORROWED_REFS
+  #define CYTHON_AVOID_BORROWED_REFS 1
+  #undef CYTHON_ASSUME_SAFE_MACROS
+  #define CYTHON_ASSUME_SAFE_MACROS 0
+  #undef CYTHON_UNPACK_METHODS
+  #define CYTHON_UNPACK_METHODS 0
+  #undef CYTHON_FAST_THREAD_STATE
+  #define CYTHON_FAST_THREAD_STATE 0
+  #undef CYTHON_FAST_PYCALL
+  #define CYTHON_FAST_PYCALL 0
+#elif defined(PYSTON_VERSION)
+  #define CYTHON_COMPILING_IN_PYPY 0
+  #define CYTHON_COMPILING_IN_PYSTON 1
+  #define CYTHON_COMPILING_IN_CPYTHON 0
+  #ifndef CYTHON_USE_TYPE_SLOTS
+    #define CYTHON_USE_TYPE_SLOTS 1
+  #endif
+  #undef CYTHON_USE_ASYNC_SLOTS
+  #define CYTHON_USE_ASYNC_SLOTS 0
+  #undef CYTHON_USE_PYLIST_INTERNALS
+  #define CYTHON_USE_PYLIST_INTERNALS 0
+  #ifndef CYTHON_USE_UNICODE_INTERNALS
+    #define CYTHON_USE_UNICODE_INTERNALS 1
+  #endif
+  #undef CYTHON_USE_UNICODE_WRITER
+  #define CYTHON_USE_UNICODE_WRITER 0
+  #undef CYTHON_USE_PYLONG_INTERNALS
+  #define CYTHON_USE_PYLONG_INTERNALS 0
+  #ifndef CYTHON_AVOID_BORROWED_REFS
+    #define CYTHON_AVOID_BORROWED_REFS 0
+  #endif
+  #ifndef CYTHON_ASSUME_SAFE_MACROS
+    #define CYTHON_ASSUME_SAFE_MACROS 1
+  #endif
+  #ifndef CYTHON_UNPACK_METHODS
+    #define CYTHON_UNPACK_METHODS 1
+  #endif
+  #undef CYTHON_FAST_THREAD_STATE
+  #define CYTHON_FAST_THREAD_STATE 0
+  #undef CYTHON_FAST_PYCALL
+  #define CYTHON_FAST_PYCALL 0
 #else
   #define CYTHON_COMPILING_IN_PYPY 0
+  #define CYTHON_COMPILING_IN_PYSTON 0
   #define CYTHON_COMPILING_IN_CPYTHON 1
+  #ifndef CYTHON_USE_TYPE_SLOTS
+    #define CYTHON_USE_TYPE_SLOTS 1
+  #endif
+  #if PY_MAJOR_VERSION < 3
+    #undef CYTHON_USE_ASYNC_SLOTS
+    #define CYTHON_USE_ASYNC_SLOTS 0
+  #elif !defined(CYTHON_USE_ASYNC_SLOTS)
+    #define CYTHON_USE_ASYNC_SLOTS 1
+  #endif
+  #if PY_VERSION_HEX < 0x02070000
+    #undef CYTHON_USE_PYLONG_INTERNALS
+    #define CYTHON_USE_PYLONG_INTERNALS 0
+  #elif !defined(CYTHON_USE_PYLONG_INTERNALS)
+    #define CYTHON_USE_PYLONG_INTERNALS 1
+  #endif
+  #ifndef CYTHON_USE_PYLIST_INTERNALS
+    #define CYTHON_USE_PYLIST_INTERNALS 1
+  #endif
+  #ifndef CYTHON_USE_UNICODE_INTERNALS
+    #define CYTHON_USE_UNICODE_INTERNALS 1
+  #endif
+  #if PY_VERSION_HEX < 0x030300F0
+    #undef CYTHON_USE_UNICODE_WRITER
+    #define CYTHON_USE_UNICODE_WRITER 0
+  #elif !defined(CYTHON_USE_UNICODE_WRITER)
+    #define CYTHON_USE_UNICODE_WRITER 1
+  #endif
+  #ifndef CYTHON_AVOID_BORROWED_REFS
+    #define CYTHON_AVOID_BORROWED_REFS 0
+  #endif
+  #ifndef CYTHON_ASSUME_SAFE_MACROS
+    #define CYTHON_ASSUME_SAFE_MACROS 1
+  #endif
+  #ifndef CYTHON_UNPACK_METHODS
+    #define CYTHON_UNPACK_METHODS 1
+  #endif
+  #ifndef CYTHON_FAST_THREAD_STATE
+    #define CYTHON_FAST_THREAD_STATE 1
+  #endif
+  #ifndef CYTHON_FAST_PYCALL
+    #define CYTHON_FAST_PYCALL 1
+  #endif
 #endif
-#if !defined(CYTHON_USE_PYLONG_INTERNALS) && CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x02070000
-  #define CYTHON_USE_PYLONG_INTERNALS 1
+#if !defined(CYTHON_FAST_PYCCALL)
+#define CYTHON_FAST_PYCCALL  (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1)
 #endif
 #if CYTHON_USE_PYLONG_INTERNALS
   #include "longintrepr.h"
@@ -79,24 +181,44 @@
 #ifndef Py_TPFLAGS_HAVE_FINALIZE
   #define Py_TPFLAGS_HAVE_FINALIZE 0
 #endif
+#ifndef METH_FASTCALL
+  #define METH_FASTCALL 0x80
+  typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject **args,
+                                              Py_ssize_t nargs, PyObject *kwnames);
+#else
+  #define __Pyx_PyCFunctionFast _PyCFunctionFast
+#endif
+#if CYTHON_FAST_PYCCALL
+#define __Pyx_PyFastCFunction_Check(func)\
+    ((PyCFunction_Check(func) && (METH_FASTCALL == (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST)))))
+#else
+#define __Pyx_PyFastCFunction_Check(func) 0
+#endif
 #if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND)
   #define CYTHON_PEP393_ENABLED 1
   #define __Pyx_PyUnicode_READY(op)       (likely(PyUnicode_IS_READY(op)) ?\
                                               0 : _PyUnicode_Ready((PyObject *)(op)))
   #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_LENGTH(u)
   #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i)
+  #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u)   PyUnicode_MAX_CHAR_VALUE(u)
   #define __Pyx_PyUnicode_KIND(u)         PyUnicode_KIND(u)
   #define __Pyx_PyUnicode_DATA(u)         PyUnicode_DATA(u)
   #define __Pyx_PyUnicode_READ(k, d, i)   PyUnicode_READ(k, d, i)
+  #define __Pyx_PyUnicode_WRITE(k, d, i, ch)  PyUnicode_WRITE(k, d, i, ch)
   #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u)))
 #else
   #define CYTHON_PEP393_ENABLED 0
+  #define PyUnicode_1BYTE_KIND  1
+  #define PyUnicode_2BYTE_KIND  2
+  #define PyUnicode_4BYTE_KIND  4
   #define __Pyx_PyUnicode_READY(op)       (0)
   #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_SIZE(u)
   #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i]))
+  #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u)   ((sizeof(Py_UNICODE) == 2) ? 65535 : 1114111)
   #define __Pyx_PyUnicode_KIND(u)         (sizeof(Py_UNICODE))
   #define __Pyx_PyUnicode_DATA(u)         ((void*)PyUnicode_AS_UNICODE(u))
   #define __Pyx_PyUnicode_READ(k, d, i)   ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i]))
+  #define __Pyx_PyUnicode_WRITE(k, d, i, ch)  (((void)(k)), ((Py_UNICODE*)d)[i] = ch)
   #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != PyUnicode_GET_SIZE(u))
 #endif
 #if CYTHON_COMPILING_IN_PYPY
@@ -110,6 +232,9 @@
 #if CYTHON_COMPILING_IN_PYPY && !defined(PyUnicode_Contains)
   #define PyUnicode_Contains(u, s)  PySequence_Contains(u, s)
 #endif
+#if CYTHON_COMPILING_IN_PYPY && !defined(PyByteArray_Check)
+  #define PyByteArray_Check(obj)  PyObject_TypeCheck(obj, &PyByteArray_Type)
+#endif
 #if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Format)
   #define PyObject_Format(obj, fmt)  PyObject_CallMethod(obj, "__format__", "O", fmt)
 #endif
@@ -118,6 +243,13 @@
   #define PyObject_Free(p)     PyMem_Free(p)
   #define PyObject_Realloc(p)  PyMem_Realloc(p)
 #endif
+#if CYTHON_COMPILING_IN_PYSTON
+  #define __Pyx_PyCode_HasFreeVars(co)  PyCode_HasFreeVars(co)
+  #define __Pyx_PyFrame_SetLineNumber(frame, lineno) PyFrame_SetLineNumber(frame, lineno)
+#else
+  #define __Pyx_PyCode_HasFreeVars(co)  (PyCode_GetNumFree(co) > 0)
+  #define __Pyx_PyFrame_SetLineNumber(frame, lineno)  (frame)->f_lineno = (lineno)
+#endif
 #define __Pyx_PyString_FormatSafe(a, b)   ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b))
 #define __Pyx_PyUnicode_FormatSafe(a, b)  ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b))
 #if PY_MAJOR_VERSION >= 3
@@ -146,6 +278,7 @@
   #define PySet_CheckExact(obj)        (Py_TYPE(obj) == &PySet_Type)
 #endif
 #define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type)
+#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception)
 #if PY_MAJOR_VERSION >= 3
   #define PyIntObject                  PyLongObject
   #define PyInt_Type                   PyLong_Type
@@ -184,18 +317,20 @@
 #else
   #define __Pyx_PyMethod_New(func, self, klass) PyMethod_New(func, self, klass)
 #endif
-#if PY_VERSION_HEX >= 0x030500B1
-#define __Pyx_PyAsyncMethodsStruct PyAsyncMethods
-#define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async)
-#elif CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
-typedef struct {
-    unaryfunc am_await;
-    unaryfunc am_aiter;
-    unaryfunc am_anext;
-} __Pyx_PyAsyncMethodsStruct;
-#define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved))
+#if CYTHON_USE_ASYNC_SLOTS
+  #if PY_VERSION_HEX >= 0x030500B1
+    #define __Pyx_PyAsyncMethodsStruct PyAsyncMethods
+    #define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async)
+  #else
+    typedef struct {
+        unaryfunc am_await;
+        unaryfunc am_aiter;
+        unaryfunc am_anext;
+    } __Pyx_PyAsyncMethodsStruct;
+    #define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved))
+  #endif
 #else
-#define __Pyx_PyType_AsAsync(obj) NULL
+  #define __Pyx_PyType_AsAsync(obj) NULL
 #endif
 #ifndef CYTHON_RESTRICT
   #if defined(__GNUC__)
@@ -208,13 +343,44 @@ typedef struct {
     #define CYTHON_RESTRICT
   #endif
 #endif
+#ifndef CYTHON_UNUSED
+# if defined(__GNUC__)
+#   if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
+#     define CYTHON_UNUSED __attribute__ ((__unused__))
+#   else
+#     define CYTHON_UNUSED
+#   endif
+# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER))
+#   define CYTHON_UNUSED __attribute__ ((__unused__))
+# else
+#   define CYTHON_UNUSED
+# endif
+#endif
+#ifndef CYTHON_MAYBE_UNUSED_VAR
+#  if defined(__cplusplus)
+     template<class T> void CYTHON_MAYBE_UNUSED_VAR( const T& ) { }
+#  else
+#    define CYTHON_MAYBE_UNUSED_VAR(x) (void)(x)
+#  endif
+#endif
+#ifndef CYTHON_NCP_UNUSED
+# if CYTHON_COMPILING_IN_CPYTHON
+#  define CYTHON_NCP_UNUSED
+# else
+#  define CYTHON_NCP_UNUSED CYTHON_UNUSED
+# endif
+#endif
 #define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None)
 
 #ifndef __cplusplus
   #error "Cython files generated with the C++ option must be compiled with a C++ compiler."
 #endif
 #ifndef CYTHON_INLINE
-  #define CYTHON_INLINE inline
+  #if defined(__clang__)
+    #define CYTHON_INLINE __inline__ __attribute__ ((__unused__))
+  #else
+    #define CYTHON_INLINE inline
+  #endif
 #endif
 template<typename T>
 void __Pyx_call_destructor(T& x) {
@@ -226,7 +392,10 @@ class __Pyx_FakeReference {
     __Pyx_FakeReference() : ptr(NULL) { }
     __Pyx_FakeReference(const T& ref) : ptr(const_cast<T*>(&ref)) { }
     T *operator->() { return ptr; }
+    T *operator&() { return ptr; }
     operator T&() { return *ptr; }
+    template<typename U> bool operator ==(U other) { return *ptr == other; }
+    template<typename U> bool operator !=(U other) { return *ptr != other; }
   private:
     T *ptr;
 };
@@ -244,6 +413,11 @@ static CYTHON_INLINE float __PYX_NAN() {
   return value;
 }
 #endif
+#if defined(__CYGWIN__) && defined(_LDBL_EQ_DBL)
+#define __Pyx_truncl trunc
+#else
+#define __Pyx_truncl truncl
+#endif
 
 
 #define __PYX_ERR(f_index, lineno, Ln_error) \
@@ -270,11 +444,12 @@ static CYTHON_INLINE float __PYX_NAN() {
 #define __PYX_HAVE__adios
 #define __PYX_HAVE_API__adios
 #include "string.h"
-#include "stdio.h"
-#include "stdlib.h"
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
 #include "numpy/arrayobject.h"
 #include "numpy/ufuncobject.h"
-#include "stdint.h"
+#include <stdint.h>
 #include "adios_types.h"
 #include "adios.h"
 #include "adios_selection.h"
@@ -287,26 +462,6 @@ static CYTHON_INLINE float __PYX_NAN() {
 #define CYTHON_WITHOUT_ASSERTIONS
 #endif
 
-#ifndef CYTHON_UNUSED
-# if defined(__GNUC__)
-#   if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
-#     define CYTHON_UNUSED __attribute__ ((__unused__))
-#   else
-#     define CYTHON_UNUSED
-#   endif
-# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER))
-#   define CYTHON_UNUSED __attribute__ ((__unused__))
-# else
-#   define CYTHON_UNUSED
-# endif
-#endif
-#ifndef CYTHON_NCP_UNUSED
-# if CYTHON_COMPILING_IN_CPYTHON
-#  define CYTHON_NCP_UNUSED
-# else
-#  define CYTHON_NCP_UNUSED CYTHON_UNUSED
-# endif
-#endif
 typedef struct {PyObject **p; const char *s; const Py_ssize_t n; const char* encoding;
                 const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry;
 
@@ -384,7 +539,7 @@ static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*);
 static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x);
 static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*);
 static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t);
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_ASSUME_SAFE_MACROS
 #define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x))
 #else
 #define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x)
@@ -492,7 +647,7 @@ static int __pyx_clineno = 0;
 static const char * __pyx_cfilenm= __FILE__;
 static const char *__pyx_filename;
 
-/* None.proto */
+/* Header.proto */
 #if !defined(CYTHON_CCOMPLEX)
   #if defined(__cplusplus)
     #define CYTHON_CCOMPLEX 1
@@ -709,7 +864,7 @@ typedef npy_double __pyx_t_5numpy_double_t;
  * ctypedef npy_cfloat      cfloat_t
  */
 typedef npy_longdouble __pyx_t_5numpy_longdouble_t;
-/* None.proto */
+/* Declarations.proto */
 #if CYTHON_CCOMPLEX
   #ifdef __cplusplus
     typedef ::std::complex< float > __pyx_t_float_complex;
@@ -719,8 +874,9 @@ typedef npy_longdouble __pyx_t_5numpy_longdouble_t;
 #else
     typedef struct { float real, imag; } __pyx_t_float_complex;
 #endif
+static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float, float);
 
-/* None.proto */
+/* Declarations.proto */
 #if CYTHON_CCOMPLEX
   #ifdef __cplusplus
     typedef ::std::complex< double > __pyx_t_double_complex;
@@ -730,6 +886,7 @@ typedef npy_longdouble __pyx_t_5numpy_longdouble_t;
 #else
     typedef struct { double real, imag; } __pyx_t_double_complex;
 #endif
+static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double, double);
 
 
 /*--- Type declarations ---*/
@@ -795,7 +952,7 @@ struct __pyx_opt_args_5adios_3var_read_points;
 struct __pyx_opt_args_5adios_3var_read_writeblock;
 struct __pyx_opt_args_5adios_3var_read;
 
-/* "adios.pyx":465
+/* "adios.pyx":473
  * cdef MPI_Comm read_init_comm
  * 
  * cpdef init(str config, MPI_Comm comm = MPI_COMM_WORLD):             # <<<<<<<<<<<<<<
@@ -807,7 +964,7 @@ struct __pyx_opt_args_5adios_init {
   MPI_Comm comm;
 };
 
-/* "adios.pyx":470
+/* "adios.pyx":478
  *     return adios_init(s2b(config), init_comm)
  * 
  * cpdef int64_t open(str group_name,             # <<<<<<<<<<<<<<
@@ -819,7 +976,7 @@ struct __pyx_opt_args_5adios_open {
   MPI_Comm comm;
 };
 
-/* "adios.pyx":485
+/* "adios.pyx":493
  *     return total_size
  * 
  * cpdef int write (int64_t fd_p, str name, val, dtype=None):             # <<<<<<<<<<<<<<
@@ -831,7 +988,7 @@ struct __pyx_opt_args_5adios_write {
   PyObject *dtype;
 };
 
-/* "adios.pyx":525
+/* "adios.pyx":533
  *     return adios_close(fd_p)
  * 
  * cpdef int finalize(int mype = 0):             # <<<<<<<<<<<<<<
@@ -843,7 +1000,7 @@ struct __pyx_opt_args_5adios_finalize {
   int mype;
 };
 
-/* "adios.pyx":532
+/* "adios.pyx":540
  * ## ====================
  * 
  * cpdef int init_noxml(MPI_Comm comm = MPI_COMM_WORLD):             # <<<<<<<<<<<<<<
@@ -855,7 +1012,7 @@ struct __pyx_opt_args_5adios_init_noxml {
   MPI_Comm comm;
 };
 
-/* "adios.pyx":542
+/* "adios.pyx":550
  *                                  buffer_size)
  * 
  * cpdef int64_t declare_group(str name,             # <<<<<<<<<<<<<<
@@ -868,7 +1025,7 @@ struct __pyx_opt_args_5adios_declare_group {
   int stats;
 };
 
-/* "adios.pyx":552
+/* "adios.pyx":560
  *     return id
  * 
  * cpdef int64_t define_var(int64_t group_id,             # <<<<<<<<<<<<<<
@@ -882,7 +1039,7 @@ struct __pyx_opt_args_5adios_define_var {
   PyObject *local_offsets;
 };
 
-/* "adios.pyx":719
+/* "adios.pyx":727
  *                                         <void *> val_.data)
  * 
  * cpdef int select_method (int64_t group,             # <<<<<<<<<<<<<<
@@ -895,7 +1052,7 @@ struct __pyx_opt_args_5adios_select_method {
   PyObject *base_path;
 };
 
-/* "adios.pyx":746
+/* "adios.pyx":754
  * ## ====================
  * 
  * cpdef np.dtype adios2npdtype(ADIOS_DATATYPES t, int strlen = 1):             # <<<<<<<<<<<<<<
@@ -907,7 +1064,7 @@ struct __pyx_opt_args_5adios_adios2npdtype {
   int strlen;
 };
 
-/* "adios.pyx":875
+/* "adios.pyx":883
  * 
  * """ Call adios_read_init_method """
  * cpdef int read_init(str method_name = "BP",             # <<<<<<<<<<<<<<
@@ -921,7 +1078,7 @@ struct __pyx_opt_args_5adios_read_init {
   PyObject *parameters;
 };
 
-/* "adios.pyx":885
+/* "adios.pyx":893
  * 
  * """ Call adios_read_finalize_method """
  * cpdef int read_finalize(str method_name = "BP"):             # <<<<<<<<<<<<<<
@@ -933,7 +1090,7 @@ struct __pyx_opt_args_5adios_read_finalize {
   PyObject *method_name;
 };
 
-/* "adios.pyx":1062
+/* "adios.pyx":1070
  *         adios_release_step(self.fp)
  * 
  *     cpdef advance(self, int last = 0, float timeout_sec = 0.0):             # <<<<<<<<<<<<<<
@@ -946,7 +1103,7 @@ struct __pyx_opt_args_5adios_4file_advance {
   float timeout_sec;
 };
 
-/* "adios.pyx":1360
+/* "adios.pyx":1368
  *         self.nsteps = self.vp.nsteps
  * 
  *     cpdef read_points(self, tuple points = (), from_steps = None, nsteps = None):             # <<<<<<<<<<<<<<
@@ -960,7 +1117,7 @@ struct __pyx_opt_args_5adios_3var_read_points {
   PyObject *nsteps;
 };
 
-/* "adios.pyx":1416
+/* "adios.pyx":1424
  *         return var
  * 
  *     cpdef read_writeblock(self, int rank, from_steps = None, nsteps = None):             # <<<<<<<<<<<<<<
@@ -973,7 +1130,7 @@ struct __pyx_opt_args_5adios_3var_read_writeblock {
   PyObject *nsteps;
 };
 
-/* "adios.pyx":1457
+/* "adios.pyx":1465
  *         return var
  * 
  *     cpdef read(self, tuple offset = (), tuple count = (), tuple scalar = (),             # <<<<<<<<<<<<<<
@@ -991,7 +1148,7 @@ struct __pyx_opt_args_5adios_3var_read {
   PyObject *step_scalar;
 };
 
-/* "adios.pyx":890
+/* "adios.pyx":898
  * 
  * ## dict for handling '/' prefix
  * cdef class softdict(dict):             # <<<<<<<<<<<<<<
@@ -1003,7 +1160,7 @@ struct __pyx_obj_5adios_softdict {
 };
 
 
-/* "adios.pyx":914
+/* "adios.pyx":922
  * 
  * ## Python class for ADIOS_FILE structure
  * cdef class file(dict):             # <<<<<<<<<<<<<<
@@ -1030,7 +1187,7 @@ struct __pyx_obj_5adios_file {
 };
 
 
-/* "adios.pyx":1186
+/* "adios.pyx":1194
  *         return list(s-set(['']))
  * 
  * cdef class blockinfo(object):             # <<<<<<<<<<<<<<
@@ -1046,7 +1203,7 @@ struct __pyx_obj_5adios_blockinfo {
 };
 
 
-/* "adios.pyx":1221
+/* "adios.pyx":1229
  *                 self.count)
  * 
  * cdef class var(dict):             # <<<<<<<<<<<<<<
@@ -1069,7 +1226,7 @@ struct __pyx_obj_5adios_var {
 };
 
 
-/* "adios.pyx":1686
+/* "adios.pyx":1694
  *         return self.attrs.keys()
  * 
  * cdef class attr(object):             # <<<<<<<<<<<<<<
@@ -1085,7 +1242,7 @@ struct __pyx_obj_5adios_attr {
 };
 
 
-/* "adios.pyx":1772
+/* "adios.pyx":1780
  *                (self.name, self.dtype, self.value)
  * 
  * cdef class group(dict):             # <<<<<<<<<<<<<<
@@ -1101,7 +1258,7 @@ struct __pyx_obj_5adios_group {
 };
 
 
-/* "adios.pyx":1884
+/* "adios.pyx":1892
  * 
  * ## Helper dict
  * cdef class smartdict(dict):             # <<<<<<<<<<<<<<
@@ -1114,7 +1271,7 @@ struct __pyx_obj_5adios_smartdict {
 };
 
 
-/* "adios.pyx":1896
+/* "adios.pyx":1904
  *             self.factory(key, value)
  * 
  * cdef class writer(object):             # <<<<<<<<<<<<<<
@@ -1131,13 +1288,14 @@ struct __pyx_obj_5adios_writer {
   int is_noxml;
   PyObject *mode;
   MPI_Comm comm;
+  int stats;
   PyObject *vars;
   PyObject *attrs;
   uint64_t timeaggregation_buffersize;
 };
 
 
-/* "adios.pyx":2150
+/* "adios.pyx":2171
  *         self.close()
  * 
  * cdef class attrinfo(object):             # <<<<<<<<<<<<<<
@@ -1153,7 +1311,7 @@ struct __pyx_obj_5adios_attrinfo {
 };
 
 
-/* "adios.pyx":2203
+/* "adios.pyx":2224
  *                  self.dtype)
  * 
  * cdef class varinfo(object):             # <<<<<<<<<<<<<<
@@ -1172,7 +1330,7 @@ struct __pyx_obj_5adios_varinfo {
 
 
 
-/* "adios.pyx":914
+/* "adios.pyx":922
  * 
  * ## Python class for ADIOS_FILE structure
  * cdef class file(dict):             # <<<<<<<<<<<<<<
@@ -1189,7 +1347,7 @@ struct __pyx_vtabstruct_5adios_file {
 static struct __pyx_vtabstruct_5adios_file *__pyx_vtabptr_5adios_file;
 
 
-/* "adios.pyx":1221
+/* "adios.pyx":1229
  *                 self.count)
  * 
  * cdef class var(dict):             # <<<<<<<<<<<<<<
@@ -1272,7 +1430,7 @@ static struct __pyx_vtabstruct_5adios_var *__pyx_vtabptr_5adios_var;
 #define __Pyx_XCLEAR(r)   do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0)
 
 /* PyObjectGetAttrStr.proto */
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_USE_TYPE_SLOTS
 static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) {
     PyTypeObject* tp = Py_TYPE(obj);
     if (likely(tp->tp_getattro))
@@ -1290,6 +1448,24 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject
 /* GetBuiltinName.proto */
 static PyObject *__Pyx_GetBuiltinName(PyObject *name);
 
+/* PyCFunctionFastCall.proto */
+#if CYTHON_FAST_PYCCALL
+static CYTHON_INLINE PyObject *__Pyx_PyCFunction_FastCall(PyObject *func, PyObject **args, Py_ssize_t nargs);
+#else
+#define __Pyx_PyCFunction_FastCall(func, args, nargs)  (assert(0), NULL)
+#endif
+
+/* PyFunctionFastCall.proto */
+#if CYTHON_FAST_PYCALL
+#define __Pyx_PyFunction_FastCall(func, args, nargs)\
+    __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL)
+#if 1 || PY_VERSION_HEX < 0x030600B1
+static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, int nargs, PyObject *kwargs);
+#else
+#define __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs) _PyFunction_FastCallDict(func, args, nargs, kwargs)
+#endif
+#endif
+
 /* PyObjectCall.proto */
 #if CYTHON_COMPILING_IN_CPYTHON
 static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw);
@@ -1313,7 +1489,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func);
 #endif
 
 /* PyThreadStateGet.proto */
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_FAST_THREAD_STATE
 #define __Pyx_PyThreadState_declare  PyThreadState *__pyx_tstate;
 #define __Pyx_PyThreadState_assign  __pyx_tstate = PyThreadState_GET();
 #else
@@ -1322,7 +1498,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func);
 #endif
 
 /* PyErrFetchRestore.proto */
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_FAST_THREAD_STATE
 #define __Pyx_ErrRestoreWithState(type, value, tb)  __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb)
 #define __Pyx_ErrFetchWithState(type, value, tb)    __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb)
 #define __Pyx_ErrRestore(type, value, tb)  __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb)
@@ -1374,7 +1550,7 @@ static CYTHON_INLINE int __Pyx_PySequence_ContainsTF(PyObject* item, PyObject* s
 }
 
 /* ListAppend.proto */
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS
 static CYTHON_INLINE int __Pyx_PyList_Append(PyObject* list, PyObject* x) {
     PyListObject* L = (PyListObject*) list;
     Py_ssize_t len = Py_SIZE(list);
@@ -1426,7 +1602,7 @@ static CYTHON_INLINE int __Pyx_PyList_Extend(PyObject* L, PyObject* v) {
 }
 
 /* PyIntBinop.proto */
-#if CYTHON_COMPILING_IN_CPYTHON
+#if !CYTHON_COMPILING_IN_PYPY
 static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, long intval, int inplace);
 #else
 #define __Pyx_PyInt_AddObjC(op1, op2, intval, inplace)\
@@ -1434,7 +1610,7 @@ static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, long intval,
 #endif
 
 /* PyIntBinop.proto */
-#if CYTHON_COMPILING_IN_CPYTHON
+#if !CYTHON_COMPILING_IN_PYPY
 static PyObject* __Pyx_PyInt_SubtractObjC(PyObject *op1, PyObject *op2, long intval, int inplace);
 #else
 #define __Pyx_PyInt_SubtractObjC(op1, op2, intval, inplace)\
@@ -1476,7 +1652,7 @@ static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int
 #endif
 
 /* PyIntBinop.proto */
-#if CYTHON_COMPILING_IN_CPYTHON
+#if !CYTHON_COMPILING_IN_PYPY
 static PyObject* __Pyx_PyInt_EqObjC(PyObject *op1, PyObject *op2, long intval, int inplace);
 #else
 #define __Pyx_PyInt_EqObjC(op1, op2, intval, inplace)\
@@ -1484,7 +1660,7 @@ static PyObject* __Pyx_PyInt_EqObjC(PyObject *op1, PyObject *op2, long intval, i
     #endif
 
 /* ListCompAppend.proto */
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS
 static CYTHON_INLINE int __Pyx_ListComp_Append(PyObject* list, PyObject* x) {
     PyListObject* L = (PyListObject*) list;
     Py_ssize_t len = Py_SIZE(list);
@@ -1522,7 +1698,9 @@ static PyObject* __Pyx__CallUnboundCMethod0(__Pyx_CachedCFunction* cfunc, PyObje
     ((likely((cfunc)->func)) ?\
         (likely((cfunc)->flag == METH_NOARGS) ?  (*((cfunc)->func))(self, NULL) :\
          (likely((cfunc)->flag == (METH_VARARGS | METH_KEYWORDS)) ?  ((*(PyCFunctionWithKeywords)(cfunc)->func)(self, __pyx_empty_tuple, NULL)) :\
-             ((cfunc)->flag == METH_VARARGS ?  (*((cfunc)->func))(self, __pyx_empty_tuple) : __Pyx__CallUnboundCMethod0(cfunc, self)))) :\
+             ((cfunc)->flag == METH_VARARGS ?  (*((cfunc)->func))(self, __pyx_empty_tuple) :\
+              (PY_VERSION_HEX >= 0x030600B1 && (cfunc)->flag == METH_FASTCALL ?  (*(__Pyx_PyCFunctionFast)(cfunc)->func)(self, &PyTuple_GET_ITEM(__pyx_empty_tuple, 0), 0, NULL) :\
+                __Pyx__CallUnboundCMethod0(cfunc, self))))) :\
         __Pyx__CallUnboundCMethod0(cfunc, self))
 #else
 #define __Pyx_CallUnboundCMethod0(cfunc, self)  __Pyx__CallUnboundCMethod0(cfunc, self)
@@ -1597,7 +1775,7 @@ static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) {
 #endif
 
 /* PyObjectSetAttrStr.proto */
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_USE_TYPE_SLOTS
 #define __Pyx_PyObject_DelAttrStr(o,n) __Pyx_PyObject_SetAttrStr(o,n,NULL)
 static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr_name, PyObject* value) {
     PyTypeObject* tp = Py_TYPE(obj);
@@ -1636,6 +1814,33 @@ static CYTHON_INLINE int __Pyx_dict_iter_next(PyObject* dict_or_iter, Py_ssize_t
 /* py_dict_values.proto */
 static CYTHON_INLINE PyObject* __Pyx_PyDict_Values(PyObject* d);
 
+/* SaveResetException.proto */
+#if CYTHON_FAST_THREAD_STATE
+#define __Pyx_ExceptionSave(type, value, tb)  __Pyx__ExceptionSave(__pyx_tstate, type, value, tb)
+static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
+#define __Pyx_ExceptionReset(type, value, tb)  __Pyx__ExceptionReset(__pyx_tstate, type, value, tb)
+static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb);
+#else
+#define __Pyx_ExceptionSave(type, value, tb)   PyErr_GetExcInfo(type, value, tb)
+#define __Pyx_ExceptionReset(type, value, tb)  PyErr_SetExcInfo(type, value, tb)
+#endif
+
+/* PyErrExceptionMatches.proto */
+#if CYTHON_FAST_THREAD_STATE
+#define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState(__pyx_tstate, err)
+static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err);
+#else
+#define __Pyx_PyErr_ExceptionMatches(err)  PyErr_ExceptionMatches(err)
+#endif
+
+/* GetException.proto */
+#if CYTHON_FAST_THREAD_STATE
+#define __Pyx_GetException(type, value, tb)  __Pyx__GetException(__pyx_tstate, type, value, tb)
+static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
+#else
+static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb);
+#endif
+
 /* SetVTable.proto */
 static int __Pyx_SetVtable(PyObject *dict, void *vtable);
 
@@ -1674,6 +1879,9 @@ static void __Pyx_AddTraceback(const char *funcname, int c_line,
                                int py_line, const char *filename);
 
 /* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_ADIOS_STATISTICS_FLAG(ADIOS_STATISTICS_FLAG value);
+
+/* CIntToPy.proto */
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value);
 
 /* CIntToPy.proto */
@@ -1697,7 +1905,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_uint32_t(uint32_t value);
 /* CIntToPy.proto */
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_ADIOS_DATATYPES(ADIOS_DATATYPES value);
 
-/* None.proto */
+/* RealImag.proto */
 #if CYTHON_CCOMPLEX
   #ifdef __cplusplus
     #define __Pyx_CREAL(z) ((z).real())
@@ -1710,7 +1918,8 @@ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_ADIOS_DATATYPES(ADIOS_DATATYPES
     #define __Pyx_CREAL(z) ((z).real)
     #define __Pyx_CIMAG(z) ((z).imag)
 #endif
-#if defined(__cplusplus) && CYTHON_CCOMPLEX         && (defined(_WIN32) || defined(__clang__) || (defined(__GNUC__) && (__GNUC__ >= 5 || __GNUC__ == 4 && __GNUC_MINOR__ >= 4 )) || __cplusplus >= 201103)
+#if defined(__cplusplus) && CYTHON_CCOMPLEX\
+        && (defined(_WIN32) || defined(__clang__) || (defined(__GNUC__) && (__GNUC__ >= 5 || __GNUC__ == 4 && __GNUC_MINOR__ >= 4 )) || __cplusplus >= 201103)
     #define __Pyx_SET_CREAL(z,x) ((z).real(x))
     #define __Pyx_SET_CIMAG(z,y) ((z).imag(y))
 #else
@@ -1718,85 +1927,79 @@ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_ADIOS_DATATYPES(ADIOS_DATATYPES
     #define __Pyx_SET_CIMAG(z,y) __Pyx_CIMAG(z) = (y)
 #endif
 
-/* None.proto */
-static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float, float);
-
-/* None.proto */
+/* Arithmetic.proto */
 #if CYTHON_CCOMPLEX
-    #define __Pyx_c_eqf(a, b)   ((a)==(b))
-    #define __Pyx_c_sumf(a, b)  ((a)+(b))
-    #define __Pyx_c_difff(a, b) ((a)-(b))
-    #define __Pyx_c_prodf(a, b) ((a)*(b))
-    #define __Pyx_c_quotf(a, b) ((a)/(b))
-    #define __Pyx_c_negf(a)     (-(a))
+    #define __Pyx_c_eq_float(a, b)   ((a)==(b))
+    #define __Pyx_c_sum_float(a, b)  ((a)+(b))
+    #define __Pyx_c_diff_float(a, b) ((a)-(b))
+    #define __Pyx_c_prod_float(a, b) ((a)*(b))
+    #define __Pyx_c_quot_float(a, b) ((a)/(b))
+    #define __Pyx_c_neg_float(a)     (-(a))
   #ifdef __cplusplus
-    #define __Pyx_c_is_zerof(z) ((z)==(float)0)
-    #define __Pyx_c_conjf(z)    (::std::conj(z))
+    #define __Pyx_c_is_zero_float(z) ((z)==(float)0)
+    #define __Pyx_c_conj_float(z)    (::std::conj(z))
     #if 1
-        #define __Pyx_c_absf(z)     (::std::abs(z))
-        #define __Pyx_c_powf(a, b)  (::std::pow(a, b))
+        #define __Pyx_c_abs_float(z)     (::std::abs(z))
+        #define __Pyx_c_pow_float(a, b)  (::std::pow(a, b))
     #endif
   #else
-    #define __Pyx_c_is_zerof(z) ((z)==0)
-    #define __Pyx_c_conjf(z)    (conjf(z))
+    #define __Pyx_c_is_zero_float(z) ((z)==0)
+    #define __Pyx_c_conj_float(z)    (conjf(z))
     #if 1
-        #define __Pyx_c_absf(z)     (cabsf(z))
-        #define __Pyx_c_powf(a, b)  (cpowf(a, b))
+        #define __Pyx_c_abs_float(z)     (cabsf(z))
+        #define __Pyx_c_pow_float(a, b)  (cpowf(a, b))
     #endif
  #endif
 #else
-    static CYTHON_INLINE int __Pyx_c_eqf(__pyx_t_float_complex, __pyx_t_float_complex);
-    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sumf(__pyx_t_float_complex, __pyx_t_float_complex);
-    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_difff(__pyx_t_float_complex, __pyx_t_float_complex);
-    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prodf(__pyx_t_float_complex, __pyx_t_float_complex);
-    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quotf(__pyx_t_float_complex, __pyx_t_float_complex);
-    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_negf(__pyx_t_float_complex);
-    static CYTHON_INLINE int __Pyx_c_is_zerof(__pyx_t_float_complex);
-    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conjf(__pyx_t_float_complex);
+    static CYTHON_INLINE int __Pyx_c_eq_float(__pyx_t_float_complex, __pyx_t_float_complex);
+    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sum_float(__pyx_t_float_complex, __pyx_t_float_complex);
+    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_diff_float(__pyx_t_float_complex, __pyx_t_float_complex);
+    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prod_float(__pyx_t_float_complex, __pyx_t_float_complex);
+    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quot_float(__pyx_t_float_complex, __pyx_t_float_complex);
+    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_neg_float(__pyx_t_float_complex);
+    static CYTHON_INLINE int __Pyx_c_is_zero_float(__pyx_t_float_complex);
+    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conj_float(__pyx_t_float_complex);
     #if 1
-        static CYTHON_INLINE float __Pyx_c_absf(__pyx_t_float_complex);
-        static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_powf(__pyx_t_float_complex, __pyx_t_float_complex);
+        static CYTHON_INLINE float __Pyx_c_abs_float(__pyx_t_float_complex);
+        static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_pow_float(__pyx_t_float_complex, __pyx_t_float_complex);
     #endif
 #endif
 
-/* None.proto */
-static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double, double);
-
-/* None.proto */
+/* Arithmetic.proto */
 #if CYTHON_CCOMPLEX
-    #define __Pyx_c_eq(a, b)   ((a)==(b))
-    #define __Pyx_c_sum(a, b)  ((a)+(b))
-    #define __Pyx_c_diff(a, b) ((a)-(b))
-    #define __Pyx_c_prod(a, b) ((a)*(b))
-    #define __Pyx_c_quot(a, b) ((a)/(b))
-    #define __Pyx_c_neg(a)     (-(a))
+    #define __Pyx_c_eq_double(a, b)   ((a)==(b))
+    #define __Pyx_c_sum_double(a, b)  ((a)+(b))
+    #define __Pyx_c_diff_double(a, b) ((a)-(b))
+    #define __Pyx_c_prod_double(a, b) ((a)*(b))
+    #define __Pyx_c_quot_double(a, b) ((a)/(b))
+    #define __Pyx_c_neg_double(a)     (-(a))
   #ifdef __cplusplus
-    #define __Pyx_c_is_zero(z) ((z)==(double)0)
-    #define __Pyx_c_conj(z)    (::std::conj(z))
+    #define __Pyx_c_is_zero_double(z) ((z)==(double)0)
+    #define __Pyx_c_conj_double(z)    (::std::conj(z))
     #if 1
-        #define __Pyx_c_abs(z)     (::std::abs(z))
-        #define __Pyx_c_pow(a, b)  (::std::pow(a, b))
+        #define __Pyx_c_abs_double(z)     (::std::abs(z))
+        #define __Pyx_c_pow_double(a, b)  (::std::pow(a, b))
     #endif
   #else
-    #define __Pyx_c_is_zero(z) ((z)==0)
-    #define __Pyx_c_conj(z)    (conj(z))
+    #define __Pyx_c_is_zero_double(z) ((z)==0)
+    #define __Pyx_c_conj_double(z)    (conj(z))
     #if 1
-        #define __Pyx_c_abs(z)     (cabs(z))
-        #define __Pyx_c_pow(a, b)  (cpow(a, b))
+        #define __Pyx_c_abs_double(z)     (cabs(z))
+        #define __Pyx_c_pow_double(a, b)  (cpow(a, b))
     #endif
  #endif
 #else
-    static CYTHON_INLINE int __Pyx_c_eq(__pyx_t_double_complex, __pyx_t_double_complex);
-    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum(__pyx_t_double_complex, __pyx_t_double_complex);
-    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff(__pyx_t_double_complex, __pyx_t_double_complex);
-    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod(__pyx_t_double_complex, __pyx_t_double_complex);
-    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot(__pyx_t_double_complex, __pyx_t_double_complex);
-    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg(__pyx_t_double_complex);
-    static CYTHON_INLINE int __Pyx_c_is_zero(__pyx_t_double_complex);
-    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj(__pyx_t_double_complex);
+    static CYTHON_INLINE int __Pyx_c_eq_double(__pyx_t_double_complex, __pyx_t_double_complex);
+    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum_double(__pyx_t_double_complex, __pyx_t_double_complex);
+    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff_double(__pyx_t_double_complex, __pyx_t_double_complex);
+    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod_double(__pyx_t_double_complex, __pyx_t_double_complex);
+    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot_double(__pyx_t_double_complex, __pyx_t_double_complex);
+    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg_double(__pyx_t_double_complex);
+    static CYTHON_INLINE int __Pyx_c_is_zero_double(__pyx_t_double_complex);
+    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj_double(__pyx_t_double_complex);
     #if 1
-        static CYTHON_INLINE double __Pyx_c_abs(__pyx_t_double_complex);
-        static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow(__pyx_t_double_complex, __pyx_t_double_complex);
+        static CYTHON_INLINE double __Pyx_c_abs_double(__pyx_t_double_complex);
+        static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow_double(__pyx_t_double_complex, __pyx_t_double_complex);
     #endif
 #endif
 
@@ -1979,6 +2182,7 @@ static PyObject *__pyx_builtin_enumerate;
 static PyObject *__pyx_builtin_NotImplementedError;
 static PyObject *__pyx_builtin_ValueError;
 static PyObject *__pyx_builtin_RuntimeError;
+static PyObject *__pyx_builtin_ImportError;
 static const char __pyx_k_[] = "/";
 static const char __pyx_k_C[] = "C";
 static const char __pyx_k_S[] = "S";
@@ -2002,8 +2206,8 @@ static const char __pyx_k_NOW[] = "NOW";
 static const char __pyx_k_Var[] = "Var";
 static const char __pyx_k_YES[] = "YES";
 static const char __pyx_k__10[] = "";
-static const char __pyx_k__63[] = " ";
-static const char __pyx_k__65[] = "(,)";
+static const char __pyx_k__64[] = " ";
+static const char __pyx_k__66[] = "(,)";
 static const char __pyx_k_all[] = "all";
 static const char __pyx_k_any[] = "any";
 static const char __pyx_k_doc[] = "__doc__";
@@ -2015,6 +2219,7 @@ static const char __pyx_k_var[] = "var";
 static const char __pyx_k_zip[] = "zip";
 static const char __pyx_k_Attr[] = "Attr";
 static const char __pyx_k_FLAG[] = "FLAG";
+static const char __pyx_k_FULL[] = "FULL";
 static const char __pyx_k_File[] = "File";
 static const char __pyx_k_ICEE[] = "ICEE";
 static const char __pyx_k_NONE[] = "NONE";
@@ -2090,6 +2295,7 @@ static const char __pyx_k_varid[] = "varid";
 static const char __pyx_k_write[] = "write";
 static const char __pyx_k_zeros[] = "zeros";
 static const char __pyx_k_15s_lu[] = "%15s : %lu";
+static const char __pyx_k_MINMAX[] = "MINMAX";
 static const char __pyx_k_POSIX1[] = "POSIX1";
 static const char __pyx_k_Writer[] = "Writer";
 static const char __pyx_k_config[] = "config";
@@ -2119,6 +2325,7 @@ static const char __pyx_k_values[] = "values";
 static const char __pyx_k_var_id[] = "var_id";
 static const char __pyx_k_xrange[] = "xrange";
 static const char __pyx_k_CURRENT[] = "CURRENT";
+static const char __pyx_k_DEFAULT[] = "DEFAULT";
 static const char __pyx_k_Reading[] = "Reading ... ";
 static const char __pyx_k_UNKNOWN[] = "UNKNOWN";
 static const char __pyx_k_Varinfo[] = "Varinfo";
@@ -2161,6 +2368,7 @@ static const char __pyx_k_meshname[] = "meshname";
 static const char __pyx_k_qualname[] = "__qualname__";
 static const char __pyx_k_readattr[] = "_readattr";
 static const char __pyx_k_string_2[] = "string_";
+static const char __pyx_k_tempfile[] = "tempfile";
 static const char __pyx_k_tostring[] = "tostring";
 static const char __pyx_k_AdiosFile[] = "=== AdiosFile ===";
 static const char __pyx_k_TypeError[] = "TypeError";
@@ -2187,6 +2395,7 @@ static const char __pyx_k_traceback[] = "traceback";
 static const char __pyx_k_transform[] = "transform";
 static const char __pyx_k_DATASPACES[] = "DATASPACES";
 static const char __pyx_k_IndexError[] = "IndexError";
+static const char __pyx_k_STATISTICS[] = "STATISTICS";
 static const char __pyx_k_ValueError[] = "ValueError";
 static const char __pyx_k_buffersize[] = "buffersize";
 static const char __pyx_k_complex128[] = "complex128";
@@ -2203,6 +2412,7 @@ static const char __pyx_k_startswith[] = "startswith";
 static const char __pyx_k_time_index[] = "time_index";
 static const char __pyx_k_time_steps[] = "time_steps";
 static const char __pyx_k_timeseries[] = "timeseries";
+static const char __pyx_k_ImportError[] = "ImportError";
 static const char __pyx_k_READ_METHOD[] = "READ_METHOD";
 static const char __pyx_k_buffer_size[] = "buffer_size";
 static const char __pyx_k_concatenate[] = "concatenate";
@@ -2244,8 +2454,9 @@ static const char __pyx_k_Not_an_open_file[] = "Not an open file";
 static const char __pyx_k_unsigned_integer[] = "unsigned_integer";
 static const char __pyx_k_BUFFER_ALLOC_WHEN[] = "BUFFER_ALLOC_WHEN";
 static const char __pyx_k_global_dimensions[] = "global_dimensions";
+static const char __pyx_k_NamedTemporaryFile[] = "NamedTemporaryFile";
 static const char __pyx_k_transform_type_str[] = "transform_type_str";
-static const char __pyx_k_var_read_line_1457[] = "var.read (line 1457)";
+static const char __pyx_k_var_read_line_1465[] = "var.read (line 1465)";
 static const char __pyx_k_NotImplementedError[] = "NotImplementedError";
 static const char __pyx_k_Not_implemented_yet[] = "Not implemented yet";
 static const char __pyx_k_Not_an_open_variable[] = "Not an open variable";
@@ -2253,13 +2464,13 @@ static const char __pyx_k_set_time_aggregation[] = "set_time_aggregation";
 static const char __pyx_k_Use_default_BP_method[] = ". Use default BP method";
 static const char __pyx_k_AdiosGroup_vars_r_attrs_r[] = "AdiosGroup (vars=%r, attrs=%r)";
 static const char __pyx_k_ndarray_is_not_C_contiguous[] = "ndarray is not C contiguous";
-static const char __pyx_k_writer_define_var_line_2020[] = "writer.define_var (line 2020)";
+static const char __pyx_k_writer_define_var_line_2041[] = "writer.define_var (line 2041)";
 static const char __pyx_k_Rank_is_out_of_range_nblock_r[] = "Rank is out of range (nblock=%r)";
 static const char __pyx_k_WARN_Invalid_read_method_name[] = "[WARN] Invalid read method name:";
 static const char __pyx_k_Data_type_is_not_supported_yet[] = "Data type is not supported yet";
-static const char __pyx_k_Define_a_group_associated_with[] = "\n        Define a group associated with the file.\n\n        Args:\n            gname (str): group name.\n            method (str, optional): Adios write method (default: 'POSIX1')\n            method_params (str, optional): parameters for the write method (default: '')\n\n        Example:\n\n        >>>  fw.declare_group('group', method='MPI_, method_params='verbose=3')\n\n        ";
+static const char __pyx_k_Define_a_group_associated_with[] = "\n        Define a group associated with the file.\n\n        Args:\n            gname (str): group name.\n            method (str, optional): Adios write method (default: 'POSIX1')\n            method_params (str, optional): parameters for the write method (default: '')\n            stats (int, optional): statistics (default: 'DEFAULT')\n\n        Example:\n\n        >>>  fw.declare_group('group', method='MPI_, method_params= [...]
 static const char __pyx_k_Perform_read_Read_data_from_an[] = " Perform read.\n\n        Read data from an ADIOS BP file. Subset reading is\n        supported. Without any options, this will read out a whole\n        data.\n\n        Args:\n            offset (tuple of int, optional): offset (default: ())\n            count (tuple of int, optional): count (default: ())\n            scalar (tuple of bool, optional): scalar (default: ())\n            from_steps (int, optional): starting ste [...]
-static const char __pyx_k_writer_declare_group_line_1983[] = "writer.declare_group (line 1983)";
+static const char __pyx_k_writer_declare_group_line_1996[] = "writer.declare_group (line 1996)";
 static const char __pyx_k_AdiosFile_path_r_nvars_r_vars_r[] = "AdiosFile (path=%r, nvars=%r, vars=%r, nattrs=%r, attrs=%r, current_step=%r, last_step=%r, file_size=%r)";
 static const char __pyx_k_AdiosVar_varid_r_name_r_dtype_r[] = "AdiosVar (varid=%r, name=%r, dtype=%r, ndim=%r, dims=%r, nsteps=%r, attrs=%r)";
 static const char __pyx_k_AdiosVarinfo_name_r_ldim_r_gdim[] = "AdiosVarinfo (name=%r, ldim=%r, gdim=%r, offset=%r, transform=%r, value=%r)";
@@ -2267,6 +2478,8 @@ static const char __pyx_k_Define_a_variable_associated_wi[] = "\n        Define
 static const char __pyx_k_Step_index_is_out_of_range_from[] = "Step index is out of range: from_steps=%r, nsteps=%r";
 static const char __pyx_k_Users_jyc_project_adios_devel_w[] = "/Users/jyc/project/adios-devel/wrappers/numpy/adios.pyx";
 static const char __pyx_k_Warning_No_support_yet_s_type_d[] = "Warning: No support yet: %s (type=%d, bytes=%d)";
+static const char __pyx_k_Warning_skipping_defining_var_r[] = "Warning: skipping defining var(%r) with None value";
+static const char __pyx_k_numpy_core_multiarray_failed_to[] = "numpy.core.multiarray failed to import";
 static const char __pyx_k_unknown_dtype_code_in_numpy_pxd[] = "unknown dtype code in numpy.pxd (%d)";
 static const char __pyx_k_ADIOS_ADIOS_python_module_module[] = "ADIOS: ADIOS python module\n\n.. moduleauthor:: Jong Choi <choij at ornl.gov>\n";
 static const char __pyx_k_AdiosAttr_name_r_dtype_r_value_r[] = "AdiosAttr (name=%r, dtype=%r, value=%r)";
@@ -2282,6 +2495,7 @@ static const char __pyx_k_Only_contiguous_arrays_are_suppo[] = "Only contiguous
 static const char __pyx_k_Requested_is_larger_than_the_sha[] = "Requested is larger than the shape.";
 static const char __pyx_k_Scalar_dimension_mismatch_scalar[] = "Scalar dimension mismatch (scalar dim: %r)";
 static const char __pyx_k_ndarray_is_not_Fortran_contiguou[] = "ndarray is not Fortran contiguous";
+static const char __pyx_k_numpy_core_umath_failed_to_impor[] = "numpy.core.umath failed to import";
 static const char __pyx_k_Format_string_allocated_too_shor_2[] = "Format string allocated too short.";
 static PyObject *__pyx_kp_s_;
 static PyObject *__pyx_kp_s_15s_d;
@@ -2309,6 +2523,7 @@ static PyObject *__pyx_n_s_CURRENT;
 static PyObject *__pyx_kp_s_Count_dimension_mismatch_count_d;
 static PyObject *__pyx_n_s_DATASPACES;
 static PyObject *__pyx_n_s_DATATYPE;
+static PyObject *__pyx_n_s_DEFAULT;
 static PyObject *__pyx_n_s_DIMES;
 static PyObject *__pyx_kp_s_Data_type_is_not_supported_yet;
 static PyObject *__pyx_kp_u_Define_a_group_associated_with;
@@ -2316,18 +2531,22 @@ static PyObject *__pyx_kp_u_Define_a_variable_associated_wi;
 static PyObject *__pyx_n_s_Ellipsis;
 static PyObject *__pyx_n_s_FLAG;
 static PyObject *__pyx_n_s_FLEXPATH;
+static PyObject *__pyx_n_s_FULL;
 static PyObject *__pyx_n_s_FancySelection;
 static PyObject *__pyx_n_s_File;
 static PyObject *__pyx_kp_u_Format_string_allocated_too_shor;
 static PyObject *__pyx_kp_u_Format_string_allocated_too_shor_2;
 static PyObject *__pyx_n_s_ICEE;
+static PyObject *__pyx_n_s_ImportError;
 static PyObject *__pyx_n_s_IndexError;
 static PyObject *__pyx_n_s_KeyError;
 static PyObject *__pyx_n_s_LATER;
 static PyObject *__pyx_n_s_LOCKMODE;
+static PyObject *__pyx_n_s_MINMAX;
 static PyObject *__pyx_n_s_NO;
 static PyObject *__pyx_n_s_NONE;
 static PyObject *__pyx_n_s_NOW;
+static PyObject *__pyx_n_s_NamedTemporaryFile;
 static PyObject *__pyx_kp_u_Non_native_byte_order_not_suppor;
 static PyObject *__pyx_n_s_NotImplementedError;
 static PyObject *__pyx_kp_s_Not_a_valid_var;
@@ -2345,6 +2564,7 @@ static PyObject *__pyx_kp_s_Reading;
 static PyObject *__pyx_kp_s_Requested_is_larger_than_the_sha;
 static PyObject *__pyx_n_s_RuntimeError;
 static PyObject *__pyx_n_s_S;
+static PyObject *__pyx_n_s_STATISTICS;
 static PyObject *__pyx_kp_s_Scalar_dimension_mismatch_scalar;
 static PyObject *__pyx_n_s_SimpleSelection;
 static PyObject *__pyx_kp_s_Step_index_is_out_of_range_from;
@@ -2360,11 +2580,12 @@ static PyObject *__pyx_n_s_Var;
 static PyObject *__pyx_n_s_Varinfo;
 static PyObject *__pyx_kp_s_WARN_Invalid_read_method_name;
 static PyObject *__pyx_kp_s_Warning_No_support_yet_s_type_d;
+static PyObject *__pyx_kp_s_Warning_skipping_defining_var_r;
 static PyObject *__pyx_n_s_Writer;
 static PyObject *__pyx_n_s_YES;
 static PyObject *__pyx_kp_s__10;
-static PyObject *__pyx_kp_s__63;
-static PyObject *__pyx_kp_s__65;
+static PyObject *__pyx_kp_s__64;
+static PyObject *__pyx_kp_s__66;
 static PyObject *__pyx_n_s_adios;
 static PyObject *__pyx_n_s_advance;
 static PyObject *__pyx_n_s_all;
@@ -2491,6 +2712,8 @@ static PyObject *__pyx_n_s_npoints;
 static PyObject *__pyx_n_s_nspace;
 static PyObject *__pyx_n_s_nsteps;
 static PyObject *__pyx_n_s_numpy;
+static PyObject *__pyx_kp_s_numpy_core_multiarray_failed_to;
+static PyObject *__pyx_kp_s_numpy_core_umath_failed_to_impor;
 static PyObject *__pyx_n_s_nvars;
 static PyObject *__pyx_n_s_offset;
 static PyObject *__pyx_n_s_order;
@@ -2542,6 +2765,7 @@ static PyObject *__pyx_n_s_strip;
 static PyObject *__pyx_n_s_strlen;
 static PyObject *__pyx_n_s_syncgroupid;
 static PyObject *__pyx_n_s_t;
+static PyObject *__pyx_n_s_tempfile;
 static PyObject *__pyx_n_s_test;
 static PyObject *__pyx_n_s_time_index;
 static PyObject *__pyx_n_s_time_steps;
@@ -2572,7 +2796,7 @@ static PyObject *__pyx_n_s_values;
 static PyObject *__pyx_n_s_var;
 static PyObject *__pyx_n_s_var_id;
 static PyObject *__pyx_n_s_var_namelist;
-static PyObject *__pyx_kp_u_var_read_line_1457;
+static PyObject *__pyx_kp_u_var_read_line_1465;
 static PyObject *__pyx_n_s_varid;
 static PyObject *__pyx_n_s_varname;
 static PyObject *__pyx_n_s_vars;
@@ -2581,8 +2805,8 @@ static PyObject *__pyx_n_s_vp;
 static PyObject *__pyx_n_s_w;
 static PyObject *__pyx_n_s_when;
 static PyObject *__pyx_n_s_write;
-static PyObject *__pyx_kp_u_writer_declare_group_line_1983;
-static PyObject *__pyx_kp_u_writer_define_var_line_2020;
+static PyObject *__pyx_kp_u_writer_declare_group_line_1996;
+static PyObject *__pyx_kp_u_writer_define_var_line_2041;
 static PyObject *__pyx_n_s_xrange;
 static PyObject *__pyx_n_s_zeros;
 static PyObject *__pyx_n_s_zip;
@@ -2730,8 +2954,8 @@ static PyObject *__pyx_pf_5adios_6writer_4mode___get__(struct __pyx_obj_5adios_w
 static PyObject *__pyx_pf_5adios_6writer_4vars___get__(struct __pyx_obj_5adios_writer *__pyx_v_self); /* proto */
 static PyObject *__pyx_pf_5adios_6writer_5attrs___get__(struct __pyx_obj_5adios_writer *__pyx_v_self); /* proto */
 static PyObject *__pyx_pf_5adios_6writer_26timeaggregation_buffersize___get__(struct __pyx_obj_5adios_writer *__pyx_v_self); /* proto */
-static int __pyx_pf_5adios_6writer___init__(struct __pyx_obj_5adios_writer *__pyx_v_self, PyObject *__pyx_v_fname, int __pyx_v_is_noxml, PyObject *__pyx_v_mode, MPI_Comm __pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_5adios_6writer_2declare_group(struct __pyx_obj_5adios_writer *__pyx_v_self, PyObject *__pyx_v_gname, PyObject *__pyx_v_method, PyObject *__pyx_v_method_params); /* proto */
+static int __pyx_pf_5adios_6writer___init__(struct __pyx_obj_5adios_writer *__pyx_v_self, PyObject *__pyx_v_fname, int __pyx_v_is_noxml, PyObject *__pyx_v_mode, int __pyx_v_stats, MPI_Comm __pyx_v_comm, PyObject *__pyx_v_method, PyObject *__pyx_v_method_params); /* proto */
+static PyObject *__pyx_pf_5adios_6writer_2declare_group(struct __pyx_obj_5adios_writer *__pyx_v_self, PyObject *__pyx_v_gname, PyObject *__pyx_v_method, PyObject *__pyx_v_method_params, int __pyx_v_stats); /* proto */
 static PyObject *__pyx_pf_5adios_6writer_4set_time_aggregation(struct __pyx_obj_5adios_writer *__pyx_v_self, PyObject *__pyx_v_buffer_size); /* proto */
 static PyObject *__pyx_pf_5adios_6writer_6define_var(struct __pyx_obj_5adios_writer *__pyx_v_self, PyObject *__pyx_v_varname, PyObject *__pyx_v_ldim, PyObject *__pyx_v_gdim, PyObject *__pyx_v_offset, PyObject *__pyx_v_transform); /* proto */
 static PyObject *__pyx_pf_5adios_6writer_8define_attr(struct __pyx_obj_5adios_writer *__pyx_v_self, PyObject *__pyx_v_attrname); /* proto */
@@ -2809,13 +3033,15 @@ static int __pyx_k__11;
 static MPI_Comm __pyx_k__12;
 static MPI_Comm __pyx_k__16;
 static ADIOS_LOCKMODE __pyx_k__17;
-static MPI_Comm __pyx_k__54;
-static PyObject *__pyx_k__55;
-static PyObject *__pyx_k__56;
+static int __pyx_k__54;
+static MPI_Comm __pyx_k__55;
+static int __pyx_k__56;
 static PyObject *__pyx_k__57;
+static PyObject *__pyx_k__58;
 static PyObject *__pyx_k__59;
-static PyObject *__pyx_k__60;
 static PyObject *__pyx_k__61;
+static PyObject *__pyx_k__62;
+static PyObject *__pyx_k__63;
 static PyObject *__pyx_slice__3;
 static PyObject *__pyx_slice__4;
 static PyObject *__pyx_slice__5;
@@ -2860,10 +3086,8 @@ static PyObject *__pyx_tuple__48;
 static PyObject *__pyx_tuple__50;
 static PyObject *__pyx_tuple__51;
 static PyObject *__pyx_tuple__53;
-static PyObject *__pyx_tuple__58;
-static PyObject *__pyx_tuple__62;
-static PyObject *__pyx_tuple__64;
-static PyObject *__pyx_tuple__66;
+static PyObject *__pyx_tuple__60;
+static PyObject *__pyx_tuple__65;
 static PyObject *__pyx_tuple__67;
 static PyObject *__pyx_tuple__68;
 static PyObject *__pyx_tuple__69;
@@ -2875,13 +3099,17 @@ static PyObject *__pyx_tuple__74;
 static PyObject *__pyx_tuple__75;
 static PyObject *__pyx_tuple__76;
 static PyObject *__pyx_tuple__77;
+static PyObject *__pyx_tuple__78;
 static PyObject *__pyx_tuple__79;
+static PyObject *__pyx_tuple__80;
 static PyObject *__pyx_tuple__81;
-static PyObject *__pyx_codeobj__78;
-static PyObject *__pyx_codeobj__80;
+static PyObject *__pyx_tuple__83;
+static PyObject *__pyx_tuple__85;
 static PyObject *__pyx_codeobj__82;
+static PyObject *__pyx_codeobj__84;
+static PyObject *__pyx_codeobj__86;
 
-/* "adios.pyx":33
+/* "adios.pyx":35
  * ## To convert a string to bytes: "str".encode()
  * ## To convert bytes to a String: b"".decode() or str(b"")
  * cpdef void test_str(str x):             # <<<<<<<<<<<<<<
@@ -2899,17 +3127,17 @@ static void __pyx_f_5adios_test_str(PyObject *__pyx_v_x, CYTHON_UNUSED int __pyx
   char const *__pyx_t_4;
   __Pyx_RefNannySetupContext("test_str", 0);
 
-  /* "adios.pyx":34
+  /* "adios.pyx":36
  * ## To convert bytes to a String: b"".decode() or str(b"")
  * cpdef void test_str(str x):
  *     cdef char * y = strdup(x.encode())             # <<<<<<<<<<<<<<
  *     print(x, str(y))
  * 
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_x, __pyx_n_s_encode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 34, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_x, __pyx_n_s_encode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 36, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
     __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
     if (likely(__pyx_t_3)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
@@ -2919,35 +3147,35 @@ static void __pyx_f_5adios_test_str(PyObject *__pyx_v_x, CYTHON_UNUSED int __pyx
     }
   }
   if (__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 34, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 36, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   } else {
-    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 34, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 36, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 34, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 36, __pyx_L1_error)
   __pyx_v_y = strdup(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":35
+  /* "adios.pyx":37
  * cpdef void test_str(str x):
  *     cdef char * y = strdup(x.encode())
  *     print(x, str(y))             # <<<<<<<<<<<<<<
  * 
  * from cpython.version cimport PY_MAJOR_VERSION
  */
-  __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_y); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 35, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_y); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 37, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 35, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 37, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 35, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 37, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 35, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 37, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_v_x);
   __Pyx_GIVEREF(__pyx_v_x);
@@ -2955,12 +3183,12 @@ static void __pyx_f_5adios_test_str(PyObject *__pyx_v_x, CYTHON_UNUSED int __pyx
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 35, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 37, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":33
+  /* "adios.pyx":35
  * ## To convert a string to bytes: "str".encode()
  * ## To convert bytes to a String: b"".decode() or str(b"")
  * cpdef void test_str(str x):             # <<<<<<<<<<<<<<
@@ -2986,7 +3214,7 @@ static PyObject *__pyx_pw_5adios_1test_str(PyObject *__pyx_self, PyObject *__pyx
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("test_str (wrapper)", 0);
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), (&PyString_Type), 1, "x", 1))) __PYX_ERR(0, 33, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), (&PyString_Type), 1, "x", 1))) __PYX_ERR(0, 35, __pyx_L1_error)
   __pyx_r = __pyx_pf_5adios_test_str(__pyx_self, ((PyObject*)__pyx_v_x));
 
   /* function exit code */
@@ -3004,7 +3232,7 @@ static PyObject *__pyx_pf_5adios_test_str(CYTHON_UNUSED PyObject *__pyx_self, Py
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("test_str", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_void_to_None(__pyx_f_5adios_test_str(__pyx_v_x, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 33, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_void_to_None(__pyx_f_5adios_test_str(__pyx_v_x, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 35, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -3021,7 +3249,7 @@ static PyObject *__pyx_pf_5adios_test_str(CYTHON_UNUSED PyObject *__pyx_self, Py
   return __pyx_r;
 }
 
-/* "adios.pyx":46
+/* "adios.pyx":48
  * ## python2: str(b"") return str
  * ## python3: str(b"") return 'b""'. Correct way: b"".decode()
  * cpdef str b2s(bytes x):             # <<<<<<<<<<<<<<
@@ -3038,7 +3266,7 @@ static PyObject *__pyx_f_5adios_b2s(PyObject *__pyx_v_x, CYTHON_UNUSED int __pyx
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("b2s", 0);
 
-  /* "adios.pyx":47
+  /* "adios.pyx":49
  * ## python3: str(b"") return 'b""'. Correct way: b"".decode()
  * cpdef str b2s(bytes x):
  *     if PY_MAJOR_VERSION < 3:             # <<<<<<<<<<<<<<
@@ -3048,7 +3276,7 @@ static PyObject *__pyx_f_5adios_b2s(PyObject *__pyx_v_x, CYTHON_UNUSED int __pyx
   __pyx_t_1 = ((PY_MAJOR_VERSION < 3) != 0);
   if (__pyx_t_1) {
 
-    /* "adios.pyx":48
+    /* "adios.pyx":50
  * cpdef str b2s(bytes x):
  *     if PY_MAJOR_VERSION < 3:
  *         return str(x)             # <<<<<<<<<<<<<<
@@ -3056,20 +3284,20 @@ static PyObject *__pyx_f_5adios_b2s(PyObject *__pyx_v_x, CYTHON_UNUSED int __pyx
  *         return x.decode()
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 48, __pyx_L1_error)
+    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 50, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_INCREF(__pyx_v_x);
     __Pyx_GIVEREF(__pyx_v_x);
     PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_x);
-    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 48, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 50, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    if (!(likely(PyString_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_3)->tp_name), 0))) __PYX_ERR(0, 48, __pyx_L1_error)
+    if (!(likely(PyString_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_3)->tp_name), 0))) __PYX_ERR(0, 50, __pyx_L1_error)
     __pyx_r = ((PyObject*)__pyx_t_3);
     __pyx_t_3 = 0;
     goto __pyx_L0;
 
-    /* "adios.pyx":47
+    /* "adios.pyx":49
  * ## python3: str(b"") return 'b""'. Correct way: b"".decode()
  * cpdef str b2s(bytes x):
  *     if PY_MAJOR_VERSION < 3:             # <<<<<<<<<<<<<<
@@ -3078,7 +3306,7 @@ static PyObject *__pyx_f_5adios_b2s(PyObject *__pyx_v_x, CYTHON_UNUSED int __pyx
  */
   }
 
-  /* "adios.pyx":50
+  /* "adios.pyx":52
  *         return str(x)
  *     else:
  *         return x.decode()             # <<<<<<<<<<<<<<
@@ -3089,17 +3317,17 @@ static PyObject *__pyx_f_5adios_b2s(PyObject *__pyx_v_x, CYTHON_UNUSED int __pyx
     __Pyx_XDECREF(__pyx_r);
     if (unlikely(__pyx_v_x == Py_None)) {
       PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "decode");
-      __PYX_ERR(0, 50, __pyx_L1_error)
+      __PYX_ERR(0, 52, __pyx_L1_error)
     }
-    __pyx_t_3 = __Pyx_decode_bytes(__pyx_v_x, 0, PY_SSIZE_T_MAX, NULL, NULL, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 50, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_decode_bytes(__pyx_v_x, 0, PY_SSIZE_T_MAX, NULL, NULL, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 52, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    if (!(likely(PyString_CheckExact(__pyx_t_3))||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_3)->tp_name), 0))) __PYX_ERR(0, 50, __pyx_L1_error)
+    if (!(likely(PyString_CheckExact(__pyx_t_3))||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_3)->tp_name), 0))) __PYX_ERR(0, 52, __pyx_L1_error)
     __pyx_r = ((PyObject*)__pyx_t_3);
     __pyx_t_3 = 0;
     goto __pyx_L0;
   }
 
-  /* "adios.pyx":46
+  /* "adios.pyx":48
  * ## python2: str(b"") return str
  * ## python3: str(b"") return 'b""'. Correct way: b"".decode()
  * cpdef str b2s(bytes x):             # <<<<<<<<<<<<<<
@@ -3126,7 +3354,7 @@ static PyObject *__pyx_pw_5adios_3b2s(PyObject *__pyx_self, PyObject *__pyx_v_x)
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("b2s (wrapper)", 0);
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), (&PyBytes_Type), 1, "x", 1))) __PYX_ERR(0, 46, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), (&PyBytes_Type), 1, "x", 1))) __PYX_ERR(0, 48, __pyx_L1_error)
   __pyx_r = __pyx_pf_5adios_2b2s(__pyx_self, ((PyObject*)__pyx_v_x));
 
   /* function exit code */
@@ -3144,7 +3372,7 @@ static PyObject *__pyx_pf_5adios_2b2s(CYTHON_UNUSED PyObject *__pyx_self, PyObje
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("b2s", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_5adios_b2s(__pyx_v_x, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 46, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_5adios_b2s(__pyx_v_x, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 48, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -3161,7 +3389,7 @@ static PyObject *__pyx_pf_5adios_2b2s(CYTHON_UNUSED PyObject *__pyx_self, PyObje
   return __pyx_r;
 }
 
-/* "adios.pyx":52
+/* "adios.pyx":54
  *         return x.decode()
  * 
  * cpdef bytes s2b(str x):             # <<<<<<<<<<<<<<
@@ -3179,7 +3407,7 @@ static PyObject *__pyx_f_5adios_s2b(PyObject *__pyx_v_x, CYTHON_UNUSED int __pyx
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("s2b", 0);
 
-  /* "adios.pyx":53
+  /* "adios.pyx":55
  * 
  * cpdef bytes s2b(str x):
  *     if PY_MAJOR_VERSION < 3:             # <<<<<<<<<<<<<<
@@ -3189,7 +3417,7 @@ static PyObject *__pyx_f_5adios_s2b(PyObject *__pyx_v_x, CYTHON_UNUSED int __pyx
   __pyx_t_1 = ((PY_MAJOR_VERSION < 3) != 0);
   if (__pyx_t_1) {
 
-    /* "adios.pyx":54
+    /* "adios.pyx":56
  * cpdef bytes s2b(str x):
  *     if PY_MAJOR_VERSION < 3:
  *         return <bytes>x             # <<<<<<<<<<<<<<
@@ -3201,7 +3429,7 @@ static PyObject *__pyx_f_5adios_s2b(PyObject *__pyx_v_x, CYTHON_UNUSED int __pyx
     __pyx_r = ((PyObject*)__pyx_v_x);
     goto __pyx_L0;
 
-    /* "adios.pyx":53
+    /* "adios.pyx":55
  * 
  * cpdef bytes s2b(str x):
  *     if PY_MAJOR_VERSION < 3:             # <<<<<<<<<<<<<<
@@ -3210,7 +3438,7 @@ static PyObject *__pyx_f_5adios_s2b(PyObject *__pyx_v_x, CYTHON_UNUSED int __pyx
  */
   }
 
-  /* "adios.pyx":56
+  /* "adios.pyx":58
  *         return <bytes>x
  *     else:
  *         return x.encode()             # <<<<<<<<<<<<<<
@@ -3219,10 +3447,10 @@ static PyObject *__pyx_f_5adios_s2b(PyObject *__pyx_v_x, CYTHON_UNUSED int __pyx
  */
   /*else*/ {
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_x, __pyx_n_s_encode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 56, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_x, __pyx_n_s_encode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 58, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_4 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
       __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
       if (likely(__pyx_t_4)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -3232,20 +3460,20 @@ static PyObject *__pyx_f_5adios_s2b(PyObject *__pyx_v_x, CYTHON_UNUSED int __pyx
       }
     }
     if (__pyx_t_4) {
-      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 56, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 58, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     } else {
-      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 56, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 58, __pyx_L1_error)
     }
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    if (!(likely(PyBytes_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_2)->tp_name), 0))) __PYX_ERR(0, 56, __pyx_L1_error)
+    if (!(likely(PyBytes_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_2)->tp_name), 0))) __PYX_ERR(0, 58, __pyx_L1_error)
     __pyx_r = ((PyObject*)__pyx_t_2);
     __pyx_t_2 = 0;
     goto __pyx_L0;
   }
 
-  /* "adios.pyx":52
+  /* "adios.pyx":54
  *         return x.decode()
  * 
  * cpdef bytes s2b(str x):             # <<<<<<<<<<<<<<
@@ -3273,7 +3501,7 @@ static PyObject *__pyx_pw_5adios_5s2b(PyObject *__pyx_self, PyObject *__pyx_v_x)
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("s2b (wrapper)", 0);
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), (&PyString_Type), 1, "x", 1))) __PYX_ERR(0, 52, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), (&PyString_Type), 1, "x", 1))) __PYX_ERR(0, 54, __pyx_L1_error)
   __pyx_r = __pyx_pf_5adios_4s2b(__pyx_self, ((PyObject*)__pyx_v_x));
 
   /* function exit code */
@@ -3291,7 +3519,7 @@ static PyObject *__pyx_pf_5adios_4s2b(CYTHON_UNUSED PyObject *__pyx_self, PyObje
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("s2b", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_x, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 52, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_x, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 54, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -3308,7 +3536,7 @@ static PyObject *__pyx_pf_5adios_4s2b(CYTHON_UNUSED PyObject *__pyx_self, PyObje
   return __pyx_r;
 }
 
-/* "adios.pyx":58
+/* "adios.pyx":60
  *         return x.encode()
  * 
  * def normalize_key(keys):             # <<<<<<<<<<<<<<
@@ -3347,7 +3575,7 @@ static PyObject *__pyx_pf_5adios_6normalize_key(CYTHON_UNUSED PyObject *__pyx_se
   __Pyx_RefNannySetupContext("normalize_key", 0);
   __Pyx_INCREF(__pyx_v_keys);
 
-  /* "adios.pyx":59
+  /* "adios.pyx":61
  * 
  * def normalize_key(keys):
  *     if not isinstance(keys, list):             # <<<<<<<<<<<<<<
@@ -3358,14 +3586,14 @@ static PyObject *__pyx_pf_5adios_6normalize_key(CYTHON_UNUSED PyObject *__pyx_se
   __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0);
   if (__pyx_t_2) {
 
-    /* "adios.pyx":60
+    /* "adios.pyx":62
  * def normalize_key(keys):
  *     if not isinstance(keys, list):
  *         keys = [keys,]             # <<<<<<<<<<<<<<
  *     l = list()
  *     for key in keys:
  */
-    __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 60, __pyx_L1_error)
+    __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 62, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_keys);
     __Pyx_GIVEREF(__pyx_v_keys);
@@ -3373,7 +3601,7 @@ static PyObject *__pyx_pf_5adios_6normalize_key(CYTHON_UNUSED PyObject *__pyx_se
     __Pyx_DECREF_SET(__pyx_v_keys, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "adios.pyx":59
+    /* "adios.pyx":61
  * 
  * def normalize_key(keys):
  *     if not isinstance(keys, list):             # <<<<<<<<<<<<<<
@@ -3382,19 +3610,19 @@ static PyObject *__pyx_pf_5adios_6normalize_key(CYTHON_UNUSED PyObject *__pyx_se
  */
   }
 
-  /* "adios.pyx":61
+  /* "adios.pyx":63
  *     if not isinstance(keys, list):
  *         keys = [keys,]
  *     l = list()             # <<<<<<<<<<<<<<
  *     for key in keys:
  *         if key.startswith('/'):
  */
-  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 61, __pyx_L1_error)
+  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 63, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_l = ((PyObject*)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "adios.pyx":62
+  /* "adios.pyx":64
  *         keys = [keys,]
  *     l = list()
  *     for key in keys:             # <<<<<<<<<<<<<<
@@ -3405,26 +3633,26 @@ static PyObject *__pyx_pf_5adios_6normalize_key(CYTHON_UNUSED PyObject *__pyx_se
     __pyx_t_3 = __pyx_v_keys; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0;
     __pyx_t_5 = NULL;
   } else {
-    __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 62, __pyx_L1_error)
+    __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 64, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_5 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 62, __pyx_L1_error)
+    __pyx_t_5 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 64, __pyx_L1_error)
   }
   for (;;) {
     if (likely(!__pyx_t_5)) {
       if (likely(PyList_CheckExact(__pyx_t_3))) {
         if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_6 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 62, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_6 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 64, __pyx_L1_error)
         #else
-        __pyx_t_6 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 62, __pyx_L1_error)
+        __pyx_t_6 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 64, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
         #endif
       } else {
         if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 62, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 64, __pyx_L1_error)
         #else
-        __pyx_t_6 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 62, __pyx_L1_error)
+        __pyx_t_6 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 64, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
         #endif
       }
@@ -3434,7 +3662,7 @@ static PyObject *__pyx_pf_5adios_6normalize_key(CYTHON_UNUSED PyObject *__pyx_se
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
           if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-          else __PYX_ERR(0, 62, __pyx_L1_error)
+          else __PYX_ERR(0, 64, __pyx_L1_error)
         }
         break;
       }
@@ -3443,35 +3671,35 @@ static PyObject *__pyx_pf_5adios_6normalize_key(CYTHON_UNUSED PyObject *__pyx_se
     __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_6);
     __pyx_t_6 = 0;
 
-    /* "adios.pyx":63
+    /* "adios.pyx":65
  *     l = list()
  *     for key in keys:
  *         if key.startswith('/'):             # <<<<<<<<<<<<<<
  *             key = key[1:]
  *         if '/' not in key:
  */
-    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_key, __pyx_n_s_startswith); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 63, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_key, __pyx_n_s_startswith); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 65, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 63, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 65, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 63, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 65, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     if (__pyx_t_2) {
 
-      /* "adios.pyx":64
+      /* "adios.pyx":66
  *     for key in keys:
  *         if key.startswith('/'):
  *             key = key[1:]             # <<<<<<<<<<<<<<
  *         if '/' not in key:
  *             l.append(key)
  */
-      __pyx_t_7 = __Pyx_PyObject_GetSlice(__pyx_v_key, 1, 0, NULL, NULL, &__pyx_slice__3, 1, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 64, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetSlice(__pyx_v_key, 1, 0, NULL, NULL, &__pyx_slice__3, 1, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 66, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF_SET(__pyx_v_key, __pyx_t_7);
       __pyx_t_7 = 0;
 
-      /* "adios.pyx":63
+      /* "adios.pyx":65
  *     l = list()
  *     for key in keys:
  *         if key.startswith('/'):             # <<<<<<<<<<<<<<
@@ -3480,27 +3708,27 @@ static PyObject *__pyx_pf_5adios_6normalize_key(CYTHON_UNUSED PyObject *__pyx_se
  */
     }
 
-    /* "adios.pyx":65
+    /* "adios.pyx":67
  *         if key.startswith('/'):
  *             key = key[1:]
  *         if '/' not in key:             # <<<<<<<<<<<<<<
  *             l.append(key)
  *     return (l)
  */
-    __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_kp_s_, __pyx_v_key, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 65, __pyx_L1_error)
+    __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_kp_s_, __pyx_v_key, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 67, __pyx_L1_error)
     __pyx_t_1 = (__pyx_t_2 != 0);
     if (__pyx_t_1) {
 
-      /* "adios.pyx":66
+      /* "adios.pyx":68
  *             key = key[1:]
  *         if '/' not in key:
  *             l.append(key)             # <<<<<<<<<<<<<<
  *     return (l)
  * 
  */
-      __pyx_t_8 = __Pyx_PyList_Append(__pyx_v_l, __pyx_v_key); if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(0, 66, __pyx_L1_error)
+      __pyx_t_8 = __Pyx_PyList_Append(__pyx_v_l, __pyx_v_key); if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(0, 68, __pyx_L1_error)
 
-      /* "adios.pyx":65
+      /* "adios.pyx":67
  *         if key.startswith('/'):
  *             key = key[1:]
  *         if '/' not in key:             # <<<<<<<<<<<<<<
@@ -3509,7 +3737,7 @@ static PyObject *__pyx_pf_5adios_6normalize_key(CYTHON_UNUSED PyObject *__pyx_se
  */
     }
 
-    /* "adios.pyx":62
+    /* "adios.pyx":64
  *         keys = [keys,]
  *     l = list()
  *     for key in keys:             # <<<<<<<<<<<<<<
@@ -3519,7 +3747,7 @@ static PyObject *__pyx_pf_5adios_6normalize_key(CYTHON_UNUSED PyObject *__pyx_se
   }
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "adios.pyx":67
+  /* "adios.pyx":69
  *         if '/' not in key:
  *             l.append(key)
  *     return (l)             # <<<<<<<<<<<<<<
@@ -3531,7 +3759,7 @@ static PyObject *__pyx_pf_5adios_6normalize_key(CYTHON_UNUSED PyObject *__pyx_se
   __pyx_r = __pyx_v_l;
   goto __pyx_L0;
 
-  /* "adios.pyx":58
+  /* "adios.pyx":60
  *         return x.encode()
  * 
  * def normalize_key(keys):             # <<<<<<<<<<<<<<
@@ -3555,7 +3783,7 @@ static PyObject *__pyx_pf_5adios_6normalize_key(CYTHON_UNUSED PyObject *__pyx_se
   return __pyx_r;
 }
 
-/* "adios.pyx":69
+/* "adios.pyx":71
  *     return (l)
  * 
  * cdef char ** to_cstring_array(list_str):             # <<<<<<<<<<<<<<
@@ -3576,55 +3804,55 @@ static char **__pyx_f_5adios_to_cstring_array(PyObject *__pyx_v_list_str) {
   char *__pyx_t_5;
   __Pyx_RefNannySetupContext("to_cstring_array", 0);
 
-  /* "adios.pyx":70
+  /* "adios.pyx":72
  * 
  * cdef char ** to_cstring_array(list_str):
  *     cdef char **ret = <char **>malloc(len(list_str) * sizeof(char *))             # <<<<<<<<<<<<<<
  *     for i in xrange(len(list_str)):
  *         bstr = s2b(list_str[i])
  */
-  __pyx_t_1 = PyObject_Length(__pyx_v_list_str); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 70, __pyx_L1_error)
+  __pyx_t_1 = PyObject_Length(__pyx_v_list_str); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 72, __pyx_L1_error)
   __pyx_v_ret = ((char **)malloc((__pyx_t_1 * (sizeof(char *)))));
 
-  /* "adios.pyx":71
+  /* "adios.pyx":73
  * cdef char ** to_cstring_array(list_str):
  *     cdef char **ret = <char **>malloc(len(list_str) * sizeof(char *))
  *     for i in xrange(len(list_str)):             # <<<<<<<<<<<<<<
  *         bstr = s2b(list_str[i])
  *         ret[i] = PyBytes_AsString(bstr)
  */
-  __pyx_t_1 = PyObject_Length(__pyx_v_list_str); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 71, __pyx_L1_error)
+  __pyx_t_1 = PyObject_Length(__pyx_v_list_str); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 73, __pyx_L1_error)
   for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_1; __pyx_t_2+=1) {
     __pyx_v_i = __pyx_t_2;
 
-    /* "adios.pyx":72
+    /* "adios.pyx":74
  *     cdef char **ret = <char **>malloc(len(list_str) * sizeof(char *))
  *     for i in xrange(len(list_str)):
  *         bstr = s2b(list_str[i])             # <<<<<<<<<<<<<<
  *         ret[i] = PyBytes_AsString(bstr)
  *     return ret
  */
-    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_list_str, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 72, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_list_str, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 74, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    if (!(likely(PyString_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_3)->tp_name), 0))) __PYX_ERR(0, 72, __pyx_L1_error)
-    __pyx_t_4 = __pyx_f_5adios_s2b(((PyObject*)__pyx_t_3), 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 72, __pyx_L1_error)
+    if (!(likely(PyString_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_3)->tp_name), 0))) __PYX_ERR(0, 74, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_5adios_s2b(((PyObject*)__pyx_t_3), 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 74, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_XDECREF_SET(__pyx_v_bstr, ((PyObject*)__pyx_t_4));
     __pyx_t_4 = 0;
 
-    /* "adios.pyx":73
+    /* "adios.pyx":75
  *     for i in xrange(len(list_str)):
  *         bstr = s2b(list_str[i])
  *         ret[i] = PyBytes_AsString(bstr)             # <<<<<<<<<<<<<<
  *     return ret
  * 
  */
-    __pyx_t_5 = PyBytes_AsString(__pyx_v_bstr); if (unlikely(__pyx_t_5 == NULL)) __PYX_ERR(0, 73, __pyx_L1_error)
+    __pyx_t_5 = PyBytes_AsString(__pyx_v_bstr); if (unlikely(__pyx_t_5 == NULL)) __PYX_ERR(0, 75, __pyx_L1_error)
     (__pyx_v_ret[__pyx_v_i]) = __pyx_t_5;
   }
 
-  /* "adios.pyx":74
+  /* "adios.pyx":76
  *         bstr = s2b(list_str[i])
  *         ret[i] = PyBytes_AsString(bstr)
  *     return ret             # <<<<<<<<<<<<<<
@@ -3634,7 +3862,7 @@ static char **__pyx_f_5adios_to_cstring_array(PyObject *__pyx_v_list_str) {
   __pyx_r = __pyx_v_ret;
   goto __pyx_L0;
 
-  /* "adios.pyx":69
+  /* "adios.pyx":71
  *     return (l)
  * 
  * cdef char ** to_cstring_array(list_str):             # <<<<<<<<<<<<<<
@@ -3654,8 +3882,8 @@ static char **__pyx_f_5adios_to_cstring_array(PyObject *__pyx_v_list_str) {
   return __pyx_r;
 }
 
-/* "adios.pyx":433
- *     ALL =2
+/* "adios.pyx":441
+ *     DEFAULT = adios_stat_default
  * 
  * cpdef __parse_index(index, ndim):             # <<<<<<<<<<<<<<
  *     # Fix index, handling ellipsis and incomplete slices.
@@ -3683,7 +3911,7 @@ static PyObject *__pyx_f_5adios___parse_index(PyObject *__pyx_v_index, PyObject
   __Pyx_RefNannySetupContext("__parse_index", 0);
   __Pyx_INCREF(__pyx_v_index);
 
-  /* "adios.pyx":435
+  /* "adios.pyx":443
  * cpdef __parse_index(index, ndim):
  *     # Fix index, handling ellipsis and incomplete slices.
  *     if not isinstance(index, tuple):             # <<<<<<<<<<<<<<
@@ -3694,14 +3922,14 @@ static PyObject *__pyx_f_5adios___parse_index(PyObject *__pyx_v_index, PyObject
   __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0);
   if (__pyx_t_2) {
 
-    /* "adios.pyx":436
+    /* "adios.pyx":444
  *     # Fix index, handling ellipsis and incomplete slices.
  *     if not isinstance(index, tuple):
  *         index = (index,)             # <<<<<<<<<<<<<<
  * 
  *     fixed = []
  */
-    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 436, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 444, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_index);
     __Pyx_GIVEREF(__pyx_v_index);
@@ -3709,7 +3937,7 @@ static PyObject *__pyx_f_5adios___parse_index(PyObject *__pyx_v_index, PyObject
     __Pyx_DECREF_SET(__pyx_v_index, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "adios.pyx":435
+    /* "adios.pyx":443
  * cpdef __parse_index(index, ndim):
  *     # Fix index, handling ellipsis and incomplete slices.
  *     if not isinstance(index, tuple):             # <<<<<<<<<<<<<<
@@ -3718,32 +3946,32 @@ static PyObject *__pyx_f_5adios___parse_index(PyObject *__pyx_v_index, PyObject
  */
   }
 
-  /* "adios.pyx":438
+  /* "adios.pyx":446
  *         index = (index,)
  * 
  *     fixed = []             # <<<<<<<<<<<<<<
  *     length = len(index)
  * 
  */
-  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 438, __pyx_L1_error)
+  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 446, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_fixed = ((PyObject*)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "adios.pyx":439
+  /* "adios.pyx":447
  * 
  *     fixed = []
  *     length = len(index)             # <<<<<<<<<<<<<<
  * 
  *     for slice_ in index:
  */
-  __pyx_t_4 = PyObject_Length(__pyx_v_index); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 439, __pyx_L1_error)
-  __pyx_t_3 = PyInt_FromSsize_t(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 439, __pyx_L1_error)
+  __pyx_t_4 = PyObject_Length(__pyx_v_index); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 447, __pyx_L1_error)
+  __pyx_t_3 = PyInt_FromSsize_t(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 447, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_length = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "adios.pyx":441
+  /* "adios.pyx":449
  *     length = len(index)
  * 
  *     for slice_ in index:             # <<<<<<<<<<<<<<
@@ -3754,26 +3982,26 @@ static PyObject *__pyx_f_5adios___parse_index(PyObject *__pyx_v_index, PyObject
     __pyx_t_3 = __pyx_v_index; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0;
     __pyx_t_5 = NULL;
   } else {
-    __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_index); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 441, __pyx_L1_error)
+    __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_index); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 449, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_5 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 441, __pyx_L1_error)
+    __pyx_t_5 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 449, __pyx_L1_error)
   }
   for (;;) {
     if (likely(!__pyx_t_5)) {
       if (likely(PyList_CheckExact(__pyx_t_3))) {
         if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_6 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 441, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_6 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 449, __pyx_L1_error)
         #else
-        __pyx_t_6 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 441, __pyx_L1_error)
+        __pyx_t_6 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 449, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
         #endif
       } else {
         if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 441, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 449, __pyx_L1_error)
         #else
-        __pyx_t_6 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 441, __pyx_L1_error)
+        __pyx_t_6 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 449, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
         #endif
       }
@@ -3783,7 +4011,7 @@ static PyObject *__pyx_f_5adios___parse_index(PyObject *__pyx_v_index, PyObject
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
           if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-          else __PYX_ERR(0, 441, __pyx_L1_error)
+          else __PYX_ERR(0, 449, __pyx_L1_error)
         }
         break;
       }
@@ -3792,7 +4020,7 @@ static PyObject *__pyx_f_5adios___parse_index(PyObject *__pyx_v_index, PyObject
     __Pyx_XDECREF_SET(__pyx_v_slice_, __pyx_t_6);
     __pyx_t_6 = 0;
 
-    /* "adios.pyx":442
+    /* "adios.pyx":450
  * 
  *     for slice_ in index:
  *         if slice_ is Ellipsis:             # <<<<<<<<<<<<<<
@@ -3803,40 +4031,40 @@ static PyObject *__pyx_f_5adios___parse_index(PyObject *__pyx_v_index, PyObject
     __pyx_t_1 = (__pyx_t_2 != 0);
     if (__pyx_t_1) {
 
-      /* "adios.pyx":443
+      /* "adios.pyx":451
  *     for slice_ in index:
  *         if slice_ is Ellipsis:
  *             fixed.extend([slice(None)] * (ndim-length-len(fixed)+1))             # <<<<<<<<<<<<<<
  *         elif isinstance(slice_, (int, long)):
  *             fixed.append(slice(slice_, slice_+1, None))
  */
-      __pyx_t_6 = PyNumber_Subtract(__pyx_v_ndim, __pyx_v_length); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 443, __pyx_L1_error)
+      __pyx_t_6 = PyNumber_Subtract(__pyx_v_ndim, __pyx_v_length); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 451, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
-      __pyx_t_7 = PyList_GET_SIZE(__pyx_v_fixed); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 443, __pyx_L1_error)
-      __pyx_t_8 = PyInt_FromSsize_t(__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 443, __pyx_L1_error)
+      __pyx_t_7 = PyList_GET_SIZE(__pyx_v_fixed); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 451, __pyx_L1_error)
+      __pyx_t_8 = PyInt_FromSsize_t(__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 451, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
-      __pyx_t_9 = PyNumber_Subtract(__pyx_t_6, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 443, __pyx_L1_error)
+      __pyx_t_9 = PyNumber_Subtract(__pyx_t_6, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 451, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-      __pyx_t_8 = __Pyx_PyInt_AddObjC(__pyx_t_9, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 443, __pyx_L1_error)
+      __pyx_t_8 = __Pyx_PyInt_AddObjC(__pyx_t_9, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 451, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-      __pyx_t_9 = PyList_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 443, __pyx_L1_error)
+      __pyx_t_9 = PyList_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 451, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
       __Pyx_INCREF(__pyx_slice__4);
       __Pyx_GIVEREF(__pyx_slice__4);
       PyList_SET_ITEM(__pyx_t_9, 0, __pyx_slice__4);
-      { PyObject* __pyx_temp = PyNumber_InPlaceMultiply(__pyx_t_9, __pyx_t_8); if (unlikely(!__pyx_temp)) __PYX_ERR(0, 443, __pyx_L1_error)
+      { PyObject* __pyx_temp = PyNumber_InPlaceMultiply(__pyx_t_9, __pyx_t_8); if (unlikely(!__pyx_temp)) __PYX_ERR(0, 451, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_temp);
         __Pyx_DECREF(__pyx_t_9);
         __pyx_t_9 = __pyx_temp;
       }
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-      __pyx_t_10 = __Pyx_PyList_Extend(__pyx_v_fixed, __pyx_t_9); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 443, __pyx_L1_error)
+      __pyx_t_10 = __Pyx_PyList_Extend(__pyx_v_fixed, __pyx_t_9); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 451, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-      /* "adios.pyx":442
+      /* "adios.pyx":450
  * 
  *     for slice_ in index:
  *         if slice_ is Ellipsis:             # <<<<<<<<<<<<<<
@@ -3846,7 +4074,7 @@ static PyObject *__pyx_f_5adios___parse_index(PyObject *__pyx_v_index, PyObject
       goto __pyx_L6;
     }
 
-    /* "adios.pyx":444
+    /* "adios.pyx":452
  *         if slice_ is Ellipsis:
  *             fixed.extend([slice(None)] * (ndim-length-len(fixed)+1))
  *         elif isinstance(slice_, (int, long)):             # <<<<<<<<<<<<<<
@@ -3867,22 +4095,22 @@ static PyObject *__pyx_f_5adios___parse_index(PyObject *__pyx_v_index, PyObject
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
 
-      /* "adios.pyx":445
+      /* "adios.pyx":453
  *             fixed.extend([slice(None)] * (ndim-length-len(fixed)+1))
  *         elif isinstance(slice_, (int, long)):
  *             fixed.append(slice(slice_, slice_+1, None))             # <<<<<<<<<<<<<<
  *         elif isinstance(slice_, (float)):
  *             fixed.append(slice(int(slice_), int(slice_)+1, None))
  */
-      __pyx_t_9 = __Pyx_PyInt_AddObjC(__pyx_v_slice_, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 445, __pyx_L1_error)
+      __pyx_t_9 = __Pyx_PyInt_AddObjC(__pyx_v_slice_, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 453, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
-      __pyx_t_8 = PySlice_New(__pyx_v_slice_, __pyx_t_9, Py_None); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 445, __pyx_L1_error)
+      __pyx_t_8 = PySlice_New(__pyx_v_slice_, __pyx_t_9, Py_None); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 453, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-      __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_fixed, __pyx_t_8); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 445, __pyx_L1_error)
+      __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_fixed, __pyx_t_8); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 453, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-      /* "adios.pyx":444
+      /* "adios.pyx":452
  *         if slice_ is Ellipsis:
  *             fixed.extend([slice(None)] * (ndim-length-len(fixed)+1))
  *         elif isinstance(slice_, (int, long)):             # <<<<<<<<<<<<<<
@@ -3892,7 +4120,7 @@ static PyObject *__pyx_f_5adios___parse_index(PyObject *__pyx_v_index, PyObject
       goto __pyx_L6;
     }
 
-    /* "adios.pyx":446
+    /* "adios.pyx":454
  *         elif isinstance(slice_, (int, long)):
  *             fixed.append(slice(slice_, slice_+1, None))
  *         elif isinstance(slice_, (float)):             # <<<<<<<<<<<<<<
@@ -3903,28 +4131,28 @@ static PyObject *__pyx_f_5adios___parse_index(PyObject *__pyx_v_index, PyObject
     __pyx_t_1 = (__pyx_t_2 != 0);
     if (__pyx_t_1) {
 
-      /* "adios.pyx":447
+      /* "adios.pyx":455
  *             fixed.append(slice(slice_, slice_+1, None))
  *         elif isinstance(slice_, (float)):
  *             fixed.append(slice(int(slice_), int(slice_)+1, None))             # <<<<<<<<<<<<<<
  *         else:
  *             fixed.append(slice_)
  */
-      __pyx_t_8 = __Pyx_PyNumber_Int(__pyx_v_slice_); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 447, __pyx_L1_error)
+      __pyx_t_8 = __Pyx_PyNumber_Int(__pyx_v_slice_); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 455, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
-      __pyx_t_9 = __Pyx_PyNumber_Int(__pyx_v_slice_); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 447, __pyx_L1_error)
+      __pyx_t_9 = __Pyx_PyNumber_Int(__pyx_v_slice_); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 455, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
-      __pyx_t_6 = __Pyx_PyInt_AddObjC(__pyx_t_9, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 447, __pyx_L1_error)
+      __pyx_t_6 = __Pyx_PyInt_AddObjC(__pyx_t_9, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 455, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-      __pyx_t_9 = PySlice_New(__pyx_t_8, __pyx_t_6, Py_None); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 447, __pyx_L1_error)
+      __pyx_t_9 = PySlice_New(__pyx_t_8, __pyx_t_6, Py_None); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 455, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-      __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_fixed, __pyx_t_9); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 447, __pyx_L1_error)
+      __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_fixed, __pyx_t_9); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 455, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-      /* "adios.pyx":446
+      /* "adios.pyx":454
  *         elif isinstance(slice_, (int, long)):
  *             fixed.append(slice(slice_, slice_+1, None))
  *         elif isinstance(slice_, (float)):             # <<<<<<<<<<<<<<
@@ -3934,7 +4162,7 @@ static PyObject *__pyx_f_5adios___parse_index(PyObject *__pyx_v_index, PyObject
       goto __pyx_L6;
     }
 
-    /* "adios.pyx":449
+    /* "adios.pyx":457
  *             fixed.append(slice(int(slice_), int(slice_)+1, None))
  *         else:
  *             fixed.append(slice_)             # <<<<<<<<<<<<<<
@@ -3942,23 +4170,23 @@ static PyObject *__pyx_f_5adios___parse_index(PyObject *__pyx_v_index, PyObject
  * 
  */
     /*else*/ {
-      __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_fixed, __pyx_v_slice_); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 449, __pyx_L1_error)
+      __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_fixed, __pyx_v_slice_); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 457, __pyx_L1_error)
     }
     __pyx_L6:;
 
-    /* "adios.pyx":450
+    /* "adios.pyx":458
  *         else:
  *             fixed.append(slice_)
  *         length -= 1             # <<<<<<<<<<<<<<
  * 
  *     index = tuple(fixed)
  */
-    __pyx_t_9 = __Pyx_PyInt_SubtractObjC(__pyx_v_length, __pyx_int_1, 1, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 450, __pyx_L1_error)
+    __pyx_t_9 = __Pyx_PyInt_SubtractObjC(__pyx_v_length, __pyx_int_1, 1, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 458, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
     __Pyx_DECREF_SET(__pyx_v_length, __pyx_t_9);
     __pyx_t_9 = 0;
 
-    /* "adios.pyx":441
+    /* "adios.pyx":449
  *     length = len(index)
  * 
  *     for slice_ in index:             # <<<<<<<<<<<<<<
@@ -3968,57 +4196,57 @@ static PyObject *__pyx_f_5adios___parse_index(PyObject *__pyx_v_index, PyObject
   }
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "adios.pyx":452
+  /* "adios.pyx":460
  *         length -= 1
  * 
  *     index = tuple(fixed)             # <<<<<<<<<<<<<<
  *     if len(index) < ndim:
  *         index += (slice(None),) * (ndim-len(index))
  */
-  __pyx_t_3 = PyList_AsTuple(__pyx_v_fixed); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 452, __pyx_L1_error)
+  __pyx_t_3 = PyList_AsTuple(__pyx_v_fixed); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 460, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF_SET(__pyx_v_index, __pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "adios.pyx":453
+  /* "adios.pyx":461
  * 
  *     index = tuple(fixed)
  *     if len(index) < ndim:             # <<<<<<<<<<<<<<
  *         index += (slice(None),) * (ndim-len(index))
  * 
  */
-  __pyx_t_4 = PyObject_Length(__pyx_v_index); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 453, __pyx_L1_error)
-  __pyx_t_3 = PyInt_FromSsize_t(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 453, __pyx_L1_error)
+  __pyx_t_4 = PyObject_Length(__pyx_v_index); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 461, __pyx_L1_error)
+  __pyx_t_3 = PyInt_FromSsize_t(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 461, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_9 = PyObject_RichCompare(__pyx_t_3, __pyx_v_ndim, Py_LT); __Pyx_XGOTREF(__pyx_t_9); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 453, __pyx_L1_error)
+  __pyx_t_9 = PyObject_RichCompare(__pyx_t_3, __pyx_v_ndim, Py_LT); __Pyx_XGOTREF(__pyx_t_9); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 461, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 453, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 461, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
   if (__pyx_t_1) {
 
-    /* "adios.pyx":454
+    /* "adios.pyx":462
  *     index = tuple(fixed)
  *     if len(index) < ndim:
  *         index += (slice(None),) * (ndim-len(index))             # <<<<<<<<<<<<<<
  * 
  *     return index
  */
-    __pyx_t_4 = PyObject_Length(__pyx_v_index); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 454, __pyx_L1_error)
-    __pyx_t_9 = PyInt_FromSsize_t(__pyx_t_4); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 454, __pyx_L1_error)
+    __pyx_t_4 = PyObject_Length(__pyx_v_index); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 462, __pyx_L1_error)
+    __pyx_t_9 = PyInt_FromSsize_t(__pyx_t_4); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 462, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
-    __pyx_t_3 = PyNumber_Subtract(__pyx_v_ndim, __pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 454, __pyx_L1_error)
+    __pyx_t_3 = PyNumber_Subtract(__pyx_v_ndim, __pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 462, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-    __pyx_t_9 = PyNumber_Multiply(__pyx_tuple__6, __pyx_t_3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 454, __pyx_L1_error)
+    __pyx_t_9 = PyNumber_Multiply(__pyx_tuple__6, __pyx_t_3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 462, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_3 = PyNumber_InPlaceAdd(__pyx_v_index, __pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 454, __pyx_L1_error)
+    __pyx_t_3 = PyNumber_InPlaceAdd(__pyx_v_index, __pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 462, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     __Pyx_DECREF_SET(__pyx_v_index, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "adios.pyx":453
+    /* "adios.pyx":461
  * 
  *     index = tuple(fixed)
  *     if len(index) < ndim:             # <<<<<<<<<<<<<<
@@ -4027,7 +4255,7 @@ static PyObject *__pyx_f_5adios___parse_index(PyObject *__pyx_v_index, PyObject
  */
   }
 
-  /* "adios.pyx":456
+  /* "adios.pyx":464
  *         index += (slice(None),) * (ndim-len(index))
  * 
  *     return index             # <<<<<<<<<<<<<<
@@ -4039,8 +4267,8 @@ static PyObject *__pyx_f_5adios___parse_index(PyObject *__pyx_v_index, PyObject
   __pyx_r = __pyx_v_index;
   goto __pyx_L0;
 
-  /* "adios.pyx":433
- *     ALL =2
+  /* "adios.pyx":441
+ *     DEFAULT = adios_stat_default
  * 
  * cpdef __parse_index(index, ndim):             # <<<<<<<<<<<<<<
  *     # Fix index, handling ellipsis and incomplete slices.
@@ -4094,11 +4322,11 @@ static PyObject *__pyx_pw_5adios_9__parse_index(PyObject *__pyx_self, PyObject *
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_ndim)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__parse_index", 1, 2, 2, 1); __PYX_ERR(0, 433, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__parse_index", 1, 2, 2, 1); __PYX_ERR(0, 441, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__parse_index") < 0)) __PYX_ERR(0, 433, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__parse_index") < 0)) __PYX_ERR(0, 441, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -4111,7 +4339,7 @@ static PyObject *__pyx_pw_5adios_9__parse_index(PyObject *__pyx_self, PyObject *
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__parse_index", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 433, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__parse_index", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 441, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.__parse_index", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -4130,7 +4358,7 @@ static PyObject *__pyx_pf_5adios_8__parse_index(CYTHON_UNUSED PyObject *__pyx_se
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__parse_index", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_5adios___parse_index(__pyx_v_index, __pyx_v_ndim, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 433, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_5adios___parse_index(__pyx_v_index, __pyx_v_ndim, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 441, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -4147,7 +4375,7 @@ static PyObject *__pyx_pf_5adios_8__parse_index(CYTHON_UNUSED PyObject *__pyx_se
   return __pyx_r;
 }
 
-/* "adios.pyx":465
+/* "adios.pyx":473
  * cdef MPI_Comm read_init_comm
  * 
  * cpdef init(str config, MPI_Comm comm = MPI_COMM_WORLD):             # <<<<<<<<<<<<<<
@@ -4170,7 +4398,7 @@ static PyObject *__pyx_f_5adios_init(PyObject *__pyx_v_config, CYTHON_UNUSED int
     }
   }
 
-  /* "adios.pyx":467
+  /* "adios.pyx":475
  * cpdef init(str config, MPI_Comm comm = MPI_COMM_WORLD):
  *     global init_comm
  *     init_comm = comm             # <<<<<<<<<<<<<<
@@ -4179,7 +4407,7 @@ static PyObject *__pyx_f_5adios_init(PyObject *__pyx_v_config, CYTHON_UNUSED int
  */
   __pyx_v_5adios_init_comm = __pyx_v_comm;
 
-  /* "adios.pyx":468
+  /* "adios.pyx":476
  *     global init_comm
  *     init_comm = comm
  *     return adios_init(s2b(config), init_comm)             # <<<<<<<<<<<<<<
@@ -4187,17 +4415,17 @@ static PyObject *__pyx_f_5adios_init(PyObject *__pyx_v_config, CYTHON_UNUSED int
  * cpdef int64_t open(str group_name,
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_config, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 468, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_config, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 476, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 468, __pyx_L1_error)
-  __pyx_t_3 = __Pyx_PyInt_From_int(adios_init(__pyx_t_2, __pyx_v_5adios_init_comm)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 468, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 476, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyInt_From_int(adios_init(__pyx_t_2, __pyx_v_5adios_init_comm)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 476, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":465
+  /* "adios.pyx":473
  * cdef MPI_Comm read_init_comm
  * 
  * cpdef init(str config, MPI_Comm comm = MPI_COMM_WORLD):             # <<<<<<<<<<<<<<
@@ -4250,7 +4478,7 @@ static PyObject *__pyx_pw_5adios_11init(PyObject *__pyx_self, PyObject *__pyx_ar
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "init") < 0)) __PYX_ERR(0, 465, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "init") < 0)) __PYX_ERR(0, 473, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -4262,20 +4490,20 @@ static PyObject *__pyx_pw_5adios_11init(PyObject *__pyx_self, PyObject *__pyx_ar
     }
     __pyx_v_config = ((PyObject*)values[0]);
     if (values[1]) {
-      __pyx_v_comm = __Pyx_PyInt_As_MPI_Comm(values[1]); if (unlikely((__pyx_v_comm == (MPI_Comm)-1) && PyErr_Occurred())) __PYX_ERR(0, 465, __pyx_L3_error)
+      __pyx_v_comm = __Pyx_PyInt_As_MPI_Comm(values[1]); if (unlikely((__pyx_v_comm == ((MPI_Comm)-1)) && PyErr_Occurred())) __PYX_ERR(0, 473, __pyx_L3_error)
     } else {
       __pyx_v_comm = __pyx_k__7;
     }
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("init", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 465, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("init", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 473, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.init", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_config), (&PyString_Type), 1, "config", 1))) __PYX_ERR(0, 465, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_config), (&PyString_Type), 1, "config", 1))) __PYX_ERR(0, 473, __pyx_L1_error)
   __pyx_r = __pyx_pf_5adios_10init(__pyx_self, __pyx_v_config, __pyx_v_comm);
 
   /* function exit code */
@@ -4296,7 +4524,7 @@ static PyObject *__pyx_pf_5adios_10init(CYTHON_UNUSED PyObject *__pyx_self, PyOb
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_2.__pyx_n = 1;
   __pyx_t_2.comm = __pyx_v_comm;
-  __pyx_t_1 = __pyx_f_5adios_init(__pyx_v_config, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 465, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_5adios_init(__pyx_v_config, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 473, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -4313,7 +4541,7 @@ static PyObject *__pyx_pf_5adios_10init(CYTHON_UNUSED PyObject *__pyx_self, PyOb
   return __pyx_r;
 }
 
-/* "adios.pyx":470
+/* "adios.pyx":478
  *     return adios_init(s2b(config), init_comm)
  * 
  * cpdef int64_t open(str group_name,             # <<<<<<<<<<<<<<
@@ -4341,28 +4569,28 @@ static int64_t __pyx_f_5adios_open(PyObject *__pyx_v_group_name, PyObject *__pyx
     }
   }
 
-  /* "adios.pyx":476
+  /* "adios.pyx":484
  *     cdef int64_t fd
  *     cdef int result
  *     result = adios_open(&fd, s2b(group_name), s2b(name), s2b(mode), comm)             # <<<<<<<<<<<<<<
  *     return fd
  * 
  */
-  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_group_name, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 476, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_group_name, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 484, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 476, __pyx_L1_error)
-  __pyx_t_3 = __pyx_f_5adios_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 476, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 484, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_5adios_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 484, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 476, __pyx_L1_error)
-  __pyx_t_5 = __pyx_f_5adios_s2b(__pyx_v_mode, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 476, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 484, __pyx_L1_error)
+  __pyx_t_5 = __pyx_f_5adios_s2b(__pyx_v_mode, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 484, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_t_5); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(0, 476, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_t_5); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(0, 484, __pyx_L1_error)
   __pyx_v_result = adios_open((&__pyx_v_fd), __pyx_t_2, __pyx_t_4, __pyx_t_6, __pyx_v_comm);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "adios.pyx":477
+  /* "adios.pyx":485
  *     cdef int result
  *     result = adios_open(&fd, s2b(group_name), s2b(name), s2b(mode), comm)
  *     return fd             # <<<<<<<<<<<<<<
@@ -4372,7 +4600,7 @@ static int64_t __pyx_f_5adios_open(PyObject *__pyx_v_group_name, PyObject *__pyx
   __pyx_r = __pyx_v_fd;
   goto __pyx_L0;
 
-  /* "adios.pyx":470
+  /* "adios.pyx":478
  *     return adios_init(s2b(config), init_comm)
  * 
  * cpdef int64_t open(str group_name,             # <<<<<<<<<<<<<<
@@ -4425,12 +4653,12 @@ static PyObject *__pyx_pw_5adios_13open(PyObject *__pyx_self, PyObject *__pyx_ar
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("open", 0, 3, 4, 1); __PYX_ERR(0, 470, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("open", 0, 3, 4, 1); __PYX_ERR(0, 478, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mode)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("open", 0, 3, 4, 2); __PYX_ERR(0, 470, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("open", 0, 3, 4, 2); __PYX_ERR(0, 478, __pyx_L3_error)
         }
         case  3:
         if (kw_args > 0) {
@@ -4439,7 +4667,7 @@ static PyObject *__pyx_pw_5adios_13open(PyObject *__pyx_self, PyObject *__pyx_ar
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "open") < 0)) __PYX_ERR(0, 470, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "open") < 0)) __PYX_ERR(0, 478, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -4455,22 +4683,22 @@ static PyObject *__pyx_pw_5adios_13open(PyObject *__pyx_self, PyObject *__pyx_ar
     __pyx_v_name = ((PyObject*)values[1]);
     __pyx_v_mode = ((PyObject*)values[2]);
     if (values[3]) {
-      __pyx_v_comm = __Pyx_PyInt_As_MPI_Comm(values[3]); if (unlikely((__pyx_v_comm == (MPI_Comm)-1) && PyErr_Occurred())) __PYX_ERR(0, 473, __pyx_L3_error)
+      __pyx_v_comm = __Pyx_PyInt_As_MPI_Comm(values[3]); if (unlikely((__pyx_v_comm == ((MPI_Comm)-1)) && PyErr_Occurred())) __PYX_ERR(0, 481, __pyx_L3_error)
     } else {
       __pyx_v_comm = __pyx_k__8;
     }
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("open", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 470, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("open", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 478, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.open", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_group_name), (&PyString_Type), 1, "group_name", 1))) __PYX_ERR(0, 470, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 471, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mode), (&PyString_Type), 1, "mode", 1))) __PYX_ERR(0, 472, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_group_name), (&PyString_Type), 1, "group_name", 1))) __PYX_ERR(0, 478, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 479, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mode), (&PyString_Type), 1, "mode", 1))) __PYX_ERR(0, 480, __pyx_L1_error)
   __pyx_r = __pyx_pf_5adios_12open(__pyx_self, __pyx_v_group_name, __pyx_v_name, __pyx_v_mode, __pyx_v_comm);
 
   /* function exit code */
@@ -4493,7 +4721,7 @@ static PyObject *__pyx_pf_5adios_12open(CYTHON_UNUSED PyObject *__pyx_self, PyOb
   __pyx_t_2.__pyx_n = 1;
   __pyx_t_2.comm = __pyx_v_comm;
   __pyx_t_1 = __pyx_f_5adios_open(__pyx_v_group_name, __pyx_v_name, __pyx_v_mode, 0, &__pyx_t_2); 
-  __pyx_t_3 = __Pyx_PyInt_From_int64_t(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 470, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyInt_From_int64_t(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 478, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
@@ -4510,7 +4738,7 @@ static PyObject *__pyx_pf_5adios_12open(CYTHON_UNUSED PyObject *__pyx_self, PyOb
   return __pyx_r;
 }
 
-/* "adios.pyx":479
+/* "adios.pyx":487
  *     return fd
  * 
  * cpdef int64_t set_group_size(int64_t fd_p, uint64_t data_size):             # <<<<<<<<<<<<<<
@@ -4526,7 +4754,7 @@ static int64_t __pyx_f_5adios_set_group_size(int64_t __pyx_v_fd_p, uint64_t __py
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("set_group_size", 0);
 
-  /* "adios.pyx":482
+  /* "adios.pyx":490
  *     cdef uint64_t total_size
  *     cdef int result
  *     result = adios_group_size(fd_p, data_size, &total_size)             # <<<<<<<<<<<<<<
@@ -4535,7 +4763,7 @@ static int64_t __pyx_f_5adios_set_group_size(int64_t __pyx_v_fd_p, uint64_t __py
  */
   __pyx_v_result = adios_group_size(__pyx_v_fd_p, __pyx_v_data_size, (&__pyx_v_total_size));
 
-  /* "adios.pyx":483
+  /* "adios.pyx":491
  *     cdef int result
  *     result = adios_group_size(fd_p, data_size, &total_size)
  *     return total_size             # <<<<<<<<<<<<<<
@@ -4545,7 +4773,7 @@ static int64_t __pyx_f_5adios_set_group_size(int64_t __pyx_v_fd_p, uint64_t __py
   __pyx_r = __pyx_v_total_size;
   goto __pyx_L0;
 
-  /* "adios.pyx":479
+  /* "adios.pyx":487
  *     return fd
  * 
  * cpdef int64_t set_group_size(int64_t fd_p, uint64_t data_size):             # <<<<<<<<<<<<<<
@@ -4588,11 +4816,11 @@ static PyObject *__pyx_pw_5adios_15set_group_size(PyObject *__pyx_self, PyObject
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_data_size)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("set_group_size", 1, 2, 2, 1); __PYX_ERR(0, 479, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("set_group_size", 1, 2, 2, 1); __PYX_ERR(0, 487, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_group_size") < 0)) __PYX_ERR(0, 479, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_group_size") < 0)) __PYX_ERR(0, 487, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -4600,12 +4828,12 @@ static PyObject *__pyx_pw_5adios_15set_group_size(PyObject *__pyx_self, PyObject
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
     }
-    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 479, __pyx_L3_error)
-    __pyx_v_data_size = __Pyx_PyInt_As_uint64_t(values[1]); if (unlikely((__pyx_v_data_size == (uint64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 479, __pyx_L3_error)
+    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 487, __pyx_L3_error)
+    __pyx_v_data_size = __Pyx_PyInt_As_uint64_t(values[1]); if (unlikely((__pyx_v_data_size == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 487, __pyx_L3_error)
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("set_group_size", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 479, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("set_group_size", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 487, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.set_group_size", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -4624,7 +4852,7 @@ static PyObject *__pyx_pf_5adios_14set_group_size(CYTHON_UNUSED PyObject *__pyx_
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("set_group_size", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int64_t(__pyx_f_5adios_set_group_size(__pyx_v_fd_p, __pyx_v_data_size, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 479, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int64_t(__pyx_f_5adios_set_group_size(__pyx_v_fd_p, __pyx_v_data_size, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 487, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -4641,7 +4869,7 @@ static PyObject *__pyx_pf_5adios_14set_group_size(CYTHON_UNUSED PyObject *__pyx_
   return __pyx_r;
 }
 
-/* "adios.pyx":485
+/* "adios.pyx":493
  *     return total_size
  * 
  * cpdef int write (int64_t fd_p, str name, val, dtype=None):             # <<<<<<<<<<<<<<
@@ -4671,7 +4899,7 @@ static int __pyx_f_5adios_write(int64_t __pyx_v_fd_p, PyObject *__pyx_v_name, Py
     }
   }
 
-  /* "adios.pyx":487
+  /* "adios.pyx":495
  * cpdef int write (int64_t fd_p, str name, val, dtype=None):
  *     cdef np.ndarray val_
  *     if isinstance(val, (np.ndarray)):             # <<<<<<<<<<<<<<
@@ -4682,36 +4910,36 @@ static int __pyx_f_5adios_write(int64_t __pyx_v_fd_p, PyObject *__pyx_v_name, Py
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "adios.pyx":488
+    /* "adios.pyx":496
  *     cdef np.ndarray val_
  *     if isinstance(val, (np.ndarray)):
  *         if val.flags.contiguous:             # <<<<<<<<<<<<<<
  *             val_ = val
  *         else:
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_val, __pyx_n_s_flags); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 488, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_val, __pyx_n_s_flags); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 496, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_contiguous); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 488, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_contiguous); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 496, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 488, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 496, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     if (__pyx_t_2) {
 
-      /* "adios.pyx":489
+      /* "adios.pyx":497
  *     if isinstance(val, (np.ndarray)):
  *         if val.flags.contiguous:
  *             val_ = val             # <<<<<<<<<<<<<<
  *         else:
  *             val_ = np.array(val, copy=True)
  */
-      if (!(likely(((__pyx_v_val) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_val, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 489, __pyx_L1_error)
+      if (!(likely(((__pyx_v_val) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_val, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 497, __pyx_L1_error)
       __pyx_t_4 = __pyx_v_val;
       __Pyx_INCREF(__pyx_t_4);
       __pyx_v_val_ = ((PyArrayObject *)__pyx_t_4);
       __pyx_t_4 = 0;
 
-      /* "adios.pyx":488
+      /* "adios.pyx":496
  *     cdef np.ndarray val_
  *     if isinstance(val, (np.ndarray)):
  *         if val.flags.contiguous:             # <<<<<<<<<<<<<<
@@ -4721,7 +4949,7 @@ static int __pyx_f_5adios_write(int64_t __pyx_v_fd_p, PyObject *__pyx_v_name, Py
       goto __pyx_L4;
     }
 
-    /* "adios.pyx":491
+    /* "adios.pyx":499
  *             val_ = val
  *         else:
  *             val_ = np.array(val, copy=True)             # <<<<<<<<<<<<<<
@@ -4729,31 +4957,31 @@ static int __pyx_f_5adios_write(int64_t __pyx_v_fd_p, PyObject *__pyx_v_name, Py
  *         val_ = np.array(val, dtype=dtype)
  */
     /*else*/ {
-      __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 491, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 499, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_array); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 491, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_array); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 499, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 491, __pyx_L1_error)
+      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 499, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_INCREF(__pyx_v_val);
       __Pyx_GIVEREF(__pyx_v_val);
       PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_val);
-      __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 491, __pyx_L1_error)
+      __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 499, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
-      if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_copy, Py_True) < 0) __PYX_ERR(0, 491, __pyx_L1_error)
-      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 491, __pyx_L1_error)
+      if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_copy, Py_True) < 0) __PYX_ERR(0, 499, __pyx_L1_error)
+      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 499, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 491, __pyx_L1_error)
+      if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 499, __pyx_L1_error)
       __pyx_v_val_ = ((PyArrayObject *)__pyx_t_6);
       __pyx_t_6 = 0;
     }
     __pyx_L4:;
 
-    /* "adios.pyx":487
+    /* "adios.pyx":495
  * cpdef int write (int64_t fd_p, str name, val, dtype=None):
  *     cdef np.ndarray val_
  *     if isinstance(val, (np.ndarray)):             # <<<<<<<<<<<<<<
@@ -4763,7 +4991,7 @@ static int __pyx_f_5adios_write(int64_t __pyx_v_fd_p, PyObject *__pyx_v_name, Py
     goto __pyx_L3;
   }
 
-  /* "adios.pyx":493
+  /* "adios.pyx":501
  *             val_ = np.array(val, copy=True)
  *     else:
  *         val_ = np.array(val, dtype=dtype)             # <<<<<<<<<<<<<<
@@ -4771,66 +4999,66 @@ static int __pyx_f_5adios_write(int64_t __pyx_v_fd_p, PyObject *__pyx_v_name, Py
  *     cdef void * ptr
  */
   /*else*/ {
-    __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 493, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 501, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_array); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 493, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_array); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 501, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-    __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 493, __pyx_L1_error)
+    __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 501, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_INCREF(__pyx_v_val);
     __Pyx_GIVEREF(__pyx_v_val);
     PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_val);
-    __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 493, __pyx_L1_error)
+    __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 501, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_v_dtype) < 0) __PYX_ERR(0, 493, __pyx_L1_error)
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 493, __pyx_L1_error)
+    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_v_dtype) < 0) __PYX_ERR(0, 501, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 501, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 493, __pyx_L1_error)
+    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 501, __pyx_L1_error)
     __pyx_v_val_ = ((PyArrayObject *)__pyx_t_3);
     __pyx_t_3 = 0;
   }
   __pyx_L3:;
 
-  /* "adios.pyx":496
+  /* "adios.pyx":504
  * 
  *     cdef void * ptr
  *     if (val_.dtype.char in ('S', 'U')):             # <<<<<<<<<<<<<<
  *         bstr = val_.tostring()
  *         ptr = <void *> PyBytes_AS_STRING(bstr)
  */
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val_), __pyx_n_s_dtype); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 496, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val_), __pyx_n_s_dtype); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 504, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_char); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 496, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_char); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 504, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_4, __pyx_n_s_S, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 496, __pyx_L1_error)
+  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_4, __pyx_n_s_S, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 504, __pyx_L1_error)
   if (!__pyx_t_1) {
   } else {
     __pyx_t_2 = __pyx_t_1;
     goto __pyx_L6_bool_binop_done;
   }
-  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_4, __pyx_n_s_U, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 496, __pyx_L1_error)
+  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_4, __pyx_n_s_U, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 504, __pyx_L1_error)
   __pyx_t_2 = __pyx_t_1;
   __pyx_L6_bool_binop_done:;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "adios.pyx":497
+    /* "adios.pyx":505
  *     cdef void * ptr
  *     if (val_.dtype.char in ('S', 'U')):
  *         bstr = val_.tostring()             # <<<<<<<<<<<<<<
  *         ptr = <void *> PyBytes_AS_STRING(bstr)
  *     else:
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val_), __pyx_n_s_tostring); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 497, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val_), __pyx_n_s_tostring); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 505, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_6 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
       __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_3);
       if (likely(__pyx_t_6)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -4840,17 +5068,17 @@ static int __pyx_f_5adios_write(int64_t __pyx_v_fd_p, PyObject *__pyx_v_name, Py
       }
     }
     if (__pyx_t_6) {
-      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 497, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 505, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     } else {
-      __pyx_t_4 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 497, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 505, __pyx_L1_error)
     }
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __pyx_v_bstr = __pyx_t_4;
     __pyx_t_4 = 0;
 
-    /* "adios.pyx":498
+    /* "adios.pyx":506
  *     if (val_.dtype.char in ('S', 'U')):
  *         bstr = val_.tostring()
  *         ptr = <void *> PyBytes_AS_STRING(bstr)             # <<<<<<<<<<<<<<
@@ -4859,7 +5087,7 @@ static int __pyx_f_5adios_write(int64_t __pyx_v_fd_p, PyObject *__pyx_v_name, Py
  */
     __pyx_v_ptr = ((void *)PyBytes_AS_STRING(__pyx_v_bstr));
 
-    /* "adios.pyx":496
+    /* "adios.pyx":504
  * 
  *     cdef void * ptr
  *     if (val_.dtype.char in ('S', 'U')):             # <<<<<<<<<<<<<<
@@ -4869,7 +5097,7 @@ static int __pyx_f_5adios_write(int64_t __pyx_v_fd_p, PyObject *__pyx_v_name, Py
     goto __pyx_L5;
   }
 
-  /* "adios.pyx":500
+  /* "adios.pyx":508
  *         ptr = <void *> PyBytes_AS_STRING(bstr)
  *     else:
  *         ptr = <void *> val_.data             # <<<<<<<<<<<<<<
@@ -4881,21 +5109,21 @@ static int __pyx_f_5adios_write(int64_t __pyx_v_fd_p, PyObject *__pyx_v_name, Py
   }
   __pyx_L5:;
 
-  /* "adios.pyx":502
+  /* "adios.pyx":510
  *         ptr = <void *> val_.data
  * 
  *     return adios_write (fd_p, s2b(name), ptr)             # <<<<<<<<<<<<<<
  * 
  * cpdef int write_int (int64_t fd_p, str name, int val):
  */
-  __pyx_t_4 = __pyx_f_5adios_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 502, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_5adios_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 510, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_7 = __Pyx_PyObject_AsString(__pyx_t_4); if (unlikely((!__pyx_t_7) && PyErr_Occurred())) __PYX_ERR(0, 502, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyObject_AsString(__pyx_t_4); if (unlikely((!__pyx_t_7) && PyErr_Occurred())) __PYX_ERR(0, 510, __pyx_L1_error)
   __pyx_r = adios_write(__pyx_v_fd_p, __pyx_t_7, __pyx_v_ptr);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":485
+  /* "adios.pyx":493
  *     return total_size
  * 
  * cpdef int write (int64_t fd_p, str name, val, dtype=None):             # <<<<<<<<<<<<<<
@@ -4952,12 +5180,12 @@ static PyObject *__pyx_pw_5adios_17write(PyObject *__pyx_self, PyObject *__pyx_a
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("write", 0, 3, 4, 1); __PYX_ERR(0, 485, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("write", 0, 3, 4, 1); __PYX_ERR(0, 493, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_val)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("write", 0, 3, 4, 2); __PYX_ERR(0, 485, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("write", 0, 3, 4, 2); __PYX_ERR(0, 493, __pyx_L3_error)
         }
         case  3:
         if (kw_args > 0) {
@@ -4966,7 +5194,7 @@ static PyObject *__pyx_pw_5adios_17write(PyObject *__pyx_self, PyObject *__pyx_a
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "write") < 0)) __PYX_ERR(0, 485, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "write") < 0)) __PYX_ERR(0, 493, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -4978,20 +5206,20 @@ static PyObject *__pyx_pw_5adios_17write(PyObject *__pyx_self, PyObject *__pyx_a
         default: goto __pyx_L5_argtuple_error;
       }
     }
-    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 485, __pyx_L3_error)
+    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 493, __pyx_L3_error)
     __pyx_v_name = ((PyObject*)values[1]);
     __pyx_v_val = values[2];
     __pyx_v_dtype = values[3];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("write", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 485, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("write", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 493, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.write", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 485, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 493, __pyx_L1_error)
   __pyx_r = __pyx_pf_5adios_16write(__pyx_self, __pyx_v_fd_p, __pyx_v_name, __pyx_v_val, __pyx_v_dtype);
 
   /* function exit code */
@@ -5014,7 +5242,7 @@ static PyObject *__pyx_pf_5adios_16write(CYTHON_UNUSED PyObject *__pyx_self, int
   __pyx_t_2.__pyx_n = 1;
   __pyx_t_2.dtype = __pyx_v_dtype;
   __pyx_t_1 = __pyx_f_5adios_write(__pyx_v_fd_p, __pyx_v_name, __pyx_v_val, 0, &__pyx_t_2); 
-  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 485, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 493, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
@@ -5031,7 +5259,7 @@ static PyObject *__pyx_pf_5adios_16write(CYTHON_UNUSED PyObject *__pyx_self, int
   return __pyx_r;
 }
 
-/* "adios.pyx":504
+/* "adios.pyx":512
  *     return adios_write (fd_p, s2b(name), ptr)
  * 
  * cpdef int write_int (int64_t fd_p, str name, int val):             # <<<<<<<<<<<<<<
@@ -5047,21 +5275,21 @@ static int __pyx_f_5adios_write_int(int64_t __pyx_v_fd_p, PyObject *__pyx_v_name
   char *__pyx_t_2;
   __Pyx_RefNannySetupContext("write_int", 0);
 
-  /* "adios.pyx":505
+  /* "adios.pyx":513
  * 
  * cpdef int write_int (int64_t fd_p, str name, int val):
  *     return adios_write (fd_p, s2b(name), &val)             # <<<<<<<<<<<<<<
  * 
  * cpdef int write_long (int64_t fd_p, str name, long val):
  */
-  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 505, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 513, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 505, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 513, __pyx_L1_error)
   __pyx_r = adios_write(__pyx_v_fd_p, __pyx_t_2, (&__pyx_v_val));
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":504
+  /* "adios.pyx":512
  *     return adios_write (fd_p, s2b(name), ptr)
  * 
  * cpdef int write_int (int64_t fd_p, str name, int val):             # <<<<<<<<<<<<<<
@@ -5110,16 +5338,16 @@ static PyObject *__pyx_pw_5adios_19write_int(PyObject *__pyx_self, PyObject *__p
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("write_int", 1, 3, 3, 1); __PYX_ERR(0, 504, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("write_int", 1, 3, 3, 1); __PYX_ERR(0, 512, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_val)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("write_int", 1, 3, 3, 2); __PYX_ERR(0, 504, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("write_int", 1, 3, 3, 2); __PYX_ERR(0, 512, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "write_int") < 0)) __PYX_ERR(0, 504, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "write_int") < 0)) __PYX_ERR(0, 512, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -5128,19 +5356,19 @@ static PyObject *__pyx_pw_5adios_19write_int(PyObject *__pyx_self, PyObject *__p
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
     }
-    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 504, __pyx_L3_error)
+    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 512, __pyx_L3_error)
     __pyx_v_name = ((PyObject*)values[1]);
-    __pyx_v_val = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_val == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 504, __pyx_L3_error)
+    __pyx_v_val = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_val == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 512, __pyx_L3_error)
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("write_int", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 504, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("write_int", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 512, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.write_int", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 504, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 512, __pyx_L1_error)
   __pyx_r = __pyx_pf_5adios_18write_int(__pyx_self, __pyx_v_fd_p, __pyx_v_name, __pyx_v_val);
 
   /* function exit code */
@@ -5158,7 +5386,7 @@ static PyObject *__pyx_pf_5adios_18write_int(CYTHON_UNUSED PyObject *__pyx_self,
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("write_int", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_5adios_write_int(__pyx_v_fd_p, __pyx_v_name, __pyx_v_val, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 504, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_5adios_write_int(__pyx_v_fd_p, __pyx_v_name, __pyx_v_val, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 512, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -5175,7 +5403,7 @@ static PyObject *__pyx_pf_5adios_18write_int(CYTHON_UNUSED PyObject *__pyx_self,
   return __pyx_r;
 }
 
-/* "adios.pyx":507
+/* "adios.pyx":515
  *     return adios_write (fd_p, s2b(name), &val)
  * 
  * cpdef int write_long (int64_t fd_p, str name, long val):             # <<<<<<<<<<<<<<
@@ -5191,21 +5419,21 @@ static int __pyx_f_5adios_write_long(int64_t __pyx_v_fd_p, PyObject *__pyx_v_nam
   char *__pyx_t_2;
   __Pyx_RefNannySetupContext("write_long", 0);
 
-  /* "adios.pyx":508
+  /* "adios.pyx":516
  * 
  * cpdef int write_long (int64_t fd_p, str name, long val):
  *     return adios_write (fd_p, s2b(name), &val)             # <<<<<<<<<<<<<<
  * 
  * cpdef int write_float (int64_t fd_p, str name, float val):
  */
-  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 508, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 516, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 508, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 516, __pyx_L1_error)
   __pyx_r = adios_write(__pyx_v_fd_p, __pyx_t_2, (&__pyx_v_val));
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":507
+  /* "adios.pyx":515
  *     return adios_write (fd_p, s2b(name), &val)
  * 
  * cpdef int write_long (int64_t fd_p, str name, long val):             # <<<<<<<<<<<<<<
@@ -5254,16 +5482,16 @@ static PyObject *__pyx_pw_5adios_21write_long(PyObject *__pyx_self, PyObject *__
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("write_long", 1, 3, 3, 1); __PYX_ERR(0, 507, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("write_long", 1, 3, 3, 1); __PYX_ERR(0, 515, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_val)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("write_long", 1, 3, 3, 2); __PYX_ERR(0, 507, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("write_long", 1, 3, 3, 2); __PYX_ERR(0, 515, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "write_long") < 0)) __PYX_ERR(0, 507, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "write_long") < 0)) __PYX_ERR(0, 515, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -5272,19 +5500,19 @@ static PyObject *__pyx_pw_5adios_21write_long(PyObject *__pyx_self, PyObject *__
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
     }
-    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 507, __pyx_L3_error)
+    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 515, __pyx_L3_error)
     __pyx_v_name = ((PyObject*)values[1]);
-    __pyx_v_val = __Pyx_PyInt_As_long(values[2]); if (unlikely((__pyx_v_val == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 507, __pyx_L3_error)
+    __pyx_v_val = __Pyx_PyInt_As_long(values[2]); if (unlikely((__pyx_v_val == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 515, __pyx_L3_error)
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("write_long", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 507, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("write_long", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 515, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.write_long", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 507, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 515, __pyx_L1_error)
   __pyx_r = __pyx_pf_5adios_20write_long(__pyx_self, __pyx_v_fd_p, __pyx_v_name, __pyx_v_val);
 
   /* function exit code */
@@ -5302,7 +5530,7 @@ static PyObject *__pyx_pf_5adios_20write_long(CYTHON_UNUSED PyObject *__pyx_self
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("write_long", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_5adios_write_long(__pyx_v_fd_p, __pyx_v_name, __pyx_v_val, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 507, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_5adios_write_long(__pyx_v_fd_p, __pyx_v_name, __pyx_v_val, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 515, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -5319,7 +5547,7 @@ static PyObject *__pyx_pf_5adios_20write_long(CYTHON_UNUSED PyObject *__pyx_self
   return __pyx_r;
 }
 
-/* "adios.pyx":510
+/* "adios.pyx":518
  *     return adios_write (fd_p, s2b(name), &val)
  * 
  * cpdef int write_float (int64_t fd_p, str name, float val):             # <<<<<<<<<<<<<<
@@ -5335,21 +5563,21 @@ static int __pyx_f_5adios_write_float(int64_t __pyx_v_fd_p, PyObject *__pyx_v_na
   char *__pyx_t_2;
   __Pyx_RefNannySetupContext("write_float", 0);
 
-  /* "adios.pyx":511
+  /* "adios.pyx":519
  * 
  * cpdef int write_float (int64_t fd_p, str name, float val):
  *     return adios_write (fd_p, s2b(name), &val)             # <<<<<<<<<<<<<<
  * 
  * cpdef int write_double (int64_t fd_p, str name, double val):
  */
-  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 511, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 519, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 511, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 519, __pyx_L1_error)
   __pyx_r = adios_write(__pyx_v_fd_p, __pyx_t_2, (&__pyx_v_val));
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":510
+  /* "adios.pyx":518
  *     return adios_write (fd_p, s2b(name), &val)
  * 
  * cpdef int write_float (int64_t fd_p, str name, float val):             # <<<<<<<<<<<<<<
@@ -5398,16 +5626,16 @@ static PyObject *__pyx_pw_5adios_23write_float(PyObject *__pyx_self, PyObject *_
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("write_float", 1, 3, 3, 1); __PYX_ERR(0, 510, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("write_float", 1, 3, 3, 1); __PYX_ERR(0, 518, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_val)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("write_float", 1, 3, 3, 2); __PYX_ERR(0, 510, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("write_float", 1, 3, 3, 2); __PYX_ERR(0, 518, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "write_float") < 0)) __PYX_ERR(0, 510, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "write_float") < 0)) __PYX_ERR(0, 518, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -5416,19 +5644,19 @@ static PyObject *__pyx_pw_5adios_23write_float(PyObject *__pyx_self, PyObject *_
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
     }
-    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 510, __pyx_L3_error)
+    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 518, __pyx_L3_error)
     __pyx_v_name = ((PyObject*)values[1]);
-    __pyx_v_val = __pyx_PyFloat_AsFloat(values[2]); if (unlikely((__pyx_v_val == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 510, __pyx_L3_error)
+    __pyx_v_val = __pyx_PyFloat_AsFloat(values[2]); if (unlikely((__pyx_v_val == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 518, __pyx_L3_error)
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("write_float", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 510, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("write_float", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 518, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.write_float", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 510, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 518, __pyx_L1_error)
   __pyx_r = __pyx_pf_5adios_22write_float(__pyx_self, __pyx_v_fd_p, __pyx_v_name, __pyx_v_val);
 
   /* function exit code */
@@ -5446,7 +5674,7 @@ static PyObject *__pyx_pf_5adios_22write_float(CYTHON_UNUSED PyObject *__pyx_sel
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("write_float", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_5adios_write_float(__pyx_v_fd_p, __pyx_v_name, __pyx_v_val, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 510, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_5adios_write_float(__pyx_v_fd_p, __pyx_v_name, __pyx_v_val, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 518, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -5463,7 +5691,7 @@ static PyObject *__pyx_pf_5adios_22write_float(CYTHON_UNUSED PyObject *__pyx_sel
   return __pyx_r;
 }
 
-/* "adios.pyx":513
+/* "adios.pyx":521
  *     return adios_write (fd_p, s2b(name), &val)
  * 
  * cpdef int write_double (int64_t fd_p, str name, double val):             # <<<<<<<<<<<<<<
@@ -5479,21 +5707,21 @@ static int __pyx_f_5adios_write_double(int64_t __pyx_v_fd_p, PyObject *__pyx_v_n
   char *__pyx_t_2;
   __Pyx_RefNannySetupContext("write_double", 0);
 
-  /* "adios.pyx":514
+  /* "adios.pyx":522
  * 
  * cpdef int write_double (int64_t fd_p, str name, double val):
  *     return adios_write (fd_p, s2b(name), &val)             # <<<<<<<<<<<<<<
  * 
  * 
  */
-  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 514, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 522, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 514, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 522, __pyx_L1_error)
   __pyx_r = adios_write(__pyx_v_fd_p, __pyx_t_2, (&__pyx_v_val));
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":513
+  /* "adios.pyx":521
  *     return adios_write (fd_p, s2b(name), &val)
  * 
  * cpdef int write_double (int64_t fd_p, str name, double val):             # <<<<<<<<<<<<<<
@@ -5542,16 +5770,16 @@ static PyObject *__pyx_pw_5adios_25write_double(PyObject *__pyx_self, PyObject *
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("write_double", 1, 3, 3, 1); __PYX_ERR(0, 513, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("write_double", 1, 3, 3, 1); __PYX_ERR(0, 521, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_val)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("write_double", 1, 3, 3, 2); __PYX_ERR(0, 513, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("write_double", 1, 3, 3, 2); __PYX_ERR(0, 521, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "write_double") < 0)) __PYX_ERR(0, 513, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "write_double") < 0)) __PYX_ERR(0, 521, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -5560,19 +5788,19 @@ static PyObject *__pyx_pw_5adios_25write_double(PyObject *__pyx_self, PyObject *
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
     }
-    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 513, __pyx_L3_error)
+    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 521, __pyx_L3_error)
     __pyx_v_name = ((PyObject*)values[1]);
-    __pyx_v_val = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_val == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 513, __pyx_L3_error)
+    __pyx_v_val = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_val == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 521, __pyx_L3_error)
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("write_double", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 513, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("write_double", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 521, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.write_double", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 513, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 521, __pyx_L1_error)
   __pyx_r = __pyx_pf_5adios_24write_double(__pyx_self, __pyx_v_fd_p, __pyx_v_name, __pyx_v_val);
 
   /* function exit code */
@@ -5590,7 +5818,7 @@ static PyObject *__pyx_pf_5adios_24write_double(CYTHON_UNUSED PyObject *__pyx_se
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("write_double", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_5adios_write_double(__pyx_v_fd_p, __pyx_v_name, __pyx_v_val, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 513, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_5adios_write_double(__pyx_v_fd_p, __pyx_v_name, __pyx_v_val, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 521, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -5607,7 +5835,7 @@ static PyObject *__pyx_pf_5adios_24write_double(CYTHON_UNUSED PyObject *__pyx_se
   return __pyx_r;
 }
 
-/* "adios.pyx":517
+/* "adios.pyx":525
  * 
  * 
  * cpdef int read(int64_t fd_p, str name, np.ndarray val):             # <<<<<<<<<<<<<<
@@ -5628,7 +5856,7 @@ static int __pyx_f_5adios_read(int64_t __pyx_v_fd_p, PyObject *__pyx_v_name, PyA
   uint64_t __pyx_t_7;
   __Pyx_RefNannySetupContext("read", 0);
 
-  /* "adios.pyx":518
+  /* "adios.pyx":526
  * 
  * cpdef int read(int64_t fd_p, str name, np.ndarray val):
  *     assert val.flags.contiguous, 'Only contiguous arrays are supported.'             # <<<<<<<<<<<<<<
@@ -5637,36 +5865,36 @@ static int __pyx_f_5adios_read(int64_t __pyx_v_fd_p, PyObject *__pyx_v_name, PyA
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
   if (unlikely(!Py_OptimizeFlag)) {
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val), __pyx_n_s_flags); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 518, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val), __pyx_n_s_flags); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 526, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_contiguous); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 518, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_contiguous); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 526, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 518, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 526, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     if (unlikely(!__pyx_t_3)) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Only_contiguous_arrays_are_suppo);
-      __PYX_ERR(0, 518, __pyx_L1_error)
+      __PYX_ERR(0, 526, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "adios.pyx":519
+  /* "adios.pyx":527
  * cpdef int read(int64_t fd_p, str name, np.ndarray val):
  *     assert val.flags.contiguous, 'Only contiguous arrays are supported.'
  *     print ("Reading ... ", val.itemsize * val.size, "(bytes)")             # <<<<<<<<<<<<<<
  *     return adios_read(fd_p, s2b(name), <void *> val.data, val.itemsize * val.size)
  * 
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val), __pyx_n_s_itemsize); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 519, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val), __pyx_n_s_itemsize); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 527, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val), __pyx_n_s_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 519, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val), __pyx_n_s_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 527, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = PyNumber_Multiply(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 519, __pyx_L1_error)
+  __pyx_t_4 = PyNumber_Multiply(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 527, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 519, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 527, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_kp_s_Reading);
   __Pyx_GIVEREF(__pyx_kp_s_Reading);
@@ -5677,36 +5905,36 @@ static int __pyx_f_5adios_read(int64_t __pyx_v_fd_p, PyObject *__pyx_v_name, PyA
   __Pyx_GIVEREF(__pyx_kp_s_bytes);
   PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_kp_s_bytes);
   __pyx_t_4 = 0;
-  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 519, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 527, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "adios.pyx":520
+  /* "adios.pyx":528
  *     assert val.flags.contiguous, 'Only contiguous arrays are supported.'
  *     print ("Reading ... ", val.itemsize * val.size, "(bytes)")
  *     return adios_read(fd_p, s2b(name), <void *> val.data, val.itemsize * val.size)             # <<<<<<<<<<<<<<
  * 
  * cpdef int close(int64_t fd_p):
  */
-  __pyx_t_4 = __pyx_f_5adios_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 520, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_5adios_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 528, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = __Pyx_PyObject_AsString(__pyx_t_4); if (unlikely((!__pyx_t_5) && PyErr_Occurred())) __PYX_ERR(0, 520, __pyx_L1_error)
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val), __pyx_n_s_itemsize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 520, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_AsString(__pyx_t_4); if (unlikely((!__pyx_t_5) && PyErr_Occurred())) __PYX_ERR(0, 528, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val), __pyx_n_s_itemsize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 528, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val), __pyx_n_s_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 520, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val), __pyx_n_s_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 528, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_6 = PyNumber_Multiply(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 520, __pyx_L1_error)
+  __pyx_t_6 = PyNumber_Multiply(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 528, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_7 = __Pyx_PyInt_As_uint64_t(__pyx_t_6); if (unlikely((__pyx_t_7 == (uint64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 520, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyInt_As_uint64_t(__pyx_t_6); if (unlikely((__pyx_t_7 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 528, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __pyx_r = adios_read(__pyx_v_fd_p, __pyx_t_5, ((void *)__pyx_v_val->data), __pyx_t_7);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":517
+  /* "adios.pyx":525
  * 
  * 
  * cpdef int read(int64_t fd_p, str name, np.ndarray val):             # <<<<<<<<<<<<<<
@@ -5758,16 +5986,16 @@ static PyObject *__pyx_pw_5adios_27read(PyObject *__pyx_self, PyObject *__pyx_ar
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("read", 1, 3, 3, 1); __PYX_ERR(0, 517, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("read", 1, 3, 3, 1); __PYX_ERR(0, 525, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_val)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("read", 1, 3, 3, 2); __PYX_ERR(0, 517, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("read", 1, 3, 3, 2); __PYX_ERR(0, 525, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "read") < 0)) __PYX_ERR(0, 517, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "read") < 0)) __PYX_ERR(0, 525, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -5776,20 +6004,20 @@ static PyObject *__pyx_pw_5adios_27read(PyObject *__pyx_self, PyObject *__pyx_ar
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
     }
-    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 517, __pyx_L3_error)
+    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 525, __pyx_L3_error)
     __pyx_v_name = ((PyObject*)values[1]);
     __pyx_v_val = ((PyArrayObject *)values[2]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("read", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 517, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("read", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 525, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.read", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 517, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_val), __pyx_ptype_5numpy_ndarray, 1, "val", 0))) __PYX_ERR(0, 517, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 525, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_val), __pyx_ptype_5numpy_ndarray, 1, "val", 0))) __PYX_ERR(0, 525, __pyx_L1_error)
   __pyx_r = __pyx_pf_5adios_26read(__pyx_self, __pyx_v_fd_p, __pyx_v_name, __pyx_v_val);
 
   /* function exit code */
@@ -5807,7 +6035,7 @@ static PyObject *__pyx_pf_5adios_26read(CYTHON_UNUSED PyObject *__pyx_self, int6
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("read", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_5adios_read(__pyx_v_fd_p, __pyx_v_name, __pyx_v_val, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 517, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_5adios_read(__pyx_v_fd_p, __pyx_v_name, __pyx_v_val, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 525, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -5824,7 +6052,7 @@ static PyObject *__pyx_pf_5adios_26read(CYTHON_UNUSED PyObject *__pyx_self, int6
   return __pyx_r;
 }
 
-/* "adios.pyx":522
+/* "adios.pyx":530
  *     return adios_read(fd_p, s2b(name), <void *> val.data, val.itemsize * val.size)
  * 
  * cpdef int close(int64_t fd_p):             # <<<<<<<<<<<<<<
@@ -5838,7 +6066,7 @@ static int __pyx_f_5adios_close(int64_t __pyx_v_fd_p, CYTHON_UNUSED int __pyx_sk
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("close", 0);
 
-  /* "adios.pyx":523
+  /* "adios.pyx":531
  * 
  * cpdef int close(int64_t fd_p):
  *     return adios_close(fd_p)             # <<<<<<<<<<<<<<
@@ -5848,7 +6076,7 @@ static int __pyx_f_5adios_close(int64_t __pyx_v_fd_p, CYTHON_UNUSED int __pyx_sk
   __pyx_r = adios_close(__pyx_v_fd_p);
   goto __pyx_L0;
 
-  /* "adios.pyx":522
+  /* "adios.pyx":530
  *     return adios_read(fd_p, s2b(name), <void *> val.data, val.itemsize * val.size)
  * 
  * cpdef int close(int64_t fd_p):             # <<<<<<<<<<<<<<
@@ -5871,7 +6099,7 @@ static PyObject *__pyx_pw_5adios_29close(PyObject *__pyx_self, PyObject *__pyx_a
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("close (wrapper)", 0);
   assert(__pyx_arg_fd_p); {
-    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(__pyx_arg_fd_p); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 522, __pyx_L3_error)
+    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(__pyx_arg_fd_p); if (unlikely((__pyx_v_fd_p == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 530, __pyx_L3_error)
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L3_error:;
@@ -5892,7 +6120,7 @@ static PyObject *__pyx_pf_5adios_28close(CYTHON_UNUSED PyObject *__pyx_self, int
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("close", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_5adios_close(__pyx_v_fd_p, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 522, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_5adios_close(__pyx_v_fd_p, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 530, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -5909,7 +6137,7 @@ static PyObject *__pyx_pf_5adios_28close(CYTHON_UNUSED PyObject *__pyx_self, int
   return __pyx_r;
 }
 
-/* "adios.pyx":525
+/* "adios.pyx":533
  *     return adios_close(fd_p)
  * 
  * cpdef int finalize(int mype = 0):             # <<<<<<<<<<<<<<
@@ -5929,7 +6157,7 @@ static int __pyx_f_5adios_finalize(CYTHON_UNUSED int __pyx_skip_dispatch, struct
     }
   }
 
-  /* "adios.pyx":526
+  /* "adios.pyx":534
  * 
  * cpdef int finalize(int mype = 0):
  *     return adios_finalize(mype)             # <<<<<<<<<<<<<<
@@ -5939,7 +6167,7 @@ static int __pyx_f_5adios_finalize(CYTHON_UNUSED int __pyx_skip_dispatch, struct
   __pyx_r = adios_finalize(__pyx_v_mype);
   goto __pyx_L0;
 
-  /* "adios.pyx":525
+  /* "adios.pyx":533
  *     return adios_close(fd_p)
  * 
  * cpdef int finalize(int mype = 0):             # <<<<<<<<<<<<<<
@@ -5981,7 +6209,7 @@ static PyObject *__pyx_pw_5adios_31finalize(PyObject *__pyx_self, PyObject *__py
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "finalize") < 0)) __PYX_ERR(0, 525, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "finalize") < 0)) __PYX_ERR(0, 533, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -5991,14 +6219,14 @@ static PyObject *__pyx_pw_5adios_31finalize(PyObject *__pyx_self, PyObject *__py
       }
     }
     if (values[0]) {
-      __pyx_v_mype = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_mype == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 525, __pyx_L3_error)
+      __pyx_v_mype = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_mype == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 533, __pyx_L3_error)
     } else {
       __pyx_v_mype = ((int)0);
     }
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("finalize", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 525, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("finalize", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 533, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.finalize", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -6022,7 +6250,7 @@ static PyObject *__pyx_pf_5adios_30finalize(CYTHON_UNUSED PyObject *__pyx_self,
   __pyx_t_2.__pyx_n = 1;
   __pyx_t_2.mype = __pyx_v_mype;
   __pyx_t_1 = __pyx_f_5adios_finalize(0, &__pyx_t_2); 
-  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 525, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 533, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
@@ -6039,7 +6267,7 @@ static PyObject *__pyx_pf_5adios_30finalize(CYTHON_UNUSED PyObject *__pyx_self,
   return __pyx_r;
 }
 
-/* "adios.pyx":532
+/* "adios.pyx":540
  * ## ====================
  * 
  * cpdef int init_noxml(MPI_Comm comm = MPI_COMM_WORLD):             # <<<<<<<<<<<<<<
@@ -6059,7 +6287,7 @@ static int __pyx_f_5adios_init_noxml(CYTHON_UNUSED int __pyx_skip_dispatch, stru
     }
   }
 
-  /* "adios.pyx":534
+  /* "adios.pyx":542
  * cpdef int init_noxml(MPI_Comm comm = MPI_COMM_WORLD):
  *     global init_comm
  *     init_comm = comm             # <<<<<<<<<<<<<<
@@ -6068,7 +6296,7 @@ static int __pyx_f_5adios_init_noxml(CYTHON_UNUSED int __pyx_skip_dispatch, stru
  */
   __pyx_v_5adios_init_comm = __pyx_v_comm;
 
-  /* "adios.pyx":535
+  /* "adios.pyx":543
  *     global init_comm
  *     init_comm = comm
  *     return adios_init_noxml(init_comm)             # <<<<<<<<<<<<<<
@@ -6078,7 +6306,7 @@ static int __pyx_f_5adios_init_noxml(CYTHON_UNUSED int __pyx_skip_dispatch, stru
   __pyx_r = adios_init_noxml(__pyx_v_5adios_init_comm);
   goto __pyx_L0;
 
-  /* "adios.pyx":532
+  /* "adios.pyx":540
  * ## ====================
  * 
  * cpdef int init_noxml(MPI_Comm comm = MPI_COMM_WORLD):             # <<<<<<<<<<<<<<
@@ -6120,7 +6348,7 @@ static PyObject *__pyx_pw_5adios_33init_noxml(PyObject *__pyx_self, PyObject *__
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "init_noxml") < 0)) __PYX_ERR(0, 532, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "init_noxml") < 0)) __PYX_ERR(0, 540, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -6130,14 +6358,14 @@ static PyObject *__pyx_pw_5adios_33init_noxml(PyObject *__pyx_self, PyObject *__
       }
     }
     if (values[0]) {
-      __pyx_v_comm = __Pyx_PyInt_As_MPI_Comm(values[0]); if (unlikely((__pyx_v_comm == (MPI_Comm)-1) && PyErr_Occurred())) __PYX_ERR(0, 532, __pyx_L3_error)
+      __pyx_v_comm = __Pyx_PyInt_As_MPI_Comm(values[0]); if (unlikely((__pyx_v_comm == ((MPI_Comm)-1)) && PyErr_Occurred())) __PYX_ERR(0, 540, __pyx_L3_error)
     } else {
       __pyx_v_comm = __pyx_k__9;
     }
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("init_noxml", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 532, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("init_noxml", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 540, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.init_noxml", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -6161,7 +6389,7 @@ static PyObject *__pyx_pf_5adios_32init_noxml(CYTHON_UNUSED PyObject *__pyx_self
   __pyx_t_2.__pyx_n = 1;
   __pyx_t_2.comm = __pyx_v_comm;
   __pyx_t_1 = __pyx_f_5adios_init_noxml(0, &__pyx_t_2); 
-  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 532, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 540, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
@@ -6178,7 +6406,7 @@ static PyObject *__pyx_pf_5adios_32init_noxml(CYTHON_UNUSED PyObject *__pyx_self
   return __pyx_r;
 }
 
-/* "adios.pyx":537
+/* "adios.pyx":545
  *     return adios_init_noxml(init_comm)
  * 
  * cpdef int allocate_buffer(int when,             # <<<<<<<<<<<<<<
@@ -6192,7 +6420,7 @@ static int __pyx_f_5adios_allocate_buffer(int __pyx_v_when, uint64_t __pyx_v_buf
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("allocate_buffer", 0);
 
-  /* "adios.pyx":539
+  /* "adios.pyx":547
  * cpdef int allocate_buffer(int when,
  *                           uint64_t buffer_size):
  *     return adios_allocate_buffer(<ADIOS_BUFFER_ALLOC_WHEN> when,             # <<<<<<<<<<<<<<
@@ -6202,7 +6430,7 @@ static int __pyx_f_5adios_allocate_buffer(int __pyx_v_when, uint64_t __pyx_v_buf
   __pyx_r = adios_allocate_buffer(((ADIOS_BUFFER_ALLOC_WHEN)__pyx_v_when), __pyx_v_buffer_size);
   goto __pyx_L0;
 
-  /* "adios.pyx":537
+  /* "adios.pyx":545
  *     return adios_init_noxml(init_comm)
  * 
  * cpdef int allocate_buffer(int when,             # <<<<<<<<<<<<<<
@@ -6245,11 +6473,11 @@ static PyObject *__pyx_pw_5adios_35allocate_buffer(PyObject *__pyx_self, PyObjec
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_buffer_size)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("allocate_buffer", 1, 2, 2, 1); __PYX_ERR(0, 537, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("allocate_buffer", 1, 2, 2, 1); __PYX_ERR(0, 545, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "allocate_buffer") < 0)) __PYX_ERR(0, 537, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "allocate_buffer") < 0)) __PYX_ERR(0, 545, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -6257,12 +6485,12 @@ static PyObject *__pyx_pw_5adios_35allocate_buffer(PyObject *__pyx_self, PyObjec
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
     }
-    __pyx_v_when = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_when == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 537, __pyx_L3_error)
-    __pyx_v_buffer_size = __Pyx_PyInt_As_uint64_t(values[1]); if (unlikely((__pyx_v_buffer_size == (uint64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 538, __pyx_L3_error)
+    __pyx_v_when = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_when == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 545, __pyx_L3_error)
+    __pyx_v_buffer_size = __Pyx_PyInt_As_uint64_t(values[1]); if (unlikely((__pyx_v_buffer_size == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 546, __pyx_L3_error)
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("allocate_buffer", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 537, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("allocate_buffer", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 545, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.allocate_buffer", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -6281,7 +6509,7 @@ static PyObject *__pyx_pf_5adios_34allocate_buffer(CYTHON_UNUSED PyObject *__pyx
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("allocate_buffer", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_5adios_allocate_buffer(__pyx_v_when, __pyx_v_buffer_size, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 537, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_5adios_allocate_buffer(__pyx_v_when, __pyx_v_buffer_size, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 545, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -6298,7 +6526,7 @@ static PyObject *__pyx_pf_5adios_34allocate_buffer(CYTHON_UNUSED PyObject *__pyx
   return __pyx_r;
 }
 
-/* "adios.pyx":542
+/* "adios.pyx":550
  *                                  buffer_size)
  * 
  * cpdef int64_t declare_group(str name,             # <<<<<<<<<<<<<<
@@ -6327,7 +6555,7 @@ static int64_t __pyx_f_5adios_declare_group(PyObject *__pyx_v_name, CYTHON_UNUSE
     }
   }
 
-  /* "adios.pyx":545
+  /* "adios.pyx":553
  *                             str time_index = "",
  *                             int stats = adios_stat_default):
  *     cdef int64_t id = 0             # <<<<<<<<<<<<<<
@@ -6336,29 +6564,29 @@ static int64_t __pyx_f_5adios_declare_group(PyObject *__pyx_v_name, CYTHON_UNUSE
  */
   __pyx_v_id = 0;
 
-  /* "adios.pyx":547
+  /* "adios.pyx":555
  *     cdef int64_t id = 0
  *     adios_declare_group (&id,
  *                          s2b(name),             # <<<<<<<<<<<<<<
  *                          s2b(time_index),
  *                          <ADIOS_STATISTICS_FLAG> stats)
  */
-  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 547, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 555, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 547, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 555, __pyx_L1_error)
 
-  /* "adios.pyx":548
+  /* "adios.pyx":556
  *     adios_declare_group (&id,
  *                          s2b(name),
  *                          s2b(time_index),             # <<<<<<<<<<<<<<
  *                          <ADIOS_STATISTICS_FLAG> stats)
  *     return id
  */
-  __pyx_t_3 = __pyx_f_5adios_s2b(__pyx_v_time_index, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 548, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_5adios_s2b(__pyx_v_time_index, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 556, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 548, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 556, __pyx_L1_error)
 
-  /* "adios.pyx":546
+  /* "adios.pyx":554
  *                             int stats = adios_stat_default):
  *     cdef int64_t id = 0
  *     adios_declare_group (&id,             # <<<<<<<<<<<<<<
@@ -6369,7 +6597,7 @@ static int64_t __pyx_f_5adios_declare_group(PyObject *__pyx_v_name, CYTHON_UNUSE
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "adios.pyx":550
+  /* "adios.pyx":558
  *                          s2b(time_index),
  *                          <ADIOS_STATISTICS_FLAG> stats)
  *     return id             # <<<<<<<<<<<<<<
@@ -6379,7 +6607,7 @@ static int64_t __pyx_f_5adios_declare_group(PyObject *__pyx_v_name, CYTHON_UNUSE
   __pyx_r = __pyx_v_id;
   goto __pyx_L0;
 
-  /* "adios.pyx":542
+  /* "adios.pyx":550
  *                                  buffer_size)
  * 
  * cpdef int64_t declare_group(str name,             # <<<<<<<<<<<<<<
@@ -6439,7 +6667,7 @@ static PyObject *__pyx_pw_5adios_37declare_group(PyObject *__pyx_self, PyObject
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "declare_group") < 0)) __PYX_ERR(0, 542, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "declare_group") < 0)) __PYX_ERR(0, 550, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -6453,21 +6681,21 @@ static PyObject *__pyx_pw_5adios_37declare_group(PyObject *__pyx_self, PyObject
     __pyx_v_name = ((PyObject*)values[0]);
     __pyx_v_time_index = ((PyObject*)values[1]);
     if (values[2]) {
-      __pyx_v_stats = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_stats == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 544, __pyx_L3_error)
+      __pyx_v_stats = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_stats == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 552, __pyx_L3_error)
     } else {
       __pyx_v_stats = __pyx_k__11;
     }
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("declare_group", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 542, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("declare_group", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 550, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.declare_group", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 542, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_time_index), (&PyString_Type), 1, "time_index", 1))) __PYX_ERR(0, 543, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 550, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_time_index), (&PyString_Type), 1, "time_index", 1))) __PYX_ERR(0, 551, __pyx_L1_error)
   __pyx_r = __pyx_pf_5adios_36declare_group(__pyx_self, __pyx_v_name, __pyx_v_time_index, __pyx_v_stats);
 
   /* function exit code */
@@ -6491,7 +6719,7 @@ static PyObject *__pyx_pf_5adios_36declare_group(CYTHON_UNUSED PyObject *__pyx_s
   __pyx_t_2.time_index = __pyx_v_time_index;
   __pyx_t_2.stats = __pyx_v_stats;
   __pyx_t_1 = __pyx_f_5adios_declare_group(__pyx_v_name, 0, &__pyx_t_2); 
-  __pyx_t_3 = __Pyx_PyInt_From_int64_t(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 542, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyInt_From_int64_t(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 550, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
@@ -6508,7 +6736,7 @@ static PyObject *__pyx_pf_5adios_36declare_group(CYTHON_UNUSED PyObject *__pyx_s
   return __pyx_r;
 }
 
-/* "adios.pyx":552
+/* "adios.pyx":560
  *     return id
  * 
  * cpdef int64_t define_var(int64_t group_id,             # <<<<<<<<<<<<<<
@@ -6546,62 +6774,62 @@ static int64_t __pyx_f_5adios_define_var(int64_t __pyx_v_group_id, PyObject *__p
     }
   }
 
-  /* "adios.pyx":560
+  /* "adios.pyx":568
  *                      str local_offsets = ""):
  *     return adios_define_var(group_id,
  *                             s2b(name),             # <<<<<<<<<<<<<<
  *                             s2b(path),
  *                             <ADIOS_DATATYPES> atype,
  */
-  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 560, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 568, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 560, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 568, __pyx_L1_error)
 
-  /* "adios.pyx":561
+  /* "adios.pyx":569
  *     return adios_define_var(group_id,
  *                             s2b(name),
  *                             s2b(path),             # <<<<<<<<<<<<<<
  *                             <ADIOS_DATATYPES> atype,
  *                             s2b(dimensions),
  */
-  __pyx_t_3 = __pyx_f_5adios_s2b(__pyx_v_path, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 561, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_5adios_s2b(__pyx_v_path, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 569, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 561, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 569, __pyx_L1_error)
 
-  /* "adios.pyx":563
+  /* "adios.pyx":571
  *                             s2b(path),
  *                             <ADIOS_DATATYPES> atype,
  *                             s2b(dimensions),             # <<<<<<<<<<<<<<
  *                             s2b(global_dimensions),
  *                             s2b(local_offsets))
  */
-  __pyx_t_5 = __pyx_f_5adios_s2b(__pyx_v_dimensions, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 563, __pyx_L1_error)
+  __pyx_t_5 = __pyx_f_5adios_s2b(__pyx_v_dimensions, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 571, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_t_5); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(0, 563, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_t_5); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(0, 571, __pyx_L1_error)
 
-  /* "adios.pyx":564
+  /* "adios.pyx":572
  *                             <ADIOS_DATATYPES> atype,
  *                             s2b(dimensions),
  *                             s2b(global_dimensions),             # <<<<<<<<<<<<<<
  *                             s2b(local_offsets))
  * 
  */
-  __pyx_t_7 = __pyx_f_5adios_s2b(__pyx_v_global_dimensions, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 564, __pyx_L1_error)
+  __pyx_t_7 = __pyx_f_5adios_s2b(__pyx_v_global_dimensions, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 572, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_8 = __Pyx_PyObject_AsString(__pyx_t_7); if (unlikely((!__pyx_t_8) && PyErr_Occurred())) __PYX_ERR(0, 564, __pyx_L1_error)
+  __pyx_t_8 = __Pyx_PyObject_AsString(__pyx_t_7); if (unlikely((!__pyx_t_8) && PyErr_Occurred())) __PYX_ERR(0, 572, __pyx_L1_error)
 
-  /* "adios.pyx":565
+  /* "adios.pyx":573
  *                             s2b(dimensions),
  *                             s2b(global_dimensions),
  *                             s2b(local_offsets))             # <<<<<<<<<<<<<<
  * 
  * cpdef int define_schema_version (int64_t group_id, str schema_version):
  */
-  __pyx_t_9 = __pyx_f_5adios_s2b(__pyx_v_local_offsets, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 565, __pyx_L1_error)
+  __pyx_t_9 = __pyx_f_5adios_s2b(__pyx_v_local_offsets, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 573, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
-  __pyx_t_10 = __Pyx_PyObject_AsString(__pyx_t_9); if (unlikely((!__pyx_t_10) && PyErr_Occurred())) __PYX_ERR(0, 565, __pyx_L1_error)
+  __pyx_t_10 = __Pyx_PyObject_AsString(__pyx_t_9); if (unlikely((!__pyx_t_10) && PyErr_Occurred())) __PYX_ERR(0, 573, __pyx_L1_error)
 
-  /* "adios.pyx":559
+  /* "adios.pyx":567
  *                      str global_dimensions = "",
  *                      str local_offsets = ""):
  *     return adios_define_var(group_id,             # <<<<<<<<<<<<<<
@@ -6616,7 +6844,7 @@ static int64_t __pyx_f_5adios_define_var(int64_t __pyx_v_group_id, PyObject *__p
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":552
+  /* "adios.pyx":560
  *     return id
  * 
  * cpdef int64_t define_var(int64_t group_id,             # <<<<<<<<<<<<<<
@@ -6680,17 +6908,17 @@ static PyObject *__pyx_pw_5adios_39define_var(PyObject *__pyx_self, PyObject *__
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_var", 0, 4, 7, 1); __PYX_ERR(0, 552, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_var", 0, 4, 7, 1); __PYX_ERR(0, 560, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_path)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_var", 0, 4, 7, 2); __PYX_ERR(0, 552, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_var", 0, 4, 7, 2); __PYX_ERR(0, 560, __pyx_L3_error)
         }
         case  3:
         if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_atype)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_var", 0, 4, 7, 3); __PYX_ERR(0, 552, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_var", 0, 4, 7, 3); __PYX_ERR(0, 560, __pyx_L3_error)
         }
         case  4:
         if (kw_args > 0) {
@@ -6709,7 +6937,7 @@ static PyObject *__pyx_pw_5adios_39define_var(PyObject *__pyx_self, PyObject *__
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_var") < 0)) __PYX_ERR(0, 552, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_var") < 0)) __PYX_ERR(0, 560, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -6724,27 +6952,27 @@ static PyObject *__pyx_pw_5adios_39define_var(PyObject *__pyx_self, PyObject *__
         default: goto __pyx_L5_argtuple_error;
       }
     }
-    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_group_id == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 552, __pyx_L3_error)
+    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_group_id == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 560, __pyx_L3_error)
     __pyx_v_name = ((PyObject*)values[1]);
     __pyx_v_path = ((PyObject*)values[2]);
-    __pyx_v_atype = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_atype == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 555, __pyx_L3_error)
+    __pyx_v_atype = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_atype == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 563, __pyx_L3_error)
     __pyx_v_dimensions = ((PyObject*)values[4]);
     __pyx_v_global_dimensions = ((PyObject*)values[5]);
     __pyx_v_local_offsets = ((PyObject*)values[6]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("define_var", 0, 4, 7, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 552, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("define_var", 0, 4, 7, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 560, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.define_var", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 553, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_path), (&PyString_Type), 1, "path", 1))) __PYX_ERR(0, 554, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dimensions), (&PyString_Type), 1, "dimensions", 1))) __PYX_ERR(0, 556, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_global_dimensions), (&PyString_Type), 1, "global_dimensions", 1))) __PYX_ERR(0, 557, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_local_offsets), (&PyString_Type), 1, "local_offsets", 1))) __PYX_ERR(0, 558, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 561, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_path), (&PyString_Type), 1, "path", 1))) __PYX_ERR(0, 562, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dimensions), (&PyString_Type), 1, "dimensions", 1))) __PYX_ERR(0, 564, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_global_dimensions), (&PyString_Type), 1, "global_dimensions", 1))) __PYX_ERR(0, 565, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_local_offsets), (&PyString_Type), 1, "local_offsets", 1))) __PYX_ERR(0, 566, __pyx_L1_error)
   __pyx_r = __pyx_pf_5adios_38define_var(__pyx_self, __pyx_v_group_id, __pyx_v_name, __pyx_v_path, __pyx_v_atype, __pyx_v_dimensions, __pyx_v_global_dimensions, __pyx_v_local_offsets);
 
   /* function exit code */
@@ -6769,7 +6997,7 @@ static PyObject *__pyx_pf_5adios_38define_var(CYTHON_UNUSED PyObject *__pyx_self
   __pyx_t_2.global_dimensions = __pyx_v_global_dimensions;
   __pyx_t_2.local_offsets = __pyx_v_local_offsets;
   __pyx_t_1 = __pyx_f_5adios_define_var(__pyx_v_group_id, __pyx_v_name, __pyx_v_path, __pyx_v_atype, 0, &__pyx_t_2); 
-  __pyx_t_3 = __Pyx_PyInt_From_int64_t(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 552, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyInt_From_int64_t(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 560, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
@@ -6786,7 +7014,7 @@ static PyObject *__pyx_pf_5adios_38define_var(CYTHON_UNUSED PyObject *__pyx_self
   return __pyx_r;
 }
 
-/* "adios.pyx":567
+/* "adios.pyx":575
  *                             s2b(local_offsets))
  * 
  * cpdef int define_schema_version (int64_t group_id, str schema_version):             # <<<<<<<<<<<<<<
@@ -6802,21 +7030,21 @@ static int __pyx_f_5adios_define_schema_version(int64_t __pyx_v_group_id, PyObje
   char *__pyx_t_2;
   __Pyx_RefNannySetupContext("define_schema_version", 0);
 
-  /* "adios.pyx":568
+  /* "adios.pyx":576
  * 
  * cpdef int define_schema_version (int64_t group_id, str schema_version):
  *     return adios_define_schema_version (group_id, s2b(schema_version))             # <<<<<<<<<<<<<<
  * 
  * cpdef int define_var_mesh (int64_t group_id, str varname, str meshname):
  */
-  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_schema_version, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 568, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_schema_version, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 576, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 568, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 576, __pyx_L1_error)
   __pyx_r = adios_define_schema_version(__pyx_v_group_id, __pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":567
+  /* "adios.pyx":575
  *                             s2b(local_offsets))
  * 
  * cpdef int define_schema_version (int64_t group_id, str schema_version):             # <<<<<<<<<<<<<<
@@ -6863,11 +7091,11 @@ static PyObject *__pyx_pw_5adios_41define_schema_version(PyObject *__pyx_self, P
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_schema_version)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_schema_version", 1, 2, 2, 1); __PYX_ERR(0, 567, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_schema_version", 1, 2, 2, 1); __PYX_ERR(0, 575, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_schema_version") < 0)) __PYX_ERR(0, 567, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_schema_version") < 0)) __PYX_ERR(0, 575, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -6875,18 +7103,18 @@ static PyObject *__pyx_pw_5adios_41define_schema_version(PyObject *__pyx_self, P
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
     }
-    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_group_id == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 567, __pyx_L3_error)
+    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_group_id == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 575, __pyx_L3_error)
     __pyx_v_schema_version = ((PyObject*)values[1]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("define_schema_version", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 567, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("define_schema_version", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 575, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.define_schema_version", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_schema_version), (&PyString_Type), 1, "schema_version", 1))) __PYX_ERR(0, 567, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_schema_version), (&PyString_Type), 1, "schema_version", 1))) __PYX_ERR(0, 575, __pyx_L1_error)
   __pyx_r = __pyx_pf_5adios_40define_schema_version(__pyx_self, __pyx_v_group_id, __pyx_v_schema_version);
 
   /* function exit code */
@@ -6904,7 +7132,7 @@ static PyObject *__pyx_pf_5adios_40define_schema_version(CYTHON_UNUSED PyObject
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("define_schema_version", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_5adios_define_schema_version(__pyx_v_group_id, __pyx_v_schema_version, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 567, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_5adios_define_schema_version(__pyx_v_group_id, __pyx_v_schema_version, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 575, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -6921,7 +7149,7 @@ static PyObject *__pyx_pf_5adios_40define_schema_version(CYTHON_UNUSED PyObject
   return __pyx_r;
 }
 
-/* "adios.pyx":570
+/* "adios.pyx":578
  *     return adios_define_schema_version (group_id, s2b(schema_version))
  * 
  * cpdef int define_var_mesh (int64_t group_id, str varname, str meshname):             # <<<<<<<<<<<<<<
@@ -6939,25 +7167,25 @@ static int __pyx_f_5adios_define_var_mesh(int64_t __pyx_v_group_id, PyObject *__
   char const *__pyx_t_4;
   __Pyx_RefNannySetupContext("define_var_mesh", 0);
 
-  /* "adios.pyx":571
+  /* "adios.pyx":579
  * 
  * cpdef int define_var_mesh (int64_t group_id, str varname, str meshname):
  *     return adios_define_var_mesh (group_id, s2b(varname), s2b(meshname))             # <<<<<<<<<<<<<<
  * 
  * cpdef int define_var_centering (int64_t group_id, str varname, str centering):
  */
-  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_varname, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 571, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_varname, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 579, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 571, __pyx_L1_error)
-  __pyx_t_3 = __pyx_f_5adios_s2b(__pyx_v_meshname, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 571, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 579, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_5adios_s2b(__pyx_v_meshname, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 579, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 571, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 579, __pyx_L1_error)
   __pyx_r = adios_define_var_mesh(__pyx_v_group_id, __pyx_t_2, __pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":570
+  /* "adios.pyx":578
  *     return adios_define_schema_version (group_id, s2b(schema_version))
  * 
  * cpdef int define_var_mesh (int64_t group_id, str varname, str meshname):             # <<<<<<<<<<<<<<
@@ -7007,16 +7235,16 @@ static PyObject *__pyx_pw_5adios_43define_var_mesh(PyObject *__pyx_self, PyObjec
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_varname)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_var_mesh", 1, 3, 3, 1); __PYX_ERR(0, 570, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_var_mesh", 1, 3, 3, 1); __PYX_ERR(0, 578, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_meshname)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_var_mesh", 1, 3, 3, 2); __PYX_ERR(0, 570, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_var_mesh", 1, 3, 3, 2); __PYX_ERR(0, 578, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_var_mesh") < 0)) __PYX_ERR(0, 570, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_var_mesh") < 0)) __PYX_ERR(0, 578, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -7025,20 +7253,20 @@ static PyObject *__pyx_pw_5adios_43define_var_mesh(PyObject *__pyx_self, PyObjec
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
     }
-    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_group_id == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 570, __pyx_L3_error)
+    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_group_id == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 578, __pyx_L3_error)
     __pyx_v_varname = ((PyObject*)values[1]);
     __pyx_v_meshname = ((PyObject*)values[2]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("define_var_mesh", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 570, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("define_var_mesh", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 578, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.define_var_mesh", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_varname), (&PyString_Type), 1, "varname", 1))) __PYX_ERR(0, 570, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_meshname), (&PyString_Type), 1, "meshname", 1))) __PYX_ERR(0, 570, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_varname), (&PyString_Type), 1, "varname", 1))) __PYX_ERR(0, 578, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_meshname), (&PyString_Type), 1, "meshname", 1))) __PYX_ERR(0, 578, __pyx_L1_error)
   __pyx_r = __pyx_pf_5adios_42define_var_mesh(__pyx_self, __pyx_v_group_id, __pyx_v_varname, __pyx_v_meshname);
 
   /* function exit code */
@@ -7056,7 +7284,7 @@ static PyObject *__pyx_pf_5adios_42define_var_mesh(CYTHON_UNUSED PyObject *__pyx
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("define_var_mesh", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_5adios_define_var_mesh(__pyx_v_group_id, __pyx_v_varname, __pyx_v_meshname, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 570, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_5adios_define_var_mesh(__pyx_v_group_id, __pyx_v_varname, __pyx_v_meshname, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 578, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -7073,7 +7301,7 @@ static PyObject *__pyx_pf_5adios_42define_var_mesh(CYTHON_UNUSED PyObject *__pyx
   return __pyx_r;
 }
 
-/* "adios.pyx":573
+/* "adios.pyx":581
  *     return adios_define_var_mesh (group_id, s2b(varname), s2b(meshname))
  * 
  * cpdef int define_var_centering (int64_t group_id, str varname, str centering):             # <<<<<<<<<<<<<<
@@ -7091,25 +7319,25 @@ static int __pyx_f_5adios_define_var_centering(int64_t __pyx_v_group_id, PyObjec
   char const *__pyx_t_4;
   __Pyx_RefNannySetupContext("define_var_centering", 0);
 
-  /* "adios.pyx":574
+  /* "adios.pyx":582
  * 
  * cpdef int define_var_centering (int64_t group_id, str varname, str centering):
  *     return adios_define_var_centering (group_id, s2b(varname), s2b(centering))             # <<<<<<<<<<<<<<
  * 
  * cpdef int define_var_timesteps (str timesteps, int64_t group_id, str name):
  */
-  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_varname, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 574, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_varname, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 582, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 574, __pyx_L1_error)
-  __pyx_t_3 = __pyx_f_5adios_s2b(__pyx_v_centering, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 574, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 582, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_5adios_s2b(__pyx_v_centering, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 582, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 574, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 582, __pyx_L1_error)
   __pyx_r = adios_define_var_centering(__pyx_v_group_id, __pyx_t_2, __pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":573
+  /* "adios.pyx":581
  *     return adios_define_var_mesh (group_id, s2b(varname), s2b(meshname))
  * 
  * cpdef int define_var_centering (int64_t group_id, str varname, str centering):             # <<<<<<<<<<<<<<
@@ -7159,16 +7387,16 @@ static PyObject *__pyx_pw_5adios_45define_var_centering(PyObject *__pyx_self, Py
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_varname)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_var_centering", 1, 3, 3, 1); __PYX_ERR(0, 573, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_var_centering", 1, 3, 3, 1); __PYX_ERR(0, 581, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_centering)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_var_centering", 1, 3, 3, 2); __PYX_ERR(0, 573, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_var_centering", 1, 3, 3, 2); __PYX_ERR(0, 581, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_var_centering") < 0)) __PYX_ERR(0, 573, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_var_centering") < 0)) __PYX_ERR(0, 581, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -7177,20 +7405,20 @@ static PyObject *__pyx_pw_5adios_45define_var_centering(PyObject *__pyx_self, Py
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
     }
-    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_group_id == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 573, __pyx_L3_error)
+    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_group_id == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 581, __pyx_L3_error)
     __pyx_v_varname = ((PyObject*)values[1]);
     __pyx_v_centering = ((PyObject*)values[2]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("define_var_centering", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 573, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("define_var_centering", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 581, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.define_var_centering", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_varname), (&PyString_Type), 1, "varname", 1))) __PYX_ERR(0, 573, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_centering), (&PyString_Type), 1, "centering", 1))) __PYX_ERR(0, 573, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_varname), (&PyString_Type), 1, "varname", 1))) __PYX_ERR(0, 581, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_centering), (&PyString_Type), 1, "centering", 1))) __PYX_ERR(0, 581, __pyx_L1_error)
   __pyx_r = __pyx_pf_5adios_44define_var_centering(__pyx_self, __pyx_v_group_id, __pyx_v_varname, __pyx_v_centering);
 
   /* function exit code */
@@ -7208,7 +7436,7 @@ static PyObject *__pyx_pf_5adios_44define_var_centering(CYTHON_UNUSED PyObject *
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("define_var_centering", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_5adios_define_var_centering(__pyx_v_group_id, __pyx_v_varname, __pyx_v_centering, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 573, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_5adios_define_var_centering(__pyx_v_group_id, __pyx_v_varname, __pyx_v_centering, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 581, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -7225,7 +7453,7 @@ static PyObject *__pyx_pf_5adios_44define_var_centering(CYTHON_UNUSED PyObject *
   return __pyx_r;
 }
 
-/* "adios.pyx":576
+/* "adios.pyx":584
  *     return adios_define_var_centering (group_id, s2b(varname), s2b(centering))
  * 
  * cpdef int define_var_timesteps (str timesteps, int64_t group_id, str name):             # <<<<<<<<<<<<<<
@@ -7243,25 +7471,25 @@ static int __pyx_f_5adios_define_var_timesteps(PyObject *__pyx_v_timesteps, int6
   char const *__pyx_t_4;
   __Pyx_RefNannySetupContext("define_var_timesteps", 0);
 
-  /* "adios.pyx":577
+  /* "adios.pyx":585
  * 
  * cpdef int define_var_timesteps (str timesteps, int64_t group_id, str name):
  *     return adios_define_var_timesteps (s2b(timesteps), group_id, s2b(name))             # <<<<<<<<<<<<<<
  * 
  * cpdef int define_var_timescale (str timescale , int64_t group_id ,str name):
  */
-  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_timesteps, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 577, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_timesteps, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 585, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 577, __pyx_L1_error)
-  __pyx_t_3 = __pyx_f_5adios_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 577, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 585, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_5adios_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 585, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 577, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 585, __pyx_L1_error)
   __pyx_r = adios_define_var_timesteps(__pyx_t_2, __pyx_v_group_id, __pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":576
+  /* "adios.pyx":584
  *     return adios_define_var_centering (group_id, s2b(varname), s2b(centering))
  * 
  * cpdef int define_var_timesteps (str timesteps, int64_t group_id, str name):             # <<<<<<<<<<<<<<
@@ -7311,16 +7539,16 @@ static PyObject *__pyx_pw_5adios_47define_var_timesteps(PyObject *__pyx_self, Py
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_group_id)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_var_timesteps", 1, 3, 3, 1); __PYX_ERR(0, 576, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_var_timesteps", 1, 3, 3, 1); __PYX_ERR(0, 584, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_var_timesteps", 1, 3, 3, 2); __PYX_ERR(0, 576, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_var_timesteps", 1, 3, 3, 2); __PYX_ERR(0, 584, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_var_timesteps") < 0)) __PYX_ERR(0, 576, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_var_timesteps") < 0)) __PYX_ERR(0, 584, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -7330,19 +7558,19 @@ static PyObject *__pyx_pw_5adios_47define_var_timesteps(PyObject *__pyx_self, Py
       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
     }
     __pyx_v_timesteps = ((PyObject*)values[0]);
-    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[1]); if (unlikely((__pyx_v_group_id == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 576, __pyx_L3_error)
+    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[1]); if (unlikely((__pyx_v_group_id == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 584, __pyx_L3_error)
     __pyx_v_name = ((PyObject*)values[2]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("define_var_timesteps", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 576, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("define_var_timesteps", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 584, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.define_var_timesteps", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_timesteps), (&PyString_Type), 1, "timesteps", 1))) __PYX_ERR(0, 576, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 576, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_timesteps), (&PyString_Type), 1, "timesteps", 1))) __PYX_ERR(0, 584, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 584, __pyx_L1_error)
   __pyx_r = __pyx_pf_5adios_46define_var_timesteps(__pyx_self, __pyx_v_timesteps, __pyx_v_group_id, __pyx_v_name);
 
   /* function exit code */
@@ -7360,7 +7588,7 @@ static PyObject *__pyx_pf_5adios_46define_var_timesteps(CYTHON_UNUSED PyObject *
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("define_var_timesteps", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_5adios_define_var_timesteps(__pyx_v_timesteps, __pyx_v_group_id, __pyx_v_name, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 576, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_5adios_define_var_timesteps(__pyx_v_timesteps, __pyx_v_group_id, __pyx_v_name, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 584, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -7377,7 +7605,7 @@ static PyObject *__pyx_pf_5adios_46define_var_timesteps(CYTHON_UNUSED PyObject *
   return __pyx_r;
 }
 
-/* "adios.pyx":579
+/* "adios.pyx":587
  *     return adios_define_var_timesteps (s2b(timesteps), group_id, s2b(name))
  * 
  * cpdef int define_var_timescale (str timescale , int64_t group_id ,str name):             # <<<<<<<<<<<<<<
@@ -7395,25 +7623,25 @@ static int __pyx_f_5adios_define_var_timescale(PyObject *__pyx_v_timescale, int6
   char const *__pyx_t_4;
   __Pyx_RefNannySetupContext("define_var_timescale", 0);
 
-  /* "adios.pyx":580
+  /* "adios.pyx":588
  * 
  * cpdef int define_var_timescale (str timescale , int64_t group_id ,str name):
  *     return adios_define_var_timescale (s2b(timescale) , group_id ,s2b(name))             # <<<<<<<<<<<<<<
  * 
  * cpdef int define_var_timeseriesformat (str timeseries , int64_t group_id ,str name):
  */
-  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_timescale, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 580, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_timescale, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 588, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 580, __pyx_L1_error)
-  __pyx_t_3 = __pyx_f_5adios_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 580, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 588, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_5adios_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 588, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 580, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 588, __pyx_L1_error)
   __pyx_r = adios_define_var_timescale(__pyx_t_2, __pyx_v_group_id, __pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":579
+  /* "adios.pyx":587
  *     return adios_define_var_timesteps (s2b(timesteps), group_id, s2b(name))
  * 
  * cpdef int define_var_timescale (str timescale , int64_t group_id ,str name):             # <<<<<<<<<<<<<<
@@ -7463,16 +7691,16 @@ static PyObject *__pyx_pw_5adios_49define_var_timescale(PyObject *__pyx_self, Py
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_group_id)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_var_timescale", 1, 3, 3, 1); __PYX_ERR(0, 579, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_var_timescale", 1, 3, 3, 1); __PYX_ERR(0, 587, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_var_timescale", 1, 3, 3, 2); __PYX_ERR(0, 579, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_var_timescale", 1, 3, 3, 2); __PYX_ERR(0, 587, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_var_timescale") < 0)) __PYX_ERR(0, 579, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_var_timescale") < 0)) __PYX_ERR(0, 587, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -7482,19 +7710,19 @@ static PyObject *__pyx_pw_5adios_49define_var_timescale(PyObject *__pyx_self, Py
       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
     }
     __pyx_v_timescale = ((PyObject*)values[0]);
-    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[1]); if (unlikely((__pyx_v_group_id == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 579, __pyx_L3_error)
+    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[1]); if (unlikely((__pyx_v_group_id == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 587, __pyx_L3_error)
     __pyx_v_name = ((PyObject*)values[2]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("define_var_timescale", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 579, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("define_var_timescale", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 587, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.define_var_timescale", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_timescale), (&PyString_Type), 1, "timescale", 1))) __PYX_ERR(0, 579, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 579, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_timescale), (&PyString_Type), 1, "timescale", 1))) __PYX_ERR(0, 587, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 587, __pyx_L1_error)
   __pyx_r = __pyx_pf_5adios_48define_var_timescale(__pyx_self, __pyx_v_timescale, __pyx_v_group_id, __pyx_v_name);
 
   /* function exit code */
@@ -7512,7 +7740,7 @@ static PyObject *__pyx_pf_5adios_48define_var_timescale(CYTHON_UNUSED PyObject *
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("define_var_timescale", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_5adios_define_var_timescale(__pyx_v_timescale, __pyx_v_group_id, __pyx_v_name, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 579, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_5adios_define_var_timescale(__pyx_v_timescale, __pyx_v_group_id, __pyx_v_name, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 587, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -7529,7 +7757,7 @@ static PyObject *__pyx_pf_5adios_48define_var_timescale(CYTHON_UNUSED PyObject *
   return __pyx_r;
 }
 
-/* "adios.pyx":582
+/* "adios.pyx":590
  *     return adios_define_var_timescale (s2b(timescale) , group_id ,s2b(name))
  * 
  * cpdef int define_var_timeseriesformat (str timeseries , int64_t group_id ,str name):             # <<<<<<<<<<<<<<
@@ -7547,25 +7775,25 @@ static int __pyx_f_5adios_define_var_timeseriesformat(PyObject *__pyx_v_timeseri
   char const *__pyx_t_4;
   __Pyx_RefNannySetupContext("define_var_timeseriesformat", 0);
 
-  /* "adios.pyx":583
+  /* "adios.pyx":591
  * 
  * cpdef int define_var_timeseriesformat (str timeseries , int64_t group_id ,str name):
  *     return adios_define_var_timeseriesformat (s2b(timeseries) , group_id ,s2b(name))             # <<<<<<<<<<<<<<
  * 
  * cpdef int define_var_hyperslab (str hyperslab , int64_t group_id ,str name):
  */
-  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_timeseries, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 583, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_timeseries, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 591, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 583, __pyx_L1_error)
-  __pyx_t_3 = __pyx_f_5adios_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 583, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 591, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_5adios_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 591, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 583, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 591, __pyx_L1_error)
   __pyx_r = adios_define_var_timeseriesformat(__pyx_t_2, __pyx_v_group_id, __pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":582
+  /* "adios.pyx":590
  *     return adios_define_var_timescale (s2b(timescale) , group_id ,s2b(name))
  * 
  * cpdef int define_var_timeseriesformat (str timeseries , int64_t group_id ,str name):             # <<<<<<<<<<<<<<
@@ -7615,16 +7843,16 @@ static PyObject *__pyx_pw_5adios_51define_var_timeseriesformat(PyObject *__pyx_s
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_group_id)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_var_timeseriesformat", 1, 3, 3, 1); __PYX_ERR(0, 582, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_var_timeseriesformat", 1, 3, 3, 1); __PYX_ERR(0, 590, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_var_timeseriesformat", 1, 3, 3, 2); __PYX_ERR(0, 582, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_var_timeseriesformat", 1, 3, 3, 2); __PYX_ERR(0, 590, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_var_timeseriesformat") < 0)) __PYX_ERR(0, 582, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_var_timeseriesformat") < 0)) __PYX_ERR(0, 590, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -7634,19 +7862,19 @@ static PyObject *__pyx_pw_5adios_51define_var_timeseriesformat(PyObject *__pyx_s
       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
     }
     __pyx_v_timeseries = ((PyObject*)values[0]);
-    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[1]); if (unlikely((__pyx_v_group_id == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 582, __pyx_L3_error)
+    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[1]); if (unlikely((__pyx_v_group_id == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 590, __pyx_L3_error)
     __pyx_v_name = ((PyObject*)values[2]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("define_var_timeseriesformat", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 582, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("define_var_timeseriesformat", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 590, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.define_var_timeseriesformat", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_timeseries), (&PyString_Type), 1, "timeseries", 1))) __PYX_ERR(0, 582, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 582, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_timeseries), (&PyString_Type), 1, "timeseries", 1))) __PYX_ERR(0, 590, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 590, __pyx_L1_error)
   __pyx_r = __pyx_pf_5adios_50define_var_timeseriesformat(__pyx_self, __pyx_v_timeseries, __pyx_v_group_id, __pyx_v_name);
 
   /* function exit code */
@@ -7664,7 +7892,7 @@ static PyObject *__pyx_pf_5adios_50define_var_timeseriesformat(CYTHON_UNUSED PyO
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("define_var_timeseriesformat", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_5adios_define_var_timeseriesformat(__pyx_v_timeseries, __pyx_v_group_id, __pyx_v_name, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 582, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_5adios_define_var_timeseriesformat(__pyx_v_timeseries, __pyx_v_group_id, __pyx_v_name, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 590, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -7681,7 +7909,7 @@ static PyObject *__pyx_pf_5adios_50define_var_timeseriesformat(CYTHON_UNUSED PyO
   return __pyx_r;
 }
 
-/* "adios.pyx":585
+/* "adios.pyx":593
  *     return adios_define_var_timeseriesformat (s2b(timeseries) , group_id ,s2b(name))
  * 
  * cpdef int define_var_hyperslab (str hyperslab , int64_t group_id ,str name):             # <<<<<<<<<<<<<<
@@ -7699,25 +7927,25 @@ static int __pyx_f_5adios_define_var_hyperslab(PyObject *__pyx_v_hyperslab, int6
   char const *__pyx_t_4;
   __Pyx_RefNannySetupContext("define_var_hyperslab", 0);
 
-  /* "adios.pyx":586
+  /* "adios.pyx":594
  * 
  * cpdef int define_var_hyperslab (str hyperslab , int64_t group_id ,str name):
  *     return adios_define_var_hyperslab (s2b(hyperslab) , group_id ,s2b(name))             # <<<<<<<<<<<<<<
  * 
  * cpdef int define_mesh_timevarying (str timevarying , int64_t group_id ,str name):
  */
-  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_hyperslab, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 586, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_hyperslab, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 594, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 586, __pyx_L1_error)
-  __pyx_t_3 = __pyx_f_5adios_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 586, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 594, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_5adios_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 594, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 586, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 594, __pyx_L1_error)
   __pyx_r = adios_define_var_hyperslab(__pyx_t_2, __pyx_v_group_id, __pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":585
+  /* "adios.pyx":593
  *     return adios_define_var_timeseriesformat (s2b(timeseries) , group_id ,s2b(name))
  * 
  * cpdef int define_var_hyperslab (str hyperslab , int64_t group_id ,str name):             # <<<<<<<<<<<<<<
@@ -7767,16 +7995,16 @@ static PyObject *__pyx_pw_5adios_53define_var_hyperslab(PyObject *__pyx_self, Py
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_group_id)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_var_hyperslab", 1, 3, 3, 1); __PYX_ERR(0, 585, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_var_hyperslab", 1, 3, 3, 1); __PYX_ERR(0, 593, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_var_hyperslab", 1, 3, 3, 2); __PYX_ERR(0, 585, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_var_hyperslab", 1, 3, 3, 2); __PYX_ERR(0, 593, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_var_hyperslab") < 0)) __PYX_ERR(0, 585, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_var_hyperslab") < 0)) __PYX_ERR(0, 593, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -7786,19 +8014,19 @@ static PyObject *__pyx_pw_5adios_53define_var_hyperslab(PyObject *__pyx_self, Py
       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
     }
     __pyx_v_hyperslab = ((PyObject*)values[0]);
-    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[1]); if (unlikely((__pyx_v_group_id == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 585, __pyx_L3_error)
+    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[1]); if (unlikely((__pyx_v_group_id == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 593, __pyx_L3_error)
     __pyx_v_name = ((PyObject*)values[2]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("define_var_hyperslab", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 585, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("define_var_hyperslab", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 593, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.define_var_hyperslab", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_hyperslab), (&PyString_Type), 1, "hyperslab", 1))) __PYX_ERR(0, 585, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 585, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_hyperslab), (&PyString_Type), 1, "hyperslab", 1))) __PYX_ERR(0, 593, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 593, __pyx_L1_error)
   __pyx_r = __pyx_pf_5adios_52define_var_hyperslab(__pyx_self, __pyx_v_hyperslab, __pyx_v_group_id, __pyx_v_name);
 
   /* function exit code */
@@ -7816,7 +8044,7 @@ static PyObject *__pyx_pf_5adios_52define_var_hyperslab(CYTHON_UNUSED PyObject *
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("define_var_hyperslab", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_5adios_define_var_hyperslab(__pyx_v_hyperslab, __pyx_v_group_id, __pyx_v_name, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 585, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_5adios_define_var_hyperslab(__pyx_v_hyperslab, __pyx_v_group_id, __pyx_v_name, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 593, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -7833,7 +8061,7 @@ static PyObject *__pyx_pf_5adios_52define_var_hyperslab(CYTHON_UNUSED PyObject *
   return __pyx_r;
 }
 
-/* "adios.pyx":588
+/* "adios.pyx":596
  *     return adios_define_var_hyperslab (s2b(hyperslab) , group_id ,s2b(name))
  * 
  * cpdef int define_mesh_timevarying (str timevarying , int64_t group_id ,str name):             # <<<<<<<<<<<<<<
@@ -7851,25 +8079,25 @@ static int __pyx_f_5adios_define_mesh_timevarying(PyObject *__pyx_v_timevarying,
   char const *__pyx_t_4;
   __Pyx_RefNannySetupContext("define_mesh_timevarying", 0);
 
-  /* "adios.pyx":589
+  /* "adios.pyx":597
  * 
  * cpdef int define_mesh_timevarying (str timevarying , int64_t group_id ,str name):
  *     return adios_define_mesh_timevarying (s2b(timevarying) , group_id ,s2b(name))             # <<<<<<<<<<<<<<
  * 
  * cpdef int define_mesh_timesteps (str timesteps , int64_t group_id ,str name):
  */
-  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_timevarying, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 589, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_timevarying, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 597, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 589, __pyx_L1_error)
-  __pyx_t_3 = __pyx_f_5adios_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 589, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 597, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_5adios_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 597, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 589, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 597, __pyx_L1_error)
   __pyx_r = adios_define_mesh_timevarying(__pyx_t_2, __pyx_v_group_id, __pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":588
+  /* "adios.pyx":596
  *     return adios_define_var_hyperslab (s2b(hyperslab) , group_id ,s2b(name))
  * 
  * cpdef int define_mesh_timevarying (str timevarying , int64_t group_id ,str name):             # <<<<<<<<<<<<<<
@@ -7919,16 +8147,16 @@ static PyObject *__pyx_pw_5adios_55define_mesh_timevarying(PyObject *__pyx_self,
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_group_id)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_timevarying", 1, 3, 3, 1); __PYX_ERR(0, 588, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_timevarying", 1, 3, 3, 1); __PYX_ERR(0, 596, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_timevarying", 1, 3, 3, 2); __PYX_ERR(0, 588, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_timevarying", 1, 3, 3, 2); __PYX_ERR(0, 596, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_mesh_timevarying") < 0)) __PYX_ERR(0, 588, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_mesh_timevarying") < 0)) __PYX_ERR(0, 596, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -7938,19 +8166,19 @@ static PyObject *__pyx_pw_5adios_55define_mesh_timevarying(PyObject *__pyx_self,
       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
     }
     __pyx_v_timevarying = ((PyObject*)values[0]);
-    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[1]); if (unlikely((__pyx_v_group_id == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 588, __pyx_L3_error)
+    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[1]); if (unlikely((__pyx_v_group_id == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 596, __pyx_L3_error)
     __pyx_v_name = ((PyObject*)values[2]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("define_mesh_timevarying", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 588, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("define_mesh_timevarying", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 596, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.define_mesh_timevarying", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_timevarying), (&PyString_Type), 1, "timevarying", 1))) __PYX_ERR(0, 588, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 588, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_timevarying), (&PyString_Type), 1, "timevarying", 1))) __PYX_ERR(0, 596, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 596, __pyx_L1_error)
   __pyx_r = __pyx_pf_5adios_54define_mesh_timevarying(__pyx_self, __pyx_v_timevarying, __pyx_v_group_id, __pyx_v_name);
 
   /* function exit code */
@@ -7968,7 +8196,7 @@ static PyObject *__pyx_pf_5adios_54define_mesh_timevarying(CYTHON_UNUSED PyObjec
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("define_mesh_timevarying", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_5adios_define_mesh_timevarying(__pyx_v_timevarying, __pyx_v_group_id, __pyx_v_name, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 588, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_5adios_define_mesh_timevarying(__pyx_v_timevarying, __pyx_v_group_id, __pyx_v_name, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 596, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -7985,7 +8213,7 @@ static PyObject *__pyx_pf_5adios_54define_mesh_timevarying(CYTHON_UNUSED PyObjec
   return __pyx_r;
 }
 
-/* "adios.pyx":591
+/* "adios.pyx":599
  *     return adios_define_mesh_timevarying (s2b(timevarying) , group_id ,s2b(name))
  * 
  * cpdef int define_mesh_timesteps (str timesteps , int64_t group_id ,str name):             # <<<<<<<<<<<<<<
@@ -8003,25 +8231,25 @@ static int __pyx_f_5adios_define_mesh_timesteps(PyObject *__pyx_v_timesteps, int
   char const *__pyx_t_4;
   __Pyx_RefNannySetupContext("define_mesh_timesteps", 0);
 
-  /* "adios.pyx":592
+  /* "adios.pyx":600
  * 
  * cpdef int define_mesh_timesteps (str timesteps , int64_t group_id ,str name):
  *     return adios_define_mesh_timesteps (s2b(timesteps) , group_id ,s2b(name))             # <<<<<<<<<<<<<<
  * 
  * cpdef int define_mesh_timescale (str timescale , int64_t group_id ,str name):
  */
-  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_timesteps, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 592, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_timesteps, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 600, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 592, __pyx_L1_error)
-  __pyx_t_3 = __pyx_f_5adios_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 592, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 600, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_5adios_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 600, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 592, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 600, __pyx_L1_error)
   __pyx_r = adios_define_mesh_timesteps(__pyx_t_2, __pyx_v_group_id, __pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":591
+  /* "adios.pyx":599
  *     return adios_define_mesh_timevarying (s2b(timevarying) , group_id ,s2b(name))
  * 
  * cpdef int define_mesh_timesteps (str timesteps , int64_t group_id ,str name):             # <<<<<<<<<<<<<<
@@ -8071,16 +8299,16 @@ static PyObject *__pyx_pw_5adios_57define_mesh_timesteps(PyObject *__pyx_self, P
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_group_id)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_timesteps", 1, 3, 3, 1); __PYX_ERR(0, 591, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_timesteps", 1, 3, 3, 1); __PYX_ERR(0, 599, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_timesteps", 1, 3, 3, 2); __PYX_ERR(0, 591, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_timesteps", 1, 3, 3, 2); __PYX_ERR(0, 599, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_mesh_timesteps") < 0)) __PYX_ERR(0, 591, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_mesh_timesteps") < 0)) __PYX_ERR(0, 599, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -8090,19 +8318,19 @@ static PyObject *__pyx_pw_5adios_57define_mesh_timesteps(PyObject *__pyx_self, P
       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
     }
     __pyx_v_timesteps = ((PyObject*)values[0]);
-    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[1]); if (unlikely((__pyx_v_group_id == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 591, __pyx_L3_error)
+    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[1]); if (unlikely((__pyx_v_group_id == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 599, __pyx_L3_error)
     __pyx_v_name = ((PyObject*)values[2]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("define_mesh_timesteps", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 591, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("define_mesh_timesteps", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 599, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.define_mesh_timesteps", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_timesteps), (&PyString_Type), 1, "timesteps", 1))) __PYX_ERR(0, 591, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 591, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_timesteps), (&PyString_Type), 1, "timesteps", 1))) __PYX_ERR(0, 599, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 599, __pyx_L1_error)
   __pyx_r = __pyx_pf_5adios_56define_mesh_timesteps(__pyx_self, __pyx_v_timesteps, __pyx_v_group_id, __pyx_v_name);
 
   /* function exit code */
@@ -8120,7 +8348,7 @@ static PyObject *__pyx_pf_5adios_56define_mesh_timesteps(CYTHON_UNUSED PyObject
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("define_mesh_timesteps", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_5adios_define_mesh_timesteps(__pyx_v_timesteps, __pyx_v_group_id, __pyx_v_name, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 591, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_5adios_define_mesh_timesteps(__pyx_v_timesteps, __pyx_v_group_id, __pyx_v_name, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 599, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -8137,7 +8365,7 @@ static PyObject *__pyx_pf_5adios_56define_mesh_timesteps(CYTHON_UNUSED PyObject
   return __pyx_r;
 }
 
-/* "adios.pyx":594
+/* "adios.pyx":602
  *     return adios_define_mesh_timesteps (s2b(timesteps) , group_id ,s2b(name))
  * 
  * cpdef int define_mesh_timescale (str timescale , int64_t group_id ,str name):             # <<<<<<<<<<<<<<
@@ -8155,25 +8383,25 @@ static int __pyx_f_5adios_define_mesh_timescale(PyObject *__pyx_v_timescale, int
   char const *__pyx_t_4;
   __Pyx_RefNannySetupContext("define_mesh_timescale", 0);
 
-  /* "adios.pyx":595
+  /* "adios.pyx":603
  * 
  * cpdef int define_mesh_timescale (str timescale , int64_t group_id ,str name):
  *     return adios_define_mesh_timescale (s2b(timescale) , group_id ,s2b(name))             # <<<<<<<<<<<<<<
  * 
  * cpdef int define_mesh_timeseriesformat (str timeseries , int64_t group_id ,str name):
  */
-  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_timescale, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 595, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_timescale, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 603, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 595, __pyx_L1_error)
-  __pyx_t_3 = __pyx_f_5adios_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 595, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 603, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_5adios_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 603, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 595, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 603, __pyx_L1_error)
   __pyx_r = adios_define_mesh_timescale(__pyx_t_2, __pyx_v_group_id, __pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":594
+  /* "adios.pyx":602
  *     return adios_define_mesh_timesteps (s2b(timesteps) , group_id ,s2b(name))
  * 
  * cpdef int define_mesh_timescale (str timescale , int64_t group_id ,str name):             # <<<<<<<<<<<<<<
@@ -8223,16 +8451,16 @@ static PyObject *__pyx_pw_5adios_59define_mesh_timescale(PyObject *__pyx_self, P
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_group_id)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_timescale", 1, 3, 3, 1); __PYX_ERR(0, 594, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_timescale", 1, 3, 3, 1); __PYX_ERR(0, 602, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_timescale", 1, 3, 3, 2); __PYX_ERR(0, 594, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_timescale", 1, 3, 3, 2); __PYX_ERR(0, 602, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_mesh_timescale") < 0)) __PYX_ERR(0, 594, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_mesh_timescale") < 0)) __PYX_ERR(0, 602, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -8242,19 +8470,19 @@ static PyObject *__pyx_pw_5adios_59define_mesh_timescale(PyObject *__pyx_self, P
       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
     }
     __pyx_v_timescale = ((PyObject*)values[0]);
-    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[1]); if (unlikely((__pyx_v_group_id == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 594, __pyx_L3_error)
+    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[1]); if (unlikely((__pyx_v_group_id == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 602, __pyx_L3_error)
     __pyx_v_name = ((PyObject*)values[2]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("define_mesh_timescale", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 594, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("define_mesh_timescale", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 602, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.define_mesh_timescale", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_timescale), (&PyString_Type), 1, "timescale", 1))) __PYX_ERR(0, 594, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 594, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_timescale), (&PyString_Type), 1, "timescale", 1))) __PYX_ERR(0, 602, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 602, __pyx_L1_error)
   __pyx_r = __pyx_pf_5adios_58define_mesh_timescale(__pyx_self, __pyx_v_timescale, __pyx_v_group_id, __pyx_v_name);
 
   /* function exit code */
@@ -8272,7 +8500,7 @@ static PyObject *__pyx_pf_5adios_58define_mesh_timescale(CYTHON_UNUSED PyObject
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("define_mesh_timescale", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_5adios_define_mesh_timescale(__pyx_v_timescale, __pyx_v_group_id, __pyx_v_name, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 594, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_5adios_define_mesh_timescale(__pyx_v_timescale, __pyx_v_group_id, __pyx_v_name, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 602, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -8289,7 +8517,7 @@ static PyObject *__pyx_pf_5adios_58define_mesh_timescale(CYTHON_UNUSED PyObject
   return __pyx_r;
 }
 
-/* "adios.pyx":597
+/* "adios.pyx":605
  *     return adios_define_mesh_timescale (s2b(timescale) , group_id ,s2b(name))
  * 
  * cpdef int define_mesh_timeseriesformat (str timeseries , int64_t group_id ,str name):             # <<<<<<<<<<<<<<
@@ -8307,25 +8535,25 @@ static int __pyx_f_5adios_define_mesh_timeseriesformat(PyObject *__pyx_v_timeser
   char const *__pyx_t_4;
   __Pyx_RefNannySetupContext("define_mesh_timeseriesformat", 0);
 
-  /* "adios.pyx":598
+  /* "adios.pyx":606
  * 
  * cpdef int define_mesh_timeseriesformat (str timeseries , int64_t group_id ,str name):
  *     return adios_define_mesh_timeseriesformat (s2b(timeseries) , group_id ,s2b(name))             # <<<<<<<<<<<<<<
  * 
  * cpdef int define_mesh_uniform (str dimensions,
  */
-  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_timeseries, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 598, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_timeseries, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 606, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 598, __pyx_L1_error)
-  __pyx_t_3 = __pyx_f_5adios_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 598, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 606, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_5adios_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 606, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 598, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 606, __pyx_L1_error)
   __pyx_r = adios_define_mesh_timeseriesformat(__pyx_t_2, __pyx_v_group_id, __pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":597
+  /* "adios.pyx":605
  *     return adios_define_mesh_timescale (s2b(timescale) , group_id ,s2b(name))
  * 
  * cpdef int define_mesh_timeseriesformat (str timeseries , int64_t group_id ,str name):             # <<<<<<<<<<<<<<
@@ -8375,16 +8603,16 @@ static PyObject *__pyx_pw_5adios_61define_mesh_timeseriesformat(PyObject *__pyx_
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_group_id)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_timeseriesformat", 1, 3, 3, 1); __PYX_ERR(0, 597, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_timeseriesformat", 1, 3, 3, 1); __PYX_ERR(0, 605, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_timeseriesformat", 1, 3, 3, 2); __PYX_ERR(0, 597, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_timeseriesformat", 1, 3, 3, 2); __PYX_ERR(0, 605, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_mesh_timeseriesformat") < 0)) __PYX_ERR(0, 597, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_mesh_timeseriesformat") < 0)) __PYX_ERR(0, 605, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -8394,19 +8622,19 @@ static PyObject *__pyx_pw_5adios_61define_mesh_timeseriesformat(PyObject *__pyx_
       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
     }
     __pyx_v_timeseries = ((PyObject*)values[0]);
-    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[1]); if (unlikely((__pyx_v_group_id == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 597, __pyx_L3_error)
+    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[1]); if (unlikely((__pyx_v_group_id == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 605, __pyx_L3_error)
     __pyx_v_name = ((PyObject*)values[2]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("define_mesh_timeseriesformat", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 597, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("define_mesh_timeseriesformat", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 605, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.define_mesh_timeseriesformat", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_timeseries), (&PyString_Type), 1, "timeseries", 1))) __PYX_ERR(0, 597, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 597, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_timeseries), (&PyString_Type), 1, "timeseries", 1))) __PYX_ERR(0, 605, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 605, __pyx_L1_error)
   __pyx_r = __pyx_pf_5adios_60define_mesh_timeseriesformat(__pyx_self, __pyx_v_timeseries, __pyx_v_group_id, __pyx_v_name);
 
   /* function exit code */
@@ -8424,7 +8652,7 @@ static PyObject *__pyx_pf_5adios_60define_mesh_timeseriesformat(CYTHON_UNUSED Py
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("define_mesh_timeseriesformat", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_5adios_define_mesh_timeseriesformat(__pyx_v_timeseries, __pyx_v_group_id, __pyx_v_name, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 597, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_5adios_define_mesh_timeseriesformat(__pyx_v_timeseries, __pyx_v_group_id, __pyx_v_name, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 605, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -8441,7 +8669,7 @@ static PyObject *__pyx_pf_5adios_60define_mesh_timeseriesformat(CYTHON_UNUSED Py
   return __pyx_r;
 }
 
-/* "adios.pyx":600
+/* "adios.pyx":608
  *     return adios_define_mesh_timeseriesformat (s2b(timeseries) , group_id ,s2b(name))
  * 
  * cpdef int define_mesh_uniform (str dimensions,             # <<<<<<<<<<<<<<
@@ -8467,73 +8695,73 @@ static int __pyx_f_5adios_define_mesh_uniform(PyObject *__pyx_v_dimensions, PyOb
   char const *__pyx_t_12;
   __Pyx_RefNannySetupContext("define_mesh_uniform", 0);
 
-  /* "adios.pyx":608
+  /* "adios.pyx":616
  *                                    str name
  *                                   ):
  *     return adios_define_mesh_uniform (s2b(dimensions),             # <<<<<<<<<<<<<<
  *                                    s2b(origin),
  *                                    s2b(spacing),
  */
-  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_dimensions, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 608, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_dimensions, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 616, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 608, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 616, __pyx_L1_error)
 
-  /* "adios.pyx":609
+  /* "adios.pyx":617
  *                                   ):
  *     return adios_define_mesh_uniform (s2b(dimensions),
  *                                    s2b(origin),             # <<<<<<<<<<<<<<
  *                                    s2b(spacing),
  *                                    s2b(maximum),
  */
-  __pyx_t_3 = __pyx_f_5adios_s2b(__pyx_v_origin, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 609, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_5adios_s2b(__pyx_v_origin, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 617, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 609, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 617, __pyx_L1_error)
 
-  /* "adios.pyx":610
+  /* "adios.pyx":618
  *     return adios_define_mesh_uniform (s2b(dimensions),
  *                                    s2b(origin),
  *                                    s2b(spacing),             # <<<<<<<<<<<<<<
  *                                    s2b(maximum),
  *                                    s2b(nspace),
  */
-  __pyx_t_5 = __pyx_f_5adios_s2b(__pyx_v_spacing, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 610, __pyx_L1_error)
+  __pyx_t_5 = __pyx_f_5adios_s2b(__pyx_v_spacing, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 618, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_t_5); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(0, 610, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_t_5); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(0, 618, __pyx_L1_error)
 
-  /* "adios.pyx":611
+  /* "adios.pyx":619
  *                                    s2b(origin),
  *                                    s2b(spacing),
  *                                    s2b(maximum),             # <<<<<<<<<<<<<<
  *                                    s2b(nspace),
  *                                    group_id,
  */
-  __pyx_t_7 = __pyx_f_5adios_s2b(__pyx_v_maximum, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 611, __pyx_L1_error)
+  __pyx_t_7 = __pyx_f_5adios_s2b(__pyx_v_maximum, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 619, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_8 = __Pyx_PyObject_AsString(__pyx_t_7); if (unlikely((!__pyx_t_8) && PyErr_Occurred())) __PYX_ERR(0, 611, __pyx_L1_error)
+  __pyx_t_8 = __Pyx_PyObject_AsString(__pyx_t_7); if (unlikely((!__pyx_t_8) && PyErr_Occurred())) __PYX_ERR(0, 619, __pyx_L1_error)
 
-  /* "adios.pyx":612
+  /* "adios.pyx":620
  *                                    s2b(spacing),
  *                                    s2b(maximum),
  *                                    s2b(nspace),             # <<<<<<<<<<<<<<
  *                                    group_id,
  *                                    s2b(name)
  */
-  __pyx_t_9 = __pyx_f_5adios_s2b(__pyx_v_nspace, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 612, __pyx_L1_error)
+  __pyx_t_9 = __pyx_f_5adios_s2b(__pyx_v_nspace, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 620, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
-  __pyx_t_10 = __Pyx_PyObject_AsString(__pyx_t_9); if (unlikely((!__pyx_t_10) && PyErr_Occurred())) __PYX_ERR(0, 612, __pyx_L1_error)
+  __pyx_t_10 = __Pyx_PyObject_AsString(__pyx_t_9); if (unlikely((!__pyx_t_10) && PyErr_Occurred())) __PYX_ERR(0, 620, __pyx_L1_error)
 
-  /* "adios.pyx":614
+  /* "adios.pyx":622
  *                                    s2b(nspace),
  *                                    group_id,
  *                                    s2b(name)             # <<<<<<<<<<<<<<
  *                                   )
  * 
  */
-  __pyx_t_11 = __pyx_f_5adios_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 614, __pyx_L1_error)
+  __pyx_t_11 = __pyx_f_5adios_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 622, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_11);
-  __pyx_t_12 = __Pyx_PyObject_AsString(__pyx_t_11); if (unlikely((!__pyx_t_12) && PyErr_Occurred())) __PYX_ERR(0, 614, __pyx_L1_error)
+  __pyx_t_12 = __Pyx_PyObject_AsString(__pyx_t_11); if (unlikely((!__pyx_t_12) && PyErr_Occurred())) __PYX_ERR(0, 622, __pyx_L1_error)
 
-  /* "adios.pyx":608
+  /* "adios.pyx":616
  *                                    str name
  *                                   ):
  *     return adios_define_mesh_uniform (s2b(dimensions),             # <<<<<<<<<<<<<<
@@ -8549,7 +8777,7 @@ static int __pyx_f_5adios_define_mesh_uniform(PyObject *__pyx_v_dimensions, PyOb
   __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":600
+  /* "adios.pyx":608
  *     return adios_define_mesh_timeseriesformat (s2b(timeseries) , group_id ,s2b(name))
  * 
  * cpdef int define_mesh_uniform (str dimensions,             # <<<<<<<<<<<<<<
@@ -8611,36 +8839,36 @@ static PyObject *__pyx_pw_5adios_63define_mesh_uniform(PyObject *__pyx_self, PyO
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_origin)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_uniform", 1, 7, 7, 1); __PYX_ERR(0, 600, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_uniform", 1, 7, 7, 1); __PYX_ERR(0, 608, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_spacing)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_uniform", 1, 7, 7, 2); __PYX_ERR(0, 600, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_uniform", 1, 7, 7, 2); __PYX_ERR(0, 608, __pyx_L3_error)
         }
         case  3:
         if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_maximum)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_uniform", 1, 7, 7, 3); __PYX_ERR(0, 600, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_uniform", 1, 7, 7, 3); __PYX_ERR(0, 608, __pyx_L3_error)
         }
         case  4:
         if (likely((values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_nspace)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_uniform", 1, 7, 7, 4); __PYX_ERR(0, 600, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_uniform", 1, 7, 7, 4); __PYX_ERR(0, 608, __pyx_L3_error)
         }
         case  5:
         if (likely((values[5] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_group_id)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_uniform", 1, 7, 7, 5); __PYX_ERR(0, 600, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_uniform", 1, 7, 7, 5); __PYX_ERR(0, 608, __pyx_L3_error)
         }
         case  6:
         if (likely((values[6] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_uniform", 1, 7, 7, 6); __PYX_ERR(0, 600, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_uniform", 1, 7, 7, 6); __PYX_ERR(0, 608, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_mesh_uniform") < 0)) __PYX_ERR(0, 600, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_mesh_uniform") < 0)) __PYX_ERR(0, 608, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 7) {
       goto __pyx_L5_argtuple_error;
@@ -8658,23 +8886,23 @@ static PyObject *__pyx_pw_5adios_63define_mesh_uniform(PyObject *__pyx_self, PyO
     __pyx_v_spacing = ((PyObject*)values[2]);
     __pyx_v_maximum = ((PyObject*)values[3]);
     __pyx_v_nspace = ((PyObject*)values[4]);
-    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[5]); if (unlikely((__pyx_v_group_id == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 605, __pyx_L3_error)
+    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[5]); if (unlikely((__pyx_v_group_id == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 613, __pyx_L3_error)
     __pyx_v_name = ((PyObject*)values[6]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("define_mesh_uniform", 1, 7, 7, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 600, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("define_mesh_uniform", 1, 7, 7, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 608, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.define_mesh_uniform", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dimensions), (&PyString_Type), 1, "dimensions", 1))) __PYX_ERR(0, 600, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_origin), (&PyString_Type), 1, "origin", 1))) __PYX_ERR(0, 601, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_spacing), (&PyString_Type), 1, "spacing", 1))) __PYX_ERR(0, 602, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_maximum), (&PyString_Type), 1, "maximum", 1))) __PYX_ERR(0, 603, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_nspace), (&PyString_Type), 1, "nspace", 1))) __PYX_ERR(0, 604, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 606, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dimensions), (&PyString_Type), 1, "dimensions", 1))) __PYX_ERR(0, 608, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_origin), (&PyString_Type), 1, "origin", 1))) __PYX_ERR(0, 609, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_spacing), (&PyString_Type), 1, "spacing", 1))) __PYX_ERR(0, 610, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_maximum), (&PyString_Type), 1, "maximum", 1))) __PYX_ERR(0, 611, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_nspace), (&PyString_Type), 1, "nspace", 1))) __PYX_ERR(0, 612, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 614, __pyx_L1_error)
   __pyx_r = __pyx_pf_5adios_62define_mesh_uniform(__pyx_self, __pyx_v_dimensions, __pyx_v_origin, __pyx_v_spacing, __pyx_v_maximum, __pyx_v_nspace, __pyx_v_group_id, __pyx_v_name);
 
   /* function exit code */
@@ -8692,7 +8920,7 @@ static PyObject *__pyx_pf_5adios_62define_mesh_uniform(CYTHON_UNUSED PyObject *_
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("define_mesh_uniform", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_5adios_define_mesh_uniform(__pyx_v_dimensions, __pyx_v_origin, __pyx_v_spacing, __pyx_v_maximum, __pyx_v_nspace, __pyx_v_group_id, __pyx_v_name, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 600, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_5adios_define_mesh_uniform(__pyx_v_dimensions, __pyx_v_origin, __pyx_v_spacing, __pyx_v_maximum, __pyx_v_nspace, __pyx_v_group_id, __pyx_v_name, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 608, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -8709,7 +8937,7 @@ static PyObject *__pyx_pf_5adios_62define_mesh_uniform(CYTHON_UNUSED PyObject *_
   return __pyx_r;
 }
 
-/* "adios.pyx":617
+/* "adios.pyx":625
  *                                   )
  * 
  * cpdef int define_mesh_rectilinear (str dimensions,             # <<<<<<<<<<<<<<
@@ -8731,51 +8959,51 @@ static int __pyx_f_5adios_define_mesh_rectilinear(PyObject *__pyx_v_dimensions,
   char const *__pyx_t_8;
   __Pyx_RefNannySetupContext("define_mesh_rectilinear", 0);
 
-  /* "adios.pyx":623
+  /* "adios.pyx":631
  *                                        str name
  *                                       ):
  *     return adios_define_mesh_rectilinear (s2b(dimensions),             # <<<<<<<<<<<<<<
  *                                        s2b(coordinates),
  *                                        s2b(nspace),
  */
-  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_dimensions, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 623, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_dimensions, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 631, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 623, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 631, __pyx_L1_error)
 
-  /* "adios.pyx":624
+  /* "adios.pyx":632
  *                                       ):
  *     return adios_define_mesh_rectilinear (s2b(dimensions),
  *                                        s2b(coordinates),             # <<<<<<<<<<<<<<
  *                                        s2b(nspace),
  *                                        group_id,
  */
-  __pyx_t_3 = __pyx_f_5adios_s2b(__pyx_v_coordinates, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 624, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_5adios_s2b(__pyx_v_coordinates, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 632, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 624, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 632, __pyx_L1_error)
 
-  /* "adios.pyx":625
+  /* "adios.pyx":633
  *     return adios_define_mesh_rectilinear (s2b(dimensions),
  *                                        s2b(coordinates),
  *                                        s2b(nspace),             # <<<<<<<<<<<<<<
  *                                        group_id,
  *                                        s2b(name)
  */
-  __pyx_t_5 = __pyx_f_5adios_s2b(__pyx_v_nspace, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 625, __pyx_L1_error)
+  __pyx_t_5 = __pyx_f_5adios_s2b(__pyx_v_nspace, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 633, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_t_5); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(0, 625, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_t_5); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(0, 633, __pyx_L1_error)
 
-  /* "adios.pyx":627
+  /* "adios.pyx":635
  *                                        s2b(nspace),
  *                                        group_id,
  *                                        s2b(name)             # <<<<<<<<<<<<<<
  *                                       )
  * 
  */
-  __pyx_t_7 = __pyx_f_5adios_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 627, __pyx_L1_error)
+  __pyx_t_7 = __pyx_f_5adios_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 635, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_8 = __Pyx_PyObject_AsString(__pyx_t_7); if (unlikely((!__pyx_t_8) && PyErr_Occurred())) __PYX_ERR(0, 627, __pyx_L1_error)
+  __pyx_t_8 = __Pyx_PyObject_AsString(__pyx_t_7); if (unlikely((!__pyx_t_8) && PyErr_Occurred())) __PYX_ERR(0, 635, __pyx_L1_error)
 
-  /* "adios.pyx":623
+  /* "adios.pyx":631
  *                                        str name
  *                                       ):
  *     return adios_define_mesh_rectilinear (s2b(dimensions),             # <<<<<<<<<<<<<<
@@ -8789,7 +9017,7 @@ static int __pyx_f_5adios_define_mesh_rectilinear(PyObject *__pyx_v_dimensions,
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":617
+  /* "adios.pyx":625
  *                                   )
  * 
  * cpdef int define_mesh_rectilinear (str dimensions,             # <<<<<<<<<<<<<<
@@ -8845,26 +9073,26 @@ static PyObject *__pyx_pw_5adios_65define_mesh_rectilinear(PyObject *__pyx_self,
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_coordinates)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_rectilinear", 1, 5, 5, 1); __PYX_ERR(0, 617, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_rectilinear", 1, 5, 5, 1); __PYX_ERR(0, 625, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_nspace)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_rectilinear", 1, 5, 5, 2); __PYX_ERR(0, 617, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_rectilinear", 1, 5, 5, 2); __PYX_ERR(0, 625, __pyx_L3_error)
         }
         case  3:
         if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_group_id)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_rectilinear", 1, 5, 5, 3); __PYX_ERR(0, 617, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_rectilinear", 1, 5, 5, 3); __PYX_ERR(0, 625, __pyx_L3_error)
         }
         case  4:
         if (likely((values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_rectilinear", 1, 5, 5, 4); __PYX_ERR(0, 617, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_rectilinear", 1, 5, 5, 4); __PYX_ERR(0, 625, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_mesh_rectilinear") < 0)) __PYX_ERR(0, 617, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_mesh_rectilinear") < 0)) __PYX_ERR(0, 625, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 5) {
       goto __pyx_L5_argtuple_error;
@@ -8878,21 +9106,21 @@ static PyObject *__pyx_pw_5adios_65define_mesh_rectilinear(PyObject *__pyx_self,
     __pyx_v_dimensions = ((PyObject*)values[0]);
     __pyx_v_coordinates = ((PyObject*)values[1]);
     __pyx_v_nspace = ((PyObject*)values[2]);
-    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[3]); if (unlikely((__pyx_v_group_id == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 620, __pyx_L3_error)
+    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[3]); if (unlikely((__pyx_v_group_id == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 628, __pyx_L3_error)
     __pyx_v_name = ((PyObject*)values[4]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("define_mesh_rectilinear", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 617, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("define_mesh_rectilinear", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 625, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.define_mesh_rectilinear", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dimensions), (&PyString_Type), 1, "dimensions", 1))) __PYX_ERR(0, 617, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_coordinates), (&PyString_Type), 1, "coordinates", 1))) __PYX_ERR(0, 618, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_nspace), (&PyString_Type), 1, "nspace", 1))) __PYX_ERR(0, 619, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 621, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dimensions), (&PyString_Type), 1, "dimensions", 1))) __PYX_ERR(0, 625, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_coordinates), (&PyString_Type), 1, "coordinates", 1))) __PYX_ERR(0, 626, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_nspace), (&PyString_Type), 1, "nspace", 1))) __PYX_ERR(0, 627, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 629, __pyx_L1_error)
   __pyx_r = __pyx_pf_5adios_64define_mesh_rectilinear(__pyx_self, __pyx_v_dimensions, __pyx_v_coordinates, __pyx_v_nspace, __pyx_v_group_id, __pyx_v_name);
 
   /* function exit code */
@@ -8910,7 +9138,7 @@ static PyObject *__pyx_pf_5adios_64define_mesh_rectilinear(CYTHON_UNUSED PyObjec
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("define_mesh_rectilinear", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_5adios_define_mesh_rectilinear(__pyx_v_dimensions, __pyx_v_coordinates, __pyx_v_nspace, __pyx_v_group_id, __pyx_v_name, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 617, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_5adios_define_mesh_rectilinear(__pyx_v_dimensions, __pyx_v_coordinates, __pyx_v_nspace, __pyx_v_group_id, __pyx_v_name, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 625, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -8927,7 +9155,7 @@ static PyObject *__pyx_pf_5adios_64define_mesh_rectilinear(CYTHON_UNUSED PyObjec
   return __pyx_r;
 }
 
-/* "adios.pyx":630
+/* "adios.pyx":638
  *                                       )
  * 
  * cpdef int define_mesh_structured (str dimensions,             # <<<<<<<<<<<<<<
@@ -8949,51 +9177,51 @@ static int __pyx_f_5adios_define_mesh_structured(PyObject *__pyx_v_dimensions, P
   char const *__pyx_t_8;
   __Pyx_RefNannySetupContext("define_mesh_structured", 0);
 
-  /* "adios.pyx":636
+  /* "adios.pyx":644
  *                                       str name
  *                                      ):
  *     return adios_define_mesh_structured (s2b(dimensions),             # <<<<<<<<<<<<<<
  *                                       s2b(points),
  *                                       s2b(nspace),
  */
-  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_dimensions, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 636, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_dimensions, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 644, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 636, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 644, __pyx_L1_error)
 
-  /* "adios.pyx":637
+  /* "adios.pyx":645
  *                                      ):
  *     return adios_define_mesh_structured (s2b(dimensions),
  *                                       s2b(points),             # <<<<<<<<<<<<<<
  *                                       s2b(nspace),
  *                                       group_id,
  */
-  __pyx_t_3 = __pyx_f_5adios_s2b(__pyx_v_points, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 637, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_5adios_s2b(__pyx_v_points, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 645, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 637, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 645, __pyx_L1_error)
 
-  /* "adios.pyx":638
+  /* "adios.pyx":646
  *     return adios_define_mesh_structured (s2b(dimensions),
  *                                       s2b(points),
  *                                       s2b(nspace),             # <<<<<<<<<<<<<<
  *                                       group_id,
  *                                       s2b(name)
  */
-  __pyx_t_5 = __pyx_f_5adios_s2b(__pyx_v_nspace, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 638, __pyx_L1_error)
+  __pyx_t_5 = __pyx_f_5adios_s2b(__pyx_v_nspace, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 646, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_t_5); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(0, 638, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_t_5); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(0, 646, __pyx_L1_error)
 
-  /* "adios.pyx":640
+  /* "adios.pyx":648
  *                                       s2b(nspace),
  *                                       group_id,
  *                                       s2b(name)             # <<<<<<<<<<<<<<
  *                                      )
  * 
  */
-  __pyx_t_7 = __pyx_f_5adios_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 640, __pyx_L1_error)
+  __pyx_t_7 = __pyx_f_5adios_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 648, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_8 = __Pyx_PyObject_AsString(__pyx_t_7); if (unlikely((!__pyx_t_8) && PyErr_Occurred())) __PYX_ERR(0, 640, __pyx_L1_error)
+  __pyx_t_8 = __Pyx_PyObject_AsString(__pyx_t_7); if (unlikely((!__pyx_t_8) && PyErr_Occurred())) __PYX_ERR(0, 648, __pyx_L1_error)
 
-  /* "adios.pyx":636
+  /* "adios.pyx":644
  *                                       str name
  *                                      ):
  *     return adios_define_mesh_structured (s2b(dimensions),             # <<<<<<<<<<<<<<
@@ -9007,7 +9235,7 @@ static int __pyx_f_5adios_define_mesh_structured(PyObject *__pyx_v_dimensions, P
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":630
+  /* "adios.pyx":638
  *                                       )
  * 
  * cpdef int define_mesh_structured (str dimensions,             # <<<<<<<<<<<<<<
@@ -9063,26 +9291,26 @@ static PyObject *__pyx_pw_5adios_67define_mesh_structured(PyObject *__pyx_self,
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_points)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_structured", 1, 5, 5, 1); __PYX_ERR(0, 630, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_structured", 1, 5, 5, 1); __PYX_ERR(0, 638, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_nspace)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_structured", 1, 5, 5, 2); __PYX_ERR(0, 630, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_structured", 1, 5, 5, 2); __PYX_ERR(0, 638, __pyx_L3_error)
         }
         case  3:
         if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_group_id)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_structured", 1, 5, 5, 3); __PYX_ERR(0, 630, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_structured", 1, 5, 5, 3); __PYX_ERR(0, 638, __pyx_L3_error)
         }
         case  4:
         if (likely((values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_structured", 1, 5, 5, 4); __PYX_ERR(0, 630, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_structured", 1, 5, 5, 4); __PYX_ERR(0, 638, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_mesh_structured") < 0)) __PYX_ERR(0, 630, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_mesh_structured") < 0)) __PYX_ERR(0, 638, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 5) {
       goto __pyx_L5_argtuple_error;
@@ -9096,21 +9324,21 @@ static PyObject *__pyx_pw_5adios_67define_mesh_structured(PyObject *__pyx_self,
     __pyx_v_dimensions = ((PyObject*)values[0]);
     __pyx_v_points = ((PyObject*)values[1]);
     __pyx_v_nspace = ((PyObject*)values[2]);
-    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[3]); if (unlikely((__pyx_v_group_id == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 633, __pyx_L3_error)
+    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[3]); if (unlikely((__pyx_v_group_id == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 641, __pyx_L3_error)
     __pyx_v_name = ((PyObject*)values[4]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("define_mesh_structured", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 630, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("define_mesh_structured", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 638, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.define_mesh_structured", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dimensions), (&PyString_Type), 1, "dimensions", 1))) __PYX_ERR(0, 630, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_points), (&PyString_Type), 1, "points", 1))) __PYX_ERR(0, 631, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_nspace), (&PyString_Type), 1, "nspace", 1))) __PYX_ERR(0, 632, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 634, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dimensions), (&PyString_Type), 1, "dimensions", 1))) __PYX_ERR(0, 638, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_points), (&PyString_Type), 1, "points", 1))) __PYX_ERR(0, 639, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_nspace), (&PyString_Type), 1, "nspace", 1))) __PYX_ERR(0, 640, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 642, __pyx_L1_error)
   __pyx_r = __pyx_pf_5adios_66define_mesh_structured(__pyx_self, __pyx_v_dimensions, __pyx_v_points, __pyx_v_nspace, __pyx_v_group_id, __pyx_v_name);
 
   /* function exit code */
@@ -9128,7 +9356,7 @@ static PyObject *__pyx_pf_5adios_66define_mesh_structured(CYTHON_UNUSED PyObject
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("define_mesh_structured", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_5adios_define_mesh_structured(__pyx_v_dimensions, __pyx_v_points, __pyx_v_nspace, __pyx_v_group_id, __pyx_v_name, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 630, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_5adios_define_mesh_structured(__pyx_v_dimensions, __pyx_v_points, __pyx_v_nspace, __pyx_v_group_id, __pyx_v_name, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 638, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -9145,7 +9373,7 @@ static PyObject *__pyx_pf_5adios_66define_mesh_structured(CYTHON_UNUSED PyObject
   return __pyx_r;
 }
 
-/* "adios.pyx":643
+/* "adios.pyx":651
  *                                      )
  * 
  * cpdef int define_mesh_unstructured (str points,             # <<<<<<<<<<<<<<
@@ -9173,84 +9401,84 @@ static int __pyx_f_5adios_define_mesh_unstructured(PyObject *__pyx_v_points, PyO
   char const *__pyx_t_14;
   __Pyx_RefNannySetupContext("define_mesh_unstructured", 0);
 
-  /* "adios.pyx":652
+  /* "adios.pyx":660
  *                                         str name
  *                                        ):
  *     return adios_define_mesh_unstructured (s2b(points),             # <<<<<<<<<<<<<<
  *                                         s2b(data),
  *                                         s2b(count),
  */
-  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_points, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 652, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_points, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 660, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 652, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 660, __pyx_L1_error)
 
-  /* "adios.pyx":653
+  /* "adios.pyx":661
  *                                        ):
  *     return adios_define_mesh_unstructured (s2b(points),
  *                                         s2b(data),             # <<<<<<<<<<<<<<
  *                                         s2b(count),
  *                                         s2b(cell_type),
  */
-  __pyx_t_3 = __pyx_f_5adios_s2b(__pyx_v_data, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 653, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_5adios_s2b(__pyx_v_data, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 661, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 653, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 661, __pyx_L1_error)
 
-  /* "adios.pyx":654
+  /* "adios.pyx":662
  *     return adios_define_mesh_unstructured (s2b(points),
  *                                         s2b(data),
  *                                         s2b(count),             # <<<<<<<<<<<<<<
  *                                         s2b(cell_type),
  *                                         s2b(npoints),
  */
-  __pyx_t_5 = __pyx_f_5adios_s2b(__pyx_v_count, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 654, __pyx_L1_error)
+  __pyx_t_5 = __pyx_f_5adios_s2b(__pyx_v_count, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 662, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_t_5); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(0, 654, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_t_5); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(0, 662, __pyx_L1_error)
 
-  /* "adios.pyx":655
+  /* "adios.pyx":663
  *                                         s2b(data),
  *                                         s2b(count),
  *                                         s2b(cell_type),             # <<<<<<<<<<<<<<
  *                                         s2b(npoints),
  *                                         s2b(nspace),
  */
-  __pyx_t_7 = __pyx_f_5adios_s2b(__pyx_v_cell_type, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 655, __pyx_L1_error)
+  __pyx_t_7 = __pyx_f_5adios_s2b(__pyx_v_cell_type, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 663, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_8 = __Pyx_PyObject_AsString(__pyx_t_7); if (unlikely((!__pyx_t_8) && PyErr_Occurred())) __PYX_ERR(0, 655, __pyx_L1_error)
+  __pyx_t_8 = __Pyx_PyObject_AsString(__pyx_t_7); if (unlikely((!__pyx_t_8) && PyErr_Occurred())) __PYX_ERR(0, 663, __pyx_L1_error)
 
-  /* "adios.pyx":656
+  /* "adios.pyx":664
  *                                         s2b(count),
  *                                         s2b(cell_type),
  *                                         s2b(npoints),             # <<<<<<<<<<<<<<
  *                                         s2b(nspace),
  *                                         group_id,
  */
-  __pyx_t_9 = __pyx_f_5adios_s2b(__pyx_v_npoints, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 656, __pyx_L1_error)
+  __pyx_t_9 = __pyx_f_5adios_s2b(__pyx_v_npoints, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 664, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
-  __pyx_t_10 = __Pyx_PyObject_AsString(__pyx_t_9); if (unlikely((!__pyx_t_10) && PyErr_Occurred())) __PYX_ERR(0, 656, __pyx_L1_error)
+  __pyx_t_10 = __Pyx_PyObject_AsString(__pyx_t_9); if (unlikely((!__pyx_t_10) && PyErr_Occurred())) __PYX_ERR(0, 664, __pyx_L1_error)
 
-  /* "adios.pyx":657
+  /* "adios.pyx":665
  *                                         s2b(cell_type),
  *                                         s2b(npoints),
  *                                         s2b(nspace),             # <<<<<<<<<<<<<<
  *                                         group_id,
  *                                         s2b(name)
  */
-  __pyx_t_11 = __pyx_f_5adios_s2b(__pyx_v_nspace, 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 657, __pyx_L1_error)
+  __pyx_t_11 = __pyx_f_5adios_s2b(__pyx_v_nspace, 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 665, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_11);
-  __pyx_t_12 = __Pyx_PyObject_AsString(__pyx_t_11); if (unlikely((!__pyx_t_12) && PyErr_Occurred())) __PYX_ERR(0, 657, __pyx_L1_error)
+  __pyx_t_12 = __Pyx_PyObject_AsString(__pyx_t_11); if (unlikely((!__pyx_t_12) && PyErr_Occurred())) __PYX_ERR(0, 665, __pyx_L1_error)
 
-  /* "adios.pyx":659
+  /* "adios.pyx":667
  *                                         s2b(nspace),
  *                                         group_id,
  *                                         s2b(name)             # <<<<<<<<<<<<<<
  *                                        )
  * 
  */
-  __pyx_t_13 = __pyx_f_5adios_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 659, __pyx_L1_error)
+  __pyx_t_13 = __pyx_f_5adios_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 667, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_13);
-  __pyx_t_14 = __Pyx_PyObject_AsString(__pyx_t_13); if (unlikely((!__pyx_t_14) && PyErr_Occurred())) __PYX_ERR(0, 659, __pyx_L1_error)
+  __pyx_t_14 = __Pyx_PyObject_AsString(__pyx_t_13); if (unlikely((!__pyx_t_14) && PyErr_Occurred())) __PYX_ERR(0, 667, __pyx_L1_error)
 
-  /* "adios.pyx":652
+  /* "adios.pyx":660
  *                                         str name
  *                                        ):
  *     return adios_define_mesh_unstructured (s2b(points),             # <<<<<<<<<<<<<<
@@ -9267,7 +9495,7 @@ static int __pyx_f_5adios_define_mesh_unstructured(PyObject *__pyx_v_points, PyO
   __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":643
+  /* "adios.pyx":651
  *                                      )
  * 
  * cpdef int define_mesh_unstructured (str points,             # <<<<<<<<<<<<<<
@@ -9332,41 +9560,41 @@ static PyObject *__pyx_pw_5adios_69define_mesh_unstructured(PyObject *__pyx_self
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_data)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_unstructured", 1, 8, 8, 1); __PYX_ERR(0, 643, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_unstructured", 1, 8, 8, 1); __PYX_ERR(0, 651, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_count)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_unstructured", 1, 8, 8, 2); __PYX_ERR(0, 643, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_unstructured", 1, 8, 8, 2); __PYX_ERR(0, 651, __pyx_L3_error)
         }
         case  3:
         if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_cell_type)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_unstructured", 1, 8, 8, 3); __PYX_ERR(0, 643, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_unstructured", 1, 8, 8, 3); __PYX_ERR(0, 651, __pyx_L3_error)
         }
         case  4:
         if (likely((values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_npoints)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_unstructured", 1, 8, 8, 4); __PYX_ERR(0, 643, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_unstructured", 1, 8, 8, 4); __PYX_ERR(0, 651, __pyx_L3_error)
         }
         case  5:
         if (likely((values[5] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_nspace)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_unstructured", 1, 8, 8, 5); __PYX_ERR(0, 643, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_unstructured", 1, 8, 8, 5); __PYX_ERR(0, 651, __pyx_L3_error)
         }
         case  6:
         if (likely((values[6] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_group_id)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_unstructured", 1, 8, 8, 6); __PYX_ERR(0, 643, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_unstructured", 1, 8, 8, 6); __PYX_ERR(0, 651, __pyx_L3_error)
         }
         case  7:
         if (likely((values[7] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_unstructured", 1, 8, 8, 7); __PYX_ERR(0, 643, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_unstructured", 1, 8, 8, 7); __PYX_ERR(0, 651, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_mesh_unstructured") < 0)) __PYX_ERR(0, 643, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_mesh_unstructured") < 0)) __PYX_ERR(0, 651, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 8) {
       goto __pyx_L5_argtuple_error;
@@ -9386,24 +9614,24 @@ static PyObject *__pyx_pw_5adios_69define_mesh_unstructured(PyObject *__pyx_self
     __pyx_v_cell_type = ((PyObject*)values[3]);
     __pyx_v_npoints = ((PyObject*)values[4]);
     __pyx_v_nspace = ((PyObject*)values[5]);
-    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[6]); if (unlikely((__pyx_v_group_id == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 649, __pyx_L3_error)
+    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[6]); if (unlikely((__pyx_v_group_id == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 657, __pyx_L3_error)
     __pyx_v_name = ((PyObject*)values[7]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("define_mesh_unstructured", 1, 8, 8, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 643, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("define_mesh_unstructured", 1, 8, 8, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 651, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.define_mesh_unstructured", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_points), (&PyString_Type), 1, "points", 1))) __PYX_ERR(0, 643, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_data), (&PyString_Type), 1, "data", 1))) __PYX_ERR(0, 644, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_count), (&PyString_Type), 1, "count", 1))) __PYX_ERR(0, 645, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_cell_type), (&PyString_Type), 1, "cell_type", 1))) __PYX_ERR(0, 646, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_npoints), (&PyString_Type), 1, "npoints", 1))) __PYX_ERR(0, 647, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_nspace), (&PyString_Type), 1, "nspace", 1))) __PYX_ERR(0, 648, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 650, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_points), (&PyString_Type), 1, "points", 1))) __PYX_ERR(0, 651, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_data), (&PyString_Type), 1, "data", 1))) __PYX_ERR(0, 652, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_count), (&PyString_Type), 1, "count", 1))) __PYX_ERR(0, 653, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_cell_type), (&PyString_Type), 1, "cell_type", 1))) __PYX_ERR(0, 654, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_npoints), (&PyString_Type), 1, "npoints", 1))) __PYX_ERR(0, 655, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_nspace), (&PyString_Type), 1, "nspace", 1))) __PYX_ERR(0, 656, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 658, __pyx_L1_error)
   __pyx_r = __pyx_pf_5adios_68define_mesh_unstructured(__pyx_self, __pyx_v_points, __pyx_v_data, __pyx_v_count, __pyx_v_cell_type, __pyx_v_npoints, __pyx_v_nspace, __pyx_v_group_id, __pyx_v_name);
 
   /* function exit code */
@@ -9421,7 +9649,7 @@ static PyObject *__pyx_pf_5adios_68define_mesh_unstructured(CYTHON_UNUSED PyObje
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("define_mesh_unstructured", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_5adios_define_mesh_unstructured(__pyx_v_points, __pyx_v_data, __pyx_v_count, __pyx_v_cell_type, __pyx_v_npoints, __pyx_v_nspace, __pyx_v_group_id, __pyx_v_name, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 643, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_5adios_define_mesh_unstructured(__pyx_v_points, __pyx_v_data, __pyx_v_count, __pyx_v_cell_type, __pyx_v_npoints, __pyx_v_nspace, __pyx_v_group_id, __pyx_v_name, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 651, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -9438,7 +9666,7 @@ static PyObject *__pyx_pf_5adios_68define_mesh_unstructured(CYTHON_UNUSED PyObje
   return __pyx_r;
 }
 
-/* "adios.pyx":662
+/* "adios.pyx":670
  *                                        )
  * 
  * cpdef int define_attribute (int64_t group,             # <<<<<<<<<<<<<<
@@ -9460,51 +9688,51 @@ static int __pyx_f_5adios_define_attribute(int64_t __pyx_v_group, PyObject *__py
   char *__pyx_t_8;
   __Pyx_RefNannySetupContext("define_attribute", 0);
 
-  /* "adios.pyx":669
+  /* "adios.pyx":677
  *                             str var):
  *     return adios_define_attribute (group,
  *                                    s2b(name),             # <<<<<<<<<<<<<<
  *                                    s2b(path),
  *                                    <ADIOS_DATATYPES> atype,
  */
-  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 669, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 677, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 669, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 677, __pyx_L1_error)
 
-  /* "adios.pyx":670
+  /* "adios.pyx":678
  *     return adios_define_attribute (group,
  *                                    s2b(name),
  *                                    s2b(path),             # <<<<<<<<<<<<<<
  *                                    <ADIOS_DATATYPES> atype,
  *                                    s2b(value),
  */
-  __pyx_t_3 = __pyx_f_5adios_s2b(__pyx_v_path, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 670, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_5adios_s2b(__pyx_v_path, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 678, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 670, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 678, __pyx_L1_error)
 
-  /* "adios.pyx":672
+  /* "adios.pyx":680
  *                                    s2b(path),
  *                                    <ADIOS_DATATYPES> atype,
  *                                    s2b(value),             # <<<<<<<<<<<<<<
  *                                    s2b(var))
  * 
  */
-  __pyx_t_5 = __pyx_f_5adios_s2b(__pyx_v_value, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 672, __pyx_L1_error)
+  __pyx_t_5 = __pyx_f_5adios_s2b(__pyx_v_value, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 680, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_t_5); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(0, 672, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_t_5); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(0, 680, __pyx_L1_error)
 
-  /* "adios.pyx":673
+  /* "adios.pyx":681
  *                                    <ADIOS_DATATYPES> atype,
  *                                    s2b(value),
  *                                    s2b(var))             # <<<<<<<<<<<<<<
  * 
  * cpdef int define_attribute_byvalue (int64_t group,
  */
-  __pyx_t_7 = __pyx_f_5adios_s2b(__pyx_v_var, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 673, __pyx_L1_error)
+  __pyx_t_7 = __pyx_f_5adios_s2b(__pyx_v_var, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 681, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_8 = __Pyx_PyObject_AsString(__pyx_t_7); if (unlikely((!__pyx_t_8) && PyErr_Occurred())) __PYX_ERR(0, 673, __pyx_L1_error)
+  __pyx_t_8 = __Pyx_PyObject_AsString(__pyx_t_7); if (unlikely((!__pyx_t_8) && PyErr_Occurred())) __PYX_ERR(0, 681, __pyx_L1_error)
 
-  /* "adios.pyx":668
+  /* "adios.pyx":676
  *                             str value,
  *                             str var):
  *     return adios_define_attribute (group,             # <<<<<<<<<<<<<<
@@ -9518,7 +9746,7 @@ static int __pyx_f_5adios_define_attribute(int64_t __pyx_v_group, PyObject *__py
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":662
+  /* "adios.pyx":670
  *                                        )
  * 
  * cpdef int define_attribute (int64_t group,             # <<<<<<<<<<<<<<
@@ -9576,31 +9804,31 @@ static PyObject *__pyx_pw_5adios_71define_attribute(PyObject *__pyx_self, PyObje
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, 1); __PYX_ERR(0, 662, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, 1); __PYX_ERR(0, 670, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_path)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, 2); __PYX_ERR(0, 662, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, 2); __PYX_ERR(0, 670, __pyx_L3_error)
         }
         case  3:
         if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_atype)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, 3); __PYX_ERR(0, 662, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, 3); __PYX_ERR(0, 670, __pyx_L3_error)
         }
         case  4:
         if (likely((values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_value)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, 4); __PYX_ERR(0, 662, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, 4); __PYX_ERR(0, 670, __pyx_L3_error)
         }
         case  5:
         if (likely((values[5] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_var)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, 5); __PYX_ERR(0, 662, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, 5); __PYX_ERR(0, 670, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_attribute") < 0)) __PYX_ERR(0, 662, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_attribute") < 0)) __PYX_ERR(0, 670, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 6) {
       goto __pyx_L5_argtuple_error;
@@ -9612,25 +9840,25 @@ static PyObject *__pyx_pw_5adios_71define_attribute(PyObject *__pyx_self, PyObje
       values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
       values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
     }
-    __pyx_v_group = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_group == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 662, __pyx_L3_error)
+    __pyx_v_group = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_group == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 670, __pyx_L3_error)
     __pyx_v_name = ((PyObject*)values[1]);
     __pyx_v_path = ((PyObject*)values[2]);
-    __pyx_v_atype = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_atype == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 665, __pyx_L3_error)
+    __pyx_v_atype = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_atype == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 673, __pyx_L3_error)
     __pyx_v_value = ((PyObject*)values[4]);
     __pyx_v_var = ((PyObject*)values[5]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 662, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 670, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.define_attribute", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 663, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_path), (&PyString_Type), 1, "path", 1))) __PYX_ERR(0, 664, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_value), (&PyString_Type), 1, "value", 1))) __PYX_ERR(0, 666, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_var), (&PyString_Type), 1, "var", 1))) __PYX_ERR(0, 667, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 671, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_path), (&PyString_Type), 1, "path", 1))) __PYX_ERR(0, 672, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_value), (&PyString_Type), 1, "value", 1))) __PYX_ERR(0, 674, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_var), (&PyString_Type), 1, "var", 1))) __PYX_ERR(0, 675, __pyx_L1_error)
   __pyx_r = __pyx_pf_5adios_70define_attribute(__pyx_self, __pyx_v_group, __pyx_v_name, __pyx_v_path, __pyx_v_atype, __pyx_v_value, __pyx_v_var);
 
   /* function exit code */
@@ -9648,7 +9876,7 @@ static PyObject *__pyx_pf_5adios_70define_attribute(CYTHON_UNUSED PyObject *__py
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("define_attribute", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_5adios_define_attribute(__pyx_v_group, __pyx_v_name, __pyx_v_path, __pyx_v_atype, __pyx_v_value, __pyx_v_var, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 662, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_5adios_define_attribute(__pyx_v_group, __pyx_v_name, __pyx_v_path, __pyx_v_atype, __pyx_v_value, __pyx_v_var, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 670, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -9665,7 +9893,7 @@ static PyObject *__pyx_pf_5adios_70define_attribute(CYTHON_UNUSED PyObject *__py
   return __pyx_r;
 }
 
-/* "adios.pyx":675
+/* "adios.pyx":683
  *                                    s2b(var))
  * 
  * cpdef int define_attribute_byvalue (int64_t group,             # <<<<<<<<<<<<<<
@@ -9695,7 +9923,7 @@ static int __pyx_f_5adios_define_attribute_byvalue(int64_t __pyx_v_group, PyObje
   int __pyx_t_11;
   __Pyx_RefNannySetupContext("define_attribute_byvalue", 0);
 
-  /* "adios.pyx":680
+  /* "adios.pyx":688
  *                                     val):
  *     cdef np.ndarray val_
  *     if isinstance(val, (np.ndarray)):             # <<<<<<<<<<<<<<
@@ -9706,36 +9934,36 @@ static int __pyx_f_5adios_define_attribute_byvalue(int64_t __pyx_v_group, PyObje
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "adios.pyx":681
+    /* "adios.pyx":689
  *     cdef np.ndarray val_
  *     if isinstance(val, (np.ndarray)):
  *         if val.flags.contiguous:             # <<<<<<<<<<<<<<
  *             val_ = val
  *         else:
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_val, __pyx_n_s_flags); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 681, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_val, __pyx_n_s_flags); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 689, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_contiguous); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 681, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_contiguous); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 689, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 681, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 689, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     if (__pyx_t_2) {
 
-      /* "adios.pyx":682
+      /* "adios.pyx":690
  *     if isinstance(val, (np.ndarray)):
  *         if val.flags.contiguous:
  *             val_ = val             # <<<<<<<<<<<<<<
  *         else:
  *             val_ = np.array(val, copy=True)
  */
-      if (!(likely(((__pyx_v_val) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_val, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 682, __pyx_L1_error)
+      if (!(likely(((__pyx_v_val) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_val, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 690, __pyx_L1_error)
       __pyx_t_4 = __pyx_v_val;
       __Pyx_INCREF(__pyx_t_4);
       __pyx_v_val_ = ((PyArrayObject *)__pyx_t_4);
       __pyx_t_4 = 0;
 
-      /* "adios.pyx":681
+      /* "adios.pyx":689
  *     cdef np.ndarray val_
  *     if isinstance(val, (np.ndarray)):
  *         if val.flags.contiguous:             # <<<<<<<<<<<<<<
@@ -9745,7 +9973,7 @@ static int __pyx_f_5adios_define_attribute_byvalue(int64_t __pyx_v_group, PyObje
       goto __pyx_L4;
     }
 
-    /* "adios.pyx":684
+    /* "adios.pyx":692
  *             val_ = val
  *         else:
  *             val_ = np.array(val, copy=True)             # <<<<<<<<<<<<<<
@@ -9753,31 +9981,31 @@ static int __pyx_f_5adios_define_attribute_byvalue(int64_t __pyx_v_group, PyObje
  *         val_ = np.array(val)
  */
     /*else*/ {
-      __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 684, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 692, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_array); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 684, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_array); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 692, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 684, __pyx_L1_error)
+      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 692, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_INCREF(__pyx_v_val);
       __Pyx_GIVEREF(__pyx_v_val);
       PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_val);
-      __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 684, __pyx_L1_error)
+      __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 692, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
-      if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_copy, Py_True) < 0) __PYX_ERR(0, 684, __pyx_L1_error)
-      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 684, __pyx_L1_error)
+      if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_copy, Py_True) < 0) __PYX_ERR(0, 692, __pyx_L1_error)
+      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 692, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 684, __pyx_L1_error)
+      if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 692, __pyx_L1_error)
       __pyx_v_val_ = ((PyArrayObject *)__pyx_t_6);
       __pyx_t_6 = 0;
     }
     __pyx_L4:;
 
-    /* "adios.pyx":680
+    /* "adios.pyx":688
  *                                     val):
  *     cdef np.ndarray val_
  *     if isinstance(val, (np.ndarray)):             # <<<<<<<<<<<<<<
@@ -9787,7 +10015,7 @@ static int __pyx_f_5adios_define_attribute_byvalue(int64_t __pyx_v_group, PyObje
     goto __pyx_L3;
   }
 
-  /* "adios.pyx":686
+  /* "adios.pyx":694
  *             val_ = np.array(val, copy=True)
  *     else:
  *         val_ = np.array(val)             # <<<<<<<<<<<<<<
@@ -9795,13 +10023,13 @@ static int __pyx_f_5adios_define_attribute_byvalue(int64_t __pyx_v_group, PyObje
  *     atype = np2adiostype(val_.dtype)
  */
   /*else*/ {
-    __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 686, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 694, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_array); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 686, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_array); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 694, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __pyx_t_5 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_4))) {
+    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
       __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
       if (likely(__pyx_t_5)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
@@ -9811,153 +10039,171 @@ static int __pyx_f_5adios_define_attribute_byvalue(int64_t __pyx_v_group, PyObje
       }
     }
     if (!__pyx_t_5) {
-      __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_val); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 686, __pyx_L1_error)
+      __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_val); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 694, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
     } else {
-      __pyx_t_3 = PyTuple_New(1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 686, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_3);
-      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5); __pyx_t_5 = NULL;
-      __Pyx_INCREF(__pyx_v_val);
-      __Pyx_GIVEREF(__pyx_v_val);
-      PyTuple_SET_ITEM(__pyx_t_3, 0+1, __pyx_v_val);
-      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_3, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 686, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_6);
-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_4)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_5, __pyx_v_val};
+        __pyx_t_6 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 694, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+        __Pyx_GOTREF(__pyx_t_6);
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_5, __pyx_v_val};
+        __pyx_t_6 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 694, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+        __Pyx_GOTREF(__pyx_t_6);
+      } else
+      #endif
+      {
+        __pyx_t_3 = PyTuple_New(1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 694, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_3);
+        __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5); __pyx_t_5 = NULL;
+        __Pyx_INCREF(__pyx_v_val);
+        __Pyx_GIVEREF(__pyx_v_val);
+        PyTuple_SET_ITEM(__pyx_t_3, 0+1, __pyx_v_val);
+        __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_3, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 694, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_6);
+        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      }
     }
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 686, __pyx_L1_error)
+    if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 694, __pyx_L1_error)
     __pyx_v_val_ = ((PyArrayObject *)__pyx_t_6);
     __pyx_t_6 = 0;
   }
   __pyx_L3:;
 
-  /* "adios.pyx":688
+  /* "adios.pyx":696
  *         val_ = np.array(val)
  * 
  *     atype = np2adiostype(val_.dtype)             # <<<<<<<<<<<<<<
  * 
  *     cdef char * pt1
  */
-  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val_), __pyx_n_s_dtype); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 688, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val_), __pyx_n_s_dtype); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 696, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_dtype))))) __PYX_ERR(0, 688, __pyx_L1_error)
-  __pyx_t_4 = __pyx_f_5adios_np2adiostype(((PyArray_Descr *)__pyx_t_6), 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 688, __pyx_L1_error)
+  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_dtype))))) __PYX_ERR(0, 696, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_5adios_np2adiostype(((PyArray_Descr *)__pyx_t_6), 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 696, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __pyx_v_atype = __pyx_t_4;
   __pyx_t_4 = 0;
 
-  /* "adios.pyx":692
+  /* "adios.pyx":700
  *     cdef char * pt1
  *     cdef char ** pt2
  *     if (val_.dtype.char in ('S', 'U')):             # <<<<<<<<<<<<<<
  *         if (val_.size == 1):
  *             bstr = s2b(str(val))
  */
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val_), __pyx_n_s_dtype); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 692, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val_), __pyx_n_s_dtype); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 700, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_char); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 692, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_char); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 700, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_6, __pyx_n_s_S, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 692, __pyx_L1_error)
+  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_6, __pyx_n_s_S, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 700, __pyx_L1_error)
   if (!__pyx_t_1) {
   } else {
     __pyx_t_2 = __pyx_t_1;
     goto __pyx_L6_bool_binop_done;
   }
-  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_6, __pyx_n_s_U, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 692, __pyx_L1_error)
+  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_6, __pyx_n_s_U, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 700, __pyx_L1_error)
   __pyx_t_2 = __pyx_t_1;
   __pyx_L6_bool_binop_done:;
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "adios.pyx":693
+    /* "adios.pyx":701
  *     cdef char ** pt2
  *     if (val_.dtype.char in ('S', 'U')):
  *         if (val_.size == 1):             # <<<<<<<<<<<<<<
  *             bstr = s2b(str(val))
  *             pt1 = PyBytes_AsString(bstr)
  */
-    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val_), __pyx_n_s_size); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 693, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val_), __pyx_n_s_size); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 701, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_4 = __Pyx_PyInt_EqObjC(__pyx_t_6, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 693, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyInt_EqObjC(__pyx_t_6, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 701, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 693, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 701, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     if (__pyx_t_1) {
 
-      /* "adios.pyx":694
+      /* "adios.pyx":702
  *     if (val_.dtype.char in ('S', 'U')):
  *         if (val_.size == 1):
  *             bstr = s2b(str(val))             # <<<<<<<<<<<<<<
  *             pt1 = PyBytes_AsString(bstr)
  *             adios_define_attribute_byvalue (group,
  */
-      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 694, __pyx_L1_error)
+      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 702, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_INCREF(__pyx_v_val);
       __Pyx_GIVEREF(__pyx_v_val);
       PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_val);
-      __pyx_t_6 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_4, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 694, __pyx_L1_error)
+      __pyx_t_6 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_4, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 702, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-      if (!(likely(PyString_CheckExact(__pyx_t_6))||((__pyx_t_6) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_6)->tp_name), 0))) __PYX_ERR(0, 694, __pyx_L1_error)
-      __pyx_t_4 = __pyx_f_5adios_s2b(((PyObject*)__pyx_t_6), 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 694, __pyx_L1_error)
+      if (!(likely(PyString_CheckExact(__pyx_t_6))||((__pyx_t_6) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_6)->tp_name), 0))) __PYX_ERR(0, 702, __pyx_L1_error)
+      __pyx_t_4 = __pyx_f_5adios_s2b(((PyObject*)__pyx_t_6), 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 702, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __pyx_v_bstr = ((PyObject*)__pyx_t_4);
       __pyx_t_4 = 0;
 
-      /* "adios.pyx":695
+      /* "adios.pyx":703
  *         if (val_.size == 1):
  *             bstr = s2b(str(val))
  *             pt1 = PyBytes_AsString(bstr)             # <<<<<<<<<<<<<<
  *             adios_define_attribute_byvalue (group,
  *                                             s2b(name),
  */
-      __pyx_t_7 = PyBytes_AsString(__pyx_v_bstr); if (unlikely(__pyx_t_7 == NULL)) __PYX_ERR(0, 695, __pyx_L1_error)
+      __pyx_t_7 = PyBytes_AsString(__pyx_v_bstr); if (unlikely(__pyx_t_7 == NULL)) __PYX_ERR(0, 703, __pyx_L1_error)
       __pyx_v_pt1 = __pyx_t_7;
 
-      /* "adios.pyx":697
+      /* "adios.pyx":705
  *             pt1 = PyBytes_AsString(bstr)
  *             adios_define_attribute_byvalue (group,
  *                                             s2b(name),             # <<<<<<<<<<<<<<
  *                                             s2b(path),
  *                                             DATATYPE.string,
  */
-      __pyx_t_4 = __pyx_f_5adios_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 697, __pyx_L1_error)
+      __pyx_t_4 = __pyx_f_5adios_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 705, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_7 = __Pyx_PyObject_AsString(__pyx_t_4); if (unlikely((!__pyx_t_7) && PyErr_Occurred())) __PYX_ERR(0, 697, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_AsString(__pyx_t_4); if (unlikely((!__pyx_t_7) && PyErr_Occurred())) __PYX_ERR(0, 705, __pyx_L1_error)
 
-      /* "adios.pyx":698
+      /* "adios.pyx":706
  *             adios_define_attribute_byvalue (group,
  *                                             s2b(name),
  *                                             s2b(path),             # <<<<<<<<<<<<<<
  *                                             DATATYPE.string,
  *                                             1,
  */
-      __pyx_t_6 = __pyx_f_5adios_s2b(__pyx_v_path, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 698, __pyx_L1_error)
+      __pyx_t_6 = __pyx_f_5adios_s2b(__pyx_v_path, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 706, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
-      __pyx_t_8 = __Pyx_PyObject_AsString(__pyx_t_6); if (unlikely((!__pyx_t_8) && PyErr_Occurred())) __PYX_ERR(0, 698, __pyx_L1_error)
+      __pyx_t_8 = __Pyx_PyObject_AsString(__pyx_t_6); if (unlikely((!__pyx_t_8) && PyErr_Occurred())) __PYX_ERR(0, 706, __pyx_L1_error)
 
-      /* "adios.pyx":699
+      /* "adios.pyx":707
  *                                             s2b(name),
  *                                             s2b(path),
  *                                             DATATYPE.string,             # <<<<<<<<<<<<<<
  *                                             1,
  *                                             <void *> pt1)
  */
-      __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 699, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 707, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_string); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 699, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_string); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 707, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      __pyx_t_9 = ((ADIOS_DATATYPES)__Pyx_PyInt_As_ADIOS_DATATYPES(__pyx_t_5)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 699, __pyx_L1_error)
+      __pyx_t_9 = ((ADIOS_DATATYPES)__Pyx_PyInt_As_ADIOS_DATATYPES(__pyx_t_5)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 707, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-      /* "adios.pyx":696
+      /* "adios.pyx":704
  *             bstr = s2b(str(val))
  *             pt1 = PyBytes_AsString(bstr)
  *             adios_define_attribute_byvalue (group,             # <<<<<<<<<<<<<<
@@ -9968,7 +10214,7 @@ static int __pyx_f_5adios_define_attribute_byvalue(int64_t __pyx_v_group, PyObje
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-      /* "adios.pyx":693
+      /* "adios.pyx":701
  *     cdef char ** pt2
  *     if (val_.dtype.char in ('S', 'U')):
  *         if (val_.size == 1):             # <<<<<<<<<<<<<<
@@ -9978,7 +10224,7 @@ static int __pyx_f_5adios_define_attribute_byvalue(int64_t __pyx_v_group, PyObje
       goto __pyx_L8;
     }
 
-    /* "adios.pyx":703
+    /* "adios.pyx":711
  *                                             <void *> pt1)
  *         else:
  *             pt2 = to_cstring_array(val)             # <<<<<<<<<<<<<<
@@ -9988,53 +10234,53 @@ static int __pyx_f_5adios_define_attribute_byvalue(int64_t __pyx_v_group, PyObje
     /*else*/ {
       __pyx_v_pt2 = __pyx_f_5adios_to_cstring_array(__pyx_v_val);
 
-      /* "adios.pyx":705
+      /* "adios.pyx":713
  *             pt2 = to_cstring_array(val)
  *             adios_define_attribute_byvalue (group,
  *                                             s2b(name),             # <<<<<<<<<<<<<<
  *                                             s2b(path),
  *                                             DATATYPE.string_array,
  */
-      __pyx_t_6 = __pyx_f_5adios_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 705, __pyx_L1_error)
+      __pyx_t_6 = __pyx_f_5adios_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 713, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
-      __pyx_t_8 = __Pyx_PyObject_AsString(__pyx_t_6); if (unlikely((!__pyx_t_8) && PyErr_Occurred())) __PYX_ERR(0, 705, __pyx_L1_error)
+      __pyx_t_8 = __Pyx_PyObject_AsString(__pyx_t_6); if (unlikely((!__pyx_t_8) && PyErr_Occurred())) __PYX_ERR(0, 713, __pyx_L1_error)
 
-      /* "adios.pyx":706
+      /* "adios.pyx":714
  *             adios_define_attribute_byvalue (group,
  *                                             s2b(name),
  *                                             s2b(path),             # <<<<<<<<<<<<<<
  *                                             DATATYPE.string_array,
  *                                             len(val),
  */
-      __pyx_t_4 = __pyx_f_5adios_s2b(__pyx_v_path, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 706, __pyx_L1_error)
+      __pyx_t_4 = __pyx_f_5adios_s2b(__pyx_v_path, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 714, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_7 = __Pyx_PyObject_AsString(__pyx_t_4); if (unlikely((!__pyx_t_7) && PyErr_Occurred())) __PYX_ERR(0, 706, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_AsString(__pyx_t_4); if (unlikely((!__pyx_t_7) && PyErr_Occurred())) __PYX_ERR(0, 714, __pyx_L1_error)
 
-      /* "adios.pyx":707
+      /* "adios.pyx":715
  *                                             s2b(name),
  *                                             s2b(path),
  *                                             DATATYPE.string_array,             # <<<<<<<<<<<<<<
  *                                             len(val),
  *                                             <void *> pt2)
  */
-      __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 707, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 715, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_string_array); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 707, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_string_array); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 715, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      __pyx_t_9 = ((ADIOS_DATATYPES)__Pyx_PyInt_As_ADIOS_DATATYPES(__pyx_t_3)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 707, __pyx_L1_error)
+      __pyx_t_9 = ((ADIOS_DATATYPES)__Pyx_PyInt_As_ADIOS_DATATYPES(__pyx_t_3)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 715, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-      /* "adios.pyx":708
+      /* "adios.pyx":716
  *                                             s2b(path),
  *                                             DATATYPE.string_array,
  *                                             len(val),             # <<<<<<<<<<<<<<
  *                                             <void *> pt2)
  *             free(pt2)
  */
-      __pyx_t_10 = PyObject_Length(__pyx_v_val); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 708, __pyx_L1_error)
+      __pyx_t_10 = PyObject_Length(__pyx_v_val); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 716, __pyx_L1_error)
 
-      /* "adios.pyx":704
+      /* "adios.pyx":712
  *         else:
  *             pt2 = to_cstring_array(val)
  *             adios_define_attribute_byvalue (group,             # <<<<<<<<<<<<<<
@@ -10045,7 +10291,7 @@ static int __pyx_f_5adios_define_attribute_byvalue(int64_t __pyx_v_group, PyObje
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-      /* "adios.pyx":710
+      /* "adios.pyx":718
  *                                             len(val),
  *                                             <void *> pt2)
  *             free(pt2)             # <<<<<<<<<<<<<<
@@ -10056,7 +10302,7 @@ static int __pyx_f_5adios_define_attribute_byvalue(int64_t __pyx_v_group, PyObje
     }
     __pyx_L8:;
 
-    /* "adios.pyx":692
+    /* "adios.pyx":700
  *     cdef char * pt1
  *     cdef char ** pt2
  *     if (val_.dtype.char in ('S', 'U')):             # <<<<<<<<<<<<<<
@@ -10066,7 +10312,7 @@ static int __pyx_f_5adios_define_attribute_byvalue(int64_t __pyx_v_group, PyObje
     goto __pyx_L5;
   }
 
-  /* "adios.pyx":712
+  /* "adios.pyx":720
  *             free(pt2)
  *     else:
  *         adios_define_attribute_byvalue (group,             # <<<<<<<<<<<<<<
@@ -10075,50 +10321,50 @@ static int __pyx_f_5adios_define_attribute_byvalue(int64_t __pyx_v_group, PyObje
  */
   /*else*/ {
 
-    /* "adios.pyx":713
+    /* "adios.pyx":721
  *     else:
  *         adios_define_attribute_byvalue (group,
  *                                         s2b(name),             # <<<<<<<<<<<<<<
  *                                         s2b(path),
  *                                         <ADIOS_DATATYPES> atype,
  */
-    __pyx_t_4 = __pyx_f_5adios_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 713, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_5adios_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 721, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_7 = __Pyx_PyObject_AsString(__pyx_t_4); if (unlikely((!__pyx_t_7) && PyErr_Occurred())) __PYX_ERR(0, 713, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyObject_AsString(__pyx_t_4); if (unlikely((!__pyx_t_7) && PyErr_Occurred())) __PYX_ERR(0, 721, __pyx_L1_error)
 
-    /* "adios.pyx":714
+    /* "adios.pyx":722
  *         adios_define_attribute_byvalue (group,
  *                                         s2b(name),
  *                                         s2b(path),             # <<<<<<<<<<<<<<
  *                                         <ADIOS_DATATYPES> atype,
  *                                         val_.size,
  */
-    __pyx_t_6 = __pyx_f_5adios_s2b(__pyx_v_path, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 714, __pyx_L1_error)
+    __pyx_t_6 = __pyx_f_5adios_s2b(__pyx_v_path, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 722, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_8 = __Pyx_PyObject_AsString(__pyx_t_6); if (unlikely((!__pyx_t_8) && PyErr_Occurred())) __PYX_ERR(0, 714, __pyx_L1_error)
+    __pyx_t_8 = __Pyx_PyObject_AsString(__pyx_t_6); if (unlikely((!__pyx_t_8) && PyErr_Occurred())) __PYX_ERR(0, 722, __pyx_L1_error)
 
-    /* "adios.pyx":715
+    /* "adios.pyx":723
  *                                         s2b(name),
  *                                         s2b(path),
  *                                         <ADIOS_DATATYPES> atype,             # <<<<<<<<<<<<<<
  *                                         val_.size,
  *                                         <void *> val_.data)
  */
-    __pyx_t_9 = ((ADIOS_DATATYPES)__Pyx_PyInt_As_ADIOS_DATATYPES(__pyx_v_atype)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 715, __pyx_L1_error)
+    __pyx_t_9 = ((ADIOS_DATATYPES)__Pyx_PyInt_As_ADIOS_DATATYPES(__pyx_v_atype)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 723, __pyx_L1_error)
 
-    /* "adios.pyx":716
+    /* "adios.pyx":724
  *                                         s2b(path),
  *                                         <ADIOS_DATATYPES> atype,
  *                                         val_.size,             # <<<<<<<<<<<<<<
  *                                         <void *> val_.data)
  * 
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val_), __pyx_n_s_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 716, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val_), __pyx_n_s_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 724, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_11 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 716, __pyx_L1_error)
+    __pyx_t_11 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 724, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "adios.pyx":712
+    /* "adios.pyx":720
  *             free(pt2)
  *     else:
  *         adios_define_attribute_byvalue (group,             # <<<<<<<<<<<<<<
@@ -10131,7 +10377,7 @@ static int __pyx_f_5adios_define_attribute_byvalue(int64_t __pyx_v_group, PyObje
   }
   __pyx_L5:;
 
-  /* "adios.pyx":675
+  /* "adios.pyx":683
  *                                    s2b(var))
  * 
  * cpdef int define_attribute_byvalue (int64_t group,             # <<<<<<<<<<<<<<
@@ -10190,21 +10436,21 @@ static PyObject *__pyx_pw_5adios_73define_attribute_byvalue(PyObject *__pyx_self
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_attribute_byvalue", 1, 4, 4, 1); __PYX_ERR(0, 675, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_attribute_byvalue", 1, 4, 4, 1); __PYX_ERR(0, 683, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_path)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_attribute_byvalue", 1, 4, 4, 2); __PYX_ERR(0, 675, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_attribute_byvalue", 1, 4, 4, 2); __PYX_ERR(0, 683, __pyx_L3_error)
         }
         case  3:
         if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_val)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_attribute_byvalue", 1, 4, 4, 3); __PYX_ERR(0, 675, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_attribute_byvalue", 1, 4, 4, 3); __PYX_ERR(0, 683, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_attribute_byvalue") < 0)) __PYX_ERR(0, 675, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_attribute_byvalue") < 0)) __PYX_ERR(0, 683, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
       goto __pyx_L5_argtuple_error;
@@ -10214,21 +10460,21 @@ static PyObject *__pyx_pw_5adios_73define_attribute_byvalue(PyObject *__pyx_self
       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
       values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
     }
-    __pyx_v_group = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_group == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 675, __pyx_L3_error)
+    __pyx_v_group = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_group == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 683, __pyx_L3_error)
     __pyx_v_name = ((PyObject*)values[1]);
     __pyx_v_path = ((PyObject*)values[2]);
     __pyx_v_val = values[3];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("define_attribute_byvalue", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 675, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("define_attribute_byvalue", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 683, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.define_attribute_byvalue", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 676, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_path), (&PyString_Type), 1, "path", 1))) __PYX_ERR(0, 677, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 684, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_path), (&PyString_Type), 1, "path", 1))) __PYX_ERR(0, 685, __pyx_L1_error)
   __pyx_r = __pyx_pf_5adios_72define_attribute_byvalue(__pyx_self, __pyx_v_group, __pyx_v_name, __pyx_v_path, __pyx_v_val);
 
   /* function exit code */
@@ -10246,7 +10492,7 @@ static PyObject *__pyx_pf_5adios_72define_attribute_byvalue(CYTHON_UNUSED PyObje
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("define_attribute_byvalue", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_5adios_define_attribute_byvalue(__pyx_v_group, __pyx_v_name, __pyx_v_path, __pyx_v_val, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 675, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_5adios_define_attribute_byvalue(__pyx_v_group, __pyx_v_name, __pyx_v_path, __pyx_v_val, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 683, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -10263,7 +10509,7 @@ static PyObject *__pyx_pf_5adios_72define_attribute_byvalue(CYTHON_UNUSED PyObje
   return __pyx_r;
 }
 
-/* "adios.pyx":719
+/* "adios.pyx":727
  *                                         <void *> val_.data)
  * 
  * cpdef int select_method (int64_t group,             # <<<<<<<<<<<<<<
@@ -10293,40 +10539,40 @@ static int __pyx_f_5adios_select_method(int64_t __pyx_v_group, PyObject *__pyx_v
     }
   }
 
-  /* "adios.pyx":724
+  /* "adios.pyx":732
  *                          str base_path = ""):
  *     return adios_select_method (group,
  *                                 s2b(method),             # <<<<<<<<<<<<<<
  *                                 s2b(parameters),
  *                                 s2b(base_path))
  */
-  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_method, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 724, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_method, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 732, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 724, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 732, __pyx_L1_error)
 
-  /* "adios.pyx":725
+  /* "adios.pyx":733
  *     return adios_select_method (group,
  *                                 s2b(method),
  *                                 s2b(parameters),             # <<<<<<<<<<<<<<
  *                                 s2b(base_path))
  * 
  */
-  __pyx_t_3 = __pyx_f_5adios_s2b(__pyx_v_parameters, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 725, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_5adios_s2b(__pyx_v_parameters, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 733, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 725, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 733, __pyx_L1_error)
 
-  /* "adios.pyx":726
+  /* "adios.pyx":734
  *                                 s2b(method),
  *                                 s2b(parameters),
  *                                 s2b(base_path))             # <<<<<<<<<<<<<<
  * 
  * cpdef int set_transform (int64_t var_id, str transform_type_str):
  */
-  __pyx_t_5 = __pyx_f_5adios_s2b(__pyx_v_base_path, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 726, __pyx_L1_error)
+  __pyx_t_5 = __pyx_f_5adios_s2b(__pyx_v_base_path, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 734, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_t_5); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(0, 726, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_t_5); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(0, 734, __pyx_L1_error)
 
-  /* "adios.pyx":723
+  /* "adios.pyx":731
  *                          str parameters = "",
  *                          str base_path = ""):
  *     return adios_select_method (group,             # <<<<<<<<<<<<<<
@@ -10339,7 +10585,7 @@ static int __pyx_f_5adios_select_method(int64_t __pyx_v_group, PyObject *__pyx_v
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":719
+  /* "adios.pyx":727
  *                                         <void *> val_.data)
  * 
  * cpdef int select_method (int64_t group,             # <<<<<<<<<<<<<<
@@ -10394,7 +10640,7 @@ static PyObject *__pyx_pw_5adios_75select_method(PyObject *__pyx_self, PyObject
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_method)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("select_method", 0, 2, 4, 1); __PYX_ERR(0, 719, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("select_method", 0, 2, 4, 1); __PYX_ERR(0, 727, __pyx_L3_error)
         }
         case  2:
         if (kw_args > 0) {
@@ -10408,7 +10654,7 @@ static PyObject *__pyx_pw_5adios_75select_method(PyObject *__pyx_self, PyObject
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "select_method") < 0)) __PYX_ERR(0, 719, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "select_method") < 0)) __PYX_ERR(0, 727, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -10420,22 +10666,22 @@ static PyObject *__pyx_pw_5adios_75select_method(PyObject *__pyx_self, PyObject
         default: goto __pyx_L5_argtuple_error;
       }
     }
-    __pyx_v_group = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_group == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 719, __pyx_L3_error)
+    __pyx_v_group = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_group == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 727, __pyx_L3_error)
     __pyx_v_method = ((PyObject*)values[1]);
     __pyx_v_parameters = ((PyObject*)values[2]);
     __pyx_v_base_path = ((PyObject*)values[3]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("select_method", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 719, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("select_method", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 727, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.select_method", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_method), (&PyString_Type), 1, "method", 1))) __PYX_ERR(0, 720, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_parameters), (&PyString_Type), 1, "parameters", 1))) __PYX_ERR(0, 721, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_base_path), (&PyString_Type), 1, "base_path", 1))) __PYX_ERR(0, 722, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_method), (&PyString_Type), 1, "method", 1))) __PYX_ERR(0, 728, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_parameters), (&PyString_Type), 1, "parameters", 1))) __PYX_ERR(0, 729, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_base_path), (&PyString_Type), 1, "base_path", 1))) __PYX_ERR(0, 730, __pyx_L1_error)
   __pyx_r = __pyx_pf_5adios_74select_method(__pyx_self, __pyx_v_group, __pyx_v_method, __pyx_v_parameters, __pyx_v_base_path);
 
   /* function exit code */
@@ -10459,7 +10705,7 @@ static PyObject *__pyx_pf_5adios_74select_method(CYTHON_UNUSED PyObject *__pyx_s
   __pyx_t_2.parameters = __pyx_v_parameters;
   __pyx_t_2.base_path = __pyx_v_base_path;
   __pyx_t_1 = __pyx_f_5adios_select_method(__pyx_v_group, __pyx_v_method, 0, &__pyx_t_2); 
-  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 719, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 727, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
@@ -10476,7 +10722,7 @@ static PyObject *__pyx_pf_5adios_74select_method(CYTHON_UNUSED PyObject *__pyx_s
   return __pyx_r;
 }
 
-/* "adios.pyx":728
+/* "adios.pyx":736
  *                                 s2b(base_path))
  * 
  * cpdef int set_transform (int64_t var_id, str transform_type_str):             # <<<<<<<<<<<<<<
@@ -10492,21 +10738,21 @@ static int __pyx_f_5adios_set_transform(int64_t __pyx_v_var_id, PyObject *__pyx_
   char const *__pyx_t_2;
   __Pyx_RefNannySetupContext("set_transform", 0);
 
-  /* "adios.pyx":729
+  /* "adios.pyx":737
  * 
  * cpdef int set_transform (int64_t var_id, str transform_type_str):
  *     return adios_set_transform (var_id, s2b(transform_type_str))             # <<<<<<<<<<<<<<
  * 
  * cpdef void set_max_buffer_size (int64_t max_buffer_size_MB):
  */
-  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_transform_type_str, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 729, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_transform_type_str, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 737, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 729, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 737, __pyx_L1_error)
   __pyx_r = adios_set_transform(__pyx_v_var_id, __pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":728
+  /* "adios.pyx":736
  *                                 s2b(base_path))
  * 
  * cpdef int set_transform (int64_t var_id, str transform_type_str):             # <<<<<<<<<<<<<<
@@ -10553,11 +10799,11 @@ static PyObject *__pyx_pw_5adios_77set_transform(PyObject *__pyx_self, PyObject
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_transform_type_str)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("set_transform", 1, 2, 2, 1); __PYX_ERR(0, 728, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("set_transform", 1, 2, 2, 1); __PYX_ERR(0, 736, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_transform") < 0)) __PYX_ERR(0, 728, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_transform") < 0)) __PYX_ERR(0, 736, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -10565,18 +10811,18 @@ static PyObject *__pyx_pw_5adios_77set_transform(PyObject *__pyx_self, PyObject
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
     }
-    __pyx_v_var_id = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_var_id == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 728, __pyx_L3_error)
+    __pyx_v_var_id = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_var_id == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 736, __pyx_L3_error)
     __pyx_v_transform_type_str = ((PyObject*)values[1]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("set_transform", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 728, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("set_transform", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 736, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.set_transform", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_transform_type_str), (&PyString_Type), 1, "transform_type_str", 1))) __PYX_ERR(0, 728, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_transform_type_str), (&PyString_Type), 1, "transform_type_str", 1))) __PYX_ERR(0, 736, __pyx_L1_error)
   __pyx_r = __pyx_pf_5adios_76set_transform(__pyx_self, __pyx_v_var_id, __pyx_v_transform_type_str);
 
   /* function exit code */
@@ -10594,7 +10840,7 @@ static PyObject *__pyx_pf_5adios_76set_transform(CYTHON_UNUSED PyObject *__pyx_s
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("set_transform", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_5adios_set_transform(__pyx_v_var_id, __pyx_v_transform_type_str, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 728, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_5adios_set_transform(__pyx_v_var_id, __pyx_v_transform_type_str, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 736, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -10611,7 +10857,7 @@ static PyObject *__pyx_pf_5adios_76set_transform(CYTHON_UNUSED PyObject *__pyx_s
   return __pyx_r;
 }
 
-/* "adios.pyx":731
+/* "adios.pyx":739
  *     return adios_set_transform (var_id, s2b(transform_type_str))
  * 
  * cpdef void set_max_buffer_size (int64_t max_buffer_size_MB):             # <<<<<<<<<<<<<<
@@ -10624,7 +10870,7 @@ static void __pyx_f_5adios_set_max_buffer_size(int64_t __pyx_v_max_buffer_size_M
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("set_max_buffer_size", 0);
 
-  /* "adios.pyx":732
+  /* "adios.pyx":740
  * 
  * cpdef void set_max_buffer_size (int64_t max_buffer_size_MB):
  *     adios_set_max_buffer_size (max_buffer_size_MB)             # <<<<<<<<<<<<<<
@@ -10633,7 +10879,7 @@ static void __pyx_f_5adios_set_max_buffer_size(int64_t __pyx_v_max_buffer_size_M
  */
   adios_set_max_buffer_size(__pyx_v_max_buffer_size_MB);
 
-  /* "adios.pyx":731
+  /* "adios.pyx":739
  *     return adios_set_transform (var_id, s2b(transform_type_str))
  * 
  * cpdef void set_max_buffer_size (int64_t max_buffer_size_MB):             # <<<<<<<<<<<<<<
@@ -10654,7 +10900,7 @@ static PyObject *__pyx_pw_5adios_79set_max_buffer_size(PyObject *__pyx_self, PyO
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("set_max_buffer_size (wrapper)", 0);
   assert(__pyx_arg_max_buffer_size_MB); {
-    __pyx_v_max_buffer_size_MB = __Pyx_PyInt_As_int64_t(__pyx_arg_max_buffer_size_MB); if (unlikely((__pyx_v_max_buffer_size_MB == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 731, __pyx_L3_error)
+    __pyx_v_max_buffer_size_MB = __Pyx_PyInt_As_int64_t(__pyx_arg_max_buffer_size_MB); if (unlikely((__pyx_v_max_buffer_size_MB == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 739, __pyx_L3_error)
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L3_error:;
@@ -10675,7 +10921,7 @@ static PyObject *__pyx_pf_5adios_78set_max_buffer_size(CYTHON_UNUSED PyObject *_
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("set_max_buffer_size", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_void_to_None(__pyx_f_5adios_set_max_buffer_size(__pyx_v_max_buffer_size_MB, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 731, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_void_to_None(__pyx_f_5adios_set_max_buffer_size(__pyx_v_max_buffer_size_MB, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 739, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -10692,7 +10938,7 @@ static PyObject *__pyx_pf_5adios_78set_max_buffer_size(CYTHON_UNUSED PyObject *_
   return __pyx_r;
 }
 
-/* "adios.pyx":734
+/* "adios.pyx":742
  *     adios_set_max_buffer_size (max_buffer_size_MB)
  * 
  * cpdef int set_time_aggregation (int64_t groupid,             # <<<<<<<<<<<<<<
@@ -10706,7 +10952,7 @@ static int __pyx_f_5adios_set_time_aggregation(int64_t __pyx_v_groupid, uint64_t
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("set_time_aggregation", 0);
 
-  /* "adios.pyx":737
+  /* "adios.pyx":745
  *                                       uint64_t buffersize,
  *                                       int64_t syncgroupid):
  *     return adios_set_time_aggregation (groupid,             # <<<<<<<<<<<<<<
@@ -10716,7 +10962,7 @@ static int __pyx_f_5adios_set_time_aggregation(int64_t __pyx_v_groupid, uint64_t
   __pyx_r = adios_set_time_aggregation(__pyx_v_groupid, __pyx_v_buffersize, __pyx_v_syncgroupid);
   goto __pyx_L0;
 
-  /* "adios.pyx":734
+  /* "adios.pyx":742
  *     adios_set_max_buffer_size (max_buffer_size_MB)
  * 
  * cpdef int set_time_aggregation (int64_t groupid,             # <<<<<<<<<<<<<<
@@ -10761,16 +11007,16 @@ static PyObject *__pyx_pw_5adios_81set_time_aggregation(PyObject *__pyx_self, Py
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_buffersize)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("set_time_aggregation", 1, 3, 3, 1); __PYX_ERR(0, 734, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("set_time_aggregation", 1, 3, 3, 1); __PYX_ERR(0, 742, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_syncgroupid)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("set_time_aggregation", 1, 3, 3, 2); __PYX_ERR(0, 734, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("set_time_aggregation", 1, 3, 3, 2); __PYX_ERR(0, 742, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_time_aggregation") < 0)) __PYX_ERR(0, 734, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_time_aggregation") < 0)) __PYX_ERR(0, 742, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -10779,13 +11025,13 @@ static PyObject *__pyx_pw_5adios_81set_time_aggregation(PyObject *__pyx_self, Py
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
     }
-    __pyx_v_groupid = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_groupid == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 734, __pyx_L3_error)
-    __pyx_v_buffersize = __Pyx_PyInt_As_uint64_t(values[1]); if (unlikely((__pyx_v_buffersize == (uint64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 735, __pyx_L3_error)
-    __pyx_v_syncgroupid = __Pyx_PyInt_As_int64_t(values[2]); if (unlikely((__pyx_v_syncgroupid == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 736, __pyx_L3_error)
+    __pyx_v_groupid = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_groupid == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 742, __pyx_L3_error)
+    __pyx_v_buffersize = __Pyx_PyInt_As_uint64_t(values[1]); if (unlikely((__pyx_v_buffersize == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 743, __pyx_L3_error)
+    __pyx_v_syncgroupid = __Pyx_PyInt_As_int64_t(values[2]); if (unlikely((__pyx_v_syncgroupid == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 744, __pyx_L3_error)
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("set_time_aggregation", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 734, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("set_time_aggregation", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 742, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.set_time_aggregation", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -10804,7 +11050,7 @@ static PyObject *__pyx_pf_5adios_80set_time_aggregation(CYTHON_UNUSED PyObject *
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("set_time_aggregation", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_5adios_set_time_aggregation(__pyx_v_groupid, __pyx_v_buffersize, __pyx_v_syncgroupid, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 734, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_5adios_set_time_aggregation(__pyx_v_groupid, __pyx_v_buffersize, __pyx_v_syncgroupid, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 742, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -10821,7 +11067,7 @@ static PyObject *__pyx_pf_5adios_80set_time_aggregation(CYTHON_UNUSED PyObject *
   return __pyx_r;
 }
 
-/* "adios.pyx":746
+/* "adios.pyx":754
  * ## ====================
  * 
  * cpdef np.dtype adios2npdtype(ADIOS_DATATYPES t, int strlen = 1):             # <<<<<<<<<<<<<<
@@ -10845,7 +11091,7 @@ static PyArray_Descr *__pyx_f_5adios_adios2npdtype(ADIOS_DATATYPES __pyx_v_t, CY
     }
   }
 
-  /* "adios.pyx":748
+  /* "adios.pyx":756
  * cpdef np.dtype adios2npdtype(ADIOS_DATATYPES t, int strlen = 1):
  *     """ strlen apply only to string type """
  *     cdef np.dtype ntype = None             # <<<<<<<<<<<<<<
@@ -10855,7 +11101,7 @@ static PyArray_Descr *__pyx_f_5adios_adios2npdtype(ADIOS_DATATYPES __pyx_v_t, CY
   __Pyx_INCREF(Py_None);
   __pyx_v_ntype = ((PyArray_Descr *)Py_None);
 
-  /* "adios.pyx":749
+  /* "adios.pyx":757
  *     """ strlen apply only to string type """
  *     cdef np.dtype ntype = None
  *     if t == adios_byte:             # <<<<<<<<<<<<<<
@@ -10865,30 +11111,30 @@ static PyArray_Descr *__pyx_f_5adios_adios2npdtype(ADIOS_DATATYPES __pyx_v_t, CY
   switch (__pyx_v_t) {
     case adios_byte:
 
-    /* "adios.pyx":750
+    /* "adios.pyx":758
  *     cdef np.dtype ntype = None
  *     if t == adios_byte:
  *         ntype = np.dtype(np.int8)             # <<<<<<<<<<<<<<
  *     elif t == adios_short:
  *         ntype = np.dtype(np.int16)
  */
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 750, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 758, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_int8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 750, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_int8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 758, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 750, __pyx_L1_error)
+    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 758, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_GIVEREF(__pyx_t_2);
     PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
     __pyx_t_2 = 0;
-    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 750, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 758, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF_SET(__pyx_v_ntype, ((PyArray_Descr *)__pyx_t_2));
     __pyx_t_2 = 0;
 
-    /* "adios.pyx":749
+    /* "adios.pyx":757
  *     """ strlen apply only to string type """
  *     cdef np.dtype ntype = None
  *     if t == adios_byte:             # <<<<<<<<<<<<<<
@@ -10897,7 +11143,7 @@ static PyArray_Descr *__pyx_f_5adios_adios2npdtype(ADIOS_DATATYPES __pyx_v_t, CY
  */
     break;
 
-    /* "adios.pyx":751
+    /* "adios.pyx":759
  *     if t == adios_byte:
  *         ntype = np.dtype(np.int8)
  *     elif t == adios_short:             # <<<<<<<<<<<<<<
@@ -10906,30 +11152,30 @@ static PyArray_Descr *__pyx_f_5adios_adios2npdtype(ADIOS_DATATYPES __pyx_v_t, CY
  */
     case adios_short:
 
-    /* "adios.pyx":752
+    /* "adios.pyx":760
  *         ntype = np.dtype(np.int8)
  *     elif t == adios_short:
  *         ntype = np.dtype(np.int16)             # <<<<<<<<<<<<<<
  *     elif t == adios_integer:
  *         ntype = np.dtype(np.int32)
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 752, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 760, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_int16); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 752, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_int16); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 760, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 752, __pyx_L1_error)
+    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 760, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_GIVEREF(__pyx_t_1);
     PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
     __pyx_t_1 = 0;
-    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 752, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 760, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF_SET(__pyx_v_ntype, ((PyArray_Descr *)__pyx_t_1));
     __pyx_t_1 = 0;
 
-    /* "adios.pyx":751
+    /* "adios.pyx":759
  *     if t == adios_byte:
  *         ntype = np.dtype(np.int8)
  *     elif t == adios_short:             # <<<<<<<<<<<<<<
@@ -10938,7 +11184,7 @@ static PyArray_Descr *__pyx_f_5adios_adios2npdtype(ADIOS_DATATYPES __pyx_v_t, CY
  */
     break;
 
-    /* "adios.pyx":753
+    /* "adios.pyx":761
  *     elif t == adios_short:
  *         ntype = np.dtype(np.int16)
  *     elif t == adios_integer:             # <<<<<<<<<<<<<<
@@ -10947,30 +11193,30 @@ static PyArray_Descr *__pyx_f_5adios_adios2npdtype(ADIOS_DATATYPES __pyx_v_t, CY
  */
     case adios_integer:
 
-    /* "adios.pyx":754
+    /* "adios.pyx":762
  *         ntype = np.dtype(np.int16)
  *     elif t == adios_integer:
  *         ntype = np.dtype(np.int32)             # <<<<<<<<<<<<<<
  *     elif t == adios_long:
  *         ntype = np.dtype(np.int64)
  */
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 754, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 762, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_int32); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 754, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_int32); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 762, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 754, __pyx_L1_error)
+    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 762, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_GIVEREF(__pyx_t_2);
     PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
     __pyx_t_2 = 0;
-    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 754, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 762, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF_SET(__pyx_v_ntype, ((PyArray_Descr *)__pyx_t_2));
     __pyx_t_2 = 0;
 
-    /* "adios.pyx":753
+    /* "adios.pyx":761
  *     elif t == adios_short:
  *         ntype = np.dtype(np.int16)
  *     elif t == adios_integer:             # <<<<<<<<<<<<<<
@@ -10979,7 +11225,7 @@ static PyArray_Descr *__pyx_f_5adios_adios2npdtype(ADIOS_DATATYPES __pyx_v_t, CY
  */
     break;
 
-    /* "adios.pyx":755
+    /* "adios.pyx":763
  *     elif t == adios_integer:
  *         ntype = np.dtype(np.int32)
  *     elif t == adios_long:             # <<<<<<<<<<<<<<
@@ -10988,30 +11234,30 @@ static PyArray_Descr *__pyx_f_5adios_adios2npdtype(ADIOS_DATATYPES __pyx_v_t, CY
  */
     case adios_long:
 
-    /* "adios.pyx":756
+    /* "adios.pyx":764
  *         ntype = np.dtype(np.int32)
  *     elif t == adios_long:
  *         ntype = np.dtype(np.int64)             # <<<<<<<<<<<<<<
  *     elif t == adios_unsigned_byte:
  *         ntype = np.dtype(np.uint8)
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 756, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 764, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_int64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 756, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_int64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 764, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 756, __pyx_L1_error)
+    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 764, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_GIVEREF(__pyx_t_1);
     PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
     __pyx_t_1 = 0;
-    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 756, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 764, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF_SET(__pyx_v_ntype, ((PyArray_Descr *)__pyx_t_1));
     __pyx_t_1 = 0;
 
-    /* "adios.pyx":755
+    /* "adios.pyx":763
  *     elif t == adios_integer:
  *         ntype = np.dtype(np.int32)
  *     elif t == adios_long:             # <<<<<<<<<<<<<<
@@ -11020,7 +11266,7 @@ static PyArray_Descr *__pyx_f_5adios_adios2npdtype(ADIOS_DATATYPES __pyx_v_t, CY
  */
     break;
 
-    /* "adios.pyx":757
+    /* "adios.pyx":765
  *     elif t == adios_long:
  *         ntype = np.dtype(np.int64)
  *     elif t == adios_unsigned_byte:             # <<<<<<<<<<<<<<
@@ -11029,30 +11275,30 @@ static PyArray_Descr *__pyx_f_5adios_adios2npdtype(ADIOS_DATATYPES __pyx_v_t, CY
  */
     case adios_unsigned_byte:
 
-    /* "adios.pyx":758
+    /* "adios.pyx":766
  *         ntype = np.dtype(np.int64)
  *     elif t == adios_unsigned_byte:
  *         ntype = np.dtype(np.uint8)             # <<<<<<<<<<<<<<
  *     elif t == adios_unsigned_short:
  *         ntype = np.dtype(np.uint16)
  */
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 758, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 766, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_uint8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 758, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_uint8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 766, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 758, __pyx_L1_error)
+    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 766, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_GIVEREF(__pyx_t_2);
     PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
     __pyx_t_2 = 0;
-    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 758, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 766, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF_SET(__pyx_v_ntype, ((PyArray_Descr *)__pyx_t_2));
     __pyx_t_2 = 0;
 
-    /* "adios.pyx":757
+    /* "adios.pyx":765
  *     elif t == adios_long:
  *         ntype = np.dtype(np.int64)
  *     elif t == adios_unsigned_byte:             # <<<<<<<<<<<<<<
@@ -11061,7 +11307,7 @@ static PyArray_Descr *__pyx_f_5adios_adios2npdtype(ADIOS_DATATYPES __pyx_v_t, CY
  */
     break;
 
-    /* "adios.pyx":759
+    /* "adios.pyx":767
  *     elif t == adios_unsigned_byte:
  *         ntype = np.dtype(np.uint8)
  *     elif t == adios_unsigned_short:             # <<<<<<<<<<<<<<
@@ -11070,30 +11316,30 @@ static PyArray_Descr *__pyx_f_5adios_adios2npdtype(ADIOS_DATATYPES __pyx_v_t, CY
  */
     case adios_unsigned_short:
 
-    /* "adios.pyx":760
+    /* "adios.pyx":768
  *         ntype = np.dtype(np.uint8)
  *     elif t == adios_unsigned_short:
  *         ntype = np.dtype(np.uint16)             # <<<<<<<<<<<<<<
  *     elif t == adios_unsigned_integer:
  *         ntype = np.dtype(np.uint32)
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 760, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 768, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_uint16); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 760, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_uint16); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 768, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 760, __pyx_L1_error)
+    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 768, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_GIVEREF(__pyx_t_1);
     PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
     __pyx_t_1 = 0;
-    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 760, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 768, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF_SET(__pyx_v_ntype, ((PyArray_Descr *)__pyx_t_1));
     __pyx_t_1 = 0;
 
-    /* "adios.pyx":759
+    /* "adios.pyx":767
  *     elif t == adios_unsigned_byte:
  *         ntype = np.dtype(np.uint8)
  *     elif t == adios_unsigned_short:             # <<<<<<<<<<<<<<
@@ -11102,7 +11348,7 @@ static PyArray_Descr *__pyx_f_5adios_adios2npdtype(ADIOS_DATATYPES __pyx_v_t, CY
  */
     break;
 
-    /* "adios.pyx":761
+    /* "adios.pyx":769
  *     elif t == adios_unsigned_short:
  *         ntype = np.dtype(np.uint16)
  *     elif t == adios_unsigned_integer:             # <<<<<<<<<<<<<<
@@ -11111,30 +11357,30 @@ static PyArray_Descr *__pyx_f_5adios_adios2npdtype(ADIOS_DATATYPES __pyx_v_t, CY
  */
     case adios_unsigned_integer:
 
-    /* "adios.pyx":762
+    /* "adios.pyx":770
  *         ntype = np.dtype(np.uint16)
  *     elif t == adios_unsigned_integer:
  *         ntype = np.dtype(np.uint32)             # <<<<<<<<<<<<<<
  *     elif t == adios_unsigned_long:
  *         ntype = np.dtype(np.uint64)
  */
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 762, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 770, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_uint32); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 762, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_uint32); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 770, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 762, __pyx_L1_error)
+    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 770, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_GIVEREF(__pyx_t_2);
     PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
     __pyx_t_2 = 0;
-    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 762, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 770, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF_SET(__pyx_v_ntype, ((PyArray_Descr *)__pyx_t_2));
     __pyx_t_2 = 0;
 
-    /* "adios.pyx":761
+    /* "adios.pyx":769
  *     elif t == adios_unsigned_short:
  *         ntype = np.dtype(np.uint16)
  *     elif t == adios_unsigned_integer:             # <<<<<<<<<<<<<<
@@ -11143,7 +11389,7 @@ static PyArray_Descr *__pyx_f_5adios_adios2npdtype(ADIOS_DATATYPES __pyx_v_t, CY
  */
     break;
 
-    /* "adios.pyx":763
+    /* "adios.pyx":771
  *     elif t == adios_unsigned_integer:
  *         ntype = np.dtype(np.uint32)
  *     elif t == adios_unsigned_long:             # <<<<<<<<<<<<<<
@@ -11152,30 +11398,30 @@ static PyArray_Descr *__pyx_f_5adios_adios2npdtype(ADIOS_DATATYPES __pyx_v_t, CY
  */
     case adios_unsigned_long:
 
-    /* "adios.pyx":764
+    /* "adios.pyx":772
  *         ntype = np.dtype(np.uint32)
  *     elif t == adios_unsigned_long:
  *         ntype = np.dtype(np.uint64)             # <<<<<<<<<<<<<<
  *     elif t == adios_real:
  *         ntype = np.dtype(np.float32)
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 764, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 772, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_uint64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 764, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_uint64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 772, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 764, __pyx_L1_error)
+    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 772, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_GIVEREF(__pyx_t_1);
     PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
     __pyx_t_1 = 0;
-    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 764, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 772, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF_SET(__pyx_v_ntype, ((PyArray_Descr *)__pyx_t_1));
     __pyx_t_1 = 0;
 
-    /* "adios.pyx":763
+    /* "adios.pyx":771
  *     elif t == adios_unsigned_integer:
  *         ntype = np.dtype(np.uint32)
  *     elif t == adios_unsigned_long:             # <<<<<<<<<<<<<<
@@ -11184,7 +11430,7 @@ static PyArray_Descr *__pyx_f_5adios_adios2npdtype(ADIOS_DATATYPES __pyx_v_t, CY
  */
     break;
 
-    /* "adios.pyx":765
+    /* "adios.pyx":773
  *     elif t == adios_unsigned_long:
  *         ntype = np.dtype(np.uint64)
  *     elif t == adios_real:             # <<<<<<<<<<<<<<
@@ -11193,30 +11439,30 @@ static PyArray_Descr *__pyx_f_5adios_adios2npdtype(ADIOS_DATATYPES __pyx_v_t, CY
  */
     case adios_real:
 
-    /* "adios.pyx":766
+    /* "adios.pyx":774
  *         ntype = np.dtype(np.uint64)
  *     elif t == adios_real:
  *         ntype = np.dtype(np.float32)             # <<<<<<<<<<<<<<
  *     elif t == adios_double:
  *         ntype = np.dtype(np.float64)
  */
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 766, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 774, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 766, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 774, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 766, __pyx_L1_error)
+    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 774, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_GIVEREF(__pyx_t_2);
     PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
     __pyx_t_2 = 0;
-    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 766, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 774, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF_SET(__pyx_v_ntype, ((PyArray_Descr *)__pyx_t_2));
     __pyx_t_2 = 0;
 
-    /* "adios.pyx":765
+    /* "adios.pyx":773
  *     elif t == adios_unsigned_long:
  *         ntype = np.dtype(np.uint64)
  *     elif t == adios_real:             # <<<<<<<<<<<<<<
@@ -11225,7 +11471,7 @@ static PyArray_Descr *__pyx_f_5adios_adios2npdtype(ADIOS_DATATYPES __pyx_v_t, CY
  */
     break;
 
-    /* "adios.pyx":767
+    /* "adios.pyx":775
  *     elif t == adios_real:
  *         ntype = np.dtype(np.float32)
  *     elif t == adios_double:             # <<<<<<<<<<<<<<
@@ -11234,30 +11480,30 @@ static PyArray_Descr *__pyx_f_5adios_adios2npdtype(ADIOS_DATATYPES __pyx_v_t, CY
  */
     case adios_double:
 
-    /* "adios.pyx":768
+    /* "adios.pyx":776
  *         ntype = np.dtype(np.float32)
  *     elif t == adios_double:
  *         ntype = np.dtype(np.float64)             # <<<<<<<<<<<<<<
  *     elif t == adios_long_double:
  *         ntype = np.dtype(np.float128)
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 768, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 776, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_float64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 768, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_float64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 776, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 768, __pyx_L1_error)
+    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 776, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_GIVEREF(__pyx_t_1);
     PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
     __pyx_t_1 = 0;
-    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 768, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 776, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF_SET(__pyx_v_ntype, ((PyArray_Descr *)__pyx_t_1));
     __pyx_t_1 = 0;
 
-    /* "adios.pyx":767
+    /* "adios.pyx":775
  *     elif t == adios_real:
  *         ntype = np.dtype(np.float32)
  *     elif t == adios_double:             # <<<<<<<<<<<<<<
@@ -11266,7 +11512,7 @@ static PyArray_Descr *__pyx_f_5adios_adios2npdtype(ADIOS_DATATYPES __pyx_v_t, CY
  */
     break;
 
-    /* "adios.pyx":769
+    /* "adios.pyx":777
  *     elif t == adios_double:
  *         ntype = np.dtype(np.float64)
  *     elif t == adios_long_double:             # <<<<<<<<<<<<<<
@@ -11275,30 +11521,30 @@ static PyArray_Descr *__pyx_f_5adios_adios2npdtype(ADIOS_DATATYPES __pyx_v_t, CY
  */
     case adios_long_double:
 
-    /* "adios.pyx":770
+    /* "adios.pyx":778
  *         ntype = np.dtype(np.float64)
  *     elif t == adios_long_double:
  *         ntype = np.dtype(np.float128)             # <<<<<<<<<<<<<<
  *     elif t == adios_complex:
  *         ntype = np.dtype(np.complex64)
  */
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 770, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 778, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float128); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 770, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float128); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 778, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 770, __pyx_L1_error)
+    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 778, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_GIVEREF(__pyx_t_2);
     PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
     __pyx_t_2 = 0;
-    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 770, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 778, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF_SET(__pyx_v_ntype, ((PyArray_Descr *)__pyx_t_2));
     __pyx_t_2 = 0;
 
-    /* "adios.pyx":769
+    /* "adios.pyx":777
  *     elif t == adios_double:
  *         ntype = np.dtype(np.float64)
  *     elif t == adios_long_double:             # <<<<<<<<<<<<<<
@@ -11307,7 +11553,7 @@ static PyArray_Descr *__pyx_f_5adios_adios2npdtype(ADIOS_DATATYPES __pyx_v_t, CY
  */
     break;
 
-    /* "adios.pyx":771
+    /* "adios.pyx":779
  *     elif t == adios_long_double:
  *         ntype = np.dtype(np.float128)
  *     elif t == adios_complex:             # <<<<<<<<<<<<<<
@@ -11316,30 +11562,30 @@ static PyArray_Descr *__pyx_f_5adios_adios2npdtype(ADIOS_DATATYPES __pyx_v_t, CY
  */
     case adios_complex:
 
-    /* "adios.pyx":772
+    /* "adios.pyx":780
  *         ntype = np.dtype(np.float128)
  *     elif t == adios_complex:
  *         ntype = np.dtype(np.complex64)             # <<<<<<<<<<<<<<
  *     elif t == adios_double_complex:
  *         ntype = np.dtype(np.complex128)
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 772, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 780, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_complex64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 772, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_complex64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 780, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 772, __pyx_L1_error)
+    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 780, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_GIVEREF(__pyx_t_1);
     PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
     __pyx_t_1 = 0;
-    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 772, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 780, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF_SET(__pyx_v_ntype, ((PyArray_Descr *)__pyx_t_1));
     __pyx_t_1 = 0;
 
-    /* "adios.pyx":771
+    /* "adios.pyx":779
  *     elif t == adios_long_double:
  *         ntype = np.dtype(np.float128)
  *     elif t == adios_complex:             # <<<<<<<<<<<<<<
@@ -11348,7 +11594,7 @@ static PyArray_Descr *__pyx_f_5adios_adios2npdtype(ADIOS_DATATYPES __pyx_v_t, CY
  */
     break;
 
-    /* "adios.pyx":773
+    /* "adios.pyx":781
  *     elif t == adios_complex:
  *         ntype = np.dtype(np.complex64)
  *     elif t == adios_double_complex:             # <<<<<<<<<<<<<<
@@ -11357,30 +11603,30 @@ static PyArray_Descr *__pyx_f_5adios_adios2npdtype(ADIOS_DATATYPES __pyx_v_t, CY
  */
     case adios_double_complex:
 
-    /* "adios.pyx":774
+    /* "adios.pyx":782
  *         ntype = np.dtype(np.complex64)
  *     elif t == adios_double_complex:
  *         ntype = np.dtype(np.complex128)             # <<<<<<<<<<<<<<
  *     elif t == adios_string:
  *         ## Use string_ instead of str_ for py3
  */
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 774, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 782, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_complex128); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 774, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_complex128); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 782, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 774, __pyx_L1_error)
+    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 782, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_GIVEREF(__pyx_t_2);
     PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
     __pyx_t_2 = 0;
-    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 774, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 782, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF_SET(__pyx_v_ntype, ((PyArray_Descr *)__pyx_t_2));
     __pyx_t_2 = 0;
 
-    /* "adios.pyx":773
+    /* "adios.pyx":781
  *     elif t == adios_complex:
  *         ntype = np.dtype(np.complex64)
  *     elif t == adios_double_complex:             # <<<<<<<<<<<<<<
@@ -11389,7 +11635,7 @@ static PyArray_Descr *__pyx_f_5adios_adios2npdtype(ADIOS_DATATYPES __pyx_v_t, CY
  */
     break;
 
-    /* "adios.pyx":775
+    /* "adios.pyx":783
  *     elif t == adios_double_complex:
  *         ntype = np.dtype(np.complex128)
  *     elif t == adios_string:             # <<<<<<<<<<<<<<
@@ -11398,21 +11644,21 @@ static PyArray_Descr *__pyx_f_5adios_adios2npdtype(ADIOS_DATATYPES __pyx_v_t, CY
  */
     case adios_string:
 
-    /* "adios.pyx":777
+    /* "adios.pyx":785
  *     elif t == adios_string:
  *         ## Use string_ instead of str_ for py3
  *         ntype = np.dtype((np.string_, strlen))             # <<<<<<<<<<<<<<
  *     else:
  *         ntype = None
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 777, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 785, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_string_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 777, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_string_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 785, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_strlen); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 777, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_strlen); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 785, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 777, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 785, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_GIVEREF(__pyx_t_1);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
@@ -11420,18 +11666,18 @@ static PyArray_Descr *__pyx_f_5adios_adios2npdtype(ADIOS_DATATYPES __pyx_v_t, CY
     PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2);
     __pyx_t_1 = 0;
     __pyx_t_2 = 0;
-    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 777, __pyx_L1_error)
+    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 785, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_GIVEREF(__pyx_t_3);
     PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
     __pyx_t_3 = 0;
-    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 777, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 785, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF_SET(__pyx_v_ntype, ((PyArray_Descr *)__pyx_t_3));
     __pyx_t_3 = 0;
 
-    /* "adios.pyx":775
+    /* "adios.pyx":783
  *     elif t == adios_double_complex:
  *         ntype = np.dtype(np.complex128)
  *     elif t == adios_string:             # <<<<<<<<<<<<<<
@@ -11441,7 +11687,7 @@ static PyArray_Descr *__pyx_f_5adios_adios2npdtype(ADIOS_DATATYPES __pyx_v_t, CY
     break;
     default:
 
-    /* "adios.pyx":779
+    /* "adios.pyx":787
  *         ntype = np.dtype((np.string_, strlen))
  *     else:
  *         ntype = None             # <<<<<<<<<<<<<<
@@ -11453,7 +11699,7 @@ static PyArray_Descr *__pyx_f_5adios_adios2npdtype(ADIOS_DATATYPES __pyx_v_t, CY
     break;
   }
 
-  /* "adios.pyx":781
+  /* "adios.pyx":789
  *         ntype = None
  * 
  *     return ntype             # <<<<<<<<<<<<<<
@@ -11465,7 +11711,7 @@ static PyArray_Descr *__pyx_f_5adios_adios2npdtype(ADIOS_DATATYPES __pyx_v_t, CY
   __pyx_r = __pyx_v_ntype;
   goto __pyx_L0;
 
-  /* "adios.pyx":746
+  /* "adios.pyx":754
  * ## ====================
  * 
  * cpdef np.dtype adios2npdtype(ADIOS_DATATYPES t, int strlen = 1):             # <<<<<<<<<<<<<<
@@ -11520,7 +11766,7 @@ static PyObject *__pyx_pw_5adios_83adios2npdtype(PyObject *__pyx_self, PyObject
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "adios2npdtype") < 0)) __PYX_ERR(0, 746, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "adios2npdtype") < 0)) __PYX_ERR(0, 754, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -11530,16 +11776,16 @@ static PyObject *__pyx_pw_5adios_83adios2npdtype(PyObject *__pyx_self, PyObject
         default: goto __pyx_L5_argtuple_error;
       }
     }
-    __pyx_v_t = ((ADIOS_DATATYPES)__Pyx_PyInt_As_ADIOS_DATATYPES(values[0])); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 746, __pyx_L3_error)
+    __pyx_v_t = ((ADIOS_DATATYPES)__Pyx_PyInt_As_ADIOS_DATATYPES(values[0])); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 754, __pyx_L3_error)
     if (values[1]) {
-      __pyx_v_strlen = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_strlen == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 746, __pyx_L3_error)
+      __pyx_v_strlen = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_strlen == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 754, __pyx_L3_error)
     } else {
       __pyx_v_strlen = ((int)1);
     }
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("adios2npdtype", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 746, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("adios2npdtype", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 754, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.adios2npdtype", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -11561,7 +11807,7 @@ static PyObject *__pyx_pf_5adios_82adios2npdtype(CYTHON_UNUSED PyObject *__pyx_s
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_2.__pyx_n = 1;
   __pyx_t_2.strlen = __pyx_v_strlen;
-  __pyx_t_1 = ((PyObject *)__pyx_f_5adios_adios2npdtype(__pyx_v_t, 0, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 746, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_5adios_adios2npdtype(__pyx_v_t, 0, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 754, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -11578,7 +11824,7 @@ static PyObject *__pyx_pf_5adios_82adios2npdtype(CYTHON_UNUSED PyObject *__pyx_s
   return __pyx_r;
 }
 
-/* "adios.pyx":783
+/* "adios.pyx":791
  *     return ntype
  * 
  * cdef printfile(ADIOS_FILE * f):             # <<<<<<<<<<<<<<
@@ -11596,16 +11842,16 @@ static PyObject *__pyx_f_5adios_printfile(ADIOS_FILE *__pyx_v_f) {
   int __pyx_t_4;
   __Pyx_RefNannySetupContext("printfile", 0);
 
-  /* "adios.pyx":784
+  /* "adios.pyx":792
  * 
  * cdef printfile(ADIOS_FILE * f):
  *     print ('%15s : %lu' % ('fh', f.fh))             # <<<<<<<<<<<<<<
  *     print ('%15s : %d' % ('nvars', f.nvars))
  *     print ('%15s : %s' % ('var_namelist', [f.var_namelist[i] for i in range(f.nvars)]))
  */
-  __pyx_t_1 = __Pyx_PyInt_From_uint64_t(__pyx_v_f->fh); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 784, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_uint64_t(__pyx_v_f->fh); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 792, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 784, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 792, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_fh);
   __Pyx_GIVEREF(__pyx_n_s_fh);
@@ -11613,29 +11859,29 @@ static PyObject *__pyx_f_5adios_printfile(ADIOS_FILE *__pyx_v_f) {
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_lu, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 784, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_lu, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 792, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 784, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 792, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 784, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 792, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":785
+  /* "adios.pyx":793
  * cdef printfile(ADIOS_FILE * f):
  *     print ('%15s : %lu' % ('fh', f.fh))
  *     print ('%15s : %d' % ('nvars', f.nvars))             # <<<<<<<<<<<<<<
  *     print ('%15s : %s' % ('var_namelist', [f.var_namelist[i] for i in range(f.nvars)]))
  *     print ('%15s : %d' % ('nattrs', f.nattrs))
  */
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->nvars); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 785, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->nvars); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 793, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 785, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 793, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_nvars);
   __Pyx_GIVEREF(__pyx_n_s_nvars);
@@ -11643,37 +11889,37 @@ static PyObject *__pyx_f_5adios_printfile(ADIOS_FILE *__pyx_v_f) {
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 785, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 793, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 785, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 793, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 785, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 793, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":786
+  /* "adios.pyx":794
  *     print ('%15s : %lu' % ('fh', f.fh))
  *     print ('%15s : %d' % ('nvars', f.nvars))
  *     print ('%15s : %s' % ('var_namelist', [f.var_namelist[i] for i in range(f.nvars)]))             # <<<<<<<<<<<<<<
  *     print ('%15s : %d' % ('nattrs', f.nattrs))
  *     print ('%15s : %s' % ('attr_namelist', [f.attr_namelist[i] for i in range(f.nattrs)]))
  */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 786, __pyx_L1_error)
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 794, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_3 = __pyx_v_f->nvars;
   for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
     __pyx_v_i = __pyx_t_4;
-    __pyx_t_2 = __Pyx_PyBytes_FromString((__pyx_v_f->var_namelist[__pyx_v_i])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 786, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyBytes_FromString((__pyx_v_f->var_namelist[__pyx_v_i])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 794, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_2))) __PYX_ERR(0, 786, __pyx_L1_error)
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_2))) __PYX_ERR(0, 794, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   }
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 786, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 794, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_var_namelist);
   __Pyx_GIVEREF(__pyx_n_s_var_namelist);
@@ -11681,29 +11927,29 @@ static PyObject *__pyx_f_5adios_printfile(ADIOS_FILE *__pyx_v_f) {
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_s, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 786, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_s, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 794, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 786, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 794, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 786, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 794, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":787
+  /* "adios.pyx":795
  *     print ('%15s : %d' % ('nvars', f.nvars))
  *     print ('%15s : %s' % ('var_namelist', [f.var_namelist[i] for i in range(f.nvars)]))
  *     print ('%15s : %d' % ('nattrs', f.nattrs))             # <<<<<<<<<<<<<<
  *     print ('%15s : %s' % ('attr_namelist', [f.attr_namelist[i] for i in range(f.nattrs)]))
  *     print ('%15s : %d' % ('current_step', f.current_step))
  */
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->nattrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 787, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->nattrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 795, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 787, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 795, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_nattrs);
   __Pyx_GIVEREF(__pyx_n_s_nattrs);
@@ -11711,37 +11957,37 @@ static PyObject *__pyx_f_5adios_printfile(ADIOS_FILE *__pyx_v_f) {
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 787, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 795, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 787, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 795, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 787, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 795, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":788
+  /* "adios.pyx":796
  *     print ('%15s : %s' % ('var_namelist', [f.var_namelist[i] for i in range(f.nvars)]))
  *     print ('%15s : %d' % ('nattrs', f.nattrs))
  *     print ('%15s : %s' % ('attr_namelist', [f.attr_namelist[i] for i in range(f.nattrs)]))             # <<<<<<<<<<<<<<
  *     print ('%15s : %d' % ('current_step', f.current_step))
  *     print ('%15s : %d' % ('last_step', f.last_step))
  */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 788, __pyx_L1_error)
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 796, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_3 = __pyx_v_f->nattrs;
   for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
     __pyx_v_i = __pyx_t_4;
-    __pyx_t_2 = __Pyx_PyBytes_FromString((__pyx_v_f->attr_namelist[__pyx_v_i])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 788, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyBytes_FromString((__pyx_v_f->attr_namelist[__pyx_v_i])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 796, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_2))) __PYX_ERR(0, 788, __pyx_L1_error)
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_2))) __PYX_ERR(0, 796, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   }
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 788, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 796, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_attr_namelist);
   __Pyx_GIVEREF(__pyx_n_s_attr_namelist);
@@ -11749,29 +11995,29 @@ static PyObject *__pyx_f_5adios_printfile(ADIOS_FILE *__pyx_v_f) {
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_s, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 788, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_s, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 796, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 788, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 796, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 788, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 796, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":789
+  /* "adios.pyx":797
  *     print ('%15s : %d' % ('nattrs', f.nattrs))
  *     print ('%15s : %s' % ('attr_namelist', [f.attr_namelist[i] for i in range(f.nattrs)]))
  *     print ('%15s : %d' % ('current_step', f.current_step))             # <<<<<<<<<<<<<<
  *     print ('%15s : %d' % ('last_step', f.last_step))
  *     print ('%15s : %s' % ('path', f.path))
  */
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->current_step); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 789, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->current_step); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 797, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 789, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 797, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_current_step);
   __Pyx_GIVEREF(__pyx_n_s_current_step);
@@ -11779,29 +12025,29 @@ static PyObject *__pyx_f_5adios_printfile(ADIOS_FILE *__pyx_v_f) {
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 789, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 797, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 789, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 797, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 789, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 797, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":790
+  /* "adios.pyx":798
  *     print ('%15s : %s' % ('attr_namelist', [f.attr_namelist[i] for i in range(f.nattrs)]))
  *     print ('%15s : %d' % ('current_step', f.current_step))
  *     print ('%15s : %d' % ('last_step', f.last_step))             # <<<<<<<<<<<<<<
  *     print ('%15s : %s' % ('path', f.path))
  *     print ('%15s : %d' % ('endianness', f.endianness))
  */
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->last_step); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 790, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->last_step); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 798, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 790, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 798, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_last_step);
   __Pyx_GIVEREF(__pyx_n_s_last_step);
@@ -11809,29 +12055,29 @@ static PyObject *__pyx_f_5adios_printfile(ADIOS_FILE *__pyx_v_f) {
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 790, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 798, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 790, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 798, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 790, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 798, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":791
+  /* "adios.pyx":799
  *     print ('%15s : %d' % ('current_step', f.current_step))
  *     print ('%15s : %d' % ('last_step', f.last_step))
  *     print ('%15s : %s' % ('path', f.path))             # <<<<<<<<<<<<<<
  *     print ('%15s : %d' % ('endianness', f.endianness))
  *     print ('%15s : %d' % ('version', f.version))
  */
-  __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_f->path); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 791, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_f->path); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 799, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 791, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 799, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_path);
   __Pyx_GIVEREF(__pyx_n_s_path);
@@ -11839,29 +12085,29 @@ static PyObject *__pyx_f_5adios_printfile(ADIOS_FILE *__pyx_v_f) {
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_s, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 791, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_s, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 799, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 791, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 799, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 791, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 799, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":792
+  /* "adios.pyx":800
  *     print ('%15s : %d' % ('last_step', f.last_step))
  *     print ('%15s : %s' % ('path', f.path))
  *     print ('%15s : %d' % ('endianness', f.endianness))             # <<<<<<<<<<<<<<
  *     print ('%15s : %d' % ('version', f.version))
  *     print ('%15s : %lu' % ('file_size', f.file_size))
  */
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->endianness); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 792, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->endianness); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 800, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 792, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 800, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_endianness);
   __Pyx_GIVEREF(__pyx_n_s_endianness);
@@ -11869,29 +12115,29 @@ static PyObject *__pyx_f_5adios_printfile(ADIOS_FILE *__pyx_v_f) {
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 792, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 800, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 792, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 800, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 792, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 800, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":793
+  /* "adios.pyx":801
  *     print ('%15s : %s' % ('path', f.path))
  *     print ('%15s : %d' % ('endianness', f.endianness))
  *     print ('%15s : %d' % ('version', f.version))             # <<<<<<<<<<<<<<
  *     print ('%15s : %lu' % ('file_size', f.file_size))
  * 
  */
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->version); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 793, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->version); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 801, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 793, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 801, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_version);
   __Pyx_GIVEREF(__pyx_n_s_version);
@@ -11899,29 +12145,29 @@ static PyObject *__pyx_f_5adios_printfile(ADIOS_FILE *__pyx_v_f) {
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 793, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 801, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 793, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 801, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 793, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 801, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":794
+  /* "adios.pyx":802
  *     print ('%15s : %d' % ('endianness', f.endianness))
  *     print ('%15s : %d' % ('version', f.version))
  *     print ('%15s : %lu' % ('file_size', f.file_size))             # <<<<<<<<<<<<<<
  * 
  * cdef printvar(ADIOS_VARINFO * v):
  */
-  __pyx_t_1 = __Pyx_PyInt_From_uint64_t(__pyx_v_f->file_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 794, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_uint64_t(__pyx_v_f->file_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 802, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 794, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 802, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_file_size);
   __Pyx_GIVEREF(__pyx_n_s_file_size);
@@ -11929,20 +12175,20 @@ static PyObject *__pyx_f_5adios_printfile(ADIOS_FILE *__pyx_v_f) {
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_lu, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 794, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_lu, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 802, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 794, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 802, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 794, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 802, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":783
+  /* "adios.pyx":791
  *     return ntype
  * 
  * cdef printfile(ADIOS_FILE * f):             # <<<<<<<<<<<<<<
@@ -11964,7 +12210,7 @@ static PyObject *__pyx_f_5adios_printfile(ADIOS_FILE *__pyx_v_f) {
   return __pyx_r;
 }
 
-/* "adios.pyx":796
+/* "adios.pyx":804
  *     print ('%15s : %lu' % ('file_size', f.file_size))
  * 
  * cdef printvar(ADIOS_VARINFO * v):             # <<<<<<<<<<<<<<
@@ -11982,16 +12228,16 @@ static PyObject *__pyx_f_5adios_printvar(ADIOS_VARINFO *__pyx_v_v) {
   int __pyx_t_4;
   __Pyx_RefNannySetupContext("printvar", 0);
 
-  /* "adios.pyx":797
+  /* "adios.pyx":805
  * 
  * cdef printvar(ADIOS_VARINFO * v):
  *     print ('%15s : %d' % ('varid', v.varid))             # <<<<<<<<<<<<<<
  *     print ('%15s : %s' % ('type', adios2npdtype(v.type)))
  *     print ('%15s : %d' % ('ndim', v.ndim))
  */
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_v->varid); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 797, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_v->varid); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 805, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 797, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 805, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_varid);
   __Pyx_GIVEREF(__pyx_n_s_varid);
@@ -11999,29 +12245,29 @@ static PyObject *__pyx_f_5adios_printvar(ADIOS_VARINFO *__pyx_v_v) {
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 797, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 805, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 797, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 805, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 797, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 805, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":798
+  /* "adios.pyx":806
  * cdef printvar(ADIOS_VARINFO * v):
  *     print ('%15s : %d' % ('varid', v.varid))
  *     print ('%15s : %s' % ('type', adios2npdtype(v.type)))             # <<<<<<<<<<<<<<
  *     print ('%15s : %d' % ('ndim', v.ndim))
  *     print ('%15s : %s' % ('dims', [v.dims[i] for i in range(v.ndim)]))
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_5adios_adios2npdtype(__pyx_v_v->type, 0, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 798, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_5adios_adios2npdtype(__pyx_v_v->type, 0, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 806, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 798, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 806, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_type);
   __Pyx_GIVEREF(__pyx_n_s_type);
@@ -12029,29 +12275,29 @@ static PyObject *__pyx_f_5adios_printvar(ADIOS_VARINFO *__pyx_v_v) {
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_s, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 798, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_s, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 806, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 798, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 806, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 798, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 806, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":799
+  /* "adios.pyx":807
  *     print ('%15s : %d' % ('varid', v.varid))
  *     print ('%15s : %s' % ('type', adios2npdtype(v.type)))
  *     print ('%15s : %d' % ('ndim', v.ndim))             # <<<<<<<<<<<<<<
  *     print ('%15s : %s' % ('dims', [v.dims[i] for i in range(v.ndim)]))
  *     print ('%15s : %d' % ('nsteps', v.nsteps))
  */
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_v->ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 799, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_v->ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 807, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 799, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 807, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_ndim);
   __Pyx_GIVEREF(__pyx_n_s_ndim);
@@ -12059,37 +12305,37 @@ static PyObject *__pyx_f_5adios_printvar(ADIOS_VARINFO *__pyx_v_v) {
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 799, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 807, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 799, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 807, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 799, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 807, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":800
+  /* "adios.pyx":808
  *     print ('%15s : %s' % ('type', adios2npdtype(v.type)))
  *     print ('%15s : %d' % ('ndim', v.ndim))
  *     print ('%15s : %s' % ('dims', [v.dims[i] for i in range(v.ndim)]))             # <<<<<<<<<<<<<<
  *     print ('%15s : %d' % ('nsteps', v.nsteps))
  * 
  */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 800, __pyx_L1_error)
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 808, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_3 = __pyx_v_v->ndim;
   for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
     __pyx_v_i = __pyx_t_4;
-    __pyx_t_2 = __Pyx_PyInt_From_uint64_t((__pyx_v_v->dims[__pyx_v_i])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 800, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyInt_From_uint64_t((__pyx_v_v->dims[__pyx_v_i])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 808, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_2))) __PYX_ERR(0, 800, __pyx_L1_error)
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_2))) __PYX_ERR(0, 808, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   }
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 800, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 808, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_dims);
   __Pyx_GIVEREF(__pyx_n_s_dims);
@@ -12097,29 +12343,29 @@ static PyObject *__pyx_f_5adios_printvar(ADIOS_VARINFO *__pyx_v_v) {
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_s, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 800, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_s, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 808, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 800, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 808, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 800, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 808, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":801
+  /* "adios.pyx":809
  *     print ('%15s : %d' % ('ndim', v.ndim))
  *     print ('%15s : %s' % ('dims', [v.dims[i] for i in range(v.ndim)]))
  *     print ('%15s : %d' % ('nsteps', v.nsteps))             # <<<<<<<<<<<<<<
  * 
  * cdef ADIOS_READ_METHOD str2adiosreadmethod(name):
  */
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_v->nsteps); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 801, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_v->nsteps); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 809, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 801, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 809, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_nsteps);
   __Pyx_GIVEREF(__pyx_n_s_nsteps);
@@ -12127,20 +12373,20 @@ static PyObject *__pyx_f_5adios_printvar(ADIOS_VARINFO *__pyx_v_v) {
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 801, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 809, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 801, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 809, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 801, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 809, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":796
+  /* "adios.pyx":804
  *     print ('%15s : %lu' % ('file_size', f.file_size))
  * 
  * cdef printvar(ADIOS_VARINFO * v):             # <<<<<<<<<<<<<<
@@ -12162,7 +12408,7 @@ static PyObject *__pyx_f_5adios_printvar(ADIOS_VARINFO *__pyx_v_v) {
   return __pyx_r;
 }
 
-/* "adios.pyx":803
+/* "adios.pyx":811
  *     print ('%15s : %d' % ('nsteps', v.nsteps))
  * 
  * cdef ADIOS_READ_METHOD str2adiosreadmethod(name):             # <<<<<<<<<<<<<<
@@ -12180,32 +12426,32 @@ static ADIOS_READ_METHOD __pyx_f_5adios_str2adiosreadmethod(PyObject *__pyx_v_na
   ADIOS_READ_METHOD __pyx_t_4;
   __Pyx_RefNannySetupContext("str2adiosreadmethod", 0);
 
-  /* "adios.pyx":804
+  /* "adios.pyx":812
  * 
  * cdef ADIOS_READ_METHOD str2adiosreadmethod(name):
  *     if (name == "BP"):             # <<<<<<<<<<<<<<
  *         method = READ_METHOD.BP
  *     elif (name == "BP_AGGREGATE"):
  */
-  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_name, __pyx_n_s_BP, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 804, __pyx_L1_error)
+  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_name, __pyx_n_s_BP, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 812, __pyx_L1_error)
   if (__pyx_t_1) {
 
-    /* "adios.pyx":805
+    /* "adios.pyx":813
  * cdef ADIOS_READ_METHOD str2adiosreadmethod(name):
  *     if (name == "BP"):
  *         method = READ_METHOD.BP             # <<<<<<<<<<<<<<
  *     elif (name == "BP_AGGREGATE"):
  *         method = READ_METHOD.BP_AGGREGATE
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_READ_METHOD); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 805, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_READ_METHOD); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 813, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_BP); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 805, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_BP); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 813, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __pyx_v_method = __pyx_t_3;
     __pyx_t_3 = 0;
 
-    /* "adios.pyx":804
+    /* "adios.pyx":812
  * 
  * cdef ADIOS_READ_METHOD str2adiosreadmethod(name):
  *     if (name == "BP"):             # <<<<<<<<<<<<<<
@@ -12215,32 +12461,32 @@ static ADIOS_READ_METHOD __pyx_f_5adios_str2adiosreadmethod(PyObject *__pyx_v_na
     goto __pyx_L3;
   }
 
-  /* "adios.pyx":806
+  /* "adios.pyx":814
  *     if (name == "BP"):
  *         method = READ_METHOD.BP
  *     elif (name == "BP_AGGREGATE"):             # <<<<<<<<<<<<<<
  *         method = READ_METHOD.BP_AGGREGATE
  *     elif (name == "DATASPACES"):
  */
-  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_name, __pyx_n_s_BP_AGGREGATE, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 806, __pyx_L1_error)
+  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_name, __pyx_n_s_BP_AGGREGATE, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 814, __pyx_L1_error)
   if (__pyx_t_1) {
 
-    /* "adios.pyx":807
+    /* "adios.pyx":815
  *         method = READ_METHOD.BP
  *     elif (name == "BP_AGGREGATE"):
  *         method = READ_METHOD.BP_AGGREGATE             # <<<<<<<<<<<<<<
  *     elif (name == "DATASPACES"):
  *         method = READ_METHOD.DATASPACES
  */
-    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_READ_METHOD); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 807, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_READ_METHOD); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 815, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_BP_AGGREGATE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 807, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_BP_AGGREGATE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 815, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __pyx_v_method = __pyx_t_2;
     __pyx_t_2 = 0;
 
-    /* "adios.pyx":806
+    /* "adios.pyx":814
  *     if (name == "BP"):
  *         method = READ_METHOD.BP
  *     elif (name == "BP_AGGREGATE"):             # <<<<<<<<<<<<<<
@@ -12250,32 +12496,32 @@ static ADIOS_READ_METHOD __pyx_f_5adios_str2adiosreadmethod(PyObject *__pyx_v_na
     goto __pyx_L3;
   }
 
-  /* "adios.pyx":808
+  /* "adios.pyx":816
  *     elif (name == "BP_AGGREGATE"):
  *         method = READ_METHOD.BP_AGGREGATE
  *     elif (name == "DATASPACES"):             # <<<<<<<<<<<<<<
  *         method = READ_METHOD.DATASPACES
  *     elif (name == "DIMES"):
  */
-  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_name, __pyx_n_s_DATASPACES, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 808, __pyx_L1_error)
+  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_name, __pyx_n_s_DATASPACES, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 816, __pyx_L1_error)
   if (__pyx_t_1) {
 
-    /* "adios.pyx":809
+    /* "adios.pyx":817
  *         method = READ_METHOD.BP_AGGREGATE
  *     elif (name == "DATASPACES"):
  *         method = READ_METHOD.DATASPACES             # <<<<<<<<<<<<<<
  *     elif (name == "DIMES"):
  *         method = READ_METHOD.DIMES
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_READ_METHOD); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 809, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_READ_METHOD); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 817, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_DATASPACES); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 809, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_DATASPACES); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 817, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __pyx_v_method = __pyx_t_3;
     __pyx_t_3 = 0;
 
-    /* "adios.pyx":808
+    /* "adios.pyx":816
  *     elif (name == "BP_AGGREGATE"):
  *         method = READ_METHOD.BP_AGGREGATE
  *     elif (name == "DATASPACES"):             # <<<<<<<<<<<<<<
@@ -12285,32 +12531,32 @@ static ADIOS_READ_METHOD __pyx_f_5adios_str2adiosreadmethod(PyObject *__pyx_v_na
     goto __pyx_L3;
   }
 
-  /* "adios.pyx":810
+  /* "adios.pyx":818
  *     elif (name == "DATASPACES"):
  *         method = READ_METHOD.DATASPACES
  *     elif (name == "DIMES"):             # <<<<<<<<<<<<<<
  *         method = READ_METHOD.DIMES
  *     elif (name == "FLEXPATH"):
  */
-  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_name, __pyx_n_s_DIMES, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 810, __pyx_L1_error)
+  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_name, __pyx_n_s_DIMES, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 818, __pyx_L1_error)
   if (__pyx_t_1) {
 
-    /* "adios.pyx":811
+    /* "adios.pyx":819
  *         method = READ_METHOD.DATASPACES
  *     elif (name == "DIMES"):
  *         method = READ_METHOD.DIMES             # <<<<<<<<<<<<<<
  *     elif (name == "FLEXPATH"):
  *         method = READ_METHOD.FLEXPATH
  */
-    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_READ_METHOD); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 811, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_READ_METHOD); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 819, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_DIMES); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 811, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_DIMES); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 819, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __pyx_v_method = __pyx_t_2;
     __pyx_t_2 = 0;
 
-    /* "adios.pyx":810
+    /* "adios.pyx":818
  *     elif (name == "DATASPACES"):
  *         method = READ_METHOD.DATASPACES
  *     elif (name == "DIMES"):             # <<<<<<<<<<<<<<
@@ -12320,32 +12566,32 @@ static ADIOS_READ_METHOD __pyx_f_5adios_str2adiosreadmethod(PyObject *__pyx_v_na
     goto __pyx_L3;
   }
 
-  /* "adios.pyx":812
+  /* "adios.pyx":820
  *     elif (name == "DIMES"):
  *         method = READ_METHOD.DIMES
  *     elif (name == "FLEXPATH"):             # <<<<<<<<<<<<<<
  *         method = READ_METHOD.FLEXPATH
  *     elif (name == "ICEE"):
  */
-  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_name, __pyx_n_s_FLEXPATH, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 812, __pyx_L1_error)
+  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_name, __pyx_n_s_FLEXPATH, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 820, __pyx_L1_error)
   if (__pyx_t_1) {
 
-    /* "adios.pyx":813
+    /* "adios.pyx":821
  *         method = READ_METHOD.DIMES
  *     elif (name == "FLEXPATH"):
  *         method = READ_METHOD.FLEXPATH             # <<<<<<<<<<<<<<
  *     elif (name == "ICEE"):
  *         method = READ_METHOD.ICEE
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_READ_METHOD); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 813, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_READ_METHOD); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 821, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_FLEXPATH); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 813, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_FLEXPATH); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 821, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __pyx_v_method = __pyx_t_3;
     __pyx_t_3 = 0;
 
-    /* "adios.pyx":812
+    /* "adios.pyx":820
  *     elif (name == "DIMES"):
  *         method = READ_METHOD.DIMES
  *     elif (name == "FLEXPATH"):             # <<<<<<<<<<<<<<
@@ -12355,32 +12601,32 @@ static ADIOS_READ_METHOD __pyx_f_5adios_str2adiosreadmethod(PyObject *__pyx_v_na
     goto __pyx_L3;
   }
 
-  /* "adios.pyx":814
+  /* "adios.pyx":822
  *     elif (name == "FLEXPATH"):
  *         method = READ_METHOD.FLEXPATH
  *     elif (name == "ICEE"):             # <<<<<<<<<<<<<<
  *         method = READ_METHOD.ICEE
  *     else:
  */
-  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_name, __pyx_n_s_ICEE, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 814, __pyx_L1_error)
+  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_name, __pyx_n_s_ICEE, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 822, __pyx_L1_error)
   if (__pyx_t_1) {
 
-    /* "adios.pyx":815
+    /* "adios.pyx":823
  *         method = READ_METHOD.FLEXPATH
  *     elif (name == "ICEE"):
  *         method = READ_METHOD.ICEE             # <<<<<<<<<<<<<<
  *     else:
  *         print ('[WARN] Invalid read method name:', name, '. Use default BP method')
  */
-    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_READ_METHOD); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 815, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_READ_METHOD); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 823, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_ICEE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 815, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_ICEE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 823, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __pyx_v_method = __pyx_t_2;
     __pyx_t_2 = 0;
 
-    /* "adios.pyx":814
+    /* "adios.pyx":822
  *     elif (name == "FLEXPATH"):
  *         method = READ_METHOD.FLEXPATH
  *     elif (name == "ICEE"):             # <<<<<<<<<<<<<<
@@ -12390,7 +12636,7 @@ static ADIOS_READ_METHOD __pyx_f_5adios_str2adiosreadmethod(PyObject *__pyx_v_na
     goto __pyx_L3;
   }
 
-  /* "adios.pyx":817
+  /* "adios.pyx":825
  *         method = READ_METHOD.ICEE
  *     else:
  *         print ('[WARN] Invalid read method name:', name, '. Use default BP method')             # <<<<<<<<<<<<<<
@@ -12398,7 +12644,7 @@ static ADIOS_READ_METHOD __pyx_f_5adios_str2adiosreadmethod(PyObject *__pyx_v_na
  * 
  */
   /*else*/ {
-    __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 817, __pyx_L1_error)
+    __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 825, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_INCREF(__pyx_kp_s_WARN_Invalid_read_method_name);
     __Pyx_GIVEREF(__pyx_kp_s_WARN_Invalid_read_method_name);
@@ -12409,21 +12655,21 @@ static ADIOS_READ_METHOD __pyx_f_5adios_str2adiosreadmethod(PyObject *__pyx_v_na
     __Pyx_INCREF(__pyx_kp_s_Use_default_BP_method);
     __Pyx_GIVEREF(__pyx_kp_s_Use_default_BP_method);
     PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_s_Use_default_BP_method);
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 817, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 825, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "adios.pyx":818
+    /* "adios.pyx":826
  *     else:
  *         print ('[WARN] Invalid read method name:', name, '. Use default BP method')
  *         method = READ_METHOD.BP             # <<<<<<<<<<<<<<
  * 
  *     return method
  */
-    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_READ_METHOD); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 818, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_READ_METHOD); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 826, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_BP); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 818, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_BP); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 826, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __pyx_v_method = __pyx_t_2;
@@ -12431,18 +12677,18 @@ static ADIOS_READ_METHOD __pyx_f_5adios_str2adiosreadmethod(PyObject *__pyx_v_na
   }
   __pyx_L3:;
 
-  /* "adios.pyx":820
+  /* "adios.pyx":828
  *         method = READ_METHOD.BP
  * 
  *     return method             # <<<<<<<<<<<<<<
  * 
  * cpdef np2adiostype(np.dtype nptype):
  */
-  __pyx_t_4 = ((ADIOS_READ_METHOD)__Pyx_PyInt_As_ADIOS_READ_METHOD(__pyx_v_method)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 820, __pyx_L1_error)
+  __pyx_t_4 = ((ADIOS_READ_METHOD)__Pyx_PyInt_As_ADIOS_READ_METHOD(__pyx_v_method)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 828, __pyx_L1_error)
   __pyx_r = __pyx_t_4;
   goto __pyx_L0;
 
-  /* "adios.pyx":803
+  /* "adios.pyx":811
  *     print ('%15s : %d' % ('nsteps', v.nsteps))
  * 
  * cdef ADIOS_READ_METHOD str2adiosreadmethod(name):             # <<<<<<<<<<<<<<
@@ -12462,7 +12708,7 @@ static ADIOS_READ_METHOD __pyx_f_5adios_str2adiosreadmethod(PyObject *__pyx_v_na
   return __pyx_r;
 }
 
-/* "adios.pyx":822
+/* "adios.pyx":830
  *     return method
  * 
  * cpdef np2adiostype(np.dtype nptype):             # <<<<<<<<<<<<<<
@@ -12481,55 +12727,55 @@ static PyObject *__pyx_f_5adios_np2adiostype(PyArray_Descr *__pyx_v_nptype, CYTH
   int __pyx_t_4;
   __Pyx_RefNannySetupContext("np2adiostype", 0);
 
-  /* "adios.pyx":826
+  /* "adios.pyx":834
  *     """
  * 
  *     cdef atype = DATATYPE.unknown             # <<<<<<<<<<<<<<
  * 
  *     if (nptype == np.bool_):
  */
-  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 826, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 834, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_unknown); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 826, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_unknown); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 834, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_atype = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "adios.pyx":828
+  /* "adios.pyx":836
  *     cdef atype = DATATYPE.unknown
  * 
  *     if (nptype == np.bool_):             # <<<<<<<<<<<<<<
  *         atype = DATATYPE.byte
  *     elif (nptype == np.int8):
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 828, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 836, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_bool); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 828, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_bool); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 836, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 828, __pyx_L1_error)
+  __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 836, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 828, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 836, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   if (__pyx_t_3) {
 
-    /* "adios.pyx":829
+    /* "adios.pyx":837
  * 
  *     if (nptype == np.bool_):
  *         atype = DATATYPE.byte             # <<<<<<<<<<<<<<
  *     elif (nptype == np.int8):
  *         atype = DATATYPE.byte
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 829, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 837, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_byte); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 829, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_byte); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 837, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "adios.pyx":828
+    /* "adios.pyx":836
  *     cdef atype = DATATYPE.unknown
  * 
  *     if (nptype == np.bool_):             # <<<<<<<<<<<<<<
@@ -12539,40 +12785,40 @@ static PyObject *__pyx_f_5adios_np2adiostype(PyArray_Descr *__pyx_v_nptype, CYTH
     goto __pyx_L3;
   }
 
-  /* "adios.pyx":830
+  /* "adios.pyx":838
  *     if (nptype == np.bool_):
  *         atype = DATATYPE.byte
  *     elif (nptype == np.int8):             # <<<<<<<<<<<<<<
  *         atype = DATATYPE.byte
  *     elif (nptype == np.int16):
  */
-  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 830, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 838, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_int8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 830, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_int8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 838, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 830, __pyx_L1_error)
+  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 838, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 830, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 838, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   if (__pyx_t_3) {
 
-    /* "adios.pyx":831
+    /* "adios.pyx":839
  *         atype = DATATYPE.byte
  *     elif (nptype == np.int8):
  *         atype = DATATYPE.byte             # <<<<<<<<<<<<<<
  *     elif (nptype == np.int16):
  *         atype = DATATYPE.short
  */
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 831, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 839, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_byte); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 831, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_byte); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 839, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_2);
     __pyx_t_2 = 0;
 
-    /* "adios.pyx":830
+    /* "adios.pyx":838
  *     if (nptype == np.bool_):
  *         atype = DATATYPE.byte
  *     elif (nptype == np.int8):             # <<<<<<<<<<<<<<
@@ -12582,40 +12828,40 @@ static PyObject *__pyx_f_5adios_np2adiostype(PyArray_Descr *__pyx_v_nptype, CYTH
     goto __pyx_L3;
   }
 
-  /* "adios.pyx":832
+  /* "adios.pyx":840
  *     elif (nptype == np.int8):
  *         atype = DATATYPE.byte
  *     elif (nptype == np.int16):             # <<<<<<<<<<<<<<
  *         atype = DATATYPE.short
  *     elif (nptype == np.int32):
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 832, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 840, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_int16); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 832, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_int16); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 840, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 832, __pyx_L1_error)
+  __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 840, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 832, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 840, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   if (__pyx_t_3) {
 
-    /* "adios.pyx":833
+    /* "adios.pyx":841
  *         atype = DATATYPE.byte
  *     elif (nptype == np.int16):
  *         atype = DATATYPE.short             # <<<<<<<<<<<<<<
  *     elif (nptype == np.int32):
  *         atype = DATATYPE.integer
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 833, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 841, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_short); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 833, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_short); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 841, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "adios.pyx":832
+    /* "adios.pyx":840
  *     elif (nptype == np.int8):
  *         atype = DATATYPE.byte
  *     elif (nptype == np.int16):             # <<<<<<<<<<<<<<
@@ -12625,40 +12871,40 @@ static PyObject *__pyx_f_5adios_np2adiostype(PyArray_Descr *__pyx_v_nptype, CYTH
     goto __pyx_L3;
   }
 
-  /* "adios.pyx":834
+  /* "adios.pyx":842
  *     elif (nptype == np.int16):
  *         atype = DATATYPE.short
  *     elif (nptype == np.int32):             # <<<<<<<<<<<<<<
  *         atype = DATATYPE.integer
  *     elif (nptype == np.int64):
  */
-  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 834, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 842, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_int32); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 834, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_int32); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 842, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 834, __pyx_L1_error)
+  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 842, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 834, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 842, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   if (__pyx_t_3) {
 
-    /* "adios.pyx":835
+    /* "adios.pyx":843
  *         atype = DATATYPE.short
  *     elif (nptype == np.int32):
  *         atype = DATATYPE.integer             # <<<<<<<<<<<<<<
  *     elif (nptype == np.int64):
  *         atype = DATATYPE.long
  */
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 835, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 843, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_integer); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 835, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_integer); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 843, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_2);
     __pyx_t_2 = 0;
 
-    /* "adios.pyx":834
+    /* "adios.pyx":842
  *     elif (nptype == np.int16):
  *         atype = DATATYPE.short
  *     elif (nptype == np.int32):             # <<<<<<<<<<<<<<
@@ -12668,40 +12914,40 @@ static PyObject *__pyx_f_5adios_np2adiostype(PyArray_Descr *__pyx_v_nptype, CYTH
     goto __pyx_L3;
   }
 
-  /* "adios.pyx":836
+  /* "adios.pyx":844
  *     elif (nptype == np.int32):
  *         atype = DATATYPE.integer
  *     elif (nptype == np.int64):             # <<<<<<<<<<<<<<
  *         atype = DATATYPE.long
  *     elif (nptype == np.uint8):
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 836, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 844, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_int64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 836, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_int64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 844, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 836, __pyx_L1_error)
+  __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 844, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 836, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 844, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   if (__pyx_t_3) {
 
-    /* "adios.pyx":837
+    /* "adios.pyx":845
  *         atype = DATATYPE.integer
  *     elif (nptype == np.int64):
  *         atype = DATATYPE.long             # <<<<<<<<<<<<<<
  *     elif (nptype == np.uint8):
  *         atype = DATATYPE.unsigned_byte
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 837, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 845, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_long); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 837, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_long); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 845, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "adios.pyx":836
+    /* "adios.pyx":844
  *     elif (nptype == np.int32):
  *         atype = DATATYPE.integer
  *     elif (nptype == np.int64):             # <<<<<<<<<<<<<<
@@ -12711,40 +12957,40 @@ static PyObject *__pyx_f_5adios_np2adiostype(PyArray_Descr *__pyx_v_nptype, CYTH
     goto __pyx_L3;
   }
 
-  /* "adios.pyx":838
+  /* "adios.pyx":846
  *     elif (nptype == np.int64):
  *         atype = DATATYPE.long
  *     elif (nptype == np.uint8):             # <<<<<<<<<<<<<<
  *         atype = DATATYPE.unsigned_byte
  *     elif (nptype == np.uint16):
  */
-  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 838, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 846, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_uint8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 838, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_uint8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 846, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 838, __pyx_L1_error)
+  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 846, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 838, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 846, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   if (__pyx_t_3) {
 
-    /* "adios.pyx":839
+    /* "adios.pyx":847
  *         atype = DATATYPE.long
  *     elif (nptype == np.uint8):
  *         atype = DATATYPE.unsigned_byte             # <<<<<<<<<<<<<<
  *     elif (nptype == np.uint16):
  *         atype = DATATYPE.unsigned_short
  */
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 839, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 847, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_unsigned_byte); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 839, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_unsigned_byte); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 847, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_2);
     __pyx_t_2 = 0;
 
-    /* "adios.pyx":838
+    /* "adios.pyx":846
  *     elif (nptype == np.int64):
  *         atype = DATATYPE.long
  *     elif (nptype == np.uint8):             # <<<<<<<<<<<<<<
@@ -12754,40 +13000,40 @@ static PyObject *__pyx_f_5adios_np2adiostype(PyArray_Descr *__pyx_v_nptype, CYTH
     goto __pyx_L3;
   }
 
-  /* "adios.pyx":840
+  /* "adios.pyx":848
  *     elif (nptype == np.uint8):
  *         atype = DATATYPE.unsigned_byte
  *     elif (nptype == np.uint16):             # <<<<<<<<<<<<<<
  *         atype = DATATYPE.unsigned_short
  *     elif (nptype == np.uint32):
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 840, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 848, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_uint16); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 840, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_uint16); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 848, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 840, __pyx_L1_error)
+  __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 848, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 840, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 848, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   if (__pyx_t_3) {
 
-    /* "adios.pyx":841
+    /* "adios.pyx":849
  *         atype = DATATYPE.unsigned_byte
  *     elif (nptype == np.uint16):
  *         atype = DATATYPE.unsigned_short             # <<<<<<<<<<<<<<
  *     elif (nptype == np.uint32):
  *         atype = DATATYPE.unsigned_integer
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 841, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 849, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_unsigned_short); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 841, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_unsigned_short); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 849, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "adios.pyx":840
+    /* "adios.pyx":848
  *     elif (nptype == np.uint8):
  *         atype = DATATYPE.unsigned_byte
  *     elif (nptype == np.uint16):             # <<<<<<<<<<<<<<
@@ -12797,40 +13043,40 @@ static PyObject *__pyx_f_5adios_np2adiostype(PyArray_Descr *__pyx_v_nptype, CYTH
     goto __pyx_L3;
   }
 
-  /* "adios.pyx":842
+  /* "adios.pyx":850
  *     elif (nptype == np.uint16):
  *         atype = DATATYPE.unsigned_short
  *     elif (nptype == np.uint32):             # <<<<<<<<<<<<<<
  *         atype = DATATYPE.unsigned_integer
  *     elif (nptype == np.uint64):
  */
-  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 842, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 850, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_uint32); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 842, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_uint32); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 850, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 842, __pyx_L1_error)
+  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 850, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 842, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 850, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   if (__pyx_t_3) {
 
-    /* "adios.pyx":843
+    /* "adios.pyx":851
  *         atype = DATATYPE.unsigned_short
  *     elif (nptype == np.uint32):
  *         atype = DATATYPE.unsigned_integer             # <<<<<<<<<<<<<<
  *     elif (nptype == np.uint64):
  *         atype = DATATYPE.unsigned_long
  */
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 843, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 851, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_unsigned_integer); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 843, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_unsigned_integer); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 851, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_2);
     __pyx_t_2 = 0;
 
-    /* "adios.pyx":842
+    /* "adios.pyx":850
  *     elif (nptype == np.uint16):
  *         atype = DATATYPE.unsigned_short
  *     elif (nptype == np.uint32):             # <<<<<<<<<<<<<<
@@ -12840,40 +13086,40 @@ static PyObject *__pyx_f_5adios_np2adiostype(PyArray_Descr *__pyx_v_nptype, CYTH
     goto __pyx_L3;
   }
 
-  /* "adios.pyx":844
+  /* "adios.pyx":852
  *     elif (nptype == np.uint32):
  *         atype = DATATYPE.unsigned_integer
  *     elif (nptype == np.uint64):             # <<<<<<<<<<<<<<
  *         atype = DATATYPE.unsigned_long
  *     elif (nptype == np.float_):
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 844, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 852, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_uint64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 844, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_uint64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 852, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 844, __pyx_L1_error)
+  __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 852, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 844, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 852, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   if (__pyx_t_3) {
 
-    /* "adios.pyx":845
+    /* "adios.pyx":853
  *         atype = DATATYPE.unsigned_integer
  *     elif (nptype == np.uint64):
  *         atype = DATATYPE.unsigned_long             # <<<<<<<<<<<<<<
  *     elif (nptype == np.float_):
  *         atype = DATATYPE.double
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 845, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 853, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_unsigned_long); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 845, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_unsigned_long); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 853, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "adios.pyx":844
+    /* "adios.pyx":852
  *     elif (nptype == np.uint32):
  *         atype = DATATYPE.unsigned_integer
  *     elif (nptype == np.uint64):             # <<<<<<<<<<<<<<
@@ -12883,40 +13129,40 @@ static PyObject *__pyx_f_5adios_np2adiostype(PyArray_Descr *__pyx_v_nptype, CYTH
     goto __pyx_L3;
   }
 
-  /* "adios.pyx":846
+  /* "adios.pyx":854
  *     elif (nptype == np.uint64):
  *         atype = DATATYPE.unsigned_long
  *     elif (nptype == np.float_):             # <<<<<<<<<<<<<<
  *         atype = DATATYPE.double
  *     elif (nptype == np.float16):
  */
-  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 846, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 854, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 846, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 854, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 846, __pyx_L1_error)
+  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 854, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 846, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 854, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   if (__pyx_t_3) {
 
-    /* "adios.pyx":847
+    /* "adios.pyx":855
  *         atype = DATATYPE.unsigned_long
  *     elif (nptype == np.float_):
  *         atype = DATATYPE.double             # <<<<<<<<<<<<<<
  *     elif (nptype == np.float16):
  *         atype = DATATYPE.real
  */
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 847, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 855, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_double); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 847, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_double); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 855, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_2);
     __pyx_t_2 = 0;
 
-    /* "adios.pyx":846
+    /* "adios.pyx":854
  *     elif (nptype == np.uint64):
  *         atype = DATATYPE.unsigned_long
  *     elif (nptype == np.float_):             # <<<<<<<<<<<<<<
@@ -12926,40 +13172,40 @@ static PyObject *__pyx_f_5adios_np2adiostype(PyArray_Descr *__pyx_v_nptype, CYTH
     goto __pyx_L3;
   }
 
-  /* "adios.pyx":848
+  /* "adios.pyx":856
  *     elif (nptype == np.float_):
  *         atype = DATATYPE.double
  *     elif (nptype == np.float16):             # <<<<<<<<<<<<<<
  *         atype = DATATYPE.real
  *     elif (nptype == np.float32):
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 848, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 856, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_float16); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 848, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_float16); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 856, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 848, __pyx_L1_error)
+  __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 856, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 848, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 856, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   if (__pyx_t_3) {
 
-    /* "adios.pyx":849
+    /* "adios.pyx":857
  *         atype = DATATYPE.double
  *     elif (nptype == np.float16):
  *         atype = DATATYPE.real             # <<<<<<<<<<<<<<
  *     elif (nptype == np.float32):
  *         atype = DATATYPE.real
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 849, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 857, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_real); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 849, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_real); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 857, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "adios.pyx":848
+    /* "adios.pyx":856
  *     elif (nptype == np.float_):
  *         atype = DATATYPE.double
  *     elif (nptype == np.float16):             # <<<<<<<<<<<<<<
@@ -12969,40 +13215,40 @@ static PyObject *__pyx_f_5adios_np2adiostype(PyArray_Descr *__pyx_v_nptype, CYTH
     goto __pyx_L3;
   }
 
-  /* "adios.pyx":850
+  /* "adios.pyx":858
  *     elif (nptype == np.float16):
  *         atype = DATATYPE.real
  *     elif (nptype == np.float32):             # <<<<<<<<<<<<<<
  *         atype = DATATYPE.real
  *     elif (nptype == np.float64):
  */
-  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 850, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 858, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 850, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 858, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 850, __pyx_L1_error)
+  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 858, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 850, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 858, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   if (__pyx_t_3) {
 
-    /* "adios.pyx":851
+    /* "adios.pyx":859
  *         atype = DATATYPE.real
  *     elif (nptype == np.float32):
  *         atype = DATATYPE.real             # <<<<<<<<<<<<<<
  *     elif (nptype == np.float64):
  *         atype = DATATYPE.double
  */
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 851, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 859, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_real); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 851, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_real); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 859, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_2);
     __pyx_t_2 = 0;
 
-    /* "adios.pyx":850
+    /* "adios.pyx":858
  *     elif (nptype == np.float16):
  *         atype = DATATYPE.real
  *     elif (nptype == np.float32):             # <<<<<<<<<<<<<<
@@ -13012,40 +13258,40 @@ static PyObject *__pyx_f_5adios_np2adiostype(PyArray_Descr *__pyx_v_nptype, CYTH
     goto __pyx_L3;
   }
 
-  /* "adios.pyx":852
+  /* "adios.pyx":860
  *     elif (nptype == np.float32):
  *         atype = DATATYPE.real
  *     elif (nptype == np.float64):             # <<<<<<<<<<<<<<
  *         atype = DATATYPE.double
  *     elif (nptype == np.complex_):
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 852, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 860, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_float64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 852, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_float64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 860, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 852, __pyx_L1_error)
+  __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 860, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 852, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 860, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   if (__pyx_t_3) {
 
-    /* "adios.pyx":853
+    /* "adios.pyx":861
  *         atype = DATATYPE.real
  *     elif (nptype == np.float64):
  *         atype = DATATYPE.double             # <<<<<<<<<<<<<<
  *     elif (nptype == np.complex_):
  *         atype = DATATYPE.double_complex
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 853, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 861, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_double); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 853, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_double); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 861, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "adios.pyx":852
+    /* "adios.pyx":860
  *     elif (nptype == np.float32):
  *         atype = DATATYPE.real
  *     elif (nptype == np.float64):             # <<<<<<<<<<<<<<
@@ -13055,40 +13301,40 @@ static PyObject *__pyx_f_5adios_np2adiostype(PyArray_Descr *__pyx_v_nptype, CYTH
     goto __pyx_L3;
   }
 
-  /* "adios.pyx":854
+  /* "adios.pyx":862
  *     elif (nptype == np.float64):
  *         atype = DATATYPE.double
  *     elif (nptype == np.complex_):             # <<<<<<<<<<<<<<
  *         atype = DATATYPE.double_complex
  *     elif (nptype == np.complex64):
  */
-  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 854, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 862, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_complex); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 854, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_complex); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 862, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 854, __pyx_L1_error)
+  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 862, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 854, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 862, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   if (__pyx_t_3) {
 
-    /* "adios.pyx":855
+    /* "adios.pyx":863
  *         atype = DATATYPE.double
  *     elif (nptype == np.complex_):
  *         atype = DATATYPE.double_complex             # <<<<<<<<<<<<<<
  *     elif (nptype == np.complex64):
  *         atype = DATATYPE.complex
  */
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 855, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 863, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_double_complex); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 855, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_double_complex); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 863, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_2);
     __pyx_t_2 = 0;
 
-    /* "adios.pyx":854
+    /* "adios.pyx":862
  *     elif (nptype == np.float64):
  *         atype = DATATYPE.double
  *     elif (nptype == np.complex_):             # <<<<<<<<<<<<<<
@@ -13098,40 +13344,40 @@ static PyObject *__pyx_f_5adios_np2adiostype(PyArray_Descr *__pyx_v_nptype, CYTH
     goto __pyx_L3;
   }
 
-  /* "adios.pyx":856
+  /* "adios.pyx":864
  *     elif (nptype == np.complex_):
  *         atype = DATATYPE.double_complex
  *     elif (nptype == np.complex64):             # <<<<<<<<<<<<<<
  *         atype = DATATYPE.complex
  *     elif (nptype == np.complex128):
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 856, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 864, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_complex64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 856, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_complex64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 864, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 856, __pyx_L1_error)
+  __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 864, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 856, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 864, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   if (__pyx_t_3) {
 
-    /* "adios.pyx":857
+    /* "adios.pyx":865
  *         atype = DATATYPE.double_complex
  *     elif (nptype == np.complex64):
  *         atype = DATATYPE.complex             # <<<<<<<<<<<<<<
  *     elif (nptype == np.complex128):
  *         atype = DATATYPE.double_complex
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 857, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 865, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_complex_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 857, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_complex_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 865, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "adios.pyx":856
+    /* "adios.pyx":864
  *     elif (nptype == np.complex_):
  *         atype = DATATYPE.double_complex
  *     elif (nptype == np.complex64):             # <<<<<<<<<<<<<<
@@ -13141,40 +13387,40 @@ static PyObject *__pyx_f_5adios_np2adiostype(PyArray_Descr *__pyx_v_nptype, CYTH
     goto __pyx_L3;
   }
 
-  /* "adios.pyx":858
+  /* "adios.pyx":866
  *     elif (nptype == np.complex64):
  *         atype = DATATYPE.complex
  *     elif (nptype == np.complex128):             # <<<<<<<<<<<<<<
  *         atype = DATATYPE.double_complex
  *     elif (nptype.char in ('S', 'U')):
  */
-  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 858, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 866, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_complex128); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 858, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_complex128); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 866, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 858, __pyx_L1_error)
+  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 866, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 858, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 866, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   if (__pyx_t_3) {
 
-    /* "adios.pyx":859
+    /* "adios.pyx":867
  *         atype = DATATYPE.complex
  *     elif (nptype == np.complex128):
  *         atype = DATATYPE.double_complex             # <<<<<<<<<<<<<<
  *     elif (nptype.char in ('S', 'U')):
  *         atype = DATATYPE.string
  */
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 859, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 867, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_double_complex); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 859, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_double_complex); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 867, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_2);
     __pyx_t_2 = 0;
 
-    /* "adios.pyx":858
+    /* "adios.pyx":866
  *     elif (nptype == np.complex64):
  *         atype = DATATYPE.complex
  *     elif (nptype == np.complex128):             # <<<<<<<<<<<<<<
@@ -13184,44 +13430,44 @@ static PyObject *__pyx_f_5adios_np2adiostype(PyArray_Descr *__pyx_v_nptype, CYTH
     goto __pyx_L3;
   }
 
-  /* "adios.pyx":860
+  /* "adios.pyx":868
  *     elif (nptype == np.complex128):
  *         atype = DATATYPE.double_complex
  *     elif (nptype.char in ('S', 'U')):             # <<<<<<<<<<<<<<
  *         atype = DATATYPE.string
  *     else:
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_nptype), __pyx_n_s_char); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 860, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_nptype), __pyx_n_s_char); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 868, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_4 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_n_s_S, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 860, __pyx_L1_error)
+  __pyx_t_4 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_n_s_S, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 868, __pyx_L1_error)
   if (!__pyx_t_4) {
   } else {
     __pyx_t_3 = __pyx_t_4;
     goto __pyx_L4_bool_binop_done;
   }
-  __pyx_t_4 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_n_s_U, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 860, __pyx_L1_error)
+  __pyx_t_4 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_n_s_U, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 868, __pyx_L1_error)
   __pyx_t_3 = __pyx_t_4;
   __pyx_L4_bool_binop_done:;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "adios.pyx":861
+    /* "adios.pyx":869
  *         atype = DATATYPE.double_complex
  *     elif (nptype.char in ('S', 'U')):
  *         atype = DATATYPE.string             # <<<<<<<<<<<<<<
  *     else:
  *         atype = DATATYPE.unknown
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 861, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 869, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_string); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 861, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_string); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 869, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "adios.pyx":860
+    /* "adios.pyx":868
  *     elif (nptype == np.complex128):
  *         atype = DATATYPE.double_complex
  *     elif (nptype.char in ('S', 'U')):             # <<<<<<<<<<<<<<
@@ -13231,7 +13477,7 @@ static PyObject *__pyx_f_5adios_np2adiostype(PyArray_Descr *__pyx_v_nptype, CYTH
     goto __pyx_L3;
   }
 
-  /* "adios.pyx":863
+  /* "adios.pyx":871
  *         atype = DATATYPE.string
  *     else:
  *         atype = DATATYPE.unknown             # <<<<<<<<<<<<<<
@@ -13239,9 +13485,9 @@ static PyObject *__pyx_f_5adios_np2adiostype(PyArray_Descr *__pyx_v_nptype, CYTH
  *     return atype
  */
   /*else*/ {
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 863, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 871, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_unknown); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 863, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_unknown); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 871, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_2);
@@ -13249,7 +13495,7 @@ static PyObject *__pyx_f_5adios_np2adiostype(PyArray_Descr *__pyx_v_nptype, CYTH
   }
   __pyx_L3:;
 
-  /* "adios.pyx":865
+  /* "adios.pyx":873
  *         atype = DATATYPE.unknown
  * 
  *     return atype             # <<<<<<<<<<<<<<
@@ -13261,7 +13507,7 @@ static PyObject *__pyx_f_5adios_np2adiostype(PyArray_Descr *__pyx_v_nptype, CYTH
   __pyx_r = __pyx_v_atype;
   goto __pyx_L0;
 
-  /* "adios.pyx":822
+  /* "adios.pyx":830
  *     return method
  * 
  * cpdef np2adiostype(np.dtype nptype):             # <<<<<<<<<<<<<<
@@ -13289,7 +13535,7 @@ static PyObject *__pyx_pw_5adios_85np2adiostype(PyObject *__pyx_self, PyObject *
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("np2adiostype (wrapper)", 0);
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_nptype), __pyx_ptype_5numpy_dtype, 1, "nptype", 0))) __PYX_ERR(0, 822, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_nptype), __pyx_ptype_5numpy_dtype, 1, "nptype", 0))) __PYX_ERR(0, 830, __pyx_L1_error)
   __pyx_r = __pyx_pf_5adios_84np2adiostype(__pyx_self, ((PyArray_Descr *)__pyx_v_nptype));
 
   /* function exit code */
@@ -13307,7 +13553,7 @@ static PyObject *__pyx_pf_5adios_84np2adiostype(CYTHON_UNUSED PyObject *__pyx_se
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("np2adiostype", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_5adios_np2adiostype(__pyx_v_nptype, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 822, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_5adios_np2adiostype(__pyx_v_nptype, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 830, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -13324,7 +13570,7 @@ static PyObject *__pyx_pf_5adios_84np2adiostype(CYTHON_UNUSED PyObject *__pyx_se
   return __pyx_r;
 }
 
-/* "adios.pyx":867
+/* "adios.pyx":875
  *     return atype
  * 
  * cpdef str adiostype2string (ADIOS_DATATYPES type):             # <<<<<<<<<<<<<<
@@ -13340,7 +13586,7 @@ static PyObject *__pyx_f_5adios_adiostype2string(ADIOS_DATATYPES __pyx_v_type, C
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("adiostype2string", 0);
 
-  /* "adios.pyx":868
+  /* "adios.pyx":876
  * 
  * cpdef str adiostype2string (ADIOS_DATATYPES type):
  *     return str(adios_type_to_string(<ADIOS_DATATYPES> type))             # <<<<<<<<<<<<<<
@@ -13348,22 +13594,22 @@ static PyObject *__pyx_f_5adios_adiostype2string(ADIOS_DATATYPES __pyx_v_type, C
  * ## ====================
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyBytes_FromString(adios_type_to_string(((ADIOS_DATATYPES)__pyx_v_type))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 868, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyBytes_FromString(adios_type_to_string(((ADIOS_DATATYPES)__pyx_v_type))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 876, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 868, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 876, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 868, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 876, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (!(likely(PyString_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 868, __pyx_L1_error)
+  if (!(likely(PyString_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 876, __pyx_L1_error)
   __pyx_r = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":867
+  /* "adios.pyx":875
  *     return atype
  * 
  * cpdef str adiostype2string (ADIOS_DATATYPES type):             # <<<<<<<<<<<<<<
@@ -13392,7 +13638,7 @@ static PyObject *__pyx_pw_5adios_87adiostype2string(PyObject *__pyx_self, PyObje
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("adiostype2string (wrapper)", 0);
   assert(__pyx_arg_type); {
-    __pyx_v_type = ((ADIOS_DATATYPES)__Pyx_PyInt_As_ADIOS_DATATYPES(__pyx_arg_type)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 867, __pyx_L3_error)
+    __pyx_v_type = ((ADIOS_DATATYPES)__Pyx_PyInt_As_ADIOS_DATATYPES(__pyx_arg_type)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 875, __pyx_L3_error)
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L3_error:;
@@ -13413,7 +13659,7 @@ static PyObject *__pyx_pf_5adios_86adiostype2string(CYTHON_UNUSED PyObject *__py
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("adiostype2string", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_5adios_adiostype2string(__pyx_v_type, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 867, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_5adios_adiostype2string(__pyx_v_type, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 875, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -13430,7 +13676,7 @@ static PyObject *__pyx_pf_5adios_86adiostype2string(CYTHON_UNUSED PyObject *__py
   return __pyx_r;
 }
 
-/* "adios.pyx":875
+/* "adios.pyx":883
  * 
  * """ Call adios_read_init_method """
  * cpdef int read_init(str method_name = "BP",             # <<<<<<<<<<<<<<
@@ -13462,7 +13708,7 @@ static int __pyx_f_5adios_read_init(CYTHON_UNUSED int __pyx_skip_dispatch, struc
     }
   }
 
-  /* "adios.pyx":879
+  /* "adios.pyx":887
  *                     str parameters = ""):
  *     global read_init_comm
  *     read_init_comm = comm             # <<<<<<<<<<<<<<
@@ -13471,34 +13717,34 @@ static int __pyx_f_5adios_read_init(CYTHON_UNUSED int __pyx_skip_dispatch, struc
  */
   __pyx_v_5adios_read_init_comm = __pyx_v_comm;
 
-  /* "adios.pyx":880
+  /* "adios.pyx":888
  *     global read_init_comm
  *     read_init_comm = comm
  *     cdef method = str2adiosreadmethod(method_name)             # <<<<<<<<<<<<<<
  *     return adios_read_init_method (method, read_init_comm, s2b(parameters))
  * 
  */
-  __pyx_t_1 = __Pyx_PyInt_From_ADIOS_READ_METHOD(__pyx_f_5adios_str2adiosreadmethod(__pyx_v_method_name)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 880, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_ADIOS_READ_METHOD(__pyx_f_5adios_str2adiosreadmethod(__pyx_v_method_name)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 888, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_method = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "adios.pyx":881
+  /* "adios.pyx":889
  *     read_init_comm = comm
  *     cdef method = str2adiosreadmethod(method_name)
  *     return adios_read_init_method (method, read_init_comm, s2b(parameters))             # <<<<<<<<<<<<<<
  * 
  * 
  */
-  __pyx_t_2 = ((ADIOS_READ_METHOD)__Pyx_PyInt_As_ADIOS_READ_METHOD(__pyx_v_method)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 881, __pyx_L1_error)
-  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_parameters, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 881, __pyx_L1_error)
+  __pyx_t_2 = ((ADIOS_READ_METHOD)__Pyx_PyInt_As_ADIOS_READ_METHOD(__pyx_v_method)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 889, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_parameters, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 889, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_3) && PyErr_Occurred())) __PYX_ERR(0, 881, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_3) && PyErr_Occurred())) __PYX_ERR(0, 889, __pyx_L1_error)
   __pyx_r = adios_read_init_method(__pyx_t_2, __pyx_v_5adios_read_init_comm, __pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":875
+  /* "adios.pyx":883
  * 
  * """ Call adios_read_init_method """
  * cpdef int read_init(str method_name = "BP",             # <<<<<<<<<<<<<<
@@ -13561,7 +13807,7 @@ static PyObject *__pyx_pw_5adios_89read_init(PyObject *__pyx_self, PyObject *__p
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "read_init") < 0)) __PYX_ERR(0, 875, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "read_init") < 0)) __PYX_ERR(0, 883, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -13574,7 +13820,7 @@ static PyObject *__pyx_pw_5adios_89read_init(PyObject *__pyx_self, PyObject *__p
     }
     __pyx_v_method_name = ((PyObject*)values[0]);
     if (values[1]) {
-      __pyx_v_comm = __Pyx_PyInt_As_MPI_Comm(values[1]); if (unlikely((__pyx_v_comm == (MPI_Comm)-1) && PyErr_Occurred())) __PYX_ERR(0, 876, __pyx_L3_error)
+      __pyx_v_comm = __Pyx_PyInt_As_MPI_Comm(values[1]); if (unlikely((__pyx_v_comm == ((MPI_Comm)-1)) && PyErr_Occurred())) __PYX_ERR(0, 884, __pyx_L3_error)
     } else {
       __pyx_v_comm = __pyx_k__12;
     }
@@ -13582,14 +13828,14 @@ static PyObject *__pyx_pw_5adios_89read_init(PyObject *__pyx_self, PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("read_init", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 875, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("read_init", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 883, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.read_init", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_method_name), (&PyString_Type), 1, "method_name", 1))) __PYX_ERR(0, 875, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_parameters), (&PyString_Type), 1, "parameters", 1))) __PYX_ERR(0, 877, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_method_name), (&PyString_Type), 1, "method_name", 1))) __PYX_ERR(0, 883, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_parameters), (&PyString_Type), 1, "parameters", 1))) __PYX_ERR(0, 885, __pyx_L1_error)
   __pyx_r = __pyx_pf_5adios_88read_init(__pyx_self, __pyx_v_method_name, __pyx_v_comm, __pyx_v_parameters);
 
   /* function exit code */
@@ -13614,7 +13860,7 @@ static PyObject *__pyx_pf_5adios_88read_init(CYTHON_UNUSED PyObject *__pyx_self,
   __pyx_t_2.comm = __pyx_v_comm;
   __pyx_t_2.parameters = __pyx_v_parameters;
   __pyx_t_1 = __pyx_f_5adios_read_init(0, &__pyx_t_2); 
-  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 875, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 883, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
@@ -13631,7 +13877,7 @@ static PyObject *__pyx_pf_5adios_88read_init(CYTHON_UNUSED PyObject *__pyx_self,
   return __pyx_r;
 }
 
-/* "adios.pyx":885
+/* "adios.pyx":893
  * 
  * """ Call adios_read_finalize_method """
  * cpdef int read_finalize(str method_name = "BP"):             # <<<<<<<<<<<<<<
@@ -13654,34 +13900,34 @@ static int __pyx_f_5adios_read_finalize(CYTHON_UNUSED int __pyx_skip_dispatch, s
     }
   }
 
-  /* "adios.pyx":886
+  /* "adios.pyx":894
  * """ Call adios_read_finalize_method """
  * cpdef int read_finalize(str method_name = "BP"):
  *     cdef method = str2adiosreadmethod(method_name)             # <<<<<<<<<<<<<<
  *     return adios_read_finalize_method (s2b(method))
  * 
  */
-  __pyx_t_1 = __Pyx_PyInt_From_ADIOS_READ_METHOD(__pyx_f_5adios_str2adiosreadmethod(__pyx_v_method_name)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 886, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_ADIOS_READ_METHOD(__pyx_f_5adios_str2adiosreadmethod(__pyx_v_method_name)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 894, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_method = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "adios.pyx":887
+  /* "adios.pyx":895
  * cpdef int read_finalize(str method_name = "BP"):
  *     cdef method = str2adiosreadmethod(method_name)
  *     return adios_read_finalize_method (s2b(method))             # <<<<<<<<<<<<<<
  * 
  * ## dict for handling '/' prefix
  */
-  if (!(likely(PyString_CheckExact(__pyx_v_method))||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_v_method)->tp_name), 0))) __PYX_ERR(0, 887, __pyx_L1_error)
-  __pyx_t_1 = __pyx_f_5adios_s2b(((PyObject*)__pyx_v_method), 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 887, __pyx_L1_error)
+  if (!(likely(PyString_CheckExact(__pyx_v_method))||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_v_method)->tp_name), 0))) __PYX_ERR(0, 895, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_5adios_s2b(((PyObject*)__pyx_v_method), 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 895, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = ((ADIOS_READ_METHOD)__Pyx_PyInt_As_ADIOS_READ_METHOD(__pyx_t_1)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 887, __pyx_L1_error)
+  __pyx_t_2 = ((ADIOS_READ_METHOD)__Pyx_PyInt_As_ADIOS_READ_METHOD(__pyx_t_1)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 895, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = adios_read_finalize_method(__pyx_t_2);
   goto __pyx_L0;
 
-  /* "adios.pyx":885
+  /* "adios.pyx":893
  * 
  * """ Call adios_read_finalize_method """
  * cpdef int read_finalize(str method_name = "BP"):             # <<<<<<<<<<<<<<
@@ -13729,7 +13975,7 @@ static PyObject *__pyx_pw_5adios_91read_finalize(PyObject *__pyx_self, PyObject
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "read_finalize") < 0)) __PYX_ERR(0, 885, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "read_finalize") < 0)) __PYX_ERR(0, 893, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -13742,13 +13988,13 @@ static PyObject *__pyx_pw_5adios_91read_finalize(PyObject *__pyx_self, PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("read_finalize", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 885, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("read_finalize", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 893, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.read_finalize", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_method_name), (&PyString_Type), 1, "method_name", 1))) __PYX_ERR(0, 885, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_method_name), (&PyString_Type), 1, "method_name", 1))) __PYX_ERR(0, 893, __pyx_L1_error)
   __pyx_r = __pyx_pf_5adios_90read_finalize(__pyx_self, __pyx_v_method_name);
 
   /* function exit code */
@@ -13771,7 +14017,7 @@ static PyObject *__pyx_pf_5adios_90read_finalize(CYTHON_UNUSED PyObject *__pyx_s
   __pyx_t_2.__pyx_n = 1;
   __pyx_t_2.method_name = __pyx_v_method_name;
   __pyx_t_1 = __pyx_f_5adios_read_finalize(0, &__pyx_t_2); 
-  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 885, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 893, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
@@ -13788,7 +14034,7 @@ static PyObject *__pyx_pf_5adios_90read_finalize(CYTHON_UNUSED PyObject *__pyx_s
   return __pyx_r;
 }
 
-/* "adios.pyx":891
+/* "adios.pyx":899
  * ## dict for handling '/' prefix
  * cdef class softdict(dict):
  *     def __getitem__(self, varname):             # <<<<<<<<<<<<<<
@@ -13823,7 +14069,7 @@ static PyObject *__pyx_pf_5adios_8softdict___getitem__(struct __pyx_obj_5adios_s
   __Pyx_RefNannySetupContext("__getitem__", 0);
   __Pyx_INCREF(__pyx_v_varname);
 
-  /* "adios.pyx":892
+  /* "adios.pyx":900
  * cdef class softdict(dict):
  *     def __getitem__(self, varname):
  *         if not isinstance(varname, tuple):             # <<<<<<<<<<<<<<
@@ -13834,14 +14080,14 @@ static PyObject *__pyx_pf_5adios_8softdict___getitem__(struct __pyx_obj_5adios_s
   __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0);
   if (__pyx_t_2) {
 
-    /* "adios.pyx":893
+    /* "adios.pyx":901
  *     def __getitem__(self, varname):
  *         if not isinstance(varname, tuple):
  *             varname = (varname,)             # <<<<<<<<<<<<<<
  * 
  *         if len(varname) > 1:
  */
-    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 893, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 901, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_varname);
     __Pyx_GIVEREF(__pyx_v_varname);
@@ -13849,7 +14095,7 @@ static PyObject *__pyx_pf_5adios_8softdict___getitem__(struct __pyx_obj_5adios_s
     __Pyx_DECREF_SET(__pyx_v_varname, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "adios.pyx":892
+    /* "adios.pyx":900
  * cdef class softdict(dict):
  *     def __getitem__(self, varname):
  *         if not isinstance(varname, tuple):             # <<<<<<<<<<<<<<
@@ -13858,37 +14104,37 @@ static PyObject *__pyx_pf_5adios_8softdict___getitem__(struct __pyx_obj_5adios_s
  */
   }
 
-  /* "adios.pyx":895
+  /* "adios.pyx":903
  *             varname = (varname,)
  * 
  *         if len(varname) > 1:             # <<<<<<<<<<<<<<
  *             raise KeyError(varname)
  * 
  */
-  __pyx_t_4 = PyObject_Length(__pyx_v_varname); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 895, __pyx_L1_error)
+  __pyx_t_4 = PyObject_Length(__pyx_v_varname); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 903, __pyx_L1_error)
   __pyx_t_2 = ((__pyx_t_4 > 1) != 0);
   if (__pyx_t_2) {
 
-    /* "adios.pyx":896
+    /* "adios.pyx":904
  * 
  *         if len(varname) > 1:
  *             raise KeyError(varname)             # <<<<<<<<<<<<<<
  * 
  *         for key_ in varname:
  */
-    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 896, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 904, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_varname);
     __Pyx_GIVEREF(__pyx_v_varname);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_varname);
-    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_KeyError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 896, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_KeyError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 904, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_Raise(__pyx_t_5, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    __PYX_ERR(0, 896, __pyx_L1_error)
+    __PYX_ERR(0, 904, __pyx_L1_error)
 
-    /* "adios.pyx":895
+    /* "adios.pyx":903
  *             varname = (varname,)
  * 
  *         if len(varname) > 1:             # <<<<<<<<<<<<<<
@@ -13897,7 +14143,7 @@ static PyObject *__pyx_pf_5adios_8softdict___getitem__(struct __pyx_obj_5adios_s
  */
   }
 
-  /* "adios.pyx":898
+  /* "adios.pyx":906
  *             raise KeyError(varname)
  * 
  *         for key_ in varname:             # <<<<<<<<<<<<<<
@@ -13908,26 +14154,26 @@ static PyObject *__pyx_pf_5adios_8softdict___getitem__(struct __pyx_obj_5adios_s
     __pyx_t_5 = __pyx_v_varname; __Pyx_INCREF(__pyx_t_5); __pyx_t_4 = 0;
     __pyx_t_6 = NULL;
   } else {
-    __pyx_t_4 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_v_varname); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 898, __pyx_L1_error)
+    __pyx_t_4 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_v_varname); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 906, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 898, __pyx_L1_error)
+    __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 906, __pyx_L1_error)
   }
   for (;;) {
     if (likely(!__pyx_t_6)) {
       if (likely(PyList_CheckExact(__pyx_t_5))) {
         if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_5)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_3 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 898, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_3 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 906, __pyx_L1_error)
         #else
-        __pyx_t_3 = PySequence_ITEM(__pyx_t_5, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 898, __pyx_L1_error)
+        __pyx_t_3 = PySequence_ITEM(__pyx_t_5, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 906, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
         #endif
       } else {
         if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_5)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 898, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 906, __pyx_L1_error)
         #else
-        __pyx_t_3 = PySequence_ITEM(__pyx_t_5, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 898, __pyx_L1_error)
+        __pyx_t_3 = PySequence_ITEM(__pyx_t_5, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 906, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
         #endif
       }
@@ -13937,7 +14183,7 @@ static PyObject *__pyx_pf_5adios_8softdict___getitem__(struct __pyx_obj_5adios_s
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
           if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-          else __PYX_ERR(0, 898, __pyx_L1_error)
+          else __PYX_ERR(0, 906, __pyx_L1_error)
         }
         break;
       }
@@ -13946,7 +14192,7 @@ static PyObject *__pyx_pf_5adios_8softdict___getitem__(struct __pyx_obj_5adios_s
     __Pyx_XDECREF_SET(__pyx_v_key_, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "adios.pyx":899
+    /* "adios.pyx":907
  * 
  *         for key_ in varname:
  *             if not isinstance(key_, str):             # <<<<<<<<<<<<<<
@@ -13957,20 +14203,20 @@ static PyObject *__pyx_pf_5adios_8softdict___getitem__(struct __pyx_obj_5adios_s
     __pyx_t_1 = ((!(__pyx_t_2 != 0)) != 0);
     if (__pyx_t_1) {
 
-      /* "adios.pyx":900
+      /* "adios.pyx":908
  *         for key_ in varname:
  *             if not isinstance(key_, str):
  *                 raise TypeError("Unhashable type")             # <<<<<<<<<<<<<<
  * 
  *             if key_.startswith('/'):
  */
-      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__13, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 900, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__13, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 908, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_Raise(__pyx_t_3, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      __PYX_ERR(0, 900, __pyx_L1_error)
+      __PYX_ERR(0, 908, __pyx_L1_error)
 
-      /* "adios.pyx":899
+      /* "adios.pyx":907
  * 
  *         for key_ in varname:
  *             if not isinstance(key_, str):             # <<<<<<<<<<<<<<
@@ -13979,35 +14225,35 @@ static PyObject *__pyx_pf_5adios_8softdict___getitem__(struct __pyx_obj_5adios_s
  */
     }
 
-    /* "adios.pyx":902
+    /* "adios.pyx":910
  *                 raise TypeError("Unhashable type")
  * 
  *             if key_.startswith('/'):             # <<<<<<<<<<<<<<
  *                 key_ = key_[1:]
  * 
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_key_, __pyx_n_s_startswith); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 902, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_key_, __pyx_n_s_startswith); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 910, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__14, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 902, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__14, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 910, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 902, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 910, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     if (__pyx_t_1) {
 
-      /* "adios.pyx":903
+      /* "adios.pyx":911
  * 
  *             if key_.startswith('/'):
  *                 key_ = key_[1:]             # <<<<<<<<<<<<<<
  * 
  *             if key_ in dict.keys(self):
  */
-      __pyx_t_7 = __Pyx_PyObject_GetSlice(__pyx_v_key_, 1, 0, NULL, NULL, &__pyx_slice__15, 1, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 903, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetSlice(__pyx_v_key_, 1, 0, NULL, NULL, &__pyx_slice__15, 1, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 911, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF_SET(__pyx_v_key_, __pyx_t_7);
       __pyx_t_7 = 0;
 
-      /* "adios.pyx":902
+      /* "adios.pyx":910
  *                 raise TypeError("Unhashable type")
  * 
  *             if key_.startswith('/'):             # <<<<<<<<<<<<<<
@@ -14016,7 +14262,7 @@ static PyObject *__pyx_pf_5adios_8softdict___getitem__(struct __pyx_obj_5adios_s
  */
     }
 
-    /* "adios.pyx":905
+    /* "adios.pyx":913
  *                 key_ = key_[1:]
  * 
  *             if key_ in dict.keys(self):             # <<<<<<<<<<<<<<
@@ -14025,16 +14271,16 @@ static PyObject *__pyx_pf_5adios_8softdict___getitem__(struct __pyx_obj_5adios_s
  */
     if (unlikely(((PyObject *)__pyx_v_self) == Py_None)) {
       PyErr_Format(PyExc_TypeError, "descriptor '%s' requires a '%s' object but received a 'NoneType'", "keys", "dict");
-      __PYX_ERR(0, 905, __pyx_L1_error)
+      __PYX_ERR(0, 913, __pyx_L1_error)
     }
-    __pyx_t_7 = __Pyx_PyDict_Keys(((PyObject*)__pyx_v_self)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 905, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyDict_Keys(((PyObject*)__pyx_v_self)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 913, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
-    __pyx_t_1 = (__Pyx_PySequence_ContainsTF(__pyx_v_key_, __pyx_t_7, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 905, __pyx_L1_error)
+    __pyx_t_1 = (__Pyx_PySequence_ContainsTF(__pyx_v_key_, __pyx_t_7, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 913, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
 
-      /* "adios.pyx":906
+      /* "adios.pyx":914
  * 
  *             if key_ in dict.keys(self):
  *                 return dict.get(self, key_)             # <<<<<<<<<<<<<<
@@ -14044,16 +14290,16 @@ static PyObject *__pyx_pf_5adios_8softdict___getitem__(struct __pyx_obj_5adios_s
       __Pyx_XDECREF(__pyx_r);
       if (unlikely(((PyObject *)__pyx_v_self) == Py_None)) {
         PyErr_Format(PyExc_TypeError, "descriptor '%s' requires a '%s' object but received a 'NoneType'", "get", "dict");
-        __PYX_ERR(0, 906, __pyx_L1_error)
+        __PYX_ERR(0, 914, __pyx_L1_error)
       }
-      __pyx_t_7 = __Pyx_PyDict_GetItemDefault(((PyObject *)__pyx_v_self), __pyx_v_key_, Py_None); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 906, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyDict_GetItemDefault(((PyObject *)__pyx_v_self), __pyx_v_key_, Py_None); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 914, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __pyx_r = __pyx_t_7;
       __pyx_t_7 = 0;
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       goto __pyx_L0;
 
-      /* "adios.pyx":905
+      /* "adios.pyx":913
  *                 key_ = key_[1:]
  * 
  *             if key_ in dict.keys(self):             # <<<<<<<<<<<<<<
@@ -14062,28 +14308,28 @@ static PyObject *__pyx_pf_5adios_8softdict___getitem__(struct __pyx_obj_5adios_s
  */
     }
 
-    /* "adios.pyx":908
+    /* "adios.pyx":916
  *                 return dict.get(self, key_)
  * 
  *             if '/'+key_ in dict.keys(self):             # <<<<<<<<<<<<<<
  *                 return dict.get(self, '/'+key_)
  * 
  */
-    __pyx_t_7 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 908, __pyx_L1_error)
+    __pyx_t_7 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 916, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     if (unlikely(((PyObject *)__pyx_v_self) == Py_None)) {
       PyErr_Format(PyExc_TypeError, "descriptor '%s' requires a '%s' object but received a 'NoneType'", "keys", "dict");
-      __PYX_ERR(0, 908, __pyx_L1_error)
+      __PYX_ERR(0, 916, __pyx_L1_error)
     }
-    __pyx_t_3 = __Pyx_PyDict_Keys(((PyObject*)__pyx_v_self)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 908, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyDict_Keys(((PyObject*)__pyx_v_self)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 916, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_7, __pyx_t_3, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 908, __pyx_L1_error)
+    __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_7, __pyx_t_3, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 916, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __pyx_t_1 = (__pyx_t_2 != 0);
     if (__pyx_t_1) {
 
-      /* "adios.pyx":909
+      /* "adios.pyx":917
  * 
  *             if '/'+key_ in dict.keys(self):
  *                 return dict.get(self, '/'+key_)             # <<<<<<<<<<<<<<
@@ -14093,11 +14339,11 @@ static PyObject *__pyx_pf_5adios_8softdict___getitem__(struct __pyx_obj_5adios_s
       __Pyx_XDECREF(__pyx_r);
       if (unlikely(((PyObject *)__pyx_v_self) == Py_None)) {
         PyErr_Format(PyExc_TypeError, "descriptor '%s' requires a '%s' object but received a 'NoneType'", "get", "dict");
-        __PYX_ERR(0, 909, __pyx_L1_error)
+        __PYX_ERR(0, 917, __pyx_L1_error)
       }
-      __pyx_t_3 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 909, __pyx_L1_error)
+      __pyx_t_3 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 917, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_7 = __Pyx_PyDict_GetItemDefault(((PyObject *)__pyx_v_self), __pyx_t_3, Py_None); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 909, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyDict_GetItemDefault(((PyObject *)__pyx_v_self), __pyx_t_3, Py_None); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 917, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_r = __pyx_t_7;
@@ -14105,7 +14351,7 @@ static PyObject *__pyx_pf_5adios_8softdict___getitem__(struct __pyx_obj_5adios_s
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       goto __pyx_L0;
 
-      /* "adios.pyx":908
+      /* "adios.pyx":916
  *                 return dict.get(self, key_)
  * 
  *             if '/'+key_ in dict.keys(self):             # <<<<<<<<<<<<<<
@@ -14114,7 +14360,7 @@ static PyObject *__pyx_pf_5adios_8softdict___getitem__(struct __pyx_obj_5adios_s
  */
     }
 
-    /* "adios.pyx":898
+    /* "adios.pyx":906
  *             raise KeyError(varname)
  * 
  *         for key_ in varname:             # <<<<<<<<<<<<<<
@@ -14124,27 +14370,27 @@ static PyObject *__pyx_pf_5adios_8softdict___getitem__(struct __pyx_obj_5adios_s
   }
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "adios.pyx":911
+  /* "adios.pyx":919
  *                 return dict.get(self, '/'+key_)
  * 
  *         raise KeyError(key_)             # <<<<<<<<<<<<<<
  * 
  * ## Python class for ADIOS_FILE structure
  */
-  if (unlikely(!__pyx_v_key_)) { __Pyx_RaiseUnboundLocalError("key_"); __PYX_ERR(0, 911, __pyx_L1_error) }
-  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 911, __pyx_L1_error)
+  if (unlikely(!__pyx_v_key_)) { __Pyx_RaiseUnboundLocalError("key_"); __PYX_ERR(0, 919, __pyx_L1_error) }
+  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 919, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_INCREF(__pyx_v_key_);
   __Pyx_GIVEREF(__pyx_v_key_);
   PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_key_);
-  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_builtin_KeyError, __pyx_t_5, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 911, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_builtin_KeyError, __pyx_t_5, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 919, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_Raise(__pyx_t_7, 0, 0, 0);
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __PYX_ERR(0, 911, __pyx_L1_error)
+  __PYX_ERR(0, 919, __pyx_L1_error)
 
-  /* "adios.pyx":891
+  /* "adios.pyx":899
  * ## dict for handling '/' prefix
  * cdef class softdict(dict):
  *     def __getitem__(self, varname):             # <<<<<<<<<<<<<<
@@ -14167,7 +14413,7 @@ static PyObject *__pyx_pf_5adios_8softdict___getitem__(struct __pyx_obj_5adios_s
   return __pyx_r;
 }
 
-/* "adios.pyx":952
+/* "adios.pyx":960
  *     property name:
  *         """ The filename (or stream name) associated with. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -14193,7 +14439,7 @@ static PyObject *__pyx_pf_5adios_4file_4name___get__(struct __pyx_obj_5adios_fil
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios.pyx":953
+  /* "adios.pyx":961
  *         """ The filename (or stream name) associated with. """
  *         def __get__(self):
  *             return self.name             # <<<<<<<<<<<<<<
@@ -14205,7 +14451,7 @@ static PyObject *__pyx_pf_5adios_4file_4name___get__(struct __pyx_obj_5adios_fil
   __pyx_r = __pyx_v_self->name;
   goto __pyx_L0;
 
-  /* "adios.pyx":952
+  /* "adios.pyx":960
  *     property name:
  *         """ The filename (or stream name) associated with. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -14220,7 +14466,7 @@ static PyObject *__pyx_pf_5adios_4file_4name___get__(struct __pyx_obj_5adios_fil
   return __pyx_r;
 }
 
-/* "adios.pyx":957
+/* "adios.pyx":965
  *     property nvars:
  *         """ The number of variables. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -14247,7 +14493,7 @@ static PyObject *__pyx_pf_5adios_4file_5nvars___get__(struct __pyx_obj_5adios_fi
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios.pyx":958
+  /* "adios.pyx":966
  *         """ The number of variables. """
  *         def __get__(self):
  *             return self.nvars             # <<<<<<<<<<<<<<
@@ -14255,13 +14501,13 @@ static PyObject *__pyx_pf_5adios_4file_5nvars___get__(struct __pyx_obj_5adios_fi
  *     property nattrs:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->nvars); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 958, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->nvars); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 966, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":957
+  /* "adios.pyx":965
  *     property nvars:
  *         """ The number of variables. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -14280,7 +14526,7 @@ static PyObject *__pyx_pf_5adios_4file_5nvars___get__(struct __pyx_obj_5adios_fi
   return __pyx_r;
 }
 
-/* "adios.pyx":962
+/* "adios.pyx":970
  *     property nattrs:
  *         """ The number of attributes. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -14307,7 +14553,7 @@ static PyObject *__pyx_pf_5adios_4file_6nattrs___get__(struct __pyx_obj_5adios_f
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios.pyx":963
+  /* "adios.pyx":971
  *         """ The number of attributes. """
  *         def __get__(self):
  *             return self.nattrs             # <<<<<<<<<<<<<<
@@ -14315,13 +14561,13 @@ static PyObject *__pyx_pf_5adios_4file_6nattrs___get__(struct __pyx_obj_5adios_f
  *     property current_step:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->nattrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 963, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->nattrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 971, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":962
+  /* "adios.pyx":970
  *     property nattrs:
  *         """ The number of attributes. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -14340,7 +14586,7 @@ static PyObject *__pyx_pf_5adios_4file_6nattrs___get__(struct __pyx_obj_5adios_f
   return __pyx_r;
 }
 
-/* "adios.pyx":967
+/* "adios.pyx":975
  *     property current_step:
  *         """ The current timestep index. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -14367,7 +14613,7 @@ static PyObject *__pyx_pf_5adios_4file_12current_step___get__(struct __pyx_obj_5
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios.pyx":968
+  /* "adios.pyx":976
  *         """ The current timestep index. """
  *         def __get__(self):
  *             return self.current_step             # <<<<<<<<<<<<<<
@@ -14375,13 +14621,13 @@ static PyObject *__pyx_pf_5adios_4file_12current_step___get__(struct __pyx_obj_5
  *     property last_step:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->current_step); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 968, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->current_step); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 976, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":967
+  /* "adios.pyx":975
  *     property current_step:
  *         """ The current timestep index. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -14400,7 +14646,7 @@ static PyObject *__pyx_pf_5adios_4file_12current_step___get__(struct __pyx_obj_5
   return __pyx_r;
 }
 
-/* "adios.pyx":972
+/* "adios.pyx":980
  *     property last_step:
  *         """ The last timestep index. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -14427,7 +14673,7 @@ static PyObject *__pyx_pf_5adios_4file_9last_step___get__(struct __pyx_obj_5adio
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios.pyx":973
+  /* "adios.pyx":981
  *         """ The last timestep index. """
  *         def __get__(self):
  *             return self.last_step             # <<<<<<<<<<<<<<
@@ -14435,13 +14681,13 @@ static PyObject *__pyx_pf_5adios_4file_9last_step___get__(struct __pyx_obj_5adio
  *     property endianness:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->last_step); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 973, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->last_step); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 981, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":972
+  /* "adios.pyx":980
  *     property last_step:
  *         """ The last timestep index. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -14460,7 +14706,7 @@ static PyObject *__pyx_pf_5adios_4file_9last_step___get__(struct __pyx_obj_5adio
   return __pyx_r;
 }
 
-/* "adios.pyx":977
+/* "adios.pyx":985
  *     property endianness:
  *         """ The endianness of the stored data. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -14487,7 +14733,7 @@ static PyObject *__pyx_pf_5adios_4file_10endianness___get__(struct __pyx_obj_5ad
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios.pyx":978
+  /* "adios.pyx":986
  *         """ The endianness of the stored data. """
  *         def __get__(self):
  *             return self.endianness             # <<<<<<<<<<<<<<
@@ -14495,13 +14741,13 @@ static PyObject *__pyx_pf_5adios_4file_10endianness___get__(struct __pyx_obj_5ad
  *     property version:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->endianness); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 978, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->endianness); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 986, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":977
+  /* "adios.pyx":985
  *     property endianness:
  *         """ The endianness of the stored data. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -14520,7 +14766,7 @@ static PyObject *__pyx_pf_5adios_4file_10endianness___get__(struct __pyx_obj_5ad
   return __pyx_r;
 }
 
-/* "adios.pyx":982
+/* "adios.pyx":990
  *     property version:
  *         """ The version of Adios. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -14547,7 +14793,7 @@ static PyObject *__pyx_pf_5adios_4file_7version___get__(struct __pyx_obj_5adios_
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios.pyx":983
+  /* "adios.pyx":991
  *         """ The version of Adios. """
  *         def __get__(self):
  *             return self.version             # <<<<<<<<<<<<<<
@@ -14555,13 +14801,13 @@ static PyObject *__pyx_pf_5adios_4file_7version___get__(struct __pyx_obj_5adios_
  *     property file_size:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->version); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 983, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->version); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 991, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":982
+  /* "adios.pyx":990
  *     property version:
  *         """ The version of Adios. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -14580,7 +14826,7 @@ static PyObject *__pyx_pf_5adios_4file_7version___get__(struct __pyx_obj_5adios_
   return __pyx_r;
 }
 
-/* "adios.pyx":987
+/* "adios.pyx":995
  *     property file_size:
  *         """ The size of Adios file. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -14607,7 +14853,7 @@ static PyObject *__pyx_pf_5adios_4file_9file_size___get__(struct __pyx_obj_5adio
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios.pyx":988
+  /* "adios.pyx":996
  *         """ The size of Adios file. """
  *         def __get__(self):
  *             return self.file_size             # <<<<<<<<<<<<<<
@@ -14615,13 +14861,13 @@ static PyObject *__pyx_pf_5adios_4file_9file_size___get__(struct __pyx_obj_5adio
  *     property is_stream:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->file_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 988, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->file_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 996, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":987
+  /* "adios.pyx":995
  *     property file_size:
  *         """ The size of Adios file. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -14640,7 +14886,7 @@ static PyObject *__pyx_pf_5adios_4file_9file_size___get__(struct __pyx_obj_5adio
   return __pyx_r;
 }
 
-/* "adios.pyx":992
+/* "adios.pyx":1000
  *     property is_stream:
  *         """ Indicating reader type; file reader or stream reader """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -14667,7 +14913,7 @@ static PyObject *__pyx_pf_5adios_4file_9is_stream___get__(struct __pyx_obj_5adio
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios.pyx":993
+  /* "adios.pyx":1001
  *         """ Indicating reader type; file reader or stream reader """
  *         def __get__(self):
  *             return self.is_stream             # <<<<<<<<<<<<<<
@@ -14675,13 +14921,13 @@ static PyObject *__pyx_pf_5adios_4file_9is_stream___get__(struct __pyx_obj_5adio
  *     def __init__(self, str fname,
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->is_stream); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 993, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->is_stream); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1001, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":992
+  /* "adios.pyx":1000
  *     property is_stream:
  *         """ Indicating reader type; file reader or stream reader """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -14700,7 +14946,7 @@ static PyObject *__pyx_pf_5adios_4file_9is_stream___get__(struct __pyx_obj_5adio
   return __pyx_r;
 }
 
-/* "adios.pyx":995
+/* "adios.pyx":1003
  *             return self.is_stream
  * 
  *     def __init__(self, str fname,             # <<<<<<<<<<<<<<
@@ -14725,7 +14971,7 @@ static int __pyx_pw_5adios_4file_1__init__(PyObject *__pyx_v_self, PyObject *__p
     PyObject* values[6] = {0,0,0,0,0,0};
     values[1] = ((PyObject*)__pyx_n_s_BP);
 
-    /* "adios.pyx":998
+    /* "adios.pyx":1006
  *                  str method_name = "BP",
  *                  MPI_Comm comm = MPI_COMM_WORLD,
  *                  is_stream = False,             # <<<<<<<<<<<<<<
@@ -14778,7 +15024,7 @@ static int __pyx_pw_5adios_4file_1__init__(PyObject *__pyx_v_self, PyObject *__p
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 995, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 1003, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -14795,35 +15041,35 @@ static int __pyx_pw_5adios_4file_1__init__(PyObject *__pyx_v_self, PyObject *__p
     __pyx_v_fname = ((PyObject*)values[0]);
     __pyx_v_method_name = ((PyObject*)values[1]);
     if (values[2]) {
-      __pyx_v_comm = __Pyx_PyInt_As_MPI_Comm(values[2]); if (unlikely((__pyx_v_comm == (MPI_Comm)-1) && PyErr_Occurred())) __PYX_ERR(0, 997, __pyx_L3_error)
+      __pyx_v_comm = __Pyx_PyInt_As_MPI_Comm(values[2]); if (unlikely((__pyx_v_comm == ((MPI_Comm)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1005, __pyx_L3_error)
     } else {
       __pyx_v_comm = __pyx_k__16;
     }
     __pyx_v_is_stream = values[3];
     if (values[4]) {
-      __pyx_v_lock_mode = ((ADIOS_LOCKMODE)__Pyx_PyInt_As_ADIOS_LOCKMODE(values[4])); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 999, __pyx_L3_error)
+      __pyx_v_lock_mode = ((ADIOS_LOCKMODE)__Pyx_PyInt_As_ADIOS_LOCKMODE(values[4])); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1007, __pyx_L3_error)
     } else {
       __pyx_v_lock_mode = __pyx_k__17;
     }
     if (values[5]) {
-      __pyx_v_timeout_sec = __pyx_PyFloat_AsFloat(values[5]); if (unlikely((__pyx_v_timeout_sec == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 1000, __pyx_L3_error)
+      __pyx_v_timeout_sec = __pyx_PyFloat_AsFloat(values[5]); if (unlikely((__pyx_v_timeout_sec == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 1008, __pyx_L3_error)
     } else {
       __pyx_v_timeout_sec = ((float)0.0);
     }
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 995, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1003, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.file.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_fname), (&PyString_Type), 1, "fname", 1))) __PYX_ERR(0, 995, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_method_name), (&PyString_Type), 1, "method_name", 1))) __PYX_ERR(0, 996, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_fname), (&PyString_Type), 1, "fname", 1))) __PYX_ERR(0, 1003, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_method_name), (&PyString_Type), 1, "method_name", 1))) __PYX_ERR(0, 1004, __pyx_L1_error)
   __pyx_r = __pyx_pf_5adios_4file___init__(((struct __pyx_obj_5adios_file *)__pyx_v_self), __pyx_v_fname, __pyx_v_method_name, __pyx_v_comm, __pyx_v_is_stream, __pyx_v_lock_mode, __pyx_v_timeout_sec);
 
-  /* "adios.pyx":995
+  /* "adios.pyx":1003
  *             return self.is_stream
  * 
  *     def __init__(self, str fname,             # <<<<<<<<<<<<<<
@@ -14859,7 +15105,7 @@ static int __pyx_pf_5adios_4file___init__(struct __pyx_obj_5adios_file *__pyx_v_
   PyObject *__pyx_t_11 = NULL;
   __Pyx_RefNannySetupContext("__init__", 0);
 
-  /* "adios.pyx":1001
+  /* "adios.pyx":1009
  *                  ADIOS_LOCKMODE lock_mode = ADIOS_LOCKMODE_ALL,
  *                  float timeout_sec = 0.0):
  *         self.fp = NULL             # <<<<<<<<<<<<<<
@@ -14868,14 +15114,14 @@ static int __pyx_pf_5adios_4file___init__(struct __pyx_obj_5adios_file *__pyx_v_
  */
   __pyx_v_self->fp = NULL;
 
-  /* "adios.pyx":1002
+  /* "adios.pyx":1010
  *                  float timeout_sec = 0.0):
  *         self.fp = NULL
  *         self.vars = softdict()             # <<<<<<<<<<<<<<
  *         self.attrs = softdict()
  *         self.is_stream = is_stream
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5adios_softdict), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1002, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5adios_softdict), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1010, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_self->vars);
@@ -14883,14 +15129,14 @@ static int __pyx_pf_5adios_4file___init__(struct __pyx_obj_5adios_file *__pyx_v_
   __pyx_v_self->vars = ((struct __pyx_obj_5adios_softdict *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "adios.pyx":1003
+  /* "adios.pyx":1011
  *         self.fp = NULL
  *         self.vars = softdict()
  *         self.attrs = softdict()             # <<<<<<<<<<<<<<
  *         self.is_stream = is_stream
  *         cdef method = str2adiosreadmethod(method_name)
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5adios_softdict), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1003, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5adios_softdict), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1011, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_self->attrs);
@@ -14898,51 +15144,51 @@ static int __pyx_pf_5adios_4file___init__(struct __pyx_obj_5adios_file *__pyx_v_
   __pyx_v_self->attrs = ((struct __pyx_obj_5adios_softdict *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "adios.pyx":1004
+  /* "adios.pyx":1012
  *         self.vars = softdict()
  *         self.attrs = softdict()
  *         self.is_stream = is_stream             # <<<<<<<<<<<<<<
  *         cdef method = str2adiosreadmethod(method_name)
  * 
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_is_stream); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1004, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_is_stream); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1012, __pyx_L1_error)
   __pyx_v_self->is_stream = __pyx_t_2;
 
-  /* "adios.pyx":1005
+  /* "adios.pyx":1013
  *         self.attrs = softdict()
  *         self.is_stream = is_stream
  *         cdef method = str2adiosreadmethod(method_name)             # <<<<<<<<<<<<<<
  * 
  *         if (is_stream):
  */
-  __pyx_t_1 = __Pyx_PyInt_From_ADIOS_READ_METHOD(__pyx_f_5adios_str2adiosreadmethod(__pyx_v_method_name)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1005, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_ADIOS_READ_METHOD(__pyx_f_5adios_str2adiosreadmethod(__pyx_v_method_name)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1013, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_method = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "adios.pyx":1007
+  /* "adios.pyx":1015
  *         cdef method = str2adiosreadmethod(method_name)
  * 
  *         if (is_stream):             # <<<<<<<<<<<<<<
  *             self.fp = adios_read_open(s2b(fname), method, comm,
  *                                       lock_mode, timeout_sec)
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_is_stream); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1007, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_is_stream); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1015, __pyx_L1_error)
   if (__pyx_t_2) {
 
-    /* "adios.pyx":1008
+    /* "adios.pyx":1016
  * 
  *         if (is_stream):
  *             self.fp = adios_read_open(s2b(fname), method, comm,             # <<<<<<<<<<<<<<
  *                                       lock_mode, timeout_sec)
  *         else:
  */
-    __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_fname, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1008, __pyx_L1_error)
+    __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_fname, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1016, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_3 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_3) && PyErr_Occurred())) __PYX_ERR(0, 1008, __pyx_L1_error)
-    __pyx_t_4 = ((ADIOS_READ_METHOD)__Pyx_PyInt_As_ADIOS_READ_METHOD(__pyx_v_method)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1008, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_3) && PyErr_Occurred())) __PYX_ERR(0, 1016, __pyx_L1_error)
+    __pyx_t_4 = ((ADIOS_READ_METHOD)__Pyx_PyInt_As_ADIOS_READ_METHOD(__pyx_v_method)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1016, __pyx_L1_error)
 
-    /* "adios.pyx":1009
+    /* "adios.pyx":1017
  *         if (is_stream):
  *             self.fp = adios_read_open(s2b(fname), method, comm,
  *                                       lock_mode, timeout_sec)             # <<<<<<<<<<<<<<
@@ -14952,7 +15198,7 @@ static int __pyx_pf_5adios_4file___init__(struct __pyx_obj_5adios_file *__pyx_v_
     __pyx_v_self->fp = adios_read_open(__pyx_t_3, __pyx_t_4, __pyx_v_comm, __pyx_v_lock_mode, __pyx_v_timeout_sec);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-    /* "adios.pyx":1007
+    /* "adios.pyx":1015
  *         cdef method = str2adiosreadmethod(method_name)
  * 
  *         if (is_stream):             # <<<<<<<<<<<<<<
@@ -14962,7 +15208,7 @@ static int __pyx_pf_5adios_4file___init__(struct __pyx_obj_5adios_file *__pyx_v_
     goto __pyx_L3;
   }
 
-  /* "adios.pyx":1011
+  /* "adios.pyx":1019
  *                                       lock_mode, timeout_sec)
  *         else:
  *             self.fp = adios_read_open_file(s2b(fname), method, comm)             # <<<<<<<<<<<<<<
@@ -14970,16 +15216,16 @@ static int __pyx_pf_5adios_4file___init__(struct __pyx_obj_5adios_file *__pyx_v_
  *         assert self.fp != NULL, 'Not an open file'
  */
   /*else*/ {
-    __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_fname, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1011, __pyx_L1_error)
+    __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_fname, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1019, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_5) && PyErr_Occurred())) __PYX_ERR(0, 1011, __pyx_L1_error)
-    __pyx_t_4 = ((ADIOS_READ_METHOD)__Pyx_PyInt_As_ADIOS_READ_METHOD(__pyx_v_method)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1011, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_5) && PyErr_Occurred())) __PYX_ERR(0, 1019, __pyx_L1_error)
+    __pyx_t_4 = ((ADIOS_READ_METHOD)__Pyx_PyInt_As_ADIOS_READ_METHOD(__pyx_v_method)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1019, __pyx_L1_error)
     __pyx_v_self->fp = adios_read_open_file(__pyx_t_5, __pyx_t_4, __pyx_v_comm);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   }
   __pyx_L3:;
 
-  /* "adios.pyx":1013
+  /* "adios.pyx":1021
  *             self.fp = adios_read_open_file(s2b(fname), method, comm)
  * 
  *         assert self.fp != NULL, 'Not an open file'             # <<<<<<<<<<<<<<
@@ -14990,34 +15236,34 @@ static int __pyx_pf_5adios_4file___init__(struct __pyx_obj_5adios_file *__pyx_v_
   if (unlikely(!Py_OptimizeFlag)) {
     if (unlikely(!((__pyx_v_self->fp != NULL) != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Not_an_open_file);
-      __PYX_ERR(0, 1013, __pyx_L1_error)
+      __PYX_ERR(0, 1021, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "adios.pyx":1015
+  /* "adios.pyx":1023
  *         assert self.fp != NULL, 'Not an open file'
  * 
  *         self.name = fname.split('/')[-1]  ## basename             # <<<<<<<<<<<<<<
  *         self.nvars = self.fp.nvars
  *         self.nattrs = self.fp.nattrs
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_fname, __pyx_n_s_split); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1015, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_fname, __pyx_n_s_split); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1023, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1015, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1023, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_6, -1L, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1015, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_6, -1L, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1023, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-  if (!(likely(PyString_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 1015, __pyx_L1_error)
+  if (!(likely(PyString_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 1023, __pyx_L1_error)
   __Pyx_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_self->name);
   __Pyx_DECREF(__pyx_v_self->name);
   __pyx_v_self->name = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "adios.pyx":1016
+  /* "adios.pyx":1024
  * 
  *         self.name = fname.split('/')[-1]  ## basename
  *         self.nvars = self.fp.nvars             # <<<<<<<<<<<<<<
@@ -15027,7 +15273,7 @@ static int __pyx_pf_5adios_4file___init__(struct __pyx_obj_5adios_file *__pyx_v_
   __pyx_t_7 = __pyx_v_self->fp->nvars;
   __pyx_v_self->nvars = __pyx_t_7;
 
-  /* "adios.pyx":1017
+  /* "adios.pyx":1025
  *         self.name = fname.split('/')[-1]  ## basename
  *         self.nvars = self.fp.nvars
  *         self.nattrs = self.fp.nattrs             # <<<<<<<<<<<<<<
@@ -15037,7 +15283,7 @@ static int __pyx_pf_5adios_4file___init__(struct __pyx_obj_5adios_file *__pyx_v_
   __pyx_t_7 = __pyx_v_self->fp->nattrs;
   __pyx_v_self->nattrs = __pyx_t_7;
 
-  /* "adios.pyx":1018
+  /* "adios.pyx":1026
  *         self.nvars = self.fp.nvars
  *         self.nattrs = self.fp.nattrs
  *         self.current_step = self.fp.current_step             # <<<<<<<<<<<<<<
@@ -15047,7 +15293,7 @@ static int __pyx_pf_5adios_4file___init__(struct __pyx_obj_5adios_file *__pyx_v_
   __pyx_t_7 = __pyx_v_self->fp->current_step;
   __pyx_v_self->current_step = __pyx_t_7;
 
-  /* "adios.pyx":1019
+  /* "adios.pyx":1027
  *         self.nattrs = self.fp.nattrs
  *         self.current_step = self.fp.current_step
  *         self.last_step = self.fp.last_step             # <<<<<<<<<<<<<<
@@ -15057,7 +15303,7 @@ static int __pyx_pf_5adios_4file___init__(struct __pyx_obj_5adios_file *__pyx_v_
   __pyx_t_7 = __pyx_v_self->fp->last_step;
   __pyx_v_self->last_step = __pyx_t_7;
 
-  /* "adios.pyx":1020
+  /* "adios.pyx":1028
  *         self.current_step = self.fp.current_step
  *         self.last_step = self.fp.last_step
  *         self.endianness = self.fp.endianness             # <<<<<<<<<<<<<<
@@ -15067,7 +15313,7 @@ static int __pyx_pf_5adios_4file___init__(struct __pyx_obj_5adios_file *__pyx_v_
   __pyx_t_7 = __pyx_v_self->fp->endianness;
   __pyx_v_self->endianness = __pyx_t_7;
 
-  /* "adios.pyx":1021
+  /* "adios.pyx":1029
  *         self.last_step = self.fp.last_step
  *         self.endianness = self.fp.endianness
  *         self.version = self.fp.version             # <<<<<<<<<<<<<<
@@ -15077,7 +15323,7 @@ static int __pyx_pf_5adios_4file___init__(struct __pyx_obj_5adios_file *__pyx_v_
   __pyx_t_7 = __pyx_v_self->fp->version;
   __pyx_v_self->version = __pyx_t_7;
 
-  /* "adios.pyx":1022
+  /* "adios.pyx":1030
  *         self.endianness = self.fp.endianness
  *         self.version = self.fp.version
  *         self.file_size = self.fp.file_size             # <<<<<<<<<<<<<<
@@ -15087,47 +15333,47 @@ static int __pyx_pf_5adios_4file___init__(struct __pyx_obj_5adios_file *__pyx_v_
   __pyx_t_8 = __pyx_v_self->fp->file_size;
   __pyx_v_self->file_size = __pyx_t_8;
 
-  /* "adios.pyx":1024
+  /* "adios.pyx":1032
  *         self.file_size = self.fp.file_size
  * 
  *         for name in [self.fp.attr_namelist[i] for i in range(self.nattrs)]:             # <<<<<<<<<<<<<<
  *             self.attrs[b2s(name)] = attr(self, b2s(name))
  * 
  */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1024, __pyx_L1_error)
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1032, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_7 = __pyx_v_self->nattrs;
   for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_7; __pyx_t_9+=1) {
     __pyx_v_i = __pyx_t_9;
-    __pyx_t_6 = __Pyx_PyBytes_FromString((__pyx_v_self->fp->attr_namelist[__pyx_v_i])); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1024, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_PyBytes_FromString((__pyx_v_self->fp->attr_namelist[__pyx_v_i])); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1032, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_6))) __PYX_ERR(0, 1024, __pyx_L1_error)
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_6))) __PYX_ERR(0, 1032, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   }
   __pyx_t_6 = __pyx_t_1; __Pyx_INCREF(__pyx_t_6); __pyx_t_10 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   for (;;) {
     if (__pyx_t_10 >= PyList_GET_SIZE(__pyx_t_6)) break;
-    #if CYTHON_COMPILING_IN_CPYTHON
-    __pyx_t_1 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_10); __Pyx_INCREF(__pyx_t_1); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 1024, __pyx_L1_error)
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    __pyx_t_1 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_10); __Pyx_INCREF(__pyx_t_1); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 1032, __pyx_L1_error)
     #else
-    __pyx_t_1 = PySequence_ITEM(__pyx_t_6, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1024, __pyx_L1_error)
+    __pyx_t_1 = PySequence_ITEM(__pyx_t_6, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1032, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     #endif
     __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "adios.pyx":1025
+    /* "adios.pyx":1033
  * 
  *         for name in [self.fp.attr_namelist[i] for i in range(self.nattrs)]:
  *             self.attrs[b2s(name)] = attr(self, b2s(name))             # <<<<<<<<<<<<<<
  * 
  *         for name in [self.fp.var_namelist[i] for i in range(self.nvars)]:
  */
-    if (!(likely(PyBytes_CheckExact(__pyx_v_name))||((__pyx_v_name) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_name)->tp_name), 0))) __PYX_ERR(0, 1025, __pyx_L1_error)
-    __pyx_t_1 = __pyx_f_5adios_b2s(((PyObject*)__pyx_v_name), 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1025, __pyx_L1_error)
+    if (!(likely(PyBytes_CheckExact(__pyx_v_name))||((__pyx_v_name) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_name)->tp_name), 0))) __PYX_ERR(0, 1033, __pyx_L1_error)
+    __pyx_t_1 = __pyx_f_5adios_b2s(((PyObject*)__pyx_v_name), 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1033, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1025, __pyx_L1_error)
+    __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1033, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_11);
     __Pyx_INCREF(((PyObject *)__pyx_v_self));
     __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
@@ -15135,17 +15381,17 @@ static int __pyx_pf_5adios_4file___init__(struct __pyx_obj_5adios_file *__pyx_v_
     __Pyx_GIVEREF(__pyx_t_1);
     PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_1);
     __pyx_t_1 = 0;
-    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5adios_attr), __pyx_t_11, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1025, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5adios_attr), __pyx_t_11, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1033, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
-    if (!(likely(PyBytes_CheckExact(__pyx_v_name))||((__pyx_v_name) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_name)->tp_name), 0))) __PYX_ERR(0, 1025, __pyx_L1_error)
-    __pyx_t_11 = __pyx_f_5adios_b2s(((PyObject*)__pyx_v_name), 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1025, __pyx_L1_error)
+    if (!(likely(PyBytes_CheckExact(__pyx_v_name))||((__pyx_v_name) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_name)->tp_name), 0))) __PYX_ERR(0, 1033, __pyx_L1_error)
+    __pyx_t_11 = __pyx_f_5adios_b2s(((PyObject*)__pyx_v_name), 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1033, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_11);
-    if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_self->attrs), __pyx_t_11, __pyx_t_1) < 0)) __PYX_ERR(0, 1025, __pyx_L1_error)
+    if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_self->attrs), __pyx_t_11, __pyx_t_1) < 0)) __PYX_ERR(0, 1033, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-    /* "adios.pyx":1024
+    /* "adios.pyx":1032
  *         self.file_size = self.fp.file_size
  * 
  *         for name in [self.fp.attr_namelist[i] for i in range(self.nattrs)]:             # <<<<<<<<<<<<<<
@@ -15155,47 +15401,47 @@ static int __pyx_pf_5adios_4file___init__(struct __pyx_obj_5adios_file *__pyx_v_
   }
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-  /* "adios.pyx":1027
+  /* "adios.pyx":1035
  *             self.attrs[b2s(name)] = attr(self, b2s(name))
  * 
  *         for name in [self.fp.var_namelist[i] for i in range(self.nvars)]:             # <<<<<<<<<<<<<<
  *             self.vars[b2s(name)] = var(self, b2s(name))
  * 
  */
-  __pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1027, __pyx_L1_error)
+  __pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1035, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __pyx_t_7 = __pyx_v_self->nvars;
   for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_7; __pyx_t_9+=1) {
     __pyx_v_i = __pyx_t_9;
-    __pyx_t_1 = __Pyx_PyBytes_FromString((__pyx_v_self->fp->var_namelist[__pyx_v_i])); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1027, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyBytes_FromString((__pyx_v_self->fp->var_namelist[__pyx_v_i])); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1035, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    if (unlikely(__Pyx_ListComp_Append(__pyx_t_6, (PyObject*)__pyx_t_1))) __PYX_ERR(0, 1027, __pyx_L1_error)
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_6, (PyObject*)__pyx_t_1))) __PYX_ERR(0, 1035, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   }
   __pyx_t_1 = __pyx_t_6; __Pyx_INCREF(__pyx_t_1); __pyx_t_10 = 0;
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   for (;;) {
     if (__pyx_t_10 >= PyList_GET_SIZE(__pyx_t_1)) break;
-    #if CYTHON_COMPILING_IN_CPYTHON
-    __pyx_t_6 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_10); __Pyx_INCREF(__pyx_t_6); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 1027, __pyx_L1_error)
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    __pyx_t_6 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_10); __Pyx_INCREF(__pyx_t_6); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 1035, __pyx_L1_error)
     #else
-    __pyx_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1027, __pyx_L1_error)
+    __pyx_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1035, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     #endif
     __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_6);
     __pyx_t_6 = 0;
 
-    /* "adios.pyx":1028
+    /* "adios.pyx":1036
  * 
  *         for name in [self.fp.var_namelist[i] for i in range(self.nvars)]:
  *             self.vars[b2s(name)] = var(self, b2s(name))             # <<<<<<<<<<<<<<
  * 
  *         self.var = self.vars
  */
-    if (!(likely(PyBytes_CheckExact(__pyx_v_name))||((__pyx_v_name) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_name)->tp_name), 0))) __PYX_ERR(0, 1028, __pyx_L1_error)
-    __pyx_t_6 = __pyx_f_5adios_b2s(((PyObject*)__pyx_v_name), 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1028, __pyx_L1_error)
+    if (!(likely(PyBytes_CheckExact(__pyx_v_name))||((__pyx_v_name) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_name)->tp_name), 0))) __PYX_ERR(0, 1036, __pyx_L1_error)
+    __pyx_t_6 = __pyx_f_5adios_b2s(((PyObject*)__pyx_v_name), 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1036, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1028, __pyx_L1_error)
+    __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1036, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_11);
     __Pyx_INCREF(((PyObject *)__pyx_v_self));
     __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
@@ -15203,17 +15449,17 @@ static int __pyx_pf_5adios_4file___init__(struct __pyx_obj_5adios_file *__pyx_v_
     __Pyx_GIVEREF(__pyx_t_6);
     PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_6);
     __pyx_t_6 = 0;
-    __pyx_t_6 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5adios_var), __pyx_t_11, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1028, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5adios_var), __pyx_t_11, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1036, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
-    if (!(likely(PyBytes_CheckExact(__pyx_v_name))||((__pyx_v_name) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_name)->tp_name), 0))) __PYX_ERR(0, 1028, __pyx_L1_error)
-    __pyx_t_11 = __pyx_f_5adios_b2s(((PyObject*)__pyx_v_name), 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1028, __pyx_L1_error)
+    if (!(likely(PyBytes_CheckExact(__pyx_v_name))||((__pyx_v_name) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_name)->tp_name), 0))) __PYX_ERR(0, 1036, __pyx_L1_error)
+    __pyx_t_11 = __pyx_f_5adios_b2s(((PyObject*)__pyx_v_name), 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1036, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_11);
-    if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_self->vars), __pyx_t_11, __pyx_t_6) < 0)) __PYX_ERR(0, 1028, __pyx_L1_error)
+    if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_self->vars), __pyx_t_11, __pyx_t_6) < 0)) __PYX_ERR(0, 1036, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-    /* "adios.pyx":1027
+    /* "adios.pyx":1035
  *             self.attrs[b2s(name)] = attr(self, b2s(name))
  * 
  *         for name in [self.fp.var_namelist[i] for i in range(self.nvars)]:             # <<<<<<<<<<<<<<
@@ -15223,7 +15469,7 @@ static int __pyx_pf_5adios_4file___init__(struct __pyx_obj_5adios_file *__pyx_v_
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":1030
+  /* "adios.pyx":1038
  *             self.vars[b2s(name)] = var(self, b2s(name))
  * 
  *         self.var = self.vars             # <<<<<<<<<<<<<<
@@ -15238,7 +15484,7 @@ static int __pyx_pf_5adios_4file___init__(struct __pyx_obj_5adios_file *__pyx_v_
   __pyx_v_self->var = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "adios.pyx":1031
+  /* "adios.pyx":1039
  * 
  *         self.var = self.vars
  *         self.attr = self.attrs             # <<<<<<<<<<<<<<
@@ -15253,7 +15499,7 @@ static int __pyx_pf_5adios_4file___init__(struct __pyx_obj_5adios_file *__pyx_v_
   __pyx_v_self->attr = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "adios.pyx":995
+  /* "adios.pyx":1003
  *             return self.is_stream
  * 
  *     def __init__(self, str fname,             # <<<<<<<<<<<<<<
@@ -15277,7 +15523,7 @@ static int __pyx_pf_5adios_4file___init__(struct __pyx_obj_5adios_file *__pyx_v_
   return __pyx_r;
 }
 
-/* "adios.pyx":1033
+/* "adios.pyx":1041
  *         self.attr = self.attrs
  * 
  *     def __del__(self):             # <<<<<<<<<<<<<<
@@ -15305,18 +15551,18 @@ static PyObject *__pyx_pf_5adios_4file_2__del__(struct __pyx_obj_5adios_file *__
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__del__", 0);
 
-  /* "adios.pyx":1035
+  /* "adios.pyx":1043
  *     def __del__(self):
  *         """ Close file on destruction. """
  *         self.close()             # <<<<<<<<<<<<<<
  * 
  *     def __enter__(self):
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_5adios_file *)__pyx_v_self->__pyx_vtab)->close(__pyx_v_self, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1035, __pyx_L1_error)
+  __pyx_t_1 = ((struct __pyx_vtabstruct_5adios_file *)__pyx_v_self->__pyx_vtab)->close(__pyx_v_self, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1043, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":1033
+  /* "adios.pyx":1041
  *         self.attr = self.attrs
  * 
  *     def __del__(self):             # <<<<<<<<<<<<<<
@@ -15337,7 +15583,7 @@ static PyObject *__pyx_pf_5adios_4file_2__del__(struct __pyx_obj_5adios_file *__
   return __pyx_r;
 }
 
-/* "adios.pyx":1037
+/* "adios.pyx":1045
  *         self.close()
  * 
  *     def __enter__(self):             # <<<<<<<<<<<<<<
@@ -15364,7 +15610,7 @@ static PyObject *__pyx_pf_5adios_4file_4__enter__(struct __pyx_obj_5adios_file *
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__enter__", 0);
 
-  /* "adios.pyx":1039
+  /* "adios.pyx":1047
  *     def __enter__(self):
  *         """ Enter for with statement """
  *         return self             # <<<<<<<<<<<<<<
@@ -15376,7 +15622,7 @@ static PyObject *__pyx_pf_5adios_4file_4__enter__(struct __pyx_obj_5adios_file *
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "adios.pyx":1037
+  /* "adios.pyx":1045
  *         self.close()
  * 
  *     def __enter__(self):             # <<<<<<<<<<<<<<
@@ -15391,7 +15637,7 @@ static PyObject *__pyx_pf_5adios_4file_4__enter__(struct __pyx_obj_5adios_file *
   return __pyx_r;
 }
 
-/* "adios.pyx":1041
+/* "adios.pyx":1049
  *         return self
  * 
  *     def __exit__(self, exception_type, exception_value, traceback):             # <<<<<<<<<<<<<<
@@ -15430,16 +15676,16 @@ static PyObject *__pyx_pw_5adios_4file_7__exit__(PyObject *__pyx_v_self, PyObjec
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_exception_value)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, 1); __PYX_ERR(0, 1041, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, 1); __PYX_ERR(0, 1049, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_traceback)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, 2); __PYX_ERR(0, 1041, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, 2); __PYX_ERR(0, 1049, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__exit__") < 0)) __PYX_ERR(0, 1041, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__exit__") < 0)) __PYX_ERR(0, 1049, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -15454,7 +15700,7 @@ static PyObject *__pyx_pw_5adios_4file_7__exit__(PyObject *__pyx_v_self, PyObjec
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1041, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1049, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.file.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -15473,18 +15719,18 @@ static PyObject *__pyx_pf_5adios_4file_6__exit__(struct __pyx_obj_5adios_file *_
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__exit__", 0);
 
-  /* "adios.pyx":1043
+  /* "adios.pyx":1051
  *     def __exit__(self, exception_type, exception_value, traceback):
  *         """ Close file on exit. """
  *         self.close()             # <<<<<<<<<<<<<<
  * 
  *     cpdef close(self):
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_5adios_file *)__pyx_v_self->__pyx_vtab)->close(__pyx_v_self, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1043, __pyx_L1_error)
+  __pyx_t_1 = ((struct __pyx_vtabstruct_5adios_file *)__pyx_v_self->__pyx_vtab)->close(__pyx_v_self, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1051, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":1041
+  /* "adios.pyx":1049
  *         return self
  * 
  *     def __exit__(self, exception_type, exception_value, traceback):             # <<<<<<<<<<<<<<
@@ -15505,7 +15751,7 @@ static PyObject *__pyx_pf_5adios_4file_6__exit__(struct __pyx_obj_5adios_file *_
   return __pyx_r;
 }
 
-/* "adios.pyx":1045
+/* "adios.pyx":1053
  *         self.close()
  * 
  *     cpdef close(self):             # <<<<<<<<<<<<<<
@@ -15526,13 +15772,13 @@ static PyObject *__pyx_f_5adios_4file_close(struct __pyx_obj_5adios_file *__pyx_
   if (unlikely(__pyx_skip_dispatch)) ;
   /* Check if overridden in Python */
   else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_close); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1045, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_close); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1053, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_5adios_4file_9close)) {
       __Pyx_XDECREF(__pyx_r);
       __Pyx_INCREF(__pyx_t_1);
       __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
+      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
         __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
         if (likely(__pyx_t_4)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -15542,10 +15788,10 @@ static PyObject *__pyx_f_5adios_4file_close(struct __pyx_obj_5adios_file *__pyx_
         }
       }
       if (__pyx_t_4) {
-        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1045, __pyx_L1_error)
+        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1053, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       } else {
-        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1045, __pyx_L1_error)
+        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1053, __pyx_L1_error)
       }
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -15557,7 +15803,7 @@ static PyObject *__pyx_f_5adios_4file_close(struct __pyx_obj_5adios_file *__pyx_
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   }
 
-  /* "adios.pyx":1047
+  /* "adios.pyx":1055
  *     cpdef close(self):
  *         """ Close the open file. """
  *         assert self.fp != NULL, 'Not an open file'             # <<<<<<<<<<<<<<
@@ -15568,12 +15814,12 @@ static PyObject *__pyx_f_5adios_4file_close(struct __pyx_obj_5adios_file *__pyx_
   if (unlikely(!Py_OptimizeFlag)) {
     if (unlikely(!((__pyx_v_self->fp != NULL) != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Not_an_open_file);
-      __PYX_ERR(0, 1047, __pyx_L1_error)
+      __PYX_ERR(0, 1055, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "adios.pyx":1048
+  /* "adios.pyx":1056
  *         """ Close the open file. """
  *         assert self.fp != NULL, 'Not an open file'
  *         adios_read_close(self.fp)             # <<<<<<<<<<<<<<
@@ -15582,7 +15828,7 @@ static PyObject *__pyx_f_5adios_4file_close(struct __pyx_obj_5adios_file *__pyx_
  */
   adios_read_close(__pyx_v_self->fp);
 
-  /* "adios.pyx":1049
+  /* "adios.pyx":1057
  *         assert self.fp != NULL, 'Not an open file'
  *         adios_read_close(self.fp)
  *         self.fp = NULL             # <<<<<<<<<<<<<<
@@ -15591,7 +15837,7 @@ static PyObject *__pyx_f_5adios_4file_close(struct __pyx_obj_5adios_file *__pyx_
  */
   __pyx_v_self->fp = NULL;
 
-  /* "adios.pyx":1045
+  /* "adios.pyx":1053
  *         self.close()
  * 
  *     cpdef close(self):             # <<<<<<<<<<<<<<
@@ -15635,7 +15881,7 @@ static PyObject *__pyx_pf_5adios_4file_8close(struct __pyx_obj_5adios_file *__py
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("close", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_5adios_4file_close(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1045, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_5adios_4file_close(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1053, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -15652,7 +15898,7 @@ static PyObject *__pyx_pf_5adios_4file_8close(struct __pyx_obj_5adios_file *__py
   return __pyx_r;
 }
 
-/* "adios.pyx":1051
+/* "adios.pyx":1059
  *         self.fp = NULL
  * 
  *     cpdef printself(self):             # <<<<<<<<<<<<<<
@@ -15673,13 +15919,13 @@ static PyObject *__pyx_f_5adios_4file_printself(struct __pyx_obj_5adios_file *__
   if (unlikely(__pyx_skip_dispatch)) ;
   /* Check if overridden in Python */
   else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_printself); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1051, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_printself); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1059, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_5adios_4file_11printself)) {
       __Pyx_XDECREF(__pyx_r);
       __Pyx_INCREF(__pyx_t_1);
       __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
+      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
         __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
         if (likely(__pyx_t_4)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -15689,10 +15935,10 @@ static PyObject *__pyx_f_5adios_4file_printself(struct __pyx_obj_5adios_file *__
         }
       }
       if (__pyx_t_4) {
-        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1051, __pyx_L1_error)
+        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1059, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       } else {
-        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1051, __pyx_L1_error)
+        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1059, __pyx_L1_error)
       }
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -15704,7 +15950,7 @@ static PyObject *__pyx_f_5adios_4file_printself(struct __pyx_obj_5adios_file *__
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   }
 
-  /* "adios.pyx":1053
+  /* "adios.pyx":1061
  *     cpdef printself(self):
  *         """ Print native ADIOS_FILE structure. """
  *         assert self.fp != NULL, 'Not an open file'             # <<<<<<<<<<<<<<
@@ -15715,32 +15961,32 @@ static PyObject *__pyx_f_5adios_4file_printself(struct __pyx_obj_5adios_file *__
   if (unlikely(!Py_OptimizeFlag)) {
     if (unlikely(!((__pyx_v_self->fp != NULL) != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Not_an_open_file);
-      __PYX_ERR(0, 1053, __pyx_L1_error)
+      __PYX_ERR(0, 1061, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "adios.pyx":1054
+  /* "adios.pyx":1062
  *         """ Print native ADIOS_FILE structure. """
  *         assert self.fp != NULL, 'Not an open file'
  *         print ('=== AdiosFile ===')             # <<<<<<<<<<<<<<
  *         print ('%15s : %lu' % ('fp', <unsigned long> self.fp))
  *         printfile(self.fp)
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_tuple__19, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1054, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_tuple__19, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1062, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":1055
+  /* "adios.pyx":1063
  *         assert self.fp != NULL, 'Not an open file'
  *         print ('=== AdiosFile ===')
  *         print ('%15s : %lu' % ('fp', <unsigned long> self.fp))             # <<<<<<<<<<<<<<
  *         printfile(self.fp)
  * 
  */
-  __pyx_t_1 = __Pyx_PyInt_From_unsigned_long(((unsigned long)__pyx_v_self->fp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1055, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_unsigned_long(((unsigned long)__pyx_v_self->fp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1063, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1055, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1063, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_fp);
   __Pyx_GIVEREF(__pyx_n_s_fp);
@@ -15748,31 +15994,31 @@ static PyObject *__pyx_f_5adios_4file_printself(struct __pyx_obj_5adios_file *__
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_lu, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1055, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_lu, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1063, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1055, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1063, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1055, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1063, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":1056
+  /* "adios.pyx":1064
  *         print ('=== AdiosFile ===')
  *         print ('%15s : %lu' % ('fp', <unsigned long> self.fp))
  *         printfile(self.fp)             # <<<<<<<<<<<<<<
  * 
  *     cpdef release_step(self):
  */
-  __pyx_t_1 = __pyx_f_5adios_printfile(__pyx_v_self->fp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1056, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_5adios_printfile(__pyx_v_self->fp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1064, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":1051
+  /* "adios.pyx":1059
  *         self.fp = NULL
  * 
  *     cpdef printself(self):             # <<<<<<<<<<<<<<
@@ -15816,7 +16062,7 @@ static PyObject *__pyx_pf_5adios_4file_10printself(struct __pyx_obj_5adios_file
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("printself", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_5adios_4file_printself(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1051, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_5adios_4file_printself(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1059, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -15833,7 +16079,7 @@ static PyObject *__pyx_pf_5adios_4file_10printself(struct __pyx_obj_5adios_file
   return __pyx_r;
 }
 
-/* "adios.pyx":1058
+/* "adios.pyx":1066
  *         printfile(self.fp)
  * 
  *     cpdef release_step(self):             # <<<<<<<<<<<<<<
@@ -15854,13 +16100,13 @@ static PyObject *__pyx_f_5adios_4file_release_step(struct __pyx_obj_5adios_file
   if (unlikely(__pyx_skip_dispatch)) ;
   /* Check if overridden in Python */
   else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_release_step); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1058, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_release_step); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1066, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_5adios_4file_13release_step)) {
       __Pyx_XDECREF(__pyx_r);
       __Pyx_INCREF(__pyx_t_1);
       __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
+      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
         __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
         if (likely(__pyx_t_4)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -15870,10 +16116,10 @@ static PyObject *__pyx_f_5adios_4file_release_step(struct __pyx_obj_5adios_file
         }
       }
       if (__pyx_t_4) {
-        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1058, __pyx_L1_error)
+        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1066, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       } else {
-        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1058, __pyx_L1_error)
+        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1066, __pyx_L1_error)
       }
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -15885,7 +16131,7 @@ static PyObject *__pyx_f_5adios_4file_release_step(struct __pyx_obj_5adios_file
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   }
 
-  /* "adios.pyx":1060
+  /* "adios.pyx":1068
  *     cpdef release_step(self):
  *         """ Release the current step lock and let the writer code to progress """
  *         adios_release_step(self.fp)             # <<<<<<<<<<<<<<
@@ -15894,7 +16140,7 @@ static PyObject *__pyx_f_5adios_4file_release_step(struct __pyx_obj_5adios_file
  */
   adios_release_step(__pyx_v_self->fp);
 
-  /* "adios.pyx":1058
+  /* "adios.pyx":1066
  *         printfile(self.fp)
  * 
  *     cpdef release_step(self):             # <<<<<<<<<<<<<<
@@ -15938,7 +16184,7 @@ static PyObject *__pyx_pf_5adios_4file_12release_step(struct __pyx_obj_5adios_fi
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("release_step", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_5adios_4file_release_step(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1058, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_5adios_4file_release_step(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1066, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -15955,7 +16201,7 @@ static PyObject *__pyx_pf_5adios_4file_12release_step(struct __pyx_obj_5adios_fi
   return __pyx_r;
 }
 
-/* "adios.pyx":1062
+/* "adios.pyx":1070
  *         adios_release_step(self.fp)
  * 
  *     cpdef advance(self, int last = 0, float timeout_sec = 0.0):             # <<<<<<<<<<<<<<
@@ -15977,10 +16223,10 @@ static PyObject *__pyx_f_5adios_4file_advance(struct __pyx_obj_5adios_file *__py
   PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
   PyObject *__pyx_t_6 = NULL;
-  Py_ssize_t __pyx_t_7;
+  int __pyx_t_7;
   PyObject *__pyx_t_8 = NULL;
   int __pyx_t_9;
-  int __pyx_t_10;
+  Py_ssize_t __pyx_t_10;
   PyObject *(*__pyx_t_11)(PyObject *);
   __Pyx_RefNannySetupContext("advance", 0);
   if (__pyx_optional_args) {
@@ -15995,18 +16241,18 @@ static PyObject *__pyx_f_5adios_4file_advance(struct __pyx_obj_5adios_file *__py
   if (unlikely(__pyx_skip_dispatch)) ;
   /* Check if overridden in Python */
   else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_advance); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1062, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_advance); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1070, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_5adios_4file_15advance)) {
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_last); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1062, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_last); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1070, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_4 = PyFloat_FromDouble(__pyx_v_timeout_sec); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1062, __pyx_L1_error)
+      __pyx_t_4 = PyFloat_FromDouble(__pyx_v_timeout_sec); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1070, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_INCREF(__pyx_t_1);
       __pyx_t_5 = __pyx_t_1; __pyx_t_6 = NULL;
       __pyx_t_7 = 0;
-      if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_5))) {
+      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
         __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
         if (likely(__pyx_t_6)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
@@ -16016,20 +16262,42 @@ static PyObject *__pyx_f_5adios_4file_advance(struct __pyx_obj_5adios_file *__py
           __pyx_t_7 = 1;
         }
       }
-      __pyx_t_8 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1062, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_8);
-      if (__pyx_t_6) {
-        __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_6); __pyx_t_6 = NULL;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_5)) {
+        PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_t_3, __pyx_t_4};
+        __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1070, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
+        PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_t_3, __pyx_t_4};
+        __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1070, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      } else
+      #endif
+      {
+        __pyx_t_8 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1070, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_8);
+        if (__pyx_t_6) {
+          __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_6); __pyx_t_6 = NULL;
+        }
+        __Pyx_GIVEREF(__pyx_t_3);
+        PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, __pyx_t_3);
+        __Pyx_GIVEREF(__pyx_t_4);
+        PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, __pyx_t_4);
+        __pyx_t_3 = 0;
+        __pyx_t_4 = 0;
+        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1070, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
       }
-      __Pyx_GIVEREF(__pyx_t_3);
-      PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, __pyx_t_3);
-      __Pyx_GIVEREF(__pyx_t_4);
-      PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, __pyx_t_4);
-      __pyx_t_3 = 0;
-      __pyx_t_4 = 0;
-      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1062, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_2);
-      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       __pyx_r = __pyx_t_2;
       __pyx_t_2 = 0;
@@ -16039,7 +16307,7 @@ static PyObject *__pyx_f_5adios_4file_advance(struct __pyx_obj_5adios_file *__py
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   }
 
-  /* "adios.pyx":1073
+  /* "adios.pyx":1081
  *             int: 0 if successful, non-zero otherwise.
  *         """
  *         val = adios_advance_step(self.fp, last, timeout_sec)             # <<<<<<<<<<<<<<
@@ -16048,7 +16316,7 @@ static PyObject *__pyx_f_5adios_4file_advance(struct __pyx_obj_5adios_file *__py
  */
   __pyx_v_val = adios_advance_step(__pyx_v_self->fp, __pyx_v_last, __pyx_v_timeout_sec);
 
-  /* "adios.pyx":1074
+  /* "adios.pyx":1082
  *         """
  *         val = adios_advance_step(self.fp, last, timeout_sec)
  *         if (val >= 0):             # <<<<<<<<<<<<<<
@@ -16058,37 +16326,37 @@ static PyObject *__pyx_f_5adios_4file_advance(struct __pyx_obj_5adios_file *__py
   __pyx_t_9 = ((__pyx_v_val >= 0) != 0);
   if (__pyx_t_9) {
 
-    /* "adios.pyx":1075
+    /* "adios.pyx":1083
  *         val = adios_advance_step(self.fp, last, timeout_sec)
  *         if (val >= 0):
  *             self.current_step = self.fp.current_step             # <<<<<<<<<<<<<<
  *             self.last_step = self.fp.last_step
  * 
  */
-    __pyx_t_10 = __pyx_v_self->fp->current_step;
-    __pyx_v_self->current_step = __pyx_t_10;
+    __pyx_t_7 = __pyx_v_self->fp->current_step;
+    __pyx_v_self->current_step = __pyx_t_7;
 
-    /* "adios.pyx":1076
+    /* "adios.pyx":1084
  *         if (val >= 0):
  *             self.current_step = self.fp.current_step
  *             self.last_step = self.fp.last_step             # <<<<<<<<<<<<<<
  * 
  *             for v in self.vars.values():
  */
-    __pyx_t_10 = __pyx_v_self->fp->last_step;
-    __pyx_v_self->last_step = __pyx_t_10;
+    __pyx_t_7 = __pyx_v_self->fp->last_step;
+    __pyx_v_self->last_step = __pyx_t_7;
 
-    /* "adios.pyx":1078
+    /* "adios.pyx":1086
  *             self.last_step = self.fp.last_step
  * 
  *             for v in self.vars.values():             # <<<<<<<<<<<<<<
  *                 v.advance()
  * 
  */
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_values); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1078, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_values); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1086, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_t_5 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
       __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
       if (likely(__pyx_t_5)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
@@ -16098,38 +16366,38 @@ static PyObject *__pyx_f_5adios_4file_advance(struct __pyx_obj_5adios_file *__py
       }
     }
     if (__pyx_t_5) {
-      __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1078, __pyx_L1_error)
+      __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1086, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     } else {
-      __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1078, __pyx_L1_error)
+      __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1086, __pyx_L1_error)
     }
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) {
-      __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __pyx_t_7 = 0;
+      __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __pyx_t_10 = 0;
       __pyx_t_11 = NULL;
     } else {
-      __pyx_t_7 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1078, __pyx_L1_error)
+      __pyx_t_10 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1086, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
-      __pyx_t_11 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1078, __pyx_L1_error)
+      __pyx_t_11 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1086, __pyx_L1_error)
     }
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     for (;;) {
       if (likely(!__pyx_t_11)) {
         if (likely(PyList_CheckExact(__pyx_t_2))) {
-          if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_2)) break;
-          #if CYTHON_COMPILING_IN_CPYTHON
-          __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_7); __Pyx_INCREF(__pyx_t_1); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 1078, __pyx_L1_error)
+          if (__pyx_t_10 >= PyList_GET_SIZE(__pyx_t_2)) break;
+          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+          __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_10); __Pyx_INCREF(__pyx_t_1); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 1086, __pyx_L1_error)
           #else
-          __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1078, __pyx_L1_error)
+          __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1086, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_1);
           #endif
         } else {
-          if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
-          #if CYTHON_COMPILING_IN_CPYTHON
-          __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_7); __Pyx_INCREF(__pyx_t_1); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 1078, __pyx_L1_error)
+          if (__pyx_t_10 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
+          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+          __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_10); __Pyx_INCREF(__pyx_t_1); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 1086, __pyx_L1_error)
           #else
-          __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1078, __pyx_L1_error)
+          __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1086, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_1);
           #endif
         }
@@ -16139,7 +16407,7 @@ static PyObject *__pyx_f_5adios_4file_advance(struct __pyx_obj_5adios_file *__py
           PyObject* exc_type = PyErr_Occurred();
           if (exc_type) {
             if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-            else __PYX_ERR(0, 1078, __pyx_L1_error)
+            else __PYX_ERR(0, 1086, __pyx_L1_error)
           }
           break;
         }
@@ -16148,17 +16416,17 @@ static PyObject *__pyx_f_5adios_4file_advance(struct __pyx_obj_5adios_file *__py
       __Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_1);
       __pyx_t_1 = 0;
 
-      /* "adios.pyx":1079
+      /* "adios.pyx":1087
  * 
  *             for v in self.vars.values():
  *                 v.advance()             # <<<<<<<<<<<<<<
  * 
  *         return val
  */
-      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_v, __pyx_n_s_advance); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1079, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_v, __pyx_n_s_advance); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1087, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       __pyx_t_8 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_5))) {
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
         __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_5);
         if (likely(__pyx_t_8)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
@@ -16168,16 +16436,16 @@ static PyObject *__pyx_f_5adios_4file_advance(struct __pyx_obj_5adios_file *__py
         }
       }
       if (__pyx_t_8) {
-        __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1079, __pyx_L1_error)
+        __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1087, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
       } else {
-        __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1079, __pyx_L1_error)
+        __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1087, __pyx_L1_error)
       }
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-      /* "adios.pyx":1078
+      /* "adios.pyx":1086
  *             self.last_step = self.fp.last_step
  * 
  *             for v in self.vars.values():             # <<<<<<<<<<<<<<
@@ -16187,7 +16455,7 @@ static PyObject *__pyx_f_5adios_4file_advance(struct __pyx_obj_5adios_file *__py
     }
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-    /* "adios.pyx":1074
+    /* "adios.pyx":1082
  *         """
  *         val = adios_advance_step(self.fp, last, timeout_sec)
  *         if (val >= 0):             # <<<<<<<<<<<<<<
@@ -16196,7 +16464,7 @@ static PyObject *__pyx_f_5adios_4file_advance(struct __pyx_obj_5adios_file *__py
  */
   }
 
-  /* "adios.pyx":1081
+  /* "adios.pyx":1089
  *                 v.advance()
  * 
  *         return val             # <<<<<<<<<<<<<<
@@ -16204,13 +16472,13 @@ static PyObject *__pyx_f_5adios_4file_advance(struct __pyx_obj_5adios_file *__py
  *     def __getitem__(self, varname):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_val); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1081, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_val); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1089, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":1062
+  /* "adios.pyx":1070
  *         adios_release_step(self.fp)
  * 
  *     cpdef advance(self, int last = 0, float timeout_sec = 0.0):             # <<<<<<<<<<<<<<
@@ -16271,7 +16539,7 @@ static PyObject *__pyx_pw_5adios_4file_15advance(PyObject *__pyx_v_self, PyObjec
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "advance") < 0)) __PYX_ERR(0, 1062, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "advance") < 0)) __PYX_ERR(0, 1070, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -16282,19 +16550,19 @@ static PyObject *__pyx_pw_5adios_4file_15advance(PyObject *__pyx_v_self, PyObjec
       }
     }
     if (values[0]) {
-      __pyx_v_last = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_last == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1062, __pyx_L3_error)
+      __pyx_v_last = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_last == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1070, __pyx_L3_error)
     } else {
       __pyx_v_last = ((int)0);
     }
     if (values[1]) {
-      __pyx_v_timeout_sec = __pyx_PyFloat_AsFloat(values[1]); if (unlikely((__pyx_v_timeout_sec == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 1062, __pyx_L3_error)
+      __pyx_v_timeout_sec = __pyx_PyFloat_AsFloat(values[1]); if (unlikely((__pyx_v_timeout_sec == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 1070, __pyx_L3_error)
     } else {
       __pyx_v_timeout_sec = ((float)0.0);
     }
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("advance", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1062, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("advance", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1070, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.file.advance", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -16317,7 +16585,7 @@ static PyObject *__pyx_pf_5adios_4file_14advance(struct __pyx_obj_5adios_file *_
   __pyx_t_2.__pyx_n = 2;
   __pyx_t_2.last = __pyx_v_last;
   __pyx_t_2.timeout_sec = __pyx_v_timeout_sec;
-  __pyx_t_1 = __pyx_vtabptr_5adios_file->advance(__pyx_v_self, 1, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1062, __pyx_L1_error)
+  __pyx_t_1 = __pyx_vtabptr_5adios_file->advance(__pyx_v_self, 1, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1070, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -16334,7 +16602,7 @@ static PyObject *__pyx_pf_5adios_4file_14advance(struct __pyx_obj_5adios_file *_
   return __pyx_r;
 }
 
-/* "adios.pyx":1083
+/* "adios.pyx":1091
  *         return val
  * 
  *     def __getitem__(self, varname):             # <<<<<<<<<<<<<<
@@ -16380,7 +16648,7 @@ static PyObject *__pyx_pf_5adios_4file_16__getitem__(struct __pyx_obj_5adios_fil
   __Pyx_RefNannySetupContext("__getitem__", 0);
   __Pyx_INCREF(__pyx_v_varname);
 
-  /* "adios.pyx":1094
+  /* "adios.pyx":1102
  * 
  *         """
  *         if not isinstance(varname, tuple):             # <<<<<<<<<<<<<<
@@ -16391,14 +16659,14 @@ static PyObject *__pyx_pf_5adios_4file_16__getitem__(struct __pyx_obj_5adios_fil
   __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0);
   if (__pyx_t_2) {
 
-    /* "adios.pyx":1095
+    /* "adios.pyx":1103
  *         """
  *         if not isinstance(varname, tuple):
  *             varname = (varname,)             # <<<<<<<<<<<<<<
  * 
  *         if len(varname) > 1:
  */
-    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1095, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1103, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_varname);
     __Pyx_GIVEREF(__pyx_v_varname);
@@ -16406,7 +16674,7 @@ static PyObject *__pyx_pf_5adios_4file_16__getitem__(struct __pyx_obj_5adios_fil
     __Pyx_DECREF_SET(__pyx_v_varname, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "adios.pyx":1094
+    /* "adios.pyx":1102
  * 
  *         """
  *         if not isinstance(varname, tuple):             # <<<<<<<<<<<<<<
@@ -16415,37 +16683,37 @@ static PyObject *__pyx_pf_5adios_4file_16__getitem__(struct __pyx_obj_5adios_fil
  */
   }
 
-  /* "adios.pyx":1097
+  /* "adios.pyx":1105
  *             varname = (varname,)
  * 
  *         if len(varname) > 1:             # <<<<<<<<<<<<<<
  *             raise KeyError(varname)
  * 
  */
-  __pyx_t_4 = PyObject_Length(__pyx_v_varname); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 1097, __pyx_L1_error)
+  __pyx_t_4 = PyObject_Length(__pyx_v_varname); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 1105, __pyx_L1_error)
   __pyx_t_2 = ((__pyx_t_4 > 1) != 0);
   if (__pyx_t_2) {
 
-    /* "adios.pyx":1098
+    /* "adios.pyx":1106
  * 
  *         if len(varname) > 1:
  *             raise KeyError(varname)             # <<<<<<<<<<<<<<
  * 
  *         for key_ in varname:
  */
-    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1098, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1106, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_varname);
     __Pyx_GIVEREF(__pyx_v_varname);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_varname);
-    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_KeyError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1098, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_KeyError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1106, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_Raise(__pyx_t_5, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    __PYX_ERR(0, 1098, __pyx_L1_error)
+    __PYX_ERR(0, 1106, __pyx_L1_error)
 
-    /* "adios.pyx":1097
+    /* "adios.pyx":1105
  *             varname = (varname,)
  * 
  *         if len(varname) > 1:             # <<<<<<<<<<<<<<
@@ -16454,7 +16722,7 @@ static PyObject *__pyx_pf_5adios_4file_16__getitem__(struct __pyx_obj_5adios_fil
  */
   }
 
-  /* "adios.pyx":1100
+  /* "adios.pyx":1108
  *             raise KeyError(varname)
  * 
  *         for key_ in varname:             # <<<<<<<<<<<<<<
@@ -16465,26 +16733,26 @@ static PyObject *__pyx_pf_5adios_4file_16__getitem__(struct __pyx_obj_5adios_fil
     __pyx_t_5 = __pyx_v_varname; __Pyx_INCREF(__pyx_t_5); __pyx_t_4 = 0;
     __pyx_t_6 = NULL;
   } else {
-    __pyx_t_4 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_v_varname); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1100, __pyx_L1_error)
+    __pyx_t_4 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_v_varname); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1108, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1100, __pyx_L1_error)
+    __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1108, __pyx_L1_error)
   }
   for (;;) {
     if (likely(!__pyx_t_6)) {
       if (likely(PyList_CheckExact(__pyx_t_5))) {
         if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_5)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_3 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1100, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_3 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1108, __pyx_L1_error)
         #else
-        __pyx_t_3 = PySequence_ITEM(__pyx_t_5, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1100, __pyx_L1_error)
+        __pyx_t_3 = PySequence_ITEM(__pyx_t_5, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1108, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
         #endif
       } else {
         if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_5)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1100, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1108, __pyx_L1_error)
         #else
-        __pyx_t_3 = PySequence_ITEM(__pyx_t_5, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1100, __pyx_L1_error)
+        __pyx_t_3 = PySequence_ITEM(__pyx_t_5, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1108, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
         #endif
       }
@@ -16494,7 +16762,7 @@ static PyObject *__pyx_pf_5adios_4file_16__getitem__(struct __pyx_obj_5adios_fil
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
           if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-          else __PYX_ERR(0, 1100, __pyx_L1_error)
+          else __PYX_ERR(0, 1108, __pyx_L1_error)
         }
         break;
       }
@@ -16503,7 +16771,7 @@ static PyObject *__pyx_pf_5adios_4file_16__getitem__(struct __pyx_obj_5adios_fil
     __Pyx_XDECREF_SET(__pyx_v_key_, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "adios.pyx":1101
+    /* "adios.pyx":1109
  * 
  *         for key_ in varname:
  *             if not isinstance(key_, str):             # <<<<<<<<<<<<<<
@@ -16514,20 +16782,20 @@ static PyObject *__pyx_pf_5adios_4file_16__getitem__(struct __pyx_obj_5adios_fil
     __pyx_t_1 = ((!(__pyx_t_2 != 0)) != 0);
     if (__pyx_t_1) {
 
-      /* "adios.pyx":1102
+      /* "adios.pyx":1110
  *         for key_ in varname:
  *             if not isinstance(key_, str):
  *                 raise TypeError("Unhashable type")             # <<<<<<<<<<<<<<
  * 
  *             if key_.startswith('/'):
  */
-      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__20, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1102, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__20, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1110, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_Raise(__pyx_t_3, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      __PYX_ERR(0, 1102, __pyx_L1_error)
+      __PYX_ERR(0, 1110, __pyx_L1_error)
 
-      /* "adios.pyx":1101
+      /* "adios.pyx":1109
  * 
  *         for key_ in varname:
  *             if not isinstance(key_, str):             # <<<<<<<<<<<<<<
@@ -16536,35 +16804,35 @@ static PyObject *__pyx_pf_5adios_4file_16__getitem__(struct __pyx_obj_5adios_fil
  */
     }
 
-    /* "adios.pyx":1104
+    /* "adios.pyx":1112
  *                 raise TypeError("Unhashable type")
  * 
  *             if key_.startswith('/'):             # <<<<<<<<<<<<<<
  *                 key_ = key_[1:]
  * 
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_key_, __pyx_n_s_startswith); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1104, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_key_, __pyx_n_s_startswith); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1112, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__21, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1104, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__21, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1112, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1104, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1112, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     if (__pyx_t_1) {
 
-      /* "adios.pyx":1105
+      /* "adios.pyx":1113
  * 
  *             if key_.startswith('/'):
  *                 key_ = key_[1:]             # <<<<<<<<<<<<<<
  * 
  *             if key_ in self.vars.keys():
  */
-      __pyx_t_7 = __Pyx_PyObject_GetSlice(__pyx_v_key_, 1, 0, NULL, NULL, &__pyx_slice__22, 1, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1105, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetSlice(__pyx_v_key_, 1, 0, NULL, NULL, &__pyx_slice__22, 1, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1113, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF_SET(__pyx_v_key_, __pyx_t_7);
       __pyx_t_7 = 0;
 
-      /* "adios.pyx":1104
+      /* "adios.pyx":1112
  *                 raise TypeError("Unhashable type")
  * 
  *             if key_.startswith('/'):             # <<<<<<<<<<<<<<
@@ -16573,17 +16841,17 @@ static PyObject *__pyx_pf_5adios_4file_16__getitem__(struct __pyx_obj_5adios_fil
  */
     }
 
-    /* "adios.pyx":1107
+    /* "adios.pyx":1115
  *                 key_ = key_[1:]
  * 
  *             if key_ in self.vars.keys():             # <<<<<<<<<<<<<<
  *                 return self.vars.get(key_)
  * 
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1107, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1115, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_8 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
       __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_3);
       if (likely(__pyx_t_8)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -16593,19 +16861,19 @@ static PyObject *__pyx_pf_5adios_4file_16__getitem__(struct __pyx_obj_5adios_fil
       }
     }
     if (__pyx_t_8) {
-      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1107, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1115, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     } else {
-      __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1107, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1115, __pyx_L1_error)
     }
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_1 = (__Pyx_PySequence_ContainsTF(__pyx_v_key_, __pyx_t_7, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1107, __pyx_L1_error)
+    __pyx_t_1 = (__Pyx_PySequence_ContainsTF(__pyx_v_key_, __pyx_t_7, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1115, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
 
-      /* "adios.pyx":1108
+      /* "adios.pyx":1116
  * 
  *             if key_ in self.vars.keys():
  *                 return self.vars.get(key_)             # <<<<<<<<<<<<<<
@@ -16613,10 +16881,10 @@ static PyObject *__pyx_pf_5adios_4file_16__getitem__(struct __pyx_obj_5adios_fil
  *             if key_ in self.attrs.keys():
  */
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1108, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1116, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __pyx_t_8 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
         __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_3);
         if (likely(__pyx_t_8)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -16626,18 +16894,36 @@ static PyObject *__pyx_pf_5adios_4file_16__getitem__(struct __pyx_obj_5adios_fil
         }
       }
       if (!__pyx_t_8) {
-        __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_key_); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1108, __pyx_L1_error)
+        __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_key_); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1116, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
       } else {
-        __pyx_t_9 = PyTuple_New(1+1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1108, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_9);
-        __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_8); __pyx_t_8 = NULL;
-        __Pyx_INCREF(__pyx_v_key_);
-        __Pyx_GIVEREF(__pyx_v_key_);
-        PyTuple_SET_ITEM(__pyx_t_9, 0+1, __pyx_v_key_);
-        __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_9, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1108, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_7);
-        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+        #if CYTHON_FAST_PYCALL
+        if (PyFunction_Check(__pyx_t_3)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_v_key_};
+          __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1116, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+          __Pyx_GOTREF(__pyx_t_7);
+        } else
+        #endif
+        #if CYTHON_FAST_PYCCALL
+        if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_v_key_};
+          __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1116, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+          __Pyx_GOTREF(__pyx_t_7);
+        } else
+        #endif
+        {
+          __pyx_t_9 = PyTuple_New(1+1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1116, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_9);
+          __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_8); __pyx_t_8 = NULL;
+          __Pyx_INCREF(__pyx_v_key_);
+          __Pyx_GIVEREF(__pyx_v_key_);
+          PyTuple_SET_ITEM(__pyx_t_9, 0+1, __pyx_v_key_);
+          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_9, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1116, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_7);
+          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+        }
       }
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_r = __pyx_t_7;
@@ -16645,7 +16931,7 @@ static PyObject *__pyx_pf_5adios_4file_16__getitem__(struct __pyx_obj_5adios_fil
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       goto __pyx_L0;
 
-      /* "adios.pyx":1107
+      /* "adios.pyx":1115
  *                 key_ = key_[1:]
  * 
  *             if key_ in self.vars.keys():             # <<<<<<<<<<<<<<
@@ -16654,17 +16940,17 @@ static PyObject *__pyx_pf_5adios_4file_16__getitem__(struct __pyx_obj_5adios_fil
  */
     }
 
-    /* "adios.pyx":1110
+    /* "adios.pyx":1118
  *                 return self.vars.get(key_)
  * 
  *             if key_ in self.attrs.keys():             # <<<<<<<<<<<<<<
  *                 return self.attrs.get(key_)
  * 
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1110, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1118, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_9 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
       __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_3);
       if (likely(__pyx_t_9)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -16674,19 +16960,19 @@ static PyObject *__pyx_pf_5adios_4file_16__getitem__(struct __pyx_obj_5adios_fil
       }
     }
     if (__pyx_t_9) {
-      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1110, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1118, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     } else {
-      __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1110, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1118, __pyx_L1_error)
     }
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_v_key_, __pyx_t_7, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1110, __pyx_L1_error)
+    __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_v_key_, __pyx_t_7, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1118, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __pyx_t_1 = (__pyx_t_2 != 0);
     if (__pyx_t_1) {
 
-      /* "adios.pyx":1111
+      /* "adios.pyx":1119
  * 
  *             if key_ in self.attrs.keys():
  *                 return self.attrs.get(key_)             # <<<<<<<<<<<<<<
@@ -16694,10 +16980,10 @@ static PyObject *__pyx_pf_5adios_4file_16__getitem__(struct __pyx_obj_5adios_fil
  *             if '/'+key_ in self.vars.keys():
  */
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1111, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1119, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __pyx_t_9 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
         __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_3);
         if (likely(__pyx_t_9)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -16707,18 +16993,36 @@ static PyObject *__pyx_pf_5adios_4file_16__getitem__(struct __pyx_obj_5adios_fil
         }
       }
       if (!__pyx_t_9) {
-        __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_key_); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1111, __pyx_L1_error)
+        __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_key_); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1119, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
       } else {
-        __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1111, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_8);
-        __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_9); __pyx_t_9 = NULL;
-        __Pyx_INCREF(__pyx_v_key_);
-        __Pyx_GIVEREF(__pyx_v_key_);
-        PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_v_key_);
-        __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_8, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1111, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_7);
-        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        #if CYTHON_FAST_PYCALL
+        if (PyFunction_Check(__pyx_t_3)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_9, __pyx_v_key_};
+          __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1119, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+          __Pyx_GOTREF(__pyx_t_7);
+        } else
+        #endif
+        #if CYTHON_FAST_PYCCALL
+        if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_9, __pyx_v_key_};
+          __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1119, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+          __Pyx_GOTREF(__pyx_t_7);
+        } else
+        #endif
+        {
+          __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1119, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_8);
+          __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_9); __pyx_t_9 = NULL;
+          __Pyx_INCREF(__pyx_v_key_);
+          __Pyx_GIVEREF(__pyx_v_key_);
+          PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_v_key_);
+          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_8, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1119, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_7);
+          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        }
       }
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_r = __pyx_t_7;
@@ -16726,7 +17030,7 @@ static PyObject *__pyx_pf_5adios_4file_16__getitem__(struct __pyx_obj_5adios_fil
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       goto __pyx_L0;
 
-      /* "adios.pyx":1110
+      /* "adios.pyx":1118
  *                 return self.vars.get(key_)
  * 
  *             if key_ in self.attrs.keys():             # <<<<<<<<<<<<<<
@@ -16735,19 +17039,19 @@ static PyObject *__pyx_pf_5adios_4file_16__getitem__(struct __pyx_obj_5adios_fil
  */
     }
 
-    /* "adios.pyx":1113
+    /* "adios.pyx":1121
  *                 return self.attrs.get(key_)
  * 
  *             if '/'+key_ in self.vars.keys():             # <<<<<<<<<<<<<<
  *                 return self.vars.get('/'+key_)
  * 
  */
-    __pyx_t_7 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1113, __pyx_L1_error)
+    __pyx_t_7 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1121, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
-    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1113, __pyx_L1_error)
+    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1121, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __pyx_t_9 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_8))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) {
       __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_8);
       if (likely(__pyx_t_9)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
@@ -16757,20 +17061,20 @@ static PyObject *__pyx_pf_5adios_4file_16__getitem__(struct __pyx_obj_5adios_fil
       }
     }
     if (__pyx_t_9) {
-      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1113, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1121, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     } else {
-      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1113, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1121, __pyx_L1_error)
     }
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-    __pyx_t_1 = (__Pyx_PySequence_ContainsTF(__pyx_t_7, __pyx_t_3, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1113, __pyx_L1_error)
+    __pyx_t_1 = (__Pyx_PySequence_ContainsTF(__pyx_t_7, __pyx_t_3, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1121, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
 
-      /* "adios.pyx":1114
+      /* "adios.pyx":1122
  * 
  *             if '/'+key_ in self.vars.keys():
  *                 return self.vars.get('/'+key_)             # <<<<<<<<<<<<<<
@@ -16778,12 +17082,12 @@ static PyObject *__pyx_pf_5adios_4file_16__getitem__(struct __pyx_obj_5adios_fil
  *             if '/'+key_ in self.attrs.keys():
  */
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_get); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1114, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_get); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1122, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      __pyx_t_8 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1114, __pyx_L1_error)
+      __pyx_t_8 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1122, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
       __pyx_t_9 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_7))) {
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
         __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_7);
         if (likely(__pyx_t_9)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
@@ -16793,19 +17097,39 @@ static PyObject *__pyx_pf_5adios_4file_16__getitem__(struct __pyx_obj_5adios_fil
         }
       }
       if (!__pyx_t_9) {
-        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1114, __pyx_L1_error)
+        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1122, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
         __Pyx_GOTREF(__pyx_t_3);
       } else {
-        __pyx_t_10 = PyTuple_New(1+1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1114, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_10);
-        __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_9); __pyx_t_9 = NULL;
-        __Pyx_GIVEREF(__pyx_t_8);
-        PyTuple_SET_ITEM(__pyx_t_10, 0+1, __pyx_t_8);
-        __pyx_t_8 = 0;
-        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1114, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_3);
-        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+        #if CYTHON_FAST_PYCALL
+        if (PyFunction_Check(__pyx_t_7)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_9, __pyx_t_8};
+          __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1122, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        } else
+        #endif
+        #if CYTHON_FAST_PYCCALL
+        if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_9, __pyx_t_8};
+          __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1122, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        } else
+        #endif
+        {
+          __pyx_t_10 = PyTuple_New(1+1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1122, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_10);
+          __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_9); __pyx_t_9 = NULL;
+          __Pyx_GIVEREF(__pyx_t_8);
+          PyTuple_SET_ITEM(__pyx_t_10, 0+1, __pyx_t_8);
+          __pyx_t_8 = 0;
+          __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1122, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+        }
       }
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       __pyx_r = __pyx_t_3;
@@ -16813,7 +17137,7 @@ static PyObject *__pyx_pf_5adios_4file_16__getitem__(struct __pyx_obj_5adios_fil
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       goto __pyx_L0;
 
-      /* "adios.pyx":1113
+      /* "adios.pyx":1121
  *                 return self.attrs.get(key_)
  * 
  *             if '/'+key_ in self.vars.keys():             # <<<<<<<<<<<<<<
@@ -16822,19 +17146,19 @@ static PyObject *__pyx_pf_5adios_4file_16__getitem__(struct __pyx_obj_5adios_fil
  */
     }
 
-    /* "adios.pyx":1116
+    /* "adios.pyx":1124
  *                 return self.vars.get('/'+key_)
  * 
  *             if '/'+key_ in self.attrs.keys():             # <<<<<<<<<<<<<<
  *                 return self.attrs.get('/'+key_)
  * 
  */
-    __pyx_t_3 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1116, __pyx_L1_error)
+    __pyx_t_3 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1124, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1116, __pyx_L1_error)
+    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1124, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_10);
     __pyx_t_8 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_10))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_10))) {
       __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_10);
       if (likely(__pyx_t_8)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
@@ -16844,20 +17168,20 @@ static PyObject *__pyx_pf_5adios_4file_16__getitem__(struct __pyx_obj_5adios_fil
       }
     }
     if (__pyx_t_8) {
-      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1116, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1124, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     } else {
-      __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_10); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1116, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_10); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1124, __pyx_L1_error)
     }
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
-    __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_3, __pyx_t_7, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1116, __pyx_L1_error)
+    __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_3, __pyx_t_7, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1124, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __pyx_t_1 = (__pyx_t_2 != 0);
     if (__pyx_t_1) {
 
-      /* "adios.pyx":1117
+      /* "adios.pyx":1125
  * 
  *             if '/'+key_ in self.attrs.keys():
  *                 return self.attrs.get('/'+key_)             # <<<<<<<<<<<<<<
@@ -16865,12 +17189,12 @@ static PyObject *__pyx_pf_5adios_4file_16__getitem__(struct __pyx_obj_5adios_fil
  *             for name in self.vars.keys():
  */
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1117, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1125, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_10 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1117, __pyx_L1_error)
+      __pyx_t_10 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1125, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_10);
       __pyx_t_8 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
         __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_3);
         if (likely(__pyx_t_8)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -16880,19 +17204,39 @@ static PyObject *__pyx_pf_5adios_4file_16__getitem__(struct __pyx_obj_5adios_fil
         }
       }
       if (!__pyx_t_8) {
-        __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_10); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1117, __pyx_L1_error)
+        __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_10); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1125, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
         __Pyx_GOTREF(__pyx_t_7);
       } else {
-        __pyx_t_9 = PyTuple_New(1+1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1117, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_9);
-        __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_8); __pyx_t_8 = NULL;
-        __Pyx_GIVEREF(__pyx_t_10);
-        PyTuple_SET_ITEM(__pyx_t_9, 0+1, __pyx_t_10);
-        __pyx_t_10 = 0;
-        __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_9, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1117, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_7);
-        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+        #if CYTHON_FAST_PYCALL
+        if (PyFunction_Check(__pyx_t_3)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_t_10};
+          __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1125, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+          __Pyx_GOTREF(__pyx_t_7);
+          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+        } else
+        #endif
+        #if CYTHON_FAST_PYCCALL
+        if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_t_10};
+          __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1125, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+          __Pyx_GOTREF(__pyx_t_7);
+          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+        } else
+        #endif
+        {
+          __pyx_t_9 = PyTuple_New(1+1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1125, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_9);
+          __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_8); __pyx_t_8 = NULL;
+          __Pyx_GIVEREF(__pyx_t_10);
+          PyTuple_SET_ITEM(__pyx_t_9, 0+1, __pyx_t_10);
+          __pyx_t_10 = 0;
+          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_9, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1125, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_7);
+          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+        }
       }
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_r = __pyx_t_7;
@@ -16900,7 +17244,7 @@ static PyObject *__pyx_pf_5adios_4file_16__getitem__(struct __pyx_obj_5adios_fil
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       goto __pyx_L0;
 
-      /* "adios.pyx":1116
+      /* "adios.pyx":1124
  *                 return self.vars.get('/'+key_)
  * 
  *             if '/'+key_ in self.attrs.keys():             # <<<<<<<<<<<<<<
@@ -16909,17 +17253,17 @@ static PyObject *__pyx_pf_5adios_4file_16__getitem__(struct __pyx_obj_5adios_fil
  */
     }
 
-    /* "adios.pyx":1119
+    /* "adios.pyx":1127
  *                 return self.attrs.get('/'+key_)
  * 
  *             for name in self.vars.keys():             # <<<<<<<<<<<<<<
  *                 #if (key_ == os.path.dirname(name)) or ('/' + key_ == os.path.dirname(name)):
  *                 if name.startswith(key_) or name.startswith('/'+key_):
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1119, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1127, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_9 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
       __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_3);
       if (likely(__pyx_t_9)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -16929,10 +17273,10 @@ static PyObject *__pyx_pf_5adios_4file_16__getitem__(struct __pyx_obj_5adios_fil
       }
     }
     if (__pyx_t_9) {
-      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1119, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1127, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     } else {
-      __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1119, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1127, __pyx_L1_error)
     }
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -16940,27 +17284,27 @@ static PyObject *__pyx_pf_5adios_4file_16__getitem__(struct __pyx_obj_5adios_fil
       __pyx_t_3 = __pyx_t_7; __Pyx_INCREF(__pyx_t_3); __pyx_t_11 = 0;
       __pyx_t_12 = NULL;
     } else {
-      __pyx_t_11 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1119, __pyx_L1_error)
+      __pyx_t_11 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1127, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_12 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1119, __pyx_L1_error)
+      __pyx_t_12 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1127, __pyx_L1_error)
     }
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     for (;;) {
       if (likely(!__pyx_t_12)) {
         if (likely(PyList_CheckExact(__pyx_t_3))) {
           if (__pyx_t_11 >= PyList_GET_SIZE(__pyx_t_3)) break;
-          #if CYTHON_COMPILING_IN_CPYTHON
-          __pyx_t_7 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_11); __Pyx_INCREF(__pyx_t_7); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 1119, __pyx_L1_error)
+          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+          __pyx_t_7 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_11); __Pyx_INCREF(__pyx_t_7); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 1127, __pyx_L1_error)
           #else
-          __pyx_t_7 = PySequence_ITEM(__pyx_t_3, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1119, __pyx_L1_error)
+          __pyx_t_7 = PySequence_ITEM(__pyx_t_3, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1127, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_7);
           #endif
         } else {
           if (__pyx_t_11 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
-          #if CYTHON_COMPILING_IN_CPYTHON
-          __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_11); __Pyx_INCREF(__pyx_t_7); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 1119, __pyx_L1_error)
+          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+          __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_11); __Pyx_INCREF(__pyx_t_7); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 1127, __pyx_L1_error)
           #else
-          __pyx_t_7 = PySequence_ITEM(__pyx_t_3, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1119, __pyx_L1_error)
+          __pyx_t_7 = PySequence_ITEM(__pyx_t_3, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1127, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_7);
           #endif
         }
@@ -16970,7 +17314,7 @@ static PyObject *__pyx_pf_5adios_4file_16__getitem__(struct __pyx_obj_5adios_fil
           PyObject* exc_type = PyErr_Occurred();
           if (exc_type) {
             if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-            else __PYX_ERR(0, 1119, __pyx_L1_error)
+            else __PYX_ERR(0, 1127, __pyx_L1_error)
           }
           break;
         }
@@ -16979,17 +17323,17 @@ static PyObject *__pyx_pf_5adios_4file_16__getitem__(struct __pyx_obj_5adios_fil
       __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_7);
       __pyx_t_7 = 0;
 
-      /* "adios.pyx":1121
+      /* "adios.pyx":1129
  *             for name in self.vars.keys():
  *                 #if (key_ == os.path.dirname(name)) or ('/' + key_ == os.path.dirname(name)):
  *                 if name.startswith(key_) or name.startswith('/'+key_):             # <<<<<<<<<<<<<<
  *                     return group(self, key_)
  * 
  */
-      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_startswith); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1121, __pyx_L1_error)
+      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_startswith); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1129, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
       __pyx_t_10 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_9))) {
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
         __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_9);
         if (likely(__pyx_t_10)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
@@ -16999,33 +17343,51 @@ static PyObject *__pyx_pf_5adios_4file_16__getitem__(struct __pyx_obj_5adios_fil
         }
       }
       if (!__pyx_t_10) {
-        __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_v_key_); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1121, __pyx_L1_error)
+        __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_v_key_); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1129, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
       } else {
-        __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1121, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_8);
-        __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_10); __pyx_t_10 = NULL;
-        __Pyx_INCREF(__pyx_v_key_);
-        __Pyx_GIVEREF(__pyx_v_key_);
-        PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_v_key_);
-        __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_8, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1121, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_7);
-        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        #if CYTHON_FAST_PYCALL
+        if (PyFunction_Check(__pyx_t_9)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_10, __pyx_v_key_};
+          __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_9, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1129, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
+          __Pyx_GOTREF(__pyx_t_7);
+        } else
+        #endif
+        #if CYTHON_FAST_PYCCALL
+        if (__Pyx_PyFastCFunction_Check(__pyx_t_9)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_10, __pyx_v_key_};
+          __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_9, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1129, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
+          __Pyx_GOTREF(__pyx_t_7);
+        } else
+        #endif
+        {
+          __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1129, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_8);
+          __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_10); __pyx_t_10 = NULL;
+          __Pyx_INCREF(__pyx_v_key_);
+          __Pyx_GIVEREF(__pyx_v_key_);
+          PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_v_key_);
+          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_8, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1129, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_7);
+          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        }
       }
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1121, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1129, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       if (!__pyx_t_2) {
       } else {
         __pyx_t_1 = __pyx_t_2;
         goto __pyx_L16_bool_binop_done;
       }
-      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_startswith); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1121, __pyx_L1_error)
+      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_startswith); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1129, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
-      __pyx_t_8 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1121, __pyx_L1_error)
+      __pyx_t_8 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1129, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
       __pyx_t_10 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_9))) {
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
         __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_9);
         if (likely(__pyx_t_10)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
@@ -17035,28 +17397,48 @@ static PyObject *__pyx_pf_5adios_4file_16__getitem__(struct __pyx_obj_5adios_fil
         }
       }
       if (!__pyx_t_10) {
-        __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1121, __pyx_L1_error)
+        __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1129, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
         __Pyx_GOTREF(__pyx_t_7);
       } else {
-        __pyx_t_13 = PyTuple_New(1+1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1121, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_13);
-        __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_10); __pyx_t_10 = NULL;
-        __Pyx_GIVEREF(__pyx_t_8);
-        PyTuple_SET_ITEM(__pyx_t_13, 0+1, __pyx_t_8);
-        __pyx_t_8 = 0;
-        __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_13, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1121, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_7);
-        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+        #if CYTHON_FAST_PYCALL
+        if (PyFunction_Check(__pyx_t_9)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_10, __pyx_t_8};
+          __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_9, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1129, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
+          __Pyx_GOTREF(__pyx_t_7);
+          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        } else
+        #endif
+        #if CYTHON_FAST_PYCCALL
+        if (__Pyx_PyFastCFunction_Check(__pyx_t_9)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_10, __pyx_t_8};
+          __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_9, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1129, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
+          __Pyx_GOTREF(__pyx_t_7);
+          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        } else
+        #endif
+        {
+          __pyx_t_13 = PyTuple_New(1+1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1129, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_13);
+          __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_10); __pyx_t_10 = NULL;
+          __Pyx_GIVEREF(__pyx_t_8);
+          PyTuple_SET_ITEM(__pyx_t_13, 0+1, __pyx_t_8);
+          __pyx_t_8 = 0;
+          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_13, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1129, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_7);
+          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+        }
       }
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1121, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1129, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       __pyx_t_1 = __pyx_t_2;
       __pyx_L16_bool_binop_done:;
       if (__pyx_t_1) {
 
-        /* "adios.pyx":1122
+        /* "adios.pyx":1130
  *                 #if (key_ == os.path.dirname(name)) or ('/' + key_ == os.path.dirname(name)):
  *                 if name.startswith(key_) or name.startswith('/'+key_):
  *                     return group(self, key_)             # <<<<<<<<<<<<<<
@@ -17064,7 +17446,7 @@ static PyObject *__pyx_pf_5adios_4file_16__getitem__(struct __pyx_obj_5adios_fil
  *             for name in self.attrs.keys():
  */
         __Pyx_XDECREF(__pyx_r);
-        __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1122, __pyx_L1_error)
+        __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1130, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
         __Pyx_INCREF(((PyObject *)__pyx_v_self));
         __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
@@ -17072,7 +17454,7 @@ static PyObject *__pyx_pf_5adios_4file_16__getitem__(struct __pyx_obj_5adios_fil
         __Pyx_INCREF(__pyx_v_key_);
         __Pyx_GIVEREF(__pyx_v_key_);
         PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_v_key_);
-        __pyx_t_9 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5adios_group), __pyx_t_7, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1122, __pyx_L1_error)
+        __pyx_t_9 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5adios_group), __pyx_t_7, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1130, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_9);
         __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
         __pyx_r = __pyx_t_9;
@@ -17081,7 +17463,7 @@ static PyObject *__pyx_pf_5adios_4file_16__getitem__(struct __pyx_obj_5adios_fil
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
         goto __pyx_L0;
 
-        /* "adios.pyx":1121
+        /* "adios.pyx":1129
  *             for name in self.vars.keys():
  *                 #if (key_ == os.path.dirname(name)) or ('/' + key_ == os.path.dirname(name)):
  *                 if name.startswith(key_) or name.startswith('/'+key_):             # <<<<<<<<<<<<<<
@@ -17090,7 +17472,7 @@ static PyObject *__pyx_pf_5adios_4file_16__getitem__(struct __pyx_obj_5adios_fil
  */
       }
 
-      /* "adios.pyx":1119
+      /* "adios.pyx":1127
  *                 return self.attrs.get('/'+key_)
  * 
  *             for name in self.vars.keys():             # <<<<<<<<<<<<<<
@@ -17100,17 +17482,17 @@ static PyObject *__pyx_pf_5adios_4file_16__getitem__(struct __pyx_obj_5adios_fil
     }
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "adios.pyx":1124
+    /* "adios.pyx":1132
  *                     return group(self, key_)
  * 
  *             for name in self.attrs.keys():             # <<<<<<<<<<<<<<
  *                 #if (key_ == os.path.dirname(name)) or ('/' + key_ == os.path.dirname(name)):
  *                 if name.startswith(key_) or name.startswith('/'+key_):
  */
-    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1124, __pyx_L1_error)
+    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1132, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
     __pyx_t_7 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_9))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
       __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_9);
       if (likely(__pyx_t_7)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
@@ -17120,10 +17502,10 @@ static PyObject *__pyx_pf_5adios_4file_16__getitem__(struct __pyx_obj_5adios_fil
       }
     }
     if (__pyx_t_7) {
-      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1124, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1132, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     } else {
-      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1124, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1132, __pyx_L1_error)
     }
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
@@ -17131,27 +17513,27 @@ static PyObject *__pyx_pf_5adios_4file_16__getitem__(struct __pyx_obj_5adios_fil
       __pyx_t_9 = __pyx_t_3; __Pyx_INCREF(__pyx_t_9); __pyx_t_11 = 0;
       __pyx_t_12 = NULL;
     } else {
-      __pyx_t_11 = -1; __pyx_t_9 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1124, __pyx_L1_error)
+      __pyx_t_11 = -1; __pyx_t_9 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1132, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
-      __pyx_t_12 = Py_TYPE(__pyx_t_9)->tp_iternext; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1124, __pyx_L1_error)
+      __pyx_t_12 = Py_TYPE(__pyx_t_9)->tp_iternext; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1132, __pyx_L1_error)
     }
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     for (;;) {
       if (likely(!__pyx_t_12)) {
         if (likely(PyList_CheckExact(__pyx_t_9))) {
           if (__pyx_t_11 >= PyList_GET_SIZE(__pyx_t_9)) break;
-          #if CYTHON_COMPILING_IN_CPYTHON
-          __pyx_t_3 = PyList_GET_ITEM(__pyx_t_9, __pyx_t_11); __Pyx_INCREF(__pyx_t_3); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 1124, __pyx_L1_error)
+          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+          __pyx_t_3 = PyList_GET_ITEM(__pyx_t_9, __pyx_t_11); __Pyx_INCREF(__pyx_t_3); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 1132, __pyx_L1_error)
           #else
-          __pyx_t_3 = PySequence_ITEM(__pyx_t_9, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1124, __pyx_L1_error)
+          __pyx_t_3 = PySequence_ITEM(__pyx_t_9, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1132, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_3);
           #endif
         } else {
           if (__pyx_t_11 >= PyTuple_GET_SIZE(__pyx_t_9)) break;
-          #if CYTHON_COMPILING_IN_CPYTHON
-          __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_9, __pyx_t_11); __Pyx_INCREF(__pyx_t_3); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 1124, __pyx_L1_error)
+          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+          __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_9, __pyx_t_11); __Pyx_INCREF(__pyx_t_3); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 1132, __pyx_L1_error)
           #else
-          __pyx_t_3 = PySequence_ITEM(__pyx_t_9, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1124, __pyx_L1_error)
+          __pyx_t_3 = PySequence_ITEM(__pyx_t_9, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1132, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_3);
           #endif
         }
@@ -17161,7 +17543,7 @@ static PyObject *__pyx_pf_5adios_4file_16__getitem__(struct __pyx_obj_5adios_fil
           PyObject* exc_type = PyErr_Occurred();
           if (exc_type) {
             if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-            else __PYX_ERR(0, 1124, __pyx_L1_error)
+            else __PYX_ERR(0, 1132, __pyx_L1_error)
           }
           break;
         }
@@ -17170,17 +17552,17 @@ static PyObject *__pyx_pf_5adios_4file_16__getitem__(struct __pyx_obj_5adios_fil
       __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_3);
       __pyx_t_3 = 0;
 
-      /* "adios.pyx":1126
+      /* "adios.pyx":1134
  *             for name in self.attrs.keys():
  *                 #if (key_ == os.path.dirname(name)) or ('/' + key_ == os.path.dirname(name)):
  *                 if name.startswith(key_) or name.startswith('/'+key_):             # <<<<<<<<<<<<<<
  *                     return group(self, key_)
  * 
  */
-      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_startswith); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1126, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_startswith); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1134, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __pyx_t_13 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_7))) {
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
         __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_7);
         if (likely(__pyx_t_13)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
@@ -17190,33 +17572,51 @@ static PyObject *__pyx_pf_5adios_4file_16__getitem__(struct __pyx_obj_5adios_fil
         }
       }
       if (!__pyx_t_13) {
-        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_v_key_); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1126, __pyx_L1_error)
+        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_v_key_); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1134, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
       } else {
-        __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1126, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_8);
-        __Pyx_GIVEREF(__pyx_t_13); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_13); __pyx_t_13 = NULL;
-        __Pyx_INCREF(__pyx_v_key_);
-        __Pyx_GIVEREF(__pyx_v_key_);
-        PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_v_key_);
-        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1126, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_3);
-        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        #if CYTHON_FAST_PYCALL
+        if (PyFunction_Check(__pyx_t_7)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_13, __pyx_v_key_};
+          __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1134, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
+          __Pyx_GOTREF(__pyx_t_3);
+        } else
+        #endif
+        #if CYTHON_FAST_PYCCALL
+        if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_13, __pyx_v_key_};
+          __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1134, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
+          __Pyx_GOTREF(__pyx_t_3);
+        } else
+        #endif
+        {
+          __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1134, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_8);
+          __Pyx_GIVEREF(__pyx_t_13); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_13); __pyx_t_13 = NULL;
+          __Pyx_INCREF(__pyx_v_key_);
+          __Pyx_GIVEREF(__pyx_v_key_);
+          PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_v_key_);
+          __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1134, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        }
       }
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1126, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1134, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       if (!__pyx_t_2) {
       } else {
         __pyx_t_1 = __pyx_t_2;
         goto __pyx_L21_bool_binop_done;
       }
-      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_startswith); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1126, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_startswith); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1134, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      __pyx_t_8 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1126, __pyx_L1_error)
+      __pyx_t_8 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1134, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
       __pyx_t_13 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_7))) {
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
         __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_7);
         if (likely(__pyx_t_13)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
@@ -17226,28 +17626,48 @@ static PyObject *__pyx_pf_5adios_4file_16__getitem__(struct __pyx_obj_5adios_fil
         }
       }
       if (!__pyx_t_13) {
-        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1126, __pyx_L1_error)
+        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1134, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
         __Pyx_GOTREF(__pyx_t_3);
       } else {
-        __pyx_t_10 = PyTuple_New(1+1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1126, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_10);
-        __Pyx_GIVEREF(__pyx_t_13); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_13); __pyx_t_13 = NULL;
-        __Pyx_GIVEREF(__pyx_t_8);
-        PyTuple_SET_ITEM(__pyx_t_10, 0+1, __pyx_t_8);
-        __pyx_t_8 = 0;
-        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1126, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_3);
-        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+        #if CYTHON_FAST_PYCALL
+        if (PyFunction_Check(__pyx_t_7)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_13, __pyx_t_8};
+          __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1134, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
+          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        } else
+        #endif
+        #if CYTHON_FAST_PYCCALL
+        if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_13, __pyx_t_8};
+          __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1134, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
+          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        } else
+        #endif
+        {
+          __pyx_t_10 = PyTuple_New(1+1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1134, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_10);
+          __Pyx_GIVEREF(__pyx_t_13); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_13); __pyx_t_13 = NULL;
+          __Pyx_GIVEREF(__pyx_t_8);
+          PyTuple_SET_ITEM(__pyx_t_10, 0+1, __pyx_t_8);
+          __pyx_t_8 = 0;
+          __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1134, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+        }
       }
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1126, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1134, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_t_1 = __pyx_t_2;
       __pyx_L21_bool_binop_done:;
       if (__pyx_t_1) {
 
-        /* "adios.pyx":1127
+        /* "adios.pyx":1135
  *                 #if (key_ == os.path.dirname(name)) or ('/' + key_ == os.path.dirname(name)):
  *                 if name.startswith(key_) or name.startswith('/'+key_):
  *                     return group(self, key_)             # <<<<<<<<<<<<<<
@@ -17255,7 +17675,7 @@ static PyObject *__pyx_pf_5adios_4file_16__getitem__(struct __pyx_obj_5adios_fil
  *         raise KeyError(key_)
  */
         __Pyx_XDECREF(__pyx_r);
-        __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1127, __pyx_L1_error)
+        __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1135, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
         __Pyx_INCREF(((PyObject *)__pyx_v_self));
         __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
@@ -17263,7 +17683,7 @@ static PyObject *__pyx_pf_5adios_4file_16__getitem__(struct __pyx_obj_5adios_fil
         __Pyx_INCREF(__pyx_v_key_);
         __Pyx_GIVEREF(__pyx_v_key_);
         PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_key_);
-        __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5adios_group), __pyx_t_3, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1127, __pyx_L1_error)
+        __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5adios_group), __pyx_t_3, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1135, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
         __pyx_r = __pyx_t_7;
@@ -17272,7 +17692,7 @@ static PyObject *__pyx_pf_5adios_4file_16__getitem__(struct __pyx_obj_5adios_fil
         __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
         goto __pyx_L0;
 
-        /* "adios.pyx":1126
+        /* "adios.pyx":1134
  *             for name in self.attrs.keys():
  *                 #if (key_ == os.path.dirname(name)) or ('/' + key_ == os.path.dirname(name)):
  *                 if name.startswith(key_) or name.startswith('/'+key_):             # <<<<<<<<<<<<<<
@@ -17281,7 +17701,7 @@ static PyObject *__pyx_pf_5adios_4file_16__getitem__(struct __pyx_obj_5adios_fil
  */
       }
 
-      /* "adios.pyx":1124
+      /* "adios.pyx":1132
  *                     return group(self, key_)
  * 
  *             for name in self.attrs.keys():             # <<<<<<<<<<<<<<
@@ -17291,7 +17711,7 @@ static PyObject *__pyx_pf_5adios_4file_16__getitem__(struct __pyx_obj_5adios_fil
     }
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-    /* "adios.pyx":1100
+    /* "adios.pyx":1108
  *             raise KeyError(varname)
  * 
  *         for key_ in varname:             # <<<<<<<<<<<<<<
@@ -17301,27 +17721,27 @@ static PyObject *__pyx_pf_5adios_4file_16__getitem__(struct __pyx_obj_5adios_fil
   }
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "adios.pyx":1129
+  /* "adios.pyx":1137
  *                     return group(self, key_)
  * 
  *         raise KeyError(key_)             # <<<<<<<<<<<<<<
  * 
  * 
  */
-  if (unlikely(!__pyx_v_key_)) { __Pyx_RaiseUnboundLocalError("key_"); __PYX_ERR(0, 1129, __pyx_L1_error) }
-  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1129, __pyx_L1_error)
+  if (unlikely(!__pyx_v_key_)) { __Pyx_RaiseUnboundLocalError("key_"); __PYX_ERR(0, 1137, __pyx_L1_error) }
+  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1137, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_INCREF(__pyx_v_key_);
   __Pyx_GIVEREF(__pyx_v_key_);
   PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_key_);
-  __pyx_t_9 = __Pyx_PyObject_Call(__pyx_builtin_KeyError, __pyx_t_5, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1129, __pyx_L1_error)
+  __pyx_t_9 = __Pyx_PyObject_Call(__pyx_builtin_KeyError, __pyx_t_5, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1137, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_Raise(__pyx_t_9, 0, 0, 0);
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-  __PYX_ERR(0, 1129, __pyx_L1_error)
+  __PYX_ERR(0, 1137, __pyx_L1_error)
 
-  /* "adios.pyx":1083
+  /* "adios.pyx":1091
  *         return val
  * 
  *     def __getitem__(self, varname):             # <<<<<<<<<<<<<<
@@ -17349,7 +17769,7 @@ static PyObject *__pyx_pf_5adios_4file_16__getitem__(struct __pyx_obj_5adios_fil
   return __pyx_r;
 }
 
-/* "adios.pyx":1132
+/* "adios.pyx":1140
  * 
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -17388,7 +17808,7 @@ static PyObject *__pyx_pf_5adios_4file_18__repr__(struct __pyx_obj_5adios_file *
   PyObject *__pyx_t_9 = NULL;
   __Pyx_RefNannySetupContext("__repr__", 0);
 
-  /* "adios.pyx":1134
+  /* "adios.pyx":1142
  *     def __repr__(self):
  *         """ Return string representation. """
  *         return ("AdiosFile (path=%r, nvars=%r, vars=%r, nattrs=%r, attrs=%r, "             # <<<<<<<<<<<<<<
@@ -17397,7 +17817,7 @@ static PyObject *__pyx_pf_5adios_4file_18__repr__(struct __pyx_obj_5adios_file *
  */
   __Pyx_XDECREF(__pyx_r);
 
-  /* "adios.pyx":1136
+  /* "adios.pyx":1144
  *         return ("AdiosFile (path=%r, nvars=%r, vars=%r, nattrs=%r, attrs=%r, "
  *                 "current_step=%r, last_step=%r, file_size=%r)") % \
  *                 (self.fp.path if self.fp != NULL else None,             # <<<<<<<<<<<<<<
@@ -17405,7 +17825,7 @@ static PyObject *__pyx_pf_5adios_4file_18__repr__(struct __pyx_obj_5adios_file *
  *                  self.vars.keys(),
  */
   if (((__pyx_v_self->fp != NULL) != 0)) {
-    __pyx_t_2 = __Pyx_PyBytes_FromString(__pyx_v_self->fp->path); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1136, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyBytes_FromString(__pyx_v_self->fp->path); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1144, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_t_1 = __pyx_t_2;
     __pyx_t_2 = 0;
@@ -17414,27 +17834,27 @@ static PyObject *__pyx_pf_5adios_4file_18__repr__(struct __pyx_obj_5adios_file *
     __pyx_t_1 = Py_None;
   }
 
-  /* "adios.pyx":1137
+  /* "adios.pyx":1145
  *                 "current_step=%r, last_step=%r, file_size=%r)") % \
  *                 (self.fp.path if self.fp != NULL else None,
  *                  self.nvars,             # <<<<<<<<<<<<<<
  *                  self.vars.keys(),
  *                  self.nattrs,
  */
-  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_self->nvars); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1137, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_self->nvars); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1145, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
 
-  /* "adios.pyx":1138
+  /* "adios.pyx":1146
  *                 (self.fp.path if self.fp != NULL else None,
  *                  self.nvars,
  *                  self.vars.keys(),             # <<<<<<<<<<<<<<
  *                  self.nattrs,
  *                  self.attrs.keys(),
  */
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1138, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1146, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_t_5 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
     __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
     if (likely(__pyx_t_5)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
@@ -17444,35 +17864,35 @@ static PyObject *__pyx_pf_5adios_4file_18__repr__(struct __pyx_obj_5adios_file *
     }
   }
   if (__pyx_t_5) {
-    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1138, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1146, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   } else {
-    __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1138, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1146, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "adios.pyx":1139
+  /* "adios.pyx":1147
  *                  self.nvars,
  *                  self.vars.keys(),
  *                  self.nattrs,             # <<<<<<<<<<<<<<
  *                  self.attrs.keys(),
  *                  self.current_step,
  */
-  __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_self->nattrs); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1139, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_self->nattrs); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1147, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
 
-  /* "adios.pyx":1140
+  /* "adios.pyx":1148
  *                  self.vars.keys(),
  *                  self.nattrs,
  *                  self.attrs.keys(),             # <<<<<<<<<<<<<<
  *                  self.current_step,
  *                  self.last_step,
  */
-  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1140, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1148, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __pyx_t_7 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_6))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
     __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
     if (likely(__pyx_t_7)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
@@ -17482,52 +17902,52 @@ static PyObject *__pyx_pf_5adios_4file_18__repr__(struct __pyx_obj_5adios_file *
     }
   }
   if (__pyx_t_7) {
-    __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1140, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1148, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   } else {
-    __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1140, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1148, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-  /* "adios.pyx":1141
+  /* "adios.pyx":1149
  *                  self.nattrs,
  *                  self.attrs.keys(),
  *                  self.current_step,             # <<<<<<<<<<<<<<
  *                  self.last_step,
  *                  self.file_size)
  */
-  __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_self->current_step); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1141, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_self->current_step); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1149, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
 
-  /* "adios.pyx":1142
+  /* "adios.pyx":1150
  *                  self.attrs.keys(),
  *                  self.current_step,
  *                  self.last_step,             # <<<<<<<<<<<<<<
  *                  self.file_size)
  * 
  */
-  __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_self->last_step); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1142, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_self->last_step); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1150, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
 
-  /* "adios.pyx":1143
+  /* "adios.pyx":1151
  *                  self.current_step,
  *                  self.last_step,
  *                  self.file_size)             # <<<<<<<<<<<<<<
  * 
  *     ## For access var/attr/group as an attribute
  */
-  __pyx_t_8 = __Pyx_PyInt_From_int(__pyx_v_self->file_size); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1143, __pyx_L1_error)
+  __pyx_t_8 = __Pyx_PyInt_From_int(__pyx_v_self->file_size); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1151, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
 
-  /* "adios.pyx":1136
+  /* "adios.pyx":1144
  *         return ("AdiosFile (path=%r, nvars=%r, vars=%r, nattrs=%r, attrs=%r, "
  *                 "current_step=%r, last_step=%r, file_size=%r)") % \
  *                 (self.fp.path if self.fp != NULL else None,             # <<<<<<<<<<<<<<
  *                  self.nvars,
  *                  self.vars.keys(),
  */
-  __pyx_t_9 = PyTuple_New(8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1136, __pyx_L1_error)
+  __pyx_t_9 = PyTuple_New(8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1144, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_1);
@@ -17554,21 +17974,21 @@ static PyObject *__pyx_pf_5adios_4file_18__repr__(struct __pyx_obj_5adios_file *
   __pyx_t_7 = 0;
   __pyx_t_8 = 0;
 
-  /* "adios.pyx":1135
+  /* "adios.pyx":1143
  *         """ Return string representation. """
  *         return ("AdiosFile (path=%r, nvars=%r, vars=%r, nattrs=%r, attrs=%r, "
  *                 "current_step=%r, last_step=%r, file_size=%r)") % \             # <<<<<<<<<<<<<<
  *                 (self.fp.path if self.fp != NULL else None,
  *                  self.nvars,
  */
-  __pyx_t_8 = __Pyx_PyString_Format(__pyx_kp_s_AdiosFile_path_r_nvars_r_vars_r, __pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1135, __pyx_L1_error)
+  __pyx_t_8 = __Pyx_PyString_Format(__pyx_kp_s_AdiosFile_path_r_nvars_r_vars_r, __pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1143, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
   __pyx_r = __pyx_t_8;
   __pyx_t_8 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":1132
+  /* "adios.pyx":1140
  * 
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -17595,7 +18015,7 @@ static PyObject *__pyx_pf_5adios_4file_18__repr__(struct __pyx_obj_5adios_file *
   return __pyx_r;
 }
 
-/* "adios.pyx":1146
+/* "adios.pyx":1154
  * 
  *     ## For access var/attr/group as an attribute
  *     def __getattr__(self, varname):             # <<<<<<<<<<<<<<
@@ -17625,7 +18045,7 @@ static PyObject *__pyx_pf_5adios_4file_20__getattr__(struct __pyx_obj_5adios_fil
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("__getattr__", 0);
 
-  /* "adios.pyx":1147
+  /* "adios.pyx":1155
  *     ## For access var/attr/group as an attribute
  *     def __getattr__(self, varname):
  *         return self.__getitem__(varname)             # <<<<<<<<<<<<<<
@@ -17633,10 +18053,10 @@ static PyObject *__pyx_pf_5adios_4file_20__getattr__(struct __pyx_obj_5adios_fil
  *     ## To support ipython tab completion
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getitem); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1147, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getitem); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1155, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
     __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
     if (likely(__pyx_t_3)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
@@ -17646,25 +18066,43 @@ static PyObject *__pyx_pf_5adios_4file_20__getattr__(struct __pyx_obj_5adios_fil
     }
   }
   if (!__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_varname); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1147, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_varname); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1155, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1147, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_4);
-    __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
-    __Pyx_INCREF(__pyx_v_varname);
-    __Pyx_GIVEREF(__pyx_v_varname);
-    PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_varname);
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1147, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_varname};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1155, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_varname};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1155, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1155, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+      __Pyx_INCREF(__pyx_v_varname);
+      __Pyx_GIVEREF(__pyx_v_varname);
+      PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_varname);
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1155, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    }
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":1146
+  /* "adios.pyx":1154
  * 
  *     ## For access var/attr/group as an attribute
  *     def __getattr__(self, varname):             # <<<<<<<<<<<<<<
@@ -17686,7 +18124,7 @@ static PyObject *__pyx_pf_5adios_4file_20__getattr__(struct __pyx_obj_5adios_fil
   return __pyx_r;
 }
 
-/* "adios.pyx":1150
+/* "adios.pyx":1158
  * 
  *     ## To support ipython tab completion
  *     def __dir__(self):             # <<<<<<<<<<<<<<
@@ -17721,31 +18159,31 @@ static PyObject *__pyx_pf_5adios_4file_22__dir__(struct __pyx_obj_5adios_file *_
   PyObject *__pyx_t_5 = NULL;
   __Pyx_RefNannySetupContext("__dir__", 0);
 
-  /* "adios.pyx":1151
+  /* "adios.pyx":1159
  *     ## To support ipython tab completion
  *     def __dir__(self):
  *         k0 = dir(type(self))             # <<<<<<<<<<<<<<
  *         ## Normalize to support var starting with '/'
  *         ## E.g., f['/var1'] == f.var1
  */
-  __pyx_t_1 = PyObject_Dir(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1151, __pyx_L1_error)
+  __pyx_t_1 = PyObject_Dir(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1159, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_k0 = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "adios.pyx":1154
+  /* "adios.pyx":1162
  *         ## Normalize to support var starting with '/'
  *         ## E.g., f['/var1'] == f.var1
  *         k1 = normalize_key(self.vars.keys())             # <<<<<<<<<<<<<<
  *         k2 = normalize_key(self.attrs.keys())
  *         return k0 + k1 + k2
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_normalize_key); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1154, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_normalize_key); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1162, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1154, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1162, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_t_5 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
     __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
     if (likely(__pyx_t_5)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
@@ -17755,15 +18193,15 @@ static PyObject *__pyx_pf_5adios_4file_22__dir__(struct __pyx_obj_5adios_file *_
     }
   }
   if (__pyx_t_5) {
-    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1154, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1162, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   } else {
-    __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1154, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1162, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_t_4 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
     __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
     if (likely(__pyx_t_4)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
@@ -17773,37 +18211,57 @@ static PyObject *__pyx_pf_5adios_4file_22__dir__(struct __pyx_obj_5adios_file *_
     }
   }
   if (!__pyx_t_4) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1154, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1162, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1154, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_5);
-    __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); __pyx_t_4 = NULL;
-    __Pyx_GIVEREF(__pyx_t_3);
-    PyTuple_SET_ITEM(__pyx_t_5, 0+1, __pyx_t_3);
-    __pyx_t_3 = 0;
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1154, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_t_3};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1162, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_t_3};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1162, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    } else
+    #endif
+    {
+      __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1162, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_5);
+      __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); __pyx_t_4 = NULL;
+      __Pyx_GIVEREF(__pyx_t_3);
+      PyTuple_SET_ITEM(__pyx_t_5, 0+1, __pyx_t_3);
+      __pyx_t_3 = 0;
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1162, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    }
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_v_k1 = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "adios.pyx":1155
+  /* "adios.pyx":1163
  *         ## E.g., f['/var1'] == f.var1
  *         k1 = normalize_key(self.vars.keys())
  *         k2 = normalize_key(self.attrs.keys())             # <<<<<<<<<<<<<<
  *         return k0 + k1 + k2
  * 
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_normalize_key); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1155, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_normalize_key); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1163, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1155, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1163, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_4 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
     __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
     if (likely(__pyx_t_4)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -17813,15 +18271,15 @@ static PyObject *__pyx_pf_5adios_4file_22__dir__(struct __pyx_obj_5adios_file *_
     }
   }
   if (__pyx_t_4) {
-    __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1155, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1163, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   } else {
-    __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1155, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1163, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
     __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
     if (likely(__pyx_t_3)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
@@ -17831,25 +18289,45 @@ static PyObject *__pyx_pf_5adios_4file_22__dir__(struct __pyx_obj_5adios_file *_
     }
   }
   if (!__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1155, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1163, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1155, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_4);
-    __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
-    __Pyx_GIVEREF(__pyx_t_5);
-    PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_t_5);
-    __pyx_t_5 = 0;
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1155, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_t_5};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1163, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_t_5};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1163, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    } else
+    #endif
+    {
+      __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1163, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+      __Pyx_GIVEREF(__pyx_t_5);
+      PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_t_5);
+      __pyx_t_5 = 0;
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1163, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    }
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_v_k2 = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "adios.pyx":1156
+  /* "adios.pyx":1164
  *         k1 = normalize_key(self.vars.keys())
  *         k2 = normalize_key(self.attrs.keys())
  *         return k0 + k1 + k2             # <<<<<<<<<<<<<<
@@ -17857,16 +18335,16 @@ static PyObject *__pyx_pf_5adios_4file_22__dir__(struct __pyx_obj_5adios_file *_
  *     ## Require for dictionary key completion
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyNumber_Add(__pyx_v_k0, __pyx_v_k1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1156, __pyx_L1_error)
+  __pyx_t_1 = PyNumber_Add(__pyx_v_k0, __pyx_v_k1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1164, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_v_k2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1156, __pyx_L1_error)
+  __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_v_k2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1164, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":1150
+  /* "adios.pyx":1158
  * 
  *     ## To support ipython tab completion
  *     def __dir__(self):             # <<<<<<<<<<<<<<
@@ -17892,7 +18370,7 @@ static PyObject *__pyx_pf_5adios_4file_22__dir__(struct __pyx_obj_5adios_file *_
   return __pyx_r;
 }
 
-/* "adios.pyx":1159
+/* "adios.pyx":1167
  * 
  *     ## Require for dictionary key completion
  *     def keys(self):             # <<<<<<<<<<<<<<
@@ -17923,7 +18401,7 @@ static PyObject *__pyx_pf_5adios_4file_24keys(struct __pyx_obj_5adios_file *__py
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("keys", 0);
 
-  /* "adios.pyx":1160
+  /* "adios.pyx":1168
  *     ## Require for dictionary key completion
  *     def keys(self):
  *         return self.vars.keys() + self.attrs.keys()             # <<<<<<<<<<<<<<
@@ -17931,10 +18409,10 @@ static PyObject *__pyx_pf_5adios_4file_24keys(struct __pyx_obj_5adios_file *__py
  *     def is_open(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1160, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1168, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
     __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
     if (likely(__pyx_t_3)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
@@ -17944,17 +18422,17 @@ static PyObject *__pyx_pf_5adios_4file_24keys(struct __pyx_obj_5adios_file *__py
     }
   }
   if (__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1160, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1168, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   } else {
-    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1160, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1168, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1160, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1168, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_4 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
     __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
     if (likely(__pyx_t_4)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -17964,14 +18442,14 @@ static PyObject *__pyx_pf_5adios_4file_24keys(struct __pyx_obj_5adios_file *__py
     }
   }
   if (__pyx_t_4) {
-    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1160, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1168, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   } else {
-    __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1160, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1168, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1160, __pyx_L1_error)
+  __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1168, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -17979,7 +18457,7 @@ static PyObject *__pyx_pf_5adios_4file_24keys(struct __pyx_obj_5adios_file *__py
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":1159
+  /* "adios.pyx":1167
  * 
  *     ## Require for dictionary key completion
  *     def keys(self):             # <<<<<<<<<<<<<<
@@ -18001,7 +18479,7 @@ static PyObject *__pyx_pf_5adios_4file_24keys(struct __pyx_obj_5adios_file *__py
   return __pyx_r;
 }
 
-/* "adios.pyx":1162
+/* "adios.pyx":1170
  *         return self.vars.keys() + self.attrs.keys()
  * 
  *     def is_open(self):             # <<<<<<<<<<<<<<
@@ -18029,7 +18507,7 @@ static PyObject *__pyx_pf_5adios_4file_26is_open(struct __pyx_obj_5adios_file *_
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("is_open", 0);
 
-  /* "adios.pyx":1164
+  /* "adios.pyx":1172
  *     def is_open(self):
  *         """ Check whether file is open or closed """
  *         return True if self.fp != NULL else False             # <<<<<<<<<<<<<<
@@ -18048,7 +18526,7 @@ static PyObject *__pyx_pf_5adios_4file_26is_open(struct __pyx_obj_5adios_file *_
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":1162
+  /* "adios.pyx":1170
  *         return self.vars.keys() + self.attrs.keys()
  * 
  *     def is_open(self):             # <<<<<<<<<<<<<<
@@ -18063,7 +18541,7 @@ static PyObject *__pyx_pf_5adios_4file_26is_open(struct __pyx_obj_5adios_file *_
   return __pyx_r;
 }
 
-/* "adios.pyx":1167
+/* "adios.pyx":1175
  * 
  *     ## for py2
  *     def __nonzero__(self):             # <<<<<<<<<<<<<<
@@ -18093,17 +18571,17 @@ static int __pyx_pf_5adios_4file_28__nonzero__(struct __pyx_obj_5adios_file *__p
   int __pyx_t_4;
   __Pyx_RefNannySetupContext("__nonzero__", 0);
 
-  /* "adios.pyx":1168
+  /* "adios.pyx":1176
  *     ## for py2
  *     def __nonzero__(self):
  *         return self.is_open()             # <<<<<<<<<<<<<<
  * 
  *     ## for py3
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_is_open); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1168, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_is_open); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1176, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
     __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
     if (likely(__pyx_t_3)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
@@ -18113,19 +18591,19 @@ static int __pyx_pf_5adios_4file_28__nonzero__(struct __pyx_obj_5adios_file *__p
     }
   }
   if (__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1168, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1176, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   } else {
-    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1168, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1176, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1168, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1176, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_4;
   goto __pyx_L0;
 
-  /* "adios.pyx":1167
+  /* "adios.pyx":1175
  * 
  *     ## for py2
  *     def __nonzero__(self):             # <<<<<<<<<<<<<<
@@ -18145,7 +18623,7 @@ static int __pyx_pf_5adios_4file_28__nonzero__(struct __pyx_obj_5adios_file *__p
   return __pyx_r;
 }
 
-/* "adios.pyx":1171
+/* "adios.pyx":1179
  * 
  *     ## for py3
  *     def __bool__(self):             # <<<<<<<<<<<<<<
@@ -18175,17 +18653,17 @@ static int __pyx_pf_5adios_4file_30__bool__(struct __pyx_obj_5adios_file *__pyx_
   int __pyx_t_4;
   __Pyx_RefNannySetupContext("__bool__", 0);
 
-  /* "adios.pyx":1173
+  /* "adios.pyx":1181
  *     def __bool__(self):
  *         """ Check whether file is open or closed """
  *         return self.is_open()             # <<<<<<<<<<<<<<
  * 
  *     def dirs(self):
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_is_open); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1173, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_is_open); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1181, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
     __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
     if (likely(__pyx_t_3)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
@@ -18195,19 +18673,19 @@ static int __pyx_pf_5adios_4file_30__bool__(struct __pyx_obj_5adios_file *__pyx_
     }
   }
   if (__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1173, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1181, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   } else {
-    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1173, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1181, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1173, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1181, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_4;
   goto __pyx_L0;
 
-  /* "adios.pyx":1171
+  /* "adios.pyx":1179
  * 
  *     ## for py3
  *     def __bool__(self):             # <<<<<<<<<<<<<<
@@ -18227,7 +18705,7 @@ static int __pyx_pf_5adios_4file_30__bool__(struct __pyx_obj_5adios_file *__pyx_
   return __pyx_r;
 }
 
-/* "adios.pyx":1175
+/* "adios.pyx":1183
  *         return self.is_open()
  * 
  *     def dirs(self):             # <<<<<<<<<<<<<<
@@ -18265,29 +18743,29 @@ static PyObject *__pyx_pf_5adios_4file_32dirs(struct __pyx_obj_5adios_file *__py
   int __pyx_t_9;
   __Pyx_RefNannySetupContext("dirs", 0);
 
-  /* "adios.pyx":1177
+  /* "adios.pyx":1185
  *     def dirs(self):
  *         """ Return child dir names """
  *         s = set()             # <<<<<<<<<<<<<<
  *         for k in self.vars.keys():
  *             if k.startswith('/'): k = k[1:]
  */
-  __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1177, __pyx_L1_error)
+  __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1185, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_s = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "adios.pyx":1178
+  /* "adios.pyx":1186
  *         """ Return child dir names """
  *         s = set()
  *         for k in self.vars.keys():             # <<<<<<<<<<<<<<
  *             if k.startswith('/'): k = k[1:]
  *             s.add(os.path.dirname(k).split('/')[0])
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1178, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1186, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
     __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
     if (likely(__pyx_t_3)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
@@ -18297,10 +18775,10 @@ static PyObject *__pyx_pf_5adios_4file_32dirs(struct __pyx_obj_5adios_file *__py
     }
   }
   if (__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1178, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1186, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   } else {
-    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1178, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1186, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -18308,27 +18786,27 @@ static PyObject *__pyx_pf_5adios_4file_32dirs(struct __pyx_obj_5adios_file *__py
     __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __pyx_t_4 = 0;
     __pyx_t_5 = NULL;
   } else {
-    __pyx_t_4 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1178, __pyx_L1_error)
+    __pyx_t_4 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1186, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_5 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1178, __pyx_L1_error)
+    __pyx_t_5 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1186, __pyx_L1_error)
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   for (;;) {
     if (likely(!__pyx_t_5)) {
       if (likely(PyList_CheckExact(__pyx_t_2))) {
         if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_2)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1178, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1186, __pyx_L1_error)
         #else
-        __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1178, __pyx_L1_error)
+        __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1186, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_1);
         #endif
       } else {
         if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1178, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1186, __pyx_L1_error)
         #else
-        __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1178, __pyx_L1_error)
+        __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1186, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_1);
         #endif
       }
@@ -18338,7 +18816,7 @@ static PyObject *__pyx_pf_5adios_4file_32dirs(struct __pyx_obj_5adios_file *__py
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
           if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-          else __PYX_ERR(0, 1178, __pyx_L1_error)
+          else __PYX_ERR(0, 1186, __pyx_L1_error)
         }
         break;
       }
@@ -18347,44 +18825,44 @@ static PyObject *__pyx_pf_5adios_4file_32dirs(struct __pyx_obj_5adios_file *__py
     __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "adios.pyx":1179
+    /* "adios.pyx":1187
  *         s = set()
  *         for k in self.vars.keys():
  *             if k.startswith('/'): k = k[1:]             # <<<<<<<<<<<<<<
  *             s.add(os.path.dirname(k).split('/')[0])
  *         for k in self.attrs.keys():
  */
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_k, __pyx_n_s_startswith); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1179, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_k, __pyx_n_s_startswith); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1187, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__23, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1179, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__23, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1187, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 1179, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 1187, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     if (__pyx_t_6) {
-      __pyx_t_3 = __Pyx_PyObject_GetSlice(__pyx_v_k, 1, 0, NULL, NULL, &__pyx_slice__24, 1, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1179, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_GetSlice(__pyx_v_k, 1, 0, NULL, NULL, &__pyx_slice__24, 1, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1187, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF_SET(__pyx_v_k, __pyx_t_3);
       __pyx_t_3 = 0;
     }
 
-    /* "adios.pyx":1180
+    /* "adios.pyx":1188
  *         for k in self.vars.keys():
  *             if k.startswith('/'): k = k[1:]
  *             s.add(os.path.dirname(k).split('/')[0])             # <<<<<<<<<<<<<<
  *         for k in self.attrs.keys():
  *             if k.startswith('/'): k = k[1:]
  */
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1180, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1188, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_path); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1180, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_path); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1188, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_dirname); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1180, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_dirname); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1188, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __pyx_t_7 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_1))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
       __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1);
       if (likely(__pyx_t_7)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
@@ -18394,33 +18872,51 @@ static PyObject *__pyx_pf_5adios_4file_32dirs(struct __pyx_obj_5adios_file *__py
       }
     }
     if (!__pyx_t_7) {
-      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_k); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1180, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_k); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1188, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
     } else {
-      __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1180, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_8);
-      __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_7); __pyx_t_7 = NULL;
-      __Pyx_INCREF(__pyx_v_k);
-      __Pyx_GIVEREF(__pyx_v_k);
-      PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_v_k);
-      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1180, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_3);
-      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_1)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_7, __pyx_v_k};
+        __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1188, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+        __Pyx_GOTREF(__pyx_t_3);
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_7, __pyx_v_k};
+        __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1188, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+        __Pyx_GOTREF(__pyx_t_3);
+      } else
+      #endif
+      {
+        __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1188, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_8);
+        __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_7); __pyx_t_7 = NULL;
+        __Pyx_INCREF(__pyx_v_k);
+        __Pyx_GIVEREF(__pyx_v_k);
+        PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_v_k);
+        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1188, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_3);
+        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+      }
     }
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_split); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1180, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_split); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1188, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__25, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1180, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__25, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1188, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_3, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1180, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_3, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1188, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_9 = PySet_Add(__pyx_v_s, __pyx_t_1); if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 1180, __pyx_L1_error)
+    __pyx_t_9 = PySet_Add(__pyx_v_s, __pyx_t_1); if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 1188, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-    /* "adios.pyx":1178
+    /* "adios.pyx":1186
  *         """ Return child dir names """
  *         s = set()
  *         for k in self.vars.keys():             # <<<<<<<<<<<<<<
@@ -18430,17 +18926,17 @@ static PyObject *__pyx_pf_5adios_4file_32dirs(struct __pyx_obj_5adios_file *__py
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "adios.pyx":1181
+  /* "adios.pyx":1189
  *             if k.startswith('/'): k = k[1:]
  *             s.add(os.path.dirname(k).split('/')[0])
  *         for k in self.attrs.keys():             # <<<<<<<<<<<<<<
  *             if k.startswith('/'): k = k[1:]
  *             s.add(os.path.dirname(k).split('/')[0])
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1181, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1189, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_1))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
     __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
     if (likely(__pyx_t_3)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
@@ -18450,10 +18946,10 @@ static PyObject *__pyx_pf_5adios_4file_32dirs(struct __pyx_obj_5adios_file *__py
     }
   }
   if (__pyx_t_3) {
-    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1181, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1189, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   } else {
-    __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1181, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1189, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -18461,27 +18957,27 @@ static PyObject *__pyx_pf_5adios_4file_32dirs(struct __pyx_obj_5adios_file *__py
     __pyx_t_1 = __pyx_t_2; __Pyx_INCREF(__pyx_t_1); __pyx_t_4 = 0;
     __pyx_t_5 = NULL;
   } else {
-    __pyx_t_4 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1181, __pyx_L1_error)
+    __pyx_t_4 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1189, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1181, __pyx_L1_error)
+    __pyx_t_5 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1189, __pyx_L1_error)
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   for (;;) {
     if (likely(!__pyx_t_5)) {
       if (likely(PyList_CheckExact(__pyx_t_1))) {
         if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_1)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1181, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1189, __pyx_L1_error)
         #else
-        __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1181, __pyx_L1_error)
+        __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1189, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_2);
         #endif
       } else {
         if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1181, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1189, __pyx_L1_error)
         #else
-        __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1181, __pyx_L1_error)
+        __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1189, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_2);
         #endif
       }
@@ -18491,7 +18987,7 @@ static PyObject *__pyx_pf_5adios_4file_32dirs(struct __pyx_obj_5adios_file *__py
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
           if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-          else __PYX_ERR(0, 1181, __pyx_L1_error)
+          else __PYX_ERR(0, 1189, __pyx_L1_error)
         }
         break;
       }
@@ -18500,44 +18996,44 @@ static PyObject *__pyx_pf_5adios_4file_32dirs(struct __pyx_obj_5adios_file *__py
     __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_2);
     __pyx_t_2 = 0;
 
-    /* "adios.pyx":1182
+    /* "adios.pyx":1190
  *             s.add(os.path.dirname(k).split('/')[0])
  *         for k in self.attrs.keys():
  *             if k.startswith('/'): k = k[1:]             # <<<<<<<<<<<<<<
  *             s.add(os.path.dirname(k).split('/')[0])
  *         return list(s-set(['']))
  */
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_k, __pyx_n_s_startswith); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1182, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_k, __pyx_n_s_startswith); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1190, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__26, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1182, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__26, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1190, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 1182, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 1190, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     if (__pyx_t_6) {
-      __pyx_t_3 = __Pyx_PyObject_GetSlice(__pyx_v_k, 1, 0, NULL, NULL, &__pyx_slice__27, 1, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1182, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_GetSlice(__pyx_v_k, 1, 0, NULL, NULL, &__pyx_slice__27, 1, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1190, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF_SET(__pyx_v_k, __pyx_t_3);
       __pyx_t_3 = 0;
     }
 
-    /* "adios.pyx":1183
+    /* "adios.pyx":1191
  *         for k in self.attrs.keys():
  *             if k.startswith('/'): k = k[1:]
  *             s.add(os.path.dirname(k).split('/')[0])             # <<<<<<<<<<<<<<
  *         return list(s-set(['']))
  * 
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1183, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1191, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_path); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1183, __pyx_L1_error)
+    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_path); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1191, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_dirname); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1183, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_dirname); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1191, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     __pyx_t_8 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
       __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_2);
       if (likely(__pyx_t_8)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
@@ -18547,33 +19043,51 @@ static PyObject *__pyx_pf_5adios_4file_32dirs(struct __pyx_obj_5adios_file *__py
       }
     }
     if (!__pyx_t_8) {
-      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_k); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1183, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_k); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1191, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
     } else {
-      __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1183, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_7);
-      __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_8); __pyx_t_8 = NULL;
-      __Pyx_INCREF(__pyx_v_k);
-      __Pyx_GIVEREF(__pyx_v_k);
-      PyTuple_SET_ITEM(__pyx_t_7, 0+1, __pyx_v_k);
-      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1183, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_3);
-      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_2)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_v_k};
+        __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1191, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+        __Pyx_GOTREF(__pyx_t_3);
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_v_k};
+        __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1191, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+        __Pyx_GOTREF(__pyx_t_3);
+      } else
+      #endif
+      {
+        __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1191, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_7);
+        __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_8); __pyx_t_8 = NULL;
+        __Pyx_INCREF(__pyx_v_k);
+        __Pyx_GIVEREF(__pyx_v_k);
+        PyTuple_SET_ITEM(__pyx_t_7, 0+1, __pyx_v_k);
+        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1191, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_3);
+        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+      }
     }
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_split); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1183, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_split); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1191, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__28, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1183, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__28, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1191, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_3, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1183, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_3, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1191, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_9 = PySet_Add(__pyx_v_s, __pyx_t_2); if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 1183, __pyx_L1_error)
+    __pyx_t_9 = PySet_Add(__pyx_v_s, __pyx_t_2); if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 1191, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-    /* "adios.pyx":1181
+    /* "adios.pyx":1189
  *             if k.startswith('/'): k = k[1:]
  *             s.add(os.path.dirname(k).split('/')[0])
  *         for k in self.attrs.keys():             # <<<<<<<<<<<<<<
@@ -18583,7 +19097,7 @@ static PyObject *__pyx_pf_5adios_4file_32dirs(struct __pyx_obj_5adios_file *__py
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":1184
+  /* "adios.pyx":1192
  *             if k.startswith('/'): k = k[1:]
  *             s.add(os.path.dirname(k).split('/')[0])
  *         return list(s-set(['']))             # <<<<<<<<<<<<<<
@@ -18591,20 +19105,20 @@ static PyObject *__pyx_pf_5adios_4file_32dirs(struct __pyx_obj_5adios_file *__py
  * cdef class blockinfo(object):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1184, __pyx_L1_error)
+  __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1192, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PySet_Add(__pyx_t_1, __pyx_kp_s__10) < 0) __PYX_ERR(0, 1184, __pyx_L1_error)
-  __pyx_t_2 = PyNumber_Subtract(__pyx_v_s, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1184, __pyx_L1_error)
+  if (PySet_Add(__pyx_t_1, __pyx_kp_s__10) < 0) __PYX_ERR(0, 1192, __pyx_L1_error)
+  __pyx_t_2 = PyNumber_Subtract(__pyx_v_s, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1192, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PySequence_List(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1184, __pyx_L1_error)
+  __pyx_t_1 = PySequence_List(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1192, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":1175
+  /* "adios.pyx":1183
  *         return self.is_open()
  * 
  *     def dirs(self):             # <<<<<<<<<<<<<<
@@ -18629,7 +19143,7 @@ static PyObject *__pyx_pf_5adios_4file_32dirs(struct __pyx_obj_5adios_file *__py
   return __pyx_r;
 }
 
-/* "adios.pyx":945
+/* "adios.pyx":953
  * 
  *     ## Public Memeber
  *     cpdef public softdict vars             # <<<<<<<<<<<<<<
@@ -18684,7 +19198,7 @@ static int __pyx_pf_5adios_4file_4vars_2__set__(struct __pyx_obj_5adios_file *__
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__set__", 0);
-  if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_ptype_5adios_softdict))))) __PYX_ERR(0, 945, __pyx_L1_error)
+  if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_ptype_5adios_softdict))))) __PYX_ERR(0, 953, __pyx_L1_error)
   __pyx_t_1 = __pyx_v_value;
   __Pyx_INCREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
@@ -18734,7 +19248,7 @@ static int __pyx_pf_5adios_4file_4vars_4__del__(struct __pyx_obj_5adios_file *__
   return __pyx_r;
 }
 
-/* "adios.pyx":946
+/* "adios.pyx":954
  *     ## Public Memeber
  *     cpdef public softdict vars
  *     cpdef public softdict attrs             # <<<<<<<<<<<<<<
@@ -18789,7 +19303,7 @@ static int __pyx_pf_5adios_4file_5attrs_2__set__(struct __pyx_obj_5adios_file *_
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__set__", 0);
-  if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_ptype_5adios_softdict))))) __PYX_ERR(0, 946, __pyx_L1_error)
+  if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_ptype_5adios_softdict))))) __PYX_ERR(0, 954, __pyx_L1_error)
   __pyx_t_1 = __pyx_v_value;
   __Pyx_INCREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
@@ -18839,7 +19353,7 @@ static int __pyx_pf_5adios_4file_5attrs_4__del__(struct __pyx_obj_5adios_file *_
   return __pyx_r;
 }
 
-/* "adios.pyx":947
+/* "adios.pyx":955
  *     cpdef public softdict vars
  *     cpdef public softdict attrs
  *     cpdef public var             # <<<<<<<<<<<<<<
@@ -18934,7 +19448,7 @@ static int __pyx_pf_5adios_4file_3var_4__del__(struct __pyx_obj_5adios_file *__p
   return __pyx_r;
 }
 
-/* "adios.pyx":948
+/* "adios.pyx":956
  *     cpdef public softdict attrs
  *     cpdef public var
  *     cpdef public attr             # <<<<<<<<<<<<<<
@@ -19029,7 +19543,7 @@ static int __pyx_pf_5adios_4file_4attr_4__del__(struct __pyx_obj_5adios_file *__
   return __pyx_r;
 }
 
-/* "adios.pyx":1193
+/* "adios.pyx":1201
  * 
  *     property start:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -19055,7 +19569,7 @@ static PyObject *__pyx_pf_5adios_9blockinfo_5start___get__(struct __pyx_obj_5adi
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios.pyx":1194
+  /* "adios.pyx":1202
  *     property start:
  *         def __get__(self):
  *             return self.start             # <<<<<<<<<<<<<<
@@ -19067,7 +19581,7 @@ static PyObject *__pyx_pf_5adios_9blockinfo_5start___get__(struct __pyx_obj_5adi
   __pyx_r = __pyx_v_self->start;
   goto __pyx_L0;
 
-  /* "adios.pyx":1193
+  /* "adios.pyx":1201
  * 
  *     property start:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -19082,7 +19596,7 @@ static PyObject *__pyx_pf_5adios_9blockinfo_5start___get__(struct __pyx_obj_5adi
   return __pyx_r;
 }
 
-/* "adios.pyx":1197
+/* "adios.pyx":1205
  * 
  *     property count:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -19108,7 +19622,7 @@ static PyObject *__pyx_pf_5adios_9blockinfo_5count___get__(struct __pyx_obj_5adi
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios.pyx":1198
+  /* "adios.pyx":1206
  *     property count:
  *         def __get__(self):
  *             return self.count             # <<<<<<<<<<<<<<
@@ -19120,7 +19634,7 @@ static PyObject *__pyx_pf_5adios_9blockinfo_5count___get__(struct __pyx_obj_5adi
   __pyx_r = __pyx_v_self->count;
   goto __pyx_L0;
 
-  /* "adios.pyx":1197
+  /* "adios.pyx":1205
  * 
  *     property count:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -19135,7 +19649,7 @@ static PyObject *__pyx_pf_5adios_9blockinfo_5count___get__(struct __pyx_obj_5adi
   return __pyx_r;
 }
 
-/* "adios.pyx":1201
+/* "adios.pyx":1209
  * 
  *     property process_id:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -19162,7 +19676,7 @@ static PyObject *__pyx_pf_5adios_9blockinfo_10process_id___get__(struct __pyx_ob
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios.pyx":1202
+  /* "adios.pyx":1210
  *     property process_id:
  *         def __get__(self):
  *             return self.process_id             # <<<<<<<<<<<<<<
@@ -19170,13 +19684,13 @@ static PyObject *__pyx_pf_5adios_9blockinfo_10process_id___get__(struct __pyx_ob
  *     property time_index:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->process_id); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1202, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->process_id); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1210, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":1201
+  /* "adios.pyx":1209
  * 
  *     property process_id:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -19195,7 +19709,7 @@ static PyObject *__pyx_pf_5adios_9blockinfo_10process_id___get__(struct __pyx_ob
   return __pyx_r;
 }
 
-/* "adios.pyx":1205
+/* "adios.pyx":1213
  * 
  *     property time_index:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -19222,7 +19736,7 @@ static PyObject *__pyx_pf_5adios_9blockinfo_10time_index___get__(struct __pyx_ob
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios.pyx":1206
+  /* "adios.pyx":1214
  *     property time_index:
  *         def __get__(self):
  *             return self.time_index             # <<<<<<<<<<<<<<
@@ -19230,13 +19744,13 @@ static PyObject *__pyx_pf_5adios_9blockinfo_10time_index___get__(struct __pyx_ob
  *     def __init__(self, tuple start, tuple count, int process_id, int time_index):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->time_index); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1206, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->time_index); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1214, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":1205
+  /* "adios.pyx":1213
  * 
  *     property time_index:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -19255,7 +19769,7 @@ static PyObject *__pyx_pf_5adios_9blockinfo_10time_index___get__(struct __pyx_ob
   return __pyx_r;
 }
 
-/* "adios.pyx":1208
+/* "adios.pyx":1216
  *             return self.time_index
  * 
  *     def __init__(self, tuple start, tuple count, int process_id, int time_index):             # <<<<<<<<<<<<<<
@@ -19295,21 +19809,21 @@ static int __pyx_pw_5adios_9blockinfo_1__init__(PyObject *__pyx_v_self, PyObject
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_count)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__init__", 1, 4, 4, 1); __PYX_ERR(0, 1208, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__init__", 1, 4, 4, 1); __PYX_ERR(0, 1216, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_process_id)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__init__", 1, 4, 4, 2); __PYX_ERR(0, 1208, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__init__", 1, 4, 4, 2); __PYX_ERR(0, 1216, __pyx_L3_error)
         }
         case  3:
         if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_time_index)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__init__", 1, 4, 4, 3); __PYX_ERR(0, 1208, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__init__", 1, 4, 4, 3); __PYX_ERR(0, 1216, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 1208, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 1216, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
       goto __pyx_L5_argtuple_error;
@@ -19321,19 +19835,19 @@ static int __pyx_pw_5adios_9blockinfo_1__init__(PyObject *__pyx_v_self, PyObject
     }
     __pyx_v_start = ((PyObject*)values[0]);
     __pyx_v_count = ((PyObject*)values[1]);
-    __pyx_v_process_id = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_process_id == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1208, __pyx_L3_error)
-    __pyx_v_time_index = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_time_index == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1208, __pyx_L3_error)
+    __pyx_v_process_id = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_process_id == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1216, __pyx_L3_error)
+    __pyx_v_time_index = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_time_index == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1216, __pyx_L3_error)
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__init__", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1208, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__init__", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1216, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.blockinfo.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_start), (&PyTuple_Type), 1, "start", 1))) __PYX_ERR(0, 1208, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_count), (&PyTuple_Type), 1, "count", 1))) __PYX_ERR(0, 1208, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_start), (&PyTuple_Type), 1, "start", 1))) __PYX_ERR(0, 1216, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_count), (&PyTuple_Type), 1, "count", 1))) __PYX_ERR(0, 1216, __pyx_L1_error)
   __pyx_r = __pyx_pf_5adios_9blockinfo___init__(((struct __pyx_obj_5adios_blockinfo *)__pyx_v_self), __pyx_v_start, __pyx_v_count, __pyx_v_process_id, __pyx_v_time_index);
 
   /* function exit code */
@@ -19350,7 +19864,7 @@ static int __pyx_pf_5adios_9blockinfo___init__(struct __pyx_obj_5adios_blockinfo
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__init__", 0);
 
-  /* "adios.pyx":1209
+  /* "adios.pyx":1217
  * 
  *     def __init__(self, tuple start, tuple count, int process_id, int time_index):
  *         self.start = start             # <<<<<<<<<<<<<<
@@ -19363,7 +19877,7 @@ static int __pyx_pf_5adios_9blockinfo___init__(struct __pyx_obj_5adios_blockinfo
   __Pyx_DECREF(__pyx_v_self->start);
   __pyx_v_self->start = __pyx_v_start;
 
-  /* "adios.pyx":1210
+  /* "adios.pyx":1218
  *     def __init__(self, tuple start, tuple count, int process_id, int time_index):
  *         self.start = start
  *         self.count = count             # <<<<<<<<<<<<<<
@@ -19376,7 +19890,7 @@ static int __pyx_pf_5adios_9blockinfo___init__(struct __pyx_obj_5adios_blockinfo
   __Pyx_DECREF(__pyx_v_self->count);
   __pyx_v_self->count = __pyx_v_count;
 
-  /* "adios.pyx":1211
+  /* "adios.pyx":1219
  *         self.start = start
  *         self.count = count
  *         self.process_id = process_id             # <<<<<<<<<<<<<<
@@ -19385,7 +19899,7 @@ static int __pyx_pf_5adios_9blockinfo___init__(struct __pyx_obj_5adios_blockinfo
  */
   __pyx_v_self->process_id = __pyx_v_process_id;
 
-  /* "adios.pyx":1212
+  /* "adios.pyx":1220
  *         self.count = count
  *         self.process_id = process_id
  *         self.time_index = time_index             # <<<<<<<<<<<<<<
@@ -19394,7 +19908,7 @@ static int __pyx_pf_5adios_9blockinfo___init__(struct __pyx_obj_5adios_blockinfo
  */
   __pyx_v_self->time_index = __pyx_v_time_index;
 
-  /* "adios.pyx":1208
+  /* "adios.pyx":1216
  *             return self.time_index
  * 
  *     def __init__(self, tuple start, tuple count, int process_id, int time_index):             # <<<<<<<<<<<<<<
@@ -19408,7 +19922,7 @@ static int __pyx_pf_5adios_9blockinfo___init__(struct __pyx_obj_5adios_blockinfo
   return __pyx_r;
 }
 
-/* "adios.pyx":1214
+/* "adios.pyx":1222
  *         self.time_index = time_index
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -19437,7 +19951,7 @@ static PyObject *__pyx_pf_5adios_9blockinfo_2__repr__(struct __pyx_obj_5adios_bl
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__repr__", 0);
 
-  /* "adios.pyx":1215
+  /* "adios.pyx":1223
  * 
  *     def __repr__(self):
  *         return "AdiosBlockinfo (process_id=%r, time_index=%r, start=%r, count=%r)" % \             # <<<<<<<<<<<<<<
@@ -19446,34 +19960,34 @@ static PyObject *__pyx_pf_5adios_9blockinfo_2__repr__(struct __pyx_obj_5adios_bl
  */
   __Pyx_XDECREF(__pyx_r);
 
-  /* "adios.pyx":1216
+  /* "adios.pyx":1224
  *     def __repr__(self):
  *         return "AdiosBlockinfo (process_id=%r, time_index=%r, start=%r, count=%r)" % \
  *                (self.process_id,             # <<<<<<<<<<<<<<
  *                 self.time_index,
  *                 self.start,
  */
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->process_id); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1216, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->process_id); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1224, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
 
-  /* "adios.pyx":1217
+  /* "adios.pyx":1225
  *         return "AdiosBlockinfo (process_id=%r, time_index=%r, start=%r, count=%r)" % \
  *                (self.process_id,
  *                 self.time_index,             # <<<<<<<<<<<<<<
  *                 self.start,
  *                 self.count)
  */
-  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_self->time_index); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1217, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_self->time_index); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1225, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
 
-  /* "adios.pyx":1216
+  /* "adios.pyx":1224
  *     def __repr__(self):
  *         return "AdiosBlockinfo (process_id=%r, time_index=%r, start=%r, count=%r)" % \
  *                (self.process_id,             # <<<<<<<<<<<<<<
  *                 self.time_index,
  *                 self.start,
  */
-  __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1216, __pyx_L1_error)
+  __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1224, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
@@ -19488,21 +20002,21 @@ static PyObject *__pyx_pf_5adios_9blockinfo_2__repr__(struct __pyx_obj_5adios_bl
   __pyx_t_1 = 0;
   __pyx_t_2 = 0;
 
-  /* "adios.pyx":1215
+  /* "adios.pyx":1223
  * 
  *     def __repr__(self):
  *         return "AdiosBlockinfo (process_id=%r, time_index=%r, start=%r, count=%r)" % \             # <<<<<<<<<<<<<<
  *                (self.process_id,
  *                 self.time_index,
  */
-  __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_AdiosBlockinfo_process_id_r_time, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1215, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_AdiosBlockinfo_process_id_r_time, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1223, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":1214
+  /* "adios.pyx":1222
  *         self.time_index = time_index
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -19523,7 +20037,7 @@ static PyObject *__pyx_pf_5adios_9blockinfo_2__repr__(struct __pyx_obj_5adios_bl
   return __pyx_r;
 }
 
-/* "adios.pyx":1251
+/* "adios.pyx":1259
  *     property name:
  *         """ The variable name. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -19549,7 +20063,7 @@ static PyObject *__pyx_pf_5adios_3var_4name___get__(struct __pyx_obj_5adios_var
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios.pyx":1252
+  /* "adios.pyx":1260
  *         """ The variable name. """
  *         def __get__(self):
  *             return self.name             # <<<<<<<<<<<<<<
@@ -19561,7 +20075,7 @@ static PyObject *__pyx_pf_5adios_3var_4name___get__(struct __pyx_obj_5adios_var
   __pyx_r = __pyx_v_self->name;
   goto __pyx_L0;
 
-  /* "adios.pyx":1251
+  /* "adios.pyx":1259
  *     property name:
  *         """ The variable name. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -19576,7 +20090,7 @@ static PyObject *__pyx_pf_5adios_3var_4name___get__(struct __pyx_obj_5adios_var
   return __pyx_r;
 }
 
-/* "adios.pyx":1256
+/* "adios.pyx":1264
  *     property varid:
  *         """ Internal variable id. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -19603,7 +20117,7 @@ static PyObject *__pyx_pf_5adios_3var_5varid___get__(struct __pyx_obj_5adios_var
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios.pyx":1257
+  /* "adios.pyx":1265
  *         """ Internal variable id. """
  *         def __get__(self):
  *             return self.varid             # <<<<<<<<<<<<<<
@@ -19611,13 +20125,13 @@ static PyObject *__pyx_pf_5adios_3var_5varid___get__(struct __pyx_obj_5adios_var
  *     property dtype:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->varid); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1257, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->varid); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1265, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":1256
+  /* "adios.pyx":1264
  *     property varid:
  *         """ Internal variable id. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -19636,7 +20150,7 @@ static PyObject *__pyx_pf_5adios_3var_5varid___get__(struct __pyx_obj_5adios_var
   return __pyx_r;
 }
 
-/* "adios.pyx":1261
+/* "adios.pyx":1269
  *     property dtype:
  *         """ Variable type as in numpy.dtype. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -19662,7 +20176,7 @@ static PyObject *__pyx_pf_5adios_3var_5dtype___get__(struct __pyx_obj_5adios_var
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios.pyx":1262
+  /* "adios.pyx":1270
  *         """ Variable type as in numpy.dtype. """
  *         def __get__(self):
  *             return self.dtype             # <<<<<<<<<<<<<<
@@ -19674,7 +20188,7 @@ static PyObject *__pyx_pf_5adios_3var_5dtype___get__(struct __pyx_obj_5adios_var
   __pyx_r = ((PyObject *)__pyx_v_self->dtype);
   goto __pyx_L0;
 
-  /* "adios.pyx":1261
+  /* "adios.pyx":1269
  *     property dtype:
  *         """ Variable type as in numpy.dtype. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -19689,7 +20203,7 @@ static PyObject *__pyx_pf_5adios_3var_5dtype___get__(struct __pyx_obj_5adios_var
   return __pyx_r;
 }
 
-/* "adios.pyx":1266
+/* "adios.pyx":1274
  *     property ndim:
  *         """ The number of dimensions of the variable. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -19716,7 +20230,7 @@ static PyObject *__pyx_pf_5adios_3var_4ndim___get__(struct __pyx_obj_5adios_var
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios.pyx":1267
+  /* "adios.pyx":1275
  *         """ The number of dimensions of the variable. """
  *         def __get__(self):
  *             return self.ndim             # <<<<<<<<<<<<<<
@@ -19724,13 +20238,13 @@ static PyObject *__pyx_pf_5adios_3var_4ndim___get__(struct __pyx_obj_5adios_var
  *     property dims:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1267, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1275, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":1266
+  /* "adios.pyx":1274
  *     property ndim:
  *         """ The number of dimensions of the variable. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -19749,7 +20263,7 @@ static PyObject *__pyx_pf_5adios_3var_4ndim___get__(struct __pyx_obj_5adios_var
   return __pyx_r;
 }
 
-/* "adios.pyx":1271
+/* "adios.pyx":1279
  *     property dims:
  *         """ The shape of the variable. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -19775,7 +20289,7 @@ static PyObject *__pyx_pf_5adios_3var_4dims___get__(struct __pyx_obj_5adios_var
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios.pyx":1272
+  /* "adios.pyx":1280
  *         """ The shape of the variable. """
  *         def __get__(self):
  *             return self.dims             # <<<<<<<<<<<<<<
@@ -19787,7 +20301,7 @@ static PyObject *__pyx_pf_5adios_3var_4dims___get__(struct __pyx_obj_5adios_var
   __pyx_r = __pyx_v_self->dims;
   goto __pyx_L0;
 
-  /* "adios.pyx":1271
+  /* "adios.pyx":1279
  *     property dims:
  *         """ The shape of the variable. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -19802,7 +20316,7 @@ static PyObject *__pyx_pf_5adios_3var_4dims___get__(struct __pyx_obj_5adios_var
   return __pyx_r;
 }
 
-/* "adios.pyx":1276
+/* "adios.pyx":1284
  *     property shape:
  *         """ The shape of the variable. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -19828,7 +20342,7 @@ static PyObject *__pyx_pf_5adios_3var_5shape___get__(struct __pyx_obj_5adios_var
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios.pyx":1277
+  /* "adios.pyx":1285
  *         """ The shape of the variable. """
  *         def __get__(self):
  *             return self.dims             # <<<<<<<<<<<<<<
@@ -19840,7 +20354,7 @@ static PyObject *__pyx_pf_5adios_3var_5shape___get__(struct __pyx_obj_5adios_var
   __pyx_r = __pyx_v_self->dims;
   goto __pyx_L0;
 
-  /* "adios.pyx":1276
+  /* "adios.pyx":1284
  *     property shape:
  *         """ The shape of the variable. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -19855,7 +20369,7 @@ static PyObject *__pyx_pf_5adios_3var_5shape___get__(struct __pyx_obj_5adios_var
   return __pyx_r;
 }
 
-/* "adios.pyx":1281
+/* "adios.pyx":1289
  *     property size:
  *         """ The number of elements in the array. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -19885,7 +20399,7 @@ static PyObject *__pyx_pf_5adios_3var_4size___get__(struct __pyx_obj_5adios_var
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios.pyx":1282
+  /* "adios.pyx":1290
  *         """ The number of elements in the array. """
  *         def __get__(self):
  *             return np.prod(self.dims)             # <<<<<<<<<<<<<<
@@ -19893,13 +20407,13 @@ static PyObject *__pyx_pf_5adios_3var_4size___get__(struct __pyx_obj_5adios_var
  *     property nsteps:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1282, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1290, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_prod); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1282, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_prod); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1290, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_t_2 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
+  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
     __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
     if (likely(__pyx_t_2)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -19909,25 +20423,43 @@ static PyObject *__pyx_pf_5adios_3var_4size___get__(struct __pyx_obj_5adios_var
     }
   }
   if (!__pyx_t_2) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_self->dims); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1282, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_self->dims); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1290, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1282, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_4);
-    __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2); __pyx_t_2 = NULL;
-    __Pyx_INCREF(__pyx_v_self->dims);
-    __Pyx_GIVEREF(__pyx_v_self->dims);
-    PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_self->dims);
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1282, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_3)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_2, __pyx_v_self->dims};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1290, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_2, __pyx_v_self->dims};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1290, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1290, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2); __pyx_t_2 = NULL;
+      __Pyx_INCREF(__pyx_v_self->dims);
+      __Pyx_GIVEREF(__pyx_v_self->dims);
+      PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_self->dims);
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1290, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    }
   }
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":1281
+  /* "adios.pyx":1289
  *     property size:
  *         """ The number of elements in the array. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -19949,7 +20481,7 @@ static PyObject *__pyx_pf_5adios_3var_4size___get__(struct __pyx_obj_5adios_var
   return __pyx_r;
 }
 
-/* "adios.pyx":1286
+/* "adios.pyx":1294
  *     property nsteps:
  *         """ The number of time steps of the variable. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -19976,7 +20508,7 @@ static PyObject *__pyx_pf_5adios_3var_6nsteps___get__(struct __pyx_obj_5adios_va
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios.pyx":1287
+  /* "adios.pyx":1295
  *         """ The number of time steps of the variable. """
  *         def __get__(self):
  *             return self.nsteps             # <<<<<<<<<<<<<<
@@ -19984,13 +20516,13 @@ static PyObject *__pyx_pf_5adios_3var_6nsteps___get__(struct __pyx_obj_5adios_va
  *     property attrs:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->nsteps); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1287, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->nsteps); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1295, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":1286
+  /* "adios.pyx":1294
  *     property nsteps:
  *         """ The number of time steps of the variable. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -20009,7 +20541,7 @@ static PyObject *__pyx_pf_5adios_3var_6nsteps___get__(struct __pyx_obj_5adios_va
   return __pyx_r;
 }
 
-/* "adios.pyx":1291
+/* "adios.pyx":1299
  *     property attrs:
  *         """ Attributes associated with the variable. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -20035,7 +20567,7 @@ static PyObject *__pyx_pf_5adios_3var_5attrs___get__(struct __pyx_obj_5adios_var
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios.pyx":1292
+  /* "adios.pyx":1300
  *         """ Attributes associated with the variable. """
  *         def __get__(self):
  *             return self.attrs             # <<<<<<<<<<<<<<
@@ -20047,7 +20579,7 @@ static PyObject *__pyx_pf_5adios_3var_5attrs___get__(struct __pyx_obj_5adios_var
   __pyx_r = ((PyObject *)__pyx_v_self->attrs);
   goto __pyx_L0;
 
-  /* "adios.pyx":1291
+  /* "adios.pyx":1299
  *     property attrs:
  *         """ Attributes associated with the variable. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -20062,7 +20594,7 @@ static PyObject *__pyx_pf_5adios_3var_5attrs___get__(struct __pyx_obj_5adios_var
   return __pyx_r;
 }
 
-/* "adios.pyx":1296
+/* "adios.pyx":1304
  *     property blockinfo:
  *         """ Block information. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -20111,7 +20643,7 @@ static PyObject *__pyx_pf_5adios_3var_9blockinfo___get__(struct __pyx_obj_5adios
   PyObject *__pyx_t_12 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios.pyx":1297
+  /* "adios.pyx":1305
  *         """ Block information. """
  *         def __get__(self):
  *             if self.blockinfo is None:             # <<<<<<<<<<<<<<
@@ -20122,19 +20654,19 @@ static PyObject *__pyx_pf_5adios_3var_9blockinfo___get__(struct __pyx_obj_5adios
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "adios.pyx":1298
+    /* "adios.pyx":1306
  *         def __get__(self):
  *             if self.blockinfo is None:
  *                 ll = list()             # <<<<<<<<<<<<<<
  *                 k = 0
  *                 for t in range(self.vp.nsteps):
  */
-    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1298, __pyx_L1_error)
+    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1306, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_v_ll = ((PyObject*)__pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "adios.pyx":1299
+    /* "adios.pyx":1307
  *             if self.blockinfo is None:
  *                 ll = list()
  *                 k = 0             # <<<<<<<<<<<<<<
@@ -20144,7 +20676,7 @@ static PyObject *__pyx_pf_5adios_3var_9blockinfo___get__(struct __pyx_obj_5adios
     __Pyx_INCREF(__pyx_int_0);
     __pyx_v_k = __pyx_int_0;
 
-    /* "adios.pyx":1300
+    /* "adios.pyx":1308
  *                 ll = list()
  *                 k = 0
  *                 for t in range(self.vp.nsteps):             # <<<<<<<<<<<<<<
@@ -20155,19 +20687,19 @@ static PyObject *__pyx_pf_5adios_3var_9blockinfo___get__(struct __pyx_obj_5adios
     for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
       __pyx_v_t = __pyx_t_5;
 
-      /* "adios.pyx":1301
+      /* "adios.pyx":1309
  *                 k = 0
  *                 for t in range(self.vp.nsteps):
  *                     l = list()             # <<<<<<<<<<<<<<
  *                     if self.vp.nblocks[t] == 0:
  *                         l.append(None)
  */
-      __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1301, __pyx_L1_error)
+      __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1309, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_XDECREF_SET(__pyx_v_l, ((PyObject*)__pyx_t_3));
       __pyx_t_3 = 0;
 
-      /* "adios.pyx":1302
+      /* "adios.pyx":1310
  *                 for t in range(self.vp.nsteps):
  *                     l = list()
  *                     if self.vp.nblocks[t] == 0:             # <<<<<<<<<<<<<<
@@ -20177,16 +20709,16 @@ static PyObject *__pyx_pf_5adios_3var_9blockinfo___get__(struct __pyx_obj_5adios
       __pyx_t_2 = (((__pyx_v_self->vp->nblocks[__pyx_v_t]) == 0) != 0);
       if (__pyx_t_2) {
 
-        /* "adios.pyx":1303
+        /* "adios.pyx":1311
  *                     l = list()
  *                     if self.vp.nblocks[t] == 0:
  *                         l.append(None)             # <<<<<<<<<<<<<<
  *                     for i in range(self.vp.nblocks[t]):
  *                         start = tuple([self.vp.blockinfo[k].start[d] for d in range(self.vp.ndim)])
  */
-        __pyx_t_6 = __Pyx_PyList_Append(__pyx_v_l, Py_None); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 1303, __pyx_L1_error)
+        __pyx_t_6 = __Pyx_PyList_Append(__pyx_v_l, Py_None); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 1311, __pyx_L1_error)
 
-        /* "adios.pyx":1302
+        /* "adios.pyx":1310
  *                 for t in range(self.vp.nsteps):
  *                     l = list()
  *                     if self.vp.nblocks[t] == 0:             # <<<<<<<<<<<<<<
@@ -20195,7 +20727,7 @@ static PyObject *__pyx_pf_5adios_3var_9blockinfo___get__(struct __pyx_obj_5adios
  */
       }
 
-      /* "adios.pyx":1304
+      /* "adios.pyx":1312
  *                     if self.vp.nblocks[t] == 0:
  *                         l.append(None)
  *                     for i in range(self.vp.nblocks[t]):             # <<<<<<<<<<<<<<
@@ -20206,88 +20738,88 @@ static PyObject *__pyx_pf_5adios_3var_9blockinfo___get__(struct __pyx_obj_5adios
       for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) {
         __pyx_v_i = __pyx_t_8;
 
-        /* "adios.pyx":1305
+        /* "adios.pyx":1313
  *                         l.append(None)
  *                     for i in range(self.vp.nblocks[t]):
  *                         start = tuple([self.vp.blockinfo[k].start[d] for d in range(self.vp.ndim)])             # <<<<<<<<<<<<<<
  *                         count = tuple([self.vp.blockinfo[k].count[d] for d in range(self.vp.ndim)])
  *                         process_id = self.vp.blockinfo[k].process_id
  */
-        __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1305, __pyx_L1_error)
+        __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1313, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
         __pyx_t_9 = __pyx_v_self->vp->ndim;
         for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {
           __pyx_v_d = __pyx_t_10;
-          __pyx_t_11 = __Pyx_PyIndex_AsSsize_t(__pyx_v_k); if (unlikely((__pyx_t_11 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1305, __pyx_L1_error)
-          __pyx_t_12 = __Pyx_PyInt_From_uint64_t(((__pyx_v_self->vp->blockinfo[__pyx_t_11]).start[__pyx_v_d])); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1305, __pyx_L1_error)
+          __pyx_t_11 = __Pyx_PyIndex_AsSsize_t(__pyx_v_k); if (unlikely((__pyx_t_11 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1313, __pyx_L1_error)
+          __pyx_t_12 = __Pyx_PyInt_From_uint64_t(((__pyx_v_self->vp->blockinfo[__pyx_t_11]).start[__pyx_v_d])); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1313, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_12);
-          if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_12))) __PYX_ERR(0, 1305, __pyx_L1_error)
+          if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_12))) __PYX_ERR(0, 1313, __pyx_L1_error)
           __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
         }
-        __pyx_t_12 = PyList_AsTuple(((PyObject*)__pyx_t_3)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1305, __pyx_L1_error)
+        __pyx_t_12 = PyList_AsTuple(((PyObject*)__pyx_t_3)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1313, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_12);
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
         __Pyx_XDECREF_SET(__pyx_v_start, ((PyObject*)__pyx_t_12));
         __pyx_t_12 = 0;
 
-        /* "adios.pyx":1306
+        /* "adios.pyx":1314
  *                     for i in range(self.vp.nblocks[t]):
  *                         start = tuple([self.vp.blockinfo[k].start[d] for d in range(self.vp.ndim)])
  *                         count = tuple([self.vp.blockinfo[k].count[d] for d in range(self.vp.ndim)])             # <<<<<<<<<<<<<<
  *                         process_id = self.vp.blockinfo[k].process_id
  *                         time_index = self.vp.blockinfo[k].time_index
  */
-        __pyx_t_12 = PyList_New(0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1306, __pyx_L1_error)
+        __pyx_t_12 = PyList_New(0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1314, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_12);
         __pyx_t_9 = __pyx_v_self->vp->ndim;
         for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {
           __pyx_v_d = __pyx_t_10;
-          __pyx_t_11 = __Pyx_PyIndex_AsSsize_t(__pyx_v_k); if (unlikely((__pyx_t_11 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1306, __pyx_L1_error)
-          __pyx_t_3 = __Pyx_PyInt_From_uint64_t(((__pyx_v_self->vp->blockinfo[__pyx_t_11]).count[__pyx_v_d])); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1306, __pyx_L1_error)
+          __pyx_t_11 = __Pyx_PyIndex_AsSsize_t(__pyx_v_k); if (unlikely((__pyx_t_11 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1314, __pyx_L1_error)
+          __pyx_t_3 = __Pyx_PyInt_From_uint64_t(((__pyx_v_self->vp->blockinfo[__pyx_t_11]).count[__pyx_v_d])); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1314, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_3);
-          if (unlikely(__Pyx_ListComp_Append(__pyx_t_12, (PyObject*)__pyx_t_3))) __PYX_ERR(0, 1306, __pyx_L1_error)
+          if (unlikely(__Pyx_ListComp_Append(__pyx_t_12, (PyObject*)__pyx_t_3))) __PYX_ERR(0, 1314, __pyx_L1_error)
           __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
         }
-        __pyx_t_3 = PyList_AsTuple(((PyObject*)__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1306, __pyx_L1_error)
+        __pyx_t_3 = PyList_AsTuple(((PyObject*)__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1314, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
         __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
         __Pyx_XDECREF_SET(__pyx_v_count, ((PyObject*)__pyx_t_3));
         __pyx_t_3 = 0;
 
-        /* "adios.pyx":1307
+        /* "adios.pyx":1315
  *                         start = tuple([self.vp.blockinfo[k].start[d] for d in range(self.vp.ndim)])
  *                         count = tuple([self.vp.blockinfo[k].count[d] for d in range(self.vp.ndim)])
  *                         process_id = self.vp.blockinfo[k].process_id             # <<<<<<<<<<<<<<
  *                         time_index = self.vp.blockinfo[k].time_index
  *                         binfo = blockinfo(start, count, process_id, time_index)
  */
-        __pyx_t_11 = __Pyx_PyIndex_AsSsize_t(__pyx_v_k); if (unlikely((__pyx_t_11 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1307, __pyx_L1_error)
-        __pyx_t_3 = __Pyx_PyInt_From_uint32_t((__pyx_v_self->vp->blockinfo[__pyx_t_11]).process_id); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1307, __pyx_L1_error)
+        __pyx_t_11 = __Pyx_PyIndex_AsSsize_t(__pyx_v_k); if (unlikely((__pyx_t_11 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1315, __pyx_L1_error)
+        __pyx_t_3 = __Pyx_PyInt_From_uint32_t((__pyx_v_self->vp->blockinfo[__pyx_t_11]).process_id); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1315, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
         __Pyx_XDECREF_SET(__pyx_v_process_id, __pyx_t_3);
         __pyx_t_3 = 0;
 
-        /* "adios.pyx":1308
+        /* "adios.pyx":1316
  *                         count = tuple([self.vp.blockinfo[k].count[d] for d in range(self.vp.ndim)])
  *                         process_id = self.vp.blockinfo[k].process_id
  *                         time_index = self.vp.blockinfo[k].time_index             # <<<<<<<<<<<<<<
  *                         binfo = blockinfo(start, count, process_id, time_index)
  *                         l.append(binfo)
  */
-        __pyx_t_11 = __Pyx_PyIndex_AsSsize_t(__pyx_v_k); if (unlikely((__pyx_t_11 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1308, __pyx_L1_error)
-        __pyx_t_3 = __Pyx_PyInt_From_uint32_t((__pyx_v_self->vp->blockinfo[__pyx_t_11]).time_index); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1308, __pyx_L1_error)
+        __pyx_t_11 = __Pyx_PyIndex_AsSsize_t(__pyx_v_k); if (unlikely((__pyx_t_11 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1316, __pyx_L1_error)
+        __pyx_t_3 = __Pyx_PyInt_From_uint32_t((__pyx_v_self->vp->blockinfo[__pyx_t_11]).time_index); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1316, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
         __Pyx_XDECREF_SET(__pyx_v_time_index, __pyx_t_3);
         __pyx_t_3 = 0;
 
-        /* "adios.pyx":1309
+        /* "adios.pyx":1317
  *                         process_id = self.vp.blockinfo[k].process_id
  *                         time_index = self.vp.blockinfo[k].time_index
  *                         binfo = blockinfo(start, count, process_id, time_index)             # <<<<<<<<<<<<<<
  *                         l.append(binfo)
  *                         k += 1
  */
-        __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1309, __pyx_L1_error)
+        __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1317, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
         __Pyx_INCREF(__pyx_v_start);
         __Pyx_GIVEREF(__pyx_v_start);
@@ -20301,45 +20833,45 @@ static PyObject *__pyx_pf_5adios_3var_9blockinfo___get__(struct __pyx_obj_5adios
         __Pyx_INCREF(__pyx_v_time_index);
         __Pyx_GIVEREF(__pyx_v_time_index);
         PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_v_time_index);
-        __pyx_t_12 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5adios_blockinfo), __pyx_t_3, NULL); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1309, __pyx_L1_error)
+        __pyx_t_12 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5adios_blockinfo), __pyx_t_3, NULL); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1317, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_12);
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
         __Pyx_XDECREF_SET(__pyx_v_binfo, ((struct __pyx_obj_5adios_blockinfo *)__pyx_t_12));
         __pyx_t_12 = 0;
 
-        /* "adios.pyx":1310
+        /* "adios.pyx":1318
  *                         time_index = self.vp.blockinfo[k].time_index
  *                         binfo = blockinfo(start, count, process_id, time_index)
  *                         l.append(binfo)             # <<<<<<<<<<<<<<
  *                         k += 1
  *                     ll.append(l)
  */
-        __pyx_t_6 = __Pyx_PyList_Append(__pyx_v_l, ((PyObject *)__pyx_v_binfo)); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 1310, __pyx_L1_error)
+        __pyx_t_6 = __Pyx_PyList_Append(__pyx_v_l, ((PyObject *)__pyx_v_binfo)); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 1318, __pyx_L1_error)
 
-        /* "adios.pyx":1311
+        /* "adios.pyx":1319
  *                         binfo = blockinfo(start, count, process_id, time_index)
  *                         l.append(binfo)
  *                         k += 1             # <<<<<<<<<<<<<<
  *                     ll.append(l)
  *                 self.blockinfo = ll
  */
-        __pyx_t_12 = __Pyx_PyInt_AddObjC(__pyx_v_k, __pyx_int_1, 1, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1311, __pyx_L1_error)
+        __pyx_t_12 = __Pyx_PyInt_AddObjC(__pyx_v_k, __pyx_int_1, 1, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1319, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_12);
         __Pyx_DECREF_SET(__pyx_v_k, __pyx_t_12);
         __pyx_t_12 = 0;
       }
 
-      /* "adios.pyx":1312
+      /* "adios.pyx":1320
  *                         l.append(binfo)
  *                         k += 1
  *                     ll.append(l)             # <<<<<<<<<<<<<<
  *                 self.blockinfo = ll
  *             return (self.blockinfo)
  */
-      __pyx_t_6 = __Pyx_PyList_Append(__pyx_v_ll, __pyx_v_l); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 1312, __pyx_L1_error)
+      __pyx_t_6 = __Pyx_PyList_Append(__pyx_v_ll, __pyx_v_l); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 1320, __pyx_L1_error)
     }
 
-    /* "adios.pyx":1313
+    /* "adios.pyx":1321
  *                         k += 1
  *                     ll.append(l)
  *                 self.blockinfo = ll             # <<<<<<<<<<<<<<
@@ -20352,7 +20884,7 @@ static PyObject *__pyx_pf_5adios_3var_9blockinfo___get__(struct __pyx_obj_5adios
     __Pyx_DECREF(__pyx_v_self->blockinfo);
     __pyx_v_self->blockinfo = __pyx_v_ll;
 
-    /* "adios.pyx":1297
+    /* "adios.pyx":1305
  *         """ Block information. """
  *         def __get__(self):
  *             if self.blockinfo is None:             # <<<<<<<<<<<<<<
@@ -20361,7 +20893,7 @@ static PyObject *__pyx_pf_5adios_3var_9blockinfo___get__(struct __pyx_obj_5adios
  */
   }
 
-  /* "adios.pyx":1314
+  /* "adios.pyx":1322
  *                     ll.append(l)
  *                 self.blockinfo = ll
  *             return (self.blockinfo)             # <<<<<<<<<<<<<<
@@ -20373,7 +20905,7 @@ static PyObject *__pyx_pf_5adios_3var_9blockinfo___get__(struct __pyx_obj_5adios
   __pyx_r = __pyx_v_self->blockinfo;
   goto __pyx_L0;
 
-  /* "adios.pyx":1296
+  /* "adios.pyx":1304
  *     property blockinfo:
  *         """ Block information. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -20401,7 +20933,7 @@ static PyObject *__pyx_pf_5adios_3var_9blockinfo___get__(struct __pyx_obj_5adios
   return __pyx_r;
 }
 
-/* "adios.pyx":1316
+/* "adios.pyx":1324
  *             return (self.blockinfo)
  * 
  *     def __init__(self, file file, str name):             # <<<<<<<<<<<<<<
@@ -20437,11 +20969,11 @@ static int __pyx_pw_5adios_3var_1__init__(PyObject *__pyx_v_self, PyObject *__py
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, 1); __PYX_ERR(0, 1316, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, 1); __PYX_ERR(0, 1324, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 1316, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 1324, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -20454,14 +20986,14 @@ static int __pyx_pw_5adios_3var_1__init__(PyObject *__pyx_v_self, PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1316, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1324, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.var.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_file), __pyx_ptype_5adios_file, 1, "file", 0))) __PYX_ERR(0, 1316, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 1316, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_file), __pyx_ptype_5adios_file, 1, "file", 0))) __PYX_ERR(0, 1324, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 1324, __pyx_L1_error)
   __pyx_r = __pyx_pf_5adios_3var___init__(((struct __pyx_obj_5adios_var *)__pyx_v_self), __pyx_v_file, __pyx_v_name);
 
   /* function exit code */
@@ -20491,12 +21023,11 @@ static int __pyx_pf_5adios_3var___init__(struct __pyx_obj_5adios_var *__pyx_v_se
   PyObject *__pyx_t_12 = NULL;
   PyObject *__pyx_t_13 = NULL;
   PyObject *__pyx_t_14 = NULL;
-  Py_ssize_t __pyx_t_15;
-  PyObject *__pyx_t_16 = NULL;
+  PyObject *__pyx_t_15 = NULL;
   __Pyx_RefNannySetupContext("__init__", 0);
   __Pyx_INCREF(__pyx_v_name);
 
-  /* "adios.pyx":1317
+  /* "adios.pyx":1325
  * 
  *     def __init__(self, file file, str name):
  *         self.file = file             # <<<<<<<<<<<<<<
@@ -20509,7 +21040,7 @@ static int __pyx_pf_5adios_3var___init__(struct __pyx_obj_5adios_var *__pyx_v_se
   __Pyx_DECREF(((PyObject *)__pyx_v_self->file));
   __pyx_v_self->file = __pyx_v_file;
 
-  /* "adios.pyx":1318
+  /* "adios.pyx":1326
  *     def __init__(self, file file, str name):
  *         self.file = file
  *         self.vp = NULL             # <<<<<<<<<<<<<<
@@ -20518,7 +21049,7 @@ static int __pyx_pf_5adios_3var___init__(struct __pyx_obj_5adios_var *__pyx_v_se
  */
   __pyx_v_self->vp = NULL;
 
-  /* "adios.pyx":1320
+  /* "adios.pyx":1328
  *         self.vp = NULL
  * 
  *         assert self.file.fp != NULL, 'Not an open file'             # <<<<<<<<<<<<<<
@@ -20529,25 +21060,25 @@ static int __pyx_pf_5adios_3var___init__(struct __pyx_obj_5adios_var *__pyx_v_se
   if (unlikely(!Py_OptimizeFlag)) {
     if (unlikely(!((__pyx_v_self->file->fp != NULL) != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Not_an_open_file);
-      __PYX_ERR(0, 1320, __pyx_L1_error)
+      __PYX_ERR(0, 1328, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "adios.pyx":1321
+  /* "adios.pyx":1329
  * 
  *         assert self.file.fp != NULL, 'Not an open file'
  *         self.vp = adios_inq_var(self.file.fp, s2b(name))             # <<<<<<<<<<<<<<
  *         assert self.vp != NULL, 'Not a valid var'
  * 
  */
-  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1321, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_5adios_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1329, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 1321, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 1329, __pyx_L1_error)
   __pyx_v_self->vp = adios_inq_var(__pyx_v_self->file->fp, __pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":1322
+  /* "adios.pyx":1330
  *         assert self.file.fp != NULL, 'Not an open file'
  *         self.vp = adios_inq_var(self.file.fp, s2b(name))
  *         assert self.vp != NULL, 'Not a valid var'             # <<<<<<<<<<<<<<
@@ -20558,12 +21089,12 @@ static int __pyx_pf_5adios_3var___init__(struct __pyx_obj_5adios_var *__pyx_v_se
   if (unlikely(!Py_OptimizeFlag)) {
     if (unlikely(!((__pyx_v_self->vp != NULL) != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Not_a_valid_var);
-      __PYX_ERR(0, 1322, __pyx_L1_error)
+      __PYX_ERR(0, 1330, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "adios.pyx":1325
+  /* "adios.pyx":1333
  * 
  *         ## Further populate vp.blockinfo
  *         adios_inq_var_blockinfo(self.file.fp, self.vp)             # <<<<<<<<<<<<<<
@@ -20572,7 +21103,7 @@ static int __pyx_pf_5adios_3var___init__(struct __pyx_obj_5adios_var *__pyx_v_se
  */
   adios_inq_var_blockinfo(__pyx_v_self->file->fp, __pyx_v_self->vp);
 
-  /* "adios.pyx":1327
+  /* "adios.pyx":1335
  *         adios_inq_var_blockinfo(self.file.fp, self.vp)
  * 
  *         self.name = name             # <<<<<<<<<<<<<<
@@ -20585,7 +21116,7 @@ static int __pyx_pf_5adios_3var___init__(struct __pyx_obj_5adios_var *__pyx_v_se
   __Pyx_DECREF(__pyx_v_self->name);
   __pyx_v_self->name = __pyx_v_name;
 
-  /* "adios.pyx":1328
+  /* "adios.pyx":1336
  * 
  *         self.name = name
  *         self.varid = self.vp.varid             # <<<<<<<<<<<<<<
@@ -20595,7 +21126,7 @@ static int __pyx_pf_5adios_3var___init__(struct __pyx_obj_5adios_var *__pyx_v_se
   __pyx_t_3 = __pyx_v_self->vp->varid;
   __pyx_v_self->varid = __pyx_t_3;
 
-  /* "adios.pyx":1329
+  /* "adios.pyx":1337
  *         self.name = name
  *         self.varid = self.vp.varid
  *         self.ndim = self.vp.ndim             # <<<<<<<<<<<<<<
@@ -20605,24 +21136,24 @@ static int __pyx_pf_5adios_3var___init__(struct __pyx_obj_5adios_var *__pyx_v_se
   __pyx_t_3 = __pyx_v_self->vp->ndim;
   __pyx_v_self->ndim = __pyx_t_3;
 
-  /* "adios.pyx":1330
+  /* "adios.pyx":1338
  *         self.varid = self.vp.varid
  *         self.ndim = self.vp.ndim
  *         self.dims = tuple([self.vp.dims[i] for i in range(self.vp.ndim)])             # <<<<<<<<<<<<<<
  *         self.nsteps = self.vp.nsteps
  * 
  */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1330, __pyx_L1_error)
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1338, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_3 = __pyx_v_self->vp->ndim;
   for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
     __pyx_v_i = __pyx_t_4;
-    __pyx_t_5 = __Pyx_PyInt_From_uint64_t((__pyx_v_self->vp->dims[__pyx_v_i])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1330, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyInt_From_uint64_t((__pyx_v_self->vp->dims[__pyx_v_i])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1338, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_5))) __PYX_ERR(0, 1330, __pyx_L1_error)
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_5))) __PYX_ERR(0, 1338, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   }
-  __pyx_t_5 = PyList_AsTuple(((PyObject*)__pyx_t_1)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1330, __pyx_L1_error)
+  __pyx_t_5 = PyList_AsTuple(((PyObject*)__pyx_t_1)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1338, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_GIVEREF(__pyx_t_5);
@@ -20631,7 +21162,7 @@ static int __pyx_pf_5adios_3var___init__(struct __pyx_obj_5adios_var *__pyx_v_se
   __pyx_v_self->dims = ((PyObject*)__pyx_t_5);
   __pyx_t_5 = 0;
 
-  /* "adios.pyx":1331
+  /* "adios.pyx":1339
  *         self.ndim = self.vp.ndim
  *         self.dims = tuple([self.vp.dims[i] for i in range(self.vp.ndim)])
  *         self.nsteps = self.vp.nsteps             # <<<<<<<<<<<<<<
@@ -20641,28 +21172,28 @@ static int __pyx_pf_5adios_3var___init__(struct __pyx_obj_5adios_var *__pyx_v_se
   __pyx_t_3 = __pyx_v_self->vp->nsteps;
   __pyx_v_self->nsteps = __pyx_t_3;
 
-  /* "adios.pyx":1333
+  /* "adios.pyx":1341
  *         self.nsteps = self.vp.nsteps
  * 
  *         if self.vp.type == DATATYPE.string:             # <<<<<<<<<<<<<<
  *             self.dtype = adios2npdtype(self.vp.type, len(<char*> self.vp.value))
  *         else:
  */
-  __pyx_t_5 = __Pyx_PyInt_From_ADIOS_DATATYPES(__pyx_v_self->vp->type); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1333, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyInt_From_ADIOS_DATATYPES(__pyx_v_self->vp->type); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1341, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1333, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1341, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_string); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1333, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_string); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1341, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_RichCompare(__pyx_t_5, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1333, __pyx_L1_error)
+  __pyx_t_1 = PyObject_RichCompare(__pyx_t_5, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1341, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 1333, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 1341, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   if (__pyx_t_7) {
 
-    /* "adios.pyx":1334
+    /* "adios.pyx":1342
  * 
  *         if self.vp.type == DATATYPE.string:
  *             self.dtype = adios2npdtype(self.vp.type, len(<char*> self.vp.value))             # <<<<<<<<<<<<<<
@@ -20672,7 +21203,7 @@ static int __pyx_pf_5adios_3var___init__(struct __pyx_obj_5adios_var *__pyx_v_se
     __pyx_t_8 = strlen(((char *)__pyx_v_self->vp->value)); 
     __pyx_t_9.__pyx_n = 1;
     __pyx_t_9.strlen = __pyx_t_8;
-    __pyx_t_1 = ((PyObject *)__pyx_f_5adios_adios2npdtype(__pyx_v_self->vp->type, 0, &__pyx_t_9)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1334, __pyx_L1_error)
+    __pyx_t_1 = ((PyObject *)__pyx_f_5adios_adios2npdtype(__pyx_v_self->vp->type, 0, &__pyx_t_9)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1342, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_GIVEREF(__pyx_t_1);
     __Pyx_GOTREF(__pyx_v_self->dtype);
@@ -20680,7 +21211,7 @@ static int __pyx_pf_5adios_3var___init__(struct __pyx_obj_5adios_var *__pyx_v_se
     __pyx_v_self->dtype = ((PyArray_Descr *)__pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "adios.pyx":1333
+    /* "adios.pyx":1341
  *         self.nsteps = self.vp.nsteps
  * 
  *         if self.vp.type == DATATYPE.string:             # <<<<<<<<<<<<<<
@@ -20690,7 +21221,7 @@ static int __pyx_pf_5adios_3var___init__(struct __pyx_obj_5adios_var *__pyx_v_se
     goto __pyx_L5;
   }
 
-  /* "adios.pyx":1336
+  /* "adios.pyx":1344
  *             self.dtype = adios2npdtype(self.vp.type, len(<char*> self.vp.value))
  *         else:
  *             self.dtype = adios2npdtype(self.vp.type)             # <<<<<<<<<<<<<<
@@ -20698,7 +21229,7 @@ static int __pyx_pf_5adios_3var___init__(struct __pyx_obj_5adios_var *__pyx_v_se
  *         self.attrs = softdict()
  */
   /*else*/ {
-    __pyx_t_1 = ((PyObject *)__pyx_f_5adios_adios2npdtype(__pyx_v_self->vp->type, 0, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1336, __pyx_L1_error)
+    __pyx_t_1 = ((PyObject *)__pyx_f_5adios_adios2npdtype(__pyx_v_self->vp->type, 0, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1344, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_GIVEREF(__pyx_t_1);
     __Pyx_GOTREF(__pyx_v_self->dtype);
@@ -20708,14 +21239,14 @@ static int __pyx_pf_5adios_3var___init__(struct __pyx_obj_5adios_var *__pyx_v_se
   }
   __pyx_L5:;
 
-  /* "adios.pyx":1338
+  /* "adios.pyx":1346
  *             self.dtype = adios2npdtype(self.vp.type)
  * 
  *         self.attrs = softdict()             # <<<<<<<<<<<<<<
  *         for name in self.file.attrs.keys():
  *             if name.startswith(self.name + '/'):
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5adios_softdict), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1338, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5adios_softdict), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1346, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_self->attrs);
@@ -20723,17 +21254,17 @@ static int __pyx_pf_5adios_3var___init__(struct __pyx_obj_5adios_var *__pyx_v_se
   __pyx_v_self->attrs = ((struct __pyx_obj_5adios_softdict *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "adios.pyx":1339
+  /* "adios.pyx":1347
  * 
  *         self.attrs = softdict()
  *         for name in self.file.attrs.keys():             # <<<<<<<<<<<<<<
  *             if name.startswith(self.name + '/'):
  *                 self.attrs[name.replace(self.name + '/', '')] = self.file.attrs[name]
  */
-  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->file->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1339, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->file->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1347, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __pyx_t_5 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_6))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
     __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6);
     if (likely(__pyx_t_5)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
@@ -20743,10 +21274,10 @@ static int __pyx_pf_5adios_3var___init__(struct __pyx_obj_5adios_var *__pyx_v_se
     }
   }
   if (__pyx_t_5) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1339, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1347, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   } else {
-    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1339, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1347, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
@@ -20754,27 +21285,27 @@ static int __pyx_pf_5adios_3var___init__(struct __pyx_obj_5adios_var *__pyx_v_se
     __pyx_t_6 = __pyx_t_1; __Pyx_INCREF(__pyx_t_6); __pyx_t_10 = 0;
     __pyx_t_11 = NULL;
   } else {
-    __pyx_t_10 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1339, __pyx_L1_error)
+    __pyx_t_10 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1347, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_11 = Py_TYPE(__pyx_t_6)->tp_iternext; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1339, __pyx_L1_error)
+    __pyx_t_11 = Py_TYPE(__pyx_t_6)->tp_iternext; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1347, __pyx_L1_error)
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   for (;;) {
     if (likely(!__pyx_t_11)) {
       if (likely(PyList_CheckExact(__pyx_t_6))) {
         if (__pyx_t_10 >= PyList_GET_SIZE(__pyx_t_6)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_1 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_10); __Pyx_INCREF(__pyx_t_1); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 1339, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_1 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_10); __Pyx_INCREF(__pyx_t_1); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 1347, __pyx_L1_error)
         #else
-        __pyx_t_1 = PySequence_ITEM(__pyx_t_6, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1339, __pyx_L1_error)
+        __pyx_t_1 = PySequence_ITEM(__pyx_t_6, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1347, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_1);
         #endif
       } else {
         if (__pyx_t_10 >= PyTuple_GET_SIZE(__pyx_t_6)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_10); __Pyx_INCREF(__pyx_t_1); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 1339, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_10); __Pyx_INCREF(__pyx_t_1); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 1347, __pyx_L1_error)
         #else
-        __pyx_t_1 = PySequence_ITEM(__pyx_t_6, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1339, __pyx_L1_error)
+        __pyx_t_1 = PySequence_ITEM(__pyx_t_6, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1347, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_1);
         #endif
       }
@@ -20784,17 +21315,17 @@ static int __pyx_pf_5adios_3var___init__(struct __pyx_obj_5adios_var *__pyx_v_se
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
           if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-          else __PYX_ERR(0, 1339, __pyx_L1_error)
+          else __PYX_ERR(0, 1347, __pyx_L1_error)
         }
         break;
       }
       __Pyx_GOTREF(__pyx_t_1);
     }
-    if (!(likely(PyString_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 1339, __pyx_L1_error)
+    if (!(likely(PyString_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 1347, __pyx_L1_error)
     __Pyx_DECREF_SET(__pyx_v_name, ((PyObject*)__pyx_t_1));
     __pyx_t_1 = 0;
 
-    /* "adios.pyx":1340
+    /* "adios.pyx":1348
  *         self.attrs = softdict()
  *         for name in self.file.attrs.keys():
  *             if name.startswith(self.name + '/'):             # <<<<<<<<<<<<<<
@@ -20803,59 +21334,79 @@ static int __pyx_pf_5adios_3var___init__(struct __pyx_obj_5adios_var *__pyx_v_se
  */
     if (unlikely(__pyx_v_name == Py_None)) {
       PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "startswith");
-      __PYX_ERR(0, 1340, __pyx_L1_error)
+      __PYX_ERR(0, 1348, __pyx_L1_error)
     }
-    __pyx_t_1 = PyNumber_Add(__pyx_v_self->name, __pyx_kp_s_); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1340, __pyx_L1_error)
+    __pyx_t_1 = PyNumber_Add(__pyx_v_self->name, __pyx_kp_s_); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1348, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_7 = __Pyx_PyStr_Tailmatch(__pyx_v_name, __pyx_t_1, 0, PY_SSIZE_T_MAX, -1); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 1340, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyStr_Tailmatch(__pyx_v_name, __pyx_t_1, 0, PY_SSIZE_T_MAX, -1); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 1348, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     if ((__pyx_t_7 != 0)) {
 
-      /* "adios.pyx":1341
+      /* "adios.pyx":1349
  *         for name in self.file.attrs.keys():
  *             if name.startswith(self.name + '/'):
  *                 self.attrs[name.replace(self.name + '/', '')] = self.file.attrs[name]             # <<<<<<<<<<<<<<
  *             if name.startswith('/' + self.name + '/'):
  *                 self.attrs[name.replace('/' + self.name + '/', '')] = self.file.attrs[name]
  */
-      __pyx_t_1 = PyObject_GetItem(((PyObject *)__pyx_v_self->file->attrs), __pyx_v_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1341, __pyx_L1_error)
+      __pyx_t_1 = PyObject_GetItem(((PyObject *)__pyx_v_self->file->attrs), __pyx_v_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1349, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
-      __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_replace); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1341, __pyx_L1_error)
+      __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_replace); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1349, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_12);
-      __pyx_t_13 = PyNumber_Add(__pyx_v_self->name, __pyx_kp_s_); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1341, __pyx_L1_error)
+      __pyx_t_13 = PyNumber_Add(__pyx_v_self->name, __pyx_kp_s_); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1349, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_13);
       __pyx_t_14 = NULL;
-      __pyx_t_15 = 0;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_12))) {
+      __pyx_t_3 = 0;
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_12))) {
         __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_12);
         if (likely(__pyx_t_14)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12);
           __Pyx_INCREF(__pyx_t_14);
           __Pyx_INCREF(function);
           __Pyx_DECREF_SET(__pyx_t_12, function);
-          __pyx_t_15 = 1;
+          __pyx_t_3 = 1;
         }
       }
-      __pyx_t_16 = PyTuple_New(2+__pyx_t_15); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1341, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_16);
-      if (__pyx_t_14) {
-        __Pyx_GIVEREF(__pyx_t_14); PyTuple_SET_ITEM(__pyx_t_16, 0, __pyx_t_14); __pyx_t_14 = NULL;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_12)) {
+        PyObject *__pyx_temp[3] = {__pyx_t_14, __pyx_t_13, __pyx_kp_s__10};
+        __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_12, __pyx_temp+1-__pyx_t_3, 2+__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1349, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
+        __Pyx_GOTREF(__pyx_t_5);
+        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_12)) {
+        PyObject *__pyx_temp[3] = {__pyx_t_14, __pyx_t_13, __pyx_kp_s__10};
+        __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_12, __pyx_temp+1-__pyx_t_3, 2+__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1349, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
+        __Pyx_GOTREF(__pyx_t_5);
+        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+      } else
+      #endif
+      {
+        __pyx_t_15 = PyTuple_New(2+__pyx_t_3); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1349, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_15);
+        if (__pyx_t_14) {
+          __Pyx_GIVEREF(__pyx_t_14); PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_14); __pyx_t_14 = NULL;
+        }
+        __Pyx_GIVEREF(__pyx_t_13);
+        PyTuple_SET_ITEM(__pyx_t_15, 0+__pyx_t_3, __pyx_t_13);
+        __Pyx_INCREF(__pyx_kp_s__10);
+        __Pyx_GIVEREF(__pyx_kp_s__10);
+        PyTuple_SET_ITEM(__pyx_t_15, 1+__pyx_t_3, __pyx_kp_s__10);
+        __pyx_t_13 = 0;
+        __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_t_15, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1349, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_5);
+        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
       }
-      __Pyx_GIVEREF(__pyx_t_13);
-      PyTuple_SET_ITEM(__pyx_t_16, 0+__pyx_t_15, __pyx_t_13);
-      __Pyx_INCREF(__pyx_kp_s__10);
-      __Pyx_GIVEREF(__pyx_kp_s__10);
-      PyTuple_SET_ITEM(__pyx_t_16, 1+__pyx_t_15, __pyx_kp_s__10);
-      __pyx_t_13 = 0;
-      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_t_16, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1341, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_5);
-      __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
       __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
-      if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_self->attrs), __pyx_t_5, __pyx_t_1) < 0)) __PYX_ERR(0, 1341, __pyx_L1_error)
+      if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_self->attrs), __pyx_t_5, __pyx_t_1) < 0)) __PYX_ERR(0, 1349, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-      /* "adios.pyx":1340
+      /* "adios.pyx":1348
  *         self.attrs = softdict()
  *         for name in self.file.attrs.keys():
  *             if name.startswith(self.name + '/'):             # <<<<<<<<<<<<<<
@@ -20864,7 +21415,7 @@ static int __pyx_pf_5adios_3var___init__(struct __pyx_obj_5adios_var *__pyx_v_se
  */
     }
 
-    /* "adios.pyx":1342
+    /* "adios.pyx":1350
  *             if name.startswith(self.name + '/'):
  *                 self.attrs[name.replace(self.name + '/', '')] = self.file.attrs[name]
  *             if name.startswith('/' + self.name + '/'):             # <<<<<<<<<<<<<<
@@ -20873,65 +21424,85 @@ static int __pyx_pf_5adios_3var___init__(struct __pyx_obj_5adios_var *__pyx_v_se
  */
     if (unlikely(__pyx_v_name == Py_None)) {
       PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "startswith");
-      __PYX_ERR(0, 1342, __pyx_L1_error)
+      __PYX_ERR(0, 1350, __pyx_L1_error)
     }
-    __pyx_t_1 = PyNumber_Add(__pyx_kp_s_, __pyx_v_self->name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1342, __pyx_L1_error)
+    __pyx_t_1 = PyNumber_Add(__pyx_kp_s_, __pyx_v_self->name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1350, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = PyNumber_Add(__pyx_t_1, __pyx_kp_s_); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1342, __pyx_L1_error)
+    __pyx_t_5 = PyNumber_Add(__pyx_t_1, __pyx_kp_s_); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1350, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_7 = __Pyx_PyStr_Tailmatch(__pyx_v_name, __pyx_t_5, 0, PY_SSIZE_T_MAX, -1); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 1342, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyStr_Tailmatch(__pyx_v_name, __pyx_t_5, 0, PY_SSIZE_T_MAX, -1); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 1350, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     if ((__pyx_t_7 != 0)) {
 
-      /* "adios.pyx":1343
+      /* "adios.pyx":1351
  *                 self.attrs[name.replace(self.name + '/', '')] = self.file.attrs[name]
  *             if name.startswith('/' + self.name + '/'):
  *                 self.attrs[name.replace('/' + self.name + '/', '')] = self.file.attrs[name]             # <<<<<<<<<<<<<<
  * 
  *     def __del__(self):
  */
-      __pyx_t_5 = PyObject_GetItem(((PyObject *)__pyx_v_self->file->attrs), __pyx_v_name); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1343, __pyx_L1_error)
+      __pyx_t_5 = PyObject_GetItem(((PyObject *)__pyx_v_self->file->attrs), __pyx_v_name); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1351, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_replace); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1343, __pyx_L1_error)
+      __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_replace); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1351, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_12);
-      __pyx_t_16 = PyNumber_Add(__pyx_kp_s_, __pyx_v_self->name); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1343, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_16);
-      __pyx_t_13 = PyNumber_Add(__pyx_t_16, __pyx_kp_s_); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1343, __pyx_L1_error)
+      __pyx_t_15 = PyNumber_Add(__pyx_kp_s_, __pyx_v_self->name); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1351, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_15);
+      __pyx_t_13 = PyNumber_Add(__pyx_t_15, __pyx_kp_s_); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1351, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_13);
-      __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
-      __pyx_t_16 = NULL;
-      __pyx_t_15 = 0;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_12))) {
-        __pyx_t_16 = PyMethod_GET_SELF(__pyx_t_12);
-        if (likely(__pyx_t_16)) {
+      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
+      __pyx_t_15 = NULL;
+      __pyx_t_3 = 0;
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_12))) {
+        __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_12);
+        if (likely(__pyx_t_15)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12);
-          __Pyx_INCREF(__pyx_t_16);
+          __Pyx_INCREF(__pyx_t_15);
           __Pyx_INCREF(function);
           __Pyx_DECREF_SET(__pyx_t_12, function);
-          __pyx_t_15 = 1;
+          __pyx_t_3 = 1;
         }
       }
-      __pyx_t_14 = PyTuple_New(2+__pyx_t_15); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1343, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_14);
-      if (__pyx_t_16) {
-        __Pyx_GIVEREF(__pyx_t_16); PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_16); __pyx_t_16 = NULL;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_12)) {
+        PyObject *__pyx_temp[3] = {__pyx_t_15, __pyx_t_13, __pyx_kp_s__10};
+        __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_12, __pyx_temp+1-__pyx_t_3, 2+__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1351, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
+        __Pyx_GOTREF(__pyx_t_1);
+        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_12)) {
+        PyObject *__pyx_temp[3] = {__pyx_t_15, __pyx_t_13, __pyx_kp_s__10};
+        __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_12, __pyx_temp+1-__pyx_t_3, 2+__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1351, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
+        __Pyx_GOTREF(__pyx_t_1);
+        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+      } else
+      #endif
+      {
+        __pyx_t_14 = PyTuple_New(2+__pyx_t_3); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1351, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_14);
+        if (__pyx_t_15) {
+          __Pyx_GIVEREF(__pyx_t_15); PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_15); __pyx_t_15 = NULL;
+        }
+        __Pyx_GIVEREF(__pyx_t_13);
+        PyTuple_SET_ITEM(__pyx_t_14, 0+__pyx_t_3, __pyx_t_13);
+        __Pyx_INCREF(__pyx_kp_s__10);
+        __Pyx_GIVEREF(__pyx_kp_s__10);
+        PyTuple_SET_ITEM(__pyx_t_14, 1+__pyx_t_3, __pyx_kp_s__10);
+        __pyx_t_13 = 0;
+        __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_t_14, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1351, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_1);
+        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
       }
-      __Pyx_GIVEREF(__pyx_t_13);
-      PyTuple_SET_ITEM(__pyx_t_14, 0+__pyx_t_15, __pyx_t_13);
-      __Pyx_INCREF(__pyx_kp_s__10);
-      __Pyx_GIVEREF(__pyx_kp_s__10);
-      PyTuple_SET_ITEM(__pyx_t_14, 1+__pyx_t_15, __pyx_kp_s__10);
-      __pyx_t_13 = 0;
-      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_t_14, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1343, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_1);
-      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
       __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
-      if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_self->attrs), __pyx_t_1, __pyx_t_5) < 0)) __PYX_ERR(0, 1343, __pyx_L1_error)
+      if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_self->attrs), __pyx_t_1, __pyx_t_5) < 0)) __PYX_ERR(0, 1351, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-      /* "adios.pyx":1342
+      /* "adios.pyx":1350
  *             if name.startswith(self.name + '/'):
  *                 self.attrs[name.replace(self.name + '/', '')] = self.file.attrs[name]
  *             if name.startswith('/' + self.name + '/'):             # <<<<<<<<<<<<<<
@@ -20940,7 +21511,7 @@ static int __pyx_pf_5adios_3var___init__(struct __pyx_obj_5adios_var *__pyx_v_se
  */
     }
 
-    /* "adios.pyx":1339
+    /* "adios.pyx":1347
  * 
  *         self.attrs = softdict()
  *         for name in self.file.attrs.keys():             # <<<<<<<<<<<<<<
@@ -20950,7 +21521,7 @@ static int __pyx_pf_5adios_3var___init__(struct __pyx_obj_5adios_var *__pyx_v_se
   }
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-  /* "adios.pyx":1316
+  /* "adios.pyx":1324
  *             return (self.blockinfo)
  * 
  *     def __init__(self, file file, str name):             # <<<<<<<<<<<<<<
@@ -20968,7 +21539,7 @@ static int __pyx_pf_5adios_3var___init__(struct __pyx_obj_5adios_var *__pyx_v_se
   __Pyx_XDECREF(__pyx_t_12);
   __Pyx_XDECREF(__pyx_t_13);
   __Pyx_XDECREF(__pyx_t_14);
-  __Pyx_XDECREF(__pyx_t_16);
+  __Pyx_XDECREF(__pyx_t_15);
   __Pyx_AddTraceback("adios.var.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = -1;
   __pyx_L0:;
@@ -20977,7 +21548,7 @@ static int __pyx_pf_5adios_3var___init__(struct __pyx_obj_5adios_var *__pyx_v_se
   return __pyx_r;
 }
 
-/* "adios.pyx":1345
+/* "adios.pyx":1353
  *                 self.attrs[name.replace('/' + self.name + '/', '')] = self.file.attrs[name]
  * 
  *     def __del__(self):             # <<<<<<<<<<<<<<
@@ -21005,18 +21576,18 @@ static PyObject *__pyx_pf_5adios_3var_2__del__(struct __pyx_obj_5adios_var *__py
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__del__", 0);
 
-  /* "adios.pyx":1346
+  /* "adios.pyx":1354
  * 
  *     def __del__(self):
  *         self.close()             # <<<<<<<<<<<<<<
  * 
  *     cpdef close(self):
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_5adios_var *)__pyx_v_self->__pyx_vtab)->close(__pyx_v_self, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1346, __pyx_L1_error)
+  __pyx_t_1 = ((struct __pyx_vtabstruct_5adios_var *)__pyx_v_self->__pyx_vtab)->close(__pyx_v_self, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1354, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":1345
+  /* "adios.pyx":1353
  *                 self.attrs[name.replace('/' + self.name + '/', '')] = self.file.attrs[name]
  * 
  *     def __del__(self):             # <<<<<<<<<<<<<<
@@ -21037,7 +21608,7 @@ static PyObject *__pyx_pf_5adios_3var_2__del__(struct __pyx_obj_5adios_var *__py
   return __pyx_r;
 }
 
-/* "adios.pyx":1348
+/* "adios.pyx":1356
  *         self.close()
  * 
  *     cpdef close(self):             # <<<<<<<<<<<<<<
@@ -21058,13 +21629,13 @@ static PyObject *__pyx_f_5adios_3var_close(struct __pyx_obj_5adios_var *__pyx_v_
   if (unlikely(__pyx_skip_dispatch)) ;
   /* Check if overridden in Python */
   else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_close); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1348, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_close); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1356, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_5adios_3var_5close)) {
       __Pyx_XDECREF(__pyx_r);
       __Pyx_INCREF(__pyx_t_1);
       __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
+      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
         __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
         if (likely(__pyx_t_4)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -21074,10 +21645,10 @@ static PyObject *__pyx_f_5adios_3var_close(struct __pyx_obj_5adios_var *__pyx_v_
         }
       }
       if (__pyx_t_4) {
-        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1348, __pyx_L1_error)
+        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1356, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       } else {
-        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1348, __pyx_L1_error)
+        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1356, __pyx_L1_error)
       }
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -21089,7 +21660,7 @@ static PyObject *__pyx_f_5adios_3var_close(struct __pyx_obj_5adios_var *__pyx_v_
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   }
 
-  /* "adios.pyx":1350
+  /* "adios.pyx":1358
  *     cpdef close(self):
  *         """ Close and free variable information """
  *         assert self.vp != NULL, 'Not an open var'             # <<<<<<<<<<<<<<
@@ -21100,12 +21671,12 @@ static PyObject *__pyx_f_5adios_3var_close(struct __pyx_obj_5adios_var *__pyx_v_
   if (unlikely(!Py_OptimizeFlag)) {
     if (unlikely(!((__pyx_v_self->vp != NULL) != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Not_an_open_var);
-      __PYX_ERR(0, 1350, __pyx_L1_error)
+      __PYX_ERR(0, 1358, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "adios.pyx":1351
+  /* "adios.pyx":1359
  *         """ Close and free variable information """
  *         assert self.vp != NULL, 'Not an open var'
  *         adios_free_varinfo(self.vp)             # <<<<<<<<<<<<<<
@@ -21114,7 +21685,7 @@ static PyObject *__pyx_f_5adios_3var_close(struct __pyx_obj_5adios_var *__pyx_v_
  */
   adios_free_varinfo(__pyx_v_self->vp);
 
-  /* "adios.pyx":1352
+  /* "adios.pyx":1360
  *         assert self.vp != NULL, 'Not an open var'
  *         adios_free_varinfo(self.vp)
  *         self.vp = NULL             # <<<<<<<<<<<<<<
@@ -21123,7 +21694,7 @@ static PyObject *__pyx_f_5adios_3var_close(struct __pyx_obj_5adios_var *__pyx_v_
  */
   __pyx_v_self->vp = NULL;
 
-  /* "adios.pyx":1348
+  /* "adios.pyx":1356
  *         self.close()
  * 
  *     cpdef close(self):             # <<<<<<<<<<<<<<
@@ -21167,7 +21738,7 @@ static PyObject *__pyx_pf_5adios_3var_4close(struct __pyx_obj_5adios_var *__pyx_
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("close", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_5adios_3var_close(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1348, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_5adios_3var_close(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1356, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -21184,7 +21755,7 @@ static PyObject *__pyx_pf_5adios_3var_4close(struct __pyx_obj_5adios_var *__pyx_
   return __pyx_r;
 }
 
-/* "adios.pyx":1354
+/* "adios.pyx":1362
  *         self.vp = NULL
  * 
  *     cpdef advance(self):             # <<<<<<<<<<<<<<
@@ -21207,13 +21778,13 @@ static PyObject *__pyx_f_5adios_3var_advance(struct __pyx_obj_5adios_var *__pyx_
   if (unlikely(__pyx_skip_dispatch)) ;
   /* Check if overridden in Python */
   else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_advance); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1354, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_advance); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1362, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_5adios_3var_7advance)) {
       __Pyx_XDECREF(__pyx_r);
       __Pyx_INCREF(__pyx_t_1);
       __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
+      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
         __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
         if (likely(__pyx_t_4)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -21223,10 +21794,10 @@ static PyObject *__pyx_f_5adios_3var_advance(struct __pyx_obj_5adios_var *__pyx_
         }
       }
       if (__pyx_t_4) {
-        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1354, __pyx_L1_error)
+        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1362, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       } else {
-        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1354, __pyx_L1_error)
+        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1362, __pyx_L1_error)
       }
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -21238,17 +21809,17 @@ static PyObject *__pyx_f_5adios_3var_advance(struct __pyx_obj_5adios_var *__pyx_
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   }
 
-  /* "adios.pyx":1356
+  /* "adios.pyx":1364
  *     cpdef advance(self):
  *         """ Update variable information after the stream advanced """
  *         self.vp = adios_inq_var(self.file.fp, self.name)             # <<<<<<<<<<<<<<
  *         assert self.vp != NULL, 'Not a valid var'
  *         self.nsteps = self.vp.nsteps
  */
-  __pyx_t_5 = __Pyx_PyObject_AsString(__pyx_v_self->name); if (unlikely((!__pyx_t_5) && PyErr_Occurred())) __PYX_ERR(0, 1356, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_AsString(__pyx_v_self->name); if (unlikely((!__pyx_t_5) && PyErr_Occurred())) __PYX_ERR(0, 1364, __pyx_L1_error)
   __pyx_v_self->vp = adios_inq_var(__pyx_v_self->file->fp, __pyx_t_5);
 
-  /* "adios.pyx":1357
+  /* "adios.pyx":1365
  *         """ Update variable information after the stream advanced """
  *         self.vp = adios_inq_var(self.file.fp, self.name)
  *         assert self.vp != NULL, 'Not a valid var'             # <<<<<<<<<<<<<<
@@ -21259,12 +21830,12 @@ static PyObject *__pyx_f_5adios_3var_advance(struct __pyx_obj_5adios_var *__pyx_
   if (unlikely(!Py_OptimizeFlag)) {
     if (unlikely(!((__pyx_v_self->vp != NULL) != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Not_a_valid_var);
-      __PYX_ERR(0, 1357, __pyx_L1_error)
+      __PYX_ERR(0, 1365, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "adios.pyx":1358
+  /* "adios.pyx":1366
  *         self.vp = adios_inq_var(self.file.fp, self.name)
  *         assert self.vp != NULL, 'Not a valid var'
  *         self.nsteps = self.vp.nsteps             # <<<<<<<<<<<<<<
@@ -21274,7 +21845,7 @@ static PyObject *__pyx_f_5adios_3var_advance(struct __pyx_obj_5adios_var *__pyx_
   __pyx_t_6 = __pyx_v_self->vp->nsteps;
   __pyx_v_self->nsteps = __pyx_t_6;
 
-  /* "adios.pyx":1354
+  /* "adios.pyx":1362
  *         self.vp = NULL
  * 
  *     cpdef advance(self):             # <<<<<<<<<<<<<<
@@ -21318,7 +21889,7 @@ static PyObject *__pyx_pf_5adios_3var_6advance(struct __pyx_obj_5adios_var *__py
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("advance", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_5adios_3var_advance(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1354, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_5adios_3var_advance(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1362, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -21335,7 +21906,7 @@ static PyObject *__pyx_pf_5adios_3var_6advance(struct __pyx_obj_5adios_var *__py
   return __pyx_r;
 }
 
-/* "adios.pyx":1360
+/* "adios.pyx":1368
  *         self.nsteps = self.vp.nsteps
  * 
  *     cpdef read_points(self, tuple points = (), from_steps = None, nsteps = None):             # <<<<<<<<<<<<<<
@@ -21361,12 +21932,12 @@ static PyObject *__pyx_f_5adios_3var_read_points(struct __pyx_obj_5adios_var *__
   PyObject *__pyx_t_2 = NULL;
   PyObject *__pyx_t_3 = NULL;
   PyObject *__pyx_t_4 = NULL;
-  Py_ssize_t __pyx_t_5;
+  int __pyx_t_5;
   PyObject *__pyx_t_6 = NULL;
   int __pyx_t_7;
   int __pyx_t_8;
   Py_ssize_t __pyx_t_9;
-  int __pyx_t_10;
+  Py_ssize_t __pyx_t_10;
   int __pyx_t_11;
   __Pyx_RefNannySetupContext("read_points", 0);
   if (__pyx_optional_args) {
@@ -21387,14 +21958,14 @@ static PyObject *__pyx_f_5adios_3var_read_points(struct __pyx_obj_5adios_var *__
   if (unlikely(__pyx_skip_dispatch)) ;
   /* Check if overridden in Python */
   else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_read_points); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1360, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_read_points); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1368, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_5adios_3var_9read_points)) {
       __Pyx_XDECREF(__pyx_r);
       __Pyx_INCREF(__pyx_t_1);
       __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
       __pyx_t_5 = 0;
-      if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
+      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
         __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
         if (likely(__pyx_t_4)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -21404,23 +21975,41 @@ static PyObject *__pyx_f_5adios_3var_read_points(struct __pyx_obj_5adios_var *__
           __pyx_t_5 = 1;
         }
       }
-      __pyx_t_6 = PyTuple_New(3+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1360, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_6);
-      if (__pyx_t_4) {
-        __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_3)) {
+        PyObject *__pyx_temp[4] = {__pyx_t_4, __pyx_v_points, __pyx_v_from_steps, __pyx_v_nsteps};
+        __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 3+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1368, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
+        PyObject *__pyx_temp[4] = {__pyx_t_4, __pyx_v_points, __pyx_v_from_steps, __pyx_v_nsteps};
+        __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 3+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1368, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+      } else
+      #endif
+      {
+        __pyx_t_6 = PyTuple_New(3+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1368, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_6);
+        if (__pyx_t_4) {
+          __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL;
+        }
+        __Pyx_INCREF(__pyx_v_points);
+        __Pyx_GIVEREF(__pyx_v_points);
+        PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, __pyx_v_points);
+        __Pyx_INCREF(__pyx_v_from_steps);
+        __Pyx_GIVEREF(__pyx_v_from_steps);
+        PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, __pyx_v_from_steps);
+        __Pyx_INCREF(__pyx_v_nsteps);
+        __Pyx_GIVEREF(__pyx_v_nsteps);
+        PyTuple_SET_ITEM(__pyx_t_6, 2+__pyx_t_5, __pyx_v_nsteps);
+        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1368, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       }
-      __Pyx_INCREF(__pyx_v_points);
-      __Pyx_GIVEREF(__pyx_v_points);
-      PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, __pyx_v_points);
-      __Pyx_INCREF(__pyx_v_from_steps);
-      __Pyx_GIVEREF(__pyx_v_from_steps);
-      PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, __pyx_v_from_steps);
-      __Pyx_INCREF(__pyx_v_nsteps);
-      __Pyx_GIVEREF(__pyx_v_nsteps);
-      PyTuple_SET_ITEM(__pyx_t_6, 2+__pyx_t_5, __pyx_v_nsteps);
-      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1360, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_2);
-      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_r = __pyx_t_2;
       __pyx_t_2 = 0;
@@ -21430,7 +22019,7 @@ static PyObject *__pyx_f_5adios_3var_read_points(struct __pyx_obj_5adios_var *__
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   }
 
-  /* "adios.pyx":1376
+  /* "adios.pyx":1384
  *             IndexError: If dimension is mismatched or out of the boundary.
  *         """
  *         if from_steps is None:             # <<<<<<<<<<<<<<
@@ -21441,7 +22030,7 @@ static PyObject *__pyx_f_5adios_3var_read_points(struct __pyx_obj_5adios_var *__
   __pyx_t_8 = (__pyx_t_7 != 0);
   if (__pyx_t_8) {
 
-    /* "adios.pyx":1377
+    /* "adios.pyx":1385
  *         """
  *         if from_steps is None:
  *             from_steps = 0 ##self.file.current_step             # <<<<<<<<<<<<<<
@@ -21451,7 +22040,7 @@ static PyObject *__pyx_f_5adios_3var_read_points(struct __pyx_obj_5adios_var *__
     __Pyx_INCREF(__pyx_int_0);
     __Pyx_DECREF_SET(__pyx_v_from_steps, __pyx_int_0);
 
-    /* "adios.pyx":1376
+    /* "adios.pyx":1384
  *             IndexError: If dimension is mismatched or out of the boundary.
  *         """
  *         if from_steps is None:             # <<<<<<<<<<<<<<
@@ -21460,7 +22049,7 @@ static PyObject *__pyx_f_5adios_3var_read_points(struct __pyx_obj_5adios_var *__
  */
   }
 
-  /* "adios.pyx":1379
+  /* "adios.pyx":1387
  *             from_steps = 0 ##self.file.current_step
  * 
  *         if nsteps is None:             # <<<<<<<<<<<<<<
@@ -21471,25 +22060,25 @@ static PyObject *__pyx_f_5adios_3var_read_points(struct __pyx_obj_5adios_var *__
   __pyx_t_7 = (__pyx_t_8 != 0);
   if (__pyx_t_7) {
 
-    /* "adios.pyx":1380
+    /* "adios.pyx":1388
  * 
  *         if nsteps is None:
  *             nsteps = self.file.last_step - from_steps + 1             # <<<<<<<<<<<<<<
  * 
  *         assert self.dtype is not None, 'Data type is not supported yet'
  */
-    __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->file->last_step); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1380, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->file->last_step); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1388, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = PyNumber_Subtract(__pyx_t_1, __pyx_v_from_steps); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1380, __pyx_L1_error)
+    __pyx_t_2 = PyNumber_Subtract(__pyx_t_1, __pyx_v_from_steps); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1388, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = __Pyx_PyInt_AddObjC(__pyx_t_2, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1380, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyInt_AddObjC(__pyx_t_2, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1388, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF_SET(__pyx_v_nsteps, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "adios.pyx":1379
+    /* "adios.pyx":1387
  *             from_steps = 0 ##self.file.current_step
  * 
  *         if nsteps is None:             # <<<<<<<<<<<<<<
@@ -21498,7 +22087,7 @@ static PyObject *__pyx_f_5adios_3var_read_points(struct __pyx_obj_5adios_var *__
  */
   }
 
-  /* "adios.pyx":1382
+  /* "adios.pyx":1390
  *             nsteps = self.file.last_step - from_steps + 1
  * 
  *         assert self.dtype is not None, 'Data type is not supported yet'             # <<<<<<<<<<<<<<
@@ -21510,12 +22099,12 @@ static PyObject *__pyx_f_5adios_3var_read_points(struct __pyx_obj_5adios_var *__
     __pyx_t_7 = (((PyObject *)__pyx_v_self->dtype) != Py_None);
     if (unlikely(!(__pyx_t_7 != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Data_type_is_not_supported_yet);
-      __PYX_ERR(0, 1382, __pyx_L1_error)
+      __PYX_ERR(0, 1390, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "adios.pyx":1384
+  /* "adios.pyx":1392
  *         assert self.dtype is not None, 'Data type is not supported yet'
  * 
  *         if (self.nsteps > 0) and (from_steps + nsteps > self.nsteps):             # <<<<<<<<<<<<<<
@@ -21528,27 +22117,27 @@ static PyObject *__pyx_f_5adios_3var_read_points(struct __pyx_obj_5adios_var *__
     __pyx_t_7 = __pyx_t_8;
     goto __pyx_L6_bool_binop_done;
   }
-  __pyx_t_1 = PyNumber_Add(__pyx_v_from_steps, __pyx_v_nsteps); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1384, __pyx_L1_error)
+  __pyx_t_1 = PyNumber_Add(__pyx_v_from_steps, __pyx_v_nsteps); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1392, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_self->nsteps); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1384, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_self->nsteps); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1392, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_2, Py_GT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1384, __pyx_L1_error)
+  __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_2, Py_GT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1392, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 1384, __pyx_L1_error)
+  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 1392, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_t_7 = __pyx_t_8;
   __pyx_L6_bool_binop_done:;
   if (__pyx_t_7) {
 
-    /* "adios.pyx":1385
+    /* "adios.pyx":1393
  * 
  *         if (self.nsteps > 0) and (from_steps + nsteps > self.nsteps):
  *             raise IndexError('Step index is out of range: from_steps=%r, nsteps=%r' % (from_steps, nsteps))             # <<<<<<<<<<<<<<
  * 
  *         if not isinstance(points, tuple):
  */
-    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1385, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1393, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_from_steps);
     __Pyx_GIVEREF(__pyx_v_from_steps);
@@ -21556,22 +22145,22 @@ static PyObject *__pyx_f_5adios_3var_read_points(struct __pyx_obj_5adios_var *__
     __Pyx_INCREF(__pyx_v_nsteps);
     __Pyx_GIVEREF(__pyx_v_nsteps);
     PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_nsteps);
-    __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_Step_index_is_out_of_range_from, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1385, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_Step_index_is_out_of_range_from, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1393, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1385, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1393, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_GIVEREF(__pyx_t_2);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
     __pyx_t_2 = 0;
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1385, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1393, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __PYX_ERR(0, 1385, __pyx_L1_error)
+    __PYX_ERR(0, 1393, __pyx_L1_error)
 
-    /* "adios.pyx":1384
+    /* "adios.pyx":1392
  *         assert self.dtype is not None, 'Data type is not supported yet'
  * 
  *         if (self.nsteps > 0) and (from_steps + nsteps > self.nsteps):             # <<<<<<<<<<<<<<
@@ -21580,7 +22169,7 @@ static PyObject *__pyx_f_5adios_3var_read_points(struct __pyx_obj_5adios_var *__
  */
   }
 
-  /* "adios.pyx":1387
+  /* "adios.pyx":1395
  *             raise IndexError('Step index is out of range: from_steps=%r, nsteps=%r' % (from_steps, nsteps))
  * 
  *         if not isinstance(points, tuple):             # <<<<<<<<<<<<<<
@@ -21591,14 +22180,14 @@ static PyObject *__pyx_f_5adios_3var_read_points(struct __pyx_obj_5adios_var *__
   __pyx_t_8 = ((!(__pyx_t_7 != 0)) != 0);
   if (__pyx_t_8) {
 
-    /* "adios.pyx":1388
+    /* "adios.pyx":1396
  * 
  *         if not isinstance(points, tuple):
  *             points = (points,)             # <<<<<<<<<<<<<<
  * 
  *         if len(points) > 1:
  */
-    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1388, __pyx_L1_error)
+    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1396, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_INCREF(__pyx_v_points);
     __Pyx_GIVEREF(__pyx_v_points);
@@ -21606,7 +22195,7 @@ static PyObject *__pyx_f_5adios_3var_read_points(struct __pyx_obj_5adios_var *__
     __Pyx_DECREF_SET(__pyx_v_points, ((PyObject*)__pyx_t_2));
     __pyx_t_2 = 0;
 
-    /* "adios.pyx":1387
+    /* "adios.pyx":1395
  *             raise IndexError('Step index is out of range: from_steps=%r, nsteps=%r' % (from_steps, nsteps))
  * 
  *         if not isinstance(points, tuple):             # <<<<<<<<<<<<<<
@@ -21615,7 +22204,7 @@ static PyObject *__pyx_f_5adios_3var_read_points(struct __pyx_obj_5adios_var *__
  */
   }
 
-  /* "adios.pyx":1390
+  /* "adios.pyx":1398
  *             points = (points,)
  * 
  *         if len(points) > 1:             # <<<<<<<<<<<<<<
@@ -21624,13 +22213,13 @@ static PyObject *__pyx_f_5adios_3var_read_points(struct __pyx_obj_5adios_var *__
  */
   if (unlikely(__pyx_v_points == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
-    __PYX_ERR(0, 1390, __pyx_L1_error)
+    __PYX_ERR(0, 1398, __pyx_L1_error)
   }
-  __pyx_t_5 = PyTuple_GET_SIZE(__pyx_v_points); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 1390, __pyx_L1_error)
-  __pyx_t_8 = ((__pyx_t_5 > 1) != 0);
+  __pyx_t_9 = PyTuple_GET_SIZE(__pyx_v_points); if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 1398, __pyx_L1_error)
+  __pyx_t_8 = ((__pyx_t_9 > 1) != 0);
   if (__pyx_t_8) {
 
-    /* "adios.pyx":1391
+    /* "adios.pyx":1399
  * 
  *         if len(points) > 1:
  *             plen = len(points[0])             # <<<<<<<<<<<<<<
@@ -21639,86 +22228,86 @@ static PyObject *__pyx_f_5adios_3var_read_points(struct __pyx_obj_5adios_var *__
  */
     if (unlikely(__pyx_v_points == Py_None)) {
       PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-      __PYX_ERR(0, 1391, __pyx_L1_error)
+      __PYX_ERR(0, 1399, __pyx_L1_error)
     }
-    __pyx_t_2 = __Pyx_GetItemInt_Tuple(__pyx_v_points, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1391, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_GetItemInt_Tuple(__pyx_v_points, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1399, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_5 = PyObject_Length(__pyx_t_2); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 1391, __pyx_L1_error)
+    __pyx_t_9 = PyObject_Length(__pyx_t_2); if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 1399, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_v_plen = __pyx_t_5;
+    __pyx_v_plen = __pyx_t_9;
 
-    /* "adios.pyx":1392
+    /* "adios.pyx":1400
  *         if len(points) > 1:
  *             plen = len(points[0])
  *             if not all([len(x) == plen for x in points]):             # <<<<<<<<<<<<<<
  *                 raise IndexError('All points must have the same length %r' % (points,))
  * 
  */
-    __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1392, __pyx_L1_error)
+    __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1400, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     if (unlikely(__pyx_v_points == Py_None)) {
       PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
-      __PYX_ERR(0, 1392, __pyx_L1_error)
+      __PYX_ERR(0, 1400, __pyx_L1_error)
     }
-    __pyx_t_3 = __pyx_v_points; __Pyx_INCREF(__pyx_t_3); __pyx_t_5 = 0;
+    __pyx_t_3 = __pyx_v_points; __Pyx_INCREF(__pyx_t_3); __pyx_t_9 = 0;
     for (;;) {
-      if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 1392, __pyx_L1_error)
+      if (__pyx_t_9 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
+      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+      __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_9); __Pyx_INCREF(__pyx_t_1); __pyx_t_9++; if (unlikely(0 < 0)) __PYX_ERR(0, 1400, __pyx_L1_error)
       #else
-      __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1392, __pyx_L1_error)
+      __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1400, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       #endif
       __Pyx_XDECREF_SET(__pyx_v_x, __pyx_t_1);
       __pyx_t_1 = 0;
-      __pyx_t_9 = PyObject_Length(__pyx_v_x); if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 1392, __pyx_L1_error)
-      __pyx_t_1 = __Pyx_PyBool_FromLong((__pyx_t_9 == __pyx_v_plen)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1392, __pyx_L1_error)
+      __pyx_t_10 = PyObject_Length(__pyx_v_x); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 1400, __pyx_L1_error)
+      __pyx_t_1 = __Pyx_PyBool_FromLong((__pyx_t_10 == __pyx_v_plen)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1400, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
-      if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_1))) __PYX_ERR(0, 1392, __pyx_L1_error)
+      if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_1))) __PYX_ERR(0, 1400, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     }
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1392, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1400, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_GIVEREF(__pyx_t_2);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
     __pyx_t_2 = 0;
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_all, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1392, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_all, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1400, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 1392, __pyx_L1_error)
+    __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 1400, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __pyx_t_7 = ((!__pyx_t_8) != 0);
     if (__pyx_t_7) {
 
-      /* "adios.pyx":1393
+      /* "adios.pyx":1401
  *             plen = len(points[0])
  *             if not all([len(x) == plen for x in points]):
  *                 raise IndexError('All points must have the same length %r' % (points,))             # <<<<<<<<<<<<<<
  * 
  *         cpdef uint64_t ndim = self.ndim
  */
-      __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1393, __pyx_L1_error)
+      __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1401, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_INCREF(__pyx_v_points);
       __Pyx_GIVEREF(__pyx_v_points);
       PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_points);
-      __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_All_points_must_have_the_same_le, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1393, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_All_points_must_have_the_same_le, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1401, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-      __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1393, __pyx_L1_error)
+      __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1401, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_GIVEREF(__pyx_t_3);
       PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
       __pyx_t_3 = 0;
-      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1393, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1401, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       __Pyx_Raise(__pyx_t_3, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      __PYX_ERR(0, 1393, __pyx_L1_error)
+      __PYX_ERR(0, 1401, __pyx_L1_error)
 
-      /* "adios.pyx":1392
+      /* "adios.pyx":1400
  *         if len(points) > 1:
  *             plen = len(points[0])
  *             if not all([len(x) == plen for x in points]):             # <<<<<<<<<<<<<<
@@ -21727,7 +22316,7 @@ static PyObject *__pyx_f_5adios_3var_read_points(struct __pyx_obj_5adios_var *__
  */
     }
 
-    /* "adios.pyx":1390
+    /* "adios.pyx":1398
  *             points = (points,)
  * 
  *         if len(points) > 1:             # <<<<<<<<<<<<<<
@@ -21736,17 +22325,17 @@ static PyObject *__pyx_f_5adios_3var_read_points(struct __pyx_obj_5adios_var *__
  */
   }
 
-  /* "adios.pyx":1395
+  /* "adios.pyx":1403
  *                 raise IndexError('All points must have the same length %r' % (points,))
  * 
  *         cpdef uint64_t ndim = self.ndim             # <<<<<<<<<<<<<<
  *         cpdef uint64_t npoints = len(points)
  *         ##print 'ndim, npoints = %r, %r' % (ndim, npoints)
  */
-  __pyx_t_10 = __pyx_v_self->ndim;
-  __pyx_v_ndim = __pyx_t_10;
+  __pyx_t_5 = __pyx_v_self->ndim;
+  __pyx_v_ndim = __pyx_t_5;
 
-  /* "adios.pyx":1396
+  /* "adios.pyx":1404
  * 
  *         cpdef uint64_t ndim = self.ndim
  *         cpdef uint64_t npoints = len(points)             # <<<<<<<<<<<<<<
@@ -21755,87 +22344,87 @@ static PyObject *__pyx_f_5adios_3var_read_points(struct __pyx_obj_5adios_var *__
  */
   if (unlikely(__pyx_v_points == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
-    __PYX_ERR(0, 1396, __pyx_L1_error)
+    __PYX_ERR(0, 1404, __pyx_L1_error)
   }
-  __pyx_t_5 = PyTuple_GET_SIZE(__pyx_v_points); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 1396, __pyx_L1_error)
-  __pyx_v_npoints = __pyx_t_5;
+  __pyx_t_9 = PyTuple_GET_SIZE(__pyx_v_points); if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 1404, __pyx_L1_error)
+  __pyx_v_npoints = __pyx_t_9;
 
-  /* "adios.pyx":1399
+  /* "adios.pyx":1407
  *         ##print 'ndim, npoints = %r, %r' % (ndim, npoints)
  * 
  *         cdef np.ndarray nppoints = np.array(points, dtype=np.int64, order='C')             # <<<<<<<<<<<<<<
  *         ##print 'nppoints.ndim = %r' % (nppoints.ndim)
  *         ##print 'nppoints.shape = (%r, %r)' % (nppoints.shape[0], nppoints.shape[1])
  */
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1399, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1407, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_array); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1399, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_array); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1407, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1399, __pyx_L1_error)
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1407, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_v_points);
   __Pyx_GIVEREF(__pyx_v_points);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_points);
-  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1399, __pyx_L1_error)
+  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1407, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1399, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1407, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_int64); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1399, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_int64); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1407, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 1399, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 1407, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_order, __pyx_n_s_C) < 0) __PYX_ERR(0, 1399, __pyx_L1_error)
-  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1399, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_order, __pyx_n_s_C) < 0) __PYX_ERR(0, 1407, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1407, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1399, __pyx_L1_error)
+  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1407, __pyx_L1_error)
   __pyx_v_nppoints = ((PyArrayObject *)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "adios.pyx":1403
+  /* "adios.pyx":1411
  *         ##print 'nppoints.shape = (%r, %r)' % (nppoints.shape[0], nppoints.shape[1])
  * 
  *         cdef np.ndarray var = np.zeros((npoints * nsteps,), dtype=self.dtype)             # <<<<<<<<<<<<<<
  *         ##print 'nppoints.ndim = %r' % (nppoints.ndim)
  *         ##print 'nppoints.shape = (%r, %r)' % (nppoints.shape[0], nppoints.shape[1])
  */
-  __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1403, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1411, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_zeros); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1403, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_zeros); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1411, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_4 = __Pyx_PyInt_From_uint64_t(__pyx_v_npoints); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1403, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyInt_From_uint64_t(__pyx_v_npoints); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1411, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_3 = PyNumber_Multiply(__pyx_t_4, __pyx_v_nsteps); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1403, __pyx_L1_error)
+  __pyx_t_3 = PyNumber_Multiply(__pyx_t_4, __pyx_v_nsteps); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1411, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1403, __pyx_L1_error)
+  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1411, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
   __pyx_t_3 = 0;
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1403, __pyx_L1_error)
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1411, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_GIVEREF(__pyx_t_4);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);
   __pyx_t_4 = 0;
-  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1403, __pyx_L1_error)
+  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1411, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, ((PyObject *)__pyx_v_self->dtype)) < 0) __PYX_ERR(0, 1403, __pyx_L1_error)
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1403, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, ((PyObject *)__pyx_v_self->dtype)) < 0) __PYX_ERR(0, 1411, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1411, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1403, __pyx_L1_error)
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1411, __pyx_L1_error)
   __pyx_v_var = ((PyArrayObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "adios.pyx":1408
+  /* "adios.pyx":1416
  * 
  *         cdef ADIOS_SELECTION * sel
  *         sel = adios_selection_points (ndim, npoints, <uint64_t *> nppoints.data)             # <<<<<<<<<<<<<<
@@ -21844,18 +22433,18 @@ static PyObject *__pyx_f_5adios_3var_read_points(struct __pyx_obj_5adios_var *__
  */
   __pyx_v_sel = adios_selection_points(__pyx_v_ndim, __pyx_v_npoints, ((uint64_t *)__pyx_v_nppoints->data));
 
-  /* "adios.pyx":1410
+  /* "adios.pyx":1418
  *         sel = adios_selection_points (ndim, npoints, <uint64_t *> nppoints.data)
  * 
  *         adios_schedule_read_byid (self.file.fp, sel, self.vp.varid, from_steps, nsteps, <void *> var.data)             # <<<<<<<<<<<<<<
  *         adios_perform_reads(self.file.fp, 1)
  *         adios_selection_delete(sel)
  */
-  __pyx_t_10 = __Pyx_PyInt_As_int(__pyx_v_from_steps); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1410, __pyx_L1_error)
-  __pyx_t_11 = __Pyx_PyInt_As_int(__pyx_v_nsteps); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1410, __pyx_L1_error)
-  adios_schedule_read_byid(__pyx_v_self->file->fp, __pyx_v_sel, __pyx_v_self->vp->varid, __pyx_t_10, __pyx_t_11, ((void *)__pyx_v_var->data));
+  __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_v_from_steps); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1418, __pyx_L1_error)
+  __pyx_t_11 = __Pyx_PyInt_As_int(__pyx_v_nsteps); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1418, __pyx_L1_error)
+  adios_schedule_read_byid(__pyx_v_self->file->fp, __pyx_v_sel, __pyx_v_self->vp->varid, __pyx_t_5, __pyx_t_11, ((void *)__pyx_v_var->data));
 
-  /* "adios.pyx":1411
+  /* "adios.pyx":1419
  * 
  *         adios_schedule_read_byid (self.file.fp, sel, self.vp.varid, from_steps, nsteps, <void *> var.data)
  *         adios_perform_reads(self.file.fp, 1)             # <<<<<<<<<<<<<<
@@ -21864,7 +22453,7 @@ static PyObject *__pyx_f_5adios_3var_read_points(struct __pyx_obj_5adios_var *__
  */
   adios_perform_reads(__pyx_v_self->file->fp, 1);
 
-  /* "adios.pyx":1412
+  /* "adios.pyx":1420
  *         adios_schedule_read_byid (self.file.fp, sel, self.vp.varid, from_steps, nsteps, <void *> var.data)
  *         adios_perform_reads(self.file.fp, 1)
  *         adios_selection_delete(sel)             # <<<<<<<<<<<<<<
@@ -21873,7 +22462,7 @@ static PyObject *__pyx_f_5adios_3var_read_points(struct __pyx_obj_5adios_var *__
  */
   adios_selection_delete(__pyx_v_sel);
 
-  /* "adios.pyx":1414
+  /* "adios.pyx":1422
  *         adios_selection_delete(sel)
  * 
  *         return var             # <<<<<<<<<<<<<<
@@ -21885,7 +22474,7 @@ static PyObject *__pyx_f_5adios_3var_read_points(struct __pyx_obj_5adios_var *__
   __pyx_r = ((PyObject *)__pyx_v_var);
   goto __pyx_L0;
 
-  /* "adios.pyx":1360
+  /* "adios.pyx":1368
  *         self.nsteps = self.vp.nsteps
  * 
  *     cpdef read_points(self, tuple points = (), from_steps = None, nsteps = None):             # <<<<<<<<<<<<<<
@@ -21959,7 +22548,7 @@ static PyObject *__pyx_pw_5adios_3var_9read_points(PyObject *__pyx_v_self, PyObj
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "read_points") < 0)) __PYX_ERR(0, 1360, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "read_points") < 0)) __PYX_ERR(0, 1368, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -21976,13 +22565,13 @@ static PyObject *__pyx_pw_5adios_3var_9read_points(PyObject *__pyx_v_self, PyObj
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("read_points", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1360, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("read_points", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1368, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.var.read_points", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_points), (&PyTuple_Type), 1, "points", 1))) __PYX_ERR(0, 1360, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_points), (&PyTuple_Type), 1, "points", 1))) __PYX_ERR(0, 1368, __pyx_L1_error)
   __pyx_r = __pyx_pf_5adios_3var_8read_points(((struct __pyx_obj_5adios_var *)__pyx_v_self), __pyx_v_points, __pyx_v_from_steps, __pyx_v_nsteps);
 
   /* function exit code */
@@ -22005,7 +22594,7 @@ static PyObject *__pyx_pf_5adios_3var_8read_points(struct __pyx_obj_5adios_var *
   __pyx_t_2.points = __pyx_v_points;
   __pyx_t_2.from_steps = __pyx_v_from_steps;
   __pyx_t_2.nsteps = __pyx_v_nsteps;
-  __pyx_t_1 = __pyx_vtabptr_5adios_var->read_points(__pyx_v_self, 1, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1360, __pyx_L1_error)
+  __pyx_t_1 = __pyx_vtabptr_5adios_var->read_points(__pyx_v_self, 1, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1368, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -22022,7 +22611,7 @@ static PyObject *__pyx_pf_5adios_3var_8read_points(struct __pyx_obj_5adios_var *
   return __pyx_r;
 }
 
-/* "adios.pyx":1416
+/* "adios.pyx":1424
  *         return var
  * 
  *     cpdef read_writeblock(self, int rank, from_steps = None, nsteps = None):             # <<<<<<<<<<<<<<
@@ -22045,13 +22634,12 @@ static PyObject *__pyx_f_5adios_3var_read_writeblock(struct __pyx_obj_5adios_var
   PyObject *__pyx_t_3 = NULL;
   PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
-  Py_ssize_t __pyx_t_6;
+  int __pyx_t_6;
   PyObject *__pyx_t_7 = NULL;
   int __pyx_t_8;
   int __pyx_t_9;
   int __pyx_t_10;
   int __pyx_t_11;
-  int __pyx_t_12;
   __Pyx_RefNannySetupContext("read_writeblock", 0);
   if (__pyx_optional_args) {
     if (__pyx_optional_args->__pyx_n > 0) {
@@ -22067,16 +22655,16 @@ static PyObject *__pyx_f_5adios_3var_read_writeblock(struct __pyx_obj_5adios_var
   if (unlikely(__pyx_skip_dispatch)) ;
   /* Check if overridden in Python */
   else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_read_writeblock); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1416, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_read_writeblock); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1424, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_5adios_3var_11read_writeblock)) {
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_rank); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1416, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_rank); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1424, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_INCREF(__pyx_t_1);
       __pyx_t_4 = __pyx_t_1; __pyx_t_5 = NULL;
       __pyx_t_6 = 0;
-      if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_4))) {
+      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
         __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
         if (likely(__pyx_t_5)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
@@ -22086,23 +22674,43 @@ static PyObject *__pyx_f_5adios_3var_read_writeblock(struct __pyx_obj_5adios_var
           __pyx_t_6 = 1;
         }
       }
-      __pyx_t_7 = PyTuple_New(3+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1416, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_7);
-      if (__pyx_t_5) {
-        __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5); __pyx_t_5 = NULL;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_4)) {
+        PyObject *__pyx_temp[4] = {__pyx_t_5, __pyx_t_3, __pyx_v_from_steps, __pyx_v_nsteps};
+        __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1424, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
+        PyObject *__pyx_temp[4] = {__pyx_t_5, __pyx_t_3, __pyx_v_from_steps, __pyx_v_nsteps};
+        __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1424, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      } else
+      #endif
+      {
+        __pyx_t_7 = PyTuple_New(3+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1424, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_7);
+        if (__pyx_t_5) {
+          __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5); __pyx_t_5 = NULL;
+        }
+        __Pyx_GIVEREF(__pyx_t_3);
+        PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, __pyx_t_3);
+        __Pyx_INCREF(__pyx_v_from_steps);
+        __Pyx_GIVEREF(__pyx_v_from_steps);
+        PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_v_from_steps);
+        __Pyx_INCREF(__pyx_v_nsteps);
+        __Pyx_GIVEREF(__pyx_v_nsteps);
+        PyTuple_SET_ITEM(__pyx_t_7, 2+__pyx_t_6, __pyx_v_nsteps);
+        __pyx_t_3 = 0;
+        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1424, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       }
-      __Pyx_GIVEREF(__pyx_t_3);
-      PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, __pyx_t_3);
-      __Pyx_INCREF(__pyx_v_from_steps);
-      __Pyx_GIVEREF(__pyx_v_from_steps);
-      PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_v_from_steps);
-      __Pyx_INCREF(__pyx_v_nsteps);
-      __Pyx_GIVEREF(__pyx_v_nsteps);
-      PyTuple_SET_ITEM(__pyx_t_7, 2+__pyx_t_6, __pyx_v_nsteps);
-      __pyx_t_3 = 0;
-      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1416, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_2);
-      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __pyx_r = __pyx_t_2;
       __pyx_t_2 = 0;
@@ -22112,7 +22720,7 @@ static PyObject *__pyx_f_5adios_3var_read_writeblock(struct __pyx_obj_5adios_var
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   }
 
-  /* "adios.pyx":1432
+  /* "adios.pyx":1440
  *             IndexError: If dimension is mismatched or out of the boundary.
  *         """
  *         if from_steps is None:             # <<<<<<<<<<<<<<
@@ -22123,7 +22731,7 @@ static PyObject *__pyx_f_5adios_3var_read_writeblock(struct __pyx_obj_5adios_var
   __pyx_t_9 = (__pyx_t_8 != 0);
   if (__pyx_t_9) {
 
-    /* "adios.pyx":1433
+    /* "adios.pyx":1441
  *         """
  *         if from_steps is None:
  *             from_steps = 0 ##self.file.current_step             # <<<<<<<<<<<<<<
@@ -22133,7 +22741,7 @@ static PyObject *__pyx_f_5adios_3var_read_writeblock(struct __pyx_obj_5adios_var
     __Pyx_INCREF(__pyx_int_0);
     __Pyx_DECREF_SET(__pyx_v_from_steps, __pyx_int_0);
 
-    /* "adios.pyx":1432
+    /* "adios.pyx":1440
  *             IndexError: If dimension is mismatched or out of the boundary.
  *         """
  *         if from_steps is None:             # <<<<<<<<<<<<<<
@@ -22142,7 +22750,7 @@ static PyObject *__pyx_f_5adios_3var_read_writeblock(struct __pyx_obj_5adios_var
  */
   }
 
-  /* "adios.pyx":1435
+  /* "adios.pyx":1443
  *             from_steps = 0 ##self.file.current_step
  * 
  *         if nsteps is None:             # <<<<<<<<<<<<<<
@@ -22153,25 +22761,25 @@ static PyObject *__pyx_f_5adios_3var_read_writeblock(struct __pyx_obj_5adios_var
   __pyx_t_8 = (__pyx_t_9 != 0);
   if (__pyx_t_8) {
 
-    /* "adios.pyx":1436
+    /* "adios.pyx":1444
  * 
  *         if nsteps is None:
  *             nsteps = self.file.last_step - from_steps + 1             # <<<<<<<<<<<<<<
  * 
  *         assert self.dtype is not None, 'Data type is not supported yet'
  */
-    __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->file->last_step); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1436, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->file->last_step); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1444, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = PyNumber_Subtract(__pyx_t_1, __pyx_v_from_steps); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1436, __pyx_L1_error)
+    __pyx_t_2 = PyNumber_Subtract(__pyx_t_1, __pyx_v_from_steps); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1444, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = __Pyx_PyInt_AddObjC(__pyx_t_2, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1436, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyInt_AddObjC(__pyx_t_2, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1444, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF_SET(__pyx_v_nsteps, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "adios.pyx":1435
+    /* "adios.pyx":1443
  *             from_steps = 0 ##self.file.current_step
  * 
  *         if nsteps is None:             # <<<<<<<<<<<<<<
@@ -22180,7 +22788,7 @@ static PyObject *__pyx_f_5adios_3var_read_writeblock(struct __pyx_obj_5adios_var
  */
   }
 
-  /* "adios.pyx":1438
+  /* "adios.pyx":1446
  *             nsteps = self.file.last_step - from_steps + 1
  * 
  *         assert self.dtype is not None, 'Data type is not supported yet'             # <<<<<<<<<<<<<<
@@ -22192,12 +22800,12 @@ static PyObject *__pyx_f_5adios_3var_read_writeblock(struct __pyx_obj_5adios_var
     __pyx_t_8 = (((PyObject *)__pyx_v_self->dtype) != Py_None);
     if (unlikely(!(__pyx_t_8 != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Data_type_is_not_supported_yet);
-      __PYX_ERR(0, 1438, __pyx_L1_error)
+      __PYX_ERR(0, 1446, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "adios.pyx":1439
+  /* "adios.pyx":1447
  * 
  *         assert self.dtype is not None, 'Data type is not supported yet'
  *         assert rank < self.vp.sum_nblocks, 'Rank is out of range (nblock=%r)' % (self.vp.sum_nblocks)             # <<<<<<<<<<<<<<
@@ -22207,19 +22815,19 @@ static PyObject *__pyx_f_5adios_3var_read_writeblock(struct __pyx_obj_5adios_var
   #ifndef CYTHON_WITHOUT_ASSERTIONS
   if (unlikely(!Py_OptimizeFlag)) {
     if (unlikely(!((__pyx_v_rank < __pyx_v_self->vp->sum_nblocks) != 0))) {
-      __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->vp->sum_nblocks); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1439, __pyx_L1_error)
+      __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->vp->sum_nblocks); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1447, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
-      __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_Rank_is_out_of_range_nblock_r, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1439, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_Rank_is_out_of_range_nblock_r, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1447, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-      __PYX_ERR(0, 1439, __pyx_L1_error)
+      __PYX_ERR(0, 1447, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "adios.pyx":1441
+  /* "adios.pyx":1449
  *         assert rank < self.vp.sum_nblocks, 'Rank is out of range (nblock=%r)' % (self.vp.sum_nblocks)
  * 
  *         if (self.nsteps > 0) and (from_steps + nsteps > self.nsteps):             # <<<<<<<<<<<<<<
@@ -22232,27 +22840,27 @@ static PyObject *__pyx_f_5adios_3var_read_writeblock(struct __pyx_obj_5adios_var
     __pyx_t_8 = __pyx_t_9;
     goto __pyx_L6_bool_binop_done;
   }
-  __pyx_t_2 = PyNumber_Add(__pyx_v_from_steps, __pyx_v_nsteps); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1441, __pyx_L1_error)
+  __pyx_t_2 = PyNumber_Add(__pyx_v_from_steps, __pyx_v_nsteps); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1449, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->nsteps); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1441, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->nsteps); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1449, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_t_1, Py_GT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1441, __pyx_L1_error)
+  __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_t_1, Py_GT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1449, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 1441, __pyx_L1_error)
+  __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 1449, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_t_8 = __pyx_t_9;
   __pyx_L6_bool_binop_done:;
   if (__pyx_t_8) {
 
-    /* "adios.pyx":1442
+    /* "adios.pyx":1450
  * 
  *         if (self.nsteps > 0) and (from_steps + nsteps > self.nsteps):
  *             raise IndexError('Step index is out of range: from_steps=%r, nsteps=%r' % (from_steps, nsteps))             # <<<<<<<<<<<<<<
  * 
  *         shape = [self.vp.blockinfo[rank].count[i] for i in range(self.vp.ndim)]
  */
-    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1442, __pyx_L1_error)
+    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1450, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_INCREF(__pyx_v_from_steps);
     __Pyx_GIVEREF(__pyx_v_from_steps);
@@ -22260,22 +22868,22 @@ static PyObject *__pyx_f_5adios_3var_read_writeblock(struct __pyx_obj_5adios_var
     __Pyx_INCREF(__pyx_v_nsteps);
     __Pyx_GIVEREF(__pyx_v_nsteps);
     PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_nsteps);
-    __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Step_index_is_out_of_range_from, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1442, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Step_index_is_out_of_range_from, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1450, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1442, __pyx_L1_error)
+    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1450, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_GIVEREF(__pyx_t_1);
     PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
     __pyx_t_1 = 0;
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1442, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1450, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_Raise(__pyx_t_1, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __PYX_ERR(0, 1442, __pyx_L1_error)
+    __PYX_ERR(0, 1450, __pyx_L1_error)
 
-    /* "adios.pyx":1441
+    /* "adios.pyx":1449
  *         assert rank < self.vp.sum_nblocks, 'Rank is out of range (nblock=%r)' % (self.vp.sum_nblocks)
  * 
  *         if (self.nsteps > 0) and (from_steps + nsteps > self.nsteps):             # <<<<<<<<<<<<<<
@@ -22284,48 +22892,48 @@ static PyObject *__pyx_f_5adios_3var_read_writeblock(struct __pyx_obj_5adios_var
  */
   }
 
-  /* "adios.pyx":1444
+  /* "adios.pyx":1452
  *             raise IndexError('Step index is out of range: from_steps=%r, nsteps=%r' % (from_steps, nsteps))
  * 
  *         shape = [self.vp.blockinfo[rank].count[i] for i in range(self.vp.ndim)]             # <<<<<<<<<<<<<<
  *         if (nsteps>1):
  *             shape.insert(0, nsteps)
  */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1444, __pyx_L1_error)
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1452, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_10 = __pyx_v_self->vp->ndim;
-  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
-    __pyx_v_i = __pyx_t_11;
-    __pyx_t_4 = __Pyx_PyInt_From_uint64_t(((__pyx_v_self->vp->blockinfo[__pyx_v_rank]).count[__pyx_v_i])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1444, __pyx_L1_error)
+  __pyx_t_6 = __pyx_v_self->vp->ndim;
+  for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_6; __pyx_t_10+=1) {
+    __pyx_v_i = __pyx_t_10;
+    __pyx_t_4 = __Pyx_PyInt_From_uint64_t(((__pyx_v_self->vp->blockinfo[__pyx_v_rank]).count[__pyx_v_i])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1452, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_4))) __PYX_ERR(0, 1444, __pyx_L1_error)
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_4))) __PYX_ERR(0, 1452, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   }
   __pyx_v_shape = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "adios.pyx":1445
+  /* "adios.pyx":1453
  * 
  *         shape = [self.vp.blockinfo[rank].count[i] for i in range(self.vp.ndim)]
  *         if (nsteps>1):             # <<<<<<<<<<<<<<
  *             shape.insert(0, nsteps)
  *         cdef np.ndarray var = np.zeros(shape, dtype=self.dtype)
  */
-  __pyx_t_1 = PyObject_RichCompare(__pyx_v_nsteps, __pyx_int_1, Py_GT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1445, __pyx_L1_error)
-  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 1445, __pyx_L1_error)
+  __pyx_t_1 = PyObject_RichCompare(__pyx_v_nsteps, __pyx_int_1, Py_GT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1453, __pyx_L1_error)
+  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 1453, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   if (__pyx_t_8) {
 
-    /* "adios.pyx":1446
+    /* "adios.pyx":1454
  *         shape = [self.vp.blockinfo[rank].count[i] for i in range(self.vp.ndim)]
  *         if (nsteps>1):
  *             shape.insert(0, nsteps)             # <<<<<<<<<<<<<<
  *         cdef np.ndarray var = np.zeros(shape, dtype=self.dtype)
  * 
  */
-    __pyx_t_12 = PyList_Insert(__pyx_v_shape, 0, __pyx_v_nsteps); if (unlikely(__pyx_t_12 == -1)) __PYX_ERR(0, 1446, __pyx_L1_error)
+    __pyx_t_11 = PyList_Insert(__pyx_v_shape, 0, __pyx_v_nsteps); if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 1454, __pyx_L1_error)
 
-    /* "adios.pyx":1445
+    /* "adios.pyx":1453
  * 
  *         shape = [self.vp.blockinfo[rank].count[i] for i in range(self.vp.ndim)]
  *         if (nsteps>1):             # <<<<<<<<<<<<<<
@@ -22334,36 +22942,36 @@ static PyObject *__pyx_f_5adios_3var_read_writeblock(struct __pyx_obj_5adios_var
  */
   }
 
-  /* "adios.pyx":1447
+  /* "adios.pyx":1455
  *         if (nsteps>1):
  *             shape.insert(0, nsteps)
  *         cdef np.ndarray var = np.zeros(shape, dtype=self.dtype)             # <<<<<<<<<<<<<<
  * 
  *         cdef ADIOS_SELECTION * sel
  */
-  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1447, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1455, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1447, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1455, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1447, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1455, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_v_shape);
   __Pyx_GIVEREF(__pyx_v_shape);
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_shape);
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1447, __pyx_L1_error)
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1455, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, ((PyObject *)__pyx_v_self->dtype)) < 0) __PYX_ERR(0, 1447, __pyx_L1_error)
-  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1447, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, ((PyObject *)__pyx_v_self->dtype)) < 0) __PYX_ERR(0, 1455, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1455, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1447, __pyx_L1_error)
+  if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1455, __pyx_L1_error)
   __pyx_v_var = ((PyArrayObject *)__pyx_t_7);
   __pyx_t_7 = 0;
 
-  /* "adios.pyx":1450
+  /* "adios.pyx":1458
  * 
  *         cdef ADIOS_SELECTION * sel
  *         sel = adios_selection_writeblock (rank)             # <<<<<<<<<<<<<<
@@ -22372,18 +22980,18 @@ static PyObject *__pyx_f_5adios_3var_read_writeblock(struct __pyx_obj_5adios_var
  */
   __pyx_v_sel = adios_selection_writeblock(__pyx_v_rank);
 
-  /* "adios.pyx":1452
+  /* "adios.pyx":1460
  *         sel = adios_selection_writeblock (rank)
  * 
  *         adios_schedule_read_byid (self.file.fp, sel, self.vp.varid, from_steps, nsteps, <void *> var.data)             # <<<<<<<<<<<<<<
  *         adios_perform_reads(self.file.fp, 1)
  *         adios_selection_delete(sel)
  */
-  __pyx_t_10 = __Pyx_PyInt_As_int(__pyx_v_from_steps); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1452, __pyx_L1_error)
-  __pyx_t_11 = __Pyx_PyInt_As_int(__pyx_v_nsteps); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1452, __pyx_L1_error)
-  adios_schedule_read_byid(__pyx_v_self->file->fp, __pyx_v_sel, __pyx_v_self->vp->varid, __pyx_t_10, __pyx_t_11, ((void *)__pyx_v_var->data));
+  __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_v_from_steps); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1460, __pyx_L1_error)
+  __pyx_t_10 = __Pyx_PyInt_As_int(__pyx_v_nsteps); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1460, __pyx_L1_error)
+  adios_schedule_read_byid(__pyx_v_self->file->fp, __pyx_v_sel, __pyx_v_self->vp->varid, __pyx_t_6, __pyx_t_10, ((void *)__pyx_v_var->data));
 
-  /* "adios.pyx":1453
+  /* "adios.pyx":1461
  * 
  *         adios_schedule_read_byid (self.file.fp, sel, self.vp.varid, from_steps, nsteps, <void *> var.data)
  *         adios_perform_reads(self.file.fp, 1)             # <<<<<<<<<<<<<<
@@ -22392,7 +23000,7 @@ static PyObject *__pyx_f_5adios_3var_read_writeblock(struct __pyx_obj_5adios_var
  */
   adios_perform_reads(__pyx_v_self->file->fp, 1);
 
-  /* "adios.pyx":1454
+  /* "adios.pyx":1462
  *         adios_schedule_read_byid (self.file.fp, sel, self.vp.varid, from_steps, nsteps, <void *> var.data)
  *         adios_perform_reads(self.file.fp, 1)
  *         adios_selection_delete(sel)             # <<<<<<<<<<<<<<
@@ -22401,7 +23009,7 @@ static PyObject *__pyx_f_5adios_3var_read_writeblock(struct __pyx_obj_5adios_var
  */
   adios_selection_delete(__pyx_v_sel);
 
-  /* "adios.pyx":1455
+  /* "adios.pyx":1463
  *         adios_perform_reads(self.file.fp, 1)
  *         adios_selection_delete(sel)
  *         return var             # <<<<<<<<<<<<<<
@@ -22413,7 +23021,7 @@ static PyObject *__pyx_f_5adios_3var_read_writeblock(struct __pyx_obj_5adios_var
   __pyx_r = ((PyObject *)__pyx_v_var);
   goto __pyx_L0;
 
-  /* "adios.pyx":1416
+  /* "adios.pyx":1424
  *         return var
  * 
  *     cpdef read_writeblock(self, int rank, from_steps = None, nsteps = None):             # <<<<<<<<<<<<<<
@@ -22483,7 +23091,7 @@ static PyObject *__pyx_pw_5adios_3var_11read_writeblock(PyObject *__pyx_v_self,
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "read_writeblock") < 0)) __PYX_ERR(0, 1416, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "read_writeblock") < 0)) __PYX_ERR(0, 1424, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -22494,13 +23102,13 @@ static PyObject *__pyx_pw_5adios_3var_11read_writeblock(PyObject *__pyx_v_self,
         default: goto __pyx_L5_argtuple_error;
       }
     }
-    __pyx_v_rank = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_rank == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1416, __pyx_L3_error)
+    __pyx_v_rank = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_rank == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1424, __pyx_L3_error)
     __pyx_v_from_steps = values[1];
     __pyx_v_nsteps = values[2];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("read_writeblock", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1416, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("read_writeblock", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1424, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.var.read_writeblock", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -22523,7 +23131,7 @@ static PyObject *__pyx_pf_5adios_3var_10read_writeblock(struct __pyx_obj_5adios_
   __pyx_t_2.__pyx_n = 2;
   __pyx_t_2.from_steps = __pyx_v_from_steps;
   __pyx_t_2.nsteps = __pyx_v_nsteps;
-  __pyx_t_1 = __pyx_vtabptr_5adios_var->read_writeblock(__pyx_v_self, __pyx_v_rank, 1, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1416, __pyx_L1_error)
+  __pyx_t_1 = __pyx_vtabptr_5adios_var->read_writeblock(__pyx_v_self, __pyx_v_rank, 1, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1424, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -22540,7 +23148,7 @@ static PyObject *__pyx_pf_5adios_3var_10read_writeblock(struct __pyx_obj_5adios_
   return __pyx_r;
 }
 
-/* "adios.pyx":1457
+/* "adios.pyx":1465
  *         return var
  * 
  *     cpdef read(self, tuple offset = (), tuple count = (), tuple scalar = (),             # <<<<<<<<<<<<<<
@@ -22554,7 +23162,7 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
   PyObject *__pyx_v_count = ((PyObject*)__pyx_empty_tuple);
   PyObject *__pyx_v_scalar = ((PyObject*)__pyx_empty_tuple);
 
-  /* "adios.pyx":1458
+  /* "adios.pyx":1466
  * 
  *     cpdef read(self, tuple offset = (), tuple count = (), tuple scalar = (),
  *                from_steps = None, nsteps = None, fill = 0, step_scalar = True):             # <<<<<<<<<<<<<<
@@ -22581,12 +23189,12 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
   PyObject *__pyx_t_2 = NULL;
   PyObject *__pyx_t_3 = NULL;
   PyObject *__pyx_t_4 = NULL;
-  Py_ssize_t __pyx_t_5;
+  int __pyx_t_5;
   PyObject *__pyx_t_6 = NULL;
   int __pyx_t_7;
   int __pyx_t_8;
   int __pyx_t_9;
-  int __pyx_t_10;
+  Py_ssize_t __pyx_t_10;
   Py_ssize_t __pyx_t_11;
   PyObject *(*__pyx_t_12)(PyObject *);
   PyObject *__pyx_t_13 = NULL;
@@ -22621,7 +23229,7 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
   __Pyx_INCREF(__pyx_v_from_steps);
   __Pyx_INCREF(__pyx_v_nsteps);
 
-  /* "adios.pyx":1457
+  /* "adios.pyx":1465
  *         return var
  * 
  *     cpdef read(self, tuple offset = (), tuple count = (), tuple scalar = (),             # <<<<<<<<<<<<<<
@@ -22632,14 +23240,14 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
   if (unlikely(__pyx_skip_dispatch)) ;
   /* Check if overridden in Python */
   else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_read); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1457, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_read); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1465, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_5adios_3var_13read)) {
       __Pyx_XDECREF(__pyx_r);
       __Pyx_INCREF(__pyx_t_1);
       __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
       __pyx_t_5 = 0;
-      if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
+      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
         __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
         if (likely(__pyx_t_4)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -22649,35 +23257,53 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
           __pyx_t_5 = 1;
         }
       }
-      __pyx_t_6 = PyTuple_New(7+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1457, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_6);
-      if (__pyx_t_4) {
-        __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_3)) {
+        PyObject *__pyx_temp[8] = {__pyx_t_4, __pyx_v_offset, __pyx_v_count, __pyx_v_scalar, __pyx_v_from_steps, __pyx_v_nsteps, __pyx_v_fill, __pyx_v_step_scalar};
+        __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 7+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1465, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
+        PyObject *__pyx_temp[8] = {__pyx_t_4, __pyx_v_offset, __pyx_v_count, __pyx_v_scalar, __pyx_v_from_steps, __pyx_v_nsteps, __pyx_v_fill, __pyx_v_step_scalar};
+        __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 7+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1465, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+      } else
+      #endif
+      {
+        __pyx_t_6 = PyTuple_New(7+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1465, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_6);
+        if (__pyx_t_4) {
+          __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL;
+        }
+        __Pyx_INCREF(__pyx_v_offset);
+        __Pyx_GIVEREF(__pyx_v_offset);
+        PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, __pyx_v_offset);
+        __Pyx_INCREF(__pyx_v_count);
+        __Pyx_GIVEREF(__pyx_v_count);
+        PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, __pyx_v_count);
+        __Pyx_INCREF(__pyx_v_scalar);
+        __Pyx_GIVEREF(__pyx_v_scalar);
+        PyTuple_SET_ITEM(__pyx_t_6, 2+__pyx_t_5, __pyx_v_scalar);
+        __Pyx_INCREF(__pyx_v_from_steps);
+        __Pyx_GIVEREF(__pyx_v_from_steps);
+        PyTuple_SET_ITEM(__pyx_t_6, 3+__pyx_t_5, __pyx_v_from_steps);
+        __Pyx_INCREF(__pyx_v_nsteps);
+        __Pyx_GIVEREF(__pyx_v_nsteps);
+        PyTuple_SET_ITEM(__pyx_t_6, 4+__pyx_t_5, __pyx_v_nsteps);
+        __Pyx_INCREF(__pyx_v_fill);
+        __Pyx_GIVEREF(__pyx_v_fill);
+        PyTuple_SET_ITEM(__pyx_t_6, 5+__pyx_t_5, __pyx_v_fill);
+        __Pyx_INCREF(__pyx_v_step_scalar);
+        __Pyx_GIVEREF(__pyx_v_step_scalar);
+        PyTuple_SET_ITEM(__pyx_t_6, 6+__pyx_t_5, __pyx_v_step_scalar);
+        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1465, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       }
-      __Pyx_INCREF(__pyx_v_offset);
-      __Pyx_GIVEREF(__pyx_v_offset);
-      PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, __pyx_v_offset);
-      __Pyx_INCREF(__pyx_v_count);
-      __Pyx_GIVEREF(__pyx_v_count);
-      PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, __pyx_v_count);
-      __Pyx_INCREF(__pyx_v_scalar);
-      __Pyx_GIVEREF(__pyx_v_scalar);
-      PyTuple_SET_ITEM(__pyx_t_6, 2+__pyx_t_5, __pyx_v_scalar);
-      __Pyx_INCREF(__pyx_v_from_steps);
-      __Pyx_GIVEREF(__pyx_v_from_steps);
-      PyTuple_SET_ITEM(__pyx_t_6, 3+__pyx_t_5, __pyx_v_from_steps);
-      __Pyx_INCREF(__pyx_v_nsteps);
-      __Pyx_GIVEREF(__pyx_v_nsteps);
-      PyTuple_SET_ITEM(__pyx_t_6, 4+__pyx_t_5, __pyx_v_nsteps);
-      __Pyx_INCREF(__pyx_v_fill);
-      __Pyx_GIVEREF(__pyx_v_fill);
-      PyTuple_SET_ITEM(__pyx_t_6, 5+__pyx_t_5, __pyx_v_fill);
-      __Pyx_INCREF(__pyx_v_step_scalar);
-      __Pyx_GIVEREF(__pyx_v_step_scalar);
-      PyTuple_SET_ITEM(__pyx_t_6, 6+__pyx_t_5, __pyx_v_step_scalar);
-      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1457, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_2);
-      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_r = __pyx_t_2;
       __pyx_t_2 = 0;
@@ -22687,7 +23313,7 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   }
 
-  /* "adios.pyx":1507
+  /* "adios.pyx":1515
  * 
  *         """
  *         if from_steps is None:             # <<<<<<<<<<<<<<
@@ -22698,7 +23324,7 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
   __pyx_t_8 = (__pyx_t_7 != 0);
   if (__pyx_t_8) {
 
-    /* "adios.pyx":1508
+    /* "adios.pyx":1516
  *         """
  *         if from_steps is None:
  *             from_steps = 0 ##self.file.current_step             # <<<<<<<<<<<<<<
@@ -22708,7 +23334,7 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
     __Pyx_INCREF(__pyx_int_0);
     __Pyx_DECREF_SET(__pyx_v_from_steps, __pyx_int_0);
 
-    /* "adios.pyx":1507
+    /* "adios.pyx":1515
  * 
  *         """
  *         if from_steps is None:             # <<<<<<<<<<<<<<
@@ -22717,7 +23343,7 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
  */
   }
 
-  /* "adios.pyx":1510
+  /* "adios.pyx":1518
  *             from_steps = 0 ##self.file.current_step
  * 
  *         if nsteps is None:             # <<<<<<<<<<<<<<
@@ -22728,25 +23354,25 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
   __pyx_t_7 = (__pyx_t_8 != 0);
   if (__pyx_t_7) {
 
-    /* "adios.pyx":1511
+    /* "adios.pyx":1519
  * 
  *         if nsteps is None:
  *             nsteps = self.file.last_step - from_steps + 1             # <<<<<<<<<<<<<<
  * 
  *         assert self.dtype is not None, 'Data type is not supported yet'
  */
-    __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->file->last_step); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1511, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->file->last_step); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1519, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = PyNumber_Subtract(__pyx_t_1, __pyx_v_from_steps); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1511, __pyx_L1_error)
+    __pyx_t_2 = PyNumber_Subtract(__pyx_t_1, __pyx_v_from_steps); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1519, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = __Pyx_PyInt_AddObjC(__pyx_t_2, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1511, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyInt_AddObjC(__pyx_t_2, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1519, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF_SET(__pyx_v_nsteps, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "adios.pyx":1510
+    /* "adios.pyx":1518
  *             from_steps = 0 ##self.file.current_step
  * 
  *         if nsteps is None:             # <<<<<<<<<<<<<<
@@ -22755,7 +23381,7 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
  */
   }
 
-  /* "adios.pyx":1513
+  /* "adios.pyx":1521
  *             nsteps = self.file.last_step - from_steps + 1
  * 
  *         assert self.dtype is not None, 'Data type is not supported yet'             # <<<<<<<<<<<<<<
@@ -22767,12 +23393,12 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
     __pyx_t_7 = (((PyObject *)__pyx_v_self->dtype) != Py_None);
     if (unlikely(!(__pyx_t_7 != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Data_type_is_not_supported_yet);
-      __PYX_ERR(0, 1513, __pyx_L1_error)
+      __PYX_ERR(0, 1521, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "adios.pyx":1515
+  /* "adios.pyx":1523
  *         assert self.dtype is not None, 'Data type is not supported yet'
  * 
  *         if (self.nsteps > 0) and (from_steps + nsteps > self.nsteps):             # <<<<<<<<<<<<<<
@@ -22785,27 +23411,27 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
     __pyx_t_7 = __pyx_t_8;
     goto __pyx_L6_bool_binop_done;
   }
-  __pyx_t_1 = PyNumber_Add(__pyx_v_from_steps, __pyx_v_nsteps); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1515, __pyx_L1_error)
+  __pyx_t_1 = PyNumber_Add(__pyx_v_from_steps, __pyx_v_nsteps); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1523, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_self->nsteps); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1515, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_self->nsteps); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1523, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_2, Py_GT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1515, __pyx_L1_error)
+  __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_2, Py_GT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1523, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 1515, __pyx_L1_error)
+  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 1523, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_t_7 = __pyx_t_8;
   __pyx_L6_bool_binop_done:;
   if (__pyx_t_7) {
 
-    /* "adios.pyx":1516
+    /* "adios.pyx":1524
  * 
  *         if (self.nsteps > 0) and (from_steps + nsteps > self.nsteps):
  *             raise IndexError('Step index is out of range: from_steps=%r, nsteps=%r' % (from_steps, nsteps))             # <<<<<<<<<<<<<<
  * 
  *         cdef list lshape = [self.vp.dims[i] for i in range(self.vp.ndim)]
  */
-    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1516, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1524, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_from_steps);
     __Pyx_GIVEREF(__pyx_v_from_steps);
@@ -22813,22 +23439,22 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
     __Pyx_INCREF(__pyx_v_nsteps);
     __Pyx_GIVEREF(__pyx_v_nsteps);
     PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_nsteps);
-    __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_Step_index_is_out_of_range_from, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1516, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_Step_index_is_out_of_range_from, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1524, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1516, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1524, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_GIVEREF(__pyx_t_2);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
     __pyx_t_2 = 0;
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1516, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1524, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __PYX_ERR(0, 1516, __pyx_L1_error)
+    __PYX_ERR(0, 1524, __pyx_L1_error)
 
-    /* "adios.pyx":1515
+    /* "adios.pyx":1523
  *         assert self.dtype is not None, 'Data type is not supported yet'
  * 
  *         if (self.nsteps > 0) and (from_steps + nsteps > self.nsteps):             # <<<<<<<<<<<<<<
@@ -22837,62 +23463,62 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
  */
   }
 
-  /* "adios.pyx":1518
+  /* "adios.pyx":1526
  *             raise IndexError('Step index is out of range: from_steps=%r, nsteps=%r' % (from_steps, nsteps))
  * 
  *         cdef list lshape = [self.vp.dims[i] for i in range(self.vp.ndim)]             # <<<<<<<<<<<<<<
  *         cdef np.ndarray npshape = np.array(lshape, dtype=np.int64)
  * 
  */
-  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1518, __pyx_L1_error)
+  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1526, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_9 = __pyx_v_self->vp->ndim;
-  for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {
-    __pyx_v_i = __pyx_t_10;
-    __pyx_t_3 = __Pyx_PyInt_From_uint64_t((__pyx_v_self->vp->dims[__pyx_v_i])); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1518, __pyx_L1_error)
+  __pyx_t_5 = __pyx_v_self->vp->ndim;
+  for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_5; __pyx_t_9+=1) {
+    __pyx_v_i = __pyx_t_9;
+    __pyx_t_3 = __Pyx_PyInt_From_uint64_t((__pyx_v_self->vp->dims[__pyx_v_i])); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1526, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_3))) __PYX_ERR(0, 1518, __pyx_L1_error)
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_3))) __PYX_ERR(0, 1526, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   }
   __pyx_v_lshape = ((PyObject*)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "adios.pyx":1519
+  /* "adios.pyx":1527
  * 
  *         cdef list lshape = [self.vp.dims[i] for i in range(self.vp.ndim)]
  *         cdef np.ndarray npshape = np.array(lshape, dtype=np.int64)             # <<<<<<<<<<<<<<
  * 
  *         cdef np.ndarray npoffset
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1519, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1527, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_array); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1519, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_array); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1527, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1519, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1527, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_v_lshape);
   __Pyx_GIVEREF(__pyx_v_lshape);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_lshape);
-  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1519, __pyx_L1_error)
+  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1527, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1519, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1527, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_int64); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1519, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_int64); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1527, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 1519, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 1527, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1519, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1527, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1519, __pyx_L1_error)
+  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1527, __pyx_L1_error)
   __pyx_v_npshape = ((PyArrayObject *)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "adios.pyx":1522
+  /* "adios.pyx":1530
  * 
  *         cdef np.ndarray npoffset
  *         if len(offset) == 0:             # <<<<<<<<<<<<<<
@@ -22901,23 +23527,23 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
  */
   if (unlikely(__pyx_v_offset == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
-    __PYX_ERR(0, 1522, __pyx_L1_error)
+    __PYX_ERR(0, 1530, __pyx_L1_error)
   }
-  __pyx_t_5 = PyTuple_GET_SIZE(__pyx_v_offset); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 1522, __pyx_L1_error)
-  __pyx_t_7 = ((__pyx_t_5 == 0) != 0);
+  __pyx_t_10 = PyTuple_GET_SIZE(__pyx_v_offset); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 1530, __pyx_L1_error)
+  __pyx_t_7 = ((__pyx_t_10 == 0) != 0);
   if (__pyx_t_7) {
 
-    /* "adios.pyx":1523
+    /* "adios.pyx":1531
  *         cdef np.ndarray npoffset
  *         if len(offset) == 0:
  *             npoffset = npshape.copy()             # <<<<<<<<<<<<<<
  *             npoffset.fill(0)
  *         else:
  */
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_npshape), __pyx_n_s_copy); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1523, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_npshape), __pyx_n_s_copy); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1531, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_t_2 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_1))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
       __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
       if (likely(__pyx_t_2)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
@@ -22927,32 +23553,32 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
       }
     }
     if (__pyx_t_2) {
-      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1523, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1531, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     } else {
-      __pyx_t_4 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1523, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1531, __pyx_L1_error)
     }
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1523, __pyx_L1_error)
+    if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1531, __pyx_L1_error)
     __pyx_v_npoffset = ((PyArrayObject *)__pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "adios.pyx":1524
+    /* "adios.pyx":1532
  *         if len(offset) == 0:
  *             npoffset = npshape.copy()
  *             npoffset.fill(0)             # <<<<<<<<<<<<<<
  *         else:
  *             npoffset = np.array(offset, dtype=np.int64)
  */
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_npoffset), __pyx_n_s_fill); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1524, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_npoffset), __pyx_n_s_fill); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1532, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__29, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1524, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__29, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1532, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-    /* "adios.pyx":1522
+    /* "adios.pyx":1530
  * 
  *         cdef np.ndarray npoffset
  *         if len(offset) == 0:             # <<<<<<<<<<<<<<
@@ -22962,7 +23588,7 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
     goto __pyx_L10;
   }
 
-  /* "adios.pyx":1526
+  /* "adios.pyx":1534
  *             npoffset.fill(0)
  *         else:
  *             npoffset = np.array(offset, dtype=np.int64)             # <<<<<<<<<<<<<<
@@ -22970,37 +23596,37 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
  *         cdef np.ndarray npcount
  */
   /*else*/ {
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1526, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1534, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_array); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1526, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_array); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1534, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1526, __pyx_L1_error)
+    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1534, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_INCREF(__pyx_v_offset);
     __Pyx_GIVEREF(__pyx_v_offset);
     PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_offset);
-    __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1526, __pyx_L1_error)
+    __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1534, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1526, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1534, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_int64); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1526, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_int64); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1534, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_6) < 0) __PYX_ERR(0, 1526, __pyx_L1_error)
+    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_6) < 0) __PYX_ERR(0, 1534, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1526, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1534, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1526, __pyx_L1_error)
+    if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1534, __pyx_L1_error)
     __pyx_v_npoffset = ((PyArrayObject *)__pyx_t_6);
     __pyx_t_6 = 0;
   }
   __pyx_L10:;
 
-  /* "adios.pyx":1529
+  /* "adios.pyx":1537
  * 
  *         cdef np.ndarray npcount
  *         if len(count) == 0:             # <<<<<<<<<<<<<<
@@ -23009,26 +23635,26 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
  */
   if (unlikely(__pyx_v_count == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
-    __PYX_ERR(0, 1529, __pyx_L1_error)
+    __PYX_ERR(0, 1537, __pyx_L1_error)
   }
-  __pyx_t_5 = PyTuple_GET_SIZE(__pyx_v_count); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 1529, __pyx_L1_error)
-  __pyx_t_7 = ((__pyx_t_5 == 0) != 0);
+  __pyx_t_10 = PyTuple_GET_SIZE(__pyx_v_count); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 1537, __pyx_L1_error)
+  __pyx_t_7 = ((__pyx_t_10 == 0) != 0);
   if (__pyx_t_7) {
 
-    /* "adios.pyx":1530
+    /* "adios.pyx":1538
  *         cdef np.ndarray npcount
  *         if len(count) == 0:
  *             npcount = npshape - npoffset             # <<<<<<<<<<<<<<
  *         else:
  *             npcount = np.array(count, dtype=np.int64)
  */
-    __pyx_t_6 = PyNumber_Subtract(((PyObject *)__pyx_v_npshape), ((PyObject *)__pyx_v_npoffset)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1530, __pyx_L1_error)
+    __pyx_t_6 = PyNumber_Subtract(((PyObject *)__pyx_v_npshape), ((PyObject *)__pyx_v_npoffset)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1538, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1530, __pyx_L1_error)
+    if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1538, __pyx_L1_error)
     __pyx_v_npcount = ((PyArrayObject *)__pyx_t_6);
     __pyx_t_6 = 0;
 
-    /* "adios.pyx":1529
+    /* "adios.pyx":1537
  * 
  *         cdef np.ndarray npcount
  *         if len(count) == 0:             # <<<<<<<<<<<<<<
@@ -23038,7 +23664,7 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
     goto __pyx_L11;
   }
 
-  /* "adios.pyx":1532
+  /* "adios.pyx":1540
  *             npcount = npshape - npoffset
  *         else:
  *             npcount = np.array(count, dtype=np.int64)             # <<<<<<<<<<<<<<
@@ -23046,37 +23672,37 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
  *         if len(scalar) == 0:
  */
   /*else*/ {
-    __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1532, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1540, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_array); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1532, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_array); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1540, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-    __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1532, __pyx_L1_error)
+    __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1540, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_INCREF(__pyx_v_count);
     __Pyx_GIVEREF(__pyx_v_count);
     PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_count);
-    __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1532, __pyx_L1_error)
+    __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1540, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1532, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1540, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_int64); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1532, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_int64); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1540, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_3) < 0) __PYX_ERR(0, 1532, __pyx_L1_error)
+    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_3) < 0) __PYX_ERR(0, 1540, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1532, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1540, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1532, __pyx_L1_error)
+    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1540, __pyx_L1_error)
     __pyx_v_npcount = ((PyArrayObject *)__pyx_t_3);
     __pyx_t_3 = 0;
   }
   __pyx_L11:;
 
-  /* "adios.pyx":1534
+  /* "adios.pyx":1542
  *             npcount = np.array(count, dtype=np.int64)
  * 
  *         if len(scalar) == 0:             # <<<<<<<<<<<<<<
@@ -23085,29 +23711,29 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
  */
   if (unlikely(__pyx_v_scalar == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
-    __PYX_ERR(0, 1534, __pyx_L1_error)
+    __PYX_ERR(0, 1542, __pyx_L1_error)
   }
-  __pyx_t_5 = PyTuple_GET_SIZE(__pyx_v_scalar); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 1534, __pyx_L1_error)
-  __pyx_t_7 = ((__pyx_t_5 == 0) != 0);
+  __pyx_t_10 = PyTuple_GET_SIZE(__pyx_v_scalar); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 1542, __pyx_L1_error)
+  __pyx_t_7 = ((__pyx_t_10 == 0) != 0);
   if (__pyx_t_7) {
 
-    /* "adios.pyx":1535
+    /* "adios.pyx":1543
  * 
  *         if len(scalar) == 0:
  *             scalar = tuple((False,) * len(npshape))             # <<<<<<<<<<<<<<
  * 
  *         if len(npshape) != len(npoffset):
  */
-    __pyx_t_5 = PyObject_Length(((PyObject *)__pyx_v_npshape)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 1535, __pyx_L1_error)
-    __pyx_t_3 = PyInt_FromSsize_t(__pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1535, __pyx_L1_error)
+    __pyx_t_10 = PyObject_Length(((PyObject *)__pyx_v_npshape)); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 1543, __pyx_L1_error)
+    __pyx_t_3 = PyInt_FromSsize_t(__pyx_t_10); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1543, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_1 = PyNumber_Multiply(__pyx_tuple__30, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1535, __pyx_L1_error)
+    __pyx_t_1 = PyNumber_Multiply(__pyx_tuple__30, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1543, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF_SET(__pyx_v_scalar, ((PyObject*)__pyx_t_1));
     __pyx_t_1 = 0;
 
-    /* "adios.pyx":1534
+    /* "adios.pyx":1542
  *             npcount = np.array(count, dtype=np.int64)
  * 
  *         if len(scalar) == 0:             # <<<<<<<<<<<<<<
@@ -23116,44 +23742,44 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
  */
   }
 
-  /* "adios.pyx":1537
+  /* "adios.pyx":1545
  *             scalar = tuple((False,) * len(npshape))
  * 
  *         if len(npshape) != len(npoffset):             # <<<<<<<<<<<<<<
  *             raise IndexError('Offset dimension mismatch (offset dim: %r)' % len(npoffset))
  * 
  */
-  __pyx_t_5 = PyObject_Length(((PyObject *)__pyx_v_npshape)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 1537, __pyx_L1_error)
-  __pyx_t_11 = PyObject_Length(((PyObject *)__pyx_v_npoffset)); if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 1537, __pyx_L1_error)
-  __pyx_t_7 = ((__pyx_t_5 != __pyx_t_11) != 0);
+  __pyx_t_10 = PyObject_Length(((PyObject *)__pyx_v_npshape)); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 1545, __pyx_L1_error)
+  __pyx_t_11 = PyObject_Length(((PyObject *)__pyx_v_npoffset)); if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 1545, __pyx_L1_error)
+  __pyx_t_7 = ((__pyx_t_10 != __pyx_t_11) != 0);
   if (__pyx_t_7) {
 
-    /* "adios.pyx":1538
+    /* "adios.pyx":1546
  * 
  *         if len(npshape) != len(npoffset):
  *             raise IndexError('Offset dimension mismatch (offset dim: %r)' % len(npoffset))             # <<<<<<<<<<<<<<
  * 
  *         if len(npshape) != len(npcount):
  */
-    __pyx_t_11 = PyObject_Length(((PyObject *)__pyx_v_npoffset)); if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 1538, __pyx_L1_error)
-    __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1538, __pyx_L1_error)
+    __pyx_t_11 = PyObject_Length(((PyObject *)__pyx_v_npoffset)); if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 1546, __pyx_L1_error)
+    __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1546, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_Offset_dimension_mismatch_offset, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1538, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_Offset_dimension_mismatch_offset, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1546, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1538, __pyx_L1_error)
+    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1546, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_GIVEREF(__pyx_t_3);
     PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3);
     __pyx_t_3 = 0;
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1538, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1546, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __PYX_ERR(0, 1538, __pyx_L1_error)
+    __PYX_ERR(0, 1546, __pyx_L1_error)
 
-    /* "adios.pyx":1537
+    /* "adios.pyx":1545
  *             scalar = tuple((False,) * len(npshape))
  * 
  *         if len(npshape) != len(npoffset):             # <<<<<<<<<<<<<<
@@ -23162,44 +23788,44 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
  */
   }
 
-  /* "adios.pyx":1540
+  /* "adios.pyx":1548
  *             raise IndexError('Offset dimension mismatch (offset dim: %r)' % len(npoffset))
  * 
  *         if len(npshape) != len(npcount):             # <<<<<<<<<<<<<<
  *             raise IndexError('Count dimension mismatch (count dim: %r)' % len(npcount))
  * 
  */
-  __pyx_t_11 = PyObject_Length(((PyObject *)__pyx_v_npshape)); if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 1540, __pyx_L1_error)
-  __pyx_t_5 = PyObject_Length(((PyObject *)__pyx_v_npcount)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 1540, __pyx_L1_error)
-  __pyx_t_7 = ((__pyx_t_11 != __pyx_t_5) != 0);
+  __pyx_t_11 = PyObject_Length(((PyObject *)__pyx_v_npshape)); if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 1548, __pyx_L1_error)
+  __pyx_t_10 = PyObject_Length(((PyObject *)__pyx_v_npcount)); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 1548, __pyx_L1_error)
+  __pyx_t_7 = ((__pyx_t_11 != __pyx_t_10) != 0);
   if (__pyx_t_7) {
 
-    /* "adios.pyx":1541
+    /* "adios.pyx":1549
  * 
  *         if len(npshape) != len(npcount):
  *             raise IndexError('Count dimension mismatch (count dim: %r)' % len(npcount))             # <<<<<<<<<<<<<<
  * 
  *         if len(npshape) != len(scalar):
  */
-    __pyx_t_5 = PyObject_Length(((PyObject *)__pyx_v_npcount)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 1541, __pyx_L1_error)
-    __pyx_t_3 = PyInt_FromSsize_t(__pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1541, __pyx_L1_error)
+    __pyx_t_10 = PyObject_Length(((PyObject *)__pyx_v_npcount)); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 1549, __pyx_L1_error)
+    __pyx_t_3 = PyInt_FromSsize_t(__pyx_t_10); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1549, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Count_dimension_mismatch_count_d, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1541, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Count_dimension_mismatch_count_d, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1549, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1541, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1549, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_GIVEREF(__pyx_t_1);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
     __pyx_t_1 = 0;
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1541, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1549, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_Raise(__pyx_t_1, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __PYX_ERR(0, 1541, __pyx_L1_error)
+    __PYX_ERR(0, 1549, __pyx_L1_error)
 
-    /* "adios.pyx":1540
+    /* "adios.pyx":1548
  *             raise IndexError('Offset dimension mismatch (offset dim: %r)' % len(npoffset))
  * 
  *         if len(npshape) != len(npcount):             # <<<<<<<<<<<<<<
@@ -23208,23 +23834,23 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
  */
   }
 
-  /* "adios.pyx":1543
+  /* "adios.pyx":1551
  *             raise IndexError('Count dimension mismatch (count dim: %r)' % len(npcount))
  * 
  *         if len(npshape) != len(scalar):             # <<<<<<<<<<<<<<
  *             raise IndexError('Scalar dimension mismatch (scalar dim: %r)' % len(scalar))
  * 
  */
-  __pyx_t_5 = PyObject_Length(((PyObject *)__pyx_v_npshape)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 1543, __pyx_L1_error)
+  __pyx_t_10 = PyObject_Length(((PyObject *)__pyx_v_npshape)); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 1551, __pyx_L1_error)
   if (unlikely(__pyx_v_scalar == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
-    __PYX_ERR(0, 1543, __pyx_L1_error)
+    __PYX_ERR(0, 1551, __pyx_L1_error)
   }
-  __pyx_t_11 = PyTuple_GET_SIZE(__pyx_v_scalar); if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 1543, __pyx_L1_error)
-  __pyx_t_7 = ((__pyx_t_5 != __pyx_t_11) != 0);
+  __pyx_t_11 = PyTuple_GET_SIZE(__pyx_v_scalar); if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 1551, __pyx_L1_error)
+  __pyx_t_7 = ((__pyx_t_10 != __pyx_t_11) != 0);
   if (__pyx_t_7) {
 
-    /* "adios.pyx":1544
+    /* "adios.pyx":1552
  * 
  *         if len(npshape) != len(scalar):
  *             raise IndexError('Scalar dimension mismatch (scalar dim: %r)' % len(scalar))             # <<<<<<<<<<<<<<
@@ -23233,27 +23859,27 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
  */
     if (unlikely(__pyx_v_scalar == Py_None)) {
       PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
-      __PYX_ERR(0, 1544, __pyx_L1_error)
+      __PYX_ERR(0, 1552, __pyx_L1_error)
     }
-    __pyx_t_11 = PyTuple_GET_SIZE(__pyx_v_scalar); if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 1544, __pyx_L1_error)
-    __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1544, __pyx_L1_error)
+    __pyx_t_11 = PyTuple_GET_SIZE(__pyx_v_scalar); if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 1552, __pyx_L1_error)
+    __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1552, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_Scalar_dimension_mismatch_scalar, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1544, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_Scalar_dimension_mismatch_scalar, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1552, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1544, __pyx_L1_error)
+    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1552, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_GIVEREF(__pyx_t_3);
     PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3);
     __pyx_t_3 = 0;
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1544, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1552, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __PYX_ERR(0, 1544, __pyx_L1_error)
+    __PYX_ERR(0, 1552, __pyx_L1_error)
 
-    /* "adios.pyx":1543
+    /* "adios.pyx":1551
  *             raise IndexError('Count dimension mismatch (count dim: %r)' % len(npcount))
  * 
  *         if len(npshape) != len(scalar):             # <<<<<<<<<<<<<<
@@ -23262,22 +23888,22 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
  */
   }
 
-  /* "adios.pyx":1546
+  /* "adios.pyx":1554
  *             raise IndexError('Scalar dimension mismatch (scalar dim: %r)' % len(scalar))
  * 
  *         if (npshape < npcount + npoffset).any():             # <<<<<<<<<<<<<<
  *             raise IndexError('Requested is larger than the shape.')
  * 
  */
-  __pyx_t_1 = PyNumber_Add(((PyObject *)__pyx_v_npcount), ((PyObject *)__pyx_v_npoffset)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1546, __pyx_L1_error)
+  __pyx_t_1 = PyNumber_Add(((PyObject *)__pyx_v_npcount), ((PyObject *)__pyx_v_npoffset)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1554, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_6 = PyObject_RichCompare(((PyObject *)__pyx_v_npshape), __pyx_t_1, Py_LT); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1546, __pyx_L1_error)
+  __pyx_t_6 = PyObject_RichCompare(((PyObject *)__pyx_v_npshape), __pyx_t_1, Py_LT); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1554, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_any); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1546, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_any); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1554, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __pyx_t_6 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_1))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
     __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1);
     if (likely(__pyx_t_6)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
@@ -23287,31 +23913,31 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
     }
   }
   if (__pyx_t_6) {
-    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1546, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1554, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   } else {
-    __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1546, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1554, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 1546, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 1554, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   if (__pyx_t_7) {
 
-    /* "adios.pyx":1547
+    /* "adios.pyx":1555
  * 
  *         if (npshape < npcount + npoffset).any():
  *             raise IndexError('Requested is larger than the shape.')             # <<<<<<<<<<<<<<
  * 
  *         shape = [x for x, y in zip(npcount, scalar) if not y]
  */
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_tuple__31, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1547, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_tuple__31, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1555, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __PYX_ERR(0, 1547, __pyx_L1_error)
+    __PYX_ERR(0, 1555, __pyx_L1_error)
 
-    /* "adios.pyx":1546
+    /* "adios.pyx":1554
  *             raise IndexError('Scalar dimension mismatch (scalar dim: %r)' % len(scalar))
  * 
  *         if (npshape < npcount + npoffset).any():             # <<<<<<<<<<<<<<
@@ -23320,16 +23946,16 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
  */
   }
 
-  /* "adios.pyx":1549
+  /* "adios.pyx":1557
  *             raise IndexError('Requested is larger than the shape.')
  * 
  *         shape = [x for x, y in zip(npcount, scalar) if not y]             # <<<<<<<<<<<<<<
  *         if (nsteps > 1) or (self.nsteps>1 and not step_scalar):
  *             shape.insert(0, nsteps)
  */
-  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1549, __pyx_L1_error)
+  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1557, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1549, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1557, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_npcount));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_npcount));
@@ -23337,34 +23963,34 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
   __Pyx_INCREF(__pyx_v_scalar);
   __Pyx_GIVEREF(__pyx_v_scalar);
   PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_scalar);
-  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_zip, __pyx_t_1, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1549, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_zip, __pyx_t_1, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1557, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   if (likely(PyList_CheckExact(__pyx_t_6)) || PyTuple_CheckExact(__pyx_t_6)) {
     __pyx_t_1 = __pyx_t_6; __Pyx_INCREF(__pyx_t_1); __pyx_t_11 = 0;
     __pyx_t_12 = NULL;
   } else {
-    __pyx_t_11 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1549, __pyx_L1_error)
+    __pyx_t_11 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1557, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_12 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1549, __pyx_L1_error)
+    __pyx_t_12 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1557, __pyx_L1_error)
   }
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   for (;;) {
     if (likely(!__pyx_t_12)) {
       if (likely(PyList_CheckExact(__pyx_t_1))) {
         if (__pyx_t_11 >= PyList_GET_SIZE(__pyx_t_1)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_6 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_11); __Pyx_INCREF(__pyx_t_6); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 1549, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_6 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_11); __Pyx_INCREF(__pyx_t_6); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 1557, __pyx_L1_error)
         #else
-        __pyx_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1549, __pyx_L1_error)
+        __pyx_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1557, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
         #endif
       } else {
         if (__pyx_t_11 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_11); __Pyx_INCREF(__pyx_t_6); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 1549, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_11); __Pyx_INCREF(__pyx_t_6); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 1557, __pyx_L1_error)
         #else
-        __pyx_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1549, __pyx_L1_error)
+        __pyx_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1557, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
         #endif
       }
@@ -23374,7 +24000,7 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
           if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-          else __PYX_ERR(0, 1549, __pyx_L1_error)
+          else __PYX_ERR(0, 1557, __pyx_L1_error)
         }
         break;
       }
@@ -23382,7 +24008,7 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
     }
     if ((likely(PyTuple_CheckExact(__pyx_t_6))) || (PyList_CheckExact(__pyx_t_6))) {
       PyObject* sequence = __pyx_t_6;
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if !CYTHON_COMPILING_IN_PYPY
       Py_ssize_t size = Py_SIZE(sequence);
       #else
       Py_ssize_t size = PySequence_Size(sequence);
@@ -23390,9 +24016,9 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
       if (unlikely(size != 2)) {
         if (size > 2) __Pyx_RaiseTooManyValuesError(2);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        __PYX_ERR(0, 1549, __pyx_L1_error)
+        __PYX_ERR(0, 1557, __pyx_L1_error)
       }
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
       if (likely(PyTuple_CheckExact(sequence))) {
         __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
         __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
@@ -23403,15 +24029,15 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
       __Pyx_INCREF(__pyx_t_2);
       __Pyx_INCREF(__pyx_t_4);
       #else
-      __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1549, __pyx_L1_error)
+      __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1557, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
-      __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1549, __pyx_L1_error)
+      __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1557, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       #endif
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     } else {
       Py_ssize_t index = -1;
-      __pyx_t_13 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1549, __pyx_L1_error)
+      __pyx_t_13 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1557, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_13);
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __pyx_t_14 = Py_TYPE(__pyx_t_13)->tp_iternext;
@@ -23419,7 +24045,7 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
       __Pyx_GOTREF(__pyx_t_2);
       index = 1; __pyx_t_4 = __pyx_t_14(__pyx_t_13); if (unlikely(!__pyx_t_4)) goto __pyx_L19_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_4);
-      if (__Pyx_IternextUnpackEndCheck(__pyx_t_14(__pyx_t_13), 2) < 0) __PYX_ERR(0, 1549, __pyx_L1_error)
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_14(__pyx_t_13), 2) < 0) __PYX_ERR(0, 1557, __pyx_L1_error)
       __pyx_t_14 = NULL;
       __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
       goto __pyx_L20_unpacking_done;
@@ -23427,32 +24053,32 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
       __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
       __pyx_t_14 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      __PYX_ERR(0, 1549, __pyx_L1_error)
+      __PYX_ERR(0, 1557, __pyx_L1_error)
       __pyx_L20_unpacking_done:;
     }
     __Pyx_XDECREF_SET(__pyx_v_x, __pyx_t_2);
     __pyx_t_2 = 0;
     __Pyx_XDECREF_SET(__pyx_v_y, __pyx_t_4);
     __pyx_t_4 = 0;
-    __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_y); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 1549, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_y); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 1557, __pyx_L1_error)
     __pyx_t_8 = ((!__pyx_t_7) != 0);
     if (__pyx_t_8) {
-      if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_v_x))) __PYX_ERR(0, 1549, __pyx_L1_error)
+      if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_v_x))) __PYX_ERR(0, 1557, __pyx_L1_error)
     }
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_shape = ((PyObject*)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "adios.pyx":1550
+  /* "adios.pyx":1558
  * 
  *         shape = [x for x, y in zip(npcount, scalar) if not y]
  *         if (nsteps > 1) or (self.nsteps>1 and not step_scalar):             # <<<<<<<<<<<<<<
  *             shape.insert(0, nsteps)
  *         cdef np.ndarray var = np.zeros(shape, dtype=self.dtype)
  */
-  __pyx_t_3 = PyObject_RichCompare(__pyx_v_nsteps, __pyx_int_1, Py_GT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1550, __pyx_L1_error)
-  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 1550, __pyx_L1_error)
+  __pyx_t_3 = PyObject_RichCompare(__pyx_v_nsteps, __pyx_int_1, Py_GT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1558, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 1558, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   if (!__pyx_t_7) {
   } else {
@@ -23465,22 +24091,22 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
     __pyx_t_8 = __pyx_t_7;
     goto __pyx_L23_bool_binop_done;
   }
-  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_step_scalar); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 1550, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_step_scalar); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 1558, __pyx_L1_error)
   __pyx_t_15 = ((!__pyx_t_7) != 0);
   __pyx_t_8 = __pyx_t_15;
   __pyx_L23_bool_binop_done:;
   if (__pyx_t_8) {
 
-    /* "adios.pyx":1551
+    /* "adios.pyx":1559
  *         shape = [x for x, y in zip(npcount, scalar) if not y]
  *         if (nsteps > 1) or (self.nsteps>1 and not step_scalar):
  *             shape.insert(0, nsteps)             # <<<<<<<<<<<<<<
  *         cdef np.ndarray var = np.zeros(shape, dtype=self.dtype)
  * 
  */
-    __pyx_t_16 = PyList_Insert(__pyx_v_shape, 0, __pyx_v_nsteps); if (unlikely(__pyx_t_16 == -1)) __PYX_ERR(0, 1551, __pyx_L1_error)
+    __pyx_t_16 = PyList_Insert(__pyx_v_shape, 0, __pyx_v_nsteps); if (unlikely(__pyx_t_16 == -1)) __PYX_ERR(0, 1559, __pyx_L1_error)
 
-    /* "adios.pyx":1550
+    /* "adios.pyx":1558
  * 
  *         shape = [x for x, y in zip(npcount, scalar) if not y]
  *         if (nsteps > 1) or (self.nsteps>1 and not step_scalar):             # <<<<<<<<<<<<<<
@@ -23489,56 +24115,56 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
  */
   }
 
-  /* "adios.pyx":1552
+  /* "adios.pyx":1560
  *         if (nsteps > 1) or (self.nsteps>1 and not step_scalar):
  *             shape.insert(0, nsteps)
  *         cdef np.ndarray var = np.zeros(shape, dtype=self.dtype)             # <<<<<<<<<<<<<<
  * 
  *         if len(shape) > 0:
  */
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1552, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1560, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_zeros); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1552, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_zeros); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1560, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1552, __pyx_L1_error)
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1560, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_v_shape);
   __Pyx_GIVEREF(__pyx_v_shape);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_shape);
-  __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1552, __pyx_L1_error)
+  __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1560, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_dtype, ((PyObject *)__pyx_v_self->dtype)) < 0) __PYX_ERR(0, 1552, __pyx_L1_error)
-  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1552, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_dtype, ((PyObject *)__pyx_v_self->dtype)) < 0) __PYX_ERR(0, 1560, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1560, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1552, __pyx_L1_error)
+  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1560, __pyx_L1_error)
   __pyx_v_var = ((PyArrayObject *)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "adios.pyx":1554
+  /* "adios.pyx":1562
  *         cdef np.ndarray var = np.zeros(shape, dtype=self.dtype)
  * 
  *         if len(shape) > 0:             # <<<<<<<<<<<<<<
  *             var[:] = fill
  * 
  */
-  __pyx_t_11 = PyList_GET_SIZE(__pyx_v_shape); if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 1554, __pyx_L1_error)
+  __pyx_t_11 = PyList_GET_SIZE(__pyx_v_shape); if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 1562, __pyx_L1_error)
   __pyx_t_8 = ((__pyx_t_11 > 0) != 0);
   if (__pyx_t_8) {
 
-    /* "adios.pyx":1555
+    /* "adios.pyx":1563
  * 
  *         if len(shape) > 0:
  *             var[:] = fill             # <<<<<<<<<<<<<<
  * 
  *         cdef ADIOS_SELECTION * sel
  */
-    if (__Pyx_PyObject_SetSlice(((PyObject *)__pyx_v_var), __pyx_v_fill, 0, 0, NULL, NULL, &__pyx_slice__32, 0, 0, 1) < 0) __PYX_ERR(0, 1555, __pyx_L1_error)
+    if (__Pyx_PyObject_SetSlice(((PyObject *)__pyx_v_var), __pyx_v_fill, 0, 0, NULL, NULL, &__pyx_slice__32, 0, 0, 1) < 0) __PYX_ERR(0, 1563, __pyx_L1_error)
 
-    /* "adios.pyx":1554
+    /* "adios.pyx":1562
  *         cdef np.ndarray var = np.zeros(shape, dtype=self.dtype)
  * 
  *         if len(shape) > 0:             # <<<<<<<<<<<<<<
@@ -23547,7 +24173,7 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
  */
   }
 
-  /* "adios.pyx":1558
+  /* "adios.pyx":1566
  * 
  *         cdef ADIOS_SELECTION * sel
  *         sel = adios_selection_boundingbox (self.vp.ndim, <uint64_t *> npoffset.data, <uint64_t *> npcount.data)             # <<<<<<<<<<<<<<
@@ -23556,18 +24182,18 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
  */
   __pyx_v_sel = adios_selection_boundingbox(__pyx_v_self->vp->ndim, ((uint64_t *)__pyx_v_npoffset->data), ((uint64_t *)__pyx_v_npcount->data));
 
-  /* "adios.pyx":1563
+  /* "adios.pyx":1571
  *         ##print 'npcount', npcount
  * 
  *         adios_schedule_read_byid (self.file.fp, sel, self.vp.varid, from_steps, nsteps, <void *> var.data)             # <<<<<<<<<<<<<<
  *         adios_perform_reads(self.file.fp, 1)
  *         adios_selection_delete(sel)
  */
-  __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_v_from_steps); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1563, __pyx_L1_error)
-  __pyx_t_10 = __Pyx_PyInt_As_int(__pyx_v_nsteps); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1563, __pyx_L1_error)
-  adios_schedule_read_byid(__pyx_v_self->file->fp, __pyx_v_sel, __pyx_v_self->vp->varid, __pyx_t_9, __pyx_t_10, ((void *)__pyx_v_var->data));
+  __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_v_from_steps); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1571, __pyx_L1_error)
+  __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_v_nsteps); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1571, __pyx_L1_error)
+  adios_schedule_read_byid(__pyx_v_self->file->fp, __pyx_v_sel, __pyx_v_self->vp->varid, __pyx_t_5, __pyx_t_9, ((void *)__pyx_v_var->data));
 
-  /* "adios.pyx":1564
+  /* "adios.pyx":1572
  * 
  *         adios_schedule_read_byid (self.file.fp, sel, self.vp.varid, from_steps, nsteps, <void *> var.data)
  *         adios_perform_reads(self.file.fp, 1)             # <<<<<<<<<<<<<<
@@ -23576,7 +24202,7 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
  */
   adios_perform_reads(__pyx_v_self->file->fp, 1);
 
-  /* "adios.pyx":1565
+  /* "adios.pyx":1573
  *         adios_schedule_read_byid (self.file.fp, sel, self.vp.varid, from_steps, nsteps, <void *> var.data)
  *         adios_perform_reads(self.file.fp, 1)
  *         adios_selection_delete(sel)             # <<<<<<<<<<<<<<
@@ -23585,7 +24211,7 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
  */
   adios_selection_delete(__pyx_v_sel);
 
-  /* "adios.pyx":1567
+  /* "adios.pyx":1575
  *         adios_selection_delete(sel)
  * 
  *         if (var.ndim == 0):             # <<<<<<<<<<<<<<
@@ -23595,7 +24221,7 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
   __pyx_t_8 = ((__pyx_v_var->nd == 0) != 0);
   if (__pyx_t_8) {
 
-    /* "adios.pyx":1568
+    /* "adios.pyx":1576
  * 
  *         if (var.ndim == 0):
  *             return np.asscalar(var)             # <<<<<<<<<<<<<<
@@ -23603,13 +24229,13 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
  *             return var
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1568, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1576, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_asscalar); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1568, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_asscalar); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1576, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __pyx_t_6 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
+    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
       __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_3);
       if (likely(__pyx_t_6)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -23619,25 +24245,43 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
       }
     }
     if (!__pyx_t_6) {
-      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_3, ((PyObject *)__pyx_v_var)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1568, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_3, ((PyObject *)__pyx_v_var)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1576, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
     } else {
-      __pyx_t_1 = PyTuple_New(1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1568, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_1);
-      __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_6); __pyx_t_6 = NULL;
-      __Pyx_INCREF(((PyObject *)__pyx_v_var));
-      __Pyx_GIVEREF(((PyObject *)__pyx_v_var));
-      PyTuple_SET_ITEM(__pyx_t_1, 0+1, ((PyObject *)__pyx_v_var));
-      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1568, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_4);
-      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_3)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_6, ((PyObject *)__pyx_v_var)};
+        __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1576, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+        __Pyx_GOTREF(__pyx_t_4);
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_6, ((PyObject *)__pyx_v_var)};
+        __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1576, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+        __Pyx_GOTREF(__pyx_t_4);
+      } else
+      #endif
+      {
+        __pyx_t_1 = PyTuple_New(1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1576, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_1);
+        __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_6); __pyx_t_6 = NULL;
+        __Pyx_INCREF(((PyObject *)__pyx_v_var));
+        __Pyx_GIVEREF(((PyObject *)__pyx_v_var));
+        PyTuple_SET_ITEM(__pyx_t_1, 0+1, ((PyObject *)__pyx_v_var));
+        __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1576, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_4);
+        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      }
     }
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __pyx_r = __pyx_t_4;
     __pyx_t_4 = 0;
     goto __pyx_L0;
 
-    /* "adios.pyx":1567
+    /* "adios.pyx":1575
  *         adios_selection_delete(sel)
  * 
  *         if (var.ndim == 0):             # <<<<<<<<<<<<<<
@@ -23646,7 +24290,7 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
  */
   }
 
-  /* "adios.pyx":1570
+  /* "adios.pyx":1578
  *             return np.asscalar(var)
  *         else:
  *             return var             # <<<<<<<<<<<<<<
@@ -23660,7 +24304,7 @@ static PyObject *__pyx_f_5adios_3var_read(struct __pyx_obj_5adios_var *__pyx_v_s
     goto __pyx_L0;
   }
 
-  /* "adios.pyx":1457
+  /* "adios.pyx":1465
  *         return var
  * 
  *     cpdef read(self, tuple offset = (), tuple count = (), tuple scalar = (),             # <<<<<<<<<<<<<<
@@ -23716,7 +24360,7 @@ static PyObject *__pyx_pw_5adios_3var_13read(PyObject *__pyx_v_self, PyObject *_
     values[1] = ((PyObject*)__pyx_empty_tuple);
     values[2] = ((PyObject*)__pyx_empty_tuple);
 
-    /* "adios.pyx":1458
+    /* "adios.pyx":1466
  * 
  *     cpdef read(self, tuple offset = (), tuple count = (), tuple scalar = (),
  *                from_steps = None, nsteps = None, fill = 0, step_scalar = True):             # <<<<<<<<<<<<<<
@@ -23780,7 +24424,7 @@ static PyObject *__pyx_pw_5adios_3var_13read(PyObject *__pyx_v_self, PyObject *_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "read") < 0)) __PYX_ERR(0, 1457, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "read") < 0)) __PYX_ERR(0, 1465, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -23805,18 +24449,18 @@ static PyObject *__pyx_pw_5adios_3var_13read(PyObject *__pyx_v_self, PyObject *_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("read", 0, 0, 7, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1457, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("read", 0, 0, 7, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1465, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.var.read", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_offset), (&PyTuple_Type), 1, "offset", 1))) __PYX_ERR(0, 1457, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_count), (&PyTuple_Type), 1, "count", 1))) __PYX_ERR(0, 1457, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_scalar), (&PyTuple_Type), 1, "scalar", 1))) __PYX_ERR(0, 1457, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_offset), (&PyTuple_Type), 1, "offset", 1))) __PYX_ERR(0, 1465, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_count), (&PyTuple_Type), 1, "count", 1))) __PYX_ERR(0, 1465, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_scalar), (&PyTuple_Type), 1, "scalar", 1))) __PYX_ERR(0, 1465, __pyx_L1_error)
   __pyx_r = __pyx_pf_5adios_3var_12read(((struct __pyx_obj_5adios_var *)__pyx_v_self), __pyx_v_offset, __pyx_v_count, __pyx_v_scalar, __pyx_v_from_steps, __pyx_v_nsteps, __pyx_v_fill, __pyx_v_step_scalar);
 
-  /* "adios.pyx":1457
+  /* "adios.pyx":1465
  *         return var
  * 
  *     cpdef read(self, tuple offset = (), tuple count = (), tuple scalar = (),             # <<<<<<<<<<<<<<
@@ -23848,7 +24492,7 @@ static PyObject *__pyx_pf_5adios_3var_12read(struct __pyx_obj_5adios_var *__pyx_
   __pyx_t_2.nsteps = __pyx_v_nsteps;
   __pyx_t_2.fill = __pyx_v_fill;
   __pyx_t_2.step_scalar = __pyx_v_step_scalar;
-  __pyx_t_1 = __pyx_vtabptr_5adios_var->read(__pyx_v_self, 1, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1457, __pyx_L1_error)
+  __pyx_t_1 = __pyx_vtabptr_5adios_var->read(__pyx_v_self, 1, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1465, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -23865,7 +24509,7 @@ static PyObject *__pyx_pf_5adios_3var_12read(struct __pyx_obj_5adios_var *__pyx_
   return __pyx_r;
 }
 
-/* "adios.pyx":1572
+/* "adios.pyx":1580
  *             return var
  * 
  *     cpdef printself(self):             # <<<<<<<<<<<<<<
@@ -23886,13 +24530,13 @@ static PyObject *__pyx_f_5adios_3var_printself(struct __pyx_obj_5adios_var *__py
   if (unlikely(__pyx_skip_dispatch)) ;
   /* Check if overridden in Python */
   else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_printself); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1572, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_printself); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1580, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_5adios_3var_15printself)) {
       __Pyx_XDECREF(__pyx_r);
       __Pyx_INCREF(__pyx_t_1);
       __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
+      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
         __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
         if (likely(__pyx_t_4)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -23902,10 +24546,10 @@ static PyObject *__pyx_f_5adios_3var_printself(struct __pyx_obj_5adios_var *__py
         }
       }
       if (__pyx_t_4) {
-        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1572, __pyx_L1_error)
+        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1580, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       } else {
-        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1572, __pyx_L1_error)
+        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1580, __pyx_L1_error)
       }
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -23917,7 +24561,7 @@ static PyObject *__pyx_f_5adios_3var_printself(struct __pyx_obj_5adios_var *__py
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   }
 
-  /* "adios.pyx":1574
+  /* "adios.pyx":1582
  *     cpdef printself(self):
  *         """ Print native ADIOS_VARINFO structure. """
  *         assert self.vp != NULL, 'Not an open variable'             # <<<<<<<<<<<<<<
@@ -23928,32 +24572,32 @@ static PyObject *__pyx_f_5adios_3var_printself(struct __pyx_obj_5adios_var *__py
   if (unlikely(!Py_OptimizeFlag)) {
     if (unlikely(!((__pyx_v_self->vp != NULL) != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Not_an_open_variable);
-      __PYX_ERR(0, 1574, __pyx_L1_error)
+      __PYX_ERR(0, 1582, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "adios.pyx":1575
+  /* "adios.pyx":1583
  *         """ Print native ADIOS_VARINFO structure. """
  *         assert self.vp != NULL, 'Not an open variable'
  *         print ('=== AdiosVariable ===')             # <<<<<<<<<<<<<<
  *         print ('%15s : %lu' % ('vp', <unsigned long> self.vp))
  *         print ('%15s : %lu' % ('fp', <unsigned long> self.file.fp))
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_tuple__33, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1575, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_tuple__33, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1583, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":1576
+  /* "adios.pyx":1584
  *         assert self.vp != NULL, 'Not an open variable'
  *         print ('=== AdiosVariable ===')
  *         print ('%15s : %lu' % ('vp', <unsigned long> self.vp))             # <<<<<<<<<<<<<<
  *         print ('%15s : %lu' % ('fp', <unsigned long> self.file.fp))
  *         printvar(self.vp)
  */
-  __pyx_t_1 = __Pyx_PyInt_From_unsigned_long(((unsigned long)__pyx_v_self->vp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1576, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_unsigned_long(((unsigned long)__pyx_v_self->vp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1584, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1576, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1584, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_vp);
   __Pyx_GIVEREF(__pyx_n_s_vp);
@@ -23961,29 +24605,29 @@ static PyObject *__pyx_f_5adios_3var_printself(struct __pyx_obj_5adios_var *__py
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_lu, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1576, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_lu, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1584, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1576, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1584, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1576, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1584, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":1577
+  /* "adios.pyx":1585
  *         print ('=== AdiosVariable ===')
  *         print ('%15s : %lu' % ('vp', <unsigned long> self.vp))
  *         print ('%15s : %lu' % ('fp', <unsigned long> self.file.fp))             # <<<<<<<<<<<<<<
  *         printvar(self.vp)
  * 
  */
-  __pyx_t_1 = __Pyx_PyInt_From_unsigned_long(((unsigned long)__pyx_v_self->file->fp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1577, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_unsigned_long(((unsigned long)__pyx_v_self->file->fp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1585, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1577, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1585, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_fp);
   __Pyx_GIVEREF(__pyx_n_s_fp);
@@ -23991,31 +24635,31 @@ static PyObject *__pyx_f_5adios_3var_printself(struct __pyx_obj_5adios_var *__py
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_lu, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1577, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_lu, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1585, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1577, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1585, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1577, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1585, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":1578
+  /* "adios.pyx":1586
  *         print ('%15s : %lu' % ('vp', <unsigned long> self.vp))
  *         print ('%15s : %lu' % ('fp', <unsigned long> self.file.fp))
  *         printvar(self.vp)             # <<<<<<<<<<<<<<
  * 
  *     def __repr__(self):
  */
-  __pyx_t_1 = __pyx_f_5adios_printvar(__pyx_v_self->vp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1578, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_5adios_printvar(__pyx_v_self->vp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1586, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":1572
+  /* "adios.pyx":1580
  *             return var
  * 
  *     cpdef printself(self):             # <<<<<<<<<<<<<<
@@ -24059,7 +24703,7 @@ static PyObject *__pyx_pf_5adios_3var_14printself(struct __pyx_obj_5adios_var *_
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("printself", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_5adios_3var_printself(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1572, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_5adios_3var_printself(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1580, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -24076,7 +24720,7 @@ static PyObject *__pyx_pf_5adios_3var_14printself(struct __pyx_obj_5adios_var *_
   return __pyx_r;
 }
 
-/* "adios.pyx":1580
+/* "adios.pyx":1588
  *         printvar(self.vp)
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -24108,7 +24752,7 @@ static PyObject *__pyx_pf_5adios_3var_16__repr__(struct __pyx_obj_5adios_var *__
   PyObject *__pyx_t_6 = NULL;
   __Pyx_RefNannySetupContext("__repr__", 0);
 
-  /* "adios.pyx":1581
+  /* "adios.pyx":1589
  * 
  *     def __repr__(self):
  *         return "AdiosVar (varid=%r, name=%r, dtype=%r, ndim=%r, dims=%r, nsteps=%r, attrs=%r)" % \             # <<<<<<<<<<<<<<
@@ -24117,47 +24761,47 @@ static PyObject *__pyx_pf_5adios_3var_16__repr__(struct __pyx_obj_5adios_var *__
  */
   __Pyx_XDECREF(__pyx_r);
 
-  /* "adios.pyx":1582
+  /* "adios.pyx":1590
  *     def __repr__(self):
  *         return "AdiosVar (varid=%r, name=%r, dtype=%r, ndim=%r, dims=%r, nsteps=%r, attrs=%r)" % \
  *                (self.varid,             # <<<<<<<<<<<<<<
  *                 self.name,
  *                 self.dtype,
  */
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->varid); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1582, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->varid); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1590, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
 
-  /* "adios.pyx":1585
+  /* "adios.pyx":1593
  *                 self.name,
  *                 self.dtype,
  *                 self.ndim,             # <<<<<<<<<<<<<<
  *                 self.dims,
  *                 self.nsteps,
  */
-  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_self->ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1585, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_self->ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1593, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
 
-  /* "adios.pyx":1587
+  /* "adios.pyx":1595
  *                 self.ndim,
  *                 self.dims,
  *                 self.nsteps,             # <<<<<<<<<<<<<<
  *                 self.attrs.keys())
  * 
  */
-  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_self->nsteps); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1587, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_self->nsteps); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1595, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
 
-  /* "adios.pyx":1588
+  /* "adios.pyx":1596
  *                 self.dims,
  *                 self.nsteps,
  *                 self.attrs.keys())             # <<<<<<<<<<<<<<
  * 
  *     def _readattr(self, varname):
  */
-  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1588, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1596, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __pyx_t_6 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_5))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
     __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
     if (likely(__pyx_t_6)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
@@ -24167,22 +24811,22 @@ static PyObject *__pyx_pf_5adios_3var_16__repr__(struct __pyx_obj_5adios_var *__
     }
   }
   if (__pyx_t_6) {
-    __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1588, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1596, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   } else {
-    __pyx_t_4 = __Pyx_PyObject_CallNoArg(__pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1588, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_CallNoArg(__pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1596, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "adios.pyx":1582
+  /* "adios.pyx":1590
  *     def __repr__(self):
  *         return "AdiosVar (varid=%r, name=%r, dtype=%r, ndim=%r, dims=%r, nsteps=%r, attrs=%r)" % \
  *                (self.varid,             # <<<<<<<<<<<<<<
  *                 self.name,
  *                 self.dtype,
  */
-  __pyx_t_5 = PyTuple_New(7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1582, __pyx_L1_error)
+  __pyx_t_5 = PyTuple_New(7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1590, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1);
@@ -24206,21 +24850,21 @@ static PyObject *__pyx_pf_5adios_3var_16__repr__(struct __pyx_obj_5adios_var *__
   __pyx_t_3 = 0;
   __pyx_t_4 = 0;
 
-  /* "adios.pyx":1581
+  /* "adios.pyx":1589
  * 
  *     def __repr__(self):
  *         return "AdiosVar (varid=%r, name=%r, dtype=%r, ndim=%r, dims=%r, nsteps=%r, attrs=%r)" % \             # <<<<<<<<<<<<<<
  *                (self.varid,
  *                 self.name,
  */
-  __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_AdiosVar_varid_r_name_r_dtype_r, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1581, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_AdiosVar_varid_r_name_r_dtype_r, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1589, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __pyx_r = __pyx_t_4;
   __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":1580
+  /* "adios.pyx":1588
  *         printvar(self.vp)
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -24244,7 +24888,7 @@ static PyObject *__pyx_pf_5adios_3var_16__repr__(struct __pyx_obj_5adios_var *__
   return __pyx_r;
 }
 
-/* "adios.pyx":1590
+/* "adios.pyx":1598
  *                 self.attrs.keys())
  * 
  *     def _readattr(self, varname):             # <<<<<<<<<<<<<<
@@ -24287,7 +24931,7 @@ static PyObject *__pyx_pf_5adios_3var_18_readattr(struct __pyx_obj_5adios_var *_
   __Pyx_RefNannySetupContext("_readattr", 0);
   __Pyx_INCREF(__pyx_v_varname);
 
-  /* "adios.pyx":1591
+  /* "adios.pyx":1599
  * 
  *     def _readattr(self, varname):
  *         if not isinstance(varname, tuple):             # <<<<<<<<<<<<<<
@@ -24298,14 +24942,14 @@ static PyObject *__pyx_pf_5adios_3var_18_readattr(struct __pyx_obj_5adios_var *_
   __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0);
   if (__pyx_t_2) {
 
-    /* "adios.pyx":1592
+    /* "adios.pyx":1600
  *     def _readattr(self, varname):
  *         if not isinstance(varname, tuple):
  *             varname = (varname,)             # <<<<<<<<<<<<<<
  * 
  *         if len(varname) > 1:
  */
-    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1592, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1600, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_varname);
     __Pyx_GIVEREF(__pyx_v_varname);
@@ -24313,7 +24957,7 @@ static PyObject *__pyx_pf_5adios_3var_18_readattr(struct __pyx_obj_5adios_var *_
     __Pyx_DECREF_SET(__pyx_v_varname, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "adios.pyx":1591
+    /* "adios.pyx":1599
  * 
  *     def _readattr(self, varname):
  *         if not isinstance(varname, tuple):             # <<<<<<<<<<<<<<
@@ -24322,37 +24966,37 @@ static PyObject *__pyx_pf_5adios_3var_18_readattr(struct __pyx_obj_5adios_var *_
  */
   }
 
-  /* "adios.pyx":1594
+  /* "adios.pyx":1602
  *             varname = (varname,)
  * 
  *         if len(varname) > 1:             # <<<<<<<<<<<<<<
  *             raise KeyError(varname)
  * 
  */
-  __pyx_t_4 = PyObject_Length(__pyx_v_varname); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 1594, __pyx_L1_error)
+  __pyx_t_4 = PyObject_Length(__pyx_v_varname); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 1602, __pyx_L1_error)
   __pyx_t_2 = ((__pyx_t_4 > 1) != 0);
   if (__pyx_t_2) {
 
-    /* "adios.pyx":1595
+    /* "adios.pyx":1603
  * 
  *         if len(varname) > 1:
  *             raise KeyError(varname)             # <<<<<<<<<<<<<<
  * 
  *         for key_ in varname:
  */
-    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1595, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1603, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_varname);
     __Pyx_GIVEREF(__pyx_v_varname);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_varname);
-    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_KeyError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1595, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_KeyError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1603, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_Raise(__pyx_t_5, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    __PYX_ERR(0, 1595, __pyx_L1_error)
+    __PYX_ERR(0, 1603, __pyx_L1_error)
 
-    /* "adios.pyx":1594
+    /* "adios.pyx":1602
  *             varname = (varname,)
  * 
  *         if len(varname) > 1:             # <<<<<<<<<<<<<<
@@ -24361,7 +25005,7 @@ static PyObject *__pyx_pf_5adios_3var_18_readattr(struct __pyx_obj_5adios_var *_
  */
   }
 
-  /* "adios.pyx":1597
+  /* "adios.pyx":1605
  *             raise KeyError(varname)
  * 
  *         for key_ in varname:             # <<<<<<<<<<<<<<
@@ -24372,26 +25016,26 @@ static PyObject *__pyx_pf_5adios_3var_18_readattr(struct __pyx_obj_5adios_var *_
     __pyx_t_5 = __pyx_v_varname; __Pyx_INCREF(__pyx_t_5); __pyx_t_4 = 0;
     __pyx_t_6 = NULL;
   } else {
-    __pyx_t_4 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_v_varname); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1597, __pyx_L1_error)
+    __pyx_t_4 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_v_varname); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1605, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1597, __pyx_L1_error)
+    __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1605, __pyx_L1_error)
   }
   for (;;) {
     if (likely(!__pyx_t_6)) {
       if (likely(PyList_CheckExact(__pyx_t_5))) {
         if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_5)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_3 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1597, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_3 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1605, __pyx_L1_error)
         #else
-        __pyx_t_3 = PySequence_ITEM(__pyx_t_5, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1597, __pyx_L1_error)
+        __pyx_t_3 = PySequence_ITEM(__pyx_t_5, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1605, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
         #endif
       } else {
         if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_5)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1597, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1605, __pyx_L1_error)
         #else
-        __pyx_t_3 = PySequence_ITEM(__pyx_t_5, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1597, __pyx_L1_error)
+        __pyx_t_3 = PySequence_ITEM(__pyx_t_5, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1605, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
         #endif
       }
@@ -24401,7 +25045,7 @@ static PyObject *__pyx_pf_5adios_3var_18_readattr(struct __pyx_obj_5adios_var *_
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
           if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-          else __PYX_ERR(0, 1597, __pyx_L1_error)
+          else __PYX_ERR(0, 1605, __pyx_L1_error)
         }
         break;
       }
@@ -24410,7 +25054,7 @@ static PyObject *__pyx_pf_5adios_3var_18_readattr(struct __pyx_obj_5adios_var *_
     __Pyx_XDECREF_SET(__pyx_v_key_, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "adios.pyx":1598
+    /* "adios.pyx":1606
  * 
  *         for key_ in varname:
  *             if not isinstance(key_, str):             # <<<<<<<<<<<<<<
@@ -24421,20 +25065,20 @@ static PyObject *__pyx_pf_5adios_3var_18_readattr(struct __pyx_obj_5adios_var *_
     __pyx_t_1 = ((!(__pyx_t_2 != 0)) != 0);
     if (__pyx_t_1) {
 
-      /* "adios.pyx":1599
+      /* "adios.pyx":1607
  *         for key_ in varname:
  *             if not isinstance(key_, str):
  *                 raise TypeError("Unhashable type")             # <<<<<<<<<<<<<<
  * 
  *             if key_.startswith('/'):
  */
-      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__34, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1599, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__34, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1607, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_Raise(__pyx_t_3, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      __PYX_ERR(0, 1599, __pyx_L1_error)
+      __PYX_ERR(0, 1607, __pyx_L1_error)
 
-      /* "adios.pyx":1598
+      /* "adios.pyx":1606
  * 
  *         for key_ in varname:
  *             if not isinstance(key_, str):             # <<<<<<<<<<<<<<
@@ -24443,35 +25087,35 @@ static PyObject *__pyx_pf_5adios_3var_18_readattr(struct __pyx_obj_5adios_var *_
  */
     }
 
-    /* "adios.pyx":1601
+    /* "adios.pyx":1609
  *                 raise TypeError("Unhashable type")
  * 
  *             if key_.startswith('/'):             # <<<<<<<<<<<<<<
  *                 key_ = key_[1:]
  * 
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_key_, __pyx_n_s_startswith); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1601, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_key_, __pyx_n_s_startswith); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1609, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__35, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1601, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__35, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1609, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1601, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1609, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     if (__pyx_t_1) {
 
-      /* "adios.pyx":1602
+      /* "adios.pyx":1610
  * 
  *             if key_.startswith('/'):
  *                 key_ = key_[1:]             # <<<<<<<<<<<<<<
  * 
  *             if key_ in self.attrs.keys():
  */
-      __pyx_t_7 = __Pyx_PyObject_GetSlice(__pyx_v_key_, 1, 0, NULL, NULL, &__pyx_slice__36, 1, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1602, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetSlice(__pyx_v_key_, 1, 0, NULL, NULL, &__pyx_slice__36, 1, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1610, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF_SET(__pyx_v_key_, __pyx_t_7);
       __pyx_t_7 = 0;
 
-      /* "adios.pyx":1601
+      /* "adios.pyx":1609
  *                 raise TypeError("Unhashable type")
  * 
  *             if key_.startswith('/'):             # <<<<<<<<<<<<<<
@@ -24480,17 +25124,17 @@ static PyObject *__pyx_pf_5adios_3var_18_readattr(struct __pyx_obj_5adios_var *_
  */
     }
 
-    /* "adios.pyx":1604
+    /* "adios.pyx":1612
  *                 key_ = key_[1:]
  * 
  *             if key_ in self.attrs.keys():             # <<<<<<<<<<<<<<
  *                 return self.attrs.get(key_)
  * 
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1604, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1612, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_8 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
       __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_3);
       if (likely(__pyx_t_8)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -24500,19 +25144,19 @@ static PyObject *__pyx_pf_5adios_3var_18_readattr(struct __pyx_obj_5adios_var *_
       }
     }
     if (__pyx_t_8) {
-      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1604, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1612, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     } else {
-      __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1604, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1612, __pyx_L1_error)
     }
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_1 = (__Pyx_PySequence_ContainsTF(__pyx_v_key_, __pyx_t_7, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1604, __pyx_L1_error)
+    __pyx_t_1 = (__Pyx_PySequence_ContainsTF(__pyx_v_key_, __pyx_t_7, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1612, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
 
-      /* "adios.pyx":1605
+      /* "adios.pyx":1613
  * 
  *             if key_ in self.attrs.keys():
  *                 return self.attrs.get(key_)             # <<<<<<<<<<<<<<
@@ -24520,10 +25164,10 @@ static PyObject *__pyx_pf_5adios_3var_18_readattr(struct __pyx_obj_5adios_var *_
  *             if '/'+key_ in self.attrs.keys():
  */
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1605, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1613, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __pyx_t_8 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
         __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_3);
         if (likely(__pyx_t_8)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -24533,18 +25177,36 @@ static PyObject *__pyx_pf_5adios_3var_18_readattr(struct __pyx_obj_5adios_var *_
         }
       }
       if (!__pyx_t_8) {
-        __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_key_); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1605, __pyx_L1_error)
+        __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_key_); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1613, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
       } else {
-        __pyx_t_9 = PyTuple_New(1+1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1605, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_9);
-        __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_8); __pyx_t_8 = NULL;
-        __Pyx_INCREF(__pyx_v_key_);
-        __Pyx_GIVEREF(__pyx_v_key_);
-        PyTuple_SET_ITEM(__pyx_t_9, 0+1, __pyx_v_key_);
-        __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_9, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1605, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_7);
-        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+        #if CYTHON_FAST_PYCALL
+        if (PyFunction_Check(__pyx_t_3)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_v_key_};
+          __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1613, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+          __Pyx_GOTREF(__pyx_t_7);
+        } else
+        #endif
+        #if CYTHON_FAST_PYCCALL
+        if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_v_key_};
+          __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1613, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+          __Pyx_GOTREF(__pyx_t_7);
+        } else
+        #endif
+        {
+          __pyx_t_9 = PyTuple_New(1+1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1613, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_9);
+          __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_8); __pyx_t_8 = NULL;
+          __Pyx_INCREF(__pyx_v_key_);
+          __Pyx_GIVEREF(__pyx_v_key_);
+          PyTuple_SET_ITEM(__pyx_t_9, 0+1, __pyx_v_key_);
+          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_9, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1613, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_7);
+          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+        }
       }
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_r = __pyx_t_7;
@@ -24552,7 +25214,7 @@ static PyObject *__pyx_pf_5adios_3var_18_readattr(struct __pyx_obj_5adios_var *_
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       goto __pyx_L0;
 
-      /* "adios.pyx":1604
+      /* "adios.pyx":1612
  *                 key_ = key_[1:]
  * 
  *             if key_ in self.attrs.keys():             # <<<<<<<<<<<<<<
@@ -24561,19 +25223,19 @@ static PyObject *__pyx_pf_5adios_3var_18_readattr(struct __pyx_obj_5adios_var *_
  */
     }
 
-    /* "adios.pyx":1607
+    /* "adios.pyx":1615
  *                 return self.attrs.get(key_)
  * 
  *             if '/'+key_ in self.attrs.keys():             # <<<<<<<<<<<<<<
  *                 return self.attrs.get('/'+key_)
  * 
  */
-    __pyx_t_7 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1607, __pyx_L1_error)
+    __pyx_t_7 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1615, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
-    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1607, __pyx_L1_error)
+    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1615, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
     __pyx_t_8 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_9))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
       __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_9);
       if (likely(__pyx_t_8)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
@@ -24583,20 +25245,20 @@ static PyObject *__pyx_pf_5adios_3var_18_readattr(struct __pyx_obj_5adios_var *_
       }
     }
     if (__pyx_t_8) {
-      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1607, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1615, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     } else {
-      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1607, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1615, __pyx_L1_error)
     }
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-    __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_7, __pyx_t_3, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1607, __pyx_L1_error)
+    __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_7, __pyx_t_3, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1615, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __pyx_t_1 = (__pyx_t_2 != 0);
     if (__pyx_t_1) {
 
-      /* "adios.pyx":1608
+      /* "adios.pyx":1616
  * 
  *             if '/'+key_ in self.attrs.keys():
  *                 return self.attrs.get('/'+key_)             # <<<<<<<<<<<<<<
@@ -24604,12 +25266,12 @@ static PyObject *__pyx_pf_5adios_3var_18_readattr(struct __pyx_obj_5adios_var *_
  *             for name in self.attrs.keys():
  */
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_get); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1608, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_get); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1616, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      __pyx_t_9 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1608, __pyx_L1_error)
+      __pyx_t_9 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1616, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
       __pyx_t_8 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_7))) {
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
         __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
         if (likely(__pyx_t_8)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
@@ -24619,19 +25281,39 @@ static PyObject *__pyx_pf_5adios_3var_18_readattr(struct __pyx_obj_5adios_var *_
         }
       }
       if (!__pyx_t_8) {
-        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1608, __pyx_L1_error)
+        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1616, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
         __Pyx_GOTREF(__pyx_t_3);
       } else {
-        __pyx_t_10 = PyTuple_New(1+1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1608, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_10);
-        __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_8); __pyx_t_8 = NULL;
-        __Pyx_GIVEREF(__pyx_t_9);
-        PyTuple_SET_ITEM(__pyx_t_10, 0+1, __pyx_t_9);
-        __pyx_t_9 = 0;
-        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1608, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_3);
-        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+        #if CYTHON_FAST_PYCALL
+        if (PyFunction_Check(__pyx_t_7)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_t_9};
+          __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1616, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+        } else
+        #endif
+        #if CYTHON_FAST_PYCCALL
+        if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_t_9};
+          __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1616, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+        } else
+        #endif
+        {
+          __pyx_t_10 = PyTuple_New(1+1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1616, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_10);
+          __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_8); __pyx_t_8 = NULL;
+          __Pyx_GIVEREF(__pyx_t_9);
+          PyTuple_SET_ITEM(__pyx_t_10, 0+1, __pyx_t_9);
+          __pyx_t_9 = 0;
+          __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1616, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+        }
       }
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       __pyx_r = __pyx_t_3;
@@ -24639,7 +25321,7 @@ static PyObject *__pyx_pf_5adios_3var_18_readattr(struct __pyx_obj_5adios_var *_
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       goto __pyx_L0;
 
-      /* "adios.pyx":1607
+      /* "adios.pyx":1615
  *                 return self.attrs.get(key_)
  * 
  *             if '/'+key_ in self.attrs.keys():             # <<<<<<<<<<<<<<
@@ -24648,17 +25330,17 @@ static PyObject *__pyx_pf_5adios_3var_18_readattr(struct __pyx_obj_5adios_var *_
  */
     }
 
-    /* "adios.pyx":1610
+    /* "adios.pyx":1618
  *                 return self.attrs.get('/'+key_)
  * 
  *             for name in self.attrs.keys():             # <<<<<<<<<<<<<<
  *                 #if (key_ == os.path.dirname(name)) or ('/' + key_ == os.path.dirname(name)):
  *                 if name.startswith(key_) or name.startswith('/'+key_):
  */
-    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1610, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1618, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __pyx_t_10 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_7))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
       __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_7);
       if (likely(__pyx_t_10)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
@@ -24668,10 +25350,10 @@ static PyObject *__pyx_pf_5adios_3var_18_readattr(struct __pyx_obj_5adios_var *_
       }
     }
     if (__pyx_t_10) {
-      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_10); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1610, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_10); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1618, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
     } else {
-      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1610, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1618, __pyx_L1_error)
     }
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
@@ -24679,27 +25361,27 @@ static PyObject *__pyx_pf_5adios_3var_18_readattr(struct __pyx_obj_5adios_var *_
       __pyx_t_7 = __pyx_t_3; __Pyx_INCREF(__pyx_t_7); __pyx_t_11 = 0;
       __pyx_t_12 = NULL;
     } else {
-      __pyx_t_11 = -1; __pyx_t_7 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1610, __pyx_L1_error)
+      __pyx_t_11 = -1; __pyx_t_7 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1618, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      __pyx_t_12 = Py_TYPE(__pyx_t_7)->tp_iternext; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1610, __pyx_L1_error)
+      __pyx_t_12 = Py_TYPE(__pyx_t_7)->tp_iternext; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1618, __pyx_L1_error)
     }
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     for (;;) {
       if (likely(!__pyx_t_12)) {
         if (likely(PyList_CheckExact(__pyx_t_7))) {
           if (__pyx_t_11 >= PyList_GET_SIZE(__pyx_t_7)) break;
-          #if CYTHON_COMPILING_IN_CPYTHON
-          __pyx_t_3 = PyList_GET_ITEM(__pyx_t_7, __pyx_t_11); __Pyx_INCREF(__pyx_t_3); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 1610, __pyx_L1_error)
+          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+          __pyx_t_3 = PyList_GET_ITEM(__pyx_t_7, __pyx_t_11); __Pyx_INCREF(__pyx_t_3); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 1618, __pyx_L1_error)
           #else
-          __pyx_t_3 = PySequence_ITEM(__pyx_t_7, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1610, __pyx_L1_error)
+          __pyx_t_3 = PySequence_ITEM(__pyx_t_7, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1618, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_3);
           #endif
         } else {
           if (__pyx_t_11 >= PyTuple_GET_SIZE(__pyx_t_7)) break;
-          #if CYTHON_COMPILING_IN_CPYTHON
-          __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_7, __pyx_t_11); __Pyx_INCREF(__pyx_t_3); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 1610, __pyx_L1_error)
+          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+          __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_7, __pyx_t_11); __Pyx_INCREF(__pyx_t_3); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 1618, __pyx_L1_error)
           #else
-          __pyx_t_3 = PySequence_ITEM(__pyx_t_7, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1610, __pyx_L1_error)
+          __pyx_t_3 = PySequence_ITEM(__pyx_t_7, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1618, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_3);
           #endif
         }
@@ -24709,7 +25391,7 @@ static PyObject *__pyx_pf_5adios_3var_18_readattr(struct __pyx_obj_5adios_var *_
           PyObject* exc_type = PyErr_Occurred();
           if (exc_type) {
             if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-            else __PYX_ERR(0, 1610, __pyx_L1_error)
+            else __PYX_ERR(0, 1618, __pyx_L1_error)
           }
           break;
         }
@@ -24718,17 +25400,17 @@ static PyObject *__pyx_pf_5adios_3var_18_readattr(struct __pyx_obj_5adios_var *_
       __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_3);
       __pyx_t_3 = 0;
 
-      /* "adios.pyx":1612
+      /* "adios.pyx":1620
  *             for name in self.attrs.keys():
  *                 #if (key_ == os.path.dirname(name)) or ('/' + key_ == os.path.dirname(name)):
  *                 if name.startswith(key_) or name.startswith('/'+key_):             # <<<<<<<<<<<<<<
  *                     return group(self.file, self.name + '/' + key_)
  * 
  */
-      __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_startswith); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1612, __pyx_L1_error)
+      __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_startswith); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1620, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_10);
       __pyx_t_9 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_10))) {
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_10))) {
         __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_10);
         if (likely(__pyx_t_9)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
@@ -24738,33 +25420,51 @@ static PyObject *__pyx_pf_5adios_3var_18_readattr(struct __pyx_obj_5adios_var *_
         }
       }
       if (!__pyx_t_9) {
-        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_v_key_); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1612, __pyx_L1_error)
+        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_v_key_); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1620, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
       } else {
-        __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1612, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_8);
-        __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_9); __pyx_t_9 = NULL;
-        __Pyx_INCREF(__pyx_v_key_);
-        __Pyx_GIVEREF(__pyx_v_key_);
-        PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_v_key_);
-        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1612, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_3);
-        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        #if CYTHON_FAST_PYCALL
+        if (PyFunction_Check(__pyx_t_10)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_9, __pyx_v_key_};
+          __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_10, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1620, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+          __Pyx_GOTREF(__pyx_t_3);
+        } else
+        #endif
+        #if CYTHON_FAST_PYCCALL
+        if (__Pyx_PyFastCFunction_Check(__pyx_t_10)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_9, __pyx_v_key_};
+          __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_10, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1620, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+          __Pyx_GOTREF(__pyx_t_3);
+        } else
+        #endif
+        {
+          __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1620, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_8);
+          __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_9); __pyx_t_9 = NULL;
+          __Pyx_INCREF(__pyx_v_key_);
+          __Pyx_GIVEREF(__pyx_v_key_);
+          PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_v_key_);
+          __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1620, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        }
       }
       __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
-      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1612, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1620, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       if (!__pyx_t_2) {
       } else {
         __pyx_t_1 = __pyx_t_2;
         goto __pyx_L14_bool_binop_done;
       }
-      __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_startswith); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1612, __pyx_L1_error)
+      __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_startswith); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1620, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_10);
-      __pyx_t_8 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1612, __pyx_L1_error)
+      __pyx_t_8 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1620, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
       __pyx_t_9 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_10))) {
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_10))) {
         __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_10);
         if (likely(__pyx_t_9)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
@@ -24774,28 +25474,48 @@ static PyObject *__pyx_pf_5adios_3var_18_readattr(struct __pyx_obj_5adios_var *_
         }
       }
       if (!__pyx_t_9) {
-        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1612, __pyx_L1_error)
+        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1620, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
         __Pyx_GOTREF(__pyx_t_3);
       } else {
-        __pyx_t_13 = PyTuple_New(1+1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1612, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_13);
-        __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_9); __pyx_t_9 = NULL;
-        __Pyx_GIVEREF(__pyx_t_8);
-        PyTuple_SET_ITEM(__pyx_t_13, 0+1, __pyx_t_8);
-        __pyx_t_8 = 0;
-        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_13, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1612, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_3);
-        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+        #if CYTHON_FAST_PYCALL
+        if (PyFunction_Check(__pyx_t_10)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_9, __pyx_t_8};
+          __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_10, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1620, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        } else
+        #endif
+        #if CYTHON_FAST_PYCCALL
+        if (__Pyx_PyFastCFunction_Check(__pyx_t_10)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_9, __pyx_t_8};
+          __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_10, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1620, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        } else
+        #endif
+        {
+          __pyx_t_13 = PyTuple_New(1+1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1620, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_13);
+          __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_9); __pyx_t_9 = NULL;
+          __Pyx_GIVEREF(__pyx_t_8);
+          PyTuple_SET_ITEM(__pyx_t_13, 0+1, __pyx_t_8);
+          __pyx_t_8 = 0;
+          __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_13, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1620, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+        }
       }
       __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
-      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1612, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1620, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_t_1 = __pyx_t_2;
       __pyx_L14_bool_binop_done:;
       if (__pyx_t_1) {
 
-        /* "adios.pyx":1613
+        /* "adios.pyx":1621
  *                 #if (key_ == os.path.dirname(name)) or ('/' + key_ == os.path.dirname(name)):
  *                 if name.startswith(key_) or name.startswith('/'+key_):
  *                     return group(self.file, self.name + '/' + key_)             # <<<<<<<<<<<<<<
@@ -24803,12 +25523,12 @@ static PyObject *__pyx_pf_5adios_3var_18_readattr(struct __pyx_obj_5adios_var *_
  *     def _readvar(self, args):
  */
         __Pyx_XDECREF(__pyx_r);
-        __pyx_t_3 = PyNumber_Add(__pyx_v_self->name, __pyx_kp_s_); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1613, __pyx_L1_error)
+        __pyx_t_3 = PyNumber_Add(__pyx_v_self->name, __pyx_kp_s_); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1621, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
-        __pyx_t_10 = PyNumber_Add(__pyx_t_3, __pyx_v_key_); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1613, __pyx_L1_error)
+        __pyx_t_10 = PyNumber_Add(__pyx_t_3, __pyx_v_key_); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1621, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_10);
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-        __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1613, __pyx_L1_error)
+        __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1621, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
         __Pyx_INCREF(((PyObject *)__pyx_v_self->file));
         __Pyx_GIVEREF(((PyObject *)__pyx_v_self->file));
@@ -24816,7 +25536,7 @@ static PyObject *__pyx_pf_5adios_3var_18_readattr(struct __pyx_obj_5adios_var *_
         __Pyx_GIVEREF(__pyx_t_10);
         PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_10);
         __pyx_t_10 = 0;
-        __pyx_t_10 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5adios_group), __pyx_t_3, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1613, __pyx_L1_error)
+        __pyx_t_10 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5adios_group), __pyx_t_3, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1621, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_10);
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
         __pyx_r = __pyx_t_10;
@@ -24825,7 +25545,7 @@ static PyObject *__pyx_pf_5adios_3var_18_readattr(struct __pyx_obj_5adios_var *_
         __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
         goto __pyx_L0;
 
-        /* "adios.pyx":1612
+        /* "adios.pyx":1620
  *             for name in self.attrs.keys():
  *                 #if (key_ == os.path.dirname(name)) or ('/' + key_ == os.path.dirname(name)):
  *                 if name.startswith(key_) or name.startswith('/'+key_):             # <<<<<<<<<<<<<<
@@ -24834,7 +25554,7 @@ static PyObject *__pyx_pf_5adios_3var_18_readattr(struct __pyx_obj_5adios_var *_
  */
       }
 
-      /* "adios.pyx":1610
+      /* "adios.pyx":1618
  *                 return self.attrs.get('/'+key_)
  * 
  *             for name in self.attrs.keys():             # <<<<<<<<<<<<<<
@@ -24844,7 +25564,7 @@ static PyObject *__pyx_pf_5adios_3var_18_readattr(struct __pyx_obj_5adios_var *_
     }
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-    /* "adios.pyx":1597
+    /* "adios.pyx":1605
  *             raise KeyError(varname)
  * 
  *         for key_ in varname:             # <<<<<<<<<<<<<<
@@ -24854,7 +25574,7 @@ static PyObject *__pyx_pf_5adios_3var_18_readattr(struct __pyx_obj_5adios_var *_
   }
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "adios.pyx":1590
+  /* "adios.pyx":1598
  *                 self.attrs.keys())
  * 
  *     def _readattr(self, varname):             # <<<<<<<<<<<<<<
@@ -24884,7 +25604,7 @@ static PyObject *__pyx_pf_5adios_3var_18_readattr(struct __pyx_obj_5adios_var *_
   return __pyx_r;
 }
 
-/* "adios.pyx":1615
+/* "adios.pyx":1623
  *                     return group(self.file, self.name + '/' + key_)
  * 
  *     def _readvar(self, args):             # <<<<<<<<<<<<<<
@@ -24920,29 +25640,30 @@ static PyObject *__pyx_pf_5adios_3var_20_readvar(struct __pyx_obj_5adios_var *__
   int __pyx_t_3;
   PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
-  Py_ssize_t __pyx_t_6;
+  int __pyx_t_6;
   PyObject *__pyx_t_7 = NULL;
   int __pyx_t_8;
   struct __pyx_opt_args_5adios_3var_read __pyx_t_9;
-  PyObject *(*__pyx_t_10)(PyObject *);
-  PyObject *__pyx_t_11 = NULL;
+  Py_ssize_t __pyx_t_10;
+  PyObject *(*__pyx_t_11)(PyObject *);
   PyObject *__pyx_t_12 = NULL;
   PyObject *__pyx_t_13 = NULL;
+  PyObject *__pyx_t_14 = NULL;
   __Pyx_RefNannySetupContext("_readvar", 0);
 
-  /* "adios.pyx":1616
+  /* "adios.pyx":1624
  * 
  *     def _readvar(self, args):
  *         shape = list(self.dims)             # <<<<<<<<<<<<<<
  *         if self.nsteps > 1:
  *             shape.insert(0, self.nsteps)
  */
-  __pyx_t_1 = PySequence_List(__pyx_v_self->dims); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1616, __pyx_L1_error)
+  __pyx_t_1 = PySequence_List(__pyx_v_self->dims); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1624, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_shape = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "adios.pyx":1617
+  /* "adios.pyx":1625
  *     def _readvar(self, args):
  *         shape = list(self.dims)
  *         if self.nsteps > 1:             # <<<<<<<<<<<<<<
@@ -24952,19 +25673,19 @@ static PyObject *__pyx_pf_5adios_3var_20_readvar(struct __pyx_obj_5adios_var *__
   __pyx_t_2 = ((__pyx_v_self->nsteps > 1) != 0);
   if (__pyx_t_2) {
 
-    /* "adios.pyx":1618
+    /* "adios.pyx":1626
  *         shape = list(self.dims)
  *         if self.nsteps > 1:
  *             shape.insert(0, self.nsteps)             # <<<<<<<<<<<<<<
  *         asel = sel.select(shape, args)
  * 
  */
-    __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->nsteps); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1618, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->nsteps); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1626, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_3 = PyList_Insert(__pyx_v_shape, 0, __pyx_t_1); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(0, 1618, __pyx_L1_error)
+    __pyx_t_3 = PyList_Insert(__pyx_v_shape, 0, __pyx_t_1); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(0, 1626, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-    /* "adios.pyx":1617
+    /* "adios.pyx":1625
  *     def _readvar(self, args):
  *         shape = list(self.dims)
  *         if self.nsteps > 1:             # <<<<<<<<<<<<<<
@@ -24973,21 +25694,21 @@ static PyObject *__pyx_pf_5adios_3var_20_readvar(struct __pyx_obj_5adios_var *__
  */
   }
 
-  /* "adios.pyx":1619
+  /* "adios.pyx":1627
  *         if self.nsteps > 1:
  *             shape.insert(0, self.nsteps)
  *         asel = sel.select(shape, args)             # <<<<<<<<<<<<<<
  * 
  *         if isinstance(asel, sel.SimpleSelection):
  */
-  __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_sel); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1619, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_sel); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1627, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_select); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1619, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_select); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1627, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_t_4 = NULL;
   __pyx_t_6 = 0;
-  if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_5))) {
+  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
     __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
     if (likely(__pyx_t_4)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
@@ -24997,42 +25718,60 @@ static PyObject *__pyx_pf_5adios_3var_20_readvar(struct __pyx_obj_5adios_var *__
       __pyx_t_6 = 1;
     }
   }
-  __pyx_t_7 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1619, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (__pyx_t_4) {
-    __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_4); __pyx_t_4 = NULL;
+  #if CYTHON_FAST_PYCALL
+  if (PyFunction_Check(__pyx_t_5)) {
+    PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_shape, __pyx_v_args};
+    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1627, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __Pyx_GOTREF(__pyx_t_1);
+  } else
+  #endif
+  #if CYTHON_FAST_PYCCALL
+  if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
+    PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_shape, __pyx_v_args};
+    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1627, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __Pyx_GOTREF(__pyx_t_1);
+  } else
+  #endif
+  {
+    __pyx_t_7 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1627, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_7);
+    if (__pyx_t_4) {
+      __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_4); __pyx_t_4 = NULL;
+    }
+    __Pyx_INCREF(__pyx_v_shape);
+    __Pyx_GIVEREF(__pyx_v_shape);
+    PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, __pyx_v_shape);
+    __Pyx_INCREF(__pyx_v_args);
+    __Pyx_GIVEREF(__pyx_v_args);
+    PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_v_args);
+    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1627, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   }
-  __Pyx_INCREF(__pyx_v_shape);
-  __Pyx_GIVEREF(__pyx_v_shape);
-  PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, __pyx_v_shape);
-  __Pyx_INCREF(__pyx_v_args);
-  __Pyx_GIVEREF(__pyx_v_args);
-  PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_v_args);
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1619, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __pyx_v_asel = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "adios.pyx":1621
+  /* "adios.pyx":1629
  *         asel = sel.select(shape, args)
  * 
  *         if isinstance(asel, sel.SimpleSelection):             # <<<<<<<<<<<<<<
  *             if (self.nsteps) > 1:
  *                 return self.read(offset=asel.sel[0][1:],
  */
-  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_sel); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1621, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_sel); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1629, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_SimpleSelection); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1621, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_SimpleSelection); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1629, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_2 = PyObject_IsInstance(__pyx_v_asel, __pyx_t_5); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 1621, __pyx_L1_error)
+  __pyx_t_2 = PyObject_IsInstance(__pyx_v_asel, __pyx_t_5); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 1629, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __pyx_t_8 = (__pyx_t_2 != 0);
   if (__pyx_t_8) {
 
-    /* "adios.pyx":1622
+    /* "adios.pyx":1630
  * 
  *         if isinstance(asel, sel.SimpleSelection):
  *             if (self.nsteps) > 1:             # <<<<<<<<<<<<<<
@@ -25042,7 +25781,7 @@ static PyObject *__pyx_pf_5adios_3var_20_readvar(struct __pyx_obj_5adios_var *__
     __pyx_t_8 = ((__pyx_v_self->nsteps > 1) != 0);
     if (__pyx_t_8) {
 
-      /* "adios.pyx":1623
+      /* "adios.pyx":1631
  *         if isinstance(asel, sel.SimpleSelection):
  *             if (self.nsteps) > 1:
  *                 return self.read(offset=asel.sel[0][1:],             # <<<<<<<<<<<<<<
@@ -25050,119 +25789,119 @@ static PyObject *__pyx_pf_5adios_3var_20_readvar(struct __pyx_obj_5adios_var *__
  *                                  scalar=asel.sel[3][1:],
  */
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_read); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1623, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_read); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1631, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1623, __pyx_L1_error)
+      __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1631, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
-      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_sel); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1623, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_sel); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1631, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_7, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1623, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_7, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1631, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-      __pyx_t_7 = __Pyx_PyObject_GetSlice(__pyx_t_4, 1, 0, NULL, NULL, &__pyx_slice__37, 1, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1623, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetSlice(__pyx_t_4, 1, 0, NULL, NULL, &__pyx_slice__37, 1, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1631, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-      if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_offset, __pyx_t_7) < 0) __PYX_ERR(0, 1623, __pyx_L1_error)
+      if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_offset, __pyx_t_7) < 0) __PYX_ERR(0, 1631, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-      /* "adios.pyx":1624
+      /* "adios.pyx":1632
  *             if (self.nsteps) > 1:
  *                 return self.read(offset=asel.sel[0][1:],
  *                                  count=asel.sel[1][1:],             # <<<<<<<<<<<<<<
  *                                  scalar=asel.sel[3][1:],
  *                                  from_steps=asel.sel[0][0],
  */
-      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_sel); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1624, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_sel); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1632, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_7, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1624, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_7, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1632, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-      __pyx_t_7 = __Pyx_PyObject_GetSlice(__pyx_t_4, 1, 0, NULL, NULL, &__pyx_slice__38, 1, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1624, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetSlice(__pyx_t_4, 1, 0, NULL, NULL, &__pyx_slice__38, 1, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1632, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-      if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_count, __pyx_t_7) < 0) __PYX_ERR(0, 1623, __pyx_L1_error)
+      if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_count, __pyx_t_7) < 0) __PYX_ERR(0, 1631, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-      /* "adios.pyx":1625
+      /* "adios.pyx":1633
  *                 return self.read(offset=asel.sel[0][1:],
  *                                  count=asel.sel[1][1:],
  *                                  scalar=asel.sel[3][1:],             # <<<<<<<<<<<<<<
  *                                  from_steps=asel.sel[0][0],
  *                                  nsteps=asel.sel[1][0],
  */
-      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_sel); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1625, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_sel); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1633, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_7, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1625, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_7, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1633, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-      __pyx_t_7 = __Pyx_PyObject_GetSlice(__pyx_t_4, 1, 0, NULL, NULL, &__pyx_slice__39, 1, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1625, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetSlice(__pyx_t_4, 1, 0, NULL, NULL, &__pyx_slice__39, 1, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1633, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-      if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_scalar, __pyx_t_7) < 0) __PYX_ERR(0, 1623, __pyx_L1_error)
+      if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_scalar, __pyx_t_7) < 0) __PYX_ERR(0, 1631, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-      /* "adios.pyx":1626
+      /* "adios.pyx":1634
  *                                  count=asel.sel[1][1:],
  *                                  scalar=asel.sel[3][1:],
  *                                  from_steps=asel.sel[0][0],             # <<<<<<<<<<<<<<
  *                                  nsteps=asel.sel[1][0],
  *                                  step_scalar=asel.sel[3][0])
  */
-      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_sel); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1626, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_sel); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1634, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_7, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1626, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_7, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1634, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-      __pyx_t_7 = __Pyx_GetItemInt(__pyx_t_4, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1626, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_GetItemInt(__pyx_t_4, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1634, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-      if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_from_steps, __pyx_t_7) < 0) __PYX_ERR(0, 1623, __pyx_L1_error)
+      if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_from_steps, __pyx_t_7) < 0) __PYX_ERR(0, 1631, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-      /* "adios.pyx":1627
+      /* "adios.pyx":1635
  *                                  scalar=asel.sel[3][1:],
  *                                  from_steps=asel.sel[0][0],
  *                                  nsteps=asel.sel[1][0],             # <<<<<<<<<<<<<<
  *                                  step_scalar=asel.sel[3][0])
  *             else:
  */
-      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_sel); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1627, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_sel); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1635, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_7, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1627, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_7, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1635, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-      __pyx_t_7 = __Pyx_GetItemInt(__pyx_t_4, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1627, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_GetItemInt(__pyx_t_4, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1635, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-      if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_nsteps, __pyx_t_7) < 0) __PYX_ERR(0, 1623, __pyx_L1_error)
+      if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_nsteps, __pyx_t_7) < 0) __PYX_ERR(0, 1631, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-      /* "adios.pyx":1628
+      /* "adios.pyx":1636
  *                                  from_steps=asel.sel[0][0],
  *                                  nsteps=asel.sel[1][0],
  *                                  step_scalar=asel.sel[3][0])             # <<<<<<<<<<<<<<
  *             else:
  *                 return self.read(offset=asel.sel[0],
  */
-      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_sel); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1628, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_sel); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1636, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_7, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1628, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_7, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1636, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-      __pyx_t_7 = __Pyx_GetItemInt(__pyx_t_4, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1628, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_GetItemInt(__pyx_t_4, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1636, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-      if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_step_scalar, __pyx_t_7) < 0) __PYX_ERR(0, 1623, __pyx_L1_error)
+      if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_step_scalar, __pyx_t_7) < 0) __PYX_ERR(0, 1631, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-      /* "adios.pyx":1623
+      /* "adios.pyx":1631
  *         if isinstance(asel, sel.SimpleSelection):
  *             if (self.nsteps) > 1:
  *                 return self.read(offset=asel.sel[0][1:],             # <<<<<<<<<<<<<<
  *                                  count=asel.sel[1][1:],
  *                                  scalar=asel.sel[3][1:],
  */
-      __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1623, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1631, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -25170,7 +25909,7 @@ static PyObject *__pyx_pf_5adios_3var_20_readvar(struct __pyx_obj_5adios_var *__
       __pyx_t_7 = 0;
       goto __pyx_L0;
 
-      /* "adios.pyx":1622
+      /* "adios.pyx":1630
  * 
  *         if isinstance(asel, sel.SimpleSelection):
  *             if (self.nsteps) > 1:             # <<<<<<<<<<<<<<
@@ -25179,7 +25918,7 @@ static PyObject *__pyx_pf_5adios_3var_20_readvar(struct __pyx_obj_5adios_var *__
  */
     }
 
-    /* "adios.pyx":1630
+    /* "adios.pyx":1638
  *                                  step_scalar=asel.sel[3][0])
  *             else:
  *                 return self.read(offset=asel.sel[0],             # <<<<<<<<<<<<<<
@@ -25188,42 +25927,42 @@ static PyObject *__pyx_pf_5adios_3var_20_readvar(struct __pyx_obj_5adios_var *__
  */
     /*else*/ {
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_sel); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1630, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_sel); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1638, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_7, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1630, __pyx_L1_error)
+      __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_7, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1638, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-      if (!(likely(PyTuple_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 1630, __pyx_L1_error)
+      if (!(likely(PyTuple_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 1638, __pyx_L1_error)
 
-      /* "adios.pyx":1631
+      /* "adios.pyx":1639
  *             else:
  *                 return self.read(offset=asel.sel[0],
  *                                  count=asel.sel[1],             # <<<<<<<<<<<<<<
  *                                  scalar=asel.sel[3],
  *                                  from_steps=0,
  */
-      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_sel); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1631, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_sel); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1639, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      __pyx_t_5 = __Pyx_GetItemInt(__pyx_t_7, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1631, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_GetItemInt(__pyx_t_7, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1639, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-      if (!(likely(PyTuple_CheckExact(__pyx_t_5))||((__pyx_t_5) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_5)->tp_name), 0))) __PYX_ERR(0, 1631, __pyx_L1_error)
+      if (!(likely(PyTuple_CheckExact(__pyx_t_5))||((__pyx_t_5) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_5)->tp_name), 0))) __PYX_ERR(0, 1639, __pyx_L1_error)
 
-      /* "adios.pyx":1632
+      /* "adios.pyx":1640
  *                 return self.read(offset=asel.sel[0],
  *                                  count=asel.sel[1],
  *                                  scalar=asel.sel[3],             # <<<<<<<<<<<<<<
  *                                  from_steps=0,
  *                                  nsteps=1)
  */
-      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_sel); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1632, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_sel); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1640, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_7, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1632, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_7, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1640, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-      if (!(likely(PyTuple_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(0, 1632, __pyx_L1_error)
+      if (!(likely(PyTuple_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(0, 1640, __pyx_L1_error)
 
-      /* "adios.pyx":1630
+      /* "adios.pyx":1638
  *                                  step_scalar=asel.sel[3][0])
  *             else:
  *                 return self.read(offset=asel.sel[0],             # <<<<<<<<<<<<<<
@@ -25236,7 +25975,7 @@ static PyObject *__pyx_pf_5adios_3var_20_readvar(struct __pyx_obj_5adios_var *__
       __pyx_t_9.scalar = ((PyObject*)__pyx_t_4);
       __pyx_t_9.from_steps = __pyx_int_0;
       __pyx_t_9.nsteps = __pyx_int_1;
-      __pyx_t_7 = ((struct __pyx_vtabstruct_5adios_var *)__pyx_v_self->__pyx_vtab)->read(__pyx_v_self, 0, &__pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1630, __pyx_L1_error)
+      __pyx_t_7 = ((struct __pyx_vtabstruct_5adios_var *)__pyx_v_self->__pyx_vtab)->read(__pyx_v_self, 0, &__pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1638, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
@@ -25246,7 +25985,7 @@ static PyObject *__pyx_pf_5adios_3var_20_readvar(struct __pyx_obj_5adios_var *__
       goto __pyx_L0;
     }
 
-    /* "adios.pyx":1621
+    /* "adios.pyx":1629
  *         asel = sel.select(shape, args)
  * 
  *         if isinstance(asel, sel.SimpleSelection):             # <<<<<<<<<<<<<<
@@ -25255,82 +25994,82 @@ static PyObject *__pyx_pf_5adios_3var_20_readvar(struct __pyx_obj_5adios_var *__
  */
   }
 
-  /* "adios.pyx":1636
+  /* "adios.pyx":1644
  *                                  nsteps=1)
  * 
  *         elif isinstance(asel, sel.FancySelection):             # <<<<<<<<<<<<<<
  *             shape = list(asel.sel[0][1])
  *             shape[asel.morder[0]] = 0
  */
-  __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_sel); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1636, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_sel); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1644, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_FancySelection); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1636, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_FancySelection); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1644, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __pyx_t_8 = PyObject_IsInstance(__pyx_v_asel, __pyx_t_4); if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(0, 1636, __pyx_L1_error)
+  __pyx_t_8 = PyObject_IsInstance(__pyx_v_asel, __pyx_t_4); if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(0, 1644, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_t_2 = (__pyx_t_8 != 0);
   if (__pyx_t_2) {
 
-    /* "adios.pyx":1637
+    /* "adios.pyx":1645
  * 
  *         elif isinstance(asel, sel.FancySelection):
  *             shape = list(asel.sel[0][1])             # <<<<<<<<<<<<<<
  *             shape[asel.morder[0]] = 0
  *             var = np.ndarray(shape, dtype=self.dtype)
  */
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_sel); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1637, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_sel); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1645, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_7 = __Pyx_GetItemInt(__pyx_t_4, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1637, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_GetItemInt(__pyx_t_4, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1645, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_7, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1637, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_7, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1645, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-    __pyx_t_7 = PySequence_List(__pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1637, __pyx_L1_error)
+    __pyx_t_7 = PySequence_List(__pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1645, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF_SET(__pyx_v_shape, ((PyObject*)__pyx_t_7));
     __pyx_t_7 = 0;
 
-    /* "adios.pyx":1638
+    /* "adios.pyx":1646
  *         elif isinstance(asel, sel.FancySelection):
  *             shape = list(asel.sel[0][1])
  *             shape[asel.morder[0]] = 0             # <<<<<<<<<<<<<<
  *             var = np.ndarray(shape, dtype=self.dtype)
  *             for idx, obj in enumerate(asel.sel):
  */
-    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_morder); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1638, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_morder); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1646, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
-    __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_7, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1638, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_7, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1646, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-    if (unlikely(PyObject_SetItem(__pyx_v_shape, __pyx_t_4, __pyx_int_0) < 0)) __PYX_ERR(0, 1638, __pyx_L1_error)
+    if (unlikely(PyObject_SetItem(__pyx_v_shape, __pyx_t_4, __pyx_int_0) < 0)) __PYX_ERR(0, 1646, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-    /* "adios.pyx":1639
+    /* "adios.pyx":1647
  *             shape = list(asel.sel[0][1])
  *             shape[asel.morder[0]] = 0
  *             var = np.ndarray(shape, dtype=self.dtype)             # <<<<<<<<<<<<<<
  *             for idx, obj in enumerate(asel.sel):
  *                 if (self.nsteps) > 1:
  */
-    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1639, __pyx_L1_error)
+    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1647, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_INCREF(__pyx_v_shape);
     __Pyx_GIVEREF(__pyx_v_shape);
     PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_shape);
-    __pyx_t_7 = PyDict_New(); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1639, __pyx_L1_error)
+    __pyx_t_7 = PyDict_New(); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1647, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
-    if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, ((PyObject *)__pyx_v_self->dtype)) < 0) __PYX_ERR(0, 1639, __pyx_L1_error)
-    __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_ndarray), __pyx_t_4, __pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1639, __pyx_L1_error)
+    if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, ((PyObject *)__pyx_v_self->dtype)) < 0) __PYX_ERR(0, 1647, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_ndarray), __pyx_t_4, __pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1647, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __pyx_v_var = __pyx_t_5;
     __pyx_t_5 = 0;
 
-    /* "adios.pyx":1640
+    /* "adios.pyx":1648
  *             shape[asel.morder[0]] = 0
  *             var = np.ndarray(shape, dtype=self.dtype)
  *             for idx, obj in enumerate(asel.sel):             # <<<<<<<<<<<<<<
@@ -25339,43 +26078,43 @@ static PyObject *__pyx_pf_5adios_3var_20_readvar(struct __pyx_obj_5adios_var *__
  */
     __Pyx_INCREF(__pyx_int_0);
     __pyx_t_5 = __pyx_int_0;
-    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_sel); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1640, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_sel); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1648, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     if (likely(PyList_CheckExact(__pyx_t_7)) || PyTuple_CheckExact(__pyx_t_7)) {
-      __pyx_t_4 = __pyx_t_7; __Pyx_INCREF(__pyx_t_4); __pyx_t_6 = 0;
-      __pyx_t_10 = NULL;
+      __pyx_t_4 = __pyx_t_7; __Pyx_INCREF(__pyx_t_4); __pyx_t_10 = 0;
+      __pyx_t_11 = NULL;
     } else {
-      __pyx_t_6 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1640, __pyx_L1_error)
+      __pyx_t_10 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1648, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_10 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1640, __pyx_L1_error)
+      __pyx_t_11 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1648, __pyx_L1_error)
     }
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     for (;;) {
-      if (likely(!__pyx_t_10)) {
+      if (likely(!__pyx_t_11)) {
         if (likely(PyList_CheckExact(__pyx_t_4))) {
-          if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_4)) break;
-          #if CYTHON_COMPILING_IN_CPYTHON
-          __pyx_t_7 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_6); __Pyx_INCREF(__pyx_t_7); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 1640, __pyx_L1_error)
+          if (__pyx_t_10 >= PyList_GET_SIZE(__pyx_t_4)) break;
+          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+          __pyx_t_7 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_10); __Pyx_INCREF(__pyx_t_7); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 1648, __pyx_L1_error)
           #else
-          __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1640, __pyx_L1_error)
+          __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1648, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_7);
           #endif
         } else {
-          if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
-          #if CYTHON_COMPILING_IN_CPYTHON
-          __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_6); __Pyx_INCREF(__pyx_t_7); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 1640, __pyx_L1_error)
+          if (__pyx_t_10 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
+          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+          __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_10); __Pyx_INCREF(__pyx_t_7); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 1648, __pyx_L1_error)
           #else
-          __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1640, __pyx_L1_error)
+          __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1648, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_7);
           #endif
         }
       } else {
-        __pyx_t_7 = __pyx_t_10(__pyx_t_4);
+        __pyx_t_7 = __pyx_t_11(__pyx_t_4);
         if (unlikely(!__pyx_t_7)) {
           PyObject* exc_type = PyErr_Occurred();
           if (exc_type) {
             if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-            else __PYX_ERR(0, 1640, __pyx_L1_error)
+            else __PYX_ERR(0, 1648, __pyx_L1_error)
           }
           break;
         }
@@ -25385,13 +26124,13 @@ static PyObject *__pyx_pf_5adios_3var_20_readvar(struct __pyx_obj_5adios_var *__
       __pyx_t_7 = 0;
       __Pyx_INCREF(__pyx_t_5);
       __Pyx_XDECREF_SET(__pyx_v_idx, __pyx_t_5);
-      __pyx_t_7 = __Pyx_PyInt_AddObjC(__pyx_t_5, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1640, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyInt_AddObjC(__pyx_t_5, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1648, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_5);
       __pyx_t_5 = __pyx_t_7;
       __pyx_t_7 = 0;
 
-      /* "adios.pyx":1641
+      /* "adios.pyx":1649
  *             var = np.ndarray(shape, dtype=self.dtype)
  *             for idx, obj in enumerate(asel.sel):
  *                 if (self.nsteps) > 1:             # <<<<<<<<<<<<<<
@@ -25401,115 +26140,115 @@ static PyObject *__pyx_pf_5adios_3var_20_readvar(struct __pyx_obj_5adios_var *__
       __pyx_t_2 = ((__pyx_v_self->nsteps > 1) != 0);
       if (__pyx_t_2) {
 
-        /* "adios.pyx":1642
+        /* "adios.pyx":1650
  *             for idx, obj in enumerate(asel.sel):
  *                 if (self.nsteps) > 1:
  *                     v = self.read(offset=obj[0][1:],             # <<<<<<<<<<<<<<
  *                                   count=obj[1][1:],
  *                                   scalar=obj[3][1:],
  */
-        __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_read); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1642, __pyx_L1_error)
+        __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_read); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1650, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
-        __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1642, __pyx_L1_error)
+        __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1650, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_1);
-        __pyx_t_11 = __Pyx_GetItemInt(__pyx_v_obj, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1642, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_11);
-        __pyx_t_12 = __Pyx_PyObject_GetSlice(__pyx_t_11, 1, 0, NULL, NULL, &__pyx_slice__40, 1, 0, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1642, __pyx_L1_error)
+        __pyx_t_12 = __Pyx_GetItemInt(__pyx_v_obj, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1650, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_12);
-        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
-        if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_offset, __pyx_t_12) < 0) __PYX_ERR(0, 1642, __pyx_L1_error)
+        __pyx_t_13 = __Pyx_PyObject_GetSlice(__pyx_t_12, 1, 0, NULL, NULL, &__pyx_slice__40, 1, 0, 1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1650, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_13);
         __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+        if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_offset, __pyx_t_13) < 0) __PYX_ERR(0, 1650, __pyx_L1_error)
+        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
 
-        /* "adios.pyx":1643
+        /* "adios.pyx":1651
  *                 if (self.nsteps) > 1:
  *                     v = self.read(offset=obj[0][1:],
  *                                   count=obj[1][1:],             # <<<<<<<<<<<<<<
  *                                   scalar=obj[3][1:],
  *                                   from_steps=obj[0][0],
  */
-        __pyx_t_12 = __Pyx_GetItemInt(__pyx_v_obj, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1643, __pyx_L1_error)
+        __pyx_t_13 = __Pyx_GetItemInt(__pyx_v_obj, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1651, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_13);
+        __pyx_t_12 = __Pyx_PyObject_GetSlice(__pyx_t_13, 1, 0, NULL, NULL, &__pyx_slice__41, 1, 0, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1651, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_12);
-        __pyx_t_11 = __Pyx_PyObject_GetSlice(__pyx_t_12, 1, 0, NULL, NULL, &__pyx_slice__41, 1, 0, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1643, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_11);
+        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+        if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_count, __pyx_t_12) < 0) __PYX_ERR(0, 1650, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
-        if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_count, __pyx_t_11) < 0) __PYX_ERR(0, 1642, __pyx_L1_error)
-        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
 
-        /* "adios.pyx":1644
+        /* "adios.pyx":1652
  *                     v = self.read(offset=obj[0][1:],
  *                                   count=obj[1][1:],
  *                                   scalar=obj[3][1:],             # <<<<<<<<<<<<<<
  *                                   from_steps=obj[0][0],
  *                                   nsteps=obj[1][0],
  */
-        __pyx_t_11 = __Pyx_GetItemInt(__pyx_v_obj, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1644, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_11);
-        __pyx_t_12 = __Pyx_PyObject_GetSlice(__pyx_t_11, 1, 0, NULL, NULL, &__pyx_slice__42, 1, 0, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1644, __pyx_L1_error)
+        __pyx_t_12 = __Pyx_GetItemInt(__pyx_v_obj, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1652, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_12);
-        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
-        if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_scalar, __pyx_t_12) < 0) __PYX_ERR(0, 1642, __pyx_L1_error)
+        __pyx_t_13 = __Pyx_PyObject_GetSlice(__pyx_t_12, 1, 0, NULL, NULL, &__pyx_slice__42, 1, 0, 1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1652, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_13);
         __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+        if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_scalar, __pyx_t_13) < 0) __PYX_ERR(0, 1650, __pyx_L1_error)
+        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
 
-        /* "adios.pyx":1645
+        /* "adios.pyx":1653
  *                                   count=obj[1][1:],
  *                                   scalar=obj[3][1:],
  *                                   from_steps=obj[0][0],             # <<<<<<<<<<<<<<
  *                                   nsteps=obj[1][0],
  *                                   step_scalar=obj[3][0])
  */
-        __pyx_t_12 = __Pyx_GetItemInt(__pyx_v_obj, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1645, __pyx_L1_error)
+        __pyx_t_13 = __Pyx_GetItemInt(__pyx_v_obj, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1653, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_13);
+        __pyx_t_12 = __Pyx_GetItemInt(__pyx_t_13, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1653, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_12);
-        __pyx_t_11 = __Pyx_GetItemInt(__pyx_t_12, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1645, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_11);
+        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+        if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_from_steps, __pyx_t_12) < 0) __PYX_ERR(0, 1650, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
-        if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_from_steps, __pyx_t_11) < 0) __PYX_ERR(0, 1642, __pyx_L1_error)
-        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
 
-        /* "adios.pyx":1646
+        /* "adios.pyx":1654
  *                                   scalar=obj[3][1:],
  *                                   from_steps=obj[0][0],
  *                                   nsteps=obj[1][0],             # <<<<<<<<<<<<<<
  *                                   step_scalar=obj[3][0])
  *                 else:
  */
-        __pyx_t_11 = __Pyx_GetItemInt(__pyx_v_obj, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1646, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_11);
-        __pyx_t_12 = __Pyx_GetItemInt(__pyx_t_11, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1646, __pyx_L1_error)
+        __pyx_t_12 = __Pyx_GetItemInt(__pyx_v_obj, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1654, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_12);
-        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
-        if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_nsteps, __pyx_t_12) < 0) __PYX_ERR(0, 1642, __pyx_L1_error)
+        __pyx_t_13 = __Pyx_GetItemInt(__pyx_t_12, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1654, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_13);
         __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+        if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_nsteps, __pyx_t_13) < 0) __PYX_ERR(0, 1650, __pyx_L1_error)
+        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
 
-        /* "adios.pyx":1647
+        /* "adios.pyx":1655
  *                                   from_steps=obj[0][0],
  *                                   nsteps=obj[1][0],
  *                                   step_scalar=obj[3][0])             # <<<<<<<<<<<<<<
  *                 else:
  *                     v = self.read(offset=obj[0],
  */
-        __pyx_t_12 = __Pyx_GetItemInt(__pyx_v_obj, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1647, __pyx_L1_error)
+        __pyx_t_13 = __Pyx_GetItemInt(__pyx_v_obj, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1655, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_13);
+        __pyx_t_12 = __Pyx_GetItemInt(__pyx_t_13, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1655, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_12);
-        __pyx_t_11 = __Pyx_GetItemInt(__pyx_t_12, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1647, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_11);
+        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+        if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_step_scalar, __pyx_t_12) < 0) __PYX_ERR(0, 1650, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
-        if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_step_scalar, __pyx_t_11) < 0) __PYX_ERR(0, 1642, __pyx_L1_error)
-        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
 
-        /* "adios.pyx":1642
+        /* "adios.pyx":1650
  *             for idx, obj in enumerate(asel.sel):
  *                 if (self.nsteps) > 1:
  *                     v = self.read(offset=obj[0][1:],             # <<<<<<<<<<<<<<
  *                                   count=obj[1][1:],
  *                                   scalar=obj[3][1:],
  */
-        __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1642, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_11);
+        __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1650, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_12);
         __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
         __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-        __Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_11);
-        __pyx_t_11 = 0;
+        __Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_12);
+        __pyx_t_12 = 0;
 
-        /* "adios.pyx":1641
+        /* "adios.pyx":1649
  *             var = np.ndarray(shape, dtype=self.dtype)
  *             for idx, obj in enumerate(asel.sel):
  *                 if (self.nsteps) > 1:             # <<<<<<<<<<<<<<
@@ -25519,7 +26258,7 @@ static PyObject *__pyx_pf_5adios_3var_20_readvar(struct __pyx_obj_5adios_var *__
         goto __pyx_L8;
       }
 
-      /* "adios.pyx":1649
+      /* "adios.pyx":1657
  *                                   step_scalar=obj[3][0])
  *                 else:
  *                     v = self.read(offset=obj[0],             # <<<<<<<<<<<<<<
@@ -25527,33 +26266,33 @@ static PyObject *__pyx_pf_5adios_3var_20_readvar(struct __pyx_obj_5adios_var *__
  *                                   scalar=obj[3],
  */
       /*else*/ {
-        __pyx_t_11 = __Pyx_GetItemInt(__pyx_v_obj, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1649, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_11);
-        if (!(likely(PyTuple_CheckExact(__pyx_t_11))||((__pyx_t_11) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_11)->tp_name), 0))) __PYX_ERR(0, 1649, __pyx_L1_error)
+        __pyx_t_12 = __Pyx_GetItemInt(__pyx_v_obj, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1657, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_12);
+        if (!(likely(PyTuple_CheckExact(__pyx_t_12))||((__pyx_t_12) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_12)->tp_name), 0))) __PYX_ERR(0, 1657, __pyx_L1_error)
 
-        /* "adios.pyx":1650
+        /* "adios.pyx":1658
  *                 else:
  *                     v = self.read(offset=obj[0],
  *                                   count=obj[1],             # <<<<<<<<<<<<<<
  *                                   scalar=obj[3],
  *                                   from_steps=0,
  */
-        __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_obj, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1650, __pyx_L1_error)
+        __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_obj, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1658, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_1);
-        if (!(likely(PyTuple_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 1650, __pyx_L1_error)
+        if (!(likely(PyTuple_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 1658, __pyx_L1_error)
 
-        /* "adios.pyx":1651
+        /* "adios.pyx":1659
  *                     v = self.read(offset=obj[0],
  *                                   count=obj[1],
  *                                   scalar=obj[3],             # <<<<<<<<<<<<<<
  *                                   from_steps=0,
  *                                   nsteps=1)
  */
-        __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_obj, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1651, __pyx_L1_error)
+        __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_obj, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1659, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
-        if (!(likely(PyTuple_CheckExact(__pyx_t_7))||((__pyx_t_7) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_7)->tp_name), 0))) __PYX_ERR(0, 1651, __pyx_L1_error)
+        if (!(likely(PyTuple_CheckExact(__pyx_t_7))||((__pyx_t_7) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_7)->tp_name), 0))) __PYX_ERR(0, 1659, __pyx_L1_error)
 
-        /* "adios.pyx":1649
+        /* "adios.pyx":1657
  *                                   step_scalar=obj[3][0])
  *                 else:
  *                     v = self.read(offset=obj[0],             # <<<<<<<<<<<<<<
@@ -25561,64 +26300,64 @@ static PyObject *__pyx_pf_5adios_3var_20_readvar(struct __pyx_obj_5adios_var *__
  *                                   scalar=obj[3],
  */
         __pyx_t_9.__pyx_n = 5;
-        __pyx_t_9.offset = ((PyObject*)__pyx_t_11);
+        __pyx_t_9.offset = ((PyObject*)__pyx_t_12);
         __pyx_t_9.count = ((PyObject*)__pyx_t_1);
         __pyx_t_9.scalar = ((PyObject*)__pyx_t_7);
         __pyx_t_9.from_steps = __pyx_int_0;
         __pyx_t_9.nsteps = __pyx_int_1;
-        __pyx_t_12 = ((struct __pyx_vtabstruct_5adios_var *)__pyx_v_self->__pyx_vtab)->read(__pyx_v_self, 0, &__pyx_t_9); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1649, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_12);
-        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+        __pyx_t_13 = ((struct __pyx_vtabstruct_5adios_var *)__pyx_v_self->__pyx_vtab)->read(__pyx_v_self, 0, &__pyx_t_9); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1657, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_13);
+        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
         __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
         __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-        __Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_12);
-        __pyx_t_12 = 0;
+        __Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_13);
+        __pyx_t_13 = 0;
       }
       __pyx_L8:;
 
-      /* "adios.pyx":1655
+      /* "adios.pyx":1663
  *                                   nsteps=1)
  * 
  *                 var = np.concatenate((var, v), axis=asel.morder[idx])             # <<<<<<<<<<<<<<
  * 
  *             var = np.reshape(var, asel.mshape)
  */
-      __pyx_t_12 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1655, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_12);
-      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_concatenate); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1655, __pyx_L1_error)
+      __pyx_t_13 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1663, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_13);
+      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_concatenate); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1663, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
-      __pyx_t_12 = PyTuple_New(2); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1655, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_12);
+      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+      __pyx_t_13 = PyTuple_New(2); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1663, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_13);
       __Pyx_INCREF(__pyx_v_var);
       __Pyx_GIVEREF(__pyx_v_var);
-      PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_v_var);
+      PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_v_var);
       __Pyx_INCREF(__pyx_v_v);
       __Pyx_GIVEREF(__pyx_v_v);
-      PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_v_v);
-      __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1655, __pyx_L1_error)
+      PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_v_v);
+      __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1663, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
-      __Pyx_GIVEREF(__pyx_t_12);
-      PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_12);
-      __pyx_t_12 = 0;
-      __pyx_t_12 = PyDict_New(); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1655, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_12);
-      __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_morder); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1655, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_11);
-      __pyx_t_13 = PyObject_GetItem(__pyx_t_11, __pyx_v_idx); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1655, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_13);
-      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
-      if (PyDict_SetItem(__pyx_t_12, __pyx_n_s_axis, __pyx_t_13) < 0) __PYX_ERR(0, 1655, __pyx_L1_error)
-      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
-      __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_1, __pyx_t_12); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1655, __pyx_L1_error)
+      __Pyx_GIVEREF(__pyx_t_13);
+      PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_13);
+      __pyx_t_13 = 0;
+      __pyx_t_13 = PyDict_New(); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1663, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_13);
+      __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_morder); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1663, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_12);
+      __pyx_t_14 = PyObject_GetItem(__pyx_t_12, __pyx_v_idx); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1663, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_14);
+      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+      if (PyDict_SetItem(__pyx_t_13, __pyx_n_s_axis, __pyx_t_14) < 0) __PYX_ERR(0, 1663, __pyx_L1_error)
+      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+      __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_1, __pyx_t_13); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1663, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_14);
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
-      __Pyx_DECREF_SET(__pyx_v_var, __pyx_t_13);
-      __pyx_t_13 = 0;
+      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+      __Pyx_DECREF_SET(__pyx_v_var, __pyx_t_14);
+      __pyx_t_14 = 0;
 
-      /* "adios.pyx":1640
+      /* "adios.pyx":1648
  *             shape[asel.morder[0]] = 0
  *             var = np.ndarray(shape, dtype=self.dtype)
  *             for idx, obj in enumerate(asel.sel):             # <<<<<<<<<<<<<<
@@ -25629,51 +26368,71 @@ static PyObject *__pyx_pf_5adios_3var_20_readvar(struct __pyx_obj_5adios_var *__
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-    /* "adios.pyx":1657
+    /* "adios.pyx":1665
  *                 var = np.concatenate((var, v), axis=asel.morder[idx])
  * 
  *             var = np.reshape(var, asel.mshape)             # <<<<<<<<<<<<<<
  * 
  *             return var
  */
-    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1657, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1665, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_reshape); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1657, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_13);
+    __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_reshape); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1665, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_14);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_mshape); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1657, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_mshape); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1665, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_12 = NULL;
+    __pyx_t_13 = NULL;
     __pyx_t_6 = 0;
-    if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_13))) {
-      __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_13);
-      if (likely(__pyx_t_12)) {
-        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
-        __Pyx_INCREF(__pyx_t_12);
+    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_14))) {
+      __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_14);
+      if (likely(__pyx_t_13)) {
+        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14);
+        __Pyx_INCREF(__pyx_t_13);
         __Pyx_INCREF(function);
-        __Pyx_DECREF_SET(__pyx_t_13, function);
+        __Pyx_DECREF_SET(__pyx_t_14, function);
         __pyx_t_6 = 1;
       }
     }
-    __pyx_t_1 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1657, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    if (__pyx_t_12) {
-      __Pyx_GIVEREF(__pyx_t_12); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_12); __pyx_t_12 = NULL;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_14)) {
+      PyObject *__pyx_temp[3] = {__pyx_t_13, __pyx_v_var, __pyx_t_4};
+      __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_14, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1665, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
+      __Pyx_GOTREF(__pyx_t_5);
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_14)) {
+      PyObject *__pyx_temp[3] = {__pyx_t_13, __pyx_v_var, __pyx_t_4};
+      __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_14, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1665, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
+      __Pyx_GOTREF(__pyx_t_5);
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    } else
+    #endif
+    {
+      __pyx_t_1 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1665, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_1);
+      if (__pyx_t_13) {
+        __Pyx_GIVEREF(__pyx_t_13); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_13); __pyx_t_13 = NULL;
+      }
+      __Pyx_INCREF(__pyx_v_var);
+      __Pyx_GIVEREF(__pyx_v_var);
+      PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_6, __pyx_v_var);
+      __Pyx_GIVEREF(__pyx_t_4);
+      PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_6, __pyx_t_4);
+      __pyx_t_4 = 0;
+      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_t_1, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1665, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_5);
+      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     }
-    __Pyx_INCREF(__pyx_v_var);
-    __Pyx_GIVEREF(__pyx_v_var);
-    PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_6, __pyx_v_var);
-    __Pyx_GIVEREF(__pyx_t_4);
-    PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_6, __pyx_t_4);
-    __pyx_t_4 = 0;
-    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_13, __pyx_t_1, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1657, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_5);
-    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
     __Pyx_DECREF_SET(__pyx_v_var, __pyx_t_5);
     __pyx_t_5 = 0;
 
-    /* "adios.pyx":1659
+    /* "adios.pyx":1667
  *             var = np.reshape(var, asel.mshape)
  * 
  *             return var             # <<<<<<<<<<<<<<
@@ -25685,7 +26444,7 @@ static PyObject *__pyx_pf_5adios_3var_20_readvar(struct __pyx_obj_5adios_var *__
     __pyx_r = __pyx_v_var;
     goto __pyx_L0;
 
-    /* "adios.pyx":1636
+    /* "adios.pyx":1644
  *                                  nsteps=1)
  * 
  *         elif isinstance(asel, sel.FancySelection):             # <<<<<<<<<<<<<<
@@ -25694,7 +26453,7 @@ static PyObject *__pyx_pf_5adios_3var_20_readvar(struct __pyx_obj_5adios_var *__
  */
   }
 
-  /* "adios.pyx":1662
+  /* "adios.pyx":1670
  * 
  *         else:
  *             raise NotImplementedError("Not implemented yet")             # <<<<<<<<<<<<<<
@@ -25702,14 +26461,14 @@ static PyObject *__pyx_pf_5adios_3var_20_readvar(struct __pyx_obj_5adios_var *__
  *     def __getitem__(self, args):
  */
   /*else*/ {
-    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_NotImplementedError, __pyx_tuple__43, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1662, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_NotImplementedError, __pyx_tuple__43, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1670, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_Raise(__pyx_t_5, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    __PYX_ERR(0, 1662, __pyx_L1_error)
+    __PYX_ERR(0, 1670, __pyx_L1_error)
   }
 
-  /* "adios.pyx":1615
+  /* "adios.pyx":1623
  *                     return group(self.file, self.name + '/' + key_)
  * 
  *     def _readvar(self, args):             # <<<<<<<<<<<<<<
@@ -25723,9 +26482,9 @@ static PyObject *__pyx_pf_5adios_3var_20_readvar(struct __pyx_obj_5adios_var *__
   __Pyx_XDECREF(__pyx_t_4);
   __Pyx_XDECREF(__pyx_t_5);
   __Pyx_XDECREF(__pyx_t_7);
-  __Pyx_XDECREF(__pyx_t_11);
   __Pyx_XDECREF(__pyx_t_12);
   __Pyx_XDECREF(__pyx_t_13);
+  __Pyx_XDECREF(__pyx_t_14);
   __Pyx_AddTraceback("adios.var._readvar", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
@@ -25740,7 +26499,7 @@ static PyObject *__pyx_pf_5adios_3var_20_readvar(struct __pyx_obj_5adios_var *__
   return __pyx_r;
 }
 
-/* "adios.pyx":1664
+/* "adios.pyx":1672
  *             raise NotImplementedError("Not implemented yet")
  * 
  *     def __getitem__(self, args):             # <<<<<<<<<<<<<<
@@ -25772,7 +26531,7 @@ static PyObject *__pyx_pf_5adios_3var_22__getitem__(struct __pyx_obj_5adios_var
   PyObject *__pyx_t_6 = NULL;
   __Pyx_RefNannySetupContext("__getitem__", 0);
 
-  /* "adios.pyx":1665
+  /* "adios.pyx":1673
  * 
  *     def __getitem__(self, args):
  *         if isinstance(args, str):             # <<<<<<<<<<<<<<
@@ -25783,7 +26542,7 @@ static PyObject *__pyx_pf_5adios_3var_22__getitem__(struct __pyx_obj_5adios_var
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "adios.pyx":1666
+    /* "adios.pyx":1674
  *     def __getitem__(self, args):
  *         if isinstance(args, str):
  *             return self._readattr(args)             # <<<<<<<<<<<<<<
@@ -25791,10 +26550,10 @@ static PyObject *__pyx_pf_5adios_3var_22__getitem__(struct __pyx_obj_5adios_var
  *             return self._readvar(args)
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_readattr); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1666, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_readattr); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1674, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_5 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
       __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
       if (likely(__pyx_t_5)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
@@ -25804,25 +26563,43 @@ static PyObject *__pyx_pf_5adios_3var_22__getitem__(struct __pyx_obj_5adios_var
       }
     }
     if (!__pyx_t_5) {
-      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_args); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1666, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_args); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1674, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
     } else {
-      __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1666, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_6);
-      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5); __pyx_t_5 = NULL;
-      __Pyx_INCREF(__pyx_v_args);
-      __Pyx_GIVEREF(__pyx_v_args);
-      PyTuple_SET_ITEM(__pyx_t_6, 0+1, __pyx_v_args);
-      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1666, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_3);
-      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_4)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_5, __pyx_v_args};
+        __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1674, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+        __Pyx_GOTREF(__pyx_t_3);
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_5, __pyx_v_args};
+        __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1674, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+        __Pyx_GOTREF(__pyx_t_3);
+      } else
+      #endif
+      {
+        __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1674, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_6);
+        __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5); __pyx_t_5 = NULL;
+        __Pyx_INCREF(__pyx_v_args);
+        __Pyx_GIVEREF(__pyx_v_args);
+        PyTuple_SET_ITEM(__pyx_t_6, 0+1, __pyx_v_args);
+        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1674, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_3);
+        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+      }
     }
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_r = __pyx_t_3;
     __pyx_t_3 = 0;
     goto __pyx_L0;
 
-    /* "adios.pyx":1665
+    /* "adios.pyx":1673
  * 
  *     def __getitem__(self, args):
  *         if isinstance(args, str):             # <<<<<<<<<<<<<<
@@ -25831,7 +26608,7 @@ static PyObject *__pyx_pf_5adios_3var_22__getitem__(struct __pyx_obj_5adios_var
  */
   }
 
-  /* "adios.pyx":1668
+  /* "adios.pyx":1676
  *             return self._readattr(args)
  *         else:
  *             return self._readvar(args)             # <<<<<<<<<<<<<<
@@ -25840,10 +26617,10 @@ static PyObject *__pyx_pf_5adios_3var_22__getitem__(struct __pyx_obj_5adios_var
  */
   /*else*/ {
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_readvar); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1668, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_readvar); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1676, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_6 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
       __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4);
       if (likely(__pyx_t_6)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
@@ -25853,18 +26630,36 @@ static PyObject *__pyx_pf_5adios_3var_22__getitem__(struct __pyx_obj_5adios_var
       }
     }
     if (!__pyx_t_6) {
-      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_args); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1668, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_args); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1676, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
     } else {
-      __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1668, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_5);
-      __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_6); __pyx_t_6 = NULL;
-      __Pyx_INCREF(__pyx_v_args);
-      __Pyx_GIVEREF(__pyx_v_args);
-      PyTuple_SET_ITEM(__pyx_t_5, 0+1, __pyx_v_args);
-      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1668, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_3);
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_4)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_6, __pyx_v_args};
+        __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1676, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+        __Pyx_GOTREF(__pyx_t_3);
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_6, __pyx_v_args};
+        __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1676, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+        __Pyx_GOTREF(__pyx_t_3);
+      } else
+      #endif
+      {
+        __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1676, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_5);
+        __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_6); __pyx_t_6 = NULL;
+        __Pyx_INCREF(__pyx_v_args);
+        __Pyx_GIVEREF(__pyx_v_args);
+        PyTuple_SET_ITEM(__pyx_t_5, 0+1, __pyx_v_args);
+        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1676, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_3);
+        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+      }
     }
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_r = __pyx_t_3;
@@ -25872,7 +26667,7 @@ static PyObject *__pyx_pf_5adios_3var_22__getitem__(struct __pyx_obj_5adios_var
     goto __pyx_L0;
   }
 
-  /* "adios.pyx":1664
+  /* "adios.pyx":1672
  *             raise NotImplementedError("Not implemented yet")
  * 
  *     def __getitem__(self, args):             # <<<<<<<<<<<<<<
@@ -25894,7 +26689,7 @@ static PyObject *__pyx_pf_5adios_3var_22__getitem__(struct __pyx_obj_5adios_var
   return __pyx_r;
 }
 
-/* "adios.pyx":1671
+/* "adios.pyx":1679
  * 
  *     ## For access var/attr/group as an attribute
  *     def __getattr__(self, varname):             # <<<<<<<<<<<<<<
@@ -25924,7 +26719,7 @@ static PyObject *__pyx_pf_5adios_3var_24__getattr__(struct __pyx_obj_5adios_var
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("__getattr__", 0);
 
-  /* "adios.pyx":1672
+  /* "adios.pyx":1680
  *     ## For access var/attr/group as an attribute
  *     def __getattr__(self, varname):
  *         return self.__getitem__(varname)             # <<<<<<<<<<<<<<
@@ -25932,10 +26727,10 @@ static PyObject *__pyx_pf_5adios_3var_24__getattr__(struct __pyx_obj_5adios_var
  *     ## To support ipython tab completion
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getitem); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1672, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getitem); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1680, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
     __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
     if (likely(__pyx_t_3)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
@@ -25945,25 +26740,43 @@ static PyObject *__pyx_pf_5adios_3var_24__getattr__(struct __pyx_obj_5adios_var
     }
   }
   if (!__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_varname); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1672, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_varname); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1680, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1672, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_4);
-    __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
-    __Pyx_INCREF(__pyx_v_varname);
-    __Pyx_GIVEREF(__pyx_v_varname);
-    PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_varname);
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1672, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_varname};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1680, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_varname};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1680, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1680, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+      __Pyx_INCREF(__pyx_v_varname);
+      __Pyx_GIVEREF(__pyx_v_varname);
+      PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_varname);
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1680, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    }
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":1671
+  /* "adios.pyx":1679
  * 
  *     ## For access var/attr/group as an attribute
  *     def __getattr__(self, varname):             # <<<<<<<<<<<<<<
@@ -25985,7 +26798,7 @@ static PyObject *__pyx_pf_5adios_3var_24__getattr__(struct __pyx_obj_5adios_var
   return __pyx_r;
 }
 
-/* "adios.pyx":1675
+/* "adios.pyx":1683
  * 
  *     ## To support ipython tab completion
  *     def __dir__(self):             # <<<<<<<<<<<<<<
@@ -26019,31 +26832,31 @@ static PyObject *__pyx_pf_5adios_3var_26__dir__(struct __pyx_obj_5adios_var *__p
   PyObject *__pyx_t_5 = NULL;
   __Pyx_RefNannySetupContext("__dir__", 0);
 
-  /* "adios.pyx":1676
+  /* "adios.pyx":1684
  *     ## To support ipython tab completion
  *     def __dir__(self):
  *         k0 = dir(type(self))             # <<<<<<<<<<<<<<
  *         ## Normalize to support var starting with '/'
  *         ## E.g., f['/attr1'] == f.attr1
  */
-  __pyx_t_1 = PyObject_Dir(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1676, __pyx_L1_error)
+  __pyx_t_1 = PyObject_Dir(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1684, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_k0 = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "adios.pyx":1679
+  /* "adios.pyx":1687
  *         ## Normalize to support var starting with '/'
  *         ## E.g., f['/attr1'] == f.attr1
  *         k2 = normalize_key(self.attrs.keys())             # <<<<<<<<<<<<<<
  *         return k0 + k2
  * 
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_normalize_key); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1679, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_normalize_key); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1687, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1679, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1687, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_t_5 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
     __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
     if (likely(__pyx_t_5)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
@@ -26053,15 +26866,15 @@ static PyObject *__pyx_pf_5adios_3var_26__dir__(struct __pyx_obj_5adios_var *__p
     }
   }
   if (__pyx_t_5) {
-    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1679, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1687, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   } else {
-    __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1679, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1687, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_t_4 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
     __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
     if (likely(__pyx_t_4)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
@@ -26071,25 +26884,45 @@ static PyObject *__pyx_pf_5adios_3var_26__dir__(struct __pyx_obj_5adios_var *__p
     }
   }
   if (!__pyx_t_4) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1679, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1687, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1679, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_5);
-    __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); __pyx_t_4 = NULL;
-    __Pyx_GIVEREF(__pyx_t_3);
-    PyTuple_SET_ITEM(__pyx_t_5, 0+1, __pyx_t_3);
-    __pyx_t_3 = 0;
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1679, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_t_3};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1687, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_t_3};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1687, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    } else
+    #endif
+    {
+      __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1687, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_5);
+      __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); __pyx_t_4 = NULL;
+      __Pyx_GIVEREF(__pyx_t_3);
+      PyTuple_SET_ITEM(__pyx_t_5, 0+1, __pyx_t_3);
+      __pyx_t_3 = 0;
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1687, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    }
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_v_k2 = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "adios.pyx":1680
+  /* "adios.pyx":1688
  *         ## E.g., f['/attr1'] == f.attr1
  *         k2 = normalize_key(self.attrs.keys())
  *         return k0 + k2             # <<<<<<<<<<<<<<
@@ -26097,13 +26930,13 @@ static PyObject *__pyx_pf_5adios_3var_26__dir__(struct __pyx_obj_5adios_var *__p
  *     ## Require for dictionary key completion
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyNumber_Add(__pyx_v_k0, __pyx_v_k2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1680, __pyx_L1_error)
+  __pyx_t_1 = PyNumber_Add(__pyx_v_k0, __pyx_v_k2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1688, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":1675
+  /* "adios.pyx":1683
  * 
  *     ## To support ipython tab completion
  *     def __dir__(self):             # <<<<<<<<<<<<<<
@@ -26128,7 +26961,7 @@ static PyObject *__pyx_pf_5adios_3var_26__dir__(struct __pyx_obj_5adios_var *__p
   return __pyx_r;
 }
 
-/* "adios.pyx":1683
+/* "adios.pyx":1691
  * 
  *     ## Require for dictionary key completion
  *     def keys(self):             # <<<<<<<<<<<<<<
@@ -26158,7 +26991,7 @@ static PyObject *__pyx_pf_5adios_3var_28keys(struct __pyx_obj_5adios_var *__pyx_
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("keys", 0);
 
-  /* "adios.pyx":1684
+  /* "adios.pyx":1692
  *     ## Require for dictionary key completion
  *     def keys(self):
  *         return self.attrs.keys()             # <<<<<<<<<<<<<<
@@ -26166,10 +26999,10 @@ static PyObject *__pyx_pf_5adios_3var_28keys(struct __pyx_obj_5adios_var *__pyx_
  * cdef class attr(object):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1684, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1692, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
     __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
     if (likely(__pyx_t_3)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
@@ -26179,10 +27012,10 @@ static PyObject *__pyx_pf_5adios_3var_28keys(struct __pyx_obj_5adios_var *__pyx_
     }
   }
   if (__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1684, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1692, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   } else {
-    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1684, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1692, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -26190,7 +27023,7 @@ static PyObject *__pyx_pf_5adios_3var_28keys(struct __pyx_obj_5adios_var *__pyx_
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":1683
+  /* "adios.pyx":1691
  * 
  *     ## Require for dictionary key completion
  *     def keys(self):             # <<<<<<<<<<<<<<
@@ -26211,7 +27044,7 @@ static PyObject *__pyx_pf_5adios_3var_28keys(struct __pyx_obj_5adios_var *__pyx_
   return __pyx_r;
 }
 
-/* "adios.pyx":1708
+/* "adios.pyx":1716
  *     property name:
  *         """ The attribute name """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -26237,7 +27070,7 @@ static PyObject *__pyx_pf_5adios_4attr_4name___get__(struct __pyx_obj_5adios_att
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios.pyx":1709
+  /* "adios.pyx":1717
  *         """ The attribute name """
  *         def __get__(self):
  *             return self.name             # <<<<<<<<<<<<<<
@@ -26249,7 +27082,7 @@ static PyObject *__pyx_pf_5adios_4attr_4name___get__(struct __pyx_obj_5adios_att
   __pyx_r = __pyx_v_self->name;
   goto __pyx_L0;
 
-  /* "adios.pyx":1708
+  /* "adios.pyx":1716
  *     property name:
  *         """ The attribute name """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -26264,7 +27097,7 @@ static PyObject *__pyx_pf_5adios_4attr_4name___get__(struct __pyx_obj_5adios_att
   return __pyx_r;
 }
 
-/* "adios.pyx":1713
+/* "adios.pyx":1721
  *     property dtype:
  *         """ The attribute type as in numpy.dtype """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -26290,7 +27123,7 @@ static PyObject *__pyx_pf_5adios_4attr_5dtype___get__(struct __pyx_obj_5adios_at
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios.pyx":1714
+  /* "adios.pyx":1722
  *         """ The attribute type as in numpy.dtype """
  *         def __get__(self):
  *             return self.dtype             # <<<<<<<<<<<<<<
@@ -26302,7 +27135,7 @@ static PyObject *__pyx_pf_5adios_4attr_5dtype___get__(struct __pyx_obj_5adios_at
   __pyx_r = ((PyObject *)__pyx_v_self->dtype);
   goto __pyx_L0;
 
-  /* "adios.pyx":1713
+  /* "adios.pyx":1721
  *     property dtype:
  *         """ The attribute type as in numpy.dtype """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -26317,7 +27150,7 @@ static PyObject *__pyx_pf_5adios_4attr_5dtype___get__(struct __pyx_obj_5adios_at
   return __pyx_r;
 }
 
-/* "adios.pyx":1718
+/* "adios.pyx":1726
  *     property value:
  *         """ The attribute's value """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -26348,7 +27181,7 @@ static PyObject *__pyx_pf_5adios_4attr_5value___get__(struct __pyx_obj_5adios_at
   PyObject *__pyx_t_5 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios.pyx":1719
+  /* "adios.pyx":1727
  *         """ The attribute's value """
  *         def __get__(self):
  *             if (self.value.ndim == 0):             # <<<<<<<<<<<<<<
@@ -26358,7 +27191,7 @@ static PyObject *__pyx_pf_5adios_4attr_5value___get__(struct __pyx_obj_5adios_at
   __pyx_t_1 = ((__pyx_v_self->value->nd == 0) != 0);
   if (__pyx_t_1) {
 
-    /* "adios.pyx":1720
+    /* "adios.pyx":1728
  *         def __get__(self):
  *             if (self.value.ndim == 0):
  *                 return np.asscalar(self.value)             # <<<<<<<<<<<<<<
@@ -26366,13 +27199,13 @@ static PyObject *__pyx_pf_5adios_4attr_5value___get__(struct __pyx_obj_5adios_at
  *                 return self.value
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1720, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1728, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_asscalar); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1720, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_asscalar); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1728, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __pyx_t_3 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_4))) {
+    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
       __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
       if (likely(__pyx_t_3)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
@@ -26382,25 +27215,43 @@ static PyObject *__pyx_pf_5adios_4attr_5value___get__(struct __pyx_obj_5adios_at
       }
     }
     if (!__pyx_t_3) {
-      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_4, ((PyObject *)__pyx_v_self->value)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1720, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_4, ((PyObject *)__pyx_v_self->value)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1728, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
     } else {
-      __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1720, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_5);
-      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
-      __Pyx_INCREF(((PyObject *)__pyx_v_self->value));
-      __Pyx_GIVEREF(((PyObject *)__pyx_v_self->value));
-      PyTuple_SET_ITEM(__pyx_t_5, 0+1, ((PyObject *)__pyx_v_self->value));
-      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1720, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_2);
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_4)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_3, ((PyObject *)__pyx_v_self->value)};
+        __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1728, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_3, ((PyObject *)__pyx_v_self->value)};
+        __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1728, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+      } else
+      #endif
+      {
+        __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1728, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_5);
+        __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
+        __Pyx_INCREF(((PyObject *)__pyx_v_self->value));
+        __Pyx_GIVEREF(((PyObject *)__pyx_v_self->value));
+        PyTuple_SET_ITEM(__pyx_t_5, 0+1, ((PyObject *)__pyx_v_self->value));
+        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1728, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+      }
     }
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_r = __pyx_t_2;
     __pyx_t_2 = 0;
     goto __pyx_L0;
 
-    /* "adios.pyx":1719
+    /* "adios.pyx":1727
  *         """ The attribute's value """
  *         def __get__(self):
  *             if (self.value.ndim == 0):             # <<<<<<<<<<<<<<
@@ -26409,7 +27260,7 @@ static PyObject *__pyx_pf_5adios_4attr_5value___get__(struct __pyx_obj_5adios_at
  */
   }
 
-  /* "adios.pyx":1722
+  /* "adios.pyx":1730
  *                 return np.asscalar(self.value)
  *             else:
  *                 return self.value             # <<<<<<<<<<<<<<
@@ -26423,7 +27274,7 @@ static PyObject *__pyx_pf_5adios_4attr_5value___get__(struct __pyx_obj_5adios_at
     goto __pyx_L0;
   }
 
-  /* "adios.pyx":1718
+  /* "adios.pyx":1726
  *     property value:
  *         """ The attribute's value """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -26445,7 +27296,7 @@ static PyObject *__pyx_pf_5adios_4attr_5value___get__(struct __pyx_obj_5adios_at
   return __pyx_r;
 }
 
-/* "adios.pyx":1724
+/* "adios.pyx":1732
  *                 return self.value
  * 
  *     def __init__(self, file file, str name):             # <<<<<<<<<<<<<<
@@ -26481,11 +27332,11 @@ static int __pyx_pw_5adios_4attr_1__init__(PyObject *__pyx_v_self, PyObject *__p
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, 1); __PYX_ERR(0, 1724, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, 1); __PYX_ERR(0, 1732, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 1724, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 1732, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -26498,14 +27349,14 @@ static int __pyx_pw_5adios_4attr_1__init__(PyObject *__pyx_v_self, PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1724, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1732, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.attr.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_file), __pyx_ptype_5adios_file, 1, "file", 0))) __PYX_ERR(0, 1724, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 1724, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_file), __pyx_ptype_5adios_file, 1, "file", 0))) __PYX_ERR(0, 1732, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 1732, __pyx_L1_error)
   __pyx_r = __pyx_pf_5adios_4attr___init__(((struct __pyx_obj_5adios_attr *)__pyx_v_self), __pyx_v_file, __pyx_v_name);
 
   /* function exit code */
@@ -26541,7 +27392,7 @@ static int __pyx_pf_5adios_4attr___init__(struct __pyx_obj_5adios_attr *__pyx_v_
   int __pyx_t_12;
   __Pyx_RefNannySetupContext("__init__", 0);
 
-  /* "adios.pyx":1725
+  /* "adios.pyx":1733
  * 
  *     def __init__(self, file file, str name):
  *         self.file = file             # <<<<<<<<<<<<<<
@@ -26554,7 +27405,7 @@ static int __pyx_pf_5adios_4attr___init__(struct __pyx_obj_5adios_attr *__pyx_v_
   __Pyx_DECREF(((PyObject *)__pyx_v_self->file));
   __pyx_v_self->file = __pyx_v_file;
 
-  /* "adios.pyx":1726
+  /* "adios.pyx":1734
  *     def __init__(self, file file, str name):
  *         self.file = file
  *         self.name = name             # <<<<<<<<<<<<<<
@@ -26567,7 +27418,7 @@ static int __pyx_pf_5adios_4attr___init__(struct __pyx_obj_5adios_attr *__pyx_v_
   __Pyx_DECREF(__pyx_v_self->name);
   __pyx_v_self->name = __pyx_v_name;
 
-  /* "adios.pyx":1734
+  /* "adios.pyx":1742
  *         cdef int len
  * 
  *         err = adios_get_attr(self.file.fp, s2b(self.name), &atype, &bytes, <void **> &p)             # <<<<<<<<<<<<<<
@@ -26576,14 +27427,14 @@ static int __pyx_pf_5adios_4attr___init__(struct __pyx_obj_5adios_attr *__pyx_v_
  */
   __pyx_t_1 = __pyx_v_self->name;
   __Pyx_INCREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_5adios_s2b(((PyObject*)__pyx_t_1), 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1734, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_5adios_s2b(((PyObject*)__pyx_t_1), 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1742, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_3 = __Pyx_PyObject_AsString(__pyx_t_2); if (unlikely((!__pyx_t_3) && PyErr_Occurred())) __PYX_ERR(0, 1734, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_AsString(__pyx_t_2); if (unlikely((!__pyx_t_3) && PyErr_Occurred())) __PYX_ERR(0, 1742, __pyx_L1_error)
   __pyx_v_err = adios_get_attr(__pyx_v_self->file->fp, __pyx_t_3, (&__pyx_v_atype), (&__pyx_v_bytes), ((void **)(&__pyx_v_p)));
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "adios.pyx":1736
+  /* "adios.pyx":1744
  *         err = adios_get_attr(self.file.fp, s2b(self.name), &atype, &bytes, <void **> &p)
  * 
  *         if err == 0:             # <<<<<<<<<<<<<<
@@ -26593,28 +27444,28 @@ static int __pyx_pf_5adios_4attr___init__(struct __pyx_obj_5adios_attr *__pyx_v_
   __pyx_t_4 = ((__pyx_v_err == 0) != 0);
   if (__pyx_t_4) {
 
-    /* "adios.pyx":1737
+    /* "adios.pyx":1745
  * 
  *         if err == 0:
  *             if atype == DATATYPE.string:             # <<<<<<<<<<<<<<
  *                 bytes = bytes - 1 ## Remove the NULL terminal
  *             self.dtype = adios2npdtype(atype, bytes)
  */
-    __pyx_t_2 = __Pyx_PyInt_From_ADIOS_DATATYPES(__pyx_v_atype); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1737, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyInt_From_ADIOS_DATATYPES(__pyx_v_atype); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1745, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1737, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1745, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_string); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1737, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_string); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1745, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1737, __pyx_L1_error)
+    __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1745, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 1737, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 1745, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     if (__pyx_t_4) {
 
-      /* "adios.pyx":1738
+      /* "adios.pyx":1746
  *         if err == 0:
  *             if atype == DATATYPE.string:
  *                 bytes = bytes - 1 ## Remove the NULL terminal             # <<<<<<<<<<<<<<
@@ -26623,7 +27474,7 @@ static int __pyx_pf_5adios_4attr___init__(struct __pyx_obj_5adios_attr *__pyx_v_
  */
       __pyx_v_bytes = (__pyx_v_bytes - 1);
 
-      /* "adios.pyx":1737
+      /* "adios.pyx":1745
  * 
  *         if err == 0:
  *             if atype == DATATYPE.string:             # <<<<<<<<<<<<<<
@@ -26632,7 +27483,7 @@ static int __pyx_pf_5adios_4attr___init__(struct __pyx_obj_5adios_attr *__pyx_v_
  */
     }
 
-    /* "adios.pyx":1739
+    /* "adios.pyx":1747
  *             if atype == DATATYPE.string:
  *                 bytes = bytes - 1 ## Remove the NULL terminal
  *             self.dtype = adios2npdtype(atype, bytes)             # <<<<<<<<<<<<<<
@@ -26641,7 +27492,7 @@ static int __pyx_pf_5adios_4attr___init__(struct __pyx_obj_5adios_attr *__pyx_v_
  */
     __pyx_t_6.__pyx_n = 1;
     __pyx_t_6.strlen = __pyx_v_bytes;
-    __pyx_t_1 = ((PyObject *)__pyx_f_5adios_adios2npdtype(__pyx_v_atype, 0, &__pyx_t_6)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1739, __pyx_L1_error)
+    __pyx_t_1 = ((PyObject *)__pyx_f_5adios_adios2npdtype(__pyx_v_atype, 0, &__pyx_t_6)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1747, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_GIVEREF(__pyx_t_1);
     __Pyx_GOTREF(__pyx_v_self->dtype);
@@ -26649,40 +27500,40 @@ static int __pyx_pf_5adios_4attr___init__(struct __pyx_obj_5adios_attr *__pyx_v_
     __pyx_v_self->dtype = ((PyArray_Descr *)__pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "adios.pyx":1740
+    /* "adios.pyx":1748
  *                 bytes = bytes - 1 ## Remove the NULL terminal
  *             self.dtype = adios2npdtype(atype, bytes)
  *             if atype == DATATYPE.string_array:             # <<<<<<<<<<<<<<
  *                 strlist = list()
  *                 len = <int>(bytes/sizeof(p))
  */
-    __pyx_t_1 = __Pyx_PyInt_From_ADIOS_DATATYPES(__pyx_v_atype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1740, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyInt_From_ADIOS_DATATYPES(__pyx_v_atype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1748, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1740, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1748, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_string_array); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1740, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_string_array); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1748, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    __pyx_t_5 = PyObject_RichCompare(__pyx_t_1, __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1740, __pyx_L1_error)
+    __pyx_t_5 = PyObject_RichCompare(__pyx_t_1, __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1748, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 1740, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 1748, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     if (__pyx_t_4) {
 
-      /* "adios.pyx":1741
+      /* "adios.pyx":1749
  *             self.dtype = adios2npdtype(atype, bytes)
  *             if atype == DATATYPE.string_array:
  *                 strlist = list()             # <<<<<<<<<<<<<<
  *                 len = <int>(bytes/sizeof(p))
  *                 for i in range(len):
  */
-      __pyx_t_5 = PyList_New(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1741, __pyx_L1_error)
+      __pyx_t_5 = PyList_New(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1749, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       __pyx_v_strlist = ((PyObject*)__pyx_t_5);
       __pyx_t_5 = 0;
 
-      /* "adios.pyx":1742
+      /* "adios.pyx":1750
  *             if atype == DATATYPE.string_array:
  *                 strlist = list()
  *                 len = <int>(bytes/sizeof(p))             # <<<<<<<<<<<<<<
@@ -26692,11 +27543,11 @@ static int __pyx_pf_5adios_4attr___init__(struct __pyx_obj_5adios_attr *__pyx_v_
       __pyx_t_7 = (sizeof(__pyx_v_p));
       if (unlikely(__pyx_t_7 == 0)) {
         PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
-        __PYX_ERR(0, 1742, __pyx_L1_error)
+        __PYX_ERR(0, 1750, __pyx_L1_error)
       }
       __pyx_v_len = ((int)(__pyx_v_bytes / __pyx_t_7));
 
-      /* "adios.pyx":1743
+      /* "adios.pyx":1751
  *                 strlist = list()
  *                 len = <int>(bytes/sizeof(p))
  *                 for i in range(len):             # <<<<<<<<<<<<<<
@@ -26707,33 +27558,33 @@ static int __pyx_pf_5adios_4attr___init__(struct __pyx_obj_5adios_attr *__pyx_v_
       for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
         __pyx_v_i = __pyx_t_9;
 
-        /* "adios.pyx":1744
+        /* "adios.pyx":1752
  *                 len = <int>(bytes/sizeof(p))
  *                 for i in range(len):
  *                     strlist.append((<char **>p)[i])             # <<<<<<<<<<<<<<
  *                 self.value = np.array(strlist)
  *                 self.dtype = self.value.dtype
  */
-        __pyx_t_5 = __Pyx_PyBytes_FromString((((char **)__pyx_v_p)[__pyx_v_i])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1744, __pyx_L1_error)
+        __pyx_t_5 = __Pyx_PyBytes_FromString((((char **)__pyx_v_p)[__pyx_v_i])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1752, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_5);
-        __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_strlist, __pyx_t_5); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 1744, __pyx_L1_error)
+        __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_strlist, __pyx_t_5); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 1752, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       }
 
-      /* "adios.pyx":1745
+      /* "adios.pyx":1753
  *                 for i in range(len):
  *                     strlist.append((<char **>p)[i])
  *                 self.value = np.array(strlist)             # <<<<<<<<<<<<<<
  *                 self.dtype = self.value.dtype
  * 
  */
-      __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1745, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1753, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
-      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_array); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1745, __pyx_L1_error)
+      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_array); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1753, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       __pyx_t_2 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_1))) {
+      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
         __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
         if (likely(__pyx_t_2)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
@@ -26743,44 +27594,62 @@ static int __pyx_pf_5adios_4attr___init__(struct __pyx_obj_5adios_attr *__pyx_v_
         }
       }
       if (!__pyx_t_2) {
-        __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_strlist); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1745, __pyx_L1_error)
+        __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_strlist); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1753, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_5);
       } else {
-        __pyx_t_11 = PyTuple_New(1+1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1745, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_11);
-        __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_2); __pyx_t_2 = NULL;
-        __Pyx_INCREF(__pyx_v_strlist);
-        __Pyx_GIVEREF(__pyx_v_strlist);
-        PyTuple_SET_ITEM(__pyx_t_11, 0+1, __pyx_v_strlist);
-        __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_11, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1745, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_5);
-        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+        #if CYTHON_FAST_PYCALL
+        if (PyFunction_Check(__pyx_t_1)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_2, __pyx_v_strlist};
+          __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1753, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
+          __Pyx_GOTREF(__pyx_t_5);
+        } else
+        #endif
+        #if CYTHON_FAST_PYCCALL
+        if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_2, __pyx_v_strlist};
+          __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1753, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
+          __Pyx_GOTREF(__pyx_t_5);
+        } else
+        #endif
+        {
+          __pyx_t_11 = PyTuple_New(1+1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1753, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_11);
+          __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_2); __pyx_t_2 = NULL;
+          __Pyx_INCREF(__pyx_v_strlist);
+          __Pyx_GIVEREF(__pyx_v_strlist);
+          PyTuple_SET_ITEM(__pyx_t_11, 0+1, __pyx_v_strlist);
+          __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_11, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1753, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_5);
+          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+        }
       }
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-      if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1745, __pyx_L1_error)
+      if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1753, __pyx_L1_error)
       __Pyx_GIVEREF(__pyx_t_5);
       __Pyx_GOTREF(__pyx_v_self->value);
       __Pyx_DECREF(((PyObject *)__pyx_v_self->value));
       __pyx_v_self->value = ((PyArrayObject *)__pyx_t_5);
       __pyx_t_5 = 0;
 
-      /* "adios.pyx":1746
+      /* "adios.pyx":1754
  *                     strlist.append((<char **>p)[i])
  *                 self.value = np.array(strlist)
  *                 self.dtype = self.value.dtype             # <<<<<<<<<<<<<<
  * 
  *             elif self.dtype is None:
  */
-      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->value), __pyx_n_s_dtype); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1746, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->value), __pyx_n_s_dtype); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1754, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
-      if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_dtype))))) __PYX_ERR(0, 1746, __pyx_L1_error)
+      if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_dtype))))) __PYX_ERR(0, 1754, __pyx_L1_error)
       __Pyx_GIVEREF(__pyx_t_5);
       __Pyx_GOTREF(__pyx_v_self->dtype);
       __Pyx_DECREF(((PyObject *)__pyx_v_self->dtype));
       __pyx_v_self->dtype = ((PyArray_Descr *)__pyx_t_5);
       __pyx_t_5 = 0;
 
-      /* "adios.pyx":1740
+      /* "adios.pyx":1748
  *                 bytes = bytes - 1 ## Remove the NULL terminal
  *             self.dtype = adios2npdtype(atype, bytes)
  *             if atype == DATATYPE.string_array:             # <<<<<<<<<<<<<<
@@ -26790,7 +27659,7 @@ static int __pyx_pf_5adios_4attr___init__(struct __pyx_obj_5adios_attr *__pyx_v_
       goto __pyx_L5;
     }
 
-    /* "adios.pyx":1748
+    /* "adios.pyx":1756
  *                 self.dtype = self.value.dtype
  * 
  *             elif self.dtype is None:             # <<<<<<<<<<<<<<
@@ -26801,18 +27670,18 @@ static int __pyx_pf_5adios_4attr___init__(struct __pyx_obj_5adios_attr *__pyx_v_
     __pyx_t_12 = (__pyx_t_4 != 0);
     if (__pyx_t_12) {
 
-      /* "adios.pyx":1750
+      /* "adios.pyx":1758
  *             elif self.dtype is None:
  *                 print ('Warning: No support yet: %s (type=%d, bytes=%d)' % \
  *                       (self.name, atype, bytes))             # <<<<<<<<<<<<<<
  *             else:
  *                 len = <int>(bytes/self.dtype.itemsize)
  */
-      __pyx_t_5 = __Pyx_PyInt_From_ADIOS_DATATYPES(__pyx_v_atype); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1750, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_PyInt_From_ADIOS_DATATYPES(__pyx_v_atype); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1758, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_bytes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1750, __pyx_L1_error)
+      __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_bytes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1758, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
-      __pyx_t_11 = PyTuple_New(3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1750, __pyx_L1_error)
+      __pyx_t_11 = PyTuple_New(3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1758, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_11);
       __Pyx_INCREF(__pyx_v_self->name);
       __Pyx_GIVEREF(__pyx_v_self->name);
@@ -26824,27 +27693,27 @@ static int __pyx_pf_5adios_4attr___init__(struct __pyx_obj_5adios_attr *__pyx_v_
       __pyx_t_5 = 0;
       __pyx_t_1 = 0;
 
-      /* "adios.pyx":1749
+      /* "adios.pyx":1757
  * 
  *             elif self.dtype is None:
  *                 print ('Warning: No support yet: %s (type=%d, bytes=%d)' % \             # <<<<<<<<<<<<<<
  *                       (self.name, atype, bytes))
  *             else:
  */
-      __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Warning_No_support_yet_s_type_d, __pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1749, __pyx_L1_error)
+      __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Warning_No_support_yet_s_type_d, __pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1757, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
-      __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1749, __pyx_L1_error)
+      __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1757, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_11);
       __Pyx_GIVEREF(__pyx_t_1);
       PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_1);
       __pyx_t_1 = 0;
-      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_11, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1749, __pyx_L1_error)
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_11, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1757, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-      /* "adios.pyx":1748
+      /* "adios.pyx":1756
  *                 self.dtype = self.value.dtype
  * 
  *             elif self.dtype is None:             # <<<<<<<<<<<<<<
@@ -26854,7 +27723,7 @@ static int __pyx_pf_5adios_4attr___init__(struct __pyx_obj_5adios_attr *__pyx_v_
       goto __pyx_L5;
     }
 
-    /* "adios.pyx":1752
+    /* "adios.pyx":1760
  *                       (self.name, atype, bytes))
  *             else:
  *                 len = <int>(bytes/self.dtype.itemsize)             # <<<<<<<<<<<<<<
@@ -26864,15 +27733,15 @@ static int __pyx_pf_5adios_4attr___init__(struct __pyx_obj_5adios_attr *__pyx_v_
     /*else*/ {
       if (unlikely(__pyx_v_self->dtype->elsize == 0)) {
         PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
-        __PYX_ERR(0, 1752, __pyx_L1_error)
+        __PYX_ERR(0, 1760, __pyx_L1_error)
       }
       else if (sizeof(int) == sizeof(long) && (!(((int)-1) > 0)) && unlikely(__pyx_v_self->dtype->elsize == (int)-1)  && unlikely(UNARY_NEG_WOULD_OVERFLOW(__pyx_v_bytes))) {
         PyErr_SetString(PyExc_OverflowError, "value too large to perform division");
-        __PYX_ERR(0, 1752, __pyx_L1_error)
+        __PYX_ERR(0, 1760, __pyx_L1_error)
       }
       __pyx_v_len = ((int)__Pyx_div_int(__pyx_v_bytes, __pyx_v_self->dtype->elsize));
 
-      /* "adios.pyx":1753
+      /* "adios.pyx":1761
  *             else:
  *                 len = <int>(bytes/self.dtype.itemsize)
  *                 if len == 1:             # <<<<<<<<<<<<<<
@@ -26882,41 +27751,41 @@ static int __pyx_pf_5adios_4attr___init__(struct __pyx_obj_5adios_attr *__pyx_v_
       __pyx_t_12 = ((__pyx_v_len == 1) != 0);
       if (__pyx_t_12) {
 
-        /* "adios.pyx":1754
+        /* "adios.pyx":1762
  *                 len = <int>(bytes/self.dtype.itemsize)
  *                 if len == 1:
  *                     self.value = np.array(len, dtype=self.dtype)             # <<<<<<<<<<<<<<
  *                 else:
  *                     self.value = np.zeros(len, dtype=self.dtype)
  */
-        __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1754, __pyx_L1_error)
+        __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1762, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_1);
-        __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_array); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1754, __pyx_L1_error)
+        __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_array); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1762, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_11);
         __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-        __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_len); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1754, __pyx_L1_error)
+        __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_len); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1762, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_1);
-        __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1754, __pyx_L1_error)
+        __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1762, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_5);
         __Pyx_GIVEREF(__pyx_t_1);
         PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1);
         __pyx_t_1 = 0;
-        __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1754, __pyx_L1_error)
+        __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1762, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_1);
-        if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, ((PyObject *)__pyx_v_self->dtype)) < 0) __PYX_ERR(0, 1754, __pyx_L1_error)
-        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1754, __pyx_L1_error)
+        if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, ((PyObject *)__pyx_v_self->dtype)) < 0) __PYX_ERR(0, 1762, __pyx_L1_error)
+        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1762, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_2);
         __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
         __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-        if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1754, __pyx_L1_error)
+        if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1762, __pyx_L1_error)
         __Pyx_GIVEREF(__pyx_t_2);
         __Pyx_GOTREF(__pyx_v_self->value);
         __Pyx_DECREF(((PyObject *)__pyx_v_self->value));
         __pyx_v_self->value = ((PyArrayObject *)__pyx_t_2);
         __pyx_t_2 = 0;
 
-        /* "adios.pyx":1753
+        /* "adios.pyx":1761
  *             else:
  *                 len = <int>(bytes/self.dtype.itemsize)
  *                 if len == 1:             # <<<<<<<<<<<<<<
@@ -26926,7 +27795,7 @@ static int __pyx_pf_5adios_4attr___init__(struct __pyx_obj_5adios_attr *__pyx_v_
         goto __pyx_L8;
       }
 
-      /* "adios.pyx":1756
+      /* "adios.pyx":1764
  *                     self.value = np.array(len, dtype=self.dtype)
  *                 else:
  *                     self.value = np.zeros(len, dtype=self.dtype)             # <<<<<<<<<<<<<<
@@ -26934,27 +27803,27 @@ static int __pyx_pf_5adios_4attr___init__(struct __pyx_obj_5adios_attr *__pyx_v_
  *         else:
  */
       /*else*/ {
-        __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1756, __pyx_L1_error)
+        __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1764, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_2);
-        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_zeros); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1756, __pyx_L1_error)
+        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_zeros); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1764, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_1);
         __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-        __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_len); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1756, __pyx_L1_error)
+        __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_len); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1764, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_2);
-        __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1756, __pyx_L1_error)
+        __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1764, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_5);
         __Pyx_GIVEREF(__pyx_t_2);
         PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
         __pyx_t_2 = 0;
-        __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1756, __pyx_L1_error)
+        __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1764, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_2);
-        if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, ((PyObject *)__pyx_v_self->dtype)) < 0) __PYX_ERR(0, 1756, __pyx_L1_error)
-        __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_5, __pyx_t_2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1756, __pyx_L1_error)
+        if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, ((PyObject *)__pyx_v_self->dtype)) < 0) __PYX_ERR(0, 1764, __pyx_L1_error)
+        __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_5, __pyx_t_2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1764, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_11);
         __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
         __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-        if (!(likely(((__pyx_t_11) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_11, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1756, __pyx_L1_error)
+        if (!(likely(((__pyx_t_11) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_11, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1764, __pyx_L1_error)
         __Pyx_GIVEREF(__pyx_t_11);
         __Pyx_GOTREF(__pyx_v_self->value);
         __Pyx_DECREF(((PyObject *)__pyx_v_self->value));
@@ -26963,7 +27832,7 @@ static int __pyx_pf_5adios_4attr___init__(struct __pyx_obj_5adios_attr *__pyx_v_
       }
       __pyx_L8:;
 
-      /* "adios.pyx":1757
+      /* "adios.pyx":1765
  *                 else:
  *                     self.value = np.zeros(len, dtype=self.dtype)
  *                 self.value.data = <char *> p             # <<<<<<<<<<<<<<
@@ -26974,7 +27843,7 @@ static int __pyx_pf_5adios_4attr___init__(struct __pyx_obj_5adios_attr *__pyx_v_
     }
     __pyx_L5:;
 
-    /* "adios.pyx":1736
+    /* "adios.pyx":1744
  *         err = adios_get_attr(self.file.fp, s2b(self.name), &atype, &bytes, <void **> &p)
  * 
  *         if err == 0:             # <<<<<<<<<<<<<<
@@ -26984,7 +27853,7 @@ static int __pyx_pf_5adios_4attr___init__(struct __pyx_obj_5adios_attr *__pyx_v_
     goto __pyx_L3;
   }
 
-  /* "adios.pyx":1759
+  /* "adios.pyx":1767
  *                 self.value.data = <char *> p
  *         else:
  *             raise KeyError(name)             # <<<<<<<<<<<<<<
@@ -26992,21 +27861,21 @@ static int __pyx_pf_5adios_4attr___init__(struct __pyx_obj_5adios_attr *__pyx_v_
  *     def __getitem__(self, args):
  */
   /*else*/ {
-    __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1759, __pyx_L1_error)
+    __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1767, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_11);
     __Pyx_INCREF(__pyx_v_name);
     __Pyx_GIVEREF(__pyx_v_name);
     PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_v_name);
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_KeyError, __pyx_t_11, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1759, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_KeyError, __pyx_t_11, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1767, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __PYX_ERR(0, 1759, __pyx_L1_error)
+    __PYX_ERR(0, 1767, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "adios.pyx":1724
+  /* "adios.pyx":1732
  *                 return self.value
  * 
  *     def __init__(self, file file, str name):             # <<<<<<<<<<<<<<
@@ -27030,7 +27899,7 @@ static int __pyx_pf_5adios_4attr___init__(struct __pyx_obj_5adios_attr *__pyx_v_
   return __pyx_r;
 }
 
-/* "adios.pyx":1761
+/* "adios.pyx":1769
  *             raise KeyError(name)
  * 
  *     def __getitem__(self, args):             # <<<<<<<<<<<<<<
@@ -27062,35 +27931,35 @@ static PyObject *__pyx_pf_5adios_4attr_2__getitem__(struct __pyx_obj_5adios_attr
   PyObject *__pyx_t_5 = NULL;
   __Pyx_RefNannySetupContext("__getitem__", 0);
 
-  /* "adios.pyx":1762
+  /* "adios.pyx":1770
  * 
  *     def __getitem__(self, args):
  *         val = self.value[args]             # <<<<<<<<<<<<<<
  *         if (val.ndim == 0):
  *             return np.asscalar(val)
  */
-  __pyx_t_1 = PyObject_GetItem(((PyObject *)__pyx_v_self->value), __pyx_v_args); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1762, __pyx_L1_error)
+  __pyx_t_1 = PyObject_GetItem(((PyObject *)__pyx_v_self->value), __pyx_v_args); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1770, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_val = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "adios.pyx":1763
+  /* "adios.pyx":1771
  *     def __getitem__(self, args):
  *         val = self.value[args]
  *         if (val.ndim == 0):             # <<<<<<<<<<<<<<
  *             return np.asscalar(val)
  *         else:
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_val, __pyx_n_s_ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1763, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_val, __pyx_n_s_ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1771, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyInt_EqObjC(__pyx_t_1, __pyx_int_0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1763, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyInt_EqObjC(__pyx_t_1, __pyx_int_0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1771, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 1763, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 1771, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   if (__pyx_t_3) {
 
-    /* "adios.pyx":1764
+    /* "adios.pyx":1772
  *         val = self.value[args]
  *         if (val.ndim == 0):
  *             return np.asscalar(val)             # <<<<<<<<<<<<<<
@@ -27098,13 +27967,13 @@ static PyObject *__pyx_pf_5adios_4attr_2__getitem__(struct __pyx_obj_5adios_attr
  *             return val
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1764, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1772, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_asscalar); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1764, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_asscalar); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1772, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __pyx_t_1 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_4))) {
+    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
       __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4);
       if (likely(__pyx_t_1)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
@@ -27114,25 +27983,43 @@ static PyObject *__pyx_pf_5adios_4attr_2__getitem__(struct __pyx_obj_5adios_attr
       }
     }
     if (!__pyx_t_1) {
-      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_val); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1764, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_val); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1772, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
     } else {
-      __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1764, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_5);
-      __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1); __pyx_t_1 = NULL;
-      __Pyx_INCREF(__pyx_v_val);
-      __Pyx_GIVEREF(__pyx_v_val);
-      PyTuple_SET_ITEM(__pyx_t_5, 0+1, __pyx_v_val);
-      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1764, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_2);
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_4)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_1, __pyx_v_val};
+        __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1772, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_1, __pyx_v_val};
+        __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1772, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+      } else
+      #endif
+      {
+        __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1772, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_5);
+        __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1); __pyx_t_1 = NULL;
+        __Pyx_INCREF(__pyx_v_val);
+        __Pyx_GIVEREF(__pyx_v_val);
+        PyTuple_SET_ITEM(__pyx_t_5, 0+1, __pyx_v_val);
+        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1772, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+      }
     }
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_r = __pyx_t_2;
     __pyx_t_2 = 0;
     goto __pyx_L0;
 
-    /* "adios.pyx":1763
+    /* "adios.pyx":1771
  *     def __getitem__(self, args):
  *         val = self.value[args]
  *         if (val.ndim == 0):             # <<<<<<<<<<<<<<
@@ -27141,7 +28028,7 @@ static PyObject *__pyx_pf_5adios_4attr_2__getitem__(struct __pyx_obj_5adios_attr
  */
   }
 
-  /* "adios.pyx":1766
+  /* "adios.pyx":1774
  *             return np.asscalar(val)
  *         else:
  *             return val             # <<<<<<<<<<<<<<
@@ -27155,7 +28042,7 @@ static PyObject *__pyx_pf_5adios_4attr_2__getitem__(struct __pyx_obj_5adios_attr
     goto __pyx_L0;
   }
 
-  /* "adios.pyx":1761
+  /* "adios.pyx":1769
  *             raise KeyError(name)
  * 
  *     def __getitem__(self, args):             # <<<<<<<<<<<<<<
@@ -27178,7 +28065,7 @@ static PyObject *__pyx_pf_5adios_4attr_2__getitem__(struct __pyx_obj_5adios_attr
   return __pyx_r;
 }
 
-/* "adios.pyx":1768
+/* "adios.pyx":1776
  *             return val
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -27206,7 +28093,7 @@ static PyObject *__pyx_pf_5adios_4attr_4__repr__(struct __pyx_obj_5adios_attr *_
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("__repr__", 0);
 
-  /* "adios.pyx":1769
+  /* "adios.pyx":1777
  * 
  *     def __repr__(self):
  *         return "AdiosAttr (name=%r, dtype=%r, value=%r)" % \             # <<<<<<<<<<<<<<
@@ -27215,14 +28102,14 @@ static PyObject *__pyx_pf_5adios_4attr_4__repr__(struct __pyx_obj_5adios_attr *_
  */
   __Pyx_XDECREF(__pyx_r);
 
-  /* "adios.pyx":1770
+  /* "adios.pyx":1778
  *     def __repr__(self):
  *         return "AdiosAttr (name=%r, dtype=%r, value=%r)" % \
  *                (self.name, self.dtype, self.value)             # <<<<<<<<<<<<<<
  * 
  * cdef class group(dict):
  */
-  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1770, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1778, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_v_self->name);
   __Pyx_GIVEREF(__pyx_v_self->name);
@@ -27234,21 +28121,21 @@ static PyObject *__pyx_pf_5adios_4attr_4__repr__(struct __pyx_obj_5adios_attr *_
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self->value));
   PyTuple_SET_ITEM(__pyx_t_1, 2, ((PyObject *)__pyx_v_self->value));
 
-  /* "adios.pyx":1769
+  /* "adios.pyx":1777
  * 
  *     def __repr__(self):
  *         return "AdiosAttr (name=%r, dtype=%r, value=%r)" % \             # <<<<<<<<<<<<<<
  *                (self.name, self.dtype, self.value)
  * 
  */
-  __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_AdiosAttr_name_r_dtype_r_value_r, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1769, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_AdiosAttr_name_r_dtype_r_value_r, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1777, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":1768
+  /* "adios.pyx":1776
  *             return val
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -27268,7 +28155,7 @@ static PyObject *__pyx_pf_5adios_4attr_4__repr__(struct __pyx_obj_5adios_attr *_
   return __pyx_r;
 }
 
-/* "adios.pyx":1786
+/* "adios.pyx":1794
  *     cpdef public softdict attrs
  * 
  *     def __init__(self, file file, str name):             # <<<<<<<<<<<<<<
@@ -27304,11 +28191,11 @@ static int __pyx_pw_5adios_5group_1__init__(PyObject *__pyx_v_self, PyObject *__
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, 1); __PYX_ERR(0, 1786, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, 1); __PYX_ERR(0, 1794, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 1786, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 1794, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -27321,14 +28208,14 @@ static int __pyx_pw_5adios_5group_1__init__(PyObject *__pyx_v_self, PyObject *__
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1786, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1794, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.group.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_file), __pyx_ptype_5adios_file, 1, "file", 0))) __PYX_ERR(0, 1786, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 1786, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_file), __pyx_ptype_5adios_file, 1, "file", 0))) __PYX_ERR(0, 1794, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 1794, __pyx_L1_error)
   __pyx_r = __pyx_pf_5adios_5group___init__(((struct __pyx_obj_5adios_group *)__pyx_v_self), __pyx_v_file, __pyx_v_name);
 
   /* function exit code */
@@ -27352,12 +28239,12 @@ static int __pyx_pf_5adios_5group___init__(struct __pyx_obj_5adios_group *__pyx_
   PyObject *__pyx_t_7 = NULL;
   PyObject *__pyx_t_8 = NULL;
   PyObject *__pyx_t_9 = NULL;
-  Py_ssize_t __pyx_t_10;
+  int __pyx_t_10;
   PyObject *__pyx_t_11 = NULL;
   __Pyx_RefNannySetupContext("__init__", 0);
   __Pyx_INCREF(__pyx_v_name);
 
-  /* "adios.pyx":1787
+  /* "adios.pyx":1795
  * 
  *     def __init__(self, file file, str name):
  *         self.file = file             # <<<<<<<<<<<<<<
@@ -27370,33 +28257,33 @@ static int __pyx_pf_5adios_5group___init__(struct __pyx_obj_5adios_group *__pyx_
   __Pyx_DECREF(((PyObject *)__pyx_v_self->file));
   __pyx_v_self->file = __pyx_v_file;
 
-  /* "adios.pyx":1788
+  /* "adios.pyx":1796
  *     def __init__(self, file file, str name):
  *         self.file = file
  *         self.name = name.rstrip('/')             # <<<<<<<<<<<<<<
  * 
  *         self.vars = softdict()
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1788, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1796, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__44, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1788, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__44, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1796, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (!(likely(PyString_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_2)->tp_name), 0))) __PYX_ERR(0, 1788, __pyx_L1_error)
+  if (!(likely(PyString_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_2)->tp_name), 0))) __PYX_ERR(0, 1796, __pyx_L1_error)
   __Pyx_GIVEREF(__pyx_t_2);
   __Pyx_GOTREF(__pyx_v_self->name);
   __Pyx_DECREF(__pyx_v_self->name);
   __pyx_v_self->name = ((PyObject*)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "adios.pyx":1790
+  /* "adios.pyx":1798
  *         self.name = name.rstrip('/')
  * 
  *         self.vars = softdict()             # <<<<<<<<<<<<<<
  *         for name in self.file.vars.keys():
  *             if name.startswith(self.name + '/'):
  */
-  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5adios_softdict), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1790, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5adios_softdict), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1798, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_2);
   __Pyx_GOTREF(__pyx_v_self->vars);
@@ -27404,17 +28291,17 @@ static int __pyx_pf_5adios_5group___init__(struct __pyx_obj_5adios_group *__pyx_
   __pyx_v_self->vars = ((struct __pyx_obj_5adios_softdict *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "adios.pyx":1791
+  /* "adios.pyx":1799
  * 
  *         self.vars = softdict()
  *         for name in self.file.vars.keys():             # <<<<<<<<<<<<<<
  *             if name.startswith(self.name + '/'):
  *                 self.vars[name.replace(self.name + '/', '', 1)] = self.file.vars[name]
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->file->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1791, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->file->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1799, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_1))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
     __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
     if (likely(__pyx_t_3)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
@@ -27424,10 +28311,10 @@ static int __pyx_pf_5adios_5group___init__(struct __pyx_obj_5adios_group *__pyx_
     }
   }
   if (__pyx_t_3) {
-    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1791, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1799, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   } else {
-    __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1791, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1799, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -27435,27 +28322,27 @@ static int __pyx_pf_5adios_5group___init__(struct __pyx_obj_5adios_group *__pyx_
     __pyx_t_1 = __pyx_t_2; __Pyx_INCREF(__pyx_t_1); __pyx_t_4 = 0;
     __pyx_t_5 = NULL;
   } else {
-    __pyx_t_4 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1791, __pyx_L1_error)
+    __pyx_t_4 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1799, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1791, __pyx_L1_error)
+    __pyx_t_5 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1799, __pyx_L1_error)
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   for (;;) {
     if (likely(!__pyx_t_5)) {
       if (likely(PyList_CheckExact(__pyx_t_1))) {
         if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_1)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1791, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1799, __pyx_L1_error)
         #else
-        __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1791, __pyx_L1_error)
+        __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1799, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_2);
         #endif
       } else {
         if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1791, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1799, __pyx_L1_error)
         #else
-        __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1791, __pyx_L1_error)
+        __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1799, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_2);
         #endif
       }
@@ -27465,17 +28352,17 @@ static int __pyx_pf_5adios_5group___init__(struct __pyx_obj_5adios_group *__pyx_
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
           if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-          else __PYX_ERR(0, 1791, __pyx_L1_error)
+          else __PYX_ERR(0, 1799, __pyx_L1_error)
         }
         break;
       }
       __Pyx_GOTREF(__pyx_t_2);
     }
-    if (!(likely(PyString_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_2)->tp_name), 0))) __PYX_ERR(0, 1791, __pyx_L1_error)
+    if (!(likely(PyString_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_2)->tp_name), 0))) __PYX_ERR(0, 1799, __pyx_L1_error)
     __Pyx_DECREF_SET(__pyx_v_name, ((PyObject*)__pyx_t_2));
     __pyx_t_2 = 0;
 
-    /* "adios.pyx":1792
+    /* "adios.pyx":1800
  *         self.vars = softdict()
  *         for name in self.file.vars.keys():
  *             if name.startswith(self.name + '/'):             # <<<<<<<<<<<<<<
@@ -27484,30 +28371,30 @@ static int __pyx_pf_5adios_5group___init__(struct __pyx_obj_5adios_group *__pyx_
  */
     if (unlikely(__pyx_v_name == Py_None)) {
       PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "startswith");
-      __PYX_ERR(0, 1792, __pyx_L1_error)
+      __PYX_ERR(0, 1800, __pyx_L1_error)
     }
-    __pyx_t_2 = PyNumber_Add(__pyx_v_self->name, __pyx_kp_s_); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1792, __pyx_L1_error)
+    __pyx_t_2 = PyNumber_Add(__pyx_v_self->name, __pyx_kp_s_); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1800, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_6 = __Pyx_PyStr_Tailmatch(__pyx_v_name, __pyx_t_2, 0, PY_SSIZE_T_MAX, -1); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 1792, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_PyStr_Tailmatch(__pyx_v_name, __pyx_t_2, 0, PY_SSIZE_T_MAX, -1); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 1800, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     if ((__pyx_t_6 != 0)) {
 
-      /* "adios.pyx":1793
+      /* "adios.pyx":1801
  *         for name in self.file.vars.keys():
  *             if name.startswith(self.name + '/'):
  *                 self.vars[name.replace(self.name + '/', '', 1)] = self.file.vars[name]             # <<<<<<<<<<<<<<
  *             if name.startswith('/' + self.name + '/'):
  *                 self.vars[name.replace('/' + self.name + '/', '', 1)] = self.file.vars[name]
  */
-      __pyx_t_2 = PyObject_GetItem(((PyObject *)__pyx_v_self->file->vars), __pyx_v_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1793, __pyx_L1_error)
+      __pyx_t_2 = PyObject_GetItem(((PyObject *)__pyx_v_self->file->vars), __pyx_v_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1801, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
-      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_replace); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1793, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_replace); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1801, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      __pyx_t_8 = PyNumber_Add(__pyx_v_self->name, __pyx_kp_s_); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1793, __pyx_L1_error)
+      __pyx_t_8 = PyNumber_Add(__pyx_v_self->name, __pyx_kp_s_); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1801, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
       __pyx_t_9 = NULL;
       __pyx_t_10 = 0;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_7))) {
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
         __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_7);
         if (likely(__pyx_t_9)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
@@ -27517,29 +28404,49 @@ static int __pyx_pf_5adios_5group___init__(struct __pyx_obj_5adios_group *__pyx_
           __pyx_t_10 = 1;
         }
       }
-      __pyx_t_11 = PyTuple_New(3+__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1793, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_11);
-      if (__pyx_t_9) {
-        __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_9); __pyx_t_9 = NULL;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_7)) {
+        PyObject *__pyx_temp[4] = {__pyx_t_9, __pyx_t_8, __pyx_kp_s__10, __pyx_int_1};
+        __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_10, 3+__pyx_t_10); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1801, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+        __Pyx_GOTREF(__pyx_t_3);
+        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
+        PyObject *__pyx_temp[4] = {__pyx_t_9, __pyx_t_8, __pyx_kp_s__10, __pyx_int_1};
+        __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_10, 3+__pyx_t_10); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1801, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+        __Pyx_GOTREF(__pyx_t_3);
+        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+      } else
+      #endif
+      {
+        __pyx_t_11 = PyTuple_New(3+__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1801, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_11);
+        if (__pyx_t_9) {
+          __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_9); __pyx_t_9 = NULL;
+        }
+        __Pyx_GIVEREF(__pyx_t_8);
+        PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_10, __pyx_t_8);
+        __Pyx_INCREF(__pyx_kp_s__10);
+        __Pyx_GIVEREF(__pyx_kp_s__10);
+        PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_10, __pyx_kp_s__10);
+        __Pyx_INCREF(__pyx_int_1);
+        __Pyx_GIVEREF(__pyx_int_1);
+        PyTuple_SET_ITEM(__pyx_t_11, 2+__pyx_t_10, __pyx_int_1);
+        __pyx_t_8 = 0;
+        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_11, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1801, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_3);
+        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
       }
-      __Pyx_GIVEREF(__pyx_t_8);
-      PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_10, __pyx_t_8);
-      __Pyx_INCREF(__pyx_kp_s__10);
-      __Pyx_GIVEREF(__pyx_kp_s__10);
-      PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_10, __pyx_kp_s__10);
-      __Pyx_INCREF(__pyx_int_1);
-      __Pyx_GIVEREF(__pyx_int_1);
-      PyTuple_SET_ITEM(__pyx_t_11, 2+__pyx_t_10, __pyx_int_1);
-      __pyx_t_8 = 0;
-      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_11, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1793, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_3);
-      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-      if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_self->vars), __pyx_t_3, __pyx_t_2) < 0)) __PYX_ERR(0, 1793, __pyx_L1_error)
+      if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_self->vars), __pyx_t_3, __pyx_t_2) < 0)) __PYX_ERR(0, 1801, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-      /* "adios.pyx":1792
+      /* "adios.pyx":1800
  *         self.vars = softdict()
  *         for name in self.file.vars.keys():
  *             if name.startswith(self.name + '/'):             # <<<<<<<<<<<<<<
@@ -27548,7 +28455,7 @@ static int __pyx_pf_5adios_5group___init__(struct __pyx_obj_5adios_group *__pyx_
  */
     }
 
-    /* "adios.pyx":1794
+    /* "adios.pyx":1802
  *             if name.startswith(self.name + '/'):
  *                 self.vars[name.replace(self.name + '/', '', 1)] = self.file.vars[name]
  *             if name.startswith('/' + self.name + '/'):             # <<<<<<<<<<<<<<
@@ -27557,36 +28464,36 @@ static int __pyx_pf_5adios_5group___init__(struct __pyx_obj_5adios_group *__pyx_
  */
     if (unlikely(__pyx_v_name == Py_None)) {
       PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "startswith");
-      __PYX_ERR(0, 1794, __pyx_L1_error)
+      __PYX_ERR(0, 1802, __pyx_L1_error)
     }
-    __pyx_t_2 = PyNumber_Add(__pyx_kp_s_, __pyx_v_self->name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1794, __pyx_L1_error)
+    __pyx_t_2 = PyNumber_Add(__pyx_kp_s_, __pyx_v_self->name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1802, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_kp_s_); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1794, __pyx_L1_error)
+    __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_kp_s_); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1802, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_6 = __Pyx_PyStr_Tailmatch(__pyx_v_name, __pyx_t_3, 0, PY_SSIZE_T_MAX, -1); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 1794, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_PyStr_Tailmatch(__pyx_v_name, __pyx_t_3, 0, PY_SSIZE_T_MAX, -1); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 1802, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     if ((__pyx_t_6 != 0)) {
 
-      /* "adios.pyx":1795
+      /* "adios.pyx":1803
  *                 self.vars[name.replace(self.name + '/', '', 1)] = self.file.vars[name]
  *             if name.startswith('/' + self.name + '/'):
  *                 self.vars[name.replace('/' + self.name + '/', '', 1)] = self.file.vars[name]             # <<<<<<<<<<<<<<
  * 
  *         self.attrs = softdict()
  */
-      __pyx_t_3 = PyObject_GetItem(((PyObject *)__pyx_v_self->file->vars), __pyx_v_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1795, __pyx_L1_error)
+      __pyx_t_3 = PyObject_GetItem(((PyObject *)__pyx_v_self->file->vars), __pyx_v_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1803, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_replace); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1795, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_replace); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1803, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      __pyx_t_11 = PyNumber_Add(__pyx_kp_s_, __pyx_v_self->name); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1795, __pyx_L1_error)
+      __pyx_t_11 = PyNumber_Add(__pyx_kp_s_, __pyx_v_self->name); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1803, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_11);
-      __pyx_t_8 = PyNumber_Add(__pyx_t_11, __pyx_kp_s_); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1795, __pyx_L1_error)
+      __pyx_t_8 = PyNumber_Add(__pyx_t_11, __pyx_kp_s_); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1803, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
       __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
       __pyx_t_11 = NULL;
       __pyx_t_10 = 0;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_7))) {
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
         __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_7);
         if (likely(__pyx_t_11)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
@@ -27596,29 +28503,49 @@ static int __pyx_pf_5adios_5group___init__(struct __pyx_obj_5adios_group *__pyx_
           __pyx_t_10 = 1;
         }
       }
-      __pyx_t_9 = PyTuple_New(3+__pyx_t_10); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1795, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_9);
-      if (__pyx_t_11) {
-        __Pyx_GIVEREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_11); __pyx_t_11 = NULL;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_7)) {
+        PyObject *__pyx_temp[4] = {__pyx_t_11, __pyx_t_8, __pyx_kp_s__10, __pyx_int_1};
+        __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_10, 3+__pyx_t_10); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1803, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
+        PyObject *__pyx_temp[4] = {__pyx_t_11, __pyx_t_8, __pyx_kp_s__10, __pyx_int_1};
+        __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_10, 3+__pyx_t_10); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1803, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+      } else
+      #endif
+      {
+        __pyx_t_9 = PyTuple_New(3+__pyx_t_10); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1803, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_9);
+        if (__pyx_t_11) {
+          __Pyx_GIVEREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_11); __pyx_t_11 = NULL;
+        }
+        __Pyx_GIVEREF(__pyx_t_8);
+        PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_10, __pyx_t_8);
+        __Pyx_INCREF(__pyx_kp_s__10);
+        __Pyx_GIVEREF(__pyx_kp_s__10);
+        PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_10, __pyx_kp_s__10);
+        __Pyx_INCREF(__pyx_int_1);
+        __Pyx_GIVEREF(__pyx_int_1);
+        PyTuple_SET_ITEM(__pyx_t_9, 2+__pyx_t_10, __pyx_int_1);
+        __pyx_t_8 = 0;
+        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_9, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1803, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
       }
-      __Pyx_GIVEREF(__pyx_t_8);
-      PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_10, __pyx_t_8);
-      __Pyx_INCREF(__pyx_kp_s__10);
-      __Pyx_GIVEREF(__pyx_kp_s__10);
-      PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_10, __pyx_kp_s__10);
-      __Pyx_INCREF(__pyx_int_1);
-      __Pyx_GIVEREF(__pyx_int_1);
-      PyTuple_SET_ITEM(__pyx_t_9, 2+__pyx_t_10, __pyx_int_1);
-      __pyx_t_8 = 0;
-      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_9, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1795, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_2);
-      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-      if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_self->vars), __pyx_t_2, __pyx_t_3) < 0)) __PYX_ERR(0, 1795, __pyx_L1_error)
+      if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_self->vars), __pyx_t_2, __pyx_t_3) < 0)) __PYX_ERR(0, 1803, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-      /* "adios.pyx":1794
+      /* "adios.pyx":1802
  *             if name.startswith(self.name + '/'):
  *                 self.vars[name.replace(self.name + '/', '', 1)] = self.file.vars[name]
  *             if name.startswith('/' + self.name + '/'):             # <<<<<<<<<<<<<<
@@ -27627,7 +28554,7 @@ static int __pyx_pf_5adios_5group___init__(struct __pyx_obj_5adios_group *__pyx_
  */
     }
 
-    /* "adios.pyx":1791
+    /* "adios.pyx":1799
  * 
  *         self.vars = softdict()
  *         for name in self.file.vars.keys():             # <<<<<<<<<<<<<<
@@ -27637,14 +28564,14 @@ static int __pyx_pf_5adios_5group___init__(struct __pyx_obj_5adios_group *__pyx_
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":1797
+  /* "adios.pyx":1805
  *                 self.vars[name.replace('/' + self.name + '/', '', 1)] = self.file.vars[name]
  * 
  *         self.attrs = softdict()             # <<<<<<<<<<<<<<
  *         for name in self.file.attrs.keys():
  *             if name.startswith(self.name + '/'):
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5adios_softdict), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1797, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5adios_softdict), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1805, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_self->attrs);
@@ -27652,17 +28579,17 @@ static int __pyx_pf_5adios_5group___init__(struct __pyx_obj_5adios_group *__pyx_
   __pyx_v_self->attrs = ((struct __pyx_obj_5adios_softdict *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "adios.pyx":1798
+  /* "adios.pyx":1806
  * 
  *         self.attrs = softdict()
  *         for name in self.file.attrs.keys():             # <<<<<<<<<<<<<<
  *             if name.startswith(self.name + '/'):
  *                 self.attrs[name.replace(self.name + '/', '', 1)] = self.file.attrs[name]
  */
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->file->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1798, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->file->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1806, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_2 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
     __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
     if (likely(__pyx_t_2)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -27672,10 +28599,10 @@ static int __pyx_pf_5adios_5group___init__(struct __pyx_obj_5adios_group *__pyx_
     }
   }
   if (__pyx_t_2) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1798, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1806, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   } else {
-    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1798, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1806, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -27683,27 +28610,27 @@ static int __pyx_pf_5adios_5group___init__(struct __pyx_obj_5adios_group *__pyx_
     __pyx_t_3 = __pyx_t_1; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0;
     __pyx_t_5 = NULL;
   } else {
-    __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1798, __pyx_L1_error)
+    __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1806, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_5 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1798, __pyx_L1_error)
+    __pyx_t_5 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1806, __pyx_L1_error)
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   for (;;) {
     if (likely(!__pyx_t_5)) {
       if (likely(PyList_CheckExact(__pyx_t_3))) {
         if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_1 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1798, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_1 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1806, __pyx_L1_error)
         #else
-        __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1798, __pyx_L1_error)
+        __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1806, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_1);
         #endif
       } else {
         if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1798, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1806, __pyx_L1_error)
         #else
-        __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1798, __pyx_L1_error)
+        __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1806, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_1);
         #endif
       }
@@ -27713,17 +28640,17 @@ static int __pyx_pf_5adios_5group___init__(struct __pyx_obj_5adios_group *__pyx_
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
           if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-          else __PYX_ERR(0, 1798, __pyx_L1_error)
+          else __PYX_ERR(0, 1806, __pyx_L1_error)
         }
         break;
       }
       __Pyx_GOTREF(__pyx_t_1);
     }
-    if (!(likely(PyString_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 1798, __pyx_L1_error)
+    if (!(likely(PyString_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 1806, __pyx_L1_error)
     __Pyx_DECREF_SET(__pyx_v_name, ((PyObject*)__pyx_t_1));
     __pyx_t_1 = 0;
 
-    /* "adios.pyx":1799
+    /* "adios.pyx":1807
  *         self.attrs = softdict()
  *         for name in self.file.attrs.keys():
  *             if name.startswith(self.name + '/'):             # <<<<<<<<<<<<<<
@@ -27732,30 +28659,30 @@ static int __pyx_pf_5adios_5group___init__(struct __pyx_obj_5adios_group *__pyx_
  */
     if (unlikely(__pyx_v_name == Py_None)) {
       PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "startswith");
-      __PYX_ERR(0, 1799, __pyx_L1_error)
+      __PYX_ERR(0, 1807, __pyx_L1_error)
     }
-    __pyx_t_1 = PyNumber_Add(__pyx_v_self->name, __pyx_kp_s_); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1799, __pyx_L1_error)
+    __pyx_t_1 = PyNumber_Add(__pyx_v_self->name, __pyx_kp_s_); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1807, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_6 = __Pyx_PyStr_Tailmatch(__pyx_v_name, __pyx_t_1, 0, PY_SSIZE_T_MAX, -1); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 1799, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_PyStr_Tailmatch(__pyx_v_name, __pyx_t_1, 0, PY_SSIZE_T_MAX, -1); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 1807, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     if ((__pyx_t_6 != 0)) {
 
-      /* "adios.pyx":1800
+      /* "adios.pyx":1808
  *         for name in self.file.attrs.keys():
  *             if name.startswith(self.name + '/'):
  *                 self.attrs[name.replace(self.name + '/', '', 1)] = self.file.attrs[name]             # <<<<<<<<<<<<<<
  *             if name.startswith('/' + self.name + '/'):
  *                 self.attrs[name.replace('/' + self.name + '/', '', 1)] = self.file.attrs[name]
  */
-      __pyx_t_1 = PyObject_GetItem(((PyObject *)__pyx_v_self->file->attrs), __pyx_v_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1800, __pyx_L1_error)
+      __pyx_t_1 = PyObject_GetItem(((PyObject *)__pyx_v_self->file->attrs), __pyx_v_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1808, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
-      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_replace); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1800, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_replace); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1808, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      __pyx_t_9 = PyNumber_Add(__pyx_v_self->name, __pyx_kp_s_); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1800, __pyx_L1_error)
+      __pyx_t_9 = PyNumber_Add(__pyx_v_self->name, __pyx_kp_s_); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1808, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
       __pyx_t_8 = NULL;
       __pyx_t_10 = 0;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_7))) {
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
         __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
         if (likely(__pyx_t_8)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
@@ -27765,29 +28692,49 @@ static int __pyx_pf_5adios_5group___init__(struct __pyx_obj_5adios_group *__pyx_
           __pyx_t_10 = 1;
         }
       }
-      __pyx_t_11 = PyTuple_New(3+__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1800, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_11);
-      if (__pyx_t_8) {
-        __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_8); __pyx_t_8 = NULL;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_7)) {
+        PyObject *__pyx_temp[4] = {__pyx_t_8, __pyx_t_9, __pyx_kp_s__10, __pyx_int_1};
+        __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_10, 3+__pyx_t_10); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1808, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
+        PyObject *__pyx_temp[4] = {__pyx_t_8, __pyx_t_9, __pyx_kp_s__10, __pyx_int_1};
+        __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_10, 3+__pyx_t_10); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1808, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+      } else
+      #endif
+      {
+        __pyx_t_11 = PyTuple_New(3+__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1808, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_11);
+        if (__pyx_t_8) {
+          __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_8); __pyx_t_8 = NULL;
+        }
+        __Pyx_GIVEREF(__pyx_t_9);
+        PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_10, __pyx_t_9);
+        __Pyx_INCREF(__pyx_kp_s__10);
+        __Pyx_GIVEREF(__pyx_kp_s__10);
+        PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_10, __pyx_kp_s__10);
+        __Pyx_INCREF(__pyx_int_1);
+        __Pyx_GIVEREF(__pyx_int_1);
+        PyTuple_SET_ITEM(__pyx_t_11, 2+__pyx_t_10, __pyx_int_1);
+        __pyx_t_9 = 0;
+        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_11, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1808, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
       }
-      __Pyx_GIVEREF(__pyx_t_9);
-      PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_10, __pyx_t_9);
-      __Pyx_INCREF(__pyx_kp_s__10);
-      __Pyx_GIVEREF(__pyx_kp_s__10);
-      PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_10, __pyx_kp_s__10);
-      __Pyx_INCREF(__pyx_int_1);
-      __Pyx_GIVEREF(__pyx_int_1);
-      PyTuple_SET_ITEM(__pyx_t_11, 2+__pyx_t_10, __pyx_int_1);
-      __pyx_t_9 = 0;
-      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_11, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1800, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_2);
-      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-      if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_self->attrs), __pyx_t_2, __pyx_t_1) < 0)) __PYX_ERR(0, 1800, __pyx_L1_error)
+      if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_self->attrs), __pyx_t_2, __pyx_t_1) < 0)) __PYX_ERR(0, 1808, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-      /* "adios.pyx":1799
+      /* "adios.pyx":1807
  *         self.attrs = softdict()
  *         for name in self.file.attrs.keys():
  *             if name.startswith(self.name + '/'):             # <<<<<<<<<<<<<<
@@ -27796,7 +28743,7 @@ static int __pyx_pf_5adios_5group___init__(struct __pyx_obj_5adios_group *__pyx_
  */
     }
 
-    /* "adios.pyx":1801
+    /* "adios.pyx":1809
  *             if name.startswith(self.name + '/'):
  *                 self.attrs[name.replace(self.name + '/', '', 1)] = self.file.attrs[name]
  *             if name.startswith('/' + self.name + '/'):             # <<<<<<<<<<<<<<
@@ -27805,36 +28752,36 @@ static int __pyx_pf_5adios_5group___init__(struct __pyx_obj_5adios_group *__pyx_
  */
     if (unlikely(__pyx_v_name == Py_None)) {
       PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "startswith");
-      __PYX_ERR(0, 1801, __pyx_L1_error)
+      __PYX_ERR(0, 1809, __pyx_L1_error)
     }
-    __pyx_t_1 = PyNumber_Add(__pyx_kp_s_, __pyx_v_self->name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1801, __pyx_L1_error)
+    __pyx_t_1 = PyNumber_Add(__pyx_kp_s_, __pyx_v_self->name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1809, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_kp_s_); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1801, __pyx_L1_error)
+    __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_kp_s_); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1809, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_6 = __Pyx_PyStr_Tailmatch(__pyx_v_name, __pyx_t_2, 0, PY_SSIZE_T_MAX, -1); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 1801, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_PyStr_Tailmatch(__pyx_v_name, __pyx_t_2, 0, PY_SSIZE_T_MAX, -1); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 1809, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     if ((__pyx_t_6 != 0)) {
 
-      /* "adios.pyx":1802
+      /* "adios.pyx":1810
  *                 self.attrs[name.replace(self.name + '/', '', 1)] = self.file.attrs[name]
  *             if name.startswith('/' + self.name + '/'):
  *                 self.attrs[name.replace('/' + self.name + '/', '', 1)] = self.file.attrs[name]             # <<<<<<<<<<<<<<
  * 
  *     def __getitem__(self, varname):
  */
-      __pyx_t_2 = PyObject_GetItem(((PyObject *)__pyx_v_self->file->attrs), __pyx_v_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1802, __pyx_L1_error)
+      __pyx_t_2 = PyObject_GetItem(((PyObject *)__pyx_v_self->file->attrs), __pyx_v_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1810, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
-      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_replace); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1802, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_replace); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1810, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      __pyx_t_11 = PyNumber_Add(__pyx_kp_s_, __pyx_v_self->name); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1802, __pyx_L1_error)
+      __pyx_t_11 = PyNumber_Add(__pyx_kp_s_, __pyx_v_self->name); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1810, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_11);
-      __pyx_t_9 = PyNumber_Add(__pyx_t_11, __pyx_kp_s_); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1802, __pyx_L1_error)
+      __pyx_t_9 = PyNumber_Add(__pyx_t_11, __pyx_kp_s_); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1810, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
       __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
       __pyx_t_11 = NULL;
       __pyx_t_10 = 0;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_7))) {
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
         __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_7);
         if (likely(__pyx_t_11)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
@@ -27844,29 +28791,49 @@ static int __pyx_pf_5adios_5group___init__(struct __pyx_obj_5adios_group *__pyx_
           __pyx_t_10 = 1;
         }
       }
-      __pyx_t_8 = PyTuple_New(3+__pyx_t_10); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1802, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_8);
-      if (__pyx_t_11) {
-        __Pyx_GIVEREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_11); __pyx_t_11 = NULL;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_7)) {
+        PyObject *__pyx_temp[4] = {__pyx_t_11, __pyx_t_9, __pyx_kp_s__10, __pyx_int_1};
+        __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_10, 3+__pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1810, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
+        __Pyx_GOTREF(__pyx_t_1);
+        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
+        PyObject *__pyx_temp[4] = {__pyx_t_11, __pyx_t_9, __pyx_kp_s__10, __pyx_int_1};
+        __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_10, 3+__pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1810, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
+        __Pyx_GOTREF(__pyx_t_1);
+        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+      } else
+      #endif
+      {
+        __pyx_t_8 = PyTuple_New(3+__pyx_t_10); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1810, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_8);
+        if (__pyx_t_11) {
+          __Pyx_GIVEREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_11); __pyx_t_11 = NULL;
+        }
+        __Pyx_GIVEREF(__pyx_t_9);
+        PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_10, __pyx_t_9);
+        __Pyx_INCREF(__pyx_kp_s__10);
+        __Pyx_GIVEREF(__pyx_kp_s__10);
+        PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_10, __pyx_kp_s__10);
+        __Pyx_INCREF(__pyx_int_1);
+        __Pyx_GIVEREF(__pyx_int_1);
+        PyTuple_SET_ITEM(__pyx_t_8, 2+__pyx_t_10, __pyx_int_1);
+        __pyx_t_9 = 0;
+        __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_8, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1810, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_1);
+        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
       }
-      __Pyx_GIVEREF(__pyx_t_9);
-      PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_10, __pyx_t_9);
-      __Pyx_INCREF(__pyx_kp_s__10);
-      __Pyx_GIVEREF(__pyx_kp_s__10);
-      PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_10, __pyx_kp_s__10);
-      __Pyx_INCREF(__pyx_int_1);
-      __Pyx_GIVEREF(__pyx_int_1);
-      PyTuple_SET_ITEM(__pyx_t_8, 2+__pyx_t_10, __pyx_int_1);
-      __pyx_t_9 = 0;
-      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_8, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1802, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_1);
-      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-      if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_self->attrs), __pyx_t_1, __pyx_t_2) < 0)) __PYX_ERR(0, 1802, __pyx_L1_error)
+      if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_self->attrs), __pyx_t_1, __pyx_t_2) < 0)) __PYX_ERR(0, 1810, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-      /* "adios.pyx":1801
+      /* "adios.pyx":1809
  *             if name.startswith(self.name + '/'):
  *                 self.attrs[name.replace(self.name + '/', '', 1)] = self.file.attrs[name]
  *             if name.startswith('/' + self.name + '/'):             # <<<<<<<<<<<<<<
@@ -27875,7 +28842,7 @@ static int __pyx_pf_5adios_5group___init__(struct __pyx_obj_5adios_group *__pyx_
  */
     }
 
-    /* "adios.pyx":1798
+    /* "adios.pyx":1806
  * 
  *         self.attrs = softdict()
  *         for name in self.file.attrs.keys():             # <<<<<<<<<<<<<<
@@ -27885,7 +28852,7 @@ static int __pyx_pf_5adios_5group___init__(struct __pyx_obj_5adios_group *__pyx_
   }
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "adios.pyx":1786
+  /* "adios.pyx":1794
  *     cpdef public softdict attrs
  * 
  *     def __init__(self, file file, str name):             # <<<<<<<<<<<<<<
@@ -27912,7 +28879,7 @@ static int __pyx_pf_5adios_5group___init__(struct __pyx_obj_5adios_group *__pyx_
   return __pyx_r;
 }
 
-/* "adios.pyx":1804
+/* "adios.pyx":1812
  *                 self.attrs[name.replace('/' + self.name + '/', '', 1)] = self.file.attrs[name]
  * 
  *     def __getitem__(self, varname):             # <<<<<<<<<<<<<<
@@ -27958,7 +28925,7 @@ static PyObject *__pyx_pf_5adios_5group_2__getitem__(struct __pyx_obj_5adios_gro
   __Pyx_RefNannySetupContext("__getitem__", 0);
   __Pyx_INCREF(__pyx_v_varname);
 
-  /* "adios.pyx":1815
+  /* "adios.pyx":1823
  * 
  *         """
  *         if not isinstance(varname, tuple):             # <<<<<<<<<<<<<<
@@ -27969,14 +28936,14 @@ static PyObject *__pyx_pf_5adios_5group_2__getitem__(struct __pyx_obj_5adios_gro
   __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0);
   if (__pyx_t_2) {
 
-    /* "adios.pyx":1816
+    /* "adios.pyx":1824
  *         """
  *         if not isinstance(varname, tuple):
  *             varname = (varname,)             # <<<<<<<<<<<<<<
  * 
  *         if len(varname) > 1:
  */
-    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1816, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1824, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_varname);
     __Pyx_GIVEREF(__pyx_v_varname);
@@ -27984,7 +28951,7 @@ static PyObject *__pyx_pf_5adios_5group_2__getitem__(struct __pyx_obj_5adios_gro
     __Pyx_DECREF_SET(__pyx_v_varname, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "adios.pyx":1815
+    /* "adios.pyx":1823
  * 
  *         """
  *         if not isinstance(varname, tuple):             # <<<<<<<<<<<<<<
@@ -27993,37 +28960,37 @@ static PyObject *__pyx_pf_5adios_5group_2__getitem__(struct __pyx_obj_5adios_gro
  */
   }
 
-  /* "adios.pyx":1818
+  /* "adios.pyx":1826
  *             varname = (varname,)
  * 
  *         if len(varname) > 1:             # <<<<<<<<<<<<<<
  *             raise KeyError(varname)
  * 
  */
-  __pyx_t_4 = PyObject_Length(__pyx_v_varname); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 1818, __pyx_L1_error)
+  __pyx_t_4 = PyObject_Length(__pyx_v_varname); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 1826, __pyx_L1_error)
   __pyx_t_2 = ((__pyx_t_4 > 1) != 0);
   if (__pyx_t_2) {
 
-    /* "adios.pyx":1819
+    /* "adios.pyx":1827
  * 
  *         if len(varname) > 1:
  *             raise KeyError(varname)             # <<<<<<<<<<<<<<
  * 
  *         for key_ in varname:
  */
-    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1819, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1827, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_varname);
     __Pyx_GIVEREF(__pyx_v_varname);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_varname);
-    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_KeyError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1819, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_KeyError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1827, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_Raise(__pyx_t_5, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    __PYX_ERR(0, 1819, __pyx_L1_error)
+    __PYX_ERR(0, 1827, __pyx_L1_error)
 
-    /* "adios.pyx":1818
+    /* "adios.pyx":1826
  *             varname = (varname,)
  * 
  *         if len(varname) > 1:             # <<<<<<<<<<<<<<
@@ -28032,7 +28999,7 @@ static PyObject *__pyx_pf_5adios_5group_2__getitem__(struct __pyx_obj_5adios_gro
  */
   }
 
-  /* "adios.pyx":1821
+  /* "adios.pyx":1829
  *             raise KeyError(varname)
  * 
  *         for key_ in varname:             # <<<<<<<<<<<<<<
@@ -28043,26 +29010,26 @@ static PyObject *__pyx_pf_5adios_5group_2__getitem__(struct __pyx_obj_5adios_gro
     __pyx_t_5 = __pyx_v_varname; __Pyx_INCREF(__pyx_t_5); __pyx_t_4 = 0;
     __pyx_t_6 = NULL;
   } else {
-    __pyx_t_4 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_v_varname); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1821, __pyx_L1_error)
+    __pyx_t_4 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_v_varname); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1829, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1821, __pyx_L1_error)
+    __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1829, __pyx_L1_error)
   }
   for (;;) {
     if (likely(!__pyx_t_6)) {
       if (likely(PyList_CheckExact(__pyx_t_5))) {
         if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_5)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_3 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1821, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_3 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1829, __pyx_L1_error)
         #else
-        __pyx_t_3 = PySequence_ITEM(__pyx_t_5, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1821, __pyx_L1_error)
+        __pyx_t_3 = PySequence_ITEM(__pyx_t_5, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1829, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
         #endif
       } else {
         if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_5)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1821, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1829, __pyx_L1_error)
         #else
-        __pyx_t_3 = PySequence_ITEM(__pyx_t_5, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1821, __pyx_L1_error)
+        __pyx_t_3 = PySequence_ITEM(__pyx_t_5, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1829, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
         #endif
       }
@@ -28072,7 +29039,7 @@ static PyObject *__pyx_pf_5adios_5group_2__getitem__(struct __pyx_obj_5adios_gro
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
           if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-          else __PYX_ERR(0, 1821, __pyx_L1_error)
+          else __PYX_ERR(0, 1829, __pyx_L1_error)
         }
         break;
       }
@@ -28081,7 +29048,7 @@ static PyObject *__pyx_pf_5adios_5group_2__getitem__(struct __pyx_obj_5adios_gro
     __Pyx_XDECREF_SET(__pyx_v_key_, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "adios.pyx":1822
+    /* "adios.pyx":1830
  * 
  *         for key_ in varname:
  *             if not isinstance(key_, str):             # <<<<<<<<<<<<<<
@@ -28092,20 +29059,20 @@ static PyObject *__pyx_pf_5adios_5group_2__getitem__(struct __pyx_obj_5adios_gro
     __pyx_t_1 = ((!(__pyx_t_2 != 0)) != 0);
     if (__pyx_t_1) {
 
-      /* "adios.pyx":1823
+      /* "adios.pyx":1831
  *         for key_ in varname:
  *             if not isinstance(key_, str):
  *                 raise TypeError("Unhashable type")             # <<<<<<<<<<<<<<
  * 
  *             if key_.startswith('/'):
  */
-      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__45, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1823, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__45, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1831, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_Raise(__pyx_t_3, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      __PYX_ERR(0, 1823, __pyx_L1_error)
+      __PYX_ERR(0, 1831, __pyx_L1_error)
 
-      /* "adios.pyx":1822
+      /* "adios.pyx":1830
  * 
  *         for key_ in varname:
  *             if not isinstance(key_, str):             # <<<<<<<<<<<<<<
@@ -28114,35 +29081,35 @@ static PyObject *__pyx_pf_5adios_5group_2__getitem__(struct __pyx_obj_5adios_gro
  */
     }
 
-    /* "adios.pyx":1825
+    /* "adios.pyx":1833
  *                 raise TypeError("Unhashable type")
  * 
  *             if key_.startswith('/'):             # <<<<<<<<<<<<<<
  *                 key_ = key_[1:]
  * 
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_key_, __pyx_n_s_startswith); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1825, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_key_, __pyx_n_s_startswith); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1833, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__46, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1825, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__46, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1833, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1825, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1833, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     if (__pyx_t_1) {
 
-      /* "adios.pyx":1826
+      /* "adios.pyx":1834
  * 
  *             if key_.startswith('/'):
  *                 key_ = key_[1:]             # <<<<<<<<<<<<<<
  * 
  *             if key_ in self.vars.keys():
  */
-      __pyx_t_7 = __Pyx_PyObject_GetSlice(__pyx_v_key_, 1, 0, NULL, NULL, &__pyx_slice__47, 1, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1826, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetSlice(__pyx_v_key_, 1, 0, NULL, NULL, &__pyx_slice__47, 1, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1834, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF_SET(__pyx_v_key_, __pyx_t_7);
       __pyx_t_7 = 0;
 
-      /* "adios.pyx":1825
+      /* "adios.pyx":1833
  *                 raise TypeError("Unhashable type")
  * 
  *             if key_.startswith('/'):             # <<<<<<<<<<<<<<
@@ -28151,17 +29118,17 @@ static PyObject *__pyx_pf_5adios_5group_2__getitem__(struct __pyx_obj_5adios_gro
  */
     }
 
-    /* "adios.pyx":1828
+    /* "adios.pyx":1836
  *                 key_ = key_[1:]
  * 
  *             if key_ in self.vars.keys():             # <<<<<<<<<<<<<<
  *                 return self.vars.get(key_)
  * 
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1828, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1836, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_8 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
       __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_3);
       if (likely(__pyx_t_8)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -28171,19 +29138,19 @@ static PyObject *__pyx_pf_5adios_5group_2__getitem__(struct __pyx_obj_5adios_gro
       }
     }
     if (__pyx_t_8) {
-      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1828, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1836, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     } else {
-      __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1828, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1836, __pyx_L1_error)
     }
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_1 = (__Pyx_PySequence_ContainsTF(__pyx_v_key_, __pyx_t_7, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1828, __pyx_L1_error)
+    __pyx_t_1 = (__Pyx_PySequence_ContainsTF(__pyx_v_key_, __pyx_t_7, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1836, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
 
-      /* "adios.pyx":1829
+      /* "adios.pyx":1837
  * 
  *             if key_ in self.vars.keys():
  *                 return self.vars.get(key_)             # <<<<<<<<<<<<<<
@@ -28191,10 +29158,10 @@ static PyObject *__pyx_pf_5adios_5group_2__getitem__(struct __pyx_obj_5adios_gro
  *             if key_ in self.attrs.keys():
  */
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1829, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1837, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __pyx_t_8 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
         __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_3);
         if (likely(__pyx_t_8)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -28204,18 +29171,36 @@ static PyObject *__pyx_pf_5adios_5group_2__getitem__(struct __pyx_obj_5adios_gro
         }
       }
       if (!__pyx_t_8) {
-        __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_key_); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1829, __pyx_L1_error)
+        __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_key_); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1837, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
       } else {
-        __pyx_t_9 = PyTuple_New(1+1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1829, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_9);
-        __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_8); __pyx_t_8 = NULL;
-        __Pyx_INCREF(__pyx_v_key_);
-        __Pyx_GIVEREF(__pyx_v_key_);
-        PyTuple_SET_ITEM(__pyx_t_9, 0+1, __pyx_v_key_);
-        __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_9, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1829, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_7);
-        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+        #if CYTHON_FAST_PYCALL
+        if (PyFunction_Check(__pyx_t_3)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_v_key_};
+          __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1837, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+          __Pyx_GOTREF(__pyx_t_7);
+        } else
+        #endif
+        #if CYTHON_FAST_PYCCALL
+        if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_v_key_};
+          __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1837, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+          __Pyx_GOTREF(__pyx_t_7);
+        } else
+        #endif
+        {
+          __pyx_t_9 = PyTuple_New(1+1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1837, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_9);
+          __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_8); __pyx_t_8 = NULL;
+          __Pyx_INCREF(__pyx_v_key_);
+          __Pyx_GIVEREF(__pyx_v_key_);
+          PyTuple_SET_ITEM(__pyx_t_9, 0+1, __pyx_v_key_);
+          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_9, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1837, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_7);
+          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+        }
       }
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_r = __pyx_t_7;
@@ -28223,7 +29208,7 @@ static PyObject *__pyx_pf_5adios_5group_2__getitem__(struct __pyx_obj_5adios_gro
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       goto __pyx_L0;
 
-      /* "adios.pyx":1828
+      /* "adios.pyx":1836
  *                 key_ = key_[1:]
  * 
  *             if key_ in self.vars.keys():             # <<<<<<<<<<<<<<
@@ -28232,17 +29217,17 @@ static PyObject *__pyx_pf_5adios_5group_2__getitem__(struct __pyx_obj_5adios_gro
  */
     }
 
-    /* "adios.pyx":1831
+    /* "adios.pyx":1839
  *                 return self.vars.get(key_)
  * 
  *             if key_ in self.attrs.keys():             # <<<<<<<<<<<<<<
  *                 return self.attrs.get(key_)
  * 
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1831, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1839, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_9 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
       __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_3);
       if (likely(__pyx_t_9)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -28252,19 +29237,19 @@ static PyObject *__pyx_pf_5adios_5group_2__getitem__(struct __pyx_obj_5adios_gro
       }
     }
     if (__pyx_t_9) {
-      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1831, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1839, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     } else {
-      __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1831, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1839, __pyx_L1_error)
     }
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_v_key_, __pyx_t_7, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1831, __pyx_L1_error)
+    __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_v_key_, __pyx_t_7, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1839, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __pyx_t_1 = (__pyx_t_2 != 0);
     if (__pyx_t_1) {
 
-      /* "adios.pyx":1832
+      /* "adios.pyx":1840
  * 
  *             if key_ in self.attrs.keys():
  *                 return self.attrs.get(key_)             # <<<<<<<<<<<<<<
@@ -28272,10 +29257,10 @@ static PyObject *__pyx_pf_5adios_5group_2__getitem__(struct __pyx_obj_5adios_gro
  *             if '/'+key_ in self.vars.keys():
  */
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1832, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1840, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __pyx_t_9 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
         __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_3);
         if (likely(__pyx_t_9)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -28285,18 +29270,36 @@ static PyObject *__pyx_pf_5adios_5group_2__getitem__(struct __pyx_obj_5adios_gro
         }
       }
       if (!__pyx_t_9) {
-        __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_key_); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1832, __pyx_L1_error)
+        __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_key_); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1840, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
       } else {
-        __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1832, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_8);
-        __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_9); __pyx_t_9 = NULL;
-        __Pyx_INCREF(__pyx_v_key_);
-        __Pyx_GIVEREF(__pyx_v_key_);
-        PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_v_key_);
-        __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_8, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1832, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_7);
-        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        #if CYTHON_FAST_PYCALL
+        if (PyFunction_Check(__pyx_t_3)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_9, __pyx_v_key_};
+          __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1840, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+          __Pyx_GOTREF(__pyx_t_7);
+        } else
+        #endif
+        #if CYTHON_FAST_PYCCALL
+        if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_9, __pyx_v_key_};
+          __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1840, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+          __Pyx_GOTREF(__pyx_t_7);
+        } else
+        #endif
+        {
+          __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1840, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_8);
+          __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_9); __pyx_t_9 = NULL;
+          __Pyx_INCREF(__pyx_v_key_);
+          __Pyx_GIVEREF(__pyx_v_key_);
+          PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_v_key_);
+          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_8, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1840, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_7);
+          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        }
       }
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_r = __pyx_t_7;
@@ -28304,7 +29307,7 @@ static PyObject *__pyx_pf_5adios_5group_2__getitem__(struct __pyx_obj_5adios_gro
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       goto __pyx_L0;
 
-      /* "adios.pyx":1831
+      /* "adios.pyx":1839
  *                 return self.vars.get(key_)
  * 
  *             if key_ in self.attrs.keys():             # <<<<<<<<<<<<<<
@@ -28313,19 +29316,19 @@ static PyObject *__pyx_pf_5adios_5group_2__getitem__(struct __pyx_obj_5adios_gro
  */
     }
 
-    /* "adios.pyx":1834
+    /* "adios.pyx":1842
  *                 return self.attrs.get(key_)
  * 
  *             if '/'+key_ in self.vars.keys():             # <<<<<<<<<<<<<<
  *                 return self.vars.get('/'+key_)
  * 
  */
-    __pyx_t_7 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1834, __pyx_L1_error)
+    __pyx_t_7 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1842, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
-    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1834, __pyx_L1_error)
+    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1842, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __pyx_t_9 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_8))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) {
       __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_8);
       if (likely(__pyx_t_9)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
@@ -28335,20 +29338,20 @@ static PyObject *__pyx_pf_5adios_5group_2__getitem__(struct __pyx_obj_5adios_gro
       }
     }
     if (__pyx_t_9) {
-      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1834, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1842, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     } else {
-      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1834, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1842, __pyx_L1_error)
     }
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-    __pyx_t_1 = (__Pyx_PySequence_ContainsTF(__pyx_t_7, __pyx_t_3, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1834, __pyx_L1_error)
+    __pyx_t_1 = (__Pyx_PySequence_ContainsTF(__pyx_t_7, __pyx_t_3, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1842, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
 
-      /* "adios.pyx":1835
+      /* "adios.pyx":1843
  * 
  *             if '/'+key_ in self.vars.keys():
  *                 return self.vars.get('/'+key_)             # <<<<<<<<<<<<<<
@@ -28356,12 +29359,12 @@ static PyObject *__pyx_pf_5adios_5group_2__getitem__(struct __pyx_obj_5adios_gro
  *             if '/'+key_ in self.attrs.keys():
  */
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_get); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1835, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_get); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1843, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      __pyx_t_8 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1835, __pyx_L1_error)
+      __pyx_t_8 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1843, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
       __pyx_t_9 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_7))) {
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
         __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_7);
         if (likely(__pyx_t_9)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
@@ -28371,19 +29374,39 @@ static PyObject *__pyx_pf_5adios_5group_2__getitem__(struct __pyx_obj_5adios_gro
         }
       }
       if (!__pyx_t_9) {
-        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1835, __pyx_L1_error)
+        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1843, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
         __Pyx_GOTREF(__pyx_t_3);
       } else {
-        __pyx_t_10 = PyTuple_New(1+1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1835, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_10);
-        __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_9); __pyx_t_9 = NULL;
-        __Pyx_GIVEREF(__pyx_t_8);
-        PyTuple_SET_ITEM(__pyx_t_10, 0+1, __pyx_t_8);
-        __pyx_t_8 = 0;
-        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1835, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_3);
-        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+        #if CYTHON_FAST_PYCALL
+        if (PyFunction_Check(__pyx_t_7)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_9, __pyx_t_8};
+          __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1843, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        } else
+        #endif
+        #if CYTHON_FAST_PYCCALL
+        if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_9, __pyx_t_8};
+          __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1843, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        } else
+        #endif
+        {
+          __pyx_t_10 = PyTuple_New(1+1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1843, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_10);
+          __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_9); __pyx_t_9 = NULL;
+          __Pyx_GIVEREF(__pyx_t_8);
+          PyTuple_SET_ITEM(__pyx_t_10, 0+1, __pyx_t_8);
+          __pyx_t_8 = 0;
+          __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1843, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+        }
       }
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       __pyx_r = __pyx_t_3;
@@ -28391,7 +29414,7 @@ static PyObject *__pyx_pf_5adios_5group_2__getitem__(struct __pyx_obj_5adios_gro
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       goto __pyx_L0;
 
-      /* "adios.pyx":1834
+      /* "adios.pyx":1842
  *                 return self.attrs.get(key_)
  * 
  *             if '/'+key_ in self.vars.keys():             # <<<<<<<<<<<<<<
@@ -28400,19 +29423,19 @@ static PyObject *__pyx_pf_5adios_5group_2__getitem__(struct __pyx_obj_5adios_gro
  */
     }
 
-    /* "adios.pyx":1837
+    /* "adios.pyx":1845
  *                 return self.vars.get('/'+key_)
  * 
  *             if '/'+key_ in self.attrs.keys():             # <<<<<<<<<<<<<<
  *                 return self.attrs.get('/'+key_)
  * 
  */
-    __pyx_t_3 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1837, __pyx_L1_error)
+    __pyx_t_3 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1845, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1837, __pyx_L1_error)
+    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1845, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_10);
     __pyx_t_8 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_10))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_10))) {
       __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_10);
       if (likely(__pyx_t_8)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
@@ -28422,20 +29445,20 @@ static PyObject *__pyx_pf_5adios_5group_2__getitem__(struct __pyx_obj_5adios_gro
       }
     }
     if (__pyx_t_8) {
-      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1837, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1845, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     } else {
-      __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_10); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1837, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_10); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1845, __pyx_L1_error)
     }
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
-    __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_3, __pyx_t_7, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1837, __pyx_L1_error)
+    __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_3, __pyx_t_7, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1845, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __pyx_t_1 = (__pyx_t_2 != 0);
     if (__pyx_t_1) {
 
-      /* "adios.pyx":1838
+      /* "adios.pyx":1846
  * 
  *             if '/'+key_ in self.attrs.keys():
  *                 return self.attrs.get('/'+key_)             # <<<<<<<<<<<<<<
@@ -28443,12 +29466,12 @@ static PyObject *__pyx_pf_5adios_5group_2__getitem__(struct __pyx_obj_5adios_gro
  *             for name in self.vars.keys():
  */
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1838, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1846, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_10 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1838, __pyx_L1_error)
+      __pyx_t_10 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1846, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_10);
       __pyx_t_8 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
         __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_3);
         if (likely(__pyx_t_8)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -28458,19 +29481,39 @@ static PyObject *__pyx_pf_5adios_5group_2__getitem__(struct __pyx_obj_5adios_gro
         }
       }
       if (!__pyx_t_8) {
-        __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_10); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1838, __pyx_L1_error)
+        __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_10); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1846, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
         __Pyx_GOTREF(__pyx_t_7);
       } else {
-        __pyx_t_9 = PyTuple_New(1+1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1838, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_9);
-        __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_8); __pyx_t_8 = NULL;
-        __Pyx_GIVEREF(__pyx_t_10);
-        PyTuple_SET_ITEM(__pyx_t_9, 0+1, __pyx_t_10);
-        __pyx_t_10 = 0;
-        __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_9, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1838, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_7);
-        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+        #if CYTHON_FAST_PYCALL
+        if (PyFunction_Check(__pyx_t_3)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_t_10};
+          __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1846, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+          __Pyx_GOTREF(__pyx_t_7);
+          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+        } else
+        #endif
+        #if CYTHON_FAST_PYCCALL
+        if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_t_10};
+          __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1846, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+          __Pyx_GOTREF(__pyx_t_7);
+          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+        } else
+        #endif
+        {
+          __pyx_t_9 = PyTuple_New(1+1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1846, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_9);
+          __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_8); __pyx_t_8 = NULL;
+          __Pyx_GIVEREF(__pyx_t_10);
+          PyTuple_SET_ITEM(__pyx_t_9, 0+1, __pyx_t_10);
+          __pyx_t_10 = 0;
+          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_9, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1846, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_7);
+          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+        }
       }
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_r = __pyx_t_7;
@@ -28478,7 +29521,7 @@ static PyObject *__pyx_pf_5adios_5group_2__getitem__(struct __pyx_obj_5adios_gro
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       goto __pyx_L0;
 
-      /* "adios.pyx":1837
+      /* "adios.pyx":1845
  *                 return self.vars.get('/'+key_)
  * 
  *             if '/'+key_ in self.attrs.keys():             # <<<<<<<<<<<<<<
@@ -28487,17 +29530,17 @@ static PyObject *__pyx_pf_5adios_5group_2__getitem__(struct __pyx_obj_5adios_gro
  */
     }
 
-    /* "adios.pyx":1840
+    /* "adios.pyx":1848
  *                 return self.attrs.get('/'+key_)
  * 
  *             for name in self.vars.keys():             # <<<<<<<<<<<<<<
  *                 #if (key_ == os.path.dirname(name)) or ('/' + key_ == os.path.dirname(name)):
  *                 if name.startswith(key_) or name.startswith('/'+key_):
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1840, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1848, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_9 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
       __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_3);
       if (likely(__pyx_t_9)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -28507,10 +29550,10 @@ static PyObject *__pyx_pf_5adios_5group_2__getitem__(struct __pyx_obj_5adios_gro
       }
     }
     if (__pyx_t_9) {
-      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1840, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1848, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     } else {
-      __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1840, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1848, __pyx_L1_error)
     }
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -28518,27 +29561,27 @@ static PyObject *__pyx_pf_5adios_5group_2__getitem__(struct __pyx_obj_5adios_gro
       __pyx_t_3 = __pyx_t_7; __Pyx_INCREF(__pyx_t_3); __pyx_t_11 = 0;
       __pyx_t_12 = NULL;
     } else {
-      __pyx_t_11 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1840, __pyx_L1_error)
+      __pyx_t_11 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1848, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_12 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1840, __pyx_L1_error)
+      __pyx_t_12 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1848, __pyx_L1_error)
     }
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     for (;;) {
       if (likely(!__pyx_t_12)) {
         if (likely(PyList_CheckExact(__pyx_t_3))) {
           if (__pyx_t_11 >= PyList_GET_SIZE(__pyx_t_3)) break;
-          #if CYTHON_COMPILING_IN_CPYTHON
-          __pyx_t_7 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_11); __Pyx_INCREF(__pyx_t_7); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 1840, __pyx_L1_error)
+          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+          __pyx_t_7 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_11); __Pyx_INCREF(__pyx_t_7); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 1848, __pyx_L1_error)
           #else
-          __pyx_t_7 = PySequence_ITEM(__pyx_t_3, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1840, __pyx_L1_error)
+          __pyx_t_7 = PySequence_ITEM(__pyx_t_3, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1848, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_7);
           #endif
         } else {
           if (__pyx_t_11 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
-          #if CYTHON_COMPILING_IN_CPYTHON
-          __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_11); __Pyx_INCREF(__pyx_t_7); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 1840, __pyx_L1_error)
+          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+          __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_11); __Pyx_INCREF(__pyx_t_7); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 1848, __pyx_L1_error)
           #else
-          __pyx_t_7 = PySequence_ITEM(__pyx_t_3, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1840, __pyx_L1_error)
+          __pyx_t_7 = PySequence_ITEM(__pyx_t_3, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1848, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_7);
           #endif
         }
@@ -28548,7 +29591,7 @@ static PyObject *__pyx_pf_5adios_5group_2__getitem__(struct __pyx_obj_5adios_gro
           PyObject* exc_type = PyErr_Occurred();
           if (exc_type) {
             if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-            else __PYX_ERR(0, 1840, __pyx_L1_error)
+            else __PYX_ERR(0, 1848, __pyx_L1_error)
           }
           break;
         }
@@ -28557,17 +29600,17 @@ static PyObject *__pyx_pf_5adios_5group_2__getitem__(struct __pyx_obj_5adios_gro
       __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_7);
       __pyx_t_7 = 0;
 
-      /* "adios.pyx":1842
+      /* "adios.pyx":1850
  *             for name in self.vars.keys():
  *                 #if (key_ == os.path.dirname(name)) or ('/' + key_ == os.path.dirname(name)):
  *                 if name.startswith(key_) or name.startswith('/'+key_):             # <<<<<<<<<<<<<<
  *                     return group(self.file, self.name + '/' + key_)
  * 
  */
-      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_startswith); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1842, __pyx_L1_error)
+      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_startswith); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1850, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
       __pyx_t_10 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_9))) {
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
         __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_9);
         if (likely(__pyx_t_10)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
@@ -28577,33 +29620,51 @@ static PyObject *__pyx_pf_5adios_5group_2__getitem__(struct __pyx_obj_5adios_gro
         }
       }
       if (!__pyx_t_10) {
-        __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_v_key_); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1842, __pyx_L1_error)
+        __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_v_key_); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1850, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
       } else {
-        __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1842, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_8);
-        __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_10); __pyx_t_10 = NULL;
-        __Pyx_INCREF(__pyx_v_key_);
-        __Pyx_GIVEREF(__pyx_v_key_);
-        PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_v_key_);
-        __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_8, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1842, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_7);
-        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        #if CYTHON_FAST_PYCALL
+        if (PyFunction_Check(__pyx_t_9)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_10, __pyx_v_key_};
+          __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_9, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1850, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
+          __Pyx_GOTREF(__pyx_t_7);
+        } else
+        #endif
+        #if CYTHON_FAST_PYCCALL
+        if (__Pyx_PyFastCFunction_Check(__pyx_t_9)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_10, __pyx_v_key_};
+          __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_9, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1850, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
+          __Pyx_GOTREF(__pyx_t_7);
+        } else
+        #endif
+        {
+          __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1850, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_8);
+          __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_10); __pyx_t_10 = NULL;
+          __Pyx_INCREF(__pyx_v_key_);
+          __Pyx_GIVEREF(__pyx_v_key_);
+          PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_v_key_);
+          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_8, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1850, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_7);
+          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        }
       }
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1842, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1850, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       if (!__pyx_t_2) {
       } else {
         __pyx_t_1 = __pyx_t_2;
         goto __pyx_L16_bool_binop_done;
       }
-      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_startswith); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1842, __pyx_L1_error)
+      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_startswith); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1850, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
-      __pyx_t_8 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1842, __pyx_L1_error)
+      __pyx_t_8 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1850, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
       __pyx_t_10 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_9))) {
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
         __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_9);
         if (likely(__pyx_t_10)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
@@ -28613,28 +29674,48 @@ static PyObject *__pyx_pf_5adios_5group_2__getitem__(struct __pyx_obj_5adios_gro
         }
       }
       if (!__pyx_t_10) {
-        __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1842, __pyx_L1_error)
+        __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1850, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
         __Pyx_GOTREF(__pyx_t_7);
       } else {
-        __pyx_t_13 = PyTuple_New(1+1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1842, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_13);
-        __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_10); __pyx_t_10 = NULL;
-        __Pyx_GIVEREF(__pyx_t_8);
-        PyTuple_SET_ITEM(__pyx_t_13, 0+1, __pyx_t_8);
-        __pyx_t_8 = 0;
-        __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_13, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1842, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_7);
-        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+        #if CYTHON_FAST_PYCALL
+        if (PyFunction_Check(__pyx_t_9)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_10, __pyx_t_8};
+          __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_9, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1850, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
+          __Pyx_GOTREF(__pyx_t_7);
+          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        } else
+        #endif
+        #if CYTHON_FAST_PYCCALL
+        if (__Pyx_PyFastCFunction_Check(__pyx_t_9)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_10, __pyx_t_8};
+          __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_9, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1850, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
+          __Pyx_GOTREF(__pyx_t_7);
+          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        } else
+        #endif
+        {
+          __pyx_t_13 = PyTuple_New(1+1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1850, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_13);
+          __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_10); __pyx_t_10 = NULL;
+          __Pyx_GIVEREF(__pyx_t_8);
+          PyTuple_SET_ITEM(__pyx_t_13, 0+1, __pyx_t_8);
+          __pyx_t_8 = 0;
+          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_13, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1850, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_7);
+          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+        }
       }
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1842, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1850, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       __pyx_t_1 = __pyx_t_2;
       __pyx_L16_bool_binop_done:;
       if (__pyx_t_1) {
 
-        /* "adios.pyx":1843
+        /* "adios.pyx":1851
  *                 #if (key_ == os.path.dirname(name)) or ('/' + key_ == os.path.dirname(name)):
  *                 if name.startswith(key_) or name.startswith('/'+key_):
  *                     return group(self.file, self.name + '/' + key_)             # <<<<<<<<<<<<<<
@@ -28642,12 +29723,12 @@ static PyObject *__pyx_pf_5adios_5group_2__getitem__(struct __pyx_obj_5adios_gro
  *             for name in self.attrs.keys():
  */
         __Pyx_XDECREF(__pyx_r);
-        __pyx_t_7 = PyNumber_Add(__pyx_v_self->name, __pyx_kp_s_); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1843, __pyx_L1_error)
+        __pyx_t_7 = PyNumber_Add(__pyx_v_self->name, __pyx_kp_s_); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1851, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
-        __pyx_t_9 = PyNumber_Add(__pyx_t_7, __pyx_v_key_); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1843, __pyx_L1_error)
+        __pyx_t_9 = PyNumber_Add(__pyx_t_7, __pyx_v_key_); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1851, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_9);
         __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-        __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1843, __pyx_L1_error)
+        __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1851, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
         __Pyx_INCREF(((PyObject *)__pyx_v_self->file));
         __Pyx_GIVEREF(((PyObject *)__pyx_v_self->file));
@@ -28655,7 +29736,7 @@ static PyObject *__pyx_pf_5adios_5group_2__getitem__(struct __pyx_obj_5adios_gro
         __Pyx_GIVEREF(__pyx_t_9);
         PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_9);
         __pyx_t_9 = 0;
-        __pyx_t_9 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5adios_group), __pyx_t_7, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1843, __pyx_L1_error)
+        __pyx_t_9 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5adios_group), __pyx_t_7, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1851, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_9);
         __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
         __pyx_r = __pyx_t_9;
@@ -28664,7 +29745,7 @@ static PyObject *__pyx_pf_5adios_5group_2__getitem__(struct __pyx_obj_5adios_gro
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
         goto __pyx_L0;
 
-        /* "adios.pyx":1842
+        /* "adios.pyx":1850
  *             for name in self.vars.keys():
  *                 #if (key_ == os.path.dirname(name)) or ('/' + key_ == os.path.dirname(name)):
  *                 if name.startswith(key_) or name.startswith('/'+key_):             # <<<<<<<<<<<<<<
@@ -28673,7 +29754,7 @@ static PyObject *__pyx_pf_5adios_5group_2__getitem__(struct __pyx_obj_5adios_gro
  */
       }
 
-      /* "adios.pyx":1840
+      /* "adios.pyx":1848
  *                 return self.attrs.get('/'+key_)
  * 
  *             for name in self.vars.keys():             # <<<<<<<<<<<<<<
@@ -28683,17 +29764,17 @@ static PyObject *__pyx_pf_5adios_5group_2__getitem__(struct __pyx_obj_5adios_gro
     }
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "adios.pyx":1845
+    /* "adios.pyx":1853
  *                     return group(self.file, self.name + '/' + key_)
  * 
  *             for name in self.attrs.keys():             # <<<<<<<<<<<<<<
  *                 #if (key_ == os.path.dirname(name)) or ('/' + key_ == os.path.dirname(name)):
  *                 if name.startswith(key_) or name.startswith('/'+key_):
  */
-    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1845, __pyx_L1_error)
+    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1853, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
     __pyx_t_7 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_9))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
       __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_9);
       if (likely(__pyx_t_7)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
@@ -28703,10 +29784,10 @@ static PyObject *__pyx_pf_5adios_5group_2__getitem__(struct __pyx_obj_5adios_gro
       }
     }
     if (__pyx_t_7) {
-      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1845, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1853, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     } else {
-      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1845, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1853, __pyx_L1_error)
     }
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
@@ -28714,27 +29795,27 @@ static PyObject *__pyx_pf_5adios_5group_2__getitem__(struct __pyx_obj_5adios_gro
       __pyx_t_9 = __pyx_t_3; __Pyx_INCREF(__pyx_t_9); __pyx_t_11 = 0;
       __pyx_t_12 = NULL;
     } else {
-      __pyx_t_11 = -1; __pyx_t_9 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1845, __pyx_L1_error)
+      __pyx_t_11 = -1; __pyx_t_9 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1853, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
-      __pyx_t_12 = Py_TYPE(__pyx_t_9)->tp_iternext; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1845, __pyx_L1_error)
+      __pyx_t_12 = Py_TYPE(__pyx_t_9)->tp_iternext; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1853, __pyx_L1_error)
     }
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     for (;;) {
       if (likely(!__pyx_t_12)) {
         if (likely(PyList_CheckExact(__pyx_t_9))) {
           if (__pyx_t_11 >= PyList_GET_SIZE(__pyx_t_9)) break;
-          #if CYTHON_COMPILING_IN_CPYTHON
-          __pyx_t_3 = PyList_GET_ITEM(__pyx_t_9, __pyx_t_11); __Pyx_INCREF(__pyx_t_3); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 1845, __pyx_L1_error)
+          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+          __pyx_t_3 = PyList_GET_ITEM(__pyx_t_9, __pyx_t_11); __Pyx_INCREF(__pyx_t_3); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 1853, __pyx_L1_error)
           #else
-          __pyx_t_3 = PySequence_ITEM(__pyx_t_9, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1845, __pyx_L1_error)
+          __pyx_t_3 = PySequence_ITEM(__pyx_t_9, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1853, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_3);
           #endif
         } else {
           if (__pyx_t_11 >= PyTuple_GET_SIZE(__pyx_t_9)) break;
-          #if CYTHON_COMPILING_IN_CPYTHON
-          __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_9, __pyx_t_11); __Pyx_INCREF(__pyx_t_3); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 1845, __pyx_L1_error)
+          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+          __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_9, __pyx_t_11); __Pyx_INCREF(__pyx_t_3); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 1853, __pyx_L1_error)
           #else
-          __pyx_t_3 = PySequence_ITEM(__pyx_t_9, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1845, __pyx_L1_error)
+          __pyx_t_3 = PySequence_ITEM(__pyx_t_9, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1853, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_3);
           #endif
         }
@@ -28744,7 +29825,7 @@ static PyObject *__pyx_pf_5adios_5group_2__getitem__(struct __pyx_obj_5adios_gro
           PyObject* exc_type = PyErr_Occurred();
           if (exc_type) {
             if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-            else __PYX_ERR(0, 1845, __pyx_L1_error)
+            else __PYX_ERR(0, 1853, __pyx_L1_error)
           }
           break;
         }
@@ -28753,17 +29834,17 @@ static PyObject *__pyx_pf_5adios_5group_2__getitem__(struct __pyx_obj_5adios_gro
       __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_3);
       __pyx_t_3 = 0;
 
-      /* "adios.pyx":1847
+      /* "adios.pyx":1855
  *             for name in self.attrs.keys():
  *                 #if (key_ == os.path.dirname(name)) or ('/' + key_ == os.path.dirname(name)):
  *                 if name.startswith(key_) or name.startswith('/'+key_):             # <<<<<<<<<<<<<<
  *                     return group(self.file, self.name + '/' + key_)
  * 
  */
-      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_startswith); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1847, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_startswith); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1855, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __pyx_t_13 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_7))) {
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
         __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_7);
         if (likely(__pyx_t_13)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
@@ -28773,33 +29854,51 @@ static PyObject *__pyx_pf_5adios_5group_2__getitem__(struct __pyx_obj_5adios_gro
         }
       }
       if (!__pyx_t_13) {
-        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_v_key_); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1847, __pyx_L1_error)
+        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_v_key_); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1855, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
       } else {
-        __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1847, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_8);
-        __Pyx_GIVEREF(__pyx_t_13); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_13); __pyx_t_13 = NULL;
-        __Pyx_INCREF(__pyx_v_key_);
-        __Pyx_GIVEREF(__pyx_v_key_);
-        PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_v_key_);
-        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1847, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_3);
-        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        #if CYTHON_FAST_PYCALL
+        if (PyFunction_Check(__pyx_t_7)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_13, __pyx_v_key_};
+          __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1855, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
+          __Pyx_GOTREF(__pyx_t_3);
+        } else
+        #endif
+        #if CYTHON_FAST_PYCCALL
+        if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_13, __pyx_v_key_};
+          __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1855, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
+          __Pyx_GOTREF(__pyx_t_3);
+        } else
+        #endif
+        {
+          __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1855, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_8);
+          __Pyx_GIVEREF(__pyx_t_13); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_13); __pyx_t_13 = NULL;
+          __Pyx_INCREF(__pyx_v_key_);
+          __Pyx_GIVEREF(__pyx_v_key_);
+          PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_v_key_);
+          __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1855, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        }
       }
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1847, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1855, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       if (!__pyx_t_2) {
       } else {
         __pyx_t_1 = __pyx_t_2;
         goto __pyx_L21_bool_binop_done;
       }
-      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_startswith); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1847, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_startswith); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1855, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      __pyx_t_8 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1847, __pyx_L1_error)
+      __pyx_t_8 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1855, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
       __pyx_t_13 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_7))) {
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
         __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_7);
         if (likely(__pyx_t_13)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
@@ -28809,28 +29908,48 @@ static PyObject *__pyx_pf_5adios_5group_2__getitem__(struct __pyx_obj_5adios_gro
         }
       }
       if (!__pyx_t_13) {
-        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1847, __pyx_L1_error)
+        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1855, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
         __Pyx_GOTREF(__pyx_t_3);
       } else {
-        __pyx_t_10 = PyTuple_New(1+1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1847, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_10);
-        __Pyx_GIVEREF(__pyx_t_13); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_13); __pyx_t_13 = NULL;
-        __Pyx_GIVEREF(__pyx_t_8);
-        PyTuple_SET_ITEM(__pyx_t_10, 0+1, __pyx_t_8);
-        __pyx_t_8 = 0;
-        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1847, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_3);
-        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+        #if CYTHON_FAST_PYCALL
+        if (PyFunction_Check(__pyx_t_7)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_13, __pyx_t_8};
+          __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1855, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
+          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        } else
+        #endif
+        #if CYTHON_FAST_PYCCALL
+        if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_13, __pyx_t_8};
+          __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1855, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
+          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        } else
+        #endif
+        {
+          __pyx_t_10 = PyTuple_New(1+1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1855, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_10);
+          __Pyx_GIVEREF(__pyx_t_13); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_13); __pyx_t_13 = NULL;
+          __Pyx_GIVEREF(__pyx_t_8);
+          PyTuple_SET_ITEM(__pyx_t_10, 0+1, __pyx_t_8);
+          __pyx_t_8 = 0;
+          __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1855, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+        }
       }
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1847, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1855, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_t_1 = __pyx_t_2;
       __pyx_L21_bool_binop_done:;
       if (__pyx_t_1) {
 
-        /* "adios.pyx":1848
+        /* "adios.pyx":1856
  *                 #if (key_ == os.path.dirname(name)) or ('/' + key_ == os.path.dirname(name)):
  *                 if name.startswith(key_) or name.startswith('/'+key_):
  *                     return group(self.file, self.name + '/' + key_)             # <<<<<<<<<<<<<<
@@ -28838,12 +29957,12 @@ static PyObject *__pyx_pf_5adios_5group_2__getitem__(struct __pyx_obj_5adios_gro
  *         raise KeyError(key_)
  */
         __Pyx_XDECREF(__pyx_r);
-        __pyx_t_3 = PyNumber_Add(__pyx_v_self->name, __pyx_kp_s_); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1848, __pyx_L1_error)
+        __pyx_t_3 = PyNumber_Add(__pyx_v_self->name, __pyx_kp_s_); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1856, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
-        __pyx_t_7 = PyNumber_Add(__pyx_t_3, __pyx_v_key_); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1848, __pyx_L1_error)
+        __pyx_t_7 = PyNumber_Add(__pyx_t_3, __pyx_v_key_); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1856, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-        __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1848, __pyx_L1_error)
+        __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1856, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
         __Pyx_INCREF(((PyObject *)__pyx_v_self->file));
         __Pyx_GIVEREF(((PyObject *)__pyx_v_self->file));
@@ -28851,7 +29970,7 @@ static PyObject *__pyx_pf_5adios_5group_2__getitem__(struct __pyx_obj_5adios_gro
         __Pyx_GIVEREF(__pyx_t_7);
         PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_7);
         __pyx_t_7 = 0;
-        __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5adios_group), __pyx_t_3, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1848, __pyx_L1_error)
+        __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5adios_group), __pyx_t_3, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1856, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
         __pyx_r = __pyx_t_7;
@@ -28860,7 +29979,7 @@ static PyObject *__pyx_pf_5adios_5group_2__getitem__(struct __pyx_obj_5adios_gro
         __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
         goto __pyx_L0;
 
-        /* "adios.pyx":1847
+        /* "adios.pyx":1855
  *             for name in self.attrs.keys():
  *                 #if (key_ == os.path.dirname(name)) or ('/' + key_ == os.path.dirname(name)):
  *                 if name.startswith(key_) or name.startswith('/'+key_):             # <<<<<<<<<<<<<<
@@ -28869,7 +29988,7 @@ static PyObject *__pyx_pf_5adios_5group_2__getitem__(struct __pyx_obj_5adios_gro
  */
       }
 
-      /* "adios.pyx":1845
+      /* "adios.pyx":1853
  *                     return group(self.file, self.name + '/' + key_)
  * 
  *             for name in self.attrs.keys():             # <<<<<<<<<<<<<<
@@ -28879,7 +29998,7 @@ static PyObject *__pyx_pf_5adios_5group_2__getitem__(struct __pyx_obj_5adios_gro
     }
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-    /* "adios.pyx":1821
+    /* "adios.pyx":1829
  *             raise KeyError(varname)
  * 
  *         for key_ in varname:             # <<<<<<<<<<<<<<
@@ -28889,27 +30008,27 @@ static PyObject *__pyx_pf_5adios_5group_2__getitem__(struct __pyx_obj_5adios_gro
   }
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "adios.pyx":1850
+  /* "adios.pyx":1858
  *                     return group(self.file, self.name + '/' + key_)
  * 
  *         raise KeyError(key_)             # <<<<<<<<<<<<<<
  * 
  *     def __repr__(self):
  */
-  if (unlikely(!__pyx_v_key_)) { __Pyx_RaiseUnboundLocalError("key_"); __PYX_ERR(0, 1850, __pyx_L1_error) }
-  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1850, __pyx_L1_error)
+  if (unlikely(!__pyx_v_key_)) { __Pyx_RaiseUnboundLocalError("key_"); __PYX_ERR(0, 1858, __pyx_L1_error) }
+  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1858, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_INCREF(__pyx_v_key_);
   __Pyx_GIVEREF(__pyx_v_key_);
   PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_key_);
-  __pyx_t_9 = __Pyx_PyObject_Call(__pyx_builtin_KeyError, __pyx_t_5, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1850, __pyx_L1_error)
+  __pyx_t_9 = __Pyx_PyObject_Call(__pyx_builtin_KeyError, __pyx_t_5, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1858, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_Raise(__pyx_t_9, 0, 0, 0);
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-  __PYX_ERR(0, 1850, __pyx_L1_error)
+  __PYX_ERR(0, 1858, __pyx_L1_error)
 
-  /* "adios.pyx":1804
+  /* "adios.pyx":1812
  *                 self.attrs[name.replace('/' + self.name + '/', '', 1)] = self.file.attrs[name]
  * 
  *     def __getitem__(self, varname):             # <<<<<<<<<<<<<<
@@ -28937,7 +30056,7 @@ static PyObject *__pyx_pf_5adios_5group_2__getitem__(struct __pyx_obj_5adios_gro
   return __pyx_r;
 }
 
-/* "adios.pyx":1852
+/* "adios.pyx":1860
  *         raise KeyError(key_)
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -28971,7 +30090,7 @@ static PyObject *__pyx_pf_5adios_5group_4__repr__(struct __pyx_obj_5adios_group
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("__repr__", 0);
 
-  /* "adios.pyx":1854
+  /* "adios.pyx":1862
  *     def __repr__(self):
  *         """ Return string representation. """
  *         return ("AdiosGroup (vars=%r, attrs=%r)") % \             # <<<<<<<<<<<<<<
@@ -28980,17 +30099,17 @@ static PyObject *__pyx_pf_5adios_5group_4__repr__(struct __pyx_obj_5adios_group
  */
   __Pyx_XDECREF(__pyx_r);
 
-  /* "adios.pyx":1855
+  /* "adios.pyx":1863
  *         """ Return string representation. """
  *         return ("AdiosGroup (vars=%r, attrs=%r)") % \
  *                 (self.vars.keys(),             # <<<<<<<<<<<<<<
  *                  self.attrs.keys())
  * 
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1855, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1863, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
     __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
     if (likely(__pyx_t_3)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
@@ -29000,25 +30119,25 @@ static PyObject *__pyx_pf_5adios_5group_4__repr__(struct __pyx_obj_5adios_group
     }
   }
   if (__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1855, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1863, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   } else {
-    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1855, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1863, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "adios.pyx":1856
+  /* "adios.pyx":1864
  *         return ("AdiosGroup (vars=%r, attrs=%r)") % \
  *                 (self.vars.keys(),
  *                  self.attrs.keys())             # <<<<<<<<<<<<<<
  * 
  *     ## To support ipython tab completion
  */
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1856, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1864, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_4 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
     __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
     if (likely(__pyx_t_4)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -29028,22 +30147,22 @@ static PyObject *__pyx_pf_5adios_5group_4__repr__(struct __pyx_obj_5adios_group
     }
   }
   if (__pyx_t_4) {
-    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1856, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1864, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   } else {
-    __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1856, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1864, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "adios.pyx":1855
+  /* "adios.pyx":1863
  *         """ Return string representation. """
  *         return ("AdiosGroup (vars=%r, attrs=%r)") % \
  *                 (self.vars.keys(),             # <<<<<<<<<<<<<<
  *                  self.attrs.keys())
  * 
  */
-  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1855, __pyx_L1_error)
+  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1863, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
@@ -29052,21 +30171,21 @@ static PyObject *__pyx_pf_5adios_5group_4__repr__(struct __pyx_obj_5adios_group
   __pyx_t_1 = 0;
   __pyx_t_2 = 0;
 
-  /* "adios.pyx":1854
+  /* "adios.pyx":1862
  *     def __repr__(self):
  *         """ Return string representation. """
  *         return ("AdiosGroup (vars=%r, attrs=%r)") % \             # <<<<<<<<<<<<<<
  *                 (self.vars.keys(),
  *                  self.attrs.keys())
  */
-  __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_AdiosGroup_vars_r_attrs_r, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1854, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_AdiosGroup_vars_r_attrs_r, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1862, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":1852
+  /* "adios.pyx":1860
  *         raise KeyError(key_)
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -29088,7 +30207,7 @@ static PyObject *__pyx_pf_5adios_5group_4__repr__(struct __pyx_obj_5adios_group
   return __pyx_r;
 }
 
-/* "adios.pyx":1859
+/* "adios.pyx":1867
  * 
  *     ## To support ipython tab completion
  *     def __getattr__(self, varname):             # <<<<<<<<<<<<<<
@@ -29118,7 +30237,7 @@ static PyObject *__pyx_pf_5adios_5group_6__getattr__(struct __pyx_obj_5adios_gro
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("__getattr__", 0);
 
-  /* "adios.pyx":1860
+  /* "adios.pyx":1868
  *     ## To support ipython tab completion
  *     def __getattr__(self, varname):
  *         return self.__getitem__(varname)             # <<<<<<<<<<<<<<
@@ -29126,10 +30245,10 @@ static PyObject *__pyx_pf_5adios_5group_6__getattr__(struct __pyx_obj_5adios_gro
  *     def __dir__(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getitem); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1860, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getitem); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1868, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
     __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
     if (likely(__pyx_t_3)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
@@ -29139,25 +30258,43 @@ static PyObject *__pyx_pf_5adios_5group_6__getattr__(struct __pyx_obj_5adios_gro
     }
   }
   if (!__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_varname); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1860, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_varname); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1868, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1860, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_4);
-    __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
-    __Pyx_INCREF(__pyx_v_varname);
-    __Pyx_GIVEREF(__pyx_v_varname);
-    PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_varname);
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1860, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_varname};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1868, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_varname};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1868, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1868, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+      __Pyx_INCREF(__pyx_v_varname);
+      __Pyx_GIVEREF(__pyx_v_varname);
+      PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_varname);
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1868, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    }
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":1859
+  /* "adios.pyx":1867
  * 
  *     ## To support ipython tab completion
  *     def __getattr__(self, varname):             # <<<<<<<<<<<<<<
@@ -29179,7 +30316,7 @@ static PyObject *__pyx_pf_5adios_5group_6__getattr__(struct __pyx_obj_5adios_gro
   return __pyx_r;
 }
 
-/* "adios.pyx":1862
+/* "adios.pyx":1870
  *         return self.__getitem__(varname)
  * 
  *     def __dir__(self):             # <<<<<<<<<<<<<<
@@ -29214,31 +30351,31 @@ static PyObject *__pyx_pf_5adios_5group_8__dir__(struct __pyx_obj_5adios_group *
   PyObject *__pyx_t_5 = NULL;
   __Pyx_RefNannySetupContext("__dir__", 0);
 
-  /* "adios.pyx":1863
+  /* "adios.pyx":1871
  * 
  *     def __dir__(self):
  *         k0 = dir(type(self))             # <<<<<<<<<<<<<<
  *         k1 = normalize_key(self.vars.keys())
  *         k2 = normalize_key(self.attrs.keys())
  */
-  __pyx_t_1 = PyObject_Dir(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1863, __pyx_L1_error)
+  __pyx_t_1 = PyObject_Dir(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1871, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_k0 = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "adios.pyx":1864
+  /* "adios.pyx":1872
  *     def __dir__(self):
  *         k0 = dir(type(self))
  *         k1 = normalize_key(self.vars.keys())             # <<<<<<<<<<<<<<
  *         k2 = normalize_key(self.attrs.keys())
  *         return k0 + k1 + k2
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_normalize_key); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1864, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_normalize_key); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1872, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1864, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1872, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_t_5 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
     __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
     if (likely(__pyx_t_5)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
@@ -29248,15 +30385,15 @@ static PyObject *__pyx_pf_5adios_5group_8__dir__(struct __pyx_obj_5adios_group *
     }
   }
   if (__pyx_t_5) {
-    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1864, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1872, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   } else {
-    __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1864, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1872, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_t_4 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
     __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
     if (likely(__pyx_t_4)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
@@ -29266,37 +30403,57 @@ static PyObject *__pyx_pf_5adios_5group_8__dir__(struct __pyx_obj_5adios_group *
     }
   }
   if (!__pyx_t_4) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1864, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1872, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1864, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_5);
-    __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); __pyx_t_4 = NULL;
-    __Pyx_GIVEREF(__pyx_t_3);
-    PyTuple_SET_ITEM(__pyx_t_5, 0+1, __pyx_t_3);
-    __pyx_t_3 = 0;
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1864, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_t_3};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1872, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_t_3};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1872, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    } else
+    #endif
+    {
+      __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1872, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_5);
+      __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); __pyx_t_4 = NULL;
+      __Pyx_GIVEREF(__pyx_t_3);
+      PyTuple_SET_ITEM(__pyx_t_5, 0+1, __pyx_t_3);
+      __pyx_t_3 = 0;
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1872, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    }
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_v_k1 = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "adios.pyx":1865
+  /* "adios.pyx":1873
  *         k0 = dir(type(self))
  *         k1 = normalize_key(self.vars.keys())
  *         k2 = normalize_key(self.attrs.keys())             # <<<<<<<<<<<<<<
  *         return k0 + k1 + k2
  * 
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_normalize_key); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1865, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_normalize_key); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1873, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1865, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1873, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_4 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
     __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
     if (likely(__pyx_t_4)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -29306,15 +30463,15 @@ static PyObject *__pyx_pf_5adios_5group_8__dir__(struct __pyx_obj_5adios_group *
     }
   }
   if (__pyx_t_4) {
-    __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1865, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1873, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   } else {
-    __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1865, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1873, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
     __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
     if (likely(__pyx_t_3)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
@@ -29324,25 +30481,45 @@ static PyObject *__pyx_pf_5adios_5group_8__dir__(struct __pyx_obj_5adios_group *
     }
   }
   if (!__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1865, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1873, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1865, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_4);
-    __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
-    __Pyx_GIVEREF(__pyx_t_5);
-    PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_t_5);
-    __pyx_t_5 = 0;
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1865, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_t_5};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1873, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_t_5};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1873, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    } else
+    #endif
+    {
+      __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1873, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+      __Pyx_GIVEREF(__pyx_t_5);
+      PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_t_5);
+      __pyx_t_5 = 0;
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1873, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    }
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_v_k2 = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "adios.pyx":1866
+  /* "adios.pyx":1874
  *         k1 = normalize_key(self.vars.keys())
  *         k2 = normalize_key(self.attrs.keys())
  *         return k0 + k1 + k2             # <<<<<<<<<<<<<<
@@ -29350,16 +30527,16 @@ static PyObject *__pyx_pf_5adios_5group_8__dir__(struct __pyx_obj_5adios_group *
  *     ## Require for dictionary key completion
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyNumber_Add(__pyx_v_k0, __pyx_v_k1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1866, __pyx_L1_error)
+  __pyx_t_1 = PyNumber_Add(__pyx_v_k0, __pyx_v_k1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1874, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_v_k2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1866, __pyx_L1_error)
+  __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_v_k2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1874, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":1862
+  /* "adios.pyx":1870
  *         return self.__getitem__(varname)
  * 
  *     def __dir__(self):             # <<<<<<<<<<<<<<
@@ -29385,7 +30562,7 @@ static PyObject *__pyx_pf_5adios_5group_8__dir__(struct __pyx_obj_5adios_group *
   return __pyx_r;
 }
 
-/* "adios.pyx":1869
+/* "adios.pyx":1877
  * 
  *     ## Require for dictionary key completion
  *     def keys(self):             # <<<<<<<<<<<<<<
@@ -29416,7 +30593,7 @@ static PyObject *__pyx_pf_5adios_5group_10keys(struct __pyx_obj_5adios_group *__
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("keys", 0);
 
-  /* "adios.pyx":1870
+  /* "adios.pyx":1878
  *     ## Require for dictionary key completion
  *     def keys(self):
  *         return self.vars.keys() + self.attrs.keys()             # <<<<<<<<<<<<<<
@@ -29424,10 +30601,10 @@ static PyObject *__pyx_pf_5adios_5group_10keys(struct __pyx_obj_5adios_group *__
  *     def dirs(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1870, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1878, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
     __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
     if (likely(__pyx_t_3)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
@@ -29437,17 +30614,17 @@ static PyObject *__pyx_pf_5adios_5group_10keys(struct __pyx_obj_5adios_group *__
     }
   }
   if (__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1870, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1878, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   } else {
-    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1870, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1878, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1870, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1878, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_4 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
     __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
     if (likely(__pyx_t_4)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -29457,14 +30634,14 @@ static PyObject *__pyx_pf_5adios_5group_10keys(struct __pyx_obj_5adios_group *__
     }
   }
   if (__pyx_t_4) {
-    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1870, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1878, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   } else {
-    __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1870, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1878, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1870, __pyx_L1_error)
+  __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1878, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -29472,7 +30649,7 @@ static PyObject *__pyx_pf_5adios_5group_10keys(struct __pyx_obj_5adios_group *__
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":1869
+  /* "adios.pyx":1877
  * 
  *     ## Require for dictionary key completion
  *     def keys(self):             # <<<<<<<<<<<<<<
@@ -29494,7 +30671,7 @@ static PyObject *__pyx_pf_5adios_5group_10keys(struct __pyx_obj_5adios_group *__
   return __pyx_r;
 }
 
-/* "adios.pyx":1872
+/* "adios.pyx":1880
  *         return self.vars.keys() + self.attrs.keys()
  * 
  *     def dirs(self):             # <<<<<<<<<<<<<<
@@ -29532,29 +30709,29 @@ static PyObject *__pyx_pf_5adios_5group_12dirs(struct __pyx_obj_5adios_group *__
   int __pyx_t_9;
   __Pyx_RefNannySetupContext("dirs", 0);
 
-  /* "adios.pyx":1874
+  /* "adios.pyx":1882
  *     def dirs(self):
  *         """ Return child dir names """
  *         s = set()             # <<<<<<<<<<<<<<
  *         for k in self.vars.keys():
  *             if k.startswith('/'): k = k[1:]
  */
-  __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1874, __pyx_L1_error)
+  __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1882, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_s = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "adios.pyx":1875
+  /* "adios.pyx":1883
  *         """ Return child dir names """
  *         s = set()
  *         for k in self.vars.keys():             # <<<<<<<<<<<<<<
  *             if k.startswith('/'): k = k[1:]
  *             s.add(os.path.dirname(k).split('/')[0])
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1875, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1883, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
     __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
     if (likely(__pyx_t_3)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
@@ -29564,10 +30741,10 @@ static PyObject *__pyx_pf_5adios_5group_12dirs(struct __pyx_obj_5adios_group *__
     }
   }
   if (__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1875, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1883, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   } else {
-    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1875, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1883, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -29575,27 +30752,27 @@ static PyObject *__pyx_pf_5adios_5group_12dirs(struct __pyx_obj_5adios_group *__
     __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __pyx_t_4 = 0;
     __pyx_t_5 = NULL;
   } else {
-    __pyx_t_4 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1875, __pyx_L1_error)
+    __pyx_t_4 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1883, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_5 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1875, __pyx_L1_error)
+    __pyx_t_5 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1883, __pyx_L1_error)
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   for (;;) {
     if (likely(!__pyx_t_5)) {
       if (likely(PyList_CheckExact(__pyx_t_2))) {
         if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_2)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1875, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1883, __pyx_L1_error)
         #else
-        __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1875, __pyx_L1_error)
+        __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1883, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_1);
         #endif
       } else {
         if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1875, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1883, __pyx_L1_error)
         #else
-        __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1875, __pyx_L1_error)
+        __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1883, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_1);
         #endif
       }
@@ -29605,7 +30782,7 @@ static PyObject *__pyx_pf_5adios_5group_12dirs(struct __pyx_obj_5adios_group *__
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
           if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-          else __PYX_ERR(0, 1875, __pyx_L1_error)
+          else __PYX_ERR(0, 1883, __pyx_L1_error)
         }
         break;
       }
@@ -29614,44 +30791,44 @@ static PyObject *__pyx_pf_5adios_5group_12dirs(struct __pyx_obj_5adios_group *__
     __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "adios.pyx":1876
+    /* "adios.pyx":1884
  *         s = set()
  *         for k in self.vars.keys():
  *             if k.startswith('/'): k = k[1:]             # <<<<<<<<<<<<<<
  *             s.add(os.path.dirname(k).split('/')[0])
  *         for k in self.attrs.keys():
  */
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_k, __pyx_n_s_startswith); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1876, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_k, __pyx_n_s_startswith); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1884, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__48, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1876, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__48, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1884, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 1876, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 1884, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     if (__pyx_t_6) {
-      __pyx_t_3 = __Pyx_PyObject_GetSlice(__pyx_v_k, 1, 0, NULL, NULL, &__pyx_slice__49, 1, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1876, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_GetSlice(__pyx_v_k, 1, 0, NULL, NULL, &__pyx_slice__49, 1, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1884, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF_SET(__pyx_v_k, __pyx_t_3);
       __pyx_t_3 = 0;
     }
 
-    /* "adios.pyx":1877
+    /* "adios.pyx":1885
  *         for k in self.vars.keys():
  *             if k.startswith('/'): k = k[1:]
  *             s.add(os.path.dirname(k).split('/')[0])             # <<<<<<<<<<<<<<
  *         for k in self.attrs.keys():
  *             if k.startswith('/'): k = k[1:]
  */
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1877, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1885, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_path); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1877, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_path); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1885, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_dirname); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1877, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_dirname); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1885, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __pyx_t_7 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_1))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
       __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1);
       if (likely(__pyx_t_7)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
@@ -29661,33 +30838,51 @@ static PyObject *__pyx_pf_5adios_5group_12dirs(struct __pyx_obj_5adios_group *__
       }
     }
     if (!__pyx_t_7) {
-      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_k); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1877, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_k); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1885, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
     } else {
-      __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1877, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_8);
-      __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_7); __pyx_t_7 = NULL;
-      __Pyx_INCREF(__pyx_v_k);
-      __Pyx_GIVEREF(__pyx_v_k);
-      PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_v_k);
-      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1877, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_3);
-      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_1)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_7, __pyx_v_k};
+        __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1885, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+        __Pyx_GOTREF(__pyx_t_3);
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_7, __pyx_v_k};
+        __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1885, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+        __Pyx_GOTREF(__pyx_t_3);
+      } else
+      #endif
+      {
+        __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1885, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_8);
+        __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_7); __pyx_t_7 = NULL;
+        __Pyx_INCREF(__pyx_v_k);
+        __Pyx_GIVEREF(__pyx_v_k);
+        PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_v_k);
+        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1885, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_3);
+        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+      }
     }
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_split); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1877, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_split); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1885, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__50, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1877, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__50, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1885, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_3, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1877, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_3, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1885, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_9 = PySet_Add(__pyx_v_s, __pyx_t_1); if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 1877, __pyx_L1_error)
+    __pyx_t_9 = PySet_Add(__pyx_v_s, __pyx_t_1); if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 1885, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-    /* "adios.pyx":1875
+    /* "adios.pyx":1883
  *         """ Return child dir names """
  *         s = set()
  *         for k in self.vars.keys():             # <<<<<<<<<<<<<<
@@ -29697,17 +30892,17 @@ static PyObject *__pyx_pf_5adios_5group_12dirs(struct __pyx_obj_5adios_group *__
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "adios.pyx":1878
+  /* "adios.pyx":1886
  *             if k.startswith('/'): k = k[1:]
  *             s.add(os.path.dirname(k).split('/')[0])
  *         for k in self.attrs.keys():             # <<<<<<<<<<<<<<
  *             if k.startswith('/'): k = k[1:]
  *             s.add(os.path.dirname(k).split('/')[0])
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1878, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1886, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_1))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
     __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
     if (likely(__pyx_t_3)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
@@ -29717,10 +30912,10 @@ static PyObject *__pyx_pf_5adios_5group_12dirs(struct __pyx_obj_5adios_group *__
     }
   }
   if (__pyx_t_3) {
-    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1878, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1886, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   } else {
-    __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1878, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1886, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -29728,27 +30923,27 @@ static PyObject *__pyx_pf_5adios_5group_12dirs(struct __pyx_obj_5adios_group *__
     __pyx_t_1 = __pyx_t_2; __Pyx_INCREF(__pyx_t_1); __pyx_t_4 = 0;
     __pyx_t_5 = NULL;
   } else {
-    __pyx_t_4 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1878, __pyx_L1_error)
+    __pyx_t_4 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1886, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1878, __pyx_L1_error)
+    __pyx_t_5 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1886, __pyx_L1_error)
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   for (;;) {
     if (likely(!__pyx_t_5)) {
       if (likely(PyList_CheckExact(__pyx_t_1))) {
         if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_1)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1878, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1886, __pyx_L1_error)
         #else
-        __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1878, __pyx_L1_error)
+        __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1886, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_2);
         #endif
       } else {
         if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1878, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1886, __pyx_L1_error)
         #else
-        __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1878, __pyx_L1_error)
+        __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1886, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_2);
         #endif
       }
@@ -29758,7 +30953,7 @@ static PyObject *__pyx_pf_5adios_5group_12dirs(struct __pyx_obj_5adios_group *__
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
           if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-          else __PYX_ERR(0, 1878, __pyx_L1_error)
+          else __PYX_ERR(0, 1886, __pyx_L1_error)
         }
         break;
       }
@@ -29767,44 +30962,44 @@ static PyObject *__pyx_pf_5adios_5group_12dirs(struct __pyx_obj_5adios_group *__
     __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_2);
     __pyx_t_2 = 0;
 
-    /* "adios.pyx":1879
+    /* "adios.pyx":1887
  *             s.add(os.path.dirname(k).split('/')[0])
  *         for k in self.attrs.keys():
  *             if k.startswith('/'): k = k[1:]             # <<<<<<<<<<<<<<
  *             s.add(os.path.dirname(k).split('/')[0])
  *         return list(s-set(['']))
  */
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_k, __pyx_n_s_startswith); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1879, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_k, __pyx_n_s_startswith); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1887, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__51, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1879, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__51, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1887, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 1879, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 1887, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     if (__pyx_t_6) {
-      __pyx_t_3 = __Pyx_PyObject_GetSlice(__pyx_v_k, 1, 0, NULL, NULL, &__pyx_slice__52, 1, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1879, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_GetSlice(__pyx_v_k, 1, 0, NULL, NULL, &__pyx_slice__52, 1, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1887, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF_SET(__pyx_v_k, __pyx_t_3);
       __pyx_t_3 = 0;
     }
 
-    /* "adios.pyx":1880
+    /* "adios.pyx":1888
  *         for k in self.attrs.keys():
  *             if k.startswith('/'): k = k[1:]
  *             s.add(os.path.dirname(k).split('/')[0])             # <<<<<<<<<<<<<<
  *         return list(s-set(['']))
  * 
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1880, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1888, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_path); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1880, __pyx_L1_error)
+    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_path); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1888, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_dirname); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1880, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_dirname); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1888, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     __pyx_t_8 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
       __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_2);
       if (likely(__pyx_t_8)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
@@ -29814,33 +31009,51 @@ static PyObject *__pyx_pf_5adios_5group_12dirs(struct __pyx_obj_5adios_group *__
       }
     }
     if (!__pyx_t_8) {
-      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_k); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1880, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_k); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1888, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
     } else {
-      __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1880, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_7);
-      __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_8); __pyx_t_8 = NULL;
-      __Pyx_INCREF(__pyx_v_k);
-      __Pyx_GIVEREF(__pyx_v_k);
-      PyTuple_SET_ITEM(__pyx_t_7, 0+1, __pyx_v_k);
-      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1880, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_3);
-      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_2)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_v_k};
+        __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1888, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+        __Pyx_GOTREF(__pyx_t_3);
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_v_k};
+        __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1888, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+        __Pyx_GOTREF(__pyx_t_3);
+      } else
+      #endif
+      {
+        __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1888, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_7);
+        __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_8); __pyx_t_8 = NULL;
+        __Pyx_INCREF(__pyx_v_k);
+        __Pyx_GIVEREF(__pyx_v_k);
+        PyTuple_SET_ITEM(__pyx_t_7, 0+1, __pyx_v_k);
+        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1888, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_3);
+        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+      }
     }
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_split); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1880, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_split); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1888, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__53, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1880, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__53, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1888, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_3, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1880, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_3, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1888, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_9 = PySet_Add(__pyx_v_s, __pyx_t_2); if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 1880, __pyx_L1_error)
+    __pyx_t_9 = PySet_Add(__pyx_v_s, __pyx_t_2); if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 1888, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-    /* "adios.pyx":1878
+    /* "adios.pyx":1886
  *             if k.startswith('/'): k = k[1:]
  *             s.add(os.path.dirname(k).split('/')[0])
  *         for k in self.attrs.keys():             # <<<<<<<<<<<<<<
@@ -29850,7 +31063,7 @@ static PyObject *__pyx_pf_5adios_5group_12dirs(struct __pyx_obj_5adios_group *__
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":1881
+  /* "adios.pyx":1889
  *             if k.startswith('/'): k = k[1:]
  *             s.add(os.path.dirname(k).split('/')[0])
  *         return list(s-set(['']))             # <<<<<<<<<<<<<<
@@ -29858,20 +31071,20 @@ static PyObject *__pyx_pf_5adios_5group_12dirs(struct __pyx_obj_5adios_group *__
  * ## Helper dict
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1881, __pyx_L1_error)
+  __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1889, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PySet_Add(__pyx_t_1, __pyx_kp_s__10) < 0) __PYX_ERR(0, 1881, __pyx_L1_error)
-  __pyx_t_2 = PyNumber_Subtract(__pyx_v_s, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1881, __pyx_L1_error)
+  if (PySet_Add(__pyx_t_1, __pyx_kp_s__10) < 0) __PYX_ERR(0, 1889, __pyx_L1_error)
+  __pyx_t_2 = PyNumber_Subtract(__pyx_v_s, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1889, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PySequence_List(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1881, __pyx_L1_error)
+  __pyx_t_1 = PySequence_List(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1889, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":1872
+  /* "adios.pyx":1880
  *         return self.vars.keys() + self.attrs.keys()
  * 
  *     def dirs(self):             # <<<<<<<<<<<<<<
@@ -29896,7 +31109,7 @@ static PyObject *__pyx_pf_5adios_5group_12dirs(struct __pyx_obj_5adios_group *__
   return __pyx_r;
 }
 
-/* "adios.pyx":1783
+/* "adios.pyx":1791
  * 
  *     ## Public Memeber
  *     cpdef public softdict vars             # <<<<<<<<<<<<<<
@@ -29951,7 +31164,7 @@ static int __pyx_pf_5adios_5group_4vars_2__set__(struct __pyx_obj_5adios_group *
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__set__", 0);
-  if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_ptype_5adios_softdict))))) __PYX_ERR(0, 1783, __pyx_L1_error)
+  if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_ptype_5adios_softdict))))) __PYX_ERR(0, 1791, __pyx_L1_error)
   __pyx_t_1 = __pyx_v_value;
   __Pyx_INCREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
@@ -30001,7 +31214,7 @@ static int __pyx_pf_5adios_5group_4vars_4__del__(struct __pyx_obj_5adios_group *
   return __pyx_r;
 }
 
-/* "adios.pyx":1784
+/* "adios.pyx":1792
  *     ## Public Memeber
  *     cpdef public softdict vars
  *     cpdef public softdict attrs             # <<<<<<<<<<<<<<
@@ -30056,7 +31269,7 @@ static int __pyx_pf_5adios_5group_5attrs_2__set__(struct __pyx_obj_5adios_group
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__set__", 0);
-  if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_ptype_5adios_softdict))))) __PYX_ERR(0, 1784, __pyx_L1_error)
+  if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_ptype_5adios_softdict))))) __PYX_ERR(0, 1792, __pyx_L1_error)
   __pyx_t_1 = __pyx_v_value;
   __Pyx_INCREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
@@ -30106,7 +31319,7 @@ static int __pyx_pf_5adios_5group_5attrs_4__del__(struct __pyx_obj_5adios_group
   return __pyx_r;
 }
 
-/* "adios.pyx":1886
+/* "adios.pyx":1894
  * cdef class smartdict(dict):
  *     cdef factory
  *     def __init__(self, factory):             # <<<<<<<<<<<<<<
@@ -30139,7 +31352,7 @@ static int __pyx_pw_5adios_9smartdict_1__init__(PyObject *__pyx_v_self, PyObject
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 1886, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 1894, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -30150,7 +31363,7 @@ static int __pyx_pw_5adios_9smartdict_1__init__(PyObject *__pyx_v_self, PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1886, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1894, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.smartdict.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -30172,17 +31385,17 @@ static int __pyx_pf_5adios_9smartdict___init__(struct __pyx_obj_5adios_smartdict
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("__init__", 0);
 
-  /* "adios.pyx":1887
+  /* "adios.pyx":1895
  *     cdef factory
  *     def __init__(self, factory):
  *         dict.__init__(self)             # <<<<<<<<<<<<<<
  *         self.factory = factory
  * 
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)(&PyDict_Type)), __pyx_n_s_init); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1887, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)(&PyDict_Type)), __pyx_n_s_init); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1895, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
     __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
     if (likely(__pyx_t_3)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
@@ -30192,23 +31405,41 @@ static int __pyx_pf_5adios_9smartdict___init__(struct __pyx_obj_5adios_smartdict
     }
   }
   if (!__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, ((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1887, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, ((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1895, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1887, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_4);
-    __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
-    __Pyx_INCREF(((PyObject *)__pyx_v_self));
-    __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
-    PyTuple_SET_ITEM(__pyx_t_4, 0+1, ((PyObject *)__pyx_v_self));
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1887, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, ((PyObject *)__pyx_v_self)};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1895, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, ((PyObject *)__pyx_v_self)};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1895, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1895, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+      __Pyx_INCREF(((PyObject *)__pyx_v_self));
+      __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
+      PyTuple_SET_ITEM(__pyx_t_4, 0+1, ((PyObject *)__pyx_v_self));
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1895, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    }
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":1888
+  /* "adios.pyx":1896
  *     def __init__(self, factory):
  *         dict.__init__(self)
  *         self.factory = factory             # <<<<<<<<<<<<<<
@@ -30221,7 +31452,7 @@ static int __pyx_pf_5adios_9smartdict___init__(struct __pyx_obj_5adios_smartdict
   __Pyx_DECREF(__pyx_v_self->factory);
   __pyx_v_self->factory = __pyx_v_factory;
 
-  /* "adios.pyx":1886
+  /* "adios.pyx":1894
  * cdef class smartdict(dict):
  *     cdef factory
  *     def __init__(self, factory):             # <<<<<<<<<<<<<<
@@ -30244,7 +31475,7 @@ static int __pyx_pf_5adios_9smartdict___init__(struct __pyx_obj_5adios_smartdict
   return __pyx_r;
 }
 
-/* "adios.pyx":1890
+/* "adios.pyx":1898
  *         self.factory = factory
  * 
  *     def __setitem__(self, key, value):             # <<<<<<<<<<<<<<
@@ -30273,11 +31504,11 @@ static int __pyx_pf_5adios_9smartdict_2__setitem__(struct __pyx_obj_5adios_smart
   int __pyx_t_3;
   PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
-  Py_ssize_t __pyx_t_6;
+  int __pyx_t_6;
   PyObject *__pyx_t_7 = NULL;
   __Pyx_RefNannySetupContext("__setitem__", 0);
 
-  /* "adios.pyx":1891
+  /* "adios.pyx":1899
  * 
  *     def __setitem__(self, key, value):
  *         if key in dict.keys(self):             # <<<<<<<<<<<<<<
@@ -30286,27 +31517,27 @@ static int __pyx_pf_5adios_9smartdict_2__setitem__(struct __pyx_obj_5adios_smart
  */
   if (unlikely(((PyObject *)__pyx_v_self) == Py_None)) {
     PyErr_Format(PyExc_TypeError, "descriptor '%s' requires a '%s' object but received a 'NoneType'", "keys", "dict");
-    __PYX_ERR(0, 1891, __pyx_L1_error)
+    __PYX_ERR(0, 1899, __pyx_L1_error)
   }
-  __pyx_t_1 = __Pyx_PyDict_Keys(((PyObject*)__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1891, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyDict_Keys(((PyObject*)__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1899, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_v_key, __pyx_t_1, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1891, __pyx_L1_error)
+  __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_v_key, __pyx_t_1, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1899, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "adios.pyx":1892
+    /* "adios.pyx":1900
  *     def __setitem__(self, key, value):
  *         if key in dict.keys(self):
  *             dict.__setitem__(self, key, value)             # <<<<<<<<<<<<<<
  *         else:
  *             self.factory(key, value)
  */
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)(&PyDict_Type)), __pyx_n_s_setitem); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1892, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)(&PyDict_Type)), __pyx_n_s_setitem); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1900, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_5 = NULL;
     __pyx_t_6 = 0;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
       __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
       if (likely(__pyx_t_5)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
@@ -30316,27 +31547,45 @@ static int __pyx_pf_5adios_9smartdict_2__setitem__(struct __pyx_obj_5adios_smart
         __pyx_t_6 = 1;
       }
     }
-    __pyx_t_7 = PyTuple_New(3+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1892, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_7);
-    if (__pyx_t_5) {
-      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5); __pyx_t_5 = NULL;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_4)) {
+      PyObject *__pyx_temp[4] = {__pyx_t_5, ((PyObject *)__pyx_v_self), __pyx_v_key, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1900, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
+      PyObject *__pyx_temp[4] = {__pyx_t_5, ((PyObject *)__pyx_v_self), __pyx_v_key, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1900, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __pyx_t_7 = PyTuple_New(3+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1900, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_7);
+      if (__pyx_t_5) {
+        __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5); __pyx_t_5 = NULL;
+      }
+      __Pyx_INCREF(((PyObject *)__pyx_v_self));
+      __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
+      PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, ((PyObject *)__pyx_v_self));
+      __Pyx_INCREF(__pyx_v_key);
+      __Pyx_GIVEREF(__pyx_v_key);
+      PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_v_key);
+      __Pyx_INCREF(__pyx_v_value);
+      __Pyx_GIVEREF(__pyx_v_value);
+      PyTuple_SET_ITEM(__pyx_t_7, 2+__pyx_t_6, __pyx_v_value);
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1900, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     }
-    __Pyx_INCREF(((PyObject *)__pyx_v_self));
-    __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
-    PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, ((PyObject *)__pyx_v_self));
-    __Pyx_INCREF(__pyx_v_key);
-    __Pyx_GIVEREF(__pyx_v_key);
-    PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_v_key);
-    __Pyx_INCREF(__pyx_v_value);
-    __Pyx_GIVEREF(__pyx_v_value);
-    PyTuple_SET_ITEM(__pyx_t_7, 2+__pyx_t_6, __pyx_v_value);
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1892, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-    /* "adios.pyx":1891
+    /* "adios.pyx":1899
  * 
  *     def __setitem__(self, key, value):
  *         if key in dict.keys(self):             # <<<<<<<<<<<<<<
@@ -30346,7 +31595,7 @@ static int __pyx_pf_5adios_9smartdict_2__setitem__(struct __pyx_obj_5adios_smart
     goto __pyx_L3;
   }
 
-  /* "adios.pyx":1894
+  /* "adios.pyx":1902
  *             dict.__setitem__(self, key, value)
  *         else:
  *             self.factory(key, value)             # <<<<<<<<<<<<<<
@@ -30357,7 +31606,7 @@ static int __pyx_pf_5adios_9smartdict_2__setitem__(struct __pyx_obj_5adios_smart
     __Pyx_INCREF(__pyx_v_self->factory);
     __pyx_t_4 = __pyx_v_self->factory; __pyx_t_7 = NULL;
     __pyx_t_6 = 0;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
       __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_4);
       if (likely(__pyx_t_7)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
@@ -30367,26 +31616,44 @@ static int __pyx_pf_5adios_9smartdict_2__setitem__(struct __pyx_obj_5adios_smart
         __pyx_t_6 = 1;
       }
     }
-    __pyx_t_5 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1894, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_5);
-    if (__pyx_t_7) {
-      __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_7); __pyx_t_7 = NULL;
-    }
-    __Pyx_INCREF(__pyx_v_key);
-    __Pyx_GIVEREF(__pyx_v_key);
-    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_6, __pyx_v_key);
-    __Pyx_INCREF(__pyx_v_value);
-    __Pyx_GIVEREF(__pyx_v_value);
-    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_6, __pyx_v_value);
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1894, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_4)) {
+      PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_v_key, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1902, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
+      PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_v_key, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1902, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __pyx_t_5 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1902, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_5);
+      if (__pyx_t_7) {
+        __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_7); __pyx_t_7 = NULL;
+      }
+      __Pyx_INCREF(__pyx_v_key);
+      __Pyx_GIVEREF(__pyx_v_key);
+      PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_6, __pyx_v_key);
+      __Pyx_INCREF(__pyx_v_value);
+      __Pyx_GIVEREF(__pyx_v_value);
+      PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_6, __pyx_v_value);
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1902, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    }
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   }
   __pyx_L3:;
 
-  /* "adios.pyx":1890
+  /* "adios.pyx":1898
  *         self.factory = factory
  * 
  *     def __setitem__(self, key, value):             # <<<<<<<<<<<<<<
@@ -30409,7 +31676,7 @@ static int __pyx_pf_5adios_9smartdict_2__setitem__(struct __pyx_obj_5adios_smart
   return __pyx_r;
 }
 
-/* "adios.pyx":1928
+/* "adios.pyx":1937
  *     property fname:
  *         """ The filename to write. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -30435,7 +31702,7 @@ static PyObject *__pyx_pf_5adios_6writer_5fname___get__(struct __pyx_obj_5adios_
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios.pyx":1929
+  /* "adios.pyx":1938
  *         """ The filename to write. """
  *         def __get__(self):
  *             return self.fname             # <<<<<<<<<<<<<<
@@ -30447,7 +31714,7 @@ static PyObject *__pyx_pf_5adios_6writer_5fname___get__(struct __pyx_obj_5adios_
   __pyx_r = __pyx_v_self->fname;
   goto __pyx_L0;
 
-  /* "adios.pyx":1928
+  /* "adios.pyx":1937
  *     property fname:
  *         """ The filename to write. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -30462,7 +31729,7 @@ static PyObject *__pyx_pf_5adios_6writer_5fname___get__(struct __pyx_obj_5adios_
   return __pyx_r;
 }
 
-/* "adios.pyx":1933
+/* "adios.pyx":1942
  *     property gname:
  *         """ The groupname associated with the file. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -30488,7 +31755,7 @@ static PyObject *__pyx_pf_5adios_6writer_5gname___get__(struct __pyx_obj_5adios_
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios.pyx":1934
+  /* "adios.pyx":1943
  *         """ The groupname associated with the file. """
  *         def __get__(self):
  *             return self.gname             # <<<<<<<<<<<<<<
@@ -30500,7 +31767,7 @@ static PyObject *__pyx_pf_5adios_6writer_5gname___get__(struct __pyx_obj_5adios_
   __pyx_r = __pyx_v_self->gname;
   goto __pyx_L0;
 
-  /* "adios.pyx":1933
+  /* "adios.pyx":1942
  *     property gname:
  *         """ The groupname associated with the file. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -30515,7 +31782,7 @@ static PyObject *__pyx_pf_5adios_6writer_5gname___get__(struct __pyx_obj_5adios_
   return __pyx_r;
 }
 
-/* "adios.pyx":1938
+/* "adios.pyx":1947
  *     property is_noxml:
  *         """ Boolean to indicate using No-XML or not. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -30542,7 +31809,7 @@ static PyObject *__pyx_pf_5adios_6writer_8is_noxml___get__(struct __pyx_obj_5adi
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios.pyx":1939
+  /* "adios.pyx":1948
  *         """ Boolean to indicate using No-XML or not. """
  *         def __get__(self):
  *             return self.is_noxml             # <<<<<<<<<<<<<<
@@ -30550,13 +31817,13 @@ static PyObject *__pyx_pf_5adios_6writer_8is_noxml___get__(struct __pyx_obj_5adi
  *     property mode:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->is_noxml); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1939, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->is_noxml); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1948, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":1938
+  /* "adios.pyx":1947
  *     property is_noxml:
  *         """ Boolean to indicate using No-XML or not. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -30575,7 +31842,7 @@ static PyObject *__pyx_pf_5adios_6writer_8is_noxml___get__(struct __pyx_obj_5adi
   return __pyx_r;
 }
 
-/* "adios.pyx":1943
+/* "adios.pyx":1952
  *     property mode:
  *         """ Writing mode: overwrite or append. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -30601,7 +31868,7 @@ static PyObject *__pyx_pf_5adios_6writer_4mode___get__(struct __pyx_obj_5adios_w
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios.pyx":1944
+  /* "adios.pyx":1953
  *         """ Writing mode: overwrite or append. """
  *         def __get__(self):
  *             return self.mode             # <<<<<<<<<<<<<<
@@ -30613,7 +31880,7 @@ static PyObject *__pyx_pf_5adios_6writer_4mode___get__(struct __pyx_obj_5adios_w
   __pyx_r = __pyx_v_self->mode;
   goto __pyx_L0;
 
-  /* "adios.pyx":1943
+  /* "adios.pyx":1952
  *     property mode:
  *         """ Writing mode: overwrite or append. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -30628,7 +31895,7 @@ static PyObject *__pyx_pf_5adios_6writer_4mode___get__(struct __pyx_obj_5adios_w
   return __pyx_r;
 }
 
-/* "adios.pyx":1948
+/* "adios.pyx":1957
  *     property vars:
  *         """ Dictionary of variables to write. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -30654,7 +31921,7 @@ static PyObject *__pyx_pf_5adios_6writer_4vars___get__(struct __pyx_obj_5adios_w
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios.pyx":1949
+  /* "adios.pyx":1958
  *         """ Dictionary of variables to write. """
  *         def __get__(self):
  *             return self.vars             # <<<<<<<<<<<<<<
@@ -30666,7 +31933,7 @@ static PyObject *__pyx_pf_5adios_6writer_4vars___get__(struct __pyx_obj_5adios_w
   __pyx_r = __pyx_v_self->vars;
   goto __pyx_L0;
 
-  /* "adios.pyx":1948
+  /* "adios.pyx":1957
  *     property vars:
  *         """ Dictionary of variables to write. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -30681,7 +31948,7 @@ static PyObject *__pyx_pf_5adios_6writer_4vars___get__(struct __pyx_obj_5adios_w
   return __pyx_r;
 }
 
-/* "adios.pyx":1953
+/* "adios.pyx":1962
  *     property attrs:
  *         """ Dictionary of attributes to write. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -30707,7 +31974,7 @@ static PyObject *__pyx_pf_5adios_6writer_5attrs___get__(struct __pyx_obj_5adios_
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios.pyx":1954
+  /* "adios.pyx":1963
  *         """ Dictionary of attributes to write. """
  *         def __get__(self):
  *             return self.attrs             # <<<<<<<<<<<<<<
@@ -30719,7 +31986,7 @@ static PyObject *__pyx_pf_5adios_6writer_5attrs___get__(struct __pyx_obj_5adios_
   __pyx_r = __pyx_v_self->attrs;
   goto __pyx_L0;
 
-  /* "adios.pyx":1953
+  /* "adios.pyx":1962
  *     property attrs:
  *         """ Dictionary of attributes to write. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -30734,7 +32001,7 @@ static PyObject *__pyx_pf_5adios_6writer_5attrs___get__(struct __pyx_obj_5adios_
   return __pyx_r;
 }
 
-/* "adios.pyx":1958
+/* "adios.pyx":1967
  *     property timeaggregation_buffersize:
  *         """ Get time-aggregation buffersize. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -30761,7 +32028,7 @@ static PyObject *__pyx_pf_5adios_6writer_26timeaggregation_buffersize___get__(st
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios.pyx":1959
+  /* "adios.pyx":1968
  *         """ Get time-aggregation buffersize. """
  *         def __get__(self):
  *             return self.timeaggregation_buffersize             # <<<<<<<<<<<<<<
@@ -30769,13 +32036,13 @@ static PyObject *__pyx_pf_5adios_6writer_26timeaggregation_buffersize___get__(st
  *     def __init__(self, str fname,
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_uint64_t(__pyx_v_self->timeaggregation_buffersize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1959, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_uint64_t(__pyx_v_self->timeaggregation_buffersize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1968, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":1958
+  /* "adios.pyx":1967
  *     property timeaggregation_buffersize:
  *         """ Get time-aggregation buffersize. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -30794,7 +32061,7 @@ static PyObject *__pyx_pf_5adios_6writer_26timeaggregation_buffersize___get__(st
   return __pyx_r;
 }
 
-/* "adios.pyx":1961
+/* "adios.pyx":1970
  *             return self.timeaggregation_buffersize
  * 
  *     def __init__(self, str fname,             # <<<<<<<<<<<<<<
@@ -30808,18 +32075,26 @@ static int __pyx_pw_5adios_6writer_1__init__(PyObject *__pyx_v_self, PyObject *_
   PyObject *__pyx_v_fname = 0;
   int __pyx_v_is_noxml;
   PyObject *__pyx_v_mode = 0;
+  int __pyx_v_stats;
   MPI_Comm __pyx_v_comm;
+  PyObject *__pyx_v_method = 0;
+  PyObject *__pyx_v_method_params = 0;
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_fname,&__pyx_n_s_is_noxml,&__pyx_n_s_mode,&__pyx_n_s_comm,0};
-    PyObject* values[4] = {0,0,0,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_fname,&__pyx_n_s_is_noxml,&__pyx_n_s_mode,&__pyx_n_s_stats,&__pyx_n_s_comm,&__pyx_n_s_method,&__pyx_n_s_method_params,0};
+    PyObject* values[7] = {0,0,0,0,0,0,0};
     values[2] = ((PyObject*)__pyx_n_s_w);
+    values[5] = ((PyObject*)__pyx_n_s_POSIX1);
+    values[6] = ((PyObject*)__pyx_kp_s__10);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
+        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
+        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
@@ -30844,15 +32119,33 @@ static int __pyx_pw_5adios_6writer_1__init__(PyObject *__pyx_v_self, PyObject *_
         }
         case  3:
         if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_stats);
           if (value) { values[3] = value; kw_args--; }
         }
+        case  4:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
+          if (value) { values[4] = value; kw_args--; }
+        }
+        case  5:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_method);
+          if (value) { values[5] = value; kw_args--; }
+        }
+        case  6:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_method_params);
+          if (value) { values[6] = value; kw_args--; }
+        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 1961, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 1970, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
+        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
@@ -30863,38 +32156,47 @@ static int __pyx_pw_5adios_6writer_1__init__(PyObject *__pyx_v_self, PyObject *_
     }
     __pyx_v_fname = ((PyObject*)values[0]);
     if (values[1]) {
-      __pyx_v_is_noxml = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_is_noxml == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1962, __pyx_L3_error)
+      __pyx_v_is_noxml = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_is_noxml == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1971, __pyx_L3_error)
     } else {
 
-      /* "adios.pyx":1962
+      /* "adios.pyx":1971
  * 
  *     def __init__(self, str fname,
  *                  bint is_noxml = True,             # <<<<<<<<<<<<<<
  *                  str mode = "w",
- *                  MPI_Comm comm = MPI_COMM_WORLD):
+ *                  int stats = adios_stat_default,
  */
       __pyx_v_is_noxml = ((int)1);
     }
     __pyx_v_mode = ((PyObject*)values[2]);
     if (values[3]) {
-      __pyx_v_comm = __Pyx_PyInt_As_MPI_Comm(values[3]); if (unlikely((__pyx_v_comm == (MPI_Comm)-1) && PyErr_Occurred())) __PYX_ERR(0, 1964, __pyx_L3_error)
+      __pyx_v_stats = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_stats == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1973, __pyx_L3_error)
+    } else {
+      __pyx_v_stats = __pyx_k__54;
+    }
+    if (values[4]) {
+      __pyx_v_comm = __Pyx_PyInt_As_MPI_Comm(values[4]); if (unlikely((__pyx_v_comm == ((MPI_Comm)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1974, __pyx_L3_error)
     } else {
-      __pyx_v_comm = __pyx_k__54;
+      __pyx_v_comm = __pyx_k__55;
     }
+    __pyx_v_method = ((PyObject*)values[5]);
+    __pyx_v_method_params = ((PyObject*)values[6]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1961, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 7, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1970, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.writer.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_fname), (&PyString_Type), 1, "fname", 1))) __PYX_ERR(0, 1961, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mode), (&PyString_Type), 1, "mode", 1))) __PYX_ERR(0, 1963, __pyx_L1_error)
-  __pyx_r = __pyx_pf_5adios_6writer___init__(((struct __pyx_obj_5adios_writer *)__pyx_v_self), __pyx_v_fname, __pyx_v_is_noxml, __pyx_v_mode, __pyx_v_comm);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_fname), (&PyString_Type), 1, "fname", 1))) __PYX_ERR(0, 1970, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mode), (&PyString_Type), 1, "mode", 1))) __PYX_ERR(0, 1972, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_method), (&PyString_Type), 1, "method", 1))) __PYX_ERR(0, 1975, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_method_params), (&PyString_Type), 1, "method_params", 1))) __PYX_ERR(0, 1976, __pyx_L1_error)
+  __pyx_r = __pyx_pf_5adios_6writer___init__(((struct __pyx_obj_5adios_writer *)__pyx_v_self), __pyx_v_fname, __pyx_v_is_noxml, __pyx_v_mode, __pyx_v_stats, __pyx_v_comm, __pyx_v_method, __pyx_v_method_params);
 
-  /* "adios.pyx":1961
+  /* "adios.pyx":1970
  *             return self.timeaggregation_buffersize
  * 
  *     def __init__(self, str fname,             # <<<<<<<<<<<<<<
@@ -30911,28 +32213,28 @@ static int __pyx_pw_5adios_6writer_1__init__(PyObject *__pyx_v_self, PyObject *_
   return __pyx_r;
 }
 
-static int __pyx_pf_5adios_6writer___init__(struct __pyx_obj_5adios_writer *__pyx_v_self, PyObject *__pyx_v_fname, int __pyx_v_is_noxml, PyObject *__pyx_v_mode, MPI_Comm __pyx_v_comm) {
+static int __pyx_pf_5adios_6writer___init__(struct __pyx_obj_5adios_writer *__pyx_v_self, PyObject *__pyx_v_fname, int __pyx_v_is_noxml, PyObject *__pyx_v_mode, int __pyx_v_stats, MPI_Comm __pyx_v_comm, PyObject *__pyx_v_method, PyObject *__pyx_v_method_params) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   struct __pyx_opt_args_5adios_init_noxml __pyx_t_2;
   __Pyx_RefNannySetupContext("__init__", 0);
 
-  /* "adios.pyx":1965
- *                  str mode = "w",
- *                  MPI_Comm comm = MPI_COMM_WORLD):
+  /* "adios.pyx":1977
+ *                  str method = "POSIX1",
+ *                  str method_params = ""):
  *         self.gid = 0             # <<<<<<<<<<<<<<
  *         self.fname = fname
- *         self.method = ""
+ *         self.method = method
  */
   __pyx_v_self->gid = 0;
 
-  /* "adios.pyx":1966
- *                  MPI_Comm comm = MPI_COMM_WORLD):
+  /* "adios.pyx":1978
+ *                  str method_params = ""):
  *         self.gid = 0
  *         self.fname = fname             # <<<<<<<<<<<<<<
- *         self.method = ""
- *         self.method_params = ""
+ *         self.method = method
+ *         self.method_params = method_params
  */
   __Pyx_INCREF(__pyx_v_fname);
   __Pyx_GIVEREF(__pyx_v_fname);
@@ -30940,43 +32242,43 @@ static int __pyx_pf_5adios_6writer___init__(struct __pyx_obj_5adios_writer *__py
   __Pyx_DECREF(__pyx_v_self->fname);
   __pyx_v_self->fname = __pyx_v_fname;
 
-  /* "adios.pyx":1967
+  /* "adios.pyx":1979
  *         self.gid = 0
  *         self.fname = fname
- *         self.method = ""             # <<<<<<<<<<<<<<
- *         self.method_params = ""
+ *         self.method = method             # <<<<<<<<<<<<<<
+ *         self.method_params = method_params
  *         self.is_noxml = is_noxml
  */
-  __Pyx_INCREF(__pyx_kp_s__10);
-  __Pyx_GIVEREF(__pyx_kp_s__10);
+  __Pyx_INCREF(__pyx_v_method);
+  __Pyx_GIVEREF(__pyx_v_method);
   __Pyx_GOTREF(__pyx_v_self->method);
   __Pyx_DECREF(__pyx_v_self->method);
-  __pyx_v_self->method = __pyx_kp_s__10;
+  __pyx_v_self->method = __pyx_v_method;
 
-  /* "adios.pyx":1968
+  /* "adios.pyx":1980
  *         self.fname = fname
- *         self.method = ""
- *         self.method_params = ""             # <<<<<<<<<<<<<<
+ *         self.method = method
+ *         self.method_params = method_params             # <<<<<<<<<<<<<<
  *         self.is_noxml = is_noxml
  *         self.mode = mode
  */
-  __Pyx_INCREF(__pyx_kp_s__10);
-  __Pyx_GIVEREF(__pyx_kp_s__10);
+  __Pyx_INCREF(__pyx_v_method_params);
+  __Pyx_GIVEREF(__pyx_v_method_params);
   __Pyx_GOTREF(__pyx_v_self->method_params);
   __Pyx_DECREF(__pyx_v_self->method_params);
-  __pyx_v_self->method_params = __pyx_kp_s__10;
+  __pyx_v_self->method_params = __pyx_v_method_params;
 
-  /* "adios.pyx":1969
- *         self.method = ""
- *         self.method_params = ""
+  /* "adios.pyx":1981
+ *         self.method = method
+ *         self.method_params = method_params
  *         self.is_noxml = is_noxml             # <<<<<<<<<<<<<<
  *         self.mode = mode
  *         self.comm = comm
  */
   __pyx_v_self->is_noxml = __pyx_v_is_noxml;
 
-  /* "adios.pyx":1970
- *         self.method_params = ""
+  /* "adios.pyx":1982
+ *         self.method_params = method_params
  *         self.is_noxml = is_noxml
  *         self.mode = mode             # <<<<<<<<<<<<<<
  *         self.comm = comm
@@ -30988,7 +32290,7 @@ static int __pyx_pf_5adios_6writer___init__(struct __pyx_obj_5adios_writer *__py
   __Pyx_DECREF(__pyx_v_self->mode);
   __pyx_v_self->mode = __pyx_v_mode;
 
-  /* "adios.pyx":1971
+  /* "adios.pyx":1983
  *         self.is_noxml = is_noxml
  *         self.mode = mode
  *         self.comm = comm             # <<<<<<<<<<<<<<
@@ -30997,14 +32299,14 @@ static int __pyx_pf_5adios_6writer___init__(struct __pyx_obj_5adios_writer *__py
  */
   __pyx_v_self->comm = __pyx_v_comm;
 
-  /* "adios.pyx":1972
+  /* "adios.pyx":1984
  *         self.mode = mode
  *         self.comm = comm
  *         self.vars = dict()             # <<<<<<<<<<<<<<
  *         self.attrs = dict()
  *         self.timeaggregation_buffersize = 0
  */
-  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1972, __pyx_L1_error)
+  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1984, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_self->vars);
@@ -31012,14 +32314,14 @@ static int __pyx_pf_5adios_6writer___init__(struct __pyx_obj_5adios_writer *__py
   __pyx_v_self->vars = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "adios.pyx":1973
+  /* "adios.pyx":1985
  *         self.comm = comm
  *         self.vars = dict()
  *         self.attrs = dict()             # <<<<<<<<<<<<<<
  *         self.timeaggregation_buffersize = 0
- * 
+ *         self.stats = stats
  */
-  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1973, __pyx_L1_error)
+  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1985, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_self->attrs);
@@ -31027,17 +32329,26 @@ static int __pyx_pf_5adios_6writer___init__(struct __pyx_obj_5adios_writer *__py
   __pyx_v_self->attrs = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "adios.pyx":1974
+  /* "adios.pyx":1986
  *         self.vars = dict()
  *         self.attrs = dict()
  *         self.timeaggregation_buffersize = 0             # <<<<<<<<<<<<<<
+ *         self.stats = stats
  * 
- *         init_noxml(comm)
  */
   __pyx_v_self->timeaggregation_buffersize = 0;
 
-  /* "adios.pyx":1976
+  /* "adios.pyx":1987
+ *         self.attrs = dict()
  *         self.timeaggregation_buffersize = 0
+ *         self.stats = stats             # <<<<<<<<<<<<<<
+ * 
+ *         init_noxml(comm)
+ */
+  __pyx_v_self->stats = __pyx_v_stats;
+
+  /* "adios.pyx":1989
+ *         self.stats = stats
  * 
  *         init_noxml(comm)             # <<<<<<<<<<<<<<
  *     ##def __var_factory__(self, name, value):
@@ -31047,7 +32358,7 @@ static int __pyx_pf_5adios_6writer___init__(struct __pyx_obj_5adios_writer *__py
   __pyx_t_2.comm = __pyx_v_comm;
   __pyx_f_5adios_init_noxml(0, &__pyx_t_2); 
 
-  /* "adios.pyx":1961
+  /* "adios.pyx":1970
  *             return self.timeaggregation_buffersize
  * 
  *     def __init__(self, str fname,             # <<<<<<<<<<<<<<
@@ -31067,27 +32378,28 @@ static int __pyx_pf_5adios_6writer___init__(struct __pyx_obj_5adios_writer *__py
   return __pyx_r;
 }
 
-/* "adios.pyx":1983
+/* "adios.pyx":1996
  *     ##    print "attr_factory:", name, value
  * 
  *     def declare_group(self, str gname = None,             # <<<<<<<<<<<<<<
  *                       str method = "POSIX1",
- *                       str method_params = ""):
+ *                       str method_params = "",
  */
 
 /* Python wrapper */
 static PyObject *__pyx_pw_5adios_6writer_3declare_group(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_5adios_6writer_2declare_group[] = "writer.declare_group(self, str gname=None, str method='POSIX1', str method_params='')\n\n        Define a group associated with the file.\n\n        Args:\n            gname (str): group name.\n            method (str, optional): Adios write method (default: 'POSIX1')\n            method_params (str, optional): parameters for the write method (default: '')\n\n        Example:\n\n        >>>  fw.declare_group('group', method='MPI_,  [...]
+static char __pyx_doc_5adios_6writer_2declare_group[] = "writer.declare_group(self, str gname=None, str method='POSIX1', str method_params='', int stats=adios_stat_default)\n\n        Define a group associated with the file.\n\n        Args:\n            gname (str): group name.\n            method (str, optional): Adios write method (default: 'POSIX1')\n            method_params (str, optional): parameters for the write method (default: '')\n            stats (int, optional): statistics [...]
 static PyObject *__pyx_pw_5adios_6writer_3declare_group(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_gname = 0;
   PyObject *__pyx_v_method = 0;
   PyObject *__pyx_v_method_params = 0;
+  int __pyx_v_stats;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("declare_group (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gname,&__pyx_n_s_method,&__pyx_n_s_method_params,0};
-    PyObject* values[3] = {0,0,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gname,&__pyx_n_s_method,&__pyx_n_s_method_params,&__pyx_n_s_stats,0};
+    PyObject* values[4] = {0,0,0,0};
     values[0] = ((PyObject*)Py_None);
     values[1] = ((PyObject*)__pyx_n_s_POSIX1);
     values[2] = ((PyObject*)__pyx_kp_s__10);
@@ -31095,6 +32407,7 @@ static PyObject *__pyx_pw_5adios_6writer_3declare_group(PyObject *__pyx_v_self,
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
@@ -31118,12 +32431,18 @@ static PyObject *__pyx_pw_5adios_6writer_3declare_group(PyObject *__pyx_v_self,
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_method_params);
           if (value) { values[2] = value; kw_args--; }
         }
+        case  3:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_stats);
+          if (value) { values[3] = value; kw_args--; }
+        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "declare_group") < 0)) __PYX_ERR(0, 1983, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "declare_group") < 0)) __PYX_ERR(0, 1996, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
@@ -31134,19 +32453,24 @@ static PyObject *__pyx_pw_5adios_6writer_3declare_group(PyObject *__pyx_v_self,
     __pyx_v_gname = ((PyObject*)values[0]);
     __pyx_v_method = ((PyObject*)values[1]);
     __pyx_v_method_params = ((PyObject*)values[2]);
+    if (values[3]) {
+      __pyx_v_stats = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_stats == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1999, __pyx_L3_error)
+    } else {
+      __pyx_v_stats = __pyx_k__56;
+    }
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("declare_group", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1983, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("declare_group", 0, 0, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1996, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.writer.declare_group", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gname), (&PyString_Type), 1, "gname", 1))) __PYX_ERR(0, 1983, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_method), (&PyString_Type), 1, "method", 1))) __PYX_ERR(0, 1984, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_method_params), (&PyString_Type), 1, "method_params", 1))) __PYX_ERR(0, 1985, __pyx_L1_error)
-  __pyx_r = __pyx_pf_5adios_6writer_2declare_group(((struct __pyx_obj_5adios_writer *)__pyx_v_self), __pyx_v_gname, __pyx_v_method, __pyx_v_method_params);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gname), (&PyString_Type), 1, "gname", 1))) __PYX_ERR(0, 1996, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_method), (&PyString_Type), 1, "method", 1))) __PYX_ERR(0, 1997, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_method_params), (&PyString_Type), 1, "method_params", 1))) __PYX_ERR(0, 1998, __pyx_L1_error)
+  __pyx_r = __pyx_pf_5adios_6writer_2declare_group(((struct __pyx_obj_5adios_writer *)__pyx_v_self), __pyx_v_gname, __pyx_v_method, __pyx_v_method_params, __pyx_v_stats);
 
   /* function exit code */
   goto __pyx_L0;
@@ -31157,20 +32481,22 @@ static PyObject *__pyx_pw_5adios_6writer_3declare_group(PyObject *__pyx_v_self,
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_5adios_6writer_2declare_group(struct __pyx_obj_5adios_writer *__pyx_v_self, PyObject *__pyx_v_gname, PyObject *__pyx_v_method, PyObject *__pyx_v_method_params) {
+static PyObject *__pyx_pf_5adios_6writer_2declare_group(struct __pyx_obj_5adios_writer *__pyx_v_self, PyObject *__pyx_v_gname, PyObject *__pyx_v_method, PyObject *__pyx_v_method_params, int __pyx_v_stats) {
+  long __pyx_v_rank;
+  PyObject *__pyx_v_ftmp = NULL;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   int __pyx_t_2;
   PyObject *__pyx_t_3 = NULL;
-  int64_t __pyx_t_4;
-  struct __pyx_opt_args_5adios_declare_group __pyx_t_5;
-  PyObject *__pyx_t_6 = NULL;
-  struct __pyx_opt_args_5adios_select_method __pyx_t_7;
-  PyObject *__pyx_t_8 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  int64_t __pyx_t_6;
+  struct __pyx_opt_args_5adios_declare_group __pyx_t_7;
+  struct __pyx_opt_args_5adios_select_method __pyx_t_8;
   __Pyx_RefNannySetupContext("declare_group", 0);
 
-  /* "adios.pyx":1999
+  /* "adios.pyx":2014
  * 
  *         """
  *         if gname is not None:             # <<<<<<<<<<<<<<
@@ -31181,7 +32507,7 @@ static PyObject *__pyx_pf_5adios_6writer_2declare_group(struct __pyx_obj_5adios_
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "adios.pyx":2000
+    /* "adios.pyx":2015
  *         """
  *         if gname is not None:
  *             self.gname = gname             # <<<<<<<<<<<<<<
@@ -31194,7 +32520,7 @@ static PyObject *__pyx_pf_5adios_6writer_2declare_group(struct __pyx_obj_5adios_
     __Pyx_DECREF(__pyx_v_self->gname);
     __pyx_v_self->gname = __pyx_v_gname;
 
-    /* "adios.pyx":1999
+    /* "adios.pyx":2014
  * 
  *         """
  *         if gname is not None:             # <<<<<<<<<<<<<<
@@ -31203,58 +32529,149 @@ static PyObject *__pyx_pf_5adios_6writer_2declare_group(struct __pyx_obj_5adios_
  */
   }
 
-  /* "adios.pyx":2002
+  /* "adios.pyx":2017
  *             self.gname = gname
  * 
  *         if self.gname is None:             # <<<<<<<<<<<<<<
- *             self.gname = "group"
- * 
+ *             rank = 0
+ *             if rank == 0:
  */
   __pyx_t_2 = (__pyx_v_self->gname == ((PyObject*)Py_None));
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "adios.pyx":2003
+    /* "adios.pyx":2018
  * 
  *         if self.gname is None:
- *             self.gname = "group"             # <<<<<<<<<<<<<<
+ *             rank = 0             # <<<<<<<<<<<<<<
+ *             if rank == 0:
+ *                 ftmp = tempfile.NamedTemporaryFile().name
+ */
+    __pyx_v_rank = 0;
+
+    /* "adios.pyx":2019
+ *         if self.gname is None:
+ *             rank = 0
+ *             if rank == 0:             # <<<<<<<<<<<<<<
+ *                 ftmp = tempfile.NamedTemporaryFile().name
+ *             else:
+ */
+    __pyx_t_1 = ((__pyx_v_rank == 0) != 0);
+    if (__pyx_t_1) {
+
+      /* "adios.pyx":2020
+ *             rank = 0
+ *             if rank == 0:
+ *                 ftmp = tempfile.NamedTemporaryFile().name             # <<<<<<<<<<<<<<
+ *             else:
+ *                 ftmp = ""
+ */
+      __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_tempfile); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2020, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_NamedTemporaryFile); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2020, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_5);
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      __pyx_t_4 = NULL;
+      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
+        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
+        if (likely(__pyx_t_4)) {
+          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
+          __Pyx_INCREF(__pyx_t_4);
+          __Pyx_INCREF(function);
+          __Pyx_DECREF_SET(__pyx_t_5, function);
+        }
+      }
+      if (__pyx_t_4) {
+        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2020, __pyx_L1_error)
+        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      } else {
+        __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2020, __pyx_L1_error)
+      }
+      __Pyx_GOTREF(__pyx_t_3);
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_name); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2020, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_5);
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __pyx_v_ftmp = __pyx_t_5;
+      __pyx_t_5 = 0;
+
+      /* "adios.pyx":2019
+ *         if self.gname is None:
+ *             rank = 0
+ *             if rank == 0:             # <<<<<<<<<<<<<<
+ *                 ftmp = tempfile.NamedTemporaryFile().name
+ *             else:
+ */
+      goto __pyx_L5;
+    }
+
+    /* "adios.pyx":2022
+ *                 ftmp = tempfile.NamedTemporaryFile().name
+ *             else:
+ *                 ftmp = ""             # <<<<<<<<<<<<<<
+ *             ftmp = ftmp
+ *             self.gname = 'group'+ftmp;
+ */
+    /*else*/ {
+      __Pyx_INCREF(__pyx_kp_s__10);
+      __pyx_v_ftmp = __pyx_kp_s__10;
+    }
+    __pyx_L5:;
+
+    /* "adios.pyx":2023
+ *             else:
+ *                 ftmp = ""
+ *             ftmp = ftmp             # <<<<<<<<<<<<<<
+ *             self.gname = 'group'+ftmp;
  * 
- *         self.gid = declare_group(self.gname, "", adios_stat_default)
  */
-    __Pyx_INCREF(__pyx_n_s_group);
-    __Pyx_GIVEREF(__pyx_n_s_group);
+    __Pyx_INCREF(__pyx_v_ftmp);
+    __Pyx_DECREF_SET(__pyx_v_ftmp, __pyx_v_ftmp);
+
+    /* "adios.pyx":2024
+ *                 ftmp = ""
+ *             ftmp = ftmp
+ *             self.gname = 'group'+ftmp;             # <<<<<<<<<<<<<<
+ * 
+ *         self.gid = declare_group(self.gname, "", stats)
+ */
+    __pyx_t_5 = PyNumber_Add(__pyx_n_s_group, __pyx_v_ftmp); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2024, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    if (!(likely(PyString_CheckExact(__pyx_t_5))||((__pyx_t_5) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_5)->tp_name), 0))) __PYX_ERR(0, 2024, __pyx_L1_error)
+    __Pyx_GIVEREF(__pyx_t_5);
     __Pyx_GOTREF(__pyx_v_self->gname);
     __Pyx_DECREF(__pyx_v_self->gname);
-    __pyx_v_self->gname = __pyx_n_s_group;
+    __pyx_v_self->gname = ((PyObject*)__pyx_t_5);
+    __pyx_t_5 = 0;
 
-    /* "adios.pyx":2002
+    /* "adios.pyx":2017
  *             self.gname = gname
  * 
  *         if self.gname is None:             # <<<<<<<<<<<<<<
- *             self.gname = "group"
- * 
+ *             rank = 0
+ *             if rank == 0:
  */
   }
 
-  /* "adios.pyx":2005
- *             self.gname = "group"
+  /* "adios.pyx":2026
+ *             self.gname = 'group'+ftmp;
  * 
- *         self.gid = declare_group(self.gname, "", adios_stat_default)             # <<<<<<<<<<<<<<
+ *         self.gid = declare_group(self.gname, "", stats)             # <<<<<<<<<<<<<<
  *         self.method = method
  *         self.method_params = method_params
  */
-  __pyx_t_3 = __pyx_v_self->gname;
-  __Pyx_INCREF(__pyx_t_3);
-  __pyx_t_5.__pyx_n = 2;
-  __pyx_t_5.time_index = __pyx_kp_s__10;
-  __pyx_t_5.stats = adios_stat_default;
-  __pyx_t_4 = __pyx_f_5adios_declare_group(((PyObject*)__pyx_t_3), 0, &__pyx_t_5); 
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_v_self->gid = __pyx_t_4;
+  __pyx_t_5 = __pyx_v_self->gname;
+  __Pyx_INCREF(__pyx_t_5);
+  __pyx_t_7.__pyx_n = 2;
+  __pyx_t_7.time_index = __pyx_kp_s__10;
+  __pyx_t_7.stats = __pyx_v_stats;
+  __pyx_t_6 = __pyx_f_5adios_declare_group(((PyObject*)__pyx_t_5), 0, &__pyx_t_7); 
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_v_self->gid = __pyx_t_6;
 
-  /* "adios.pyx":2006
+  /* "adios.pyx":2027
  * 
- *         self.gid = declare_group(self.gname, "", adios_stat_default)
+ *         self.gid = declare_group(self.gname, "", stats)
  *         self.method = method             # <<<<<<<<<<<<<<
  *         self.method_params = method_params
  *         select_method(self.gid, self.method, self.method_params, "")
@@ -31265,8 +32682,8 @@ static PyObject *__pyx_pf_5adios_6writer_2declare_group(struct __pyx_obj_5adios_
   __Pyx_DECREF(__pyx_v_self->method);
   __pyx_v_self->method = __pyx_v_method;
 
-  /* "adios.pyx":2007
- *         self.gid = declare_group(self.gname, "", adios_stat_default)
+  /* "adios.pyx":2028
+ *         self.gid = declare_group(self.gname, "", stats)
  *         self.method = method
  *         self.method_params = method_params             # <<<<<<<<<<<<<<
  *         select_method(self.gid, self.method, self.method_params, "")
@@ -31278,59 +32695,59 @@ static PyObject *__pyx_pf_5adios_6writer_2declare_group(struct __pyx_obj_5adios_
   __Pyx_DECREF(__pyx_v_self->method_params);
   __pyx_v_self->method_params = __pyx_v_method_params;
 
-  /* "adios.pyx":2008
+  /* "adios.pyx":2029
  *         self.method = method
  *         self.method_params = method_params
  *         select_method(self.gid, self.method, self.method_params, "")             # <<<<<<<<<<<<<<
  *         self.set_time_aggregation()
  * 
  */
-  __pyx_t_3 = __pyx_v_self->method;
+  __pyx_t_5 = __pyx_v_self->method;
+  __Pyx_INCREF(__pyx_t_5);
+  __pyx_t_3 = __pyx_v_self->method_params;
   __Pyx_INCREF(__pyx_t_3);
-  __pyx_t_6 = __pyx_v_self->method_params;
-  __Pyx_INCREF(__pyx_t_6);
-  __pyx_t_7.__pyx_n = 2;
-  __pyx_t_7.parameters = ((PyObject*)__pyx_t_6);
-  __pyx_t_7.base_path = __pyx_kp_s__10;
-  __pyx_f_5adios_select_method(__pyx_v_self->gid, ((PyObject*)__pyx_t_3), 0, &__pyx_t_7); 
+  __pyx_t_8.__pyx_n = 2;
+  __pyx_t_8.parameters = ((PyObject*)__pyx_t_3);
+  __pyx_t_8.base_path = __pyx_kp_s__10;
+  __pyx_f_5adios_select_method(__pyx_v_self->gid, ((PyObject*)__pyx_t_5), 0, &__pyx_t_8); 
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-  /* "adios.pyx":2009
+  /* "adios.pyx":2030
  *         self.method_params = method_params
  *         select_method(self.gid, self.method, self.method_params, "")
  *         self.set_time_aggregation()             # <<<<<<<<<<<<<<
  * 
  *     def set_time_aggregation(self, buffer_size = None):
  */
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_set_time_aggregation); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2009, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_8 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
-    __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_3);
-    if (likely(__pyx_t_8)) {
-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
-      __Pyx_INCREF(__pyx_t_8);
+  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_set_time_aggregation); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2030, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __pyx_t_4 = NULL;
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
+    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
+    if (likely(__pyx_t_4)) {
+      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
+      __Pyx_INCREF(__pyx_t_4);
       __Pyx_INCREF(function);
-      __Pyx_DECREF_SET(__pyx_t_3, function);
+      __Pyx_DECREF_SET(__pyx_t_5, function);
     }
   }
-  if (__pyx_t_8) {
-    __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_8); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2009, __pyx_L1_error)
-    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  if (__pyx_t_4) {
+    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2030, __pyx_L1_error)
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   } else {
-    __pyx_t_6 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2009, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2030, __pyx_L1_error)
   }
-  __Pyx_GOTREF(__pyx_t_6);
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-  /* "adios.pyx":1983
+  /* "adios.pyx":1996
  *     ##    print "attr_factory:", name, value
  * 
  *     def declare_group(self, str gname = None,             # <<<<<<<<<<<<<<
  *                       str method = "POSIX1",
- *                       str method_params = ""):
+ *                       str method_params = "",
  */
 
   /* function exit code */
@@ -31338,17 +32755,18 @@ static PyObject *__pyx_pf_5adios_6writer_2declare_group(struct __pyx_obj_5adios_
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_XDECREF(__pyx_t_6);
-  __Pyx_XDECREF(__pyx_t_8);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_5);
   __Pyx_AddTraceback("adios.writer.declare_group", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_ftmp);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios.pyx":2011
+/* "adios.pyx":2032
  *         self.set_time_aggregation()
  * 
  *     def set_time_aggregation(self, buffer_size = None):             # <<<<<<<<<<<<<<
@@ -31385,7 +32803,7 @@ static PyObject *__pyx_pw_5adios_6writer_5set_time_aggregation(PyObject *__pyx_v
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_time_aggregation") < 0)) __PYX_ERR(0, 2011, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_time_aggregation") < 0)) __PYX_ERR(0, 2032, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -31398,7 +32816,7 @@ static PyObject *__pyx_pw_5adios_6writer_5set_time_aggregation(PyObject *__pyx_v
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("set_time_aggregation", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2011, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("set_time_aggregation", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2032, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.writer.set_time_aggregation", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -31419,7 +32837,7 @@ static PyObject *__pyx_pf_5adios_6writer_4set_time_aggregation(struct __pyx_obj_
   uint64_t __pyx_t_3;
   __Pyx_RefNannySetupContext("set_time_aggregation", 0);
 
-  /* "adios.pyx":2015
+  /* "adios.pyx":2036
  *         Set time-aggregation buffersize.
  *         """
  *         if buffer_size is not None:             # <<<<<<<<<<<<<<
@@ -31430,17 +32848,17 @@ static PyObject *__pyx_pf_5adios_6writer_4set_time_aggregation(struct __pyx_obj_
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "adios.pyx":2016
+    /* "adios.pyx":2037
  *         """
  *         if buffer_size is not None:
  *             self.timeaggregation_buffersize = buffer_size             # <<<<<<<<<<<<<<
  *         if self.gid > 0:
  *             set_time_aggregation (self.gid, self.timeaggregation_buffersize, 0);
  */
-    __pyx_t_3 = __Pyx_PyInt_As_uint64_t(__pyx_v_buffer_size); if (unlikely((__pyx_t_3 == (uint64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 2016, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyInt_As_uint64_t(__pyx_v_buffer_size); if (unlikely((__pyx_t_3 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2037, __pyx_L1_error)
     __pyx_v_self->timeaggregation_buffersize = __pyx_t_3;
 
-    /* "adios.pyx":2015
+    /* "adios.pyx":2036
  *         Set time-aggregation buffersize.
  *         """
  *         if buffer_size is not None:             # <<<<<<<<<<<<<<
@@ -31449,7 +32867,7 @@ static PyObject *__pyx_pf_5adios_6writer_4set_time_aggregation(struct __pyx_obj_
  */
   }
 
-  /* "adios.pyx":2017
+  /* "adios.pyx":2038
  *         if buffer_size is not None:
  *             self.timeaggregation_buffersize = buffer_size
  *         if self.gid > 0:             # <<<<<<<<<<<<<<
@@ -31459,7 +32877,7 @@ static PyObject *__pyx_pf_5adios_6writer_4set_time_aggregation(struct __pyx_obj_
   __pyx_t_2 = ((__pyx_v_self->gid > 0) != 0);
   if (__pyx_t_2) {
 
-    /* "adios.pyx":2018
+    /* "adios.pyx":2039
  *             self.timeaggregation_buffersize = buffer_size
  *         if self.gid > 0:
  *             set_time_aggregation (self.gid, self.timeaggregation_buffersize, 0);             # <<<<<<<<<<<<<<
@@ -31468,7 +32886,7 @@ static PyObject *__pyx_pf_5adios_6writer_4set_time_aggregation(struct __pyx_obj_
  */
     __pyx_f_5adios_set_time_aggregation(__pyx_v_self->gid, __pyx_v_self->timeaggregation_buffersize, 0, 0);
 
-    /* "adios.pyx":2017
+    /* "adios.pyx":2038
  *         if buffer_size is not None:
  *             self.timeaggregation_buffersize = buffer_size
  *         if self.gid > 0:             # <<<<<<<<<<<<<<
@@ -31477,7 +32895,7 @@ static PyObject *__pyx_pf_5adios_6writer_4set_time_aggregation(struct __pyx_obj_
  */
   }
 
-  /* "adios.pyx":2011
+  /* "adios.pyx":2032
  *         self.set_time_aggregation()
  * 
  *     def set_time_aggregation(self, buffer_size = None):             # <<<<<<<<<<<<<<
@@ -31497,7 +32915,7 @@ static PyObject *__pyx_pf_5adios_6writer_4set_time_aggregation(struct __pyx_obj_
   return __pyx_r;
 }
 
-/* "adios.pyx":2020
+/* "adios.pyx":2041
  *             set_time_aggregation (self.gid, self.timeaggregation_buffersize, 0);
  * 
  *     def define_var(self, str varname,             # <<<<<<<<<<<<<<
@@ -31520,11 +32938,11 @@ static PyObject *__pyx_pw_5adios_6writer_7define_var(PyObject *__pyx_v_self, PyO
   {
     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_varname,&__pyx_n_s_ldim,&__pyx_n_s_gdim,&__pyx_n_s_offset,&__pyx_n_s_transform,0};
     PyObject* values[5] = {0,0,0,0,0};
-    values[1] = __pyx_k__55;
-    values[2] = __pyx_k__56;
-    values[3] = __pyx_k__57;
+    values[1] = __pyx_k__57;
+    values[2] = __pyx_k__58;
+    values[3] = __pyx_k__59;
 
-    /* "adios.pyx":2024
+    /* "adios.pyx":2045
  *                    gdim = tuple(),
  *                    offset = tuple(),
  *                    transform = None):             # <<<<<<<<<<<<<<
@@ -31571,7 +32989,7 @@ static PyObject *__pyx_pw_5adios_6writer_7define_var(PyObject *__pyx_v_self, PyO
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_var") < 0)) __PYX_ERR(0, 2020, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_var") < 0)) __PYX_ERR(0, 2041, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -31592,16 +33010,16 @@ static PyObject *__pyx_pw_5adios_6writer_7define_var(PyObject *__pyx_v_self, PyO
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("define_var", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2020, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("define_var", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2041, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.writer.define_var", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_varname), (&PyString_Type), 1, "varname", 1))) __PYX_ERR(0, 2020, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_varname), (&PyString_Type), 1, "varname", 1))) __PYX_ERR(0, 2041, __pyx_L1_error)
   __pyx_r = __pyx_pf_5adios_6writer_6define_var(((struct __pyx_obj_5adios_writer *)__pyx_v_self), __pyx_v_varname, __pyx_v_ldim, __pyx_v_gdim, __pyx_v_offset, __pyx_v_transform);
 
-  /* "adios.pyx":2020
+  /* "adios.pyx":2041
  *             set_time_aggregation (self.gid, self.timeaggregation_buffersize, 0);
  * 
  *     def define_var(self, str varname,             # <<<<<<<<<<<<<<
@@ -31626,14 +33044,14 @@ static PyObject *__pyx_pf_5adios_6writer_6define_var(struct __pyx_obj_5adios_wri
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("define_var", 0);
 
-  /* "adios.pyx":2042
+  /* "adios.pyx":2063
  * 
  *         """
  *         self.vars[varname] = varinfo(varname, ldim, gdim, offset, transform=transform)             # <<<<<<<<<<<<<<
  * 
  *     def define_attr(self, str attrname):
  */
-  __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2042, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2063, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_v_varname);
   __Pyx_GIVEREF(__pyx_v_varname);
@@ -31647,21 +33065,21 @@ static PyObject *__pyx_pf_5adios_6writer_6define_var(struct __pyx_obj_5adios_wri
   __Pyx_INCREF(__pyx_v_offset);
   __Pyx_GIVEREF(__pyx_v_offset);
   PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_v_offset);
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2042, __pyx_L1_error)
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2063, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_transform, __pyx_v_transform) < 0) __PYX_ERR(0, 2042, __pyx_L1_error)
-  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5adios_varinfo), __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2042, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_transform, __pyx_v_transform) < 0) __PYX_ERR(0, 2063, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5adios_varinfo), __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2063, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   if (unlikely(__pyx_v_self->vars == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-    __PYX_ERR(0, 2042, __pyx_L1_error)
+    __PYX_ERR(0, 2063, __pyx_L1_error)
   }
-  if (unlikely(PyDict_SetItem(__pyx_v_self->vars, __pyx_v_varname, __pyx_t_3) < 0)) __PYX_ERR(0, 2042, __pyx_L1_error)
+  if (unlikely(PyDict_SetItem(__pyx_v_self->vars, __pyx_v_varname, __pyx_t_3) < 0)) __PYX_ERR(0, 2063, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "adios.pyx":2020
+  /* "adios.pyx":2041
  *             set_time_aggregation (self.gid, self.timeaggregation_buffersize, 0);
  * 
  *     def define_var(self, str varname,             # <<<<<<<<<<<<<<
@@ -31684,7 +33102,7 @@ static PyObject *__pyx_pf_5adios_6writer_6define_var(struct __pyx_obj_5adios_wri
   return __pyx_r;
 }
 
-/* "adios.pyx":2044
+/* "adios.pyx":2065
  *         self.vars[varname] = varinfo(varname, ldim, gdim, offset, transform=transform)
  * 
  *     def define_attr(self, str attrname):             # <<<<<<<<<<<<<<
@@ -31699,7 +33117,7 @@ static PyObject *__pyx_pw_5adios_6writer_9define_attr(PyObject *__pyx_v_self, Py
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("define_attr (wrapper)", 0);
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_attrname), (&PyString_Type), 1, "attrname", 1))) __PYX_ERR(0, 2044, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_attrname), (&PyString_Type), 1, "attrname", 1))) __PYX_ERR(0, 2065, __pyx_L1_error)
   __pyx_r = __pyx_pf_5adios_6writer_8define_attr(((struct __pyx_obj_5adios_writer *)__pyx_v_self), ((PyObject*)__pyx_v_attrname));
 
   /* function exit code */
@@ -31719,33 +33137,33 @@ static PyObject *__pyx_pf_5adios_6writer_8define_attr(struct __pyx_obj_5adios_wr
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("define_attr", 0);
 
-  /* "adios.pyx":2052
+  /* "adios.pyx":2073
  *         """
  * 
  *         self.attrs[attrname] = attrinfo(attrname, is_static=True)             # <<<<<<<<<<<<<<
  * 
  *     def define_dynamic_attr(self, str attrname,
  */
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2052, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2073, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_v_attrname);
   __Pyx_GIVEREF(__pyx_v_attrname);
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_attrname);
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2052, __pyx_L1_error)
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2073, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_is_static, Py_True) < 0) __PYX_ERR(0, 2052, __pyx_L1_error)
-  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5adios_attrinfo), __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2052, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_is_static, Py_True) < 0) __PYX_ERR(0, 2073, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5adios_attrinfo), __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2073, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   if (unlikely(__pyx_v_self->attrs == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-    __PYX_ERR(0, 2052, __pyx_L1_error)
+    __PYX_ERR(0, 2073, __pyx_L1_error)
   }
-  if (unlikely(PyDict_SetItem(__pyx_v_self->attrs, __pyx_v_attrname, __pyx_t_3) < 0)) __PYX_ERR(0, 2052, __pyx_L1_error)
+  if (unlikely(PyDict_SetItem(__pyx_v_self->attrs, __pyx_v_attrname, __pyx_t_3) < 0)) __PYX_ERR(0, 2073, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "adios.pyx":2044
+  /* "adios.pyx":2065
  *         self.vars[varname] = varinfo(varname, ldim, gdim, offset, transform=transform)
  * 
  *     def define_attr(self, str attrname):             # <<<<<<<<<<<<<<
@@ -31768,7 +33186,7 @@ static PyObject *__pyx_pf_5adios_6writer_8define_attr(struct __pyx_obj_5adios_wr
   return __pyx_r;
 }
 
-/* "adios.pyx":2054
+/* "adios.pyx":2075
  *         self.attrs[attrname] = attrinfo(attrname, is_static=True)
  * 
  *     def define_dynamic_attr(self, str attrname,             # <<<<<<<<<<<<<<
@@ -31807,16 +33225,16 @@ static PyObject *__pyx_pw_5adios_6writer_11define_dynamic_attr(PyObject *__pyx_v
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_varname)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_dynamic_attr", 1, 3, 3, 1); __PYX_ERR(0, 2054, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_dynamic_attr", 1, 3, 3, 1); __PYX_ERR(0, 2075, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_dtype)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_dynamic_attr", 1, 3, 3, 2); __PYX_ERR(0, 2054, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_dynamic_attr", 1, 3, 3, 2); __PYX_ERR(0, 2075, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_dynamic_attr") < 0)) __PYX_ERR(0, 2054, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_dynamic_attr") < 0)) __PYX_ERR(0, 2075, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -31831,14 +33249,14 @@ static PyObject *__pyx_pw_5adios_6writer_11define_dynamic_attr(PyObject *__pyx_v
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("define_dynamic_attr", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2054, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("define_dynamic_attr", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2075, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.writer.define_dynamic_attr", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_attrname), (&PyString_Type), 1, "attrname", 1))) __PYX_ERR(0, 2054, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_varname), (&PyString_Type), 1, "varname", 1))) __PYX_ERR(0, 2055, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_attrname), (&PyString_Type), 1, "attrname", 1))) __PYX_ERR(0, 2075, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_varname), (&PyString_Type), 1, "varname", 1))) __PYX_ERR(0, 2076, __pyx_L1_error)
   __pyx_r = __pyx_pf_5adios_6writer_10define_dynamic_attr(((struct __pyx_obj_5adios_writer *)__pyx_v_self), __pyx_v_attrname, __pyx_v_varname, __pyx_v_dtype);
 
   /* function exit code */
@@ -31858,14 +33276,14 @@ static PyObject *__pyx_pf_5adios_6writer_10define_dynamic_attr(struct __pyx_obj_
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("define_dynamic_attr", 0);
 
-  /* "adios.pyx":2057
+  /* "adios.pyx":2078
  *                             str varname,
  *                             dtype):
  *         self.attrs[attrname] = attrinfo(attrname, varname, dtype, is_static=False)             # <<<<<<<<<<<<<<
  * 
  *     def __setitem__(self, name, val):
  */
-  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2057, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2078, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_v_attrname);
   __Pyx_GIVEREF(__pyx_v_attrname);
@@ -31876,21 +33294,21 @@ static PyObject *__pyx_pf_5adios_6writer_10define_dynamic_attr(struct __pyx_obj_
   __Pyx_INCREF(__pyx_v_dtype);
   __Pyx_GIVEREF(__pyx_v_dtype);
   PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_dtype);
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2057, __pyx_L1_error)
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2078, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_is_static, Py_False) < 0) __PYX_ERR(0, 2057, __pyx_L1_error)
-  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5adios_attrinfo), __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2057, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_is_static, Py_False) < 0) __PYX_ERR(0, 2078, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5adios_attrinfo), __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2078, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   if (unlikely(__pyx_v_self->attrs == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-    __PYX_ERR(0, 2057, __pyx_L1_error)
+    __PYX_ERR(0, 2078, __pyx_L1_error)
   }
-  if (unlikely(PyDict_SetItem(__pyx_v_self->attrs, __pyx_v_attrname, __pyx_t_3) < 0)) __PYX_ERR(0, 2057, __pyx_L1_error)
+  if (unlikely(PyDict_SetItem(__pyx_v_self->attrs, __pyx_v_attrname, __pyx_t_3) < 0)) __PYX_ERR(0, 2078, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "adios.pyx":2054
+  /* "adios.pyx":2075
  *         self.attrs[attrname] = attrinfo(attrname, is_static=True)
  * 
  *     def define_dynamic_attr(self, str attrname,             # <<<<<<<<<<<<<<
@@ -31913,7 +33331,7 @@ static PyObject *__pyx_pf_5adios_6writer_10define_dynamic_attr(struct __pyx_obj_
   return __pyx_r;
 }
 
-/* "adios.pyx":2059
+/* "adios.pyx":2080
  *         self.attrs[attrname] = attrinfo(attrname, varname, dtype, is_static=False)
  * 
  *     def __setitem__(self, name, val):             # <<<<<<<<<<<<<<
@@ -31946,7 +33364,7 @@ static int __pyx_pf_5adios_6writer_12__setitem__(struct __pyx_obj_5adios_writer
   PyObject *__pyx_t_6 = NULL;
   __Pyx_RefNannySetupContext("__setitem__", 0);
 
-  /* "adios.pyx":2060
+  /* "adios.pyx":2081
  * 
  *     def __setitem__(self, name, val):
  *         if self.vars.has_key(name):             # <<<<<<<<<<<<<<
@@ -31955,13 +33373,13 @@ static int __pyx_pf_5adios_6writer_12__setitem__(struct __pyx_obj_5adios_writer
  */
   if (unlikely(__pyx_v_self->vars == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "has_key");
-    __PYX_ERR(0, 2060, __pyx_L1_error)
+    __PYX_ERR(0, 2081, __pyx_L1_error)
   }
-  __pyx_t_1 = PyDict_Contains(__pyx_v_self->vars, __pyx_v_name); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 2060, __pyx_L1_error)
+  __pyx_t_1 = PyDict_Contains(__pyx_v_self->vars, __pyx_v_name); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 2081, __pyx_L1_error)
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "adios.pyx":2061
+    /* "adios.pyx":2082
  *     def __setitem__(self, name, val):
  *         if self.vars.has_key(name):
  *             if not isinstance(val, varinfo):             # <<<<<<<<<<<<<<
@@ -31972,7 +33390,7 @@ static int __pyx_pf_5adios_6writer_12__setitem__(struct __pyx_obj_5adios_writer
     __pyx_t_1 = ((!(__pyx_t_2 != 0)) != 0);
     if (__pyx_t_1) {
 
-      /* "adios.pyx":2062
+      /* "adios.pyx":2083
  *         if self.vars.has_key(name):
  *             if not isinstance(val, varinfo):
  *                 self.vars[name].value = val             # <<<<<<<<<<<<<<
@@ -31981,14 +33399,14 @@ static int __pyx_pf_5adios_6writer_12__setitem__(struct __pyx_obj_5adios_writer
  */
       if (unlikely(__pyx_v_self->vars == Py_None)) {
         PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-        __PYX_ERR(0, 2062, __pyx_L1_error)
+        __PYX_ERR(0, 2083, __pyx_L1_error)
       }
-      __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_v_self->vars, __pyx_v_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2062, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_v_self->vars, __pyx_v_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2083, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      if (__Pyx_PyObject_SetAttrStr(__pyx_t_3, __pyx_n_s_value, __pyx_v_val) < 0) __PYX_ERR(0, 2062, __pyx_L1_error)
+      if (__Pyx_PyObject_SetAttrStr(__pyx_t_3, __pyx_n_s_value, __pyx_v_val) < 0) __PYX_ERR(0, 2083, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-      /* "adios.pyx":2061
+      /* "adios.pyx":2082
  *     def __setitem__(self, name, val):
  *         if self.vars.has_key(name):
  *             if not isinstance(val, varinfo):             # <<<<<<<<<<<<<<
@@ -31998,7 +33416,7 @@ static int __pyx_pf_5adios_6writer_12__setitem__(struct __pyx_obj_5adios_writer
       goto __pyx_L4;
     }
 
-    /* "adios.pyx":2064
+    /* "adios.pyx":2085
  *                 self.vars[name].value = val
  *             else:
  *                 self.vars[name] = val             # <<<<<<<<<<<<<<
@@ -32008,13 +33426,13 @@ static int __pyx_pf_5adios_6writer_12__setitem__(struct __pyx_obj_5adios_writer
     /*else*/ {
       if (unlikely(__pyx_v_self->vars == Py_None)) {
         PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-        __PYX_ERR(0, 2064, __pyx_L1_error)
+        __PYX_ERR(0, 2085, __pyx_L1_error)
       }
-      if (unlikely(PyDict_SetItem(__pyx_v_self->vars, __pyx_v_name, __pyx_v_val) < 0)) __PYX_ERR(0, 2064, __pyx_L1_error)
+      if (unlikely(PyDict_SetItem(__pyx_v_self->vars, __pyx_v_name, __pyx_v_val) < 0)) __PYX_ERR(0, 2085, __pyx_L1_error)
     }
     __pyx_L4:;
 
-    /* "adios.pyx":2060
+    /* "adios.pyx":2081
  * 
  *     def __setitem__(self, name, val):
  *         if self.vars.has_key(name):             # <<<<<<<<<<<<<<
@@ -32024,7 +33442,7 @@ static int __pyx_pf_5adios_6writer_12__setitem__(struct __pyx_obj_5adios_writer
     goto __pyx_L3;
   }
 
-  /* "adios.pyx":2065
+  /* "adios.pyx":2086
  *             else:
  *                 self.vars[name] = val
  *         elif self.attrs.has_key(name):             # <<<<<<<<<<<<<<
@@ -32033,13 +33451,13 @@ static int __pyx_pf_5adios_6writer_12__setitem__(struct __pyx_obj_5adios_writer
  */
   if (unlikely(__pyx_v_self->attrs == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "has_key");
-    __PYX_ERR(0, 2065, __pyx_L1_error)
+    __PYX_ERR(0, 2086, __pyx_L1_error)
   }
-  __pyx_t_1 = PyDict_Contains(__pyx_v_self->attrs, __pyx_v_name); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 2065, __pyx_L1_error)
+  __pyx_t_1 = PyDict_Contains(__pyx_v_self->attrs, __pyx_v_name); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 2086, __pyx_L1_error)
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "adios.pyx":2066
+    /* "adios.pyx":2087
  *                 self.vars[name] = val
  *         elif self.attrs.has_key(name):
  *             if not isinstance(val, attrinfo):             # <<<<<<<<<<<<<<
@@ -32050,20 +33468,20 @@ static int __pyx_pf_5adios_6writer_12__setitem__(struct __pyx_obj_5adios_writer
     __pyx_t_1 = ((!(__pyx_t_2 != 0)) != 0);
     if (__pyx_t_1) {
 
-      /* "adios.pyx":2067
+      /* "adios.pyx":2088
  *         elif self.attrs.has_key(name):
  *             if not isinstance(val, attrinfo):
  *                 self.attrs[name] = attrinfo(name, val, np.array(val).dtype)             # <<<<<<<<<<<<<<
  *             else:
  *                 self.attrs[name].value = val
  */
-      __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2067, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2088, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_array); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2067, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_array); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2088, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __pyx_t_4 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_5))) {
+      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
         __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
         if (likely(__pyx_t_4)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
@@ -32073,24 +33491,42 @@ static int __pyx_pf_5adios_6writer_12__setitem__(struct __pyx_obj_5adios_writer
         }
       }
       if (!__pyx_t_4) {
-        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_val); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2067, __pyx_L1_error)
+        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_val); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2088, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
       } else {
-        __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2067, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_6);
-        __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL;
-        __Pyx_INCREF(__pyx_v_val);
-        __Pyx_GIVEREF(__pyx_v_val);
-        PyTuple_SET_ITEM(__pyx_t_6, 0+1, __pyx_v_val);
-        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2067, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_3);
-        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+        #if CYTHON_FAST_PYCALL
+        if (PyFunction_Check(__pyx_t_5)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_v_val};
+          __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2088, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+          __Pyx_GOTREF(__pyx_t_3);
+        } else
+        #endif
+        #if CYTHON_FAST_PYCCALL
+        if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_v_val};
+          __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2088, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+          __Pyx_GOTREF(__pyx_t_3);
+        } else
+        #endif
+        {
+          __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2088, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_6);
+          __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL;
+          __Pyx_INCREF(__pyx_v_val);
+          __Pyx_GIVEREF(__pyx_v_val);
+          PyTuple_SET_ITEM(__pyx_t_6, 0+1, __pyx_v_val);
+          __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2088, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+        }
       }
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_dtype); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2067, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_dtype); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2088, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2067, __pyx_L1_error)
+      __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2088, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_INCREF(__pyx_v_name);
       __Pyx_GIVEREF(__pyx_v_name);
@@ -32101,17 +33537,17 @@ static int __pyx_pf_5adios_6writer_12__setitem__(struct __pyx_obj_5adios_writer
       __Pyx_GIVEREF(__pyx_t_5);
       PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_5);
       __pyx_t_5 = 0;
-      __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5adios_attrinfo), __pyx_t_3, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2067, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5adios_attrinfo), __pyx_t_3, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2088, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       if (unlikely(__pyx_v_self->attrs == Py_None)) {
         PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-        __PYX_ERR(0, 2067, __pyx_L1_error)
+        __PYX_ERR(0, 2088, __pyx_L1_error)
       }
-      if (unlikely(PyDict_SetItem(__pyx_v_self->attrs, __pyx_v_name, __pyx_t_5) < 0)) __PYX_ERR(0, 2067, __pyx_L1_error)
+      if (unlikely(PyDict_SetItem(__pyx_v_self->attrs, __pyx_v_name, __pyx_t_5) < 0)) __PYX_ERR(0, 2088, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-      /* "adios.pyx":2066
+      /* "adios.pyx":2087
  *                 self.vars[name] = val
  *         elif self.attrs.has_key(name):
  *             if not isinstance(val, attrinfo):             # <<<<<<<<<<<<<<
@@ -32121,7 +33557,7 @@ static int __pyx_pf_5adios_6writer_12__setitem__(struct __pyx_obj_5adios_writer
       goto __pyx_L5;
     }
 
-    /* "adios.pyx":2069
+    /* "adios.pyx":2090
  *                 self.attrs[name] = attrinfo(name, val, np.array(val).dtype)
  *             else:
  *                 self.attrs[name].value = val             # <<<<<<<<<<<<<<
@@ -32131,16 +33567,16 @@ static int __pyx_pf_5adios_6writer_12__setitem__(struct __pyx_obj_5adios_writer
     /*else*/ {
       if (unlikely(__pyx_v_self->attrs == Py_None)) {
         PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-        __PYX_ERR(0, 2069, __pyx_L1_error)
+        __PYX_ERR(0, 2090, __pyx_L1_error)
       }
-      __pyx_t_5 = __Pyx_PyDict_GetItem(__pyx_v_self->attrs, __pyx_v_name); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2069, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_PyDict_GetItem(__pyx_v_self->attrs, __pyx_v_name); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2090, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
-      if (__Pyx_PyObject_SetAttrStr(__pyx_t_5, __pyx_n_s_value, __pyx_v_val) < 0) __PYX_ERR(0, 2069, __pyx_L1_error)
+      if (__Pyx_PyObject_SetAttrStr(__pyx_t_5, __pyx_n_s_value, __pyx_v_val) < 0) __PYX_ERR(0, 2090, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     }
     __pyx_L5:;
 
-    /* "adios.pyx":2065
+    /* "adios.pyx":2086
  *             else:
  *                 self.vars[name] = val
  *         elif self.attrs.has_key(name):             # <<<<<<<<<<<<<<
@@ -32150,7 +33586,7 @@ static int __pyx_pf_5adios_6writer_12__setitem__(struct __pyx_obj_5adios_writer
     goto __pyx_L3;
   }
 
-  /* "adios.pyx":2071
+  /* "adios.pyx":2092
  *                 self.attrs[name].value = val
  *         else:
  *             n = np.array(val)             # <<<<<<<<<<<<<<
@@ -32158,13 +33594,13 @@ static int __pyx_pf_5adios_6writer_12__setitem__(struct __pyx_obj_5adios_writer
  *             self.vars[name].value = val
  */
   /*else*/ {
-    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2071, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2092, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_array); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2071, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_array); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2092, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __pyx_t_3 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_6))) {
+    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
       __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_6);
       if (likely(__pyx_t_3)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
@@ -32174,33 +33610,51 @@ static int __pyx_pf_5adios_6writer_12__setitem__(struct __pyx_obj_5adios_writer
       }
     }
     if (!__pyx_t_3) {
-      __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_val); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2071, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_val); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2092, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
     } else {
-      __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2071, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_4);
-      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
-      __Pyx_INCREF(__pyx_v_val);
-      __Pyx_GIVEREF(__pyx_v_val);
-      PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_val);
-      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2071, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_5);
-      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_6)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_val};
+        __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2092, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+        __Pyx_GOTREF(__pyx_t_5);
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_val};
+        __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2092, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+        __Pyx_GOTREF(__pyx_t_5);
+      } else
+      #endif
+      {
+        __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2092, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_4);
+        __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+        __Pyx_INCREF(__pyx_v_val);
+        __Pyx_GIVEREF(__pyx_v_val);
+        PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_val);
+        __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2092, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_5);
+        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      }
     }
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __pyx_v_n = __pyx_t_5;
     __pyx_t_5 = 0;
 
-    /* "adios.pyx":2072
+    /* "adios.pyx":2093
  *         else:
  *             n = np.array(val)
  *             self.vars[name] = varinfo(name, n.shape)             # <<<<<<<<<<<<<<
  *             self.vars[name].value = val
  * 
  */
-    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_n, __pyx_n_s_shape); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2072, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_n, __pyx_n_s_shape); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2093, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2072, __pyx_L1_error)
+    __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2093, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_INCREF(__pyx_v_name);
     __Pyx_GIVEREF(__pyx_v_name);
@@ -32208,17 +33662,17 @@ static int __pyx_pf_5adios_6writer_12__setitem__(struct __pyx_obj_5adios_writer
     __Pyx_GIVEREF(__pyx_t_5);
     PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_5);
     __pyx_t_5 = 0;
-    __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5adios_varinfo), __pyx_t_6, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2072, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5adios_varinfo), __pyx_t_6, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2093, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     if (unlikely(__pyx_v_self->vars == Py_None)) {
       PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-      __PYX_ERR(0, 2072, __pyx_L1_error)
+      __PYX_ERR(0, 2093, __pyx_L1_error)
     }
-    if (unlikely(PyDict_SetItem(__pyx_v_self->vars, __pyx_v_name, __pyx_t_5) < 0)) __PYX_ERR(0, 2072, __pyx_L1_error)
+    if (unlikely(PyDict_SetItem(__pyx_v_self->vars, __pyx_v_name, __pyx_t_5) < 0)) __PYX_ERR(0, 2093, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-    /* "adios.pyx":2073
+    /* "adios.pyx":2094
  *             n = np.array(val)
  *             self.vars[name] = varinfo(name, n.shape)
  *             self.vars[name].value = val             # <<<<<<<<<<<<<<
@@ -32227,16 +33681,16 @@ static int __pyx_pf_5adios_6writer_12__setitem__(struct __pyx_obj_5adios_writer
  */
     if (unlikely(__pyx_v_self->vars == Py_None)) {
       PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-      __PYX_ERR(0, 2073, __pyx_L1_error)
+      __PYX_ERR(0, 2094, __pyx_L1_error)
     }
-    __pyx_t_5 = __Pyx_PyDict_GetItem(__pyx_v_self->vars, __pyx_v_name); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2073, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyDict_GetItem(__pyx_v_self->vars, __pyx_v_name); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2094, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    if (__Pyx_PyObject_SetAttrStr(__pyx_t_5, __pyx_n_s_value, __pyx_v_val) < 0) __PYX_ERR(0, 2073, __pyx_L1_error)
+    if (__Pyx_PyObject_SetAttrStr(__pyx_t_5, __pyx_n_s_value, __pyx_v_val) < 0) __PYX_ERR(0, 2094, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   }
   __pyx_L3:;
 
-  /* "adios.pyx":2059
+  /* "adios.pyx":2080
  *         self.attrs[attrname] = attrinfo(attrname, varname, dtype, is_static=False)
  * 
  *     def __setitem__(self, name, val):             # <<<<<<<<<<<<<<
@@ -32260,7 +33714,7 @@ static int __pyx_pf_5adios_6writer_12__setitem__(struct __pyx_obj_5adios_writer
   return __pyx_r;
 }
 
-/* "adios.pyx":2075
+/* "adios.pyx":2096
  *             self.vars[name].value = val
  * 
  *     def __getitem__(self, name):             # <<<<<<<<<<<<<<
@@ -32290,7 +33744,7 @@ static PyObject *__pyx_pf_5adios_6writer_14__getitem__(struct __pyx_obj_5adios_w
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("__getitem__", 0);
 
-  /* "adios.pyx":2076
+  /* "adios.pyx":2097
  * 
  *     def __getitem__(self, name):
  *         if self.vars.has_key(name):             # <<<<<<<<<<<<<<
@@ -32299,13 +33753,13 @@ static PyObject *__pyx_pf_5adios_6writer_14__getitem__(struct __pyx_obj_5adios_w
  */
   if (unlikely(__pyx_v_self->vars == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "has_key");
-    __PYX_ERR(0, 2076, __pyx_L1_error)
+    __PYX_ERR(0, 2097, __pyx_L1_error)
   }
-  __pyx_t_1 = PyDict_Contains(__pyx_v_self->vars, __pyx_v_name); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 2076, __pyx_L1_error)
+  __pyx_t_1 = PyDict_Contains(__pyx_v_self->vars, __pyx_v_name); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 2097, __pyx_L1_error)
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "adios.pyx":2077
+    /* "adios.pyx":2098
  *     def __getitem__(self, name):
  *         if self.vars.has_key(name):
  *             return self.vars[name]             # <<<<<<<<<<<<<<
@@ -32315,15 +33769,15 @@ static PyObject *__pyx_pf_5adios_6writer_14__getitem__(struct __pyx_obj_5adios_w
     __Pyx_XDECREF(__pyx_r);
     if (unlikely(__pyx_v_self->vars == Py_None)) {
       PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-      __PYX_ERR(0, 2077, __pyx_L1_error)
+      __PYX_ERR(0, 2098, __pyx_L1_error)
     }
-    __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_v_self->vars, __pyx_v_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2077, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_v_self->vars, __pyx_v_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2098, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_r = __pyx_t_3;
     __pyx_t_3 = 0;
     goto __pyx_L0;
 
-    /* "adios.pyx":2076
+    /* "adios.pyx":2097
  * 
  *     def __getitem__(self, name):
  *         if self.vars.has_key(name):             # <<<<<<<<<<<<<<
@@ -32332,7 +33786,7 @@ static PyObject *__pyx_pf_5adios_6writer_14__getitem__(struct __pyx_obj_5adios_w
  */
   }
 
-  /* "adios.pyx":2078
+  /* "adios.pyx":2099
  *         if self.vars.has_key(name):
  *             return self.vars[name]
  *         elif self.attrs.has_key(name):             # <<<<<<<<<<<<<<
@@ -32341,13 +33795,13 @@ static PyObject *__pyx_pf_5adios_6writer_14__getitem__(struct __pyx_obj_5adios_w
  */
   if (unlikely(__pyx_v_self->attrs == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "has_key");
-    __PYX_ERR(0, 2078, __pyx_L1_error)
+    __PYX_ERR(0, 2099, __pyx_L1_error)
   }
-  __pyx_t_2 = PyDict_Contains(__pyx_v_self->attrs, __pyx_v_name); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 2078, __pyx_L1_error)
+  __pyx_t_2 = PyDict_Contains(__pyx_v_self->attrs, __pyx_v_name); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 2099, __pyx_L1_error)
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "adios.pyx":2079
+    /* "adios.pyx":2100
  *             return self.vars[name]
  *         elif self.attrs.has_key(name):
  *             return self.attrs[name]             # <<<<<<<<<<<<<<
@@ -32357,15 +33811,15 @@ static PyObject *__pyx_pf_5adios_6writer_14__getitem__(struct __pyx_obj_5adios_w
     __Pyx_XDECREF(__pyx_r);
     if (unlikely(__pyx_v_self->attrs == Py_None)) {
       PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-      __PYX_ERR(0, 2079, __pyx_L1_error)
+      __PYX_ERR(0, 2100, __pyx_L1_error)
     }
-    __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_v_self->attrs, __pyx_v_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2079, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_v_self->attrs, __pyx_v_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2100, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_r = __pyx_t_3;
     __pyx_t_3 = 0;
     goto __pyx_L0;
 
-    /* "adios.pyx":2078
+    /* "adios.pyx":2099
  *         if self.vars.has_key(name):
  *             return self.vars[name]
  *         elif self.attrs.has_key(name):             # <<<<<<<<<<<<<<
@@ -32374,7 +33828,7 @@ static PyObject *__pyx_pf_5adios_6writer_14__getitem__(struct __pyx_obj_5adios_w
  */
   }
 
-  /* "adios.pyx":2081
+  /* "adios.pyx":2102
  *             return self.attrs[name]
  *         else:
  *             raise KeyError(name)             # <<<<<<<<<<<<<<
@@ -32382,20 +33836,20 @@ static PyObject *__pyx_pf_5adios_6writer_14__getitem__(struct __pyx_obj_5adios_w
  *     def close(self):
  */
   /*else*/ {
-    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2081, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2102, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_name);
     __Pyx_GIVEREF(__pyx_v_name);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_name);
-    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_KeyError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2081, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_KeyError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2102, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_Raise(__pyx_t_4, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    __PYX_ERR(0, 2081, __pyx_L1_error)
+    __PYX_ERR(0, 2102, __pyx_L1_error)
   }
 
-  /* "adios.pyx":2075
+  /* "adios.pyx":2096
  *             self.vars[name].value = val
  * 
  *     def __getitem__(self, name):             # <<<<<<<<<<<<<<
@@ -32415,7 +33869,7 @@ static PyObject *__pyx_pf_5adios_6writer_14__getitem__(struct __pyx_obj_5adios_w
   return __pyx_r;
 }
 
-/* "adios.pyx":2083
+/* "adios.pyx":2104
  *             raise KeyError(name)
  * 
  *     def close(self):             # <<<<<<<<<<<<<<
@@ -32451,136 +33905,135 @@ static PyObject *__pyx_pf_5adios_6writer_16close(struct __pyx_obj_5adios_writer
   PyObject *__pyx_t_2 = NULL;
   PyObject *__pyx_t_3 = NULL;
   PyObject *__pyx_t_4 = NULL;
-  Py_ssize_t __pyx_t_5;
-  Py_ssize_t __pyx_t_6;
-  int __pyx_t_7;
-  int __pyx_t_8;
+  int64_t __pyx_t_5;
+  struct __pyx_opt_args_5adios_open __pyx_t_6;
+  Py_ssize_t __pyx_t_7;
+  Py_ssize_t __pyx_t_8;
   int __pyx_t_9;
-  PyObject *__pyx_t_10 = NULL;
-  PyObject *__pyx_t_11 = NULL;
+  int __pyx_t_10;
+  int __pyx_t_11;
   PyObject *__pyx_t_12 = NULL;
-  PyObject *(*__pyx_t_13)(PyObject *);
+  PyObject *__pyx_t_13 = NULL;
+  PyObject *__pyx_t_14 = NULL;
+  PyObject *(*__pyx_t_15)(PyObject *);
   __Pyx_RefNannySetupContext("close", 0);
 
-  /* "adios.pyx":2087
+  /* "adios.pyx":2108
  *         Write variables and attributes to a file and close the writer.
  *         """
  *         if self.gid == 0:             # <<<<<<<<<<<<<<
- *             self.declare_group()
+ *             self.declare_group(method=self.method, method_params=self.method_params, stats=self.stats)
  * 
  */
   __pyx_t_1 = ((__pyx_v_self->gid == 0) != 0);
   if (__pyx_t_1) {
 
-    /* "adios.pyx":2088
+    /* "adios.pyx":2109
  *         """
  *         if self.gid == 0:
- *             self.declare_group()             # <<<<<<<<<<<<<<
+ *             self.declare_group(method=self.method, method_params=self.method_params, stats=self.stats)             # <<<<<<<<<<<<<<
  * 
- *         fd = open(self.gname, self.fname, self.mode)
+ *         fd = open(self.gname, self.fname, self.mode, comm=self.comm)
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_declare_group); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2088, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
-      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
-      if (likely(__pyx_t_4)) {
-        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
-        __Pyx_INCREF(__pyx_t_4);
-        __Pyx_INCREF(function);
-        __Pyx_DECREF_SET(__pyx_t_3, function);
-      }
-    }
-    if (__pyx_t_4) {
-      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2088, __pyx_L1_error)
-      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    } else {
-      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2088, __pyx_L1_error)
-    }
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_declare_group); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2109, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2109, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_method, __pyx_v_self->method) < 0) __PYX_ERR(0, 2109, __pyx_L1_error)
+    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_method_params, __pyx_v_self->method_params) < 0) __PYX_ERR(0, 2109, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_self->stats); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2109, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_stats, __pyx_t_4) < 0) __PYX_ERR(0, 2109, __pyx_L1_error)
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2109, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-    /* "adios.pyx":2087
+    /* "adios.pyx":2108
  *         Write variables and attributes to a file and close the writer.
  *         """
  *         if self.gid == 0:             # <<<<<<<<<<<<<<
- *             self.declare_group()
+ *             self.declare_group(method=self.method, method_params=self.method_params, stats=self.stats)
  * 
  */
   }
 
-  /* "adios.pyx":2090
- *             self.declare_group()
+  /* "adios.pyx":2111
+ *             self.declare_group(method=self.method, method_params=self.method_params, stats=self.stats)
  * 
- *         fd = open(self.gname, self.fname, self.mode)             # <<<<<<<<<<<<<<
+ *         fd = open(self.gname, self.fname, self.mode, comm=self.comm)             # <<<<<<<<<<<<<<
  * 
  *         extra_vars = dict()
  */
-  __pyx_t_2 = __pyx_v_self->gname;
-  __Pyx_INCREF(__pyx_t_2);
+  __pyx_t_4 = __pyx_v_self->gname;
+  __Pyx_INCREF(__pyx_t_4);
   __pyx_t_3 = __pyx_v_self->fname;
   __Pyx_INCREF(__pyx_t_3);
-  __pyx_t_4 = __pyx_v_self->mode;
-  __Pyx_INCREF(__pyx_t_4);
-  __pyx_v_fd = __pyx_f_5adios_open(((PyObject*)__pyx_t_2), ((PyObject*)__pyx_t_3), ((PyObject*)__pyx_t_4), 0, NULL);
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_2 = __pyx_v_self->mode;
+  __Pyx_INCREF(__pyx_t_2);
+  __pyx_t_6.__pyx_n = 1;
+  __pyx_t_6.comm = __pyx_v_self->comm;
+  __pyx_t_5 = __pyx_f_5adios_open(((PyObject*)__pyx_t_4), ((PyObject*)__pyx_t_3), ((PyObject*)__pyx_t_2), 0, &__pyx_t_6); 
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_v_fd = __pyx_t_5;
 
-  /* "adios.pyx":2092
- *         fd = open(self.gname, self.fname, self.mode)
+  /* "adios.pyx":2113
+ *         fd = open(self.gname, self.fname, self.mode, comm=self.comm)
  * 
  *         extra_vars = dict()             # <<<<<<<<<<<<<<
  *         extra_attrs = dict()
  * 
  */
-  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2092, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_4);
-  __pyx_v_extra_vars = ((PyObject*)__pyx_t_4);
-  __pyx_t_4 = 0;
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2113, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_v_extra_vars = ((PyObject*)__pyx_t_2);
+  __pyx_t_2 = 0;
 
-  /* "adios.pyx":2093
+  /* "adios.pyx":2114
  * 
  *         extra_vars = dict()
  *         extra_attrs = dict()             # <<<<<<<<<<<<<<
  * 
  *         for key, val in self.vars.iteritems():
  */
-  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2093, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_4);
-  __pyx_v_extra_attrs = ((PyObject*)__pyx_t_4);
-  __pyx_t_4 = 0;
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2114, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_v_extra_attrs = ((PyObject*)__pyx_t_2);
+  __pyx_t_2 = 0;
 
-  /* "adios.pyx":2095
+  /* "adios.pyx":2116
  *         extra_attrs = dict()
  * 
  *         for key, val in self.vars.iteritems():             # <<<<<<<<<<<<<<
  *             if not isinstance(val, varinfo):
  *                 n = np.array(val)
  */
-  __pyx_t_5 = 0;
+  __pyx_t_7 = 0;
   if (unlikely(__pyx_v_self->vars == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "iteritems");
-    __PYX_ERR(0, 2095, __pyx_L1_error)
+    __PYX_ERR(0, 2116, __pyx_L1_error)
   }
-  __pyx_t_3 = __Pyx_dict_iterator(__pyx_v_self->vars, 1, __pyx_n_s_iteritems, (&__pyx_t_6), (&__pyx_t_7)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2095, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_dict_iterator(__pyx_v_self->vars, 1, __pyx_n_s_iteritems, (&__pyx_t_8), (&__pyx_t_9)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2116, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_XDECREF(__pyx_t_4);
-  __pyx_t_4 = __pyx_t_3;
+  __Pyx_XDECREF(__pyx_t_2);
+  __pyx_t_2 = __pyx_t_3;
   __pyx_t_3 = 0;
   while (1) {
-    __pyx_t_8 = __Pyx_dict_iter_next(__pyx_t_4, __pyx_t_6, &__pyx_t_5, &__pyx_t_3, &__pyx_t_2, NULL, __pyx_t_7);
-    if (unlikely(__pyx_t_8 == 0)) break;
-    if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(0, 2095, __pyx_L1_error)
+    __pyx_t_10 = __Pyx_dict_iter_next(__pyx_t_2, __pyx_t_8, &__pyx_t_7, &__pyx_t_3, &__pyx_t_4, NULL, __pyx_t_9);
+    if (unlikely(__pyx_t_10 == 0)) break;
+    if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 2116, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_GOTREF(__pyx_t_4);
     __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_3);
     __pyx_t_3 = 0;
-    __Pyx_XDECREF_SET(__pyx_v_val, __pyx_t_2);
-    __pyx_t_2 = 0;
+    __Pyx_XDECREF_SET(__pyx_v_val, __pyx_t_4);
+    __pyx_t_4 = 0;
 
-    /* "adios.pyx":2096
+    /* "adios.pyx":2117
  * 
  *         for key, val in self.vars.iteritems():
  *             if not isinstance(val, varinfo):             # <<<<<<<<<<<<<<
@@ -32588,85 +34041,103 @@ static PyObject *__pyx_pf_5adios_6writer_16close(struct __pyx_obj_5adios_writer
  *                 extra_vars[key] = varinfo(key, n.shape)
  */
     __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_val, __pyx_ptype_5adios_varinfo); 
-    __pyx_t_9 = ((!(__pyx_t_1 != 0)) != 0);
-    if (__pyx_t_9) {
+    __pyx_t_11 = ((!(__pyx_t_1 != 0)) != 0);
+    if (__pyx_t_11) {
 
-      /* "adios.pyx":2097
+      /* "adios.pyx":2118
  *         for key, val in self.vars.iteritems():
  *             if not isinstance(val, varinfo):
  *                 n = np.array(val)             # <<<<<<<<<<<<<<
  *                 extra_vars[key] = varinfo(key, n.shape)
  *                 extra_vars[key].value = val
  */
-      __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2097, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2118, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_array); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2097, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_10);
+      __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_array); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2118, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_12);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_t_3 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_10))) {
-        __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_10);
+      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_12))) {
+        __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_12);
         if (likely(__pyx_t_3)) {
-          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
+          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12);
           __Pyx_INCREF(__pyx_t_3);
           __Pyx_INCREF(function);
-          __Pyx_DECREF_SET(__pyx_t_10, function);
+          __Pyx_DECREF_SET(__pyx_t_12, function);
         }
       }
       if (!__pyx_t_3) {
-        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_v_val); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2097, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_2);
+        __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_12, __pyx_v_val); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2118, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_4);
       } else {
-        __pyx_t_11 = PyTuple_New(1+1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2097, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_11);
-        __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_3); __pyx_t_3 = NULL;
-        __Pyx_INCREF(__pyx_v_val);
-        __Pyx_GIVEREF(__pyx_v_val);
-        PyTuple_SET_ITEM(__pyx_t_11, 0+1, __pyx_v_val);
-        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_11, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2097, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_2);
-        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+        #if CYTHON_FAST_PYCALL
+        if (PyFunction_Check(__pyx_t_12)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_val};
+          __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_12, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2118, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+          __Pyx_GOTREF(__pyx_t_4);
+        } else
+        #endif
+        #if CYTHON_FAST_PYCCALL
+        if (__Pyx_PyFastCFunction_Check(__pyx_t_12)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_val};
+          __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_12, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2118, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+          __Pyx_GOTREF(__pyx_t_4);
+        } else
+        #endif
+        {
+          __pyx_t_13 = PyTuple_New(1+1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2118, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_13);
+          __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_3); __pyx_t_3 = NULL;
+          __Pyx_INCREF(__pyx_v_val);
+          __Pyx_GIVEREF(__pyx_v_val);
+          PyTuple_SET_ITEM(__pyx_t_13, 0+1, __pyx_v_val);
+          __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_t_13, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2118, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_4);
+          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+        }
       }
-      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
-      __Pyx_XDECREF_SET(__pyx_v_n, __pyx_t_2);
-      __pyx_t_2 = 0;
+      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+      __Pyx_XDECREF_SET(__pyx_v_n, __pyx_t_4);
+      __pyx_t_4 = 0;
 
-      /* "adios.pyx":2098
+      /* "adios.pyx":2119
  *             if not isinstance(val, varinfo):
  *                 n = np.array(val)
  *                 extra_vars[key] = varinfo(key, n.shape)             # <<<<<<<<<<<<<<
  *                 extra_vars[key].value = val
  *             else:
  */
-      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_n, __pyx_n_s_shape); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2098, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_2);
-      __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2098, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_10);
+      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_n, __pyx_n_s_shape); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2119, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __pyx_t_12 = PyTuple_New(2); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2119, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_12);
       __Pyx_INCREF(__pyx_v_key);
       __Pyx_GIVEREF(__pyx_v_key);
-      PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_v_key);
-      __Pyx_GIVEREF(__pyx_t_2);
-      PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_2);
-      __pyx_t_2 = 0;
-      __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5adios_varinfo), __pyx_t_10, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2098, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_2);
-      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
-      if (unlikely(PyDict_SetItem(__pyx_v_extra_vars, __pyx_v_key, __pyx_t_2) < 0)) __PYX_ERR(0, 2098, __pyx_L1_error)
-      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+      PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_v_key);
+      __Pyx_GIVEREF(__pyx_t_4);
+      PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_t_4);
+      __pyx_t_4 = 0;
+      __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5adios_varinfo), __pyx_t_12, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2119, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+      if (unlikely(PyDict_SetItem(__pyx_v_extra_vars, __pyx_v_key, __pyx_t_4) < 0)) __PYX_ERR(0, 2119, __pyx_L1_error)
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-      /* "adios.pyx":2099
+      /* "adios.pyx":2120
  *                 n = np.array(val)
  *                 extra_vars[key] = varinfo(key, n.shape)
  *                 extra_vars[key].value = val             # <<<<<<<<<<<<<<
  *             else:
  *                 if self.is_noxml:
  */
-      __pyx_t_2 = __Pyx_PyDict_GetItem(__pyx_v_extra_vars, __pyx_v_key); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2099, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_2);
-      if (__Pyx_PyObject_SetAttrStr(__pyx_t_2, __pyx_n_s_value, __pyx_v_val) < 0) __PYX_ERR(0, 2099, __pyx_L1_error)
-      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+      __pyx_t_4 = __Pyx_PyDict_GetItem(__pyx_v_extra_vars, __pyx_v_key); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2120, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      if (__Pyx_PyObject_SetAttrStr(__pyx_t_4, __pyx_n_s_value, __pyx_v_val) < 0) __PYX_ERR(0, 2120, __pyx_L1_error)
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-      /* "adios.pyx":2096
+      /* "adios.pyx":2117
  * 
  *         for key, val in self.vars.iteritems():
  *             if not isinstance(val, varinfo):             # <<<<<<<<<<<<<<
@@ -32676,7 +34147,7 @@ static PyObject *__pyx_pf_5adios_6writer_16close(struct __pyx_obj_5adios_writer
       goto __pyx_L6;
     }
 
-    /* "adios.pyx":2101
+    /* "adios.pyx":2122
  *                 extra_vars[key].value = val
  *             else:
  *                 if self.is_noxml:             # <<<<<<<<<<<<<<
@@ -32684,49 +34155,69 @@ static PyObject *__pyx_pf_5adios_6writer_16close(struct __pyx_obj_5adios_writer
  * 
  */
     /*else*/ {
-      __pyx_t_9 = (__pyx_v_self->is_noxml != 0);
-      if (__pyx_t_9) {
+      __pyx_t_11 = (__pyx_v_self->is_noxml != 0);
+      if (__pyx_t_11) {
 
-        /* "adios.pyx":2102
+        /* "adios.pyx":2123
  *             else:
  *                 if self.is_noxml:
  *                     val.define(self.gid)             # <<<<<<<<<<<<<<
  * 
  *         for key, val in extra_vars.iteritems():
  */
-        __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_val, __pyx_n_s_define); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2102, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_10);
-        __pyx_t_11 = __Pyx_PyInt_From_int64_t(__pyx_v_self->gid); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2102, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_11);
+        __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_val, __pyx_n_s_define); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2123, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_12);
+        __pyx_t_13 = __Pyx_PyInt_From_int64_t(__pyx_v_self->gid); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2123, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_13);
         __pyx_t_3 = NULL;
-        if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_10))) {
-          __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_10);
+        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_12))) {
+          __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_12);
           if (likely(__pyx_t_3)) {
-            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
+            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12);
             __Pyx_INCREF(__pyx_t_3);
             __Pyx_INCREF(function);
-            __Pyx_DECREF_SET(__pyx_t_10, function);
+            __Pyx_DECREF_SET(__pyx_t_12, function);
           }
         }
         if (!__pyx_t_3) {
-          __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_11); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2102, __pyx_L1_error)
-          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
-          __Pyx_GOTREF(__pyx_t_2);
+          __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_12, __pyx_t_13); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2123, __pyx_L1_error)
+          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+          __Pyx_GOTREF(__pyx_t_4);
         } else {
-          __pyx_t_12 = PyTuple_New(1+1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2102, __pyx_L1_error)
-          __Pyx_GOTREF(__pyx_t_12);
-          __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_3); __pyx_t_3 = NULL;
-          __Pyx_GIVEREF(__pyx_t_11);
-          PyTuple_SET_ITEM(__pyx_t_12, 0+1, __pyx_t_11);
-          __pyx_t_11 = 0;
-          __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_12, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2102, __pyx_L1_error)
-          __Pyx_GOTREF(__pyx_t_2);
-          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+          #if CYTHON_FAST_PYCALL
+          if (PyFunction_Check(__pyx_t_12)) {
+            PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_t_13};
+            __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_12, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2123, __pyx_L1_error)
+            __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+            __Pyx_GOTREF(__pyx_t_4);
+            __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+          } else
+          #endif
+          #if CYTHON_FAST_PYCCALL
+          if (__Pyx_PyFastCFunction_Check(__pyx_t_12)) {
+            PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_t_13};
+            __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_12, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2123, __pyx_L1_error)
+            __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+            __Pyx_GOTREF(__pyx_t_4);
+            __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+          } else
+          #endif
+          {
+            __pyx_t_14 = PyTuple_New(1+1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 2123, __pyx_L1_error)
+            __Pyx_GOTREF(__pyx_t_14);
+            __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_3); __pyx_t_3 = NULL;
+            __Pyx_GIVEREF(__pyx_t_13);
+            PyTuple_SET_ITEM(__pyx_t_14, 0+1, __pyx_t_13);
+            __pyx_t_13 = 0;
+            __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_t_14, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2123, __pyx_L1_error)
+            __Pyx_GOTREF(__pyx_t_4);
+            __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+          }
         }
-        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
-        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-        /* "adios.pyx":2101
+        /* "adios.pyx":2122
  *                 extra_vars[key].value = val
  *             else:
  *                 if self.is_noxml:             # <<<<<<<<<<<<<<
@@ -32737,75 +34228,95 @@ static PyObject *__pyx_pf_5adios_6writer_16close(struct __pyx_obj_5adios_writer
     }
     __pyx_L6:;
   }
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "adios.pyx":2104
+  /* "adios.pyx":2125
  *                     val.define(self.gid)
  * 
  *         for key, val in extra_vars.iteritems():             # <<<<<<<<<<<<<<
  *             if self.is_noxml: val.define(self.gid)
  *             self.vars[key] = val
  */
-  __pyx_t_6 = 0;
-  __pyx_t_2 = __Pyx_dict_iterator(__pyx_v_extra_vars, 1, __pyx_n_s_iteritems, (&__pyx_t_5), (&__pyx_t_7)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2104, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_4);
-  __pyx_t_4 = __pyx_t_2;
-  __pyx_t_2 = 0;
+  __pyx_t_8 = 0;
+  __pyx_t_4 = __Pyx_dict_iterator(__pyx_v_extra_vars, 1, __pyx_n_s_iteritems, (&__pyx_t_7), (&__pyx_t_9)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2125, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_2);
+  __pyx_t_2 = __pyx_t_4;
+  __pyx_t_4 = 0;
   while (1) {
-    __pyx_t_8 = __Pyx_dict_iter_next(__pyx_t_4, __pyx_t_5, &__pyx_t_6, &__pyx_t_2, &__pyx_t_10, NULL, __pyx_t_7);
-    if (unlikely(__pyx_t_8 == 0)) break;
-    if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(0, 2104, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_2);
-    __Pyx_GOTREF(__pyx_t_10);
-    __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_2);
-    __pyx_t_2 = 0;
-    __Pyx_XDECREF_SET(__pyx_v_val, __pyx_t_10);
-    __pyx_t_10 = 0;
+    __pyx_t_10 = __Pyx_dict_iter_next(__pyx_t_2, __pyx_t_7, &__pyx_t_8, &__pyx_t_4, &__pyx_t_12, NULL, __pyx_t_9);
+    if (unlikely(__pyx_t_10 == 0)) break;
+    if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 2125, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_GOTREF(__pyx_t_12);
+    __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_4);
+    __pyx_t_4 = 0;
+    __Pyx_XDECREF_SET(__pyx_v_val, __pyx_t_12);
+    __pyx_t_12 = 0;
 
-    /* "adios.pyx":2105
+    /* "adios.pyx":2126
  * 
  *         for key, val in extra_vars.iteritems():
  *             if self.is_noxml: val.define(self.gid)             # <<<<<<<<<<<<<<
  *             self.vars[key] = val
  * 
  */
-    __pyx_t_9 = (__pyx_v_self->is_noxml != 0);
-    if (__pyx_t_9) {
-      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_val, __pyx_n_s_define); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2105, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_2);
-      __pyx_t_12 = __Pyx_PyInt_From_int64_t(__pyx_v_self->gid); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2105, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_12);
-      __pyx_t_11 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
-        __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_2);
-        if (likely(__pyx_t_11)) {
-          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
-          __Pyx_INCREF(__pyx_t_11);
+    __pyx_t_11 = (__pyx_v_self->is_noxml != 0);
+    if (__pyx_t_11) {
+      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_val, __pyx_n_s_define); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2126, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __pyx_t_14 = __Pyx_PyInt_From_int64_t(__pyx_v_self->gid); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 2126, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_14);
+      __pyx_t_13 = NULL;
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
+        __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_4);
+        if (likely(__pyx_t_13)) {
+          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
+          __Pyx_INCREF(__pyx_t_13);
           __Pyx_INCREF(function);
-          __Pyx_DECREF_SET(__pyx_t_2, function);
+          __Pyx_DECREF_SET(__pyx_t_4, function);
         }
       }
-      if (!__pyx_t_11) {
-        __pyx_t_10 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_12); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2105, __pyx_L1_error)
-        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
-        __Pyx_GOTREF(__pyx_t_10);
+      if (!__pyx_t_13) {
+        __pyx_t_12 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_14); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2126, __pyx_L1_error)
+        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+        __Pyx_GOTREF(__pyx_t_12);
       } else {
-        __pyx_t_3 = PyTuple_New(1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2105, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_3);
-        __Pyx_GIVEREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_11); __pyx_t_11 = NULL;
-        __Pyx_GIVEREF(__pyx_t_12);
-        PyTuple_SET_ITEM(__pyx_t_3, 0+1, __pyx_t_12);
-        __pyx_t_12 = 0;
-        __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2105, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_10);
-        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+        #if CYTHON_FAST_PYCALL
+        if (PyFunction_Check(__pyx_t_4)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_13, __pyx_t_14};
+          __pyx_t_12 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2126, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
+          __Pyx_GOTREF(__pyx_t_12);
+          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+        } else
+        #endif
+        #if CYTHON_FAST_PYCCALL
+        if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_13, __pyx_t_14};
+          __pyx_t_12 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2126, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
+          __Pyx_GOTREF(__pyx_t_12);
+          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+        } else
+        #endif
+        {
+          __pyx_t_3 = PyTuple_New(1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2126, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_GIVEREF(__pyx_t_13); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_13); __pyx_t_13 = NULL;
+          __Pyx_GIVEREF(__pyx_t_14);
+          PyTuple_SET_ITEM(__pyx_t_3, 0+1, __pyx_t_14);
+          __pyx_t_14 = 0;
+          __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_3, NULL); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2126, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_12);
+          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+        }
       }
-      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
     }
 
-    /* "adios.pyx":2106
+    /* "adios.pyx":2127
  *         for key, val in extra_vars.iteritems():
  *             if self.is_noxml: val.define(self.gid)
  *             self.vars[key] = val             # <<<<<<<<<<<<<<
@@ -32814,109 +34325,127 @@ static PyObject *__pyx_pf_5adios_6writer_16close(struct __pyx_obj_5adios_writer
  */
     if (unlikely(__pyx_v_self->vars == Py_None)) {
       PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-      __PYX_ERR(0, 2106, __pyx_L1_error)
+      __PYX_ERR(0, 2127, __pyx_L1_error)
     }
-    if (unlikely(PyDict_SetItem(__pyx_v_self->vars, __pyx_v_key, __pyx_v_val) < 0)) __PYX_ERR(0, 2106, __pyx_L1_error)
+    if (unlikely(PyDict_SetItem(__pyx_v_self->vars, __pyx_v_key, __pyx_v_val) < 0)) __PYX_ERR(0, 2127, __pyx_L1_error)
   }
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "adios.pyx":2108
+  /* "adios.pyx":2129
  *             self.vars[key] = val
  * 
  *         for key, val in self.attrs.iteritems():             # <<<<<<<<<<<<<<
  *             if not isinstance(val, attrinfo):
  *                 extra_attrs[key] = attrinfo(key, val, np.array(val).dtype)
  */
-  __pyx_t_5 = 0;
+  __pyx_t_7 = 0;
   if (unlikely(__pyx_v_self->attrs == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "iteritems");
-    __PYX_ERR(0, 2108, __pyx_L1_error)
+    __PYX_ERR(0, 2129, __pyx_L1_error)
   }
-  __pyx_t_10 = __Pyx_dict_iterator(__pyx_v_self->attrs, 1, __pyx_n_s_iteritems, (&__pyx_t_6), (&__pyx_t_7)); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2108, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_10);
-  __Pyx_XDECREF(__pyx_t_4);
-  __pyx_t_4 = __pyx_t_10;
-  __pyx_t_10 = 0;
+  __pyx_t_12 = __Pyx_dict_iterator(__pyx_v_self->attrs, 1, __pyx_n_s_iteritems, (&__pyx_t_8), (&__pyx_t_9)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2129, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_12);
+  __Pyx_XDECREF(__pyx_t_2);
+  __pyx_t_2 = __pyx_t_12;
+  __pyx_t_12 = 0;
   while (1) {
-    __pyx_t_8 = __Pyx_dict_iter_next(__pyx_t_4, __pyx_t_6, &__pyx_t_5, &__pyx_t_10, &__pyx_t_2, NULL, __pyx_t_7);
-    if (unlikely(__pyx_t_8 == 0)) break;
-    if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(0, 2108, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_10);
-    __Pyx_GOTREF(__pyx_t_2);
-    __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_10);
-    __pyx_t_10 = 0;
-    __Pyx_XDECREF_SET(__pyx_v_val, __pyx_t_2);
-    __pyx_t_2 = 0;
+    __pyx_t_10 = __Pyx_dict_iter_next(__pyx_t_2, __pyx_t_8, &__pyx_t_7, &__pyx_t_12, &__pyx_t_4, NULL, __pyx_t_9);
+    if (unlikely(__pyx_t_10 == 0)) break;
+    if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 2129, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_12);
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_12);
+    __pyx_t_12 = 0;
+    __Pyx_XDECREF_SET(__pyx_v_val, __pyx_t_4);
+    __pyx_t_4 = 0;
 
-    /* "adios.pyx":2109
+    /* "adios.pyx":2130
  * 
  *         for key, val in self.attrs.iteritems():
  *             if not isinstance(val, attrinfo):             # <<<<<<<<<<<<<<
  *                 extra_attrs[key] = attrinfo(key, val, np.array(val).dtype)
  *             else:
  */
-    __pyx_t_9 = __Pyx_TypeCheck(__pyx_v_val, __pyx_ptype_5adios_attrinfo); 
-    __pyx_t_1 = ((!(__pyx_t_9 != 0)) != 0);
+    __pyx_t_11 = __Pyx_TypeCheck(__pyx_v_val, __pyx_ptype_5adios_attrinfo); 
+    __pyx_t_1 = ((!(__pyx_t_11 != 0)) != 0);
     if (__pyx_t_1) {
 
-      /* "adios.pyx":2110
+      /* "adios.pyx":2131
  *         for key, val in self.attrs.iteritems():
  *             if not isinstance(val, attrinfo):
  *                 extra_attrs[key] = attrinfo(key, val, np.array(val).dtype)             # <<<<<<<<<<<<<<
  *             else:
  *                 if self.is_noxml: val.define(self.gid)
  */
-      __pyx_t_10 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2110, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_10);
-      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_array); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2110, __pyx_L1_error)
+      __pyx_t_12 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2131, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_12);
+      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_array); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2131, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
-      __pyx_t_10 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
-        __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_3);
-        if (likely(__pyx_t_10)) {
+      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+      __pyx_t_12 = NULL;
+      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
+        __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_3);
+        if (likely(__pyx_t_12)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
-          __Pyx_INCREF(__pyx_t_10);
+          __Pyx_INCREF(__pyx_t_12);
           __Pyx_INCREF(function);
           __Pyx_DECREF_SET(__pyx_t_3, function);
         }
       }
-      if (!__pyx_t_10) {
-        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_val); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2110, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_2);
+      if (!__pyx_t_12) {
+        __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_val); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2131, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_4);
       } else {
-        __pyx_t_12 = PyTuple_New(1+1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2110, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_12);
-        __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_10); __pyx_t_10 = NULL;
-        __Pyx_INCREF(__pyx_v_val);
-        __Pyx_GIVEREF(__pyx_v_val);
-        PyTuple_SET_ITEM(__pyx_t_12, 0+1, __pyx_v_val);
-        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_12, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2110, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_2);
-        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+        #if CYTHON_FAST_PYCALL
+        if (PyFunction_Check(__pyx_t_3)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_12, __pyx_v_val};
+          __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2131, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
+          __Pyx_GOTREF(__pyx_t_4);
+        } else
+        #endif
+        #if CYTHON_FAST_PYCCALL
+        if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_12, __pyx_v_val};
+          __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2131, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
+          __Pyx_GOTREF(__pyx_t_4);
+        } else
+        #endif
+        {
+          __pyx_t_14 = PyTuple_New(1+1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 2131, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_14);
+          __Pyx_GIVEREF(__pyx_t_12); PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_12); __pyx_t_12 = NULL;
+          __Pyx_INCREF(__pyx_v_val);
+          __Pyx_GIVEREF(__pyx_v_val);
+          PyTuple_SET_ITEM(__pyx_t_14, 0+1, __pyx_v_val);
+          __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_14, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2131, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_4);
+          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+        }
       }
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_dtype); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2110, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_dtype); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2131, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-      __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2110, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_2);
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2131, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
       __Pyx_INCREF(__pyx_v_key);
       __Pyx_GIVEREF(__pyx_v_key);
-      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_key);
+      PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_key);
       __Pyx_INCREF(__pyx_v_val);
       __Pyx_GIVEREF(__pyx_v_val);
-      PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_val);
+      PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_val);
       __Pyx_GIVEREF(__pyx_t_3);
-      PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_3);
+      PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_3);
       __pyx_t_3 = 0;
-      __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5adios_attrinfo), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2110, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5adios_attrinfo), __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2131, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-      if (unlikely(PyDict_SetItem(__pyx_v_extra_attrs, __pyx_v_key, __pyx_t_3) < 0)) __PYX_ERR(0, 2110, __pyx_L1_error)
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      if (unlikely(PyDict_SetItem(__pyx_v_extra_attrs, __pyx_v_key, __pyx_t_3) < 0)) __PYX_ERR(0, 2131, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-      /* "adios.pyx":2109
+      /* "adios.pyx":2130
  * 
  *         for key, val in self.attrs.iteritems():
  *             if not isinstance(val, attrinfo):             # <<<<<<<<<<<<<<
@@ -32926,7 +34455,7 @@ static PyObject *__pyx_pf_5adios_6writer_16close(struct __pyx_obj_5adios_writer
       goto __pyx_L13;
     }
 
-    /* "adios.pyx":2112
+    /* "adios.pyx":2133
  *                 extra_attrs[key] = attrinfo(key, val, np.array(val).dtype)
  *             else:
  *                 if self.is_noxml: val.define(self.gid)             # <<<<<<<<<<<<<<
@@ -32936,68 +34465,88 @@ static PyObject *__pyx_pf_5adios_6writer_16close(struct __pyx_obj_5adios_writer
     /*else*/ {
       __pyx_t_1 = (__pyx_v_self->is_noxml != 0);
       if (__pyx_t_1) {
-        __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_val, __pyx_n_s_define); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2112, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_2);
-        __pyx_t_12 = __Pyx_PyInt_From_int64_t(__pyx_v_self->gid); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2112, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_12);
-        __pyx_t_10 = NULL;
-        if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
-          __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_2);
-          if (likely(__pyx_t_10)) {
-            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
-            __Pyx_INCREF(__pyx_t_10);
+        __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_val, __pyx_n_s_define); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2133, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_4);
+        __pyx_t_14 = __Pyx_PyInt_From_int64_t(__pyx_v_self->gid); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 2133, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_14);
+        __pyx_t_12 = NULL;
+        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
+          __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_4);
+          if (likely(__pyx_t_12)) {
+            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
+            __Pyx_INCREF(__pyx_t_12);
             __Pyx_INCREF(function);
-            __Pyx_DECREF_SET(__pyx_t_2, function);
+            __Pyx_DECREF_SET(__pyx_t_4, function);
           }
         }
-        if (!__pyx_t_10) {
-          __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_12); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2112, __pyx_L1_error)
-          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+        if (!__pyx_t_12) {
+          __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_14); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2133, __pyx_L1_error)
+          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
           __Pyx_GOTREF(__pyx_t_3);
         } else {
-          __pyx_t_11 = PyTuple_New(1+1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2112, __pyx_L1_error)
-          __Pyx_GOTREF(__pyx_t_11);
-          __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_10); __pyx_t_10 = NULL;
-          __Pyx_GIVEREF(__pyx_t_12);
-          PyTuple_SET_ITEM(__pyx_t_11, 0+1, __pyx_t_12);
-          __pyx_t_12 = 0;
-          __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_11, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2112, __pyx_L1_error)
-          __Pyx_GOTREF(__pyx_t_3);
-          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+          #if CYTHON_FAST_PYCALL
+          if (PyFunction_Check(__pyx_t_4)) {
+            PyObject *__pyx_temp[2] = {__pyx_t_12, __pyx_t_14};
+            __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2133, __pyx_L1_error)
+            __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
+            __Pyx_GOTREF(__pyx_t_3);
+            __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+          } else
+          #endif
+          #if CYTHON_FAST_PYCCALL
+          if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
+            PyObject *__pyx_temp[2] = {__pyx_t_12, __pyx_t_14};
+            __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2133, __pyx_L1_error)
+            __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
+            __Pyx_GOTREF(__pyx_t_3);
+            __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+          } else
+          #endif
+          {
+            __pyx_t_13 = PyTuple_New(1+1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2133, __pyx_L1_error)
+            __Pyx_GOTREF(__pyx_t_13);
+            __Pyx_GIVEREF(__pyx_t_12); PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_12); __pyx_t_12 = NULL;
+            __Pyx_GIVEREF(__pyx_t_14);
+            PyTuple_SET_ITEM(__pyx_t_13, 0+1, __pyx_t_14);
+            __pyx_t_14 = 0;
+            __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_13, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2133, __pyx_L1_error)
+            __Pyx_GOTREF(__pyx_t_3);
+            __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+          }
         }
-        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       }
     }
     __pyx_L13:;
   }
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "adios.pyx":2114
+  /* "adios.pyx":2135
  *                 if self.is_noxml: val.define(self.gid)
  * 
  *         for key, val in extra_attrs.iteritems():             # <<<<<<<<<<<<<<
  *             if self.is_noxml: val.define(self.gid)
  * 
  */
-  __pyx_t_6 = 0;
-  __pyx_t_3 = __Pyx_dict_iterator(__pyx_v_extra_attrs, 1, __pyx_n_s_iteritems, (&__pyx_t_5), (&__pyx_t_7)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2114, __pyx_L1_error)
+  __pyx_t_8 = 0;
+  __pyx_t_3 = __Pyx_dict_iterator(__pyx_v_extra_attrs, 1, __pyx_n_s_iteritems, (&__pyx_t_7), (&__pyx_t_9)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2135, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_XDECREF(__pyx_t_4);
-  __pyx_t_4 = __pyx_t_3;
+  __Pyx_XDECREF(__pyx_t_2);
+  __pyx_t_2 = __pyx_t_3;
   __pyx_t_3 = 0;
   while (1) {
-    __pyx_t_8 = __Pyx_dict_iter_next(__pyx_t_4, __pyx_t_5, &__pyx_t_6, &__pyx_t_3, &__pyx_t_2, NULL, __pyx_t_7);
-    if (unlikely(__pyx_t_8 == 0)) break;
-    if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(0, 2114, __pyx_L1_error)
+    __pyx_t_10 = __Pyx_dict_iter_next(__pyx_t_2, __pyx_t_7, &__pyx_t_8, &__pyx_t_3, &__pyx_t_4, NULL, __pyx_t_9);
+    if (unlikely(__pyx_t_10 == 0)) break;
+    if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 2135, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_GOTREF(__pyx_t_4);
     __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_3);
     __pyx_t_3 = 0;
-    __Pyx_XDECREF_SET(__pyx_v_val, __pyx_t_2);
-    __pyx_t_2 = 0;
+    __Pyx_XDECREF_SET(__pyx_v_val, __pyx_t_4);
+    __pyx_t_4 = 0;
 
-    /* "adios.pyx":2115
+    /* "adios.pyx":2136
  * 
  *         for key, val in extra_attrs.iteritems():
  *             if self.is_noxml: val.define(self.gid)             # <<<<<<<<<<<<<<
@@ -33006,42 +34555,62 @@ static PyObject *__pyx_pf_5adios_6writer_16close(struct __pyx_obj_5adios_writer
  */
     __pyx_t_1 = (__pyx_v_self->is_noxml != 0);
     if (__pyx_t_1) {
-      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_val, __pyx_n_s_define); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2115, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_val, __pyx_n_s_define); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2136, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_11 = __Pyx_PyInt_From_int64_t(__pyx_v_self->gid); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2115, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_11);
-      __pyx_t_12 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
-        __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_3);
-        if (likely(__pyx_t_12)) {
+      __pyx_t_13 = __Pyx_PyInt_From_int64_t(__pyx_v_self->gid); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2136, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_13);
+      __pyx_t_14 = NULL;
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
+        __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_3);
+        if (likely(__pyx_t_14)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
-          __Pyx_INCREF(__pyx_t_12);
+          __Pyx_INCREF(__pyx_t_14);
           __Pyx_INCREF(function);
           __Pyx_DECREF_SET(__pyx_t_3, function);
         }
       }
-      if (!__pyx_t_12) {
-        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_11); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2115, __pyx_L1_error)
-        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
-        __Pyx_GOTREF(__pyx_t_2);
+      if (!__pyx_t_14) {
+        __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_13); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2136, __pyx_L1_error)
+        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+        __Pyx_GOTREF(__pyx_t_4);
       } else {
-        __pyx_t_10 = PyTuple_New(1+1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2115, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_10);
-        __Pyx_GIVEREF(__pyx_t_12); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_12); __pyx_t_12 = NULL;
-        __Pyx_GIVEREF(__pyx_t_11);
-        PyTuple_SET_ITEM(__pyx_t_10, 0+1, __pyx_t_11);
-        __pyx_t_11 = 0;
-        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_10, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2115, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_2);
-        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+        #if CYTHON_FAST_PYCALL
+        if (PyFunction_Check(__pyx_t_3)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_14, __pyx_t_13};
+          __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2136, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
+          __Pyx_GOTREF(__pyx_t_4);
+          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+        } else
+        #endif
+        #if CYTHON_FAST_PYCCALL
+        if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_14, __pyx_t_13};
+          __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2136, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
+          __Pyx_GOTREF(__pyx_t_4);
+          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+        } else
+        #endif
+        {
+          __pyx_t_12 = PyTuple_New(1+1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2136, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_12);
+          __Pyx_GIVEREF(__pyx_t_14); PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_14); __pyx_t_14 = NULL;
+          __Pyx_GIVEREF(__pyx_t_13);
+          PyTuple_SET_ITEM(__pyx_t_12, 0+1, __pyx_t_13);
+          __pyx_t_13 = 0;
+          __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_12, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2136, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_4);
+          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+        }
       }
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     }
   }
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "adios.pyx":2126
+  /* "adios.pyx":2147
  *         """
  * 
  *         for var in self.vars.values():             # <<<<<<<<<<<<<<
@@ -33050,93 +34619,113 @@ static PyObject *__pyx_pf_5adios_6writer_16close(struct __pyx_obj_5adios_writer
  */
   if (unlikely(__pyx_v_self->vars == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "values");
-    __PYX_ERR(0, 2126, __pyx_L1_error)
+    __PYX_ERR(0, 2147, __pyx_L1_error)
   }
-  __pyx_t_4 = __Pyx_PyDict_Values(__pyx_v_self->vars); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2126, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_4);
-  if (likely(PyList_CheckExact(__pyx_t_4)) || PyTuple_CheckExact(__pyx_t_4)) {
-    __pyx_t_2 = __pyx_t_4; __Pyx_INCREF(__pyx_t_2); __pyx_t_5 = 0;
-    __pyx_t_13 = NULL;
+  __pyx_t_2 = __Pyx_PyDict_Values(__pyx_v_self->vars); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2147, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (likely(PyList_CheckExact(__pyx_t_2)) || PyTuple_CheckExact(__pyx_t_2)) {
+    __pyx_t_4 = __pyx_t_2; __Pyx_INCREF(__pyx_t_4); __pyx_t_7 = 0;
+    __pyx_t_15 = NULL;
   } else {
-    __pyx_t_5 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2126, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_13 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2126, __pyx_L1_error)
+    __pyx_t_7 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2147, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __pyx_t_15 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 2147, __pyx_L1_error)
   }
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   for (;;) {
-    if (likely(!__pyx_t_13)) {
-      if (likely(PyList_CheckExact(__pyx_t_2))) {
-        if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_2)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_4 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_5); __Pyx_INCREF(__pyx_t_4); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 2126, __pyx_L1_error)
+    if (likely(!__pyx_t_15)) {
+      if (likely(PyList_CheckExact(__pyx_t_4))) {
+        if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_4)) break;
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_2 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_7); __Pyx_INCREF(__pyx_t_2); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 2147, __pyx_L1_error)
         #else
-        __pyx_t_4 = PySequence_ITEM(__pyx_t_2, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2126, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_4);
+        __pyx_t_2 = PySequence_ITEM(__pyx_t_4, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2147, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_2);
         #endif
       } else {
-        if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_5); __Pyx_INCREF(__pyx_t_4); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 2126, __pyx_L1_error)
+        if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_7); __Pyx_INCREF(__pyx_t_2); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 2147, __pyx_L1_error)
         #else
-        __pyx_t_4 = PySequence_ITEM(__pyx_t_2, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2126, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_4);
+        __pyx_t_2 = PySequence_ITEM(__pyx_t_4, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2147, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_2);
         #endif
       }
     } else {
-      __pyx_t_4 = __pyx_t_13(__pyx_t_2);
-      if (unlikely(!__pyx_t_4)) {
+      __pyx_t_2 = __pyx_t_15(__pyx_t_4);
+      if (unlikely(!__pyx_t_2)) {
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
           if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-          else __PYX_ERR(0, 2126, __pyx_L1_error)
+          else __PYX_ERR(0, 2147, __pyx_L1_error)
         }
         break;
       }
-      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_GOTREF(__pyx_t_2);
     }
-    __Pyx_XDECREF_SET(__pyx_v_var, __pyx_t_4);
-    __pyx_t_4 = 0;
+    __Pyx_XDECREF_SET(__pyx_v_var, __pyx_t_2);
+    __pyx_t_2 = 0;
 
-    /* "adios.pyx":2127
+    /* "adios.pyx":2148
  * 
  *         for var in self.vars.values():
  *             var.write(fd)             # <<<<<<<<<<<<<<
  * 
  *         close(fd)
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_var, __pyx_n_s_write); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2127, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_var, __pyx_n_s_write); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2148, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_10 = __Pyx_PyInt_From_int64_t(__pyx_v_fd); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2127, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_10);
-    __pyx_t_11 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
-      __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_3);
-      if (likely(__pyx_t_11)) {
+    __pyx_t_12 = __Pyx_PyInt_From_int64_t(__pyx_v_fd); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2148, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_12);
+    __pyx_t_13 = NULL;
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
+      __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_3);
+      if (likely(__pyx_t_13)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
-        __Pyx_INCREF(__pyx_t_11);
+        __Pyx_INCREF(__pyx_t_13);
         __Pyx_INCREF(function);
         __Pyx_DECREF_SET(__pyx_t_3, function);
       }
     }
-    if (!__pyx_t_11) {
-      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_10); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2127, __pyx_L1_error)
-      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
-      __Pyx_GOTREF(__pyx_t_4);
-    } else {
-      __pyx_t_12 = PyTuple_New(1+1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2127, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_12);
-      __Pyx_GIVEREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_11); __pyx_t_11 = NULL;
-      __Pyx_GIVEREF(__pyx_t_10);
-      PyTuple_SET_ITEM(__pyx_t_12, 0+1, __pyx_t_10);
-      __pyx_t_10 = 0;
-      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_12, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2127, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_4);
+    if (!__pyx_t_13) {
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_12); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2148, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+      __Pyx_GOTREF(__pyx_t_2);
+    } else {
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_3)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_13, __pyx_t_12};
+        __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2148, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_13, __pyx_t_12};
+        __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2148, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+      } else
+      #endif
+      {
+        __pyx_t_14 = PyTuple_New(1+1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 2148, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_14);
+        __Pyx_GIVEREF(__pyx_t_13); PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_13); __pyx_t_13 = NULL;
+        __Pyx_GIVEREF(__pyx_t_12);
+        PyTuple_SET_ITEM(__pyx_t_14, 0+1, __pyx_t_12);
+        __pyx_t_12 = 0;
+        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_14, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2148, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+      }
     }
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-    /* "adios.pyx":2126
+    /* "adios.pyx":2147
  *         """
  * 
  *         for var in self.vars.values():             # <<<<<<<<<<<<<<
@@ -33144,9 +34733,9 @@ static PyObject *__pyx_pf_5adios_6writer_16close(struct __pyx_obj_5adios_writer
  * 
  */
   }
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "adios.pyx":2129
+  /* "adios.pyx":2150
  *             var.write(fd)
  * 
  *         close(fd)             # <<<<<<<<<<<<<<
@@ -33155,7 +34744,7 @@ static PyObject *__pyx_pf_5adios_6writer_16close(struct __pyx_obj_5adios_writer
  */
   __pyx_f_5adios_close(__pyx_v_fd, 0);
 
-  /* "adios.pyx":2083
+  /* "adios.pyx":2104
  *             raise KeyError(name)
  * 
  *     def close(self):             # <<<<<<<<<<<<<<
@@ -33170,9 +34759,9 @@ static PyObject *__pyx_pf_5adios_6writer_16close(struct __pyx_obj_5adios_writer
   __Pyx_XDECREF(__pyx_t_2);
   __Pyx_XDECREF(__pyx_t_3);
   __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_XDECREF(__pyx_t_10);
-  __Pyx_XDECREF(__pyx_t_11);
   __Pyx_XDECREF(__pyx_t_12);
+  __Pyx_XDECREF(__pyx_t_13);
+  __Pyx_XDECREF(__pyx_t_14);
   __Pyx_AddTraceback("adios.writer.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
@@ -33187,7 +34776,7 @@ static PyObject *__pyx_pf_5adios_6writer_16close(struct __pyx_obj_5adios_writer
   return __pyx_r;
 }
 
-/* "adios.pyx":2131
+/* "adios.pyx":2152
  *         close(fd)
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -33216,7 +34805,7 @@ static PyObject *__pyx_pf_5adios_6writer_18__repr__(struct __pyx_obj_5adios_writ
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__repr__", 0);
 
-  /* "adios.pyx":2132
+  /* "adios.pyx":2153
  * 
  *     def __repr__(self):
  *         return ("AdiosWriter (fname=%r, gname=%r, "             # <<<<<<<<<<<<<<
@@ -33225,7 +34814,7 @@ static PyObject *__pyx_pf_5adios_6writer_18__repr__(struct __pyx_obj_5adios_writ
  */
   __Pyx_XDECREF(__pyx_r);
 
-  /* "adios.pyx":2138
+  /* "adios.pyx":2159
  *                  self.method,
  *                  self.method_params,
  *                  self.vars.keys(),             # <<<<<<<<<<<<<<
@@ -33234,12 +34823,12 @@ static PyObject *__pyx_pf_5adios_6writer_18__repr__(struct __pyx_obj_5adios_writ
  */
   if (unlikely(__pyx_v_self->vars == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "keys");
-    __PYX_ERR(0, 2138, __pyx_L1_error)
+    __PYX_ERR(0, 2159, __pyx_L1_error)
   }
-  __pyx_t_1 = __Pyx_PyDict_Keys(__pyx_v_self->vars); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2138, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyDict_Keys(__pyx_v_self->vars); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2159, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
 
-  /* "adios.pyx":2139
+  /* "adios.pyx":2160
  *                  self.method_params,
  *                  self.vars.keys(),
  *                  self.attrs.keys(),             # <<<<<<<<<<<<<<
@@ -33248,19 +34837,19 @@ static PyObject *__pyx_pf_5adios_6writer_18__repr__(struct __pyx_obj_5adios_writ
  */
   if (unlikely(__pyx_v_self->attrs == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "keys");
-    __PYX_ERR(0, 2139, __pyx_L1_error)
+    __PYX_ERR(0, 2160, __pyx_L1_error)
   }
-  __pyx_t_2 = __Pyx_PyDict_Keys(__pyx_v_self->attrs); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2139, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyDict_Keys(__pyx_v_self->attrs); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2160, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
 
-  /* "adios.pyx":2134
+  /* "adios.pyx":2155
  *         return ("AdiosWriter (fname=%r, gname=%r, "
  *                 "method=%r, method_params=%r, vars=%r, attrs=%r, mode=%r)") % \
  *                 (self.fname,             # <<<<<<<<<<<<<<
  *                  self.gname,
  *                  self.method,
  */
-  __pyx_t_3 = PyTuple_New(7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2134, __pyx_L1_error)
+  __pyx_t_3 = PyTuple_New(7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2155, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_v_self->fname);
   __Pyx_GIVEREF(__pyx_v_self->fname);
@@ -33284,21 +34873,21 @@ static PyObject *__pyx_pf_5adios_6writer_18__repr__(struct __pyx_obj_5adios_writ
   __pyx_t_1 = 0;
   __pyx_t_2 = 0;
 
-  /* "adios.pyx":2133
+  /* "adios.pyx":2154
  *     def __repr__(self):
  *         return ("AdiosWriter (fname=%r, gname=%r, "
  *                 "method=%r, method_params=%r, vars=%r, attrs=%r, mode=%r)") % \             # <<<<<<<<<<<<<<
  *                 (self.fname,
  *                  self.gname,
  */
-  __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_AdiosWriter_fname_r_gname_r_meth, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2133, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_AdiosWriter_fname_r_gname_r_meth, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2154, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":2131
+  /* "adios.pyx":2152
  *         close(fd)
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -33319,7 +34908,7 @@ static PyObject *__pyx_pf_5adios_6writer_18__repr__(struct __pyx_obj_5adios_writ
   return __pyx_r;
 }
 
-/* "adios.pyx":2142
+/* "adios.pyx":2163
  *                  self.mode)
  * 
  *     def __enter__(self):             # <<<<<<<<<<<<<<
@@ -33346,7 +34935,7 @@ static PyObject *__pyx_pf_5adios_6writer_20__enter__(struct __pyx_obj_5adios_wri
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__enter__", 0);
 
-  /* "adios.pyx":2144
+  /* "adios.pyx":2165
  *     def __enter__(self):
  *         """ Enter for with statement """
  *         return self             # <<<<<<<<<<<<<<
@@ -33358,7 +34947,7 @@ static PyObject *__pyx_pf_5adios_6writer_20__enter__(struct __pyx_obj_5adios_wri
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "adios.pyx":2142
+  /* "adios.pyx":2163
  *                  self.mode)
  * 
  *     def __enter__(self):             # <<<<<<<<<<<<<<
@@ -33373,7 +34962,7 @@ static PyObject *__pyx_pf_5adios_6writer_20__enter__(struct __pyx_obj_5adios_wri
   return __pyx_r;
 }
 
-/* "adios.pyx":2146
+/* "adios.pyx":2167
  *         return self
  * 
  *     def __exit__(self, exception_type, exception_value, traceback):             # <<<<<<<<<<<<<<
@@ -33412,16 +35001,16 @@ static PyObject *__pyx_pw_5adios_6writer_23__exit__(PyObject *__pyx_v_self, PyOb
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_exception_value)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, 1); __PYX_ERR(0, 2146, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, 1); __PYX_ERR(0, 2167, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_traceback)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, 2); __PYX_ERR(0, 2146, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, 2); __PYX_ERR(0, 2167, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__exit__") < 0)) __PYX_ERR(0, 2146, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__exit__") < 0)) __PYX_ERR(0, 2167, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -33436,7 +35025,7 @@ static PyObject *__pyx_pw_5adios_6writer_23__exit__(PyObject *__pyx_v_self, PyOb
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2146, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2167, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.writer.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -33457,17 +35046,17 @@ static PyObject *__pyx_pf_5adios_6writer_22__exit__(struct __pyx_obj_5adios_writ
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__exit__", 0);
 
-  /* "adios.pyx":2148
+  /* "adios.pyx":2169
  *     def __exit__(self, exception_type, exception_value, traceback):
  *         """ Close file on exit. """
  *         self.close()             # <<<<<<<<<<<<<<
  * 
  * cdef class attrinfo(object):
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_close); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2148, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_close); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2169, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
     __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
     if (likely(__pyx_t_3)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
@@ -33477,16 +35066,16 @@ static PyObject *__pyx_pf_5adios_6writer_22__exit__(struct __pyx_obj_5adios_writ
     }
   }
   if (__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2148, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2169, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   } else {
-    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2148, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2169, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":2146
+  /* "adios.pyx":2167
  *         return self
  * 
  *     def __exit__(self, exception_type, exception_value, traceback):             # <<<<<<<<<<<<<<
@@ -33509,7 +35098,7 @@ static PyObject *__pyx_pf_5adios_6writer_22__exit__(struct __pyx_obj_5adios_writ
   return __pyx_r;
 }
 
-/* "adios.pyx":2157
+/* "adios.pyx":2178
  * 
  *     property name:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -33535,7 +35124,7 @@ static PyObject *__pyx_pf_5adios_8attrinfo_4name___get__(struct __pyx_obj_5adios
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios.pyx":2158
+  /* "adios.pyx":2179
  *     property name:
  *         def __get__(self):
  *             return self.name             # <<<<<<<<<<<<<<
@@ -33547,7 +35136,7 @@ static PyObject *__pyx_pf_5adios_8attrinfo_4name___get__(struct __pyx_obj_5adios
   __pyx_r = __pyx_v_self->name;
   goto __pyx_L0;
 
-  /* "adios.pyx":2157
+  /* "adios.pyx":2178
  * 
  *     property name:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -33562,7 +35151,7 @@ static PyObject *__pyx_pf_5adios_8attrinfo_4name___get__(struct __pyx_obj_5adios
   return __pyx_r;
 }
 
-/* "adios.pyx":2161
+/* "adios.pyx":2182
  * 
  *     property is_static:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -33589,7 +35178,7 @@ static PyObject *__pyx_pf_5adios_8attrinfo_9is_static___get__(struct __pyx_obj_5
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios.pyx":2162
+  /* "adios.pyx":2183
  *     property is_static:
  *         def __get__(self):
  *             return self.is_static             # <<<<<<<<<<<<<<
@@ -33597,13 +35186,13 @@ static PyObject *__pyx_pf_5adios_8attrinfo_9is_static___get__(struct __pyx_obj_5
  *     property dtype:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->is_static); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2162, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->is_static); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2183, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":2161
+  /* "adios.pyx":2182
  * 
  *     property is_static:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -33622,7 +35211,7 @@ static PyObject *__pyx_pf_5adios_8attrinfo_9is_static___get__(struct __pyx_obj_5
   return __pyx_r;
 }
 
-/* "adios.pyx":2165
+/* "adios.pyx":2186
  * 
  *     property dtype:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -33648,7 +35237,7 @@ static PyObject *__pyx_pf_5adios_8attrinfo_5dtype___get__(struct __pyx_obj_5adio
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios.pyx":2166
+  /* "adios.pyx":2187
  *     property dtype:
  *         def __get__(self):
  *             return self.dtype             # <<<<<<<<<<<<<<
@@ -33660,7 +35249,7 @@ static PyObject *__pyx_pf_5adios_8attrinfo_5dtype___get__(struct __pyx_obj_5adio
   __pyx_r = __pyx_v_self->dtype;
   goto __pyx_L0;
 
-  /* "adios.pyx":2165
+  /* "adios.pyx":2186
  * 
  *     property dtype:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -33675,7 +35264,7 @@ static PyObject *__pyx_pf_5adios_8attrinfo_5dtype___get__(struct __pyx_obj_5adio
   return __pyx_r;
 }
 
-/* "adios.pyx":2169
+/* "adios.pyx":2190
  * 
  *     property value:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -33701,7 +35290,7 @@ static PyObject *__pyx_pf_5adios_8attrinfo_5value___get__(struct __pyx_obj_5adio
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios.pyx":2170
+  /* "adios.pyx":2191
  *     property value:
  *         def __get__(self):
  *             return self.value             # <<<<<<<<<<<<<<
@@ -33713,7 +35302,7 @@ static PyObject *__pyx_pf_5adios_8attrinfo_5value___get__(struct __pyx_obj_5adio
   __pyx_r = __pyx_v_self->value;
   goto __pyx_L0;
 
-  /* "adios.pyx":2169
+  /* "adios.pyx":2190
  * 
  *     property value:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -33728,7 +35317,7 @@ static PyObject *__pyx_pf_5adios_8attrinfo_5value___get__(struct __pyx_obj_5adio
   return __pyx_r;
 }
 
-/* "adios.pyx":2172
+/* "adios.pyx":2193
  *             return self.value
  * 
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -33754,7 +35343,7 @@ static int __pyx_pf_5adios_8attrinfo_5value_2__set__(struct __pyx_obj_5adios_att
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "adios.pyx":2173
+  /* "adios.pyx":2194
  * 
  *         def __set__(self, value):
  *             self.value = value             # <<<<<<<<<<<<<<
@@ -33767,7 +35356,7 @@ static int __pyx_pf_5adios_8attrinfo_5value_2__set__(struct __pyx_obj_5adios_att
   __Pyx_DECREF(__pyx_v_self->value);
   __pyx_v_self->value = __pyx_v_value;
 
-  /* "adios.pyx":2172
+  /* "adios.pyx":2193
  *             return self.value
  * 
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -33781,7 +35370,7 @@ static int __pyx_pf_5adios_8attrinfo_5value_2__set__(struct __pyx_obj_5adios_att
   return __pyx_r;
 }
 
-/* "adios.pyx":2175
+/* "adios.pyx":2196
  *             self.value = value
  * 
  *     def __init__(self, str name,             # <<<<<<<<<<<<<<
@@ -33803,7 +35392,7 @@ static int __pyx_pw_5adios_8attrinfo_1__init__(PyObject *__pyx_v_self, PyObject
     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,&__pyx_n_s_value,&__pyx_n_s_dtype,&__pyx_n_s_is_static,0};
     PyObject* values[4] = {0,0,0,0};
 
-    /* "adios.pyx":2176
+    /* "adios.pyx":2197
  * 
  *     def __init__(self, str name,
  *                  value = None,             # <<<<<<<<<<<<<<
@@ -33812,7 +35401,7 @@ static int __pyx_pw_5adios_8attrinfo_1__init__(PyObject *__pyx_v_self, PyObject
  */
     values[1] = ((PyObject *)Py_None);
 
-    /* "adios.pyx":2177
+    /* "adios.pyx":2198
  *     def __init__(self, str name,
  *                  value = None,
  *                  dtype = None,             # <<<<<<<<<<<<<<
@@ -33853,7 +35442,7 @@ static int __pyx_pw_5adios_8attrinfo_1__init__(PyObject *__pyx_v_self, PyObject
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 2175, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 2196, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -33869,10 +35458,10 @@ static int __pyx_pw_5adios_8attrinfo_1__init__(PyObject *__pyx_v_self, PyObject
     __pyx_v_value = values[1];
     __pyx_v_dtype = values[2];
     if (values[3]) {
-      __pyx_v_is_static = __Pyx_PyObject_IsTrue(values[3]); if (unlikely((__pyx_v_is_static == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2178, __pyx_L3_error)
+      __pyx_v_is_static = __Pyx_PyObject_IsTrue(values[3]); if (unlikely((__pyx_v_is_static == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2199, __pyx_L3_error)
     } else {
 
-      /* "adios.pyx":2178
+      /* "adios.pyx":2199
  *                  value = None,
  *                  dtype = None,
  *                  bint is_static = True):             # <<<<<<<<<<<<<<
@@ -33884,16 +35473,16 @@ static int __pyx_pw_5adios_8attrinfo_1__init__(PyObject *__pyx_v_self, PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2175, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2196, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.attrinfo.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 2175, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 2196, __pyx_L1_error)
   __pyx_r = __pyx_pf_5adios_8attrinfo___init__(((struct __pyx_obj_5adios_attrinfo *)__pyx_v_self), __pyx_v_name, __pyx_v_value, __pyx_v_dtype, __pyx_v_is_static);
 
-  /* "adios.pyx":2175
+  /* "adios.pyx":2196
  *             self.value = value
  * 
  *     def __init__(self, str name,             # <<<<<<<<<<<<<<
@@ -33915,7 +35504,7 @@ static int __pyx_pf_5adios_8attrinfo___init__(struct __pyx_obj_5adios_attrinfo *
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__init__", 0);
 
-  /* "adios.pyx":2179
+  /* "adios.pyx":2200
  *                  dtype = None,
  *                  bint is_static = True):
  *         self.name = name             # <<<<<<<<<<<<<<
@@ -33928,7 +35517,7 @@ static int __pyx_pf_5adios_8attrinfo___init__(struct __pyx_obj_5adios_attrinfo *
   __Pyx_DECREF(__pyx_v_self->name);
   __pyx_v_self->name = __pyx_v_name;
 
-  /* "adios.pyx":2180
+  /* "adios.pyx":2201
  *                  bint is_static = True):
  *         self.name = name
  *         self.value = value             # <<<<<<<<<<<<<<
@@ -33941,7 +35530,7 @@ static int __pyx_pf_5adios_8attrinfo___init__(struct __pyx_obj_5adios_attrinfo *
   __Pyx_DECREF(__pyx_v_self->value);
   __pyx_v_self->value = __pyx_v_value;
 
-  /* "adios.pyx":2181
+  /* "adios.pyx":2202
  *         self.name = name
  *         self.value = value
  *         self.dtype = dtype             # <<<<<<<<<<<<<<
@@ -33954,7 +35543,7 @@ static int __pyx_pf_5adios_8attrinfo___init__(struct __pyx_obj_5adios_attrinfo *
   __Pyx_DECREF(__pyx_v_self->dtype);
   __pyx_v_self->dtype = __pyx_v_dtype;
 
-  /* "adios.pyx":2182
+  /* "adios.pyx":2203
  *         self.value = value
  *         self.dtype = dtype
  *         self.is_static = is_static             # <<<<<<<<<<<<<<
@@ -33963,7 +35552,7 @@ static int __pyx_pf_5adios_8attrinfo___init__(struct __pyx_obj_5adios_attrinfo *
  */
   __pyx_v_self->is_static = __pyx_v_is_static;
 
-  /* "adios.pyx":2175
+  /* "adios.pyx":2196
  *             self.value = value
  * 
  *     def __init__(self, str name,             # <<<<<<<<<<<<<<
@@ -33977,7 +35566,7 @@ static int __pyx_pf_5adios_8attrinfo___init__(struct __pyx_obj_5adios_attrinfo *
   return __pyx_r;
 }
 
-/* "adios.pyx":2184
+/* "adios.pyx":2205
  *         self.is_static = is_static
  * 
  *     def define(self, int64_t gid):             # <<<<<<<<<<<<<<
@@ -33994,7 +35583,7 @@ static PyObject *__pyx_pw_5adios_8attrinfo_3define(PyObject *__pyx_v_self, PyObj
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("define (wrapper)", 0);
   assert(__pyx_arg_gid); {
-    __pyx_v_gid = __Pyx_PyInt_As_int64_t(__pyx_arg_gid); if (unlikely((__pyx_v_gid == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 2184, __pyx_L3_error)
+    __pyx_v_gid = __Pyx_PyInt_As_int64_t(__pyx_arg_gid); if (unlikely((__pyx_v_gid == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2205, __pyx_L3_error)
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L3_error:;
@@ -34018,7 +35607,7 @@ static PyObject *__pyx_pf_5adios_8attrinfo_2define(struct __pyx_obj_5adios_attri
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("define", 0);
 
-  /* "adios.pyx":2185
+  /* "adios.pyx":2206
  * 
  *     def define(self, int64_t gid):
  *         if self.is_static:             # <<<<<<<<<<<<<<
@@ -34028,7 +35617,7 @@ static PyObject *__pyx_pf_5adios_8attrinfo_2define(struct __pyx_obj_5adios_attri
   __pyx_t_1 = (__pyx_v_self->is_static != 0);
   if (__pyx_t_1) {
 
-    /* "adios.pyx":2186
+    /* "adios.pyx":2207
  *     def define(self, int64_t gid):
  *         if self.is_static:
  *             if self.value is None:             # <<<<<<<<<<<<<<
@@ -34039,20 +35628,20 @@ static PyObject *__pyx_pf_5adios_8attrinfo_2define(struct __pyx_obj_5adios_attri
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
 
-      /* "adios.pyx":2187
+      /* "adios.pyx":2208
  *         if self.is_static:
  *             if self.value is None:
  *                 raise TypeError("Value is none")             # <<<<<<<<<<<<<<
  * 
  *             define_attribute_byvalue(gid, self.name, "", self.value)
  */
-      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__58, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2187, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__60, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2208, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_Raise(__pyx_t_3, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      __PYX_ERR(0, 2187, __pyx_L1_error)
+      __PYX_ERR(0, 2208, __pyx_L1_error)
 
-      /* "adios.pyx":2186
+      /* "adios.pyx":2207
  *     def define(self, int64_t gid):
  *         if self.is_static:
  *             if self.value is None:             # <<<<<<<<<<<<<<
@@ -34061,7 +35650,7 @@ static PyObject *__pyx_pf_5adios_8attrinfo_2define(struct __pyx_obj_5adios_attri
  */
     }
 
-    /* "adios.pyx":2189
+    /* "adios.pyx":2210
  *                 raise TypeError("Value is none")
  * 
  *             define_attribute_byvalue(gid, self.name, "", self.value)             # <<<<<<<<<<<<<<
@@ -34076,7 +35665,7 @@ static PyObject *__pyx_pf_5adios_8attrinfo_2define(struct __pyx_obj_5adios_attri
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-    /* "adios.pyx":2185
+    /* "adios.pyx":2206
  * 
  *     def define(self, int64_t gid):
  *         if self.is_static:             # <<<<<<<<<<<<<<
@@ -34086,7 +35675,7 @@ static PyObject *__pyx_pf_5adios_8attrinfo_2define(struct __pyx_obj_5adios_attri
     goto __pyx_L3;
   }
 
-  /* "adios.pyx":2194
+  /* "adios.pyx":2215
  *             ##define_attribute(gid, self.name, "",
  *             ##                 atype, "", str(self.value))
  *             raise NotImplementedError             # <<<<<<<<<<<<<<
@@ -34095,11 +35684,11 @@ static PyObject *__pyx_pf_5adios_8attrinfo_2define(struct __pyx_obj_5adios_attri
  */
   /*else*/ {
     __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0);
-    __PYX_ERR(0, 2194, __pyx_L1_error)
+    __PYX_ERR(0, 2215, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "adios.pyx":2184
+  /* "adios.pyx":2205
  *         self.is_static = is_static
  * 
  *     def define(self, int64_t gid):             # <<<<<<<<<<<<<<
@@ -34121,7 +35710,7 @@ static PyObject *__pyx_pf_5adios_8attrinfo_2define(struct __pyx_obj_5adios_attri
   return __pyx_r;
 }
 
-/* "adios.pyx":2196
+/* "adios.pyx":2217
  *             raise NotImplementedError
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -34149,7 +35738,7 @@ static PyObject *__pyx_pf_5adios_8attrinfo_4__repr__(struct __pyx_obj_5adios_att
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("__repr__", 0);
 
-  /* "adios.pyx":2197
+  /* "adios.pyx":2218
  * 
  *     def __repr__(self):
  *         return ("AdiosAttrinfo (name=%r, is_static=%r, value=%r, dtype=%r)") % \             # <<<<<<<<<<<<<<
@@ -34158,24 +35747,24 @@ static PyObject *__pyx_pf_5adios_8attrinfo_4__repr__(struct __pyx_obj_5adios_att
  */
   __Pyx_XDECREF(__pyx_r);
 
-  /* "adios.pyx":2199
+  /* "adios.pyx":2220
  *         return ("AdiosAttrinfo (name=%r, is_static=%r, value=%r, dtype=%r)") % \
  *                 (self.name,
  *                  self.is_static,             # <<<<<<<<<<<<<<
  *                  self.value,
  *                  self.dtype)
  */
-  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->is_static); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2199, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->is_static); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2220, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
 
-  /* "adios.pyx":2198
+  /* "adios.pyx":2219
  *     def __repr__(self):
  *         return ("AdiosAttrinfo (name=%r, is_static=%r, value=%r, dtype=%r)") % \
  *                 (self.name,             # <<<<<<<<<<<<<<
  *                  self.is_static,
  *                  self.value,
  */
-  __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2198, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2219, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_v_self->name);
   __Pyx_GIVEREF(__pyx_v_self->name);
@@ -34190,21 +35779,21 @@ static PyObject *__pyx_pf_5adios_8attrinfo_4__repr__(struct __pyx_obj_5adios_att
   PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_v_self->dtype);
   __pyx_t_1 = 0;
 
-  /* "adios.pyx":2197
+  /* "adios.pyx":2218
  * 
  *     def __repr__(self):
  *         return ("AdiosAttrinfo (name=%r, is_static=%r, value=%r, dtype=%r)") % \             # <<<<<<<<<<<<<<
  *                 (self.name,
  *                  self.is_static,
  */
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_AdiosAttrinfo_name_r_is_static_r, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2197, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_AdiosAttrinfo_name_r_is_static_r, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2218, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":2196
+  /* "adios.pyx":2217
  *             raise NotImplementedError
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -34224,7 +35813,7 @@ static PyObject *__pyx_pf_5adios_8attrinfo_4__repr__(struct __pyx_obj_5adios_att
   return __pyx_r;
 }
 
-/* "adios.pyx":2213
+/* "adios.pyx":2234
  *     property transform:
  *         """ Transform method """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -34251,7 +35840,7 @@ static PyObject *__pyx_pf_5adios_7varinfo_9transform___get__(struct __pyx_obj_5a
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios.pyx":2214
+  /* "adios.pyx":2235
  *         """ Transform method """
  *         def __get__(self):
  *             return self.fname             # <<<<<<<<<<<<<<
@@ -34259,13 +35848,13 @@ static PyObject *__pyx_pf_5adios_7varinfo_9transform___get__(struct __pyx_obj_5a
  *             self.transform = value
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_fname); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2214, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_fname); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2235, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":2213
+  /* "adios.pyx":2234
  *     property transform:
  *         """ Transform method """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -34284,7 +35873,7 @@ static PyObject *__pyx_pf_5adios_7varinfo_9transform___get__(struct __pyx_obj_5a
   return __pyx_r;
 }
 
-/* "adios.pyx":2215
+/* "adios.pyx":2236
  *         def __get__(self):
  *             return self.fname
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -34311,14 +35900,14 @@ static int __pyx_pf_5adios_7varinfo_9transform_2__set__(struct __pyx_obj_5adios_
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "adios.pyx":2216
+  /* "adios.pyx":2237
  *             return self.fname
  *         def __set__(self, value):
  *             self.transform = value             # <<<<<<<<<<<<<<
  * 
  *     def __init__(self, str name,
  */
-  if (!(likely(PyString_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(0, 2216, __pyx_L1_error)
+  if (!(likely(PyString_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(0, 2237, __pyx_L1_error)
   __pyx_t_1 = __pyx_v_value;
   __Pyx_INCREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
@@ -34327,7 +35916,7 @@ static int __pyx_pf_5adios_7varinfo_9transform_2__set__(struct __pyx_obj_5adios_
   __pyx_v_self->transform = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "adios.pyx":2215
+  /* "adios.pyx":2236
  *         def __get__(self):
  *             return self.fname
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -34347,7 +35936,7 @@ static int __pyx_pf_5adios_7varinfo_9transform_2__set__(struct __pyx_obj_5adios_
   return __pyx_r;
 }
 
-/* "adios.pyx":2218
+/* "adios.pyx":2239
  *             self.transform = value
  * 
  *     def __init__(self, str name,             # <<<<<<<<<<<<<<
@@ -34370,11 +35959,11 @@ static int __pyx_pw_5adios_7varinfo_1__init__(PyObject *__pyx_v_self, PyObject *
   {
     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,&__pyx_n_s_ldim,&__pyx_n_s_gdim,&__pyx_n_s_offset,&__pyx_n_s_value,&__pyx_n_s_transform,0};
     PyObject* values[6] = {0,0,0,0,0,0};
-    values[1] = __pyx_k__59;
-    values[2] = __pyx_k__60;
-    values[3] = __pyx_k__61;
+    values[1] = __pyx_k__61;
+    values[2] = __pyx_k__62;
+    values[3] = __pyx_k__63;
 
-    /* "adios.pyx":2222
+    /* "adios.pyx":2243
  *                  gdim = tuple(),
  *                  offset = tuple(),
  *                  value = None,             # <<<<<<<<<<<<<<
@@ -34383,7 +35972,7 @@ static int __pyx_pw_5adios_7varinfo_1__init__(PyObject *__pyx_v_self, PyObject *
  */
     values[4] = ((PyObject *)Py_None);
 
-    /* "adios.pyx":2223
+    /* "adios.pyx":2244
  *                  offset = tuple(),
  *                  value = None,
  *                  transform = None):             # <<<<<<<<<<<<<<
@@ -34436,7 +36025,7 @@ static int __pyx_pw_5adios_7varinfo_1__init__(PyObject *__pyx_v_self, PyObject *
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 2218, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 2239, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -34459,16 +36048,16 @@ static int __pyx_pw_5adios_7varinfo_1__init__(PyObject *__pyx_v_self, PyObject *
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2218, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2239, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.varinfo.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 2218, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 2239, __pyx_L1_error)
   __pyx_r = __pyx_pf_5adios_7varinfo___init__(((struct __pyx_obj_5adios_varinfo *)__pyx_v_self), __pyx_v_name, __pyx_v_ldim, __pyx_v_gdim, __pyx_v_offset, __pyx_v_value, __pyx_v_transform);
 
-  /* "adios.pyx":2218
+  /* "adios.pyx":2239
  *             self.transform = value
  * 
  *     def __init__(self, str name,             # <<<<<<<<<<<<<<
@@ -34491,7 +36080,7 @@ static int __pyx_pf_5adios_7varinfo___init__(struct __pyx_obj_5adios_varinfo *__
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__init__", 0);
 
-  /* "adios.pyx":2224
+  /* "adios.pyx":2245
  *                  value = None,
  *                  transform = None):
  *         self.name = name             # <<<<<<<<<<<<<<
@@ -34504,7 +36093,7 @@ static int __pyx_pf_5adios_7varinfo___init__(struct __pyx_obj_5adios_varinfo *__
   __Pyx_DECREF(__pyx_v_self->name);
   __pyx_v_self->name = __pyx_v_name;
 
-  /* "adios.pyx":2225
+  /* "adios.pyx":2246
  *                  transform = None):
  *         self.name = name
  *         self.ldim = ldim             # <<<<<<<<<<<<<<
@@ -34517,7 +36106,7 @@ static int __pyx_pf_5adios_7varinfo___init__(struct __pyx_obj_5adios_varinfo *__
   __Pyx_DECREF(__pyx_v_self->ldim);
   __pyx_v_self->ldim = __pyx_v_ldim;
 
-  /* "adios.pyx":2226
+  /* "adios.pyx":2247
  *         self.name = name
  *         self.ldim = ldim
  *         self.gdim = gdim             # <<<<<<<<<<<<<<
@@ -34530,7 +36119,7 @@ static int __pyx_pf_5adios_7varinfo___init__(struct __pyx_obj_5adios_varinfo *__
   __Pyx_DECREF(__pyx_v_self->gdim);
   __pyx_v_self->gdim = __pyx_v_gdim;
 
-  /* "adios.pyx":2227
+  /* "adios.pyx":2248
  *         self.ldim = ldim
  *         self.gdim = gdim
  *         self.offset = offset             # <<<<<<<<<<<<<<
@@ -34543,7 +36132,7 @@ static int __pyx_pf_5adios_7varinfo___init__(struct __pyx_obj_5adios_varinfo *__
   __Pyx_DECREF(__pyx_v_self->offset);
   __pyx_v_self->offset = __pyx_v_offset;
 
-  /* "adios.pyx":2228
+  /* "adios.pyx":2249
  *         self.gdim = gdim
  *         self.offset = offset
  *         self.value = value             # <<<<<<<<<<<<<<
@@ -34556,14 +36145,14 @@ static int __pyx_pf_5adios_7varinfo___init__(struct __pyx_obj_5adios_varinfo *__
   __Pyx_DECREF(__pyx_v_self->value);
   __pyx_v_self->value = __pyx_v_value;
 
-  /* "adios.pyx":2229
+  /* "adios.pyx":2250
  *         self.offset = offset
  *         self.value = value
  *         self.transform = transform             # <<<<<<<<<<<<<<
  * 
  *     def define(self, int64_t gid):
  */
-  if (!(likely(PyString_CheckExact(__pyx_v_transform))||((__pyx_v_transform) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_v_transform)->tp_name), 0))) __PYX_ERR(0, 2229, __pyx_L1_error)
+  if (!(likely(PyString_CheckExact(__pyx_v_transform))||((__pyx_v_transform) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_v_transform)->tp_name), 0))) __PYX_ERR(0, 2250, __pyx_L1_error)
   __pyx_t_1 = __pyx_v_transform;
   __Pyx_INCREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
@@ -34572,7 +36161,7 @@ static int __pyx_pf_5adios_7varinfo___init__(struct __pyx_obj_5adios_varinfo *__
   __pyx_v_self->transform = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "adios.pyx":2218
+  /* "adios.pyx":2239
  *             self.transform = value
  * 
  *     def __init__(self, str name,             # <<<<<<<<<<<<<<
@@ -34592,12 +36181,12 @@ static int __pyx_pf_5adios_7varinfo___init__(struct __pyx_obj_5adios_varinfo *__
   return __pyx_r;
 }
 
-/* "adios.pyx":2231
+/* "adios.pyx":2252
  *         self.transform = transform
  * 
  *     def define(self, int64_t gid):             # <<<<<<<<<<<<<<
  *         if self.value is None:
- *             raise TypeError("Value is none")
+ *             print ("Warning: skipping defining var(%r) with None value" %(self.name))
  */
 
 /* Python wrapper */
@@ -34609,7 +36198,7 @@ static PyObject *__pyx_pw_5adios_7varinfo_3define(PyObject *__pyx_v_self, PyObje
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("define (wrapper)", 0);
   assert(__pyx_arg_gid); {
-    __pyx_v_gid = __Pyx_PyInt_As_int64_t(__pyx_arg_gid); if (unlikely((__pyx_v_gid == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 2231, __pyx_L3_error)
+    __pyx_v_gid = __Pyx_PyInt_As_int64_t(__pyx_arg_gid); if (unlikely((__pyx_v_gid == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2252, __pyx_L3_error)
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L3_error:;
@@ -34636,8 +36225,8 @@ static PyObject *__pyx_pf_5adios_7varinfo_2define(struct __pyx_obj_5adios_varinf
   int __pyx_t_1;
   int __pyx_t_2;
   PyObject *__pyx_t_3 = NULL;
-  int __pyx_t_4;
-  PyObject *__pyx_t_5 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  int __pyx_t_5;
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   int __pyx_t_8;
@@ -34646,41 +36235,58 @@ static PyObject *__pyx_pf_5adios_7varinfo_2define(struct __pyx_obj_5adios_varinf
   struct __pyx_opt_args_5adios_define_var __pyx_t_11;
   __Pyx_RefNannySetupContext("define", 0);
 
-  /* "adios.pyx":2232
+  /* "adios.pyx":2253
  * 
  *     def define(self, int64_t gid):
  *         if self.value is None:             # <<<<<<<<<<<<<<
- *             raise TypeError("Value is none")
- * 
+ *             print ("Warning: skipping defining var(%r) with None value" %(self.name))
+ *             return
  */
   __pyx_t_1 = (__pyx_v_self->value == Py_None);
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "adios.pyx":2233
+    /* "adios.pyx":2254
  *     def define(self, int64_t gid):
  *         if self.value is None:
- *             raise TypeError("Value is none")             # <<<<<<<<<<<<<<
+ *             print ("Warning: skipping defining var(%r) with None value" %(self.name))             # <<<<<<<<<<<<<<
+ *             return
  * 
- *         ldim_ = self.ldim
  */
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__62, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2233, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_Warning_skipping_defining_var_r, __pyx_v_self->name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2254, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
+    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2254, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_GIVEREF(__pyx_t_3);
+    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
+    __pyx_t_3 = 0;
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2254, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __PYX_ERR(0, 2233, __pyx_L1_error)
 
-    /* "adios.pyx":2232
+    /* "adios.pyx":2255
+ *         if self.value is None:
+ *             print ("Warning: skipping defining var(%r) with None value" %(self.name))
+ *             return             # <<<<<<<<<<<<<<
+ * 
+ *         ldim_ = self.ldim
+ */
+    __Pyx_XDECREF(__pyx_r);
+    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+    goto __pyx_L0;
+
+    /* "adios.pyx":2253
  * 
  *     def define(self, int64_t gid):
  *         if self.value is None:             # <<<<<<<<<<<<<<
- *             raise TypeError("Value is none")
- * 
+ *             print ("Warning: skipping defining var(%r) with None value" %(self.name))
+ *             return
  */
   }
 
-  /* "adios.pyx":2235
- *             raise TypeError("Value is none")
+  /* "adios.pyx":2257
+ *             return
  * 
  *         ldim_ = self.ldim             # <<<<<<<<<<<<<<
  *         if isinstance(self.ldim, (tuple, list)):
@@ -34691,7 +36297,7 @@ static PyObject *__pyx_pf_5adios_7varinfo_2define(struct __pyx_obj_5adios_varinf
   __pyx_v_ldim_ = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "adios.pyx":2236
+  /* "adios.pyx":2258
  * 
  *         ldim_ = self.ldim
  *         if isinstance(self.ldim, (tuple, list)):             # <<<<<<<<<<<<<<
@@ -34702,35 +36308,35 @@ static PyObject *__pyx_pf_5adios_7varinfo_2define(struct __pyx_obj_5adios_varinf
   __Pyx_INCREF(__pyx_t_3);
   __pyx_t_1 = PyTuple_Check(__pyx_t_3); 
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_4 = (__pyx_t_1 != 0);
-  if (!__pyx_t_4) {
+  __pyx_t_5 = (__pyx_t_1 != 0);
+  if (!__pyx_t_5) {
   } else {
-    __pyx_t_2 = __pyx_t_4;
+    __pyx_t_2 = __pyx_t_5;
     goto __pyx_L5_bool_binop_done;
   }
   __pyx_t_3 = __pyx_v_self->ldim;
   __Pyx_INCREF(__pyx_t_3);
-  __pyx_t_4 = PyList_Check(__pyx_t_3); 
+  __pyx_t_5 = PyList_Check(__pyx_t_3); 
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_1 = (__pyx_t_4 != 0);
+  __pyx_t_1 = (__pyx_t_5 != 0);
   __pyx_t_2 = __pyx_t_1;
   __pyx_L5_bool_binop_done:;
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "adios.pyx":2237
+    /* "adios.pyx":2259
  *         ldim_ = self.ldim
  *         if isinstance(self.ldim, (tuple, list)):
  *             ldim_ = tuple(self.ldim)             # <<<<<<<<<<<<<<
  * 
  *         gdim_ = self.gdim
  */
-    __pyx_t_3 = PySequence_Tuple(__pyx_v_self->ldim); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2237, __pyx_L1_error)
+    __pyx_t_3 = PySequence_Tuple(__pyx_v_self->ldim); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2259, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_ldim_, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "adios.pyx":2236
+    /* "adios.pyx":2258
  * 
  *         ldim_ = self.ldim
  *         if isinstance(self.ldim, (tuple, list)):             # <<<<<<<<<<<<<<
@@ -34739,7 +36345,7 @@ static PyObject *__pyx_pf_5adios_7varinfo_2define(struct __pyx_obj_5adios_varinf
  */
   }
 
-  /* "adios.pyx":2239
+  /* "adios.pyx":2261
  *             ldim_ = tuple(self.ldim)
  * 
  *         gdim_ = self.gdim             # <<<<<<<<<<<<<<
@@ -34751,7 +36357,7 @@ static PyObject *__pyx_pf_5adios_7varinfo_2define(struct __pyx_obj_5adios_varinf
   __pyx_v_gdim_ = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "adios.pyx":2240
+  /* "adios.pyx":2262
  * 
  *         gdim_ = self.gdim
  *         if isinstance(self.gdim, (tuple, list)):             # <<<<<<<<<<<<<<
@@ -34762,35 +36368,35 @@ static PyObject *__pyx_pf_5adios_7varinfo_2define(struct __pyx_obj_5adios_varinf
   __Pyx_INCREF(__pyx_t_3);
   __pyx_t_2 = PyTuple_Check(__pyx_t_3); 
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_4 = (__pyx_t_2 != 0);
-  if (!__pyx_t_4) {
+  __pyx_t_5 = (__pyx_t_2 != 0);
+  if (!__pyx_t_5) {
   } else {
-    __pyx_t_1 = __pyx_t_4;
+    __pyx_t_1 = __pyx_t_5;
     goto __pyx_L8_bool_binop_done;
   }
   __pyx_t_3 = __pyx_v_self->gdim;
   __Pyx_INCREF(__pyx_t_3);
-  __pyx_t_4 = PyList_Check(__pyx_t_3); 
+  __pyx_t_5 = PyList_Check(__pyx_t_3); 
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_2 = (__pyx_t_4 != 0);
+  __pyx_t_2 = (__pyx_t_5 != 0);
   __pyx_t_1 = __pyx_t_2;
   __pyx_L8_bool_binop_done:;
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "adios.pyx":2241
+    /* "adios.pyx":2263
  *         gdim_ = self.gdim
  *         if isinstance(self.gdim, (tuple, list)):
  *             gdim_ = tuple(self.gdim)             # <<<<<<<<<<<<<<
  * 
  *         offset_ = self.offset
  */
-    __pyx_t_3 = PySequence_Tuple(__pyx_v_self->gdim); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2241, __pyx_L1_error)
+    __pyx_t_3 = PySequence_Tuple(__pyx_v_self->gdim); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2263, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_gdim_, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "adios.pyx":2240
+    /* "adios.pyx":2262
  * 
  *         gdim_ = self.gdim
  *         if isinstance(self.gdim, (tuple, list)):             # <<<<<<<<<<<<<<
@@ -34799,7 +36405,7 @@ static PyObject *__pyx_pf_5adios_7varinfo_2define(struct __pyx_obj_5adios_varinf
  */
   }
 
-  /* "adios.pyx":2243
+  /* "adios.pyx":2265
  *             gdim_ = tuple(self.gdim)
  * 
  *         offset_ = self.offset             # <<<<<<<<<<<<<<
@@ -34811,7 +36417,7 @@ static PyObject *__pyx_pf_5adios_7varinfo_2define(struct __pyx_obj_5adios_varinf
   __pyx_v_offset_ = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "adios.pyx":2244
+  /* "adios.pyx":2266
  * 
  *         offset_ = self.offset
  *         if isinstance(self.offset, (tuple, list)):             # <<<<<<<<<<<<<<
@@ -34822,35 +36428,35 @@ static PyObject *__pyx_pf_5adios_7varinfo_2define(struct __pyx_obj_5adios_varinf
   __Pyx_INCREF(__pyx_t_3);
   __pyx_t_1 = PyTuple_Check(__pyx_t_3); 
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_4 = (__pyx_t_1 != 0);
-  if (!__pyx_t_4) {
+  __pyx_t_5 = (__pyx_t_1 != 0);
+  if (!__pyx_t_5) {
   } else {
-    __pyx_t_2 = __pyx_t_4;
+    __pyx_t_2 = __pyx_t_5;
     goto __pyx_L11_bool_binop_done;
   }
   __pyx_t_3 = __pyx_v_self->offset;
   __Pyx_INCREF(__pyx_t_3);
-  __pyx_t_4 = PyList_Check(__pyx_t_3); 
+  __pyx_t_5 = PyList_Check(__pyx_t_3); 
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_1 = (__pyx_t_4 != 0);
+  __pyx_t_1 = (__pyx_t_5 != 0);
   __pyx_t_2 = __pyx_t_1;
   __pyx_L11_bool_binop_done:;
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "adios.pyx":2245
+    /* "adios.pyx":2267
  *         offset_ = self.offset
  *         if isinstance(self.offset, (tuple, list)):
  *             offset_ = tuple(self.offset)             # <<<<<<<<<<<<<<
  * 
  *         val_ = self.value
  */
-    __pyx_t_3 = PySequence_Tuple(__pyx_v_self->offset); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2245, __pyx_L1_error)
+    __pyx_t_3 = PySequence_Tuple(__pyx_v_self->offset); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2267, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_offset_, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "adios.pyx":2244
+    /* "adios.pyx":2266
  * 
  *         offset_ = self.offset
  *         if isinstance(self.offset, (tuple, list)):             # <<<<<<<<<<<<<<
@@ -34859,7 +36465,7 @@ static PyObject *__pyx_pf_5adios_7varinfo_2define(struct __pyx_obj_5adios_varinf
  */
   }
 
-  /* "adios.pyx":2247
+  /* "adios.pyx":2269
  *             offset_ = tuple(self.offset)
  * 
  *         val_ = self.value             # <<<<<<<<<<<<<<
@@ -34871,7 +36477,7 @@ static PyObject *__pyx_pf_5adios_7varinfo_2define(struct __pyx_obj_5adios_varinf
   __pyx_v_val_ = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "adios.pyx":2248
+  /* "adios.pyx":2270
  * 
  *         val_ = self.value
  *         if not isinstance(self.value, (np.ndarray)):             # <<<<<<<<<<<<<<
@@ -34885,47 +36491,65 @@ static PyObject *__pyx_pf_5adios_7varinfo_2define(struct __pyx_obj_5adios_varinf
   __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0);
   if (__pyx_t_2) {
 
-    /* "adios.pyx":2249
+    /* "adios.pyx":2271
  *         val_ = self.value
  *         if not isinstance(self.value, (np.ndarray)):
  *             val_ = np.array(self.value)             # <<<<<<<<<<<<<<
  * 
  *         atype = np2adiostype(val_.dtype)
  */
-    __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2249, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_array); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2249, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2271, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_array); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2271, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    __pyx_t_5 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_6))) {
-      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6);
-      if (likely(__pyx_t_5)) {
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __pyx_t_4 = NULL;
+    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
+      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6);
+      if (likely(__pyx_t_4)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
-        __Pyx_INCREF(__pyx_t_5);
+        __Pyx_INCREF(__pyx_t_4);
         __Pyx_INCREF(function);
         __Pyx_DECREF_SET(__pyx_t_6, function);
       }
     }
-    if (!__pyx_t_5) {
-      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_self->value); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2249, __pyx_L1_error)
+    if (!__pyx_t_4) {
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_self->value); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2271, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
     } else {
-      __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2249, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_7);
-      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5); __pyx_t_5 = NULL;
-      __Pyx_INCREF(__pyx_v_self->value);
-      __Pyx_GIVEREF(__pyx_v_self->value);
-      PyTuple_SET_ITEM(__pyx_t_7, 0+1, __pyx_v_self->value);
-      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_7, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2249, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_3);
-      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_6)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_v_self->value};
+        __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2271, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+        __Pyx_GOTREF(__pyx_t_3);
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_v_self->value};
+        __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2271, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+        __Pyx_GOTREF(__pyx_t_3);
+      } else
+      #endif
+      {
+        __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2271, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_7);
+        __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_4); __pyx_t_4 = NULL;
+        __Pyx_INCREF(__pyx_v_self->value);
+        __Pyx_GIVEREF(__pyx_v_self->value);
+        PyTuple_SET_ITEM(__pyx_t_7, 0+1, __pyx_v_self->value);
+        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_7, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2271, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_3);
+        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+      }
     }
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_DECREF_SET(__pyx_v_val_, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "adios.pyx":2248
+    /* "adios.pyx":2270
  * 
  *         val_ = self.value
  *         if not isinstance(self.value, (np.ndarray)):             # <<<<<<<<<<<<<<
@@ -34934,23 +36558,23 @@ static PyObject *__pyx_pf_5adios_7varinfo_2define(struct __pyx_obj_5adios_varinf
  */
   }
 
-  /* "adios.pyx":2251
+  /* "adios.pyx":2273
  *             val_ = np.array(self.value)
  * 
  *         atype = np2adiostype(val_.dtype)             # <<<<<<<<<<<<<<
  *         ## No space allowed
  *         cdef int64_t varid = 0;
  */
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_val_, __pyx_n_s_dtype); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2251, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_val_, __pyx_n_s_dtype); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2273, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_dtype))))) __PYX_ERR(0, 2251, __pyx_L1_error)
-  __pyx_t_6 = __pyx_f_5adios_np2adiostype(((PyArray_Descr *)__pyx_t_3), 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2251, __pyx_L1_error)
+  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_dtype))))) __PYX_ERR(0, 2273, __pyx_L1_error)
+  __pyx_t_6 = __pyx_f_5adios_np2adiostype(((PyArray_Descr *)__pyx_t_3), 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2273, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_v_atype = __pyx_t_6;
   __pyx_t_6 = 0;
 
-  /* "adios.pyx":2253
+  /* "adios.pyx":2275
  *         atype = np2adiostype(val_.dtype)
  *         ## No space allowed
  *         cdef int64_t varid = 0;             # <<<<<<<<<<<<<<
@@ -34959,7 +36583,7 @@ static PyObject *__pyx_pf_5adios_7varinfo_2define(struct __pyx_obj_5adios_varinf
  */
   __pyx_v_varid = 0;
 
-  /* "adios.pyx":2254
+  /* "adios.pyx":2276
  *         ## No space allowed
  *         cdef int64_t varid = 0;
  *         varid = define_var(gid, self.name, "", atype,             # <<<<<<<<<<<<<<
@@ -34968,96 +36592,96 @@ static PyObject *__pyx_pf_5adios_7varinfo_2define(struct __pyx_obj_5adios_varinf
  */
   __pyx_t_6 = __pyx_v_self->name;
   __Pyx_INCREF(__pyx_t_6);
-  __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_v_atype); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2254, __pyx_L1_error)
+  __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_v_atype); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2276, __pyx_L1_error)
 
-  /* "adios.pyx":2255
+  /* "adios.pyx":2277
  *         cdef int64_t varid = 0;
  *         varid = define_var(gid, self.name, "", atype,
  *                    str(ldim_).replace(' ', '').strip('(,)'),             # <<<<<<<<<<<<<<
  *                    str(gdim_).replace(' ', '').strip('(,)'),
  *                    str(offset_).replace(' ', '').strip('(,)'))
  */
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2255, __pyx_L1_error)
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2277, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_v_ldim_);
   __Pyx_GIVEREF(__pyx_v_ldim_);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_ldim_);
-  __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_3, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2255, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_3, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2277, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_replace); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2255, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_replace); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2277, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__64, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2255, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__65, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2277, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_strip); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2255, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_strip); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2277, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__66, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2255, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__67, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2277, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (!(likely(PyString_CheckExact(__pyx_t_7))||((__pyx_t_7) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_7)->tp_name), 0))) __PYX_ERR(0, 2255, __pyx_L1_error)
+  if (!(likely(PyString_CheckExact(__pyx_t_7))||((__pyx_t_7) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_7)->tp_name), 0))) __PYX_ERR(0, 2277, __pyx_L1_error)
 
-  /* "adios.pyx":2256
+  /* "adios.pyx":2278
  *         varid = define_var(gid, self.name, "", atype,
  *                    str(ldim_).replace(' ', '').strip('(,)'),
  *                    str(gdim_).replace(' ', '').strip('(,)'),             # <<<<<<<<<<<<<<
  *                    str(offset_).replace(' ', '').strip('(,)'))
  * 
  */
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2256, __pyx_L1_error)
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2278, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_v_gdim_);
   __Pyx_GIVEREF(__pyx_v_gdim_);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_gdim_);
-  __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_3, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2256, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_5);
+  __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2278, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_replace); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2256, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_replace); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2278, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__67, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2256, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_5);
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__68, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2278, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_strip); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2256, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_strip); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2278, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__68, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2256, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_5);
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__69, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2278, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (!(likely(PyString_CheckExact(__pyx_t_5))||((__pyx_t_5) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_5)->tp_name), 0))) __PYX_ERR(0, 2256, __pyx_L1_error)
+  if (!(likely(PyString_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(0, 2278, __pyx_L1_error)
 
-  /* "adios.pyx":2257
+  /* "adios.pyx":2279
  *                    str(ldim_).replace(' ', '').strip('(,)'),
  *                    str(gdim_).replace(' ', '').strip('(,)'),
  *                    str(offset_).replace(' ', '').strip('(,)'))             # <<<<<<<<<<<<<<
  * 
  *         if (self.transform is not None):
  */
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2257, __pyx_L1_error)
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2279, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_v_offset_);
   __Pyx_GIVEREF(__pyx_v_offset_);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_offset_);
-  __pyx_t_9 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_3, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2257, __pyx_L1_error)
+  __pyx_t_9 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_3, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2279, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_replace); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2257, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_replace); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2279, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-  __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__69, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2257, __pyx_L1_error)
+  __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__70, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2279, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_strip); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2257, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_strip); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2279, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-  __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__70, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2257, __pyx_L1_error)
+  __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__71, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2279, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (!(likely(PyString_CheckExact(__pyx_t_9))||((__pyx_t_9) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_9)->tp_name), 0))) __PYX_ERR(0, 2257, __pyx_L1_error)
+  if (!(likely(PyString_CheckExact(__pyx_t_9))||((__pyx_t_9) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_9)->tp_name), 0))) __PYX_ERR(0, 2279, __pyx_L1_error)
 
-  /* "adios.pyx":2254
+  /* "adios.pyx":2276
  *         ## No space allowed
  *         cdef int64_t varid = 0;
  *         varid = define_var(gid, self.name, "", atype,             # <<<<<<<<<<<<<<
@@ -35066,16 +36690,16 @@ static PyObject *__pyx_pf_5adios_7varinfo_2define(struct __pyx_obj_5adios_varinf
  */
   __pyx_t_11.__pyx_n = 3;
   __pyx_t_11.dimensions = ((PyObject*)__pyx_t_7);
-  __pyx_t_11.global_dimensions = ((PyObject*)__pyx_t_5);
+  __pyx_t_11.global_dimensions = ((PyObject*)__pyx_t_4);
   __pyx_t_11.local_offsets = ((PyObject*)__pyx_t_9);
   __pyx_t_10 = __pyx_f_5adios_define_var(__pyx_v_gid, ((PyObject*)__pyx_t_6), __pyx_kp_s__10, __pyx_t_8, 0, &__pyx_t_11); 
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
   __pyx_v_varid = __pyx_t_10;
 
-  /* "adios.pyx":2259
+  /* "adios.pyx":2281
  *                    str(offset_).replace(' ', '').strip('(,)'))
  * 
  *         if (self.transform is not None):             # <<<<<<<<<<<<<<
@@ -35086,7 +36710,7 @@ static PyObject *__pyx_pf_5adios_7varinfo_2define(struct __pyx_obj_5adios_varinf
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "adios.pyx":2260
+    /* "adios.pyx":2282
  * 
  *         if (self.transform is not None):
  *             set_transform(varid, self.transform)             # <<<<<<<<<<<<<<
@@ -35098,7 +36722,7 @@ static PyObject *__pyx_pf_5adios_7varinfo_2define(struct __pyx_obj_5adios_varinf
     __pyx_f_5adios_set_transform(__pyx_v_varid, ((PyObject*)__pyx_t_9), 0);
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-    /* "adios.pyx":2259
+    /* "adios.pyx":2281
  *                    str(offset_).replace(' ', '').strip('(,)'))
  * 
  *         if (self.transform is not None):             # <<<<<<<<<<<<<<
@@ -35107,12 +36731,12 @@ static PyObject *__pyx_pf_5adios_7varinfo_2define(struct __pyx_obj_5adios_varinf
  */
   }
 
-  /* "adios.pyx":2231
+  /* "adios.pyx":2252
  *         self.transform = transform
  * 
  *     def define(self, int64_t gid):             # <<<<<<<<<<<<<<
  *         if self.value is None:
- *             raise TypeError("Value is none")
+ *             print ("Warning: skipping defining var(%r) with None value" %(self.name))
  */
 
   /* function exit code */
@@ -35120,7 +36744,7 @@ static PyObject *__pyx_pf_5adios_7varinfo_2define(struct __pyx_obj_5adios_varinf
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_XDECREF(__pyx_t_4);
   __Pyx_XDECREF(__pyx_t_6);
   __Pyx_XDECREF(__pyx_t_7);
   __Pyx_XDECREF(__pyx_t_9);
@@ -35137,7 +36761,7 @@ static PyObject *__pyx_pf_5adios_7varinfo_2define(struct __pyx_obj_5adios_varinf
   return __pyx_r;
 }
 
-/* "adios.pyx":2262
+/* "adios.pyx":2284
  *             set_transform(varid, self.transform)
  * 
  *     def bytes(self):             # <<<<<<<<<<<<<<
@@ -35171,7 +36795,7 @@ static PyObject *__pyx_pf_5adios_7varinfo_4bytes(struct __pyx_obj_5adios_varinfo
   PyObject *__pyx_t_6 = NULL;
   __Pyx_RefNannySetupContext("bytes", 0);
 
-  /* "adios.pyx":2263
+  /* "adios.pyx":2285
  * 
  *     def bytes(self):
  *         val_ = self.value             # <<<<<<<<<<<<<<
@@ -35183,7 +36807,7 @@ static PyObject *__pyx_pf_5adios_7varinfo_4bytes(struct __pyx_obj_5adios_varinfo
   __pyx_v_val_ = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "adios.pyx":2264
+  /* "adios.pyx":2286
  *     def bytes(self):
  *         val_ = self.value
  *         if not isinstance(self.value, (np.ndarray)):             # <<<<<<<<<<<<<<
@@ -35197,20 +36821,20 @@ static PyObject *__pyx_pf_5adios_7varinfo_4bytes(struct __pyx_obj_5adios_varinfo
   __pyx_t_3 = ((!(__pyx_t_2 != 0)) != 0);
   if (__pyx_t_3) {
 
-    /* "adios.pyx":2265
+    /* "adios.pyx":2287
  *         val_ = self.value
  *         if not isinstance(self.value, (np.ndarray)):
  *             val_ = np.array(self.value)             # <<<<<<<<<<<<<<
  * 
  *         return val_.size * val_.itemsize
  */
-    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2265, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2287, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_array); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2265, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_array); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2287, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_t_4 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_5))) {
+    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
       __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
       if (likely(__pyx_t_4)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
@@ -35220,24 +36844,42 @@ static PyObject *__pyx_pf_5adios_7varinfo_4bytes(struct __pyx_obj_5adios_varinfo
       }
     }
     if (!__pyx_t_4) {
-      __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_self->value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2265, __pyx_L1_error)
+      __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_self->value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2287, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
     } else {
-      __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2265, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_6);
-      __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL;
-      __Pyx_INCREF(__pyx_v_self->value);
-      __Pyx_GIVEREF(__pyx_v_self->value);
-      PyTuple_SET_ITEM(__pyx_t_6, 0+1, __pyx_v_self->value);
-      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2265, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_1);
-      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_5)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_v_self->value};
+        __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2287, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+        __Pyx_GOTREF(__pyx_t_1);
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_v_self->value};
+        __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2287, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+        __Pyx_GOTREF(__pyx_t_1);
+      } else
+      #endif
+      {
+        __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2287, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_6);
+        __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL;
+        __Pyx_INCREF(__pyx_v_self->value);
+        __Pyx_GIVEREF(__pyx_v_self->value);
+        PyTuple_SET_ITEM(__pyx_t_6, 0+1, __pyx_v_self->value);
+        __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2287, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_1);
+        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+      }
     }
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_DECREF_SET(__pyx_v_val_, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "adios.pyx":2264
+    /* "adios.pyx":2286
  *     def bytes(self):
  *         val_ = self.value
  *         if not isinstance(self.value, (np.ndarray)):             # <<<<<<<<<<<<<<
@@ -35246,7 +36888,7 @@ static PyObject *__pyx_pf_5adios_7varinfo_4bytes(struct __pyx_obj_5adios_varinfo
  */
   }
 
-  /* "adios.pyx":2267
+  /* "adios.pyx":2289
  *             val_ = np.array(self.value)
  * 
  *         return val_.size * val_.itemsize             # <<<<<<<<<<<<<<
@@ -35254,11 +36896,11 @@ static PyObject *__pyx_pf_5adios_7varinfo_4bytes(struct __pyx_obj_5adios_varinfo
  *     def write(self, int64_t fd):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_val_, __pyx_n_s_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2267, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_val_, __pyx_n_s_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2289, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_val_, __pyx_n_s_itemsize); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2267, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_val_, __pyx_n_s_itemsize); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2289, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = PyNumber_Multiply(__pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2267, __pyx_L1_error)
+  __pyx_t_6 = PyNumber_Multiply(__pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2289, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
@@ -35266,7 +36908,7 @@ static PyObject *__pyx_pf_5adios_7varinfo_4bytes(struct __pyx_obj_5adios_varinfo
   __pyx_t_6 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":2262
+  /* "adios.pyx":2284
  *             set_transform(varid, self.transform)
  * 
  *     def bytes(self):             # <<<<<<<<<<<<<<
@@ -35289,12 +36931,12 @@ static PyObject *__pyx_pf_5adios_7varinfo_4bytes(struct __pyx_obj_5adios_varinfo
   return __pyx_r;
 }
 
-/* "adios.pyx":2269
+/* "adios.pyx":2291
  *         return val_.size * val_.itemsize
  * 
  *     def write(self, int64_t fd):             # <<<<<<<<<<<<<<
  *         val_ = self.value
- *         if not isinstance(self.value, (np.ndarray)):
+ * 
  */
 
 /* Python wrapper */
@@ -35306,7 +36948,7 @@ static PyObject *__pyx_pw_5adios_7varinfo_7write(PyObject *__pyx_v_self, PyObjec
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("write (wrapper)", 0);
   assert(__pyx_arg_fd); {
-    __pyx_v_fd = __Pyx_PyInt_As_int64_t(__pyx_arg_fd); if (unlikely((__pyx_v_fd == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 2269, __pyx_L3_error)
+    __pyx_v_fd = __Pyx_PyInt_As_int64_t(__pyx_arg_fd); if (unlikely((__pyx_v_fd == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2291, __pyx_L3_error)
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L3_error:;
@@ -35333,46 +36975,77 @@ static PyObject *__pyx_pf_5adios_7varinfo_6write(struct __pyx_obj_5adios_varinfo
   PyObject *__pyx_t_6 = NULL;
   __Pyx_RefNannySetupContext("write", 0);
 
-  /* "adios.pyx":2270
+  /* "adios.pyx":2292
  * 
  *     def write(self, int64_t fd):
  *         val_ = self.value             # <<<<<<<<<<<<<<
- *         if not isinstance(self.value, (np.ndarray)):
- *             val_ = np.array(self.value)
+ * 
+ *         if val_ is None:
  */
   __pyx_t_1 = __pyx_v_self->value;
   __Pyx_INCREF(__pyx_t_1);
   __pyx_v_val_ = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "adios.pyx":2271
- *     def write(self, int64_t fd):
+  /* "adios.pyx":2294
  *         val_ = self.value
+ * 
+ *         if val_ is None:             # <<<<<<<<<<<<<<
+ *             return
+ * 
+ */
+  __pyx_t_2 = (__pyx_v_val_ == Py_None);
+  __pyx_t_3 = (__pyx_t_2 != 0);
+  if (__pyx_t_3) {
+
+    /* "adios.pyx":2295
+ * 
+ *         if val_ is None:
+ *             return             # <<<<<<<<<<<<<<
+ * 
+ *         if not isinstance(self.value, (np.ndarray)):
+ */
+    __Pyx_XDECREF(__pyx_r);
+    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+    goto __pyx_L0;
+
+    /* "adios.pyx":2294
+ *         val_ = self.value
+ * 
+ *         if val_ is None:             # <<<<<<<<<<<<<<
+ *             return
+ * 
+ */
+  }
+
+  /* "adios.pyx":2297
+ *             return
+ * 
  *         if not isinstance(self.value, (np.ndarray)):             # <<<<<<<<<<<<<<
  *             val_ = np.array(self.value)
  * 
  */
   __pyx_t_1 = __pyx_v_self->value;
   __Pyx_INCREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_TypeCheck(__pyx_t_1, __pyx_ptype_5numpy_ndarray); 
+  __pyx_t_3 = __Pyx_TypeCheck(__pyx_t_1, __pyx_ptype_5numpy_ndarray); 
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_3 = ((!(__pyx_t_2 != 0)) != 0);
-  if (__pyx_t_3) {
+  __pyx_t_2 = ((!(__pyx_t_3 != 0)) != 0);
+  if (__pyx_t_2) {
 
-    /* "adios.pyx":2272
- *         val_ = self.value
+    /* "adios.pyx":2298
+ * 
  *         if not isinstance(self.value, (np.ndarray)):
  *             val_ = np.array(self.value)             # <<<<<<<<<<<<<<
  * 
  *         write(fd, self.name, val_)
  */
-    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2272, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2298, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_array); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2272, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_array); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2298, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_t_4 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_5))) {
+    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
       __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
       if (likely(__pyx_t_4)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
@@ -35382,33 +37055,51 @@ static PyObject *__pyx_pf_5adios_7varinfo_6write(struct __pyx_obj_5adios_varinfo
       }
     }
     if (!__pyx_t_4) {
-      __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_self->value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2272, __pyx_L1_error)
+      __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_self->value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2298, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
     } else {
-      __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2272, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_6);
-      __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL;
-      __Pyx_INCREF(__pyx_v_self->value);
-      __Pyx_GIVEREF(__pyx_v_self->value);
-      PyTuple_SET_ITEM(__pyx_t_6, 0+1, __pyx_v_self->value);
-      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2272, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_1);
-      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_5)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_v_self->value};
+        __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2298, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+        __Pyx_GOTREF(__pyx_t_1);
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_v_self->value};
+        __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2298, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+        __Pyx_GOTREF(__pyx_t_1);
+      } else
+      #endif
+      {
+        __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2298, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_6);
+        __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL;
+        __Pyx_INCREF(__pyx_v_self->value);
+        __Pyx_GIVEREF(__pyx_v_self->value);
+        PyTuple_SET_ITEM(__pyx_t_6, 0+1, __pyx_v_self->value);
+        __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2298, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_1);
+        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+      }
     }
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_DECREF_SET(__pyx_v_val_, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "adios.pyx":2271
- *     def write(self, int64_t fd):
- *         val_ = self.value
+    /* "adios.pyx":2297
+ *             return
+ * 
  *         if not isinstance(self.value, (np.ndarray)):             # <<<<<<<<<<<<<<
  *             val_ = np.array(self.value)
  * 
  */
   }
 
-  /* "adios.pyx":2274
+  /* "adios.pyx":2300
  *             val_ = np.array(self.value)
  * 
  *         write(fd, self.name, val_)             # <<<<<<<<<<<<<<
@@ -35420,12 +37111,12 @@ static PyObject *__pyx_pf_5adios_7varinfo_6write(struct __pyx_obj_5adios_varinfo
   __pyx_f_5adios_write(__pyx_v_fd, ((PyObject*)__pyx_t_1), __pyx_v_val_, 0, NULL);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":2269
+  /* "adios.pyx":2291
  *         return val_.size * val_.itemsize
  * 
  *     def write(self, int64_t fd):             # <<<<<<<<<<<<<<
  *         val_ = self.value
- *         if not isinstance(self.value, (np.ndarray)):
+ * 
  */
 
   /* function exit code */
@@ -35445,7 +37136,7 @@ static PyObject *__pyx_pf_5adios_7varinfo_6write(struct __pyx_obj_5adios_varinfo
   return __pyx_r;
 }
 
-/* "adios.pyx":2276
+/* "adios.pyx":2302
  *         write(fd, self.name, val_)
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -35473,7 +37164,7 @@ static PyObject *__pyx_pf_5adios_7varinfo_8__repr__(struct __pyx_obj_5adios_vari
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("__repr__", 0);
 
-  /* "adios.pyx":2277
+  /* "adios.pyx":2303
  * 
  *     def __repr__(self):
  *         return ("AdiosVarinfo (name=%r, ldim=%r, gdim=%r, offset=%r, transform=%r, value=%r)") % \             # <<<<<<<<<<<<<<
@@ -35482,14 +37173,14 @@ static PyObject *__pyx_pf_5adios_7varinfo_8__repr__(struct __pyx_obj_5adios_vari
  */
   __Pyx_XDECREF(__pyx_r);
 
-  /* "adios.pyx":2278
+  /* "adios.pyx":2304
  *     def __repr__(self):
  *         return ("AdiosVarinfo (name=%r, ldim=%r, gdim=%r, offset=%r, transform=%r, value=%r)") % \
  *                 (self.name, self.ldim, self.gdim, self.offset, self.transform, self.value)             # <<<<<<<<<<<<<<
  * 
  * ## Aliases
  */
-  __pyx_t_1 = PyTuple_New(6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2278, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2304, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_v_self->name);
   __Pyx_GIVEREF(__pyx_v_self->name);
@@ -35510,21 +37201,21 @@ static PyObject *__pyx_pf_5adios_7varinfo_8__repr__(struct __pyx_obj_5adios_vari
   __Pyx_GIVEREF(__pyx_v_self->value);
   PyTuple_SET_ITEM(__pyx_t_1, 5, __pyx_v_self->value);
 
-  /* "adios.pyx":2277
+  /* "adios.pyx":2303
  * 
  *     def __repr__(self):
  *         return ("AdiosVarinfo (name=%r, ldim=%r, gdim=%r, offset=%r, transform=%r, value=%r)") % \             # <<<<<<<<<<<<<<
  *                 (self.name, self.ldim, self.gdim, self.offset, self.transform, self.value)
  * 
  */
-  __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_AdiosVarinfo_name_r_ldim_r_gdim, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2277, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_AdiosVarinfo_name_r_ldim_r_gdim, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2303, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":2276
+  /* "adios.pyx":2302
  *         write(fd, self.name, val_)
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -35544,7 +37235,7 @@ static PyObject *__pyx_pf_5adios_7varinfo_8__repr__(struct __pyx_obj_5adios_vari
   return __pyx_r;
 }
 
-/* "adios.pyx":2205
+/* "adios.pyx":2226
  * cdef class varinfo(object):
  *     cdef str name
  *     cdef public ldim             # <<<<<<<<<<<<<<
@@ -35639,7 +37330,7 @@ static int __pyx_pf_5adios_7varinfo_4ldim_4__del__(struct __pyx_obj_5adios_varin
   return __pyx_r;
 }
 
-/* "adios.pyx":2206
+/* "adios.pyx":2227
  *     cdef str name
  *     cdef public ldim
  *     cdef public gdim             # <<<<<<<<<<<<<<
@@ -35734,7 +37425,7 @@ static int __pyx_pf_5adios_7varinfo_4gdim_4__del__(struct __pyx_obj_5adios_varin
   return __pyx_r;
 }
 
-/* "adios.pyx":2207
+/* "adios.pyx":2228
  *     cdef public ldim
  *     cdef public gdim
  *     cdef public offset             # <<<<<<<<<<<<<<
@@ -35829,7 +37520,7 @@ static int __pyx_pf_5adios_7varinfo_6offset_4__del__(struct __pyx_obj_5adios_var
   return __pyx_r;
 }
 
-/* "adios.pyx":2208
+/* "adios.pyx":2229
  *     cdef public gdim
  *     cdef public offset
  *     cdef public value             # <<<<<<<<<<<<<<
@@ -35924,7 +37615,7 @@ static int __pyx_pf_5adios_7varinfo_5value_4__del__(struct __pyx_obj_5adios_vari
   return __pyx_r;
 }
 
-/* "adios.pyx":2292
+/* "adios.pyx":2318
  * ## ====================
  * 
  * def readvar(fname, varname):             # <<<<<<<<<<<<<<
@@ -35962,11 +37653,11 @@ static PyObject *__pyx_pw_5adios_93readvar(PyObject *__pyx_self, PyObject *__pyx
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_varname)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("readvar", 1, 2, 2, 1); __PYX_ERR(0, 2292, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("readvar", 1, 2, 2, 1); __PYX_ERR(0, 2318, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "readvar") < 0)) __PYX_ERR(0, 2292, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "readvar") < 0)) __PYX_ERR(0, 2318, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -35979,7 +37670,7 @@ static PyObject *__pyx_pw_5adios_93readvar(PyObject *__pyx_self, PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("readvar", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2292, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("readvar", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2318, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios.readvar", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -36002,44 +37693,44 @@ static PyObject *__pyx_pf_5adios_92readvar(CYTHON_UNUSED PyObject *__pyx_self, P
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("readvar", 0);
 
-  /* "adios.pyx":2302
+  /* "adios.pyx":2328
  *         NumPy ndarray: variable value
  *     """
  *     f = file(fname, comm=MPI_COMM_SELF)             # <<<<<<<<<<<<<<
  *     v = f[varname]
  *     return v.read(from_steps=0, nsteps=v.nsteps)
  */
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2302, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2328, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_v_fname);
   __Pyx_GIVEREF(__pyx_v_fname);
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_fname);
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2302, __pyx_L1_error)
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2328, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_PyInt_From_int(MPI_COMM_SELF); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2302, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyInt_From_int(MPI_COMM_SELF); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2328, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_comm, __pyx_t_3) < 0) __PYX_ERR(0, 2302, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_comm, __pyx_t_3) < 0) __PYX_ERR(0, 2328, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5adios_file), __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2302, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5adios_file), __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2328, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_v_f = ((struct __pyx_obj_5adios_file *)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "adios.pyx":2303
+  /* "adios.pyx":2329
  *     """
  *     f = file(fname, comm=MPI_COMM_SELF)
  *     v = f[varname]             # <<<<<<<<<<<<<<
  *     return v.read(from_steps=0, nsteps=v.nsteps)
  * 
  */
-  __pyx_t_3 = PyObject_GetItem(((PyObject *)__pyx_v_f), __pyx_v_varname); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2303, __pyx_L1_error)
+  __pyx_t_3 = PyObject_GetItem(((PyObject *)__pyx_v_f), __pyx_v_varname); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2329, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_v = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "adios.pyx":2304
+  /* "adios.pyx":2330
  *     f = file(fname, comm=MPI_COMM_SELF)
  *     v = f[varname]
  *     return v.read(from_steps=0, nsteps=v.nsteps)             # <<<<<<<<<<<<<<
@@ -36047,16 +37738,16 @@ static PyObject *__pyx_pf_5adios_92readvar(CYTHON_UNUSED PyObject *__pyx_self, P
  * def bpls(fname):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_v, __pyx_n_s_read); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2304, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_v, __pyx_n_s_read); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2330, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2304, __pyx_L1_error)
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2330, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_from_steps, __pyx_int_0) < 0) __PYX_ERR(0, 2304, __pyx_L1_error)
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_v, __pyx_n_s_nsteps); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2304, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_from_steps, __pyx_int_0) < 0) __PYX_ERR(0, 2330, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_v, __pyx_n_s_nsteps); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2330, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_nsteps, __pyx_t_1) < 0) __PYX_ERR(0, 2304, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_nsteps, __pyx_t_1) < 0) __PYX_ERR(0, 2330, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2304, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2330, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -36064,7 +37755,7 @@ static PyObject *__pyx_pf_5adios_92readvar(CYTHON_UNUSED PyObject *__pyx_self, P
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":2292
+  /* "adios.pyx":2318
  * ## ====================
  * 
  * def readvar(fname, varname):             # <<<<<<<<<<<<<<
@@ -36087,7 +37778,7 @@ static PyObject *__pyx_pf_5adios_92readvar(CYTHON_UNUSED PyObject *__pyx_self, P
   return __pyx_r;
 }
 
-/* "adios.pyx":2306
+/* "adios.pyx":2332
  *     return v.read(from_steps=0, nsteps=v.nsteps)
  * 
  * def bpls(fname):             # <<<<<<<<<<<<<<
@@ -36125,32 +37816,32 @@ static PyObject *__pyx_pf_5adios_94bpls(CYTHON_UNUSED PyObject *__pyx_self, PyOb
   int __pyx_t_8;
   __Pyx_RefNannySetupContext("bpls", 0);
 
-  /* "adios.pyx":2315
+  /* "adios.pyx":2341
  *         dict: Adios file meta data
  *     """
  *     f = file(fname, comm=MPI_COMM_SELF)             # <<<<<<<<<<<<<<
  *     return {'nvars': f.nvars,
  *             'nattrs': f.nattrs,
  */
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2315, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2341, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_v_fname);
   __Pyx_GIVEREF(__pyx_v_fname);
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_fname);
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2315, __pyx_L1_error)
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2341, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_PyInt_From_int(MPI_COMM_SELF); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2315, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyInt_From_int(MPI_COMM_SELF); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2341, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_comm, __pyx_t_3) < 0) __PYX_ERR(0, 2315, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_comm, __pyx_t_3) < 0) __PYX_ERR(0, 2341, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5adios_file), __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2315, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5adios_file), __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2341, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_v_f = ((struct __pyx_obj_5adios_file *)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "adios.pyx":2316
+  /* "adios.pyx":2342
  *     """
  *     f = file(fname, comm=MPI_COMM_SELF)
  *     return {'nvars': f.nvars,             # <<<<<<<<<<<<<<
@@ -36158,40 +37849,40 @@ static PyObject *__pyx_pf_5adios_94bpls(CYTHON_UNUSED PyObject *__pyx_self, PyOb
  *             'vars': tuple([ k for k in f.vars.iterkeys() ]),
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2316, __pyx_L1_error)
+  __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2342, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_f->nvars); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2316, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_f->nvars); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2342, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_nvars, __pyx_t_2) < 0) __PYX_ERR(0, 2316, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_nvars, __pyx_t_2) < 0) __PYX_ERR(0, 2342, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "adios.pyx":2317
+  /* "adios.pyx":2343
  *     f = file(fname, comm=MPI_COMM_SELF)
  *     return {'nvars': f.nvars,
  *             'nattrs': f.nattrs,             # <<<<<<<<<<<<<<
  *             'vars': tuple([ k for k in f.vars.iterkeys() ]),
  *             'attrs': tuple([ k for k in f.attrs.iterkeys() ]),
  */
-  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_f->nattrs); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2317, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_f->nattrs); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2343, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_nattrs, __pyx_t_2) < 0) __PYX_ERR(0, 2316, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_nattrs, __pyx_t_2) < 0) __PYX_ERR(0, 2342, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "adios.pyx":2318
+  /* "adios.pyx":2344
  *     return {'nvars': f.nvars,
  *             'nattrs': f.nattrs,
  *             'vars': tuple([ k for k in f.vars.iterkeys() ]),             # <<<<<<<<<<<<<<
  *             'attrs': tuple([ k for k in f.attrs.iterkeys() ]),
  *             'time_steps': (f.current_step, f.last_step),
  */
-  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2318, __pyx_L1_error)
+  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2344, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_4 = 0;
   if (unlikely(((PyObject *)__pyx_v_f->vars) == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "iterkeys");
-    __PYX_ERR(0, 2318, __pyx_L1_error)
+    __PYX_ERR(0, 2344, __pyx_L1_error)
   }
-  __pyx_t_7 = __Pyx_dict_iterator(((PyObject *)__pyx_v_f->vars), 0, __pyx_n_s_iterkeys, (&__pyx_t_5), (&__pyx_t_6)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2318, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_dict_iterator(((PyObject *)__pyx_v_f->vars), 0, __pyx_n_s_iterkeys, (&__pyx_t_5), (&__pyx_t_6)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2344, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_XDECREF(__pyx_t_1);
   __pyx_t_1 = __pyx_t_7;
@@ -36199,34 +37890,34 @@ static PyObject *__pyx_pf_5adios_94bpls(CYTHON_UNUSED PyObject *__pyx_self, PyOb
   while (1) {
     __pyx_t_8 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_5, &__pyx_t_4, &__pyx_t_7, NULL, NULL, __pyx_t_6);
     if (unlikely(__pyx_t_8 == 0)) break;
-    if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(0, 2318, __pyx_L1_error)
+    if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(0, 2344, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_7);
     __pyx_t_7 = 0;
-    if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_v_k))) __PYX_ERR(0, 2318, __pyx_L1_error)
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_v_k))) __PYX_ERR(0, 2344, __pyx_L1_error)
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyList_AsTuple(((PyObject*)__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2318, __pyx_L1_error)
+  __pyx_t_1 = PyList_AsTuple(((PyObject*)__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2344, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_vars, __pyx_t_1) < 0) __PYX_ERR(0, 2316, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_vars, __pyx_t_1) < 0) __PYX_ERR(0, 2342, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":2319
+  /* "adios.pyx":2345
  *             'nattrs': f.nattrs,
  *             'vars': tuple([ k for k in f.vars.iterkeys() ]),
  *             'attrs': tuple([ k for k in f.attrs.iterkeys() ]),             # <<<<<<<<<<<<<<
  *             'time_steps': (f.current_step, f.last_step),
  *             'file_size': f.file_size}
  */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2319, __pyx_L1_error)
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2345, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_5 = 0;
   if (unlikely(((PyObject *)__pyx_v_f->attrs) == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "iterkeys");
-    __PYX_ERR(0, 2319, __pyx_L1_error)
+    __PYX_ERR(0, 2345, __pyx_L1_error)
   }
-  __pyx_t_7 = __Pyx_dict_iterator(((PyObject *)__pyx_v_f->attrs), 0, __pyx_n_s_iterkeys, (&__pyx_t_4), (&__pyx_t_6)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2319, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_dict_iterator(((PyObject *)__pyx_v_f->attrs), 0, __pyx_n_s_iterkeys, (&__pyx_t_4), (&__pyx_t_6)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2345, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_XDECREF(__pyx_t_2);
   __pyx_t_2 = __pyx_t_7;
@@ -36234,30 +37925,30 @@ static PyObject *__pyx_pf_5adios_94bpls(CYTHON_UNUSED PyObject *__pyx_self, PyOb
   while (1) {
     __pyx_t_8 = __Pyx_dict_iter_next(__pyx_t_2, __pyx_t_4, &__pyx_t_5, &__pyx_t_7, NULL, NULL, __pyx_t_6);
     if (unlikely(__pyx_t_8 == 0)) break;
-    if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(0, 2319, __pyx_L1_error)
+    if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(0, 2345, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_7);
     __pyx_t_7 = 0;
-    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_v_k))) __PYX_ERR(0, 2319, __pyx_L1_error)
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_v_k))) __PYX_ERR(0, 2345, __pyx_L1_error)
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyList_AsTuple(((PyObject*)__pyx_t_1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2319, __pyx_L1_error)
+  __pyx_t_2 = PyList_AsTuple(((PyObject*)__pyx_t_1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2345, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_attrs, __pyx_t_2) < 0) __PYX_ERR(0, 2316, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_attrs, __pyx_t_2) < 0) __PYX_ERR(0, 2342, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "adios.pyx":2320
+  /* "adios.pyx":2346
  *             'vars': tuple([ k for k in f.vars.iterkeys() ]),
  *             'attrs': tuple([ k for k in f.attrs.iterkeys() ]),
  *             'time_steps': (f.current_step, f.last_step),             # <<<<<<<<<<<<<<
  *             'file_size': f.file_size}
  */
-  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_f->current_step); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2320, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_f->current_step); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2346, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->last_step); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2320, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->last_step); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2346, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2320, __pyx_L1_error)
+  __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2346, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_2);
@@ -36265,23 +37956,23 @@ static PyObject *__pyx_pf_5adios_94bpls(CYTHON_UNUSED PyObject *__pyx_self, PyOb
   PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_1);
   __pyx_t_2 = 0;
   __pyx_t_1 = 0;
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_time_steps, __pyx_t_7) < 0) __PYX_ERR(0, 2316, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_time_steps, __pyx_t_7) < 0) __PYX_ERR(0, 2342, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "adios.pyx":2321
+  /* "adios.pyx":2347
  *             'attrs': tuple([ k for k in f.attrs.iterkeys() ]),
  *             'time_steps': (f.current_step, f.last_step),
  *             'file_size': f.file_size}             # <<<<<<<<<<<<<<
  */
-  __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_f->file_size); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2321, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_f->file_size); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2347, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_file_size, __pyx_t_7) < 0) __PYX_ERR(0, 2316, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_file_size, __pyx_t_7) < 0) __PYX_ERR(0, 2342, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "adios.pyx":2306
+  /* "adios.pyx":2332
  *     return v.read(from_steps=0, nsteps=v.nsteps)
  * 
  * def bpls(fname):             # <<<<<<<<<<<<<<
@@ -36474,7 +38165,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  * 
  *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
  */
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__71, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 218, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__72, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 218, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -36530,7 +38221,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  * 
  *             info.buf = PyArray_DATA(self)
  */
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__72, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 222, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__73, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 222, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -36839,7 +38530,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  *                 if   t == NPY_BYTE:        f = "b"
  *                 elif t == NPY_UBYTE:       f = "B"
  */
-      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__73, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 259, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__74, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 259, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_Raise(__pyx_t_3, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -37565,7 +39256,7 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
   __pyx_t_1 = __pyx_v_descr->names; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
   for (;;) {
     if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(1, 794, __pyx_L1_error)
     #else
     __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 794, __pyx_L1_error)
@@ -37600,7 +39291,7 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
  */
     if (likely(__pyx_v_fields != Py_None)) {
       PyObject* sequence = __pyx_v_fields;
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if !CYTHON_COMPILING_IN_PYPY
       Py_ssize_t size = Py_SIZE(sequence);
       #else
       Py_ssize_t size = PySequence_Size(sequence);
@@ -37610,7 +39301,7 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
         __PYX_ERR(1, 796, __pyx_L1_error)
       }
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
       __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
       __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
       __Pyx_INCREF(__pyx_t_3);
@@ -37654,7 +39345,7 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
  * 
  *         if ((child.byteorder == c'>' and little_endian) or
  */
-      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__74, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 799, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__75, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 799, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_Raise(__pyx_t_3, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -37722,7 +39413,7 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
  *             # One could encode it in the format string and have Cython
  *             # complain instead, BUT: < and > in format strings also imply
  */
-      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__75, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 803, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__76, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 803, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_Raise(__pyx_t_3, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -37831,7 +39522,7 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
  * 
  *             # Until ticket #99 is fixed, use integers to avoid warnings
  */
-        __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__76, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 823, __pyx_L1_error)
+        __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__77, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 823, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_4);
         __Pyx_Raise(__pyx_t_4, 0, 0, 0);
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -38404,6 +40095,8 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__py
  *         return None
  *     else:
  *         return <object>arr.base             # <<<<<<<<<<<<<<
+ * 
+ * 
  */
   /*else*/ {
     __Pyx_XDECREF(__pyx_r);
@@ -38427,6 +40120,396 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__py
   return __pyx_r;
 }
 
+/* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":985
+ * # Versions of the import_* functions which are more suitable for
+ * # Cython code.
+ * cdef inline int import_array() except -1:             # <<<<<<<<<<<<<<
+ *     try:
+ *         _import_array()
+ */
+
+static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_t_4;
+  PyObject *__pyx_t_5 = NULL;
+  PyObject *__pyx_t_6 = NULL;
+  PyObject *__pyx_t_7 = NULL;
+  PyObject *__pyx_t_8 = NULL;
+  __Pyx_RefNannySetupContext("import_array", 0);
+
+  /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":986
+ * # Cython code.
+ * cdef inline int import_array() except -1:
+ *     try:             # <<<<<<<<<<<<<<
+ *         _import_array()
+ *     except Exception:
+ */
+  {
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
+    __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3);
+    __Pyx_XGOTREF(__pyx_t_1);
+    __Pyx_XGOTREF(__pyx_t_2);
+    __Pyx_XGOTREF(__pyx_t_3);
+    /*try:*/ {
+
+      /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":987
+ * cdef inline int import_array() except -1:
+ *     try:
+ *         _import_array()             # <<<<<<<<<<<<<<
+ *     except Exception:
+ *         raise ImportError("numpy.core.multiarray failed to import")
+ */
+      __pyx_t_4 = _import_array(); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(1, 987, __pyx_L3_error)
+
+      /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":986
+ * # Cython code.
+ * cdef inline int import_array() except -1:
+ *     try:             # <<<<<<<<<<<<<<
+ *         _import_array()
+ *     except Exception:
+ */
+    }
+    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+    goto __pyx_L10_try_end;
+    __pyx_L3_error:;
+    __Pyx_PyThreadState_assign
+
+    /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":988
+ *     try:
+ *         _import_array()
+ *     except Exception:             # <<<<<<<<<<<<<<
+ *         raise ImportError("numpy.core.multiarray failed to import")
+ * 
+ */
+    __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
+    if (__pyx_t_4) {
+      __Pyx_AddTraceback("numpy.import_array", __pyx_clineno, __pyx_lineno, __pyx_filename);
+      if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(1, 988, __pyx_L5_except_error)
+      __Pyx_GOTREF(__pyx_t_5);
+      __Pyx_GOTREF(__pyx_t_6);
+      __Pyx_GOTREF(__pyx_t_7);
+
+      /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":989
+ *         _import_array()
+ *     except Exception:
+ *         raise ImportError("numpy.core.multiarray failed to import")             # <<<<<<<<<<<<<<
+ * 
+ * cdef inline int import_umath() except -1:
+ */
+      __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__78, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 989, __pyx_L5_except_error)
+      __Pyx_GOTREF(__pyx_t_8);
+      __Pyx_Raise(__pyx_t_8, 0, 0, 0);
+      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+      __PYX_ERR(1, 989, __pyx_L5_except_error)
+    }
+    goto __pyx_L5_except_error;
+    __pyx_L5_except_error:;
+
+    /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":986
+ * # Cython code.
+ * cdef inline int import_array() except -1:
+ *     try:             # <<<<<<<<<<<<<<
+ *         _import_array()
+ *     except Exception:
+ */
+    __Pyx_PyThreadState_assign
+    __Pyx_XGIVEREF(__pyx_t_1);
+    __Pyx_XGIVEREF(__pyx_t_2);
+    __Pyx_XGIVEREF(__pyx_t_3);
+    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
+    goto __pyx_L1_error;
+    __pyx_L10_try_end:;
+  }
+
+  /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":985
+ * # Versions of the import_* functions which are more suitable for
+ * # Cython code.
+ * cdef inline int import_array() except -1:             # <<<<<<<<<<<<<<
+ *     try:
+ *         _import_array()
+ */
+
+  /* function exit code */
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_XDECREF(__pyx_t_6);
+  __Pyx_XDECREF(__pyx_t_7);
+  __Pyx_XDECREF(__pyx_t_8);
+  __Pyx_AddTraceback("numpy.import_array", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":991
+ *         raise ImportError("numpy.core.multiarray failed to import")
+ * 
+ * cdef inline int import_umath() except -1:             # <<<<<<<<<<<<<<
+ *     try:
+ *         _import_umath()
+ */
+
+static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_t_4;
+  PyObject *__pyx_t_5 = NULL;
+  PyObject *__pyx_t_6 = NULL;
+  PyObject *__pyx_t_7 = NULL;
+  PyObject *__pyx_t_8 = NULL;
+  __Pyx_RefNannySetupContext("import_umath", 0);
+
+  /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":992
+ * 
+ * cdef inline int import_umath() except -1:
+ *     try:             # <<<<<<<<<<<<<<
+ *         _import_umath()
+ *     except Exception:
+ */
+  {
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
+    __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3);
+    __Pyx_XGOTREF(__pyx_t_1);
+    __Pyx_XGOTREF(__pyx_t_2);
+    __Pyx_XGOTREF(__pyx_t_3);
+    /*try:*/ {
+
+      /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":993
+ * cdef inline int import_umath() except -1:
+ *     try:
+ *         _import_umath()             # <<<<<<<<<<<<<<
+ *     except Exception:
+ *         raise ImportError("numpy.core.umath failed to import")
+ */
+      __pyx_t_4 = _import_umath(); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(1, 993, __pyx_L3_error)
+
+      /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":992
+ * 
+ * cdef inline int import_umath() except -1:
+ *     try:             # <<<<<<<<<<<<<<
+ *         _import_umath()
+ *     except Exception:
+ */
+    }
+    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+    goto __pyx_L10_try_end;
+    __pyx_L3_error:;
+    __Pyx_PyThreadState_assign
+
+    /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":994
+ *     try:
+ *         _import_umath()
+ *     except Exception:             # <<<<<<<<<<<<<<
+ *         raise ImportError("numpy.core.umath failed to import")
+ * 
+ */
+    __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
+    if (__pyx_t_4) {
+      __Pyx_AddTraceback("numpy.import_umath", __pyx_clineno, __pyx_lineno, __pyx_filename);
+      if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(1, 994, __pyx_L5_except_error)
+      __Pyx_GOTREF(__pyx_t_5);
+      __Pyx_GOTREF(__pyx_t_6);
+      __Pyx_GOTREF(__pyx_t_7);
+
+      /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":995
+ *         _import_umath()
+ *     except Exception:
+ *         raise ImportError("numpy.core.umath failed to import")             # <<<<<<<<<<<<<<
+ * 
+ * cdef inline int import_ufunc() except -1:
+ */
+      __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__79, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 995, __pyx_L5_except_error)
+      __Pyx_GOTREF(__pyx_t_8);
+      __Pyx_Raise(__pyx_t_8, 0, 0, 0);
+      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+      __PYX_ERR(1, 995, __pyx_L5_except_error)
+    }
+    goto __pyx_L5_except_error;
+    __pyx_L5_except_error:;
+
+    /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":992
+ * 
+ * cdef inline int import_umath() except -1:
+ *     try:             # <<<<<<<<<<<<<<
+ *         _import_umath()
+ *     except Exception:
+ */
+    __Pyx_PyThreadState_assign
+    __Pyx_XGIVEREF(__pyx_t_1);
+    __Pyx_XGIVEREF(__pyx_t_2);
+    __Pyx_XGIVEREF(__pyx_t_3);
+    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
+    goto __pyx_L1_error;
+    __pyx_L10_try_end:;
+  }
+
+  /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":991
+ *         raise ImportError("numpy.core.multiarray failed to import")
+ * 
+ * cdef inline int import_umath() except -1:             # <<<<<<<<<<<<<<
+ *     try:
+ *         _import_umath()
+ */
+
+  /* function exit code */
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_XDECREF(__pyx_t_6);
+  __Pyx_XDECREF(__pyx_t_7);
+  __Pyx_XDECREF(__pyx_t_8);
+  __Pyx_AddTraceback("numpy.import_umath", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":997
+ *         raise ImportError("numpy.core.umath failed to import")
+ * 
+ * cdef inline int import_ufunc() except -1:             # <<<<<<<<<<<<<<
+ *     try:
+ *         _import_umath()
+ */
+
+static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_t_4;
+  PyObject *__pyx_t_5 = NULL;
+  PyObject *__pyx_t_6 = NULL;
+  PyObject *__pyx_t_7 = NULL;
+  PyObject *__pyx_t_8 = NULL;
+  __Pyx_RefNannySetupContext("import_ufunc", 0);
+
+  /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":998
+ * 
+ * cdef inline int import_ufunc() except -1:
+ *     try:             # <<<<<<<<<<<<<<
+ *         _import_umath()
+ *     except Exception:
+ */
+  {
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
+    __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3);
+    __Pyx_XGOTREF(__pyx_t_1);
+    __Pyx_XGOTREF(__pyx_t_2);
+    __Pyx_XGOTREF(__pyx_t_3);
+    /*try:*/ {
+
+      /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":999
+ * cdef inline int import_ufunc() except -1:
+ *     try:
+ *         _import_umath()             # <<<<<<<<<<<<<<
+ *     except Exception:
+ *         raise ImportError("numpy.core.umath failed to import")
+ */
+      __pyx_t_4 = _import_umath(); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(1, 999, __pyx_L3_error)
+
+      /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":998
+ * 
+ * cdef inline int import_ufunc() except -1:
+ *     try:             # <<<<<<<<<<<<<<
+ *         _import_umath()
+ *     except Exception:
+ */
+    }
+    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+    goto __pyx_L10_try_end;
+    __pyx_L3_error:;
+    __Pyx_PyThreadState_assign
+
+    /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":1000
+ *     try:
+ *         _import_umath()
+ *     except Exception:             # <<<<<<<<<<<<<<
+ *         raise ImportError("numpy.core.umath failed to import")
+ */
+    __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
+    if (__pyx_t_4) {
+      __Pyx_AddTraceback("numpy.import_ufunc", __pyx_clineno, __pyx_lineno, __pyx_filename);
+      if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(1, 1000, __pyx_L5_except_error)
+      __Pyx_GOTREF(__pyx_t_5);
+      __Pyx_GOTREF(__pyx_t_6);
+      __Pyx_GOTREF(__pyx_t_7);
+
+      /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":1001
+ *         _import_umath()
+ *     except Exception:
+ *         raise ImportError("numpy.core.umath failed to import")             # <<<<<<<<<<<<<<
+ */
+      __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__80, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 1001, __pyx_L5_except_error)
+      __Pyx_GOTREF(__pyx_t_8);
+      __Pyx_Raise(__pyx_t_8, 0, 0, 0);
+      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+      __PYX_ERR(1, 1001, __pyx_L5_except_error)
+    }
+    goto __pyx_L5_except_error;
+    __pyx_L5_except_error:;
+
+    /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":998
+ * 
+ * cdef inline int import_ufunc() except -1:
+ *     try:             # <<<<<<<<<<<<<<
+ *         _import_umath()
+ *     except Exception:
+ */
+    __Pyx_PyThreadState_assign
+    __Pyx_XGIVEREF(__pyx_t_1);
+    __Pyx_XGIVEREF(__pyx_t_2);
+    __Pyx_XGIVEREF(__pyx_t_3);
+    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
+    goto __pyx_L1_error;
+    __pyx_L10_try_end:;
+  }
+
+  /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":997
+ *         raise ImportError("numpy.core.umath failed to import")
+ * 
+ * cdef inline int import_ufunc() except -1:             # <<<<<<<<<<<<<<
+ *     try:
+ *         _import_umath()
+ */
+
+  /* function exit code */
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_XDECREF(__pyx_t_6);
+  __Pyx_XDECREF(__pyx_t_7);
+  __Pyx_XDECREF(__pyx_t_8);
+  __Pyx_AddTraceback("numpy.import_ufunc", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
 static PyObject *__pyx_tp_new_5adios_softdict(PyTypeObject *t, PyObject *a, PyObject *k) {
   PyObject *o = (&PyDict_Type)->tp_new(t, a, k);
   if (unlikely(!o)) return 0;
@@ -39929,7 +42012,7 @@ static PyTypeObject __pyx_type_5adios_writer = {
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  "writer(str fname, bool is_noxml=True, str mode='w', MPI_Comm comm=MPI_COMM_WORLD)\n\n    writer class for Adios write.\n\n    Args:\n        fname (str): filename.\n        is_noxml (bool, optional): Set True if use noxml APIs (default: True).\n        comm (MPI_Comm, optional): MPI_comm for parallel read/write (default: MPI_COMM_WORLD).\n\n    Example:\n\n    >>> import adios as ad\n    >>> f = ad.writer('adiosfile.bp')\n\n    ", /*tp_doc*/
+  "writer(str fname, bool is_noxml=True, str mode='w', int stats=adios_stat_default, MPI_Comm comm=MPI_COMM_WORLD, str method='POSIX1', str method_params='')\n\n    writer class for Adios write.\n\n    Args:\n        fname (str): filename.\n        is_noxml (bool, optional): Set True if use noxml APIs (default: True).\n        comm (MPI_Comm, optional): MPI_comm for parallel read/write (default: MPI_COMM_WORLD).\n\n    Example:\n\n    >>> import adios as ad\n    >>> f = ad.writer('adiosf [...]
   __pyx_tp_traverse_5adios_writer, /*tp_traverse*/
   __pyx_tp_clear_5adios_writer, /*tp_clear*/
   0, /*tp_richcompare*/
@@ -40418,6 +42501,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_kp_s_Count_dimension_mismatch_count_d, __pyx_k_Count_dimension_mismatch_count_d, sizeof(__pyx_k_Count_dimension_mismatch_count_d), 0, 0, 1, 0},
   {&__pyx_n_s_DATASPACES, __pyx_k_DATASPACES, sizeof(__pyx_k_DATASPACES), 0, 0, 1, 1},
   {&__pyx_n_s_DATATYPE, __pyx_k_DATATYPE, sizeof(__pyx_k_DATATYPE), 0, 0, 1, 1},
+  {&__pyx_n_s_DEFAULT, __pyx_k_DEFAULT, sizeof(__pyx_k_DEFAULT), 0, 0, 1, 1},
   {&__pyx_n_s_DIMES, __pyx_k_DIMES, sizeof(__pyx_k_DIMES), 0, 0, 1, 1},
   {&__pyx_kp_s_Data_type_is_not_supported_yet, __pyx_k_Data_type_is_not_supported_yet, sizeof(__pyx_k_Data_type_is_not_supported_yet), 0, 0, 1, 0},
   {&__pyx_kp_u_Define_a_group_associated_with, __pyx_k_Define_a_group_associated_with, sizeof(__pyx_k_Define_a_group_associated_with), 0, 1, 0, 0},
@@ -40425,18 +42509,22 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_Ellipsis, __pyx_k_Ellipsis, sizeof(__pyx_k_Ellipsis), 0, 0, 1, 1},
   {&__pyx_n_s_FLAG, __pyx_k_FLAG, sizeof(__pyx_k_FLAG), 0, 0, 1, 1},
   {&__pyx_n_s_FLEXPATH, __pyx_k_FLEXPATH, sizeof(__pyx_k_FLEXPATH), 0, 0, 1, 1},
+  {&__pyx_n_s_FULL, __pyx_k_FULL, sizeof(__pyx_k_FULL), 0, 0, 1, 1},
   {&__pyx_n_s_FancySelection, __pyx_k_FancySelection, sizeof(__pyx_k_FancySelection), 0, 0, 1, 1},
   {&__pyx_n_s_File, __pyx_k_File, sizeof(__pyx_k_File), 0, 0, 1, 1},
   {&__pyx_kp_u_Format_string_allocated_too_shor, __pyx_k_Format_string_allocated_too_shor, sizeof(__pyx_k_Format_string_allocated_too_shor), 0, 1, 0, 0},
   {&__pyx_kp_u_Format_string_allocated_too_shor_2, __pyx_k_Format_string_allocated_too_shor_2, sizeof(__pyx_k_Format_string_allocated_too_shor_2), 0, 1, 0, 0},
   {&__pyx_n_s_ICEE, __pyx_k_ICEE, sizeof(__pyx_k_ICEE), 0, 0, 1, 1},
+  {&__pyx_n_s_ImportError, __pyx_k_ImportError, sizeof(__pyx_k_ImportError), 0, 0, 1, 1},
   {&__pyx_n_s_IndexError, __pyx_k_IndexError, sizeof(__pyx_k_IndexError), 0, 0, 1, 1},
   {&__pyx_n_s_KeyError, __pyx_k_KeyError, sizeof(__pyx_k_KeyError), 0, 0, 1, 1},
   {&__pyx_n_s_LATER, __pyx_k_LATER, sizeof(__pyx_k_LATER), 0, 0, 1, 1},
   {&__pyx_n_s_LOCKMODE, __pyx_k_LOCKMODE, sizeof(__pyx_k_LOCKMODE), 0, 0, 1, 1},
+  {&__pyx_n_s_MINMAX, __pyx_k_MINMAX, sizeof(__pyx_k_MINMAX), 0, 0, 1, 1},
   {&__pyx_n_s_NO, __pyx_k_NO, sizeof(__pyx_k_NO), 0, 0, 1, 1},
   {&__pyx_n_s_NONE, __pyx_k_NONE, sizeof(__pyx_k_NONE), 0, 0, 1, 1},
   {&__pyx_n_s_NOW, __pyx_k_NOW, sizeof(__pyx_k_NOW), 0, 0, 1, 1},
+  {&__pyx_n_s_NamedTemporaryFile, __pyx_k_NamedTemporaryFile, sizeof(__pyx_k_NamedTemporaryFile), 0, 0, 1, 1},
   {&__pyx_kp_u_Non_native_byte_order_not_suppor, __pyx_k_Non_native_byte_order_not_suppor, sizeof(__pyx_k_Non_native_byte_order_not_suppor), 0, 1, 0, 0},
   {&__pyx_n_s_NotImplementedError, __pyx_k_NotImplementedError, sizeof(__pyx_k_NotImplementedError), 0, 0, 1, 1},
   {&__pyx_kp_s_Not_a_valid_var, __pyx_k_Not_a_valid_var, sizeof(__pyx_k_Not_a_valid_var), 0, 0, 1, 0},
@@ -40454,6 +42542,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_kp_s_Requested_is_larger_than_the_sha, __pyx_k_Requested_is_larger_than_the_sha, sizeof(__pyx_k_Requested_is_larger_than_the_sha), 0, 0, 1, 0},
   {&__pyx_n_s_RuntimeError, __pyx_k_RuntimeError, sizeof(__pyx_k_RuntimeError), 0, 0, 1, 1},
   {&__pyx_n_s_S, __pyx_k_S, sizeof(__pyx_k_S), 0, 0, 1, 1},
+  {&__pyx_n_s_STATISTICS, __pyx_k_STATISTICS, sizeof(__pyx_k_STATISTICS), 0, 0, 1, 1},
   {&__pyx_kp_s_Scalar_dimension_mismatch_scalar, __pyx_k_Scalar_dimension_mismatch_scalar, sizeof(__pyx_k_Scalar_dimension_mismatch_scalar), 0, 0, 1, 0},
   {&__pyx_n_s_SimpleSelection, __pyx_k_SimpleSelection, sizeof(__pyx_k_SimpleSelection), 0, 0, 1, 1},
   {&__pyx_kp_s_Step_index_is_out_of_range_from, __pyx_k_Step_index_is_out_of_range_from, sizeof(__pyx_k_Step_index_is_out_of_range_from), 0, 0, 1, 0},
@@ -40469,11 +42558,12 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_Varinfo, __pyx_k_Varinfo, sizeof(__pyx_k_Varinfo), 0, 0, 1, 1},
   {&__pyx_kp_s_WARN_Invalid_read_method_name, __pyx_k_WARN_Invalid_read_method_name, sizeof(__pyx_k_WARN_Invalid_read_method_name), 0, 0, 1, 0},
   {&__pyx_kp_s_Warning_No_support_yet_s_type_d, __pyx_k_Warning_No_support_yet_s_type_d, sizeof(__pyx_k_Warning_No_support_yet_s_type_d), 0, 0, 1, 0},
+  {&__pyx_kp_s_Warning_skipping_defining_var_r, __pyx_k_Warning_skipping_defining_var_r, sizeof(__pyx_k_Warning_skipping_defining_var_r), 0, 0, 1, 0},
   {&__pyx_n_s_Writer, __pyx_k_Writer, sizeof(__pyx_k_Writer), 0, 0, 1, 1},
   {&__pyx_n_s_YES, __pyx_k_YES, sizeof(__pyx_k_YES), 0, 0, 1, 1},
   {&__pyx_kp_s__10, __pyx_k__10, sizeof(__pyx_k__10), 0, 0, 1, 0},
-  {&__pyx_kp_s__63, __pyx_k__63, sizeof(__pyx_k__63), 0, 0, 1, 0},
-  {&__pyx_kp_s__65, __pyx_k__65, sizeof(__pyx_k__65), 0, 0, 1, 0},
+  {&__pyx_kp_s__64, __pyx_k__64, sizeof(__pyx_k__64), 0, 0, 1, 0},
+  {&__pyx_kp_s__66, __pyx_k__66, sizeof(__pyx_k__66), 0, 0, 1, 0},
   {&__pyx_n_s_adios, __pyx_k_adios, sizeof(__pyx_k_adios), 0, 0, 1, 1},
   {&__pyx_n_s_advance, __pyx_k_advance, sizeof(__pyx_k_advance), 0, 0, 1, 1},
   {&__pyx_n_s_all, __pyx_k_all, sizeof(__pyx_k_all), 0, 0, 1, 1},
@@ -40600,6 +42690,8 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_nspace, __pyx_k_nspace, sizeof(__pyx_k_nspace), 0, 0, 1, 1},
   {&__pyx_n_s_nsteps, __pyx_k_nsteps, sizeof(__pyx_k_nsteps), 0, 0, 1, 1},
   {&__pyx_n_s_numpy, __pyx_k_numpy, sizeof(__pyx_k_numpy), 0, 0, 1, 1},
+  {&__pyx_kp_s_numpy_core_multiarray_failed_to, __pyx_k_numpy_core_multiarray_failed_to, sizeof(__pyx_k_numpy_core_multiarray_failed_to), 0, 0, 1, 0},
+  {&__pyx_kp_s_numpy_core_umath_failed_to_impor, __pyx_k_numpy_core_umath_failed_to_impor, sizeof(__pyx_k_numpy_core_umath_failed_to_impor), 0, 0, 1, 0},
   {&__pyx_n_s_nvars, __pyx_k_nvars, sizeof(__pyx_k_nvars), 0, 0, 1, 1},
   {&__pyx_n_s_offset, __pyx_k_offset, sizeof(__pyx_k_offset), 0, 0, 1, 1},
   {&__pyx_n_s_order, __pyx_k_order, sizeof(__pyx_k_order), 0, 0, 1, 1},
@@ -40651,6 +42743,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_strlen, __pyx_k_strlen, sizeof(__pyx_k_strlen), 0, 0, 1, 1},
   {&__pyx_n_s_syncgroupid, __pyx_k_syncgroupid, sizeof(__pyx_k_syncgroupid), 0, 0, 1, 1},
   {&__pyx_n_s_t, __pyx_k_t, sizeof(__pyx_k_t), 0, 0, 1, 1},
+  {&__pyx_n_s_tempfile, __pyx_k_tempfile, sizeof(__pyx_k_tempfile), 0, 0, 1, 1},
   {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1},
   {&__pyx_n_s_time_index, __pyx_k_time_index, sizeof(__pyx_k_time_index), 0, 0, 1, 1},
   {&__pyx_n_s_time_steps, __pyx_k_time_steps, sizeof(__pyx_k_time_steps), 0, 0, 1, 1},
@@ -40681,7 +42774,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_var, __pyx_k_var, sizeof(__pyx_k_var), 0, 0, 1, 1},
   {&__pyx_n_s_var_id, __pyx_k_var_id, sizeof(__pyx_k_var_id), 0, 0, 1, 1},
   {&__pyx_n_s_var_namelist, __pyx_k_var_namelist, sizeof(__pyx_k_var_namelist), 0, 0, 1, 1},
-  {&__pyx_kp_u_var_read_line_1457, __pyx_k_var_read_line_1457, sizeof(__pyx_k_var_read_line_1457), 0, 1, 0, 0},
+  {&__pyx_kp_u_var_read_line_1465, __pyx_k_var_read_line_1465, sizeof(__pyx_k_var_read_line_1465), 0, 1, 0, 0},
   {&__pyx_n_s_varid, __pyx_k_varid, sizeof(__pyx_k_varid), 0, 0, 1, 1},
   {&__pyx_n_s_varname, __pyx_k_varname, sizeof(__pyx_k_varname), 0, 0, 1, 1},
   {&__pyx_n_s_vars, __pyx_k_vars, sizeof(__pyx_k_vars), 0, 0, 1, 1},
@@ -40690,31 +42783,32 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_w, __pyx_k_w, sizeof(__pyx_k_w), 0, 0, 1, 1},
   {&__pyx_n_s_when, __pyx_k_when, sizeof(__pyx_k_when), 0, 0, 1, 1},
   {&__pyx_n_s_write, __pyx_k_write, sizeof(__pyx_k_write), 0, 0, 1, 1},
-  {&__pyx_kp_u_writer_declare_group_line_1983, __pyx_k_writer_declare_group_line_1983, sizeof(__pyx_k_writer_declare_group_line_1983), 0, 1, 0, 0},
-  {&__pyx_kp_u_writer_define_var_line_2020, __pyx_k_writer_define_var_line_2020, sizeof(__pyx_k_writer_define_var_line_2020), 0, 1, 0, 0},
+  {&__pyx_kp_u_writer_declare_group_line_1996, __pyx_k_writer_declare_group_line_1996, sizeof(__pyx_k_writer_declare_group_line_1996), 0, 1, 0, 0},
+  {&__pyx_kp_u_writer_define_var_line_2041, __pyx_k_writer_define_var_line_2041, sizeof(__pyx_k_writer_define_var_line_2041), 0, 1, 0, 0},
   {&__pyx_n_s_xrange, __pyx_k_xrange, sizeof(__pyx_k_xrange), 0, 0, 1, 1},
   {&__pyx_n_s_zeros, __pyx_k_zeros, sizeof(__pyx_k_zeros), 0, 0, 1, 1},
   {&__pyx_n_s_zip, __pyx_k_zip, sizeof(__pyx_k_zip), 0, 0, 1, 1},
   {0, 0, 0, 0, 0, 0, 0}
 };
 static int __Pyx_InitCachedBuiltins(void) {
-  __pyx_builtin_print = __Pyx_GetBuiltinName(__pyx_n_s_print); if (!__pyx_builtin_print) __PYX_ERR(0, 35, __pyx_L1_error)
+  __pyx_builtin_print = __Pyx_GetBuiltinName(__pyx_n_s_print); if (!__pyx_builtin_print) __PYX_ERR(0, 37, __pyx_L1_error)
   #if PY_MAJOR_VERSION >= 3
-  __pyx_builtin_xrange = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_xrange) __PYX_ERR(0, 71, __pyx_L1_error)
+  __pyx_builtin_xrange = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_xrange) __PYX_ERR(0, 73, __pyx_L1_error)
   #else
-  __pyx_builtin_xrange = __Pyx_GetBuiltinName(__pyx_n_s_xrange); if (!__pyx_builtin_xrange) __PYX_ERR(0, 71, __pyx_L1_error)
+  __pyx_builtin_xrange = __Pyx_GetBuiltinName(__pyx_n_s_xrange); if (!__pyx_builtin_xrange) __PYX_ERR(0, 73, __pyx_L1_error)
   #endif
-  __pyx_builtin_Ellipsis = __Pyx_GetBuiltinName(__pyx_n_s_Ellipsis); if (!__pyx_builtin_Ellipsis) __PYX_ERR(0, 442, __pyx_L1_error)
-  __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(0, 786, __pyx_L1_error)
-  __pyx_builtin_KeyError = __Pyx_GetBuiltinName(__pyx_n_s_KeyError); if (!__pyx_builtin_KeyError) __PYX_ERR(0, 896, __pyx_L1_error)
-  __pyx_builtin_TypeError = __Pyx_GetBuiltinName(__pyx_n_s_TypeError); if (!__pyx_builtin_TypeError) __PYX_ERR(0, 900, __pyx_L1_error)
-  __pyx_builtin_IndexError = __Pyx_GetBuiltinName(__pyx_n_s_IndexError); if (!__pyx_builtin_IndexError) __PYX_ERR(0, 1385, __pyx_L1_error)
-  __pyx_builtin_all = __Pyx_GetBuiltinName(__pyx_n_s_all); if (!__pyx_builtin_all) __PYX_ERR(0, 1392, __pyx_L1_error)
-  __pyx_builtin_zip = __Pyx_GetBuiltinName(__pyx_n_s_zip); if (!__pyx_builtin_zip) __PYX_ERR(0, 1549, __pyx_L1_error)
-  __pyx_builtin_enumerate = __Pyx_GetBuiltinName(__pyx_n_s_enumerate); if (!__pyx_builtin_enumerate) __PYX_ERR(0, 1640, __pyx_L1_error)
-  __pyx_builtin_NotImplementedError = __Pyx_GetBuiltinName(__pyx_n_s_NotImplementedError); if (!__pyx_builtin_NotImplementedError) __PYX_ERR(0, 1662, __pyx_L1_error)
+  __pyx_builtin_Ellipsis = __Pyx_GetBuiltinName(__pyx_n_s_Ellipsis); if (!__pyx_builtin_Ellipsis) __PYX_ERR(0, 450, __pyx_L1_error)
+  __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(0, 794, __pyx_L1_error)
+  __pyx_builtin_KeyError = __Pyx_GetBuiltinName(__pyx_n_s_KeyError); if (!__pyx_builtin_KeyError) __PYX_ERR(0, 904, __pyx_L1_error)
+  __pyx_builtin_TypeError = __Pyx_GetBuiltinName(__pyx_n_s_TypeError); if (!__pyx_builtin_TypeError) __PYX_ERR(0, 908, __pyx_L1_error)
+  __pyx_builtin_IndexError = __Pyx_GetBuiltinName(__pyx_n_s_IndexError); if (!__pyx_builtin_IndexError) __PYX_ERR(0, 1393, __pyx_L1_error)
+  __pyx_builtin_all = __Pyx_GetBuiltinName(__pyx_n_s_all); if (!__pyx_builtin_all) __PYX_ERR(0, 1400, __pyx_L1_error)
+  __pyx_builtin_zip = __Pyx_GetBuiltinName(__pyx_n_s_zip); if (!__pyx_builtin_zip) __PYX_ERR(0, 1557, __pyx_L1_error)
+  __pyx_builtin_enumerate = __Pyx_GetBuiltinName(__pyx_n_s_enumerate); if (!__pyx_builtin_enumerate) __PYX_ERR(0, 1648, __pyx_L1_error)
+  __pyx_builtin_NotImplementedError = __Pyx_GetBuiltinName(__pyx_n_s_NotImplementedError); if (!__pyx_builtin_NotImplementedError) __PYX_ERR(0, 1670, __pyx_L1_error)
   __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s_ValueError); if (!__pyx_builtin_ValueError) __PYX_ERR(1, 218, __pyx_L1_error)
   __pyx_builtin_RuntimeError = __Pyx_GetBuiltinName(__pyx_n_s_RuntimeError); if (!__pyx_builtin_RuntimeError) __PYX_ERR(1, 799, __pyx_L1_error)
+  __pyx_builtin_ImportError = __Pyx_GetBuiltinName(__pyx_n_s_ImportError); if (!__pyx_builtin_ImportError) __PYX_ERR(1, 989, __pyx_L1_error)
   return 0;
   __pyx_L1_error:;
   return -1;
@@ -40724,519 +42818,508 @@ static int __Pyx_InitCachedConstants(void) {
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0);
 
-  /* "adios.pyx":63
+  /* "adios.pyx":65
  *     l = list()
  *     for key in keys:
  *         if key.startswith('/'):             # <<<<<<<<<<<<<<
  *             key = key[1:]
  *         if '/' not in key:
  */
-  __pyx_tuple__2 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__2)) __PYX_ERR(0, 63, __pyx_L1_error)
+  __pyx_tuple__2 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__2)) __PYX_ERR(0, 65, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__2);
   __Pyx_GIVEREF(__pyx_tuple__2);
 
-  /* "adios.pyx":64
+  /* "adios.pyx":66
  *     for key in keys:
  *         if key.startswith('/'):
  *             key = key[1:]             # <<<<<<<<<<<<<<
  *         if '/' not in key:
  *             l.append(key)
  */
-  __pyx_slice__3 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__3)) __PYX_ERR(0, 64, __pyx_L1_error)
+  __pyx_slice__3 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__3)) __PYX_ERR(0, 66, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_slice__3);
   __Pyx_GIVEREF(__pyx_slice__3);
 
-  /* "adios.pyx":443
+  /* "adios.pyx":451
  *     for slice_ in index:
  *         if slice_ is Ellipsis:
  *             fixed.extend([slice(None)] * (ndim-length-len(fixed)+1))             # <<<<<<<<<<<<<<
  *         elif isinstance(slice_, (int, long)):
  *             fixed.append(slice(slice_, slice_+1, None))
  */
-  __pyx_slice__4 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_slice__4)) __PYX_ERR(0, 443, __pyx_L1_error)
+  __pyx_slice__4 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_slice__4)) __PYX_ERR(0, 451, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_slice__4);
   __Pyx_GIVEREF(__pyx_slice__4);
 
-  /* "adios.pyx":454
+  /* "adios.pyx":462
  *     index = tuple(fixed)
  *     if len(index) < ndim:
  *         index += (slice(None),) * (ndim-len(index))             # <<<<<<<<<<<<<<
  * 
  *     return index
  */
-  __pyx_slice__5 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_slice__5)) __PYX_ERR(0, 454, __pyx_L1_error)
+  __pyx_slice__5 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_slice__5)) __PYX_ERR(0, 462, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_slice__5);
   __Pyx_GIVEREF(__pyx_slice__5);
-  __pyx_tuple__6 = PyTuple_New(1); if (unlikely(!__pyx_tuple__6)) __PYX_ERR(0, 454, __pyx_L1_error)
+  __pyx_tuple__6 = PyTuple_New(1); if (unlikely(!__pyx_tuple__6)) __PYX_ERR(0, 462, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__6);
   __Pyx_INCREF(__pyx_slice__5);
   __Pyx_GIVEREF(__pyx_slice__5);
   PyTuple_SET_ITEM(__pyx_tuple__6, 0, __pyx_slice__5);
   __Pyx_GIVEREF(__pyx_tuple__6);
 
-  /* "adios.pyx":900
+  /* "adios.pyx":908
  *         for key_ in varname:
  *             if not isinstance(key_, str):
  *                 raise TypeError("Unhashable type")             # <<<<<<<<<<<<<<
  * 
  *             if key_.startswith('/'):
  */
-  __pyx_tuple__13 = PyTuple_Pack(1, __pyx_kp_s_Unhashable_type); if (unlikely(!__pyx_tuple__13)) __PYX_ERR(0, 900, __pyx_L1_error)
+  __pyx_tuple__13 = PyTuple_Pack(1, __pyx_kp_s_Unhashable_type); if (unlikely(!__pyx_tuple__13)) __PYX_ERR(0, 908, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__13);
   __Pyx_GIVEREF(__pyx_tuple__13);
 
-  /* "adios.pyx":902
+  /* "adios.pyx":910
  *                 raise TypeError("Unhashable type")
  * 
  *             if key_.startswith('/'):             # <<<<<<<<<<<<<<
  *                 key_ = key_[1:]
  * 
  */
-  __pyx_tuple__14 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__14)) __PYX_ERR(0, 902, __pyx_L1_error)
+  __pyx_tuple__14 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__14)) __PYX_ERR(0, 910, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__14);
   __Pyx_GIVEREF(__pyx_tuple__14);
 
-  /* "adios.pyx":903
+  /* "adios.pyx":911
  * 
  *             if key_.startswith('/'):
  *                 key_ = key_[1:]             # <<<<<<<<<<<<<<
  * 
  *             if key_ in dict.keys(self):
  */
-  __pyx_slice__15 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__15)) __PYX_ERR(0, 903, __pyx_L1_error)
+  __pyx_slice__15 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__15)) __PYX_ERR(0, 911, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_slice__15);
   __Pyx_GIVEREF(__pyx_slice__15);
 
-  /* "adios.pyx":1015
+  /* "adios.pyx":1023
  *         assert self.fp != NULL, 'Not an open file'
  * 
  *         self.name = fname.split('/')[-1]  ## basename             # <<<<<<<<<<<<<<
  *         self.nvars = self.fp.nvars
  *         self.nattrs = self.fp.nattrs
  */
-  __pyx_tuple__18 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__18)) __PYX_ERR(0, 1015, __pyx_L1_error)
+  __pyx_tuple__18 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__18)) __PYX_ERR(0, 1023, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__18);
   __Pyx_GIVEREF(__pyx_tuple__18);
 
-  /* "adios.pyx":1054
+  /* "adios.pyx":1062
  *         """ Print native ADIOS_FILE structure. """
  *         assert self.fp != NULL, 'Not an open file'
  *         print ('=== AdiosFile ===')             # <<<<<<<<<<<<<<
  *         print ('%15s : %lu' % ('fp', <unsigned long> self.fp))
  *         printfile(self.fp)
  */
-  __pyx_tuple__19 = PyTuple_Pack(1, __pyx_kp_s_AdiosFile); if (unlikely(!__pyx_tuple__19)) __PYX_ERR(0, 1054, __pyx_L1_error)
+  __pyx_tuple__19 = PyTuple_Pack(1, __pyx_kp_s_AdiosFile); if (unlikely(!__pyx_tuple__19)) __PYX_ERR(0, 1062, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__19);
   __Pyx_GIVEREF(__pyx_tuple__19);
 
-  /* "adios.pyx":1102
+  /* "adios.pyx":1110
  *         for key_ in varname:
  *             if not isinstance(key_, str):
  *                 raise TypeError("Unhashable type")             # <<<<<<<<<<<<<<
  * 
  *             if key_.startswith('/'):
  */
-  __pyx_tuple__20 = PyTuple_Pack(1, __pyx_kp_s_Unhashable_type); if (unlikely(!__pyx_tuple__20)) __PYX_ERR(0, 1102, __pyx_L1_error)
+  __pyx_tuple__20 = PyTuple_Pack(1, __pyx_kp_s_Unhashable_type); if (unlikely(!__pyx_tuple__20)) __PYX_ERR(0, 1110, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__20);
   __Pyx_GIVEREF(__pyx_tuple__20);
 
-  /* "adios.pyx":1104
+  /* "adios.pyx":1112
  *                 raise TypeError("Unhashable type")
  * 
  *             if key_.startswith('/'):             # <<<<<<<<<<<<<<
  *                 key_ = key_[1:]
  * 
  */
-  __pyx_tuple__21 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__21)) __PYX_ERR(0, 1104, __pyx_L1_error)
+  __pyx_tuple__21 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__21)) __PYX_ERR(0, 1112, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__21);
   __Pyx_GIVEREF(__pyx_tuple__21);
 
-  /* "adios.pyx":1105
+  /* "adios.pyx":1113
  * 
  *             if key_.startswith('/'):
  *                 key_ = key_[1:]             # <<<<<<<<<<<<<<
  * 
  *             if key_ in self.vars.keys():
  */
-  __pyx_slice__22 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__22)) __PYX_ERR(0, 1105, __pyx_L1_error)
+  __pyx_slice__22 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__22)) __PYX_ERR(0, 1113, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_slice__22);
   __Pyx_GIVEREF(__pyx_slice__22);
 
-  /* "adios.pyx":1179
+  /* "adios.pyx":1187
  *         s = set()
  *         for k in self.vars.keys():
  *             if k.startswith('/'): k = k[1:]             # <<<<<<<<<<<<<<
  *             s.add(os.path.dirname(k).split('/')[0])
  *         for k in self.attrs.keys():
  */
-  __pyx_tuple__23 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__23)) __PYX_ERR(0, 1179, __pyx_L1_error)
+  __pyx_tuple__23 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__23)) __PYX_ERR(0, 1187, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__23);
   __Pyx_GIVEREF(__pyx_tuple__23);
-  __pyx_slice__24 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__24)) __PYX_ERR(0, 1179, __pyx_L1_error)
+  __pyx_slice__24 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__24)) __PYX_ERR(0, 1187, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_slice__24);
   __Pyx_GIVEREF(__pyx_slice__24);
 
-  /* "adios.pyx":1180
+  /* "adios.pyx":1188
  *         for k in self.vars.keys():
  *             if k.startswith('/'): k = k[1:]
  *             s.add(os.path.dirname(k).split('/')[0])             # <<<<<<<<<<<<<<
  *         for k in self.attrs.keys():
  *             if k.startswith('/'): k = k[1:]
  */
-  __pyx_tuple__25 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(0, 1180, __pyx_L1_error)
+  __pyx_tuple__25 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(0, 1188, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__25);
   __Pyx_GIVEREF(__pyx_tuple__25);
 
-  /* "adios.pyx":1182
+  /* "adios.pyx":1190
  *             s.add(os.path.dirname(k).split('/')[0])
  *         for k in self.attrs.keys():
  *             if k.startswith('/'): k = k[1:]             # <<<<<<<<<<<<<<
  *             s.add(os.path.dirname(k).split('/')[0])
  *         return list(s-set(['']))
  */
-  __pyx_tuple__26 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__26)) __PYX_ERR(0, 1182, __pyx_L1_error)
+  __pyx_tuple__26 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__26)) __PYX_ERR(0, 1190, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__26);
   __Pyx_GIVEREF(__pyx_tuple__26);
-  __pyx_slice__27 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__27)) __PYX_ERR(0, 1182, __pyx_L1_error)
+  __pyx_slice__27 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__27)) __PYX_ERR(0, 1190, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_slice__27);
   __Pyx_GIVEREF(__pyx_slice__27);
 
-  /* "adios.pyx":1183
+  /* "adios.pyx":1191
  *         for k in self.attrs.keys():
  *             if k.startswith('/'): k = k[1:]
  *             s.add(os.path.dirname(k).split('/')[0])             # <<<<<<<<<<<<<<
  *         return list(s-set(['']))
  * 
  */
-  __pyx_tuple__28 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__28)) __PYX_ERR(0, 1183, __pyx_L1_error)
+  __pyx_tuple__28 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__28)) __PYX_ERR(0, 1191, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__28);
   __Pyx_GIVEREF(__pyx_tuple__28);
 
-  /* "adios.pyx":1524
+  /* "adios.pyx":1532
  *         if len(offset) == 0:
  *             npoffset = npshape.copy()
  *             npoffset.fill(0)             # <<<<<<<<<<<<<<
  *         else:
  *             npoffset = np.array(offset, dtype=np.int64)
  */
-  __pyx_tuple__29 = PyTuple_Pack(1, __pyx_int_0); if (unlikely(!__pyx_tuple__29)) __PYX_ERR(0, 1524, __pyx_L1_error)
+  __pyx_tuple__29 = PyTuple_Pack(1, __pyx_int_0); if (unlikely(!__pyx_tuple__29)) __PYX_ERR(0, 1532, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__29);
   __Pyx_GIVEREF(__pyx_tuple__29);
 
-  /* "adios.pyx":1535
+  /* "adios.pyx":1543
  * 
  *         if len(scalar) == 0:
  *             scalar = tuple((False,) * len(npshape))             # <<<<<<<<<<<<<<
  * 
  *         if len(npshape) != len(npoffset):
  */
-  __pyx_tuple__30 = PyTuple_New(1); if (unlikely(!__pyx_tuple__30)) __PYX_ERR(0, 1535, __pyx_L1_error)
+  __pyx_tuple__30 = PyTuple_New(1); if (unlikely(!__pyx_tuple__30)) __PYX_ERR(0, 1543, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__30);
   __Pyx_INCREF(Py_False);
   __Pyx_GIVEREF(Py_False);
   PyTuple_SET_ITEM(__pyx_tuple__30, 0, Py_False);
   __Pyx_GIVEREF(__pyx_tuple__30);
 
-  /* "adios.pyx":1547
+  /* "adios.pyx":1555
  * 
  *         if (npshape < npcount + npoffset).any():
  *             raise IndexError('Requested is larger than the shape.')             # <<<<<<<<<<<<<<
  * 
  *         shape = [x for x, y in zip(npcount, scalar) if not y]
  */
-  __pyx_tuple__31 = PyTuple_Pack(1, __pyx_kp_s_Requested_is_larger_than_the_sha); if (unlikely(!__pyx_tuple__31)) __PYX_ERR(0, 1547, __pyx_L1_error)
+  __pyx_tuple__31 = PyTuple_Pack(1, __pyx_kp_s_Requested_is_larger_than_the_sha); if (unlikely(!__pyx_tuple__31)) __PYX_ERR(0, 1555, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__31);
   __Pyx_GIVEREF(__pyx_tuple__31);
 
-  /* "adios.pyx":1555
+  /* "adios.pyx":1563
  * 
  *         if len(shape) > 0:
  *             var[:] = fill             # <<<<<<<<<<<<<<
  * 
  *         cdef ADIOS_SELECTION * sel
  */
-  __pyx_slice__32 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_slice__32)) __PYX_ERR(0, 1555, __pyx_L1_error)
+  __pyx_slice__32 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_slice__32)) __PYX_ERR(0, 1563, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_slice__32);
   __Pyx_GIVEREF(__pyx_slice__32);
 
-  /* "adios.pyx":1575
+  /* "adios.pyx":1583
  *         """ Print native ADIOS_VARINFO structure. """
  *         assert self.vp != NULL, 'Not an open variable'
  *         print ('=== AdiosVariable ===')             # <<<<<<<<<<<<<<
  *         print ('%15s : %lu' % ('vp', <unsigned long> self.vp))
  *         print ('%15s : %lu' % ('fp', <unsigned long> self.file.fp))
  */
-  __pyx_tuple__33 = PyTuple_Pack(1, __pyx_kp_s_AdiosVariable); if (unlikely(!__pyx_tuple__33)) __PYX_ERR(0, 1575, __pyx_L1_error)
+  __pyx_tuple__33 = PyTuple_Pack(1, __pyx_kp_s_AdiosVariable); if (unlikely(!__pyx_tuple__33)) __PYX_ERR(0, 1583, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__33);
   __Pyx_GIVEREF(__pyx_tuple__33);
 
-  /* "adios.pyx":1599
+  /* "adios.pyx":1607
  *         for key_ in varname:
  *             if not isinstance(key_, str):
  *                 raise TypeError("Unhashable type")             # <<<<<<<<<<<<<<
  * 
  *             if key_.startswith('/'):
  */
-  __pyx_tuple__34 = PyTuple_Pack(1, __pyx_kp_s_Unhashable_type); if (unlikely(!__pyx_tuple__34)) __PYX_ERR(0, 1599, __pyx_L1_error)
+  __pyx_tuple__34 = PyTuple_Pack(1, __pyx_kp_s_Unhashable_type); if (unlikely(!__pyx_tuple__34)) __PYX_ERR(0, 1607, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__34);
   __Pyx_GIVEREF(__pyx_tuple__34);
 
-  /* "adios.pyx":1601
+  /* "adios.pyx":1609
  *                 raise TypeError("Unhashable type")
  * 
  *             if key_.startswith('/'):             # <<<<<<<<<<<<<<
  *                 key_ = key_[1:]
  * 
  */
-  __pyx_tuple__35 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__35)) __PYX_ERR(0, 1601, __pyx_L1_error)
+  __pyx_tuple__35 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__35)) __PYX_ERR(0, 1609, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__35);
   __Pyx_GIVEREF(__pyx_tuple__35);
 
-  /* "adios.pyx":1602
+  /* "adios.pyx":1610
  * 
  *             if key_.startswith('/'):
  *                 key_ = key_[1:]             # <<<<<<<<<<<<<<
  * 
  *             if key_ in self.attrs.keys():
  */
-  __pyx_slice__36 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__36)) __PYX_ERR(0, 1602, __pyx_L1_error)
+  __pyx_slice__36 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__36)) __PYX_ERR(0, 1610, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_slice__36);
   __Pyx_GIVEREF(__pyx_slice__36);
 
-  /* "adios.pyx":1623
+  /* "adios.pyx":1631
  *         if isinstance(asel, sel.SimpleSelection):
  *             if (self.nsteps) > 1:
  *                 return self.read(offset=asel.sel[0][1:],             # <<<<<<<<<<<<<<
  *                                  count=asel.sel[1][1:],
  *                                  scalar=asel.sel[3][1:],
  */
-  __pyx_slice__37 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__37)) __PYX_ERR(0, 1623, __pyx_L1_error)
+  __pyx_slice__37 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__37)) __PYX_ERR(0, 1631, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_slice__37);
   __Pyx_GIVEREF(__pyx_slice__37);
 
-  /* "adios.pyx":1624
+  /* "adios.pyx":1632
  *             if (self.nsteps) > 1:
  *                 return self.read(offset=asel.sel[0][1:],
  *                                  count=asel.sel[1][1:],             # <<<<<<<<<<<<<<
  *                                  scalar=asel.sel[3][1:],
  *                                  from_steps=asel.sel[0][0],
  */
-  __pyx_slice__38 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__38)) __PYX_ERR(0, 1624, __pyx_L1_error)
+  __pyx_slice__38 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__38)) __PYX_ERR(0, 1632, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_slice__38);
   __Pyx_GIVEREF(__pyx_slice__38);
 
-  /* "adios.pyx":1625
+  /* "adios.pyx":1633
  *                 return self.read(offset=asel.sel[0][1:],
  *                                  count=asel.sel[1][1:],
  *                                  scalar=asel.sel[3][1:],             # <<<<<<<<<<<<<<
  *                                  from_steps=asel.sel[0][0],
  *                                  nsteps=asel.sel[1][0],
  */
-  __pyx_slice__39 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__39)) __PYX_ERR(0, 1625, __pyx_L1_error)
+  __pyx_slice__39 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__39)) __PYX_ERR(0, 1633, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_slice__39);
   __Pyx_GIVEREF(__pyx_slice__39);
 
-  /* "adios.pyx":1642
+  /* "adios.pyx":1650
  *             for idx, obj in enumerate(asel.sel):
  *                 if (self.nsteps) > 1:
  *                     v = self.read(offset=obj[0][1:],             # <<<<<<<<<<<<<<
  *                                   count=obj[1][1:],
  *                                   scalar=obj[3][1:],
  */
-  __pyx_slice__40 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__40)) __PYX_ERR(0, 1642, __pyx_L1_error)
+  __pyx_slice__40 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__40)) __PYX_ERR(0, 1650, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_slice__40);
   __Pyx_GIVEREF(__pyx_slice__40);
 
-  /* "adios.pyx":1643
+  /* "adios.pyx":1651
  *                 if (self.nsteps) > 1:
  *                     v = self.read(offset=obj[0][1:],
  *                                   count=obj[1][1:],             # <<<<<<<<<<<<<<
  *                                   scalar=obj[3][1:],
  *                                   from_steps=obj[0][0],
  */
-  __pyx_slice__41 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__41)) __PYX_ERR(0, 1643, __pyx_L1_error)
+  __pyx_slice__41 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__41)) __PYX_ERR(0, 1651, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_slice__41);
   __Pyx_GIVEREF(__pyx_slice__41);
 
-  /* "adios.pyx":1644
+  /* "adios.pyx":1652
  *                     v = self.read(offset=obj[0][1:],
  *                                   count=obj[1][1:],
  *                                   scalar=obj[3][1:],             # <<<<<<<<<<<<<<
  *                                   from_steps=obj[0][0],
  *                                   nsteps=obj[1][0],
  */
-  __pyx_slice__42 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__42)) __PYX_ERR(0, 1644, __pyx_L1_error)
+  __pyx_slice__42 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__42)) __PYX_ERR(0, 1652, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_slice__42);
   __Pyx_GIVEREF(__pyx_slice__42);
 
-  /* "adios.pyx":1662
+  /* "adios.pyx":1670
  * 
  *         else:
  *             raise NotImplementedError("Not implemented yet")             # <<<<<<<<<<<<<<
  * 
  *     def __getitem__(self, args):
  */
-  __pyx_tuple__43 = PyTuple_Pack(1, __pyx_kp_s_Not_implemented_yet); if (unlikely(!__pyx_tuple__43)) __PYX_ERR(0, 1662, __pyx_L1_error)
+  __pyx_tuple__43 = PyTuple_Pack(1, __pyx_kp_s_Not_implemented_yet); if (unlikely(!__pyx_tuple__43)) __PYX_ERR(0, 1670, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__43);
   __Pyx_GIVEREF(__pyx_tuple__43);
 
-  /* "adios.pyx":1788
+  /* "adios.pyx":1796
  *     def __init__(self, file file, str name):
  *         self.file = file
  *         self.name = name.rstrip('/')             # <<<<<<<<<<<<<<
  * 
  *         self.vars = softdict()
  */
-  __pyx_tuple__44 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__44)) __PYX_ERR(0, 1788, __pyx_L1_error)
+  __pyx_tuple__44 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__44)) __PYX_ERR(0, 1796, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__44);
   __Pyx_GIVEREF(__pyx_tuple__44);
 
-  /* "adios.pyx":1823
+  /* "adios.pyx":1831
  *         for key_ in varname:
  *             if not isinstance(key_, str):
  *                 raise TypeError("Unhashable type")             # <<<<<<<<<<<<<<
  * 
  *             if key_.startswith('/'):
  */
-  __pyx_tuple__45 = PyTuple_Pack(1, __pyx_kp_s_Unhashable_type); if (unlikely(!__pyx_tuple__45)) __PYX_ERR(0, 1823, __pyx_L1_error)
+  __pyx_tuple__45 = PyTuple_Pack(1, __pyx_kp_s_Unhashable_type); if (unlikely(!__pyx_tuple__45)) __PYX_ERR(0, 1831, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__45);
   __Pyx_GIVEREF(__pyx_tuple__45);
 
-  /* "adios.pyx":1825
+  /* "adios.pyx":1833
  *                 raise TypeError("Unhashable type")
  * 
  *             if key_.startswith('/'):             # <<<<<<<<<<<<<<
  *                 key_ = key_[1:]
  * 
  */
-  __pyx_tuple__46 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__46)) __PYX_ERR(0, 1825, __pyx_L1_error)
+  __pyx_tuple__46 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__46)) __PYX_ERR(0, 1833, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__46);
   __Pyx_GIVEREF(__pyx_tuple__46);
 
-  /* "adios.pyx":1826
+  /* "adios.pyx":1834
  * 
  *             if key_.startswith('/'):
  *                 key_ = key_[1:]             # <<<<<<<<<<<<<<
  * 
  *             if key_ in self.vars.keys():
  */
-  __pyx_slice__47 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__47)) __PYX_ERR(0, 1826, __pyx_L1_error)
+  __pyx_slice__47 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__47)) __PYX_ERR(0, 1834, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_slice__47);
   __Pyx_GIVEREF(__pyx_slice__47);
 
-  /* "adios.pyx":1876
+  /* "adios.pyx":1884
  *         s = set()
  *         for k in self.vars.keys():
  *             if k.startswith('/'): k = k[1:]             # <<<<<<<<<<<<<<
  *             s.add(os.path.dirname(k).split('/')[0])
  *         for k in self.attrs.keys():
  */
-  __pyx_tuple__48 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__48)) __PYX_ERR(0, 1876, __pyx_L1_error)
+  __pyx_tuple__48 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__48)) __PYX_ERR(0, 1884, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__48);
   __Pyx_GIVEREF(__pyx_tuple__48);
-  __pyx_slice__49 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__49)) __PYX_ERR(0, 1876, __pyx_L1_error)
+  __pyx_slice__49 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__49)) __PYX_ERR(0, 1884, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_slice__49);
   __Pyx_GIVEREF(__pyx_slice__49);
 
-  /* "adios.pyx":1877
+  /* "adios.pyx":1885
  *         for k in self.vars.keys():
  *             if k.startswith('/'): k = k[1:]
  *             s.add(os.path.dirname(k).split('/')[0])             # <<<<<<<<<<<<<<
  *         for k in self.attrs.keys():
  *             if k.startswith('/'): k = k[1:]
  */
-  __pyx_tuple__50 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__50)) __PYX_ERR(0, 1877, __pyx_L1_error)
+  __pyx_tuple__50 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__50)) __PYX_ERR(0, 1885, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__50);
   __Pyx_GIVEREF(__pyx_tuple__50);
 
-  /* "adios.pyx":1879
+  /* "adios.pyx":1887
  *             s.add(os.path.dirname(k).split('/')[0])
  *         for k in self.attrs.keys():
  *             if k.startswith('/'): k = k[1:]             # <<<<<<<<<<<<<<
  *             s.add(os.path.dirname(k).split('/')[0])
  *         return list(s-set(['']))
  */
-  __pyx_tuple__51 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__51)) __PYX_ERR(0, 1879, __pyx_L1_error)
+  __pyx_tuple__51 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__51)) __PYX_ERR(0, 1887, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__51);
   __Pyx_GIVEREF(__pyx_tuple__51);
-  __pyx_slice__52 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__52)) __PYX_ERR(0, 1879, __pyx_L1_error)
+  __pyx_slice__52 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__52)) __PYX_ERR(0, 1887, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_slice__52);
   __Pyx_GIVEREF(__pyx_slice__52);
 
-  /* "adios.pyx":1880
+  /* "adios.pyx":1888
  *         for k in self.attrs.keys():
  *             if k.startswith('/'): k = k[1:]
  *             s.add(os.path.dirname(k).split('/')[0])             # <<<<<<<<<<<<<<
  *         return list(s-set(['']))
  * 
  */
-  __pyx_tuple__53 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__53)) __PYX_ERR(0, 1880, __pyx_L1_error)
+  __pyx_tuple__53 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__53)) __PYX_ERR(0, 1888, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__53);
   __Pyx_GIVEREF(__pyx_tuple__53);
 
-  /* "adios.pyx":2187
+  /* "adios.pyx":2208
  *         if self.is_static:
  *             if self.value is None:
  *                 raise TypeError("Value is none")             # <<<<<<<<<<<<<<
  * 
  *             define_attribute_byvalue(gid, self.name, "", self.value)
  */
-  __pyx_tuple__58 = PyTuple_Pack(1, __pyx_kp_s_Value_is_none); if (unlikely(!__pyx_tuple__58)) __PYX_ERR(0, 2187, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__58);
-  __Pyx_GIVEREF(__pyx_tuple__58);
-
-  /* "adios.pyx":2233
- *     def define(self, int64_t gid):
- *         if self.value is None:
- *             raise TypeError("Value is none")             # <<<<<<<<<<<<<<
- * 
- *         ldim_ = self.ldim
- */
-  __pyx_tuple__62 = PyTuple_Pack(1, __pyx_kp_s_Value_is_none); if (unlikely(!__pyx_tuple__62)) __PYX_ERR(0, 2233, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__62);
-  __Pyx_GIVEREF(__pyx_tuple__62);
+  __pyx_tuple__60 = PyTuple_Pack(1, __pyx_kp_s_Value_is_none); if (unlikely(!__pyx_tuple__60)) __PYX_ERR(0, 2208, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__60);
+  __Pyx_GIVEREF(__pyx_tuple__60);
 
-  /* "adios.pyx":2255
+  /* "adios.pyx":2277
  *         cdef int64_t varid = 0;
  *         varid = define_var(gid, self.name, "", atype,
  *                    str(ldim_).replace(' ', '').strip('(,)'),             # <<<<<<<<<<<<<<
  *                    str(gdim_).replace(' ', '').strip('(,)'),
  *                    str(offset_).replace(' ', '').strip('(,)'))
  */
-  __pyx_tuple__64 = PyTuple_Pack(2, __pyx_kp_s__63, __pyx_kp_s__10); if (unlikely(!__pyx_tuple__64)) __PYX_ERR(0, 2255, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__64);
-  __Pyx_GIVEREF(__pyx_tuple__64);
-  __pyx_tuple__66 = PyTuple_Pack(1, __pyx_kp_s__65); if (unlikely(!__pyx_tuple__66)) __PYX_ERR(0, 2255, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__66);
-  __Pyx_GIVEREF(__pyx_tuple__66);
+  __pyx_tuple__65 = PyTuple_Pack(2, __pyx_kp_s__64, __pyx_kp_s__10); if (unlikely(!__pyx_tuple__65)) __PYX_ERR(0, 2277, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__65);
+  __Pyx_GIVEREF(__pyx_tuple__65);
+  __pyx_tuple__67 = PyTuple_Pack(1, __pyx_kp_s__66); if (unlikely(!__pyx_tuple__67)) __PYX_ERR(0, 2277, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__67);
+  __Pyx_GIVEREF(__pyx_tuple__67);
 
-  /* "adios.pyx":2256
+  /* "adios.pyx":2278
  *         varid = define_var(gid, self.name, "", atype,
  *                    str(ldim_).replace(' ', '').strip('(,)'),
  *                    str(gdim_).replace(' ', '').strip('(,)'),             # <<<<<<<<<<<<<<
  *                    str(offset_).replace(' ', '').strip('(,)'))
  * 
  */
-  __pyx_tuple__67 = PyTuple_Pack(2, __pyx_kp_s__63, __pyx_kp_s__10); if (unlikely(!__pyx_tuple__67)) __PYX_ERR(0, 2256, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__67);
-  __Pyx_GIVEREF(__pyx_tuple__67);
-  __pyx_tuple__68 = PyTuple_Pack(1, __pyx_kp_s__65); if (unlikely(!__pyx_tuple__68)) __PYX_ERR(0, 2256, __pyx_L1_error)
+  __pyx_tuple__68 = PyTuple_Pack(2, __pyx_kp_s__64, __pyx_kp_s__10); if (unlikely(!__pyx_tuple__68)) __PYX_ERR(0, 2278, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__68);
   __Pyx_GIVEREF(__pyx_tuple__68);
+  __pyx_tuple__69 = PyTuple_Pack(1, __pyx_kp_s__66); if (unlikely(!__pyx_tuple__69)) __PYX_ERR(0, 2278, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__69);
+  __Pyx_GIVEREF(__pyx_tuple__69);
 
-  /* "adios.pyx":2257
+  /* "adios.pyx":2279
  *                    str(ldim_).replace(' ', '').strip('(,)'),
  *                    str(gdim_).replace(' ', '').strip('(,)'),
  *                    str(offset_).replace(' ', '').strip('(,)'))             # <<<<<<<<<<<<<<
  * 
  *         if (self.transform is not None):
  */
-  __pyx_tuple__69 = PyTuple_Pack(2, __pyx_kp_s__63, __pyx_kp_s__10); if (unlikely(!__pyx_tuple__69)) __PYX_ERR(0, 2257, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__69);
-  __Pyx_GIVEREF(__pyx_tuple__69);
-  __pyx_tuple__70 = PyTuple_Pack(1, __pyx_kp_s__65); if (unlikely(!__pyx_tuple__70)) __PYX_ERR(0, 2257, __pyx_L1_error)
+  __pyx_tuple__70 = PyTuple_Pack(2, __pyx_kp_s__64, __pyx_kp_s__10); if (unlikely(!__pyx_tuple__70)) __PYX_ERR(0, 2279, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__70);
   __Pyx_GIVEREF(__pyx_tuple__70);
+  __pyx_tuple__71 = PyTuple_Pack(1, __pyx_kp_s__66); if (unlikely(!__pyx_tuple__71)) __PYX_ERR(0, 2279, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__71);
+  __Pyx_GIVEREF(__pyx_tuple__71);
 
   /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":218
  *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)
@@ -41245,9 +43328,9 @@ static int __Pyx_InitCachedConstants(void) {
  * 
  *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
  */
-  __pyx_tuple__71 = PyTuple_Pack(1, __pyx_kp_u_ndarray_is_not_C_contiguous); if (unlikely(!__pyx_tuple__71)) __PYX_ERR(1, 218, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__71);
-  __Pyx_GIVEREF(__pyx_tuple__71);
+  __pyx_tuple__72 = PyTuple_Pack(1, __pyx_kp_u_ndarray_is_not_C_contiguous); if (unlikely(!__pyx_tuple__72)) __PYX_ERR(1, 218, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__72);
+  __Pyx_GIVEREF(__pyx_tuple__72);
 
   /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":222
  *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
@@ -41256,9 +43339,9 @@ static int __Pyx_InitCachedConstants(void) {
  * 
  *             info.buf = PyArray_DATA(self)
  */
-  __pyx_tuple__72 = PyTuple_Pack(1, __pyx_kp_u_ndarray_is_not_Fortran_contiguou); if (unlikely(!__pyx_tuple__72)) __PYX_ERR(1, 222, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__72);
-  __Pyx_GIVEREF(__pyx_tuple__72);
+  __pyx_tuple__73 = PyTuple_Pack(1, __pyx_kp_u_ndarray_is_not_Fortran_contiguou); if (unlikely(!__pyx_tuple__73)) __PYX_ERR(1, 222, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__73);
+  __Pyx_GIVEREF(__pyx_tuple__73);
 
   /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":259
  *                 if ((descr.byteorder == c'>' and little_endian) or
@@ -41267,9 +43350,9 @@ static int __Pyx_InitCachedConstants(void) {
  *                 if   t == NPY_BYTE:        f = "b"
  *                 elif t == NPY_UBYTE:       f = "B"
  */
-  __pyx_tuple__73 = PyTuple_Pack(1, __pyx_kp_u_Non_native_byte_order_not_suppor); if (unlikely(!__pyx_tuple__73)) __PYX_ERR(1, 259, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__73);
-  __Pyx_GIVEREF(__pyx_tuple__73);
+  __pyx_tuple__74 = PyTuple_Pack(1, __pyx_kp_u_Non_native_byte_order_not_suppor); if (unlikely(!__pyx_tuple__74)) __PYX_ERR(1, 259, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__74);
+  __Pyx_GIVEREF(__pyx_tuple__74);
 
   /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":799
  * 
@@ -41278,9 +43361,9 @@ static int __Pyx_InitCachedConstants(void) {
  * 
  *         if ((child.byteorder == c'>' and little_endian) or
  */
-  __pyx_tuple__74 = PyTuple_Pack(1, __pyx_kp_u_Format_string_allocated_too_shor); if (unlikely(!__pyx_tuple__74)) __PYX_ERR(1, 799, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__74);
-  __Pyx_GIVEREF(__pyx_tuple__74);
+  __pyx_tuple__75 = PyTuple_Pack(1, __pyx_kp_u_Format_string_allocated_too_shor); if (unlikely(!__pyx_tuple__75)) __PYX_ERR(1, 799, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__75);
+  __Pyx_GIVEREF(__pyx_tuple__75);
 
   /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":803
  *         if ((child.byteorder == c'>' and little_endian) or
@@ -41289,9 +43372,9 @@ static int __Pyx_InitCachedConstants(void) {
  *             # One could encode it in the format string and have Cython
  *             # complain instead, BUT: < and > in format strings also imply
  */
-  __pyx_tuple__75 = PyTuple_Pack(1, __pyx_kp_u_Non_native_byte_order_not_suppor); if (unlikely(!__pyx_tuple__75)) __PYX_ERR(1, 803, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__75);
-  __Pyx_GIVEREF(__pyx_tuple__75);
+  __pyx_tuple__76 = PyTuple_Pack(1, __pyx_kp_u_Non_native_byte_order_not_suppor); if (unlikely(!__pyx_tuple__76)) __PYX_ERR(1, 803, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__76);
+  __Pyx_GIVEREF(__pyx_tuple__76);
 
   /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":823
  *             t = child.type_num
@@ -41300,45 +43383,76 @@ static int __Pyx_InitCachedConstants(void) {
  * 
  *             # Until ticket #99 is fixed, use integers to avoid warnings
  */
-  __pyx_tuple__76 = PyTuple_Pack(1, __pyx_kp_u_Format_string_allocated_too_shor_2); if (unlikely(!__pyx_tuple__76)) __PYX_ERR(1, 823, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__76);
-  __Pyx_GIVEREF(__pyx_tuple__76);
+  __pyx_tuple__77 = PyTuple_Pack(1, __pyx_kp_u_Format_string_allocated_too_shor_2); if (unlikely(!__pyx_tuple__77)) __PYX_ERR(1, 823, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__77);
+  __Pyx_GIVEREF(__pyx_tuple__77);
 
-  /* "adios.pyx":58
+  /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":989
+ *         _import_array()
+ *     except Exception:
+ *         raise ImportError("numpy.core.multiarray failed to import")             # <<<<<<<<<<<<<<
+ * 
+ * cdef inline int import_umath() except -1:
+ */
+  __pyx_tuple__78 = PyTuple_Pack(1, __pyx_kp_s_numpy_core_multiarray_failed_to); if (unlikely(!__pyx_tuple__78)) __PYX_ERR(1, 989, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__78);
+  __Pyx_GIVEREF(__pyx_tuple__78);
+
+  /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":995
+ *         _import_umath()
+ *     except Exception:
+ *         raise ImportError("numpy.core.umath failed to import")             # <<<<<<<<<<<<<<
+ * 
+ * cdef inline int import_ufunc() except -1:
+ */
+  __pyx_tuple__79 = PyTuple_Pack(1, __pyx_kp_s_numpy_core_umath_failed_to_impor); if (unlikely(!__pyx_tuple__79)) __PYX_ERR(1, 995, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__79);
+  __Pyx_GIVEREF(__pyx_tuple__79);
+
+  /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":1001
+ *         _import_umath()
+ *     except Exception:
+ *         raise ImportError("numpy.core.umath failed to import")             # <<<<<<<<<<<<<<
+ */
+  __pyx_tuple__80 = PyTuple_Pack(1, __pyx_kp_s_numpy_core_umath_failed_to_impor); if (unlikely(!__pyx_tuple__80)) __PYX_ERR(1, 1001, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__80);
+  __Pyx_GIVEREF(__pyx_tuple__80);
+
+  /* "adios.pyx":60
  *         return x.encode()
  * 
  * def normalize_key(keys):             # <<<<<<<<<<<<<<
  *     if not isinstance(keys, list):
  *         keys = [keys,]
  */
-  __pyx_tuple__77 = PyTuple_Pack(3, __pyx_n_s_keys, __pyx_n_s_l, __pyx_n_s_key); if (unlikely(!__pyx_tuple__77)) __PYX_ERR(0, 58, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__77);
-  __Pyx_GIVEREF(__pyx_tuple__77);
-  __pyx_codeobj__78 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__77, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_jyc_project_adios_devel_w, __pyx_n_s_normalize_key, 58, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__78)) __PYX_ERR(0, 58, __pyx_L1_error)
+  __pyx_tuple__81 = PyTuple_Pack(3, __pyx_n_s_keys, __pyx_n_s_l, __pyx_n_s_key); if (unlikely(!__pyx_tuple__81)) __PYX_ERR(0, 60, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__81);
+  __Pyx_GIVEREF(__pyx_tuple__81);
+  __pyx_codeobj__82 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__81, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_jyc_project_adios_devel_w, __pyx_n_s_normalize_key, 60, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__82)) __PYX_ERR(0, 60, __pyx_L1_error)
 
-  /* "adios.pyx":2292
+  /* "adios.pyx":2318
  * ## ====================
  * 
  * def readvar(fname, varname):             # <<<<<<<<<<<<<<
  *     """ Retrieve a variable value from an Adios file.
  * 
  */
-  __pyx_tuple__79 = PyTuple_Pack(4, __pyx_n_s_fname, __pyx_n_s_varname, __pyx_n_s_f, __pyx_n_s_v); if (unlikely(!__pyx_tuple__79)) __PYX_ERR(0, 2292, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__79);
-  __Pyx_GIVEREF(__pyx_tuple__79);
-  __pyx_codeobj__80 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__79, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_jyc_project_adios_devel_w, __pyx_n_s_readvar_2, 2292, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__80)) __PYX_ERR(0, 2292, __pyx_L1_error)
+  __pyx_tuple__83 = PyTuple_Pack(4, __pyx_n_s_fname, __pyx_n_s_varname, __pyx_n_s_f, __pyx_n_s_v); if (unlikely(!__pyx_tuple__83)) __PYX_ERR(0, 2318, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__83);
+  __Pyx_GIVEREF(__pyx_tuple__83);
+  __pyx_codeobj__84 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__83, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_jyc_project_adios_devel_w, __pyx_n_s_readvar_2, 2318, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__84)) __PYX_ERR(0, 2318, __pyx_L1_error)
 
-  /* "adios.pyx":2306
+  /* "adios.pyx":2332
  *     return v.read(from_steps=0, nsteps=v.nsteps)
  * 
  * def bpls(fname):             # <<<<<<<<<<<<<<
  *     """ Return meta data of an Adios file as a Python dictionary object.
  * 
  */
-  __pyx_tuple__81 = PyTuple_Pack(3, __pyx_n_s_fname, __pyx_n_s_f, __pyx_n_s_k); if (unlikely(!__pyx_tuple__81)) __PYX_ERR(0, 2306, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__81);
-  __Pyx_GIVEREF(__pyx_tuple__81);
-  __pyx_codeobj__82 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__81, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_jyc_project_adios_devel_w, __pyx_n_s_bpls, 2306, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__82)) __PYX_ERR(0, 2306, __pyx_L1_error)
+  __pyx_tuple__85 = PyTuple_Pack(3, __pyx_n_s_fname, __pyx_n_s_f, __pyx_n_s_k); if (unlikely(!__pyx_tuple__85)) __PYX_ERR(0, 2332, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__85);
+  __Pyx_GIVEREF(__pyx_tuple__85);
+  __pyx_codeobj__86 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__85, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_jyc_project_adios_devel_w, __pyx_n_s_bpls, 2332, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__86)) __PYX_ERR(0, 2332, __pyx_L1_error)
   __Pyx_RefNannyFinishContext();
   return 0;
   __pyx_L1_error:;
@@ -41458,9 +43572,9 @@ PyMODINIT_FUNC PyInit_adios(void)
   /*--- Function export code ---*/
   /*--- Type init code ---*/
   __pyx_type_5adios_softdict.tp_base = (&PyDict_Type);
-  if (PyType_Ready(&__pyx_type_5adios_softdict) < 0) __PYX_ERR(0, 890, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_5adios_softdict) < 0) __PYX_ERR(0, 898, __pyx_L1_error)
   __pyx_type_5adios_softdict.tp_print = 0;
-  if (PyObject_SetAttrString(__pyx_m, "softdict", (PyObject *)&__pyx_type_5adios_softdict) < 0) __PYX_ERR(0, 890, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "softdict", (PyObject *)&__pyx_type_5adios_softdict) < 0) __PYX_ERR(0, 898, __pyx_L1_error)
   __pyx_ptype_5adios_softdict = &__pyx_type_5adios_softdict;
   __pyx_vtabptr_5adios_file = &__pyx_vtable_5adios_file;
   __pyx_vtable_5adios_file.close = (PyObject *(*)(struct __pyx_obj_5adios_file *, int __pyx_skip_dispatch))__pyx_f_5adios_4file_close;
@@ -41468,11 +43582,11 @@ PyMODINIT_FUNC PyInit_adios(void)
   __pyx_vtable_5adios_file.release_step = (PyObject *(*)(struct __pyx_obj_5adios_file *, int __pyx_skip_dispatch))__pyx_f_5adios_4file_release_step;
   __pyx_vtable_5adios_file.advance = (PyObject *(*)(struct __pyx_obj_5adios_file *, int __pyx_skip_dispatch, struct __pyx_opt_args_5adios_4file_advance *__pyx_optional_args))__pyx_f_5adios_4file_advance;
   __pyx_type_5adios_file.tp_base = (&PyDict_Type);
-  if (PyType_Ready(&__pyx_type_5adios_file) < 0) __PYX_ERR(0, 914, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_5adios_file) < 0) __PYX_ERR(0, 922, __pyx_L1_error)
   __pyx_type_5adios_file.tp_print = 0;
   #if CYTHON_COMPILING_IN_CPYTHON
   {
-    PyObject *wrapper = PyObject_GetAttrString((PyObject *)&__pyx_type_5adios_file, "__getitem__"); if (unlikely(!wrapper)) __PYX_ERR(0, 914, __pyx_L1_error)
+    PyObject *wrapper = PyObject_GetAttrString((PyObject *)&__pyx_type_5adios_file, "__getitem__"); if (unlikely(!wrapper)) __PYX_ERR(0, 922, __pyx_L1_error)
     if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
       __pyx_wrapperbase_5adios_4file_16__getitem__ = *((PyWrapperDescrObject *)wrapper)->d_base;
       __pyx_wrapperbase_5adios_4file_16__getitem__.doc = __pyx_doc_5adios_4file_16__getitem__;
@@ -41482,7 +43596,7 @@ PyMODINIT_FUNC PyInit_adios(void)
   #endif
   #if CYTHON_COMPILING_IN_CPYTHON
   {
-    PyObject *wrapper = PyObject_GetAttrString((PyObject *)&__pyx_type_5adios_file, "__repr__"); if (unlikely(!wrapper)) __PYX_ERR(0, 914, __pyx_L1_error)
+    PyObject *wrapper = PyObject_GetAttrString((PyObject *)&__pyx_type_5adios_file, "__repr__"); if (unlikely(!wrapper)) __PYX_ERR(0, 922, __pyx_L1_error)
     if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
       __pyx_wrapperbase_5adios_4file_18__repr__ = *((PyWrapperDescrObject *)wrapper)->d_base;
       __pyx_wrapperbase_5adios_4file_18__repr__.doc = __pyx_doc_5adios_4file_18__repr__;
@@ -41490,12 +43604,12 @@ PyMODINIT_FUNC PyInit_adios(void)
     }
   }
   #endif
-  if (__Pyx_SetVtable(__pyx_type_5adios_file.tp_dict, __pyx_vtabptr_5adios_file) < 0) __PYX_ERR(0, 914, __pyx_L1_error)
-  if (PyObject_SetAttrString(__pyx_m, "file", (PyObject *)&__pyx_type_5adios_file) < 0) __PYX_ERR(0, 914, __pyx_L1_error)
+  if (__Pyx_SetVtable(__pyx_type_5adios_file.tp_dict, __pyx_vtabptr_5adios_file) < 0) __PYX_ERR(0, 922, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "file", (PyObject *)&__pyx_type_5adios_file) < 0) __PYX_ERR(0, 922, __pyx_L1_error)
   __pyx_ptype_5adios_file = &__pyx_type_5adios_file;
-  if (PyType_Ready(&__pyx_type_5adios_blockinfo) < 0) __PYX_ERR(0, 1186, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_5adios_blockinfo) < 0) __PYX_ERR(0, 1194, __pyx_L1_error)
   __pyx_type_5adios_blockinfo.tp_print = 0;
-  if (PyObject_SetAttrString(__pyx_m, "blockinfo", (PyObject *)&__pyx_type_5adios_blockinfo) < 0) __PYX_ERR(0, 1186, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "blockinfo", (PyObject *)&__pyx_type_5adios_blockinfo) < 0) __PYX_ERR(0, 1194, __pyx_L1_error)
   __pyx_ptype_5adios_blockinfo = &__pyx_type_5adios_blockinfo;
   __pyx_vtabptr_5adios_var = &__pyx_vtable_5adios_var;
   __pyx_vtable_5adios_var.close = (PyObject *(*)(struct __pyx_obj_5adios_var *, int __pyx_skip_dispatch))__pyx_f_5adios_3var_close;
@@ -41505,21 +43619,21 @@ PyMODINIT_FUNC PyInit_adios(void)
   __pyx_vtable_5adios_var.read = (PyObject *(*)(struct __pyx_obj_5adios_var *, int __pyx_skip_dispatch, struct __pyx_opt_args_5adios_3var_read *__pyx_optional_args))__pyx_f_5adios_3var_read;
   __pyx_vtable_5adios_var.printself = (PyObject *(*)(struct __pyx_obj_5adios_var *, int __pyx_skip_dispatch))__pyx_f_5adios_3var_printself;
   __pyx_type_5adios_var.tp_base = (&PyDict_Type);
-  if (PyType_Ready(&__pyx_type_5adios_var) < 0) __PYX_ERR(0, 1221, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_5adios_var) < 0) __PYX_ERR(0, 1229, __pyx_L1_error)
   __pyx_type_5adios_var.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_5adios_var.tp_dict, __pyx_vtabptr_5adios_var) < 0) __PYX_ERR(0, 1221, __pyx_L1_error)
-  if (PyObject_SetAttrString(__pyx_m, "var", (PyObject *)&__pyx_type_5adios_var) < 0) __PYX_ERR(0, 1221, __pyx_L1_error)
+  if (__Pyx_SetVtable(__pyx_type_5adios_var.tp_dict, __pyx_vtabptr_5adios_var) < 0) __PYX_ERR(0, 1229, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "var", (PyObject *)&__pyx_type_5adios_var) < 0) __PYX_ERR(0, 1229, __pyx_L1_error)
   __pyx_ptype_5adios_var = &__pyx_type_5adios_var;
-  if (PyType_Ready(&__pyx_type_5adios_attr) < 0) __PYX_ERR(0, 1686, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_5adios_attr) < 0) __PYX_ERR(0, 1694, __pyx_L1_error)
   __pyx_type_5adios_attr.tp_print = 0;
-  if (PyObject_SetAttrString(__pyx_m, "attr", (PyObject *)&__pyx_type_5adios_attr) < 0) __PYX_ERR(0, 1686, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "attr", (PyObject *)&__pyx_type_5adios_attr) < 0) __PYX_ERR(0, 1694, __pyx_L1_error)
   __pyx_ptype_5adios_attr = &__pyx_type_5adios_attr;
   __pyx_type_5adios_group.tp_base = (&PyDict_Type);
-  if (PyType_Ready(&__pyx_type_5adios_group) < 0) __PYX_ERR(0, 1772, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_5adios_group) < 0) __PYX_ERR(0, 1780, __pyx_L1_error)
   __pyx_type_5adios_group.tp_print = 0;
   #if CYTHON_COMPILING_IN_CPYTHON
   {
-    PyObject *wrapper = PyObject_GetAttrString((PyObject *)&__pyx_type_5adios_group, "__getitem__"); if (unlikely(!wrapper)) __PYX_ERR(0, 1772, __pyx_L1_error)
+    PyObject *wrapper = PyObject_GetAttrString((PyObject *)&__pyx_type_5adios_group, "__getitem__"); if (unlikely(!wrapper)) __PYX_ERR(0, 1780, __pyx_L1_error)
     if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
       __pyx_wrapperbase_5adios_5group_2__getitem__ = *((PyWrapperDescrObject *)wrapper)->d_base;
       __pyx_wrapperbase_5adios_5group_2__getitem__.doc = __pyx_doc_5adios_5group_2__getitem__;
@@ -41529,7 +43643,7 @@ PyMODINIT_FUNC PyInit_adios(void)
   #endif
   #if CYTHON_COMPILING_IN_CPYTHON
   {
-    PyObject *wrapper = PyObject_GetAttrString((PyObject *)&__pyx_type_5adios_group, "__repr__"); if (unlikely(!wrapper)) __PYX_ERR(0, 1772, __pyx_L1_error)
+    PyObject *wrapper = PyObject_GetAttrString((PyObject *)&__pyx_type_5adios_group, "__repr__"); if (unlikely(!wrapper)) __PYX_ERR(0, 1780, __pyx_L1_error)
     if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
       __pyx_wrapperbase_5adios_5group_4__repr__ = *((PyWrapperDescrObject *)wrapper)->d_base;
       __pyx_wrapperbase_5adios_5group_4__repr__.doc = __pyx_doc_5adios_5group_4__repr__;
@@ -41537,24 +43651,24 @@ PyMODINIT_FUNC PyInit_adios(void)
     }
   }
   #endif
-  if (PyObject_SetAttrString(__pyx_m, "group", (PyObject *)&__pyx_type_5adios_group) < 0) __PYX_ERR(0, 1772, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "group", (PyObject *)&__pyx_type_5adios_group) < 0) __PYX_ERR(0, 1780, __pyx_L1_error)
   __pyx_ptype_5adios_group = &__pyx_type_5adios_group;
   __pyx_type_5adios_smartdict.tp_base = (&PyDict_Type);
-  if (PyType_Ready(&__pyx_type_5adios_smartdict) < 0) __PYX_ERR(0, 1884, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_5adios_smartdict) < 0) __PYX_ERR(0, 1892, __pyx_L1_error)
   __pyx_type_5adios_smartdict.tp_print = 0;
-  if (PyObject_SetAttrString(__pyx_m, "smartdict", (PyObject *)&__pyx_type_5adios_smartdict) < 0) __PYX_ERR(0, 1884, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "smartdict", (PyObject *)&__pyx_type_5adios_smartdict) < 0) __PYX_ERR(0, 1892, __pyx_L1_error)
   __pyx_ptype_5adios_smartdict = &__pyx_type_5adios_smartdict;
-  if (PyType_Ready(&__pyx_type_5adios_writer) < 0) __PYX_ERR(0, 1896, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_5adios_writer) < 0) __PYX_ERR(0, 1904, __pyx_L1_error)
   __pyx_type_5adios_writer.tp_print = 0;
-  if (PyObject_SetAttrString(__pyx_m, "writer", (PyObject *)&__pyx_type_5adios_writer) < 0) __PYX_ERR(0, 1896, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "writer", (PyObject *)&__pyx_type_5adios_writer) < 0) __PYX_ERR(0, 1904, __pyx_L1_error)
   __pyx_ptype_5adios_writer = &__pyx_type_5adios_writer;
-  if (PyType_Ready(&__pyx_type_5adios_attrinfo) < 0) __PYX_ERR(0, 2150, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_5adios_attrinfo) < 0) __PYX_ERR(0, 2171, __pyx_L1_error)
   __pyx_type_5adios_attrinfo.tp_print = 0;
-  if (PyObject_SetAttrString(__pyx_m, "attrinfo", (PyObject *)&__pyx_type_5adios_attrinfo) < 0) __PYX_ERR(0, 2150, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "attrinfo", (PyObject *)&__pyx_type_5adios_attrinfo) < 0) __PYX_ERR(0, 2171, __pyx_L1_error)
   __pyx_ptype_5adios_attrinfo = &__pyx_type_5adios_attrinfo;
-  if (PyType_Ready(&__pyx_type_5adios_varinfo) < 0) __PYX_ERR(0, 2203, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_5adios_varinfo) < 0) __PYX_ERR(0, 2224, __pyx_L1_error)
   __pyx_type_5adios_varinfo.tp_print = 0;
-  if (PyObject_SetAttrString(__pyx_m, "varinfo", (PyObject *)&__pyx_type_5adios_varinfo) < 0) __PYX_ERR(0, 2203, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "varinfo", (PyObject *)&__pyx_type_5adios_varinfo) < 0) __PYX_ERR(0, 2224, __pyx_L1_error)
   __pyx_ptype_5adios_varinfo = &__pyx_type_5adios_varinfo;
   /*--- Type import code ---*/
   __pyx_ptype_7cpython_4type_type = __Pyx_ImportType(__Pyx_BUILTIN_MODULE_NAME, "type", 
@@ -41588,446 +43702,529 @@ PyMODINIT_FUNC PyInit_adios(void)
   if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_1) < 0) __PYX_ERR(0, 13, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":28
+  /* "adios.pyx":22
+ * cimport cython
+ * 
+ * import tempfile             # <<<<<<<<<<<<<<
+ * 
+ * from libc.stdlib cimport malloc, free
+ */
+  __pyx_t_1 = __Pyx_Import(__pyx_n_s_tempfile, 0, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 22, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_tempfile, __pyx_t_1) < 0) __PYX_ERR(0, 22, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  /* "adios.pyx":30
  * from cpython.ref cimport PyObject
  * 
  * import os             # <<<<<<<<<<<<<<
  * from ._hl import selections as sel
  * 
  */
-  __pyx_t_1 = __Pyx_Import(__pyx_n_s_os, 0, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 28, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_Import(__pyx_n_s_os, 0, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 30, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_os, __pyx_t_1) < 0) __PYX_ERR(0, 28, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_os, __pyx_t_1) < 0) __PYX_ERR(0, 30, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios.pyx":29
+  /* "adios.pyx":31
  * 
  * import os
  * from ._hl import selections as sel             # <<<<<<<<<<<<<<
  * 
  * ## To convert a string to bytes: "str".encode()
  */
-  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 29, __pyx_L1_error)
+  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 31, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_n_s_selections);
   __Pyx_GIVEREF(__pyx_n_s_selections);
   PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_selections);
-  __pyx_t_2 = __Pyx_Import(__pyx_n_s_hl, __pyx_t_1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 29, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_Import(__pyx_n_s_hl, __pyx_t_1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 31, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_selections); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 29, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_selections); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 31, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_sel, __pyx_t_1) < 0) __PYX_ERR(0, 29, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_sel, __pyx_t_1) < 0) __PYX_ERR(0, 31, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "adios.pyx":58
+  /* "adios.pyx":60
  *         return x.encode()
  * 
  * def normalize_key(keys):             # <<<<<<<<<<<<<<
  *     if not isinstance(keys, list):
  *         keys = [keys,]
  */
-  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5adios_7normalize_key, NULL, __pyx_n_s_adios); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 58, __pyx_L1_error)
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5adios_7normalize_key, NULL, __pyx_n_s_adios); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 60, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_normalize_key, __pyx_t_2) < 0) __PYX_ERR(0, 58, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_normalize_key, __pyx_t_2) < 0) __PYX_ERR(0, 60, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "adios.pyx":392
+  /* "adios.pyx":394
  * ## ====================
  * 
  * class DATATYPE:             # <<<<<<<<<<<<<<
  *     unknown = -1
  *     byte = 0
  */
-  __pyx_t_2 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_DATATYPE, __pyx_n_s_DATATYPE, (PyObject *) NULL, __pyx_n_s_adios, (PyObject *) NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 392, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_DATATYPE, __pyx_n_s_DATATYPE, (PyObject *) NULL, __pyx_n_s_adios, (PyObject *) NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 394, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
 
-  /* "adios.pyx":393
+  /* "adios.pyx":395
  * 
  * class DATATYPE:
  *     unknown = -1             # <<<<<<<<<<<<<<
  *     byte = 0
  *     short = 1
  */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_unknown, __pyx_int_neg_1) < 0) __PYX_ERR(0, 393, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_unknown, __pyx_int_neg_1) < 0) __PYX_ERR(0, 395, __pyx_L1_error)
 
-  /* "adios.pyx":394
+  /* "adios.pyx":396
  * class DATATYPE:
  *     unknown = -1
  *     byte = 0             # <<<<<<<<<<<<<<
  *     short = 1
  *     integer = 2
  */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_byte, __pyx_int_0) < 0) __PYX_ERR(0, 394, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_byte, __pyx_int_0) < 0) __PYX_ERR(0, 396, __pyx_L1_error)
 
-  /* "adios.pyx":395
+  /* "adios.pyx":397
  *     unknown = -1
  *     byte = 0
  *     short = 1             # <<<<<<<<<<<<<<
  *     integer = 2
  *     long = 4
  */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_short, __pyx_int_1) < 0) __PYX_ERR(0, 395, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_short, __pyx_int_1) < 0) __PYX_ERR(0, 397, __pyx_L1_error)
 
-  /* "adios.pyx":396
+  /* "adios.pyx":398
  *     byte = 0
  *     short = 1
  *     integer = 2             # <<<<<<<<<<<<<<
  *     long = 4
  *     unsigned_byte = 50
  */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_integer, __pyx_int_2) < 0) __PYX_ERR(0, 396, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_integer, __pyx_int_2) < 0) __PYX_ERR(0, 398, __pyx_L1_error)
 
-  /* "adios.pyx":397
+  /* "adios.pyx":399
  *     short = 1
  *     integer = 2
  *     long = 4             # <<<<<<<<<<<<<<
  *     unsigned_byte = 50
  *     unsigned_short = 51
  */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_long, __pyx_int_4) < 0) __PYX_ERR(0, 397, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_long, __pyx_int_4) < 0) __PYX_ERR(0, 399, __pyx_L1_error)
 
-  /* "adios.pyx":398
+  /* "adios.pyx":400
  *     integer = 2
  *     long = 4
  *     unsigned_byte = 50             # <<<<<<<<<<<<<<
  *     unsigned_short = 51
  *     unsigned_integer = 52
  */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_unsigned_byte, __pyx_int_50) < 0) __PYX_ERR(0, 398, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_unsigned_byte, __pyx_int_50) < 0) __PYX_ERR(0, 400, __pyx_L1_error)
 
-  /* "adios.pyx":399
+  /* "adios.pyx":401
  *     long = 4
  *     unsigned_byte = 50
  *     unsigned_short = 51             # <<<<<<<<<<<<<<
  *     unsigned_integer = 52
  *     unsigned_long = 54
  */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_unsigned_short, __pyx_int_51) < 0) __PYX_ERR(0, 399, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_unsigned_short, __pyx_int_51) < 0) __PYX_ERR(0, 401, __pyx_L1_error)
 
-  /* "adios.pyx":400
+  /* "adios.pyx":402
  *     unsigned_byte = 50
  *     unsigned_short = 51
  *     unsigned_integer = 52             # <<<<<<<<<<<<<<
  *     unsigned_long = 54
  *     real = 5
  */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_unsigned_integer, __pyx_int_52) < 0) __PYX_ERR(0, 400, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_unsigned_integer, __pyx_int_52) < 0) __PYX_ERR(0, 402, __pyx_L1_error)
 
-  /* "adios.pyx":401
+  /* "adios.pyx":403
  *     unsigned_short = 51
  *     unsigned_integer = 52
  *     unsigned_long = 54             # <<<<<<<<<<<<<<
  *     real = 5
  *     double = 6
  */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_unsigned_long, __pyx_int_54) < 0) __PYX_ERR(0, 401, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_unsigned_long, __pyx_int_54) < 0) __PYX_ERR(0, 403, __pyx_L1_error)
 
-  /* "adios.pyx":402
+  /* "adios.pyx":404
  *     unsigned_integer = 52
  *     unsigned_long = 54
  *     real = 5             # <<<<<<<<<<<<<<
  *     double = 6
  *     long_double = 7
  */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_real, __pyx_int_5) < 0) __PYX_ERR(0, 402, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_real, __pyx_int_5) < 0) __PYX_ERR(0, 404, __pyx_L1_error)
 
-  /* "adios.pyx":403
+  /* "adios.pyx":405
  *     unsigned_long = 54
  *     real = 5
  *     double = 6             # <<<<<<<<<<<<<<
  *     long_double = 7
  *     string = 9
  */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_double, __pyx_int_6) < 0) __PYX_ERR(0, 403, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_double, __pyx_int_6) < 0) __PYX_ERR(0, 405, __pyx_L1_error)
 
-  /* "adios.pyx":404
+  /* "adios.pyx":406
  *     real = 5
  *     double = 6
  *     long_double = 7             # <<<<<<<<<<<<<<
  *     string = 9
  *     complex = 10
  */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_long_double, __pyx_int_7) < 0) __PYX_ERR(0, 404, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_long_double, __pyx_int_7) < 0) __PYX_ERR(0, 406, __pyx_L1_error)
 
-  /* "adios.pyx":405
+  /* "adios.pyx":407
  *     double = 6
  *     long_double = 7
  *     string = 9             # <<<<<<<<<<<<<<
  *     complex = 10
  *     double_complex = 11
  */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_string, __pyx_int_9) < 0) __PYX_ERR(0, 405, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_string, __pyx_int_9) < 0) __PYX_ERR(0, 407, __pyx_L1_error)
 
-  /* "adios.pyx":406
+  /* "adios.pyx":408
  *     long_double = 7
  *     string = 9
  *     complex = 10             # <<<<<<<<<<<<<<
  *     double_complex = 11
  *     string_array = 12
  */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_complex_2, __pyx_int_10) < 0) __PYX_ERR(0, 406, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_complex_2, __pyx_int_10) < 0) __PYX_ERR(0, 408, __pyx_L1_error)
 
-  /* "adios.pyx":407
+  /* "adios.pyx":409
  *     string = 9
  *     complex = 10
  *     double_complex = 11             # <<<<<<<<<<<<<<
  *     string_array = 12
  * 
  */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_double_complex, __pyx_int_11) < 0) __PYX_ERR(0, 407, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_double_complex, __pyx_int_11) < 0) __PYX_ERR(0, 409, __pyx_L1_error)
 
-  /* "adios.pyx":408
+  /* "adios.pyx":410
  *     complex = 10
  *     double_complex = 11
  *     string_array = 12             # <<<<<<<<<<<<<<
  * 
  * class FLAG:
  */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_string_array, __pyx_int_12) < 0) __PYX_ERR(0, 408, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_string_array, __pyx_int_12) < 0) __PYX_ERR(0, 410, __pyx_L1_error)
 
-  /* "adios.pyx":392
+  /* "adios.pyx":394
  * ## ====================
  * 
  * class DATATYPE:             # <<<<<<<<<<<<<<
  *     unknown = -1
  *     byte = 0
  */
-  __pyx_t_1 = __Pyx_Py3ClassCreate(((PyObject*)&__Pyx_DefaultClassType), __pyx_n_s_DATATYPE, __pyx_empty_tuple, __pyx_t_2, NULL, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 392, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_Py3ClassCreate(((PyObject*)&__Pyx_DefaultClassType), __pyx_n_s_DATATYPE, __pyx_empty_tuple, __pyx_t_2, NULL, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 394, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DATATYPE, __pyx_t_1) < 0) __PYX_ERR(0, 392, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DATATYPE, __pyx_t_1) < 0) __PYX_ERR(0, 394, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "adios.pyx":410
+  /* "adios.pyx":412
  *     string_array = 12
  * 
  * class FLAG:             # <<<<<<<<<<<<<<
  *     UNKNOWN = 0
  *     YES = 1
  */
-  __pyx_t_2 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_FLAG, __pyx_n_s_FLAG, (PyObject *) NULL, __pyx_n_s_adios, (PyObject *) NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 410, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_FLAG, __pyx_n_s_FLAG, (PyObject *) NULL, __pyx_n_s_adios, (PyObject *) NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 412, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
 
-  /* "adios.pyx":411
+  /* "adios.pyx":413
  * 
  * class FLAG:
  *     UNKNOWN = 0             # <<<<<<<<<<<<<<
  *     YES = 1
  *     NO = 2
  */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_UNKNOWN, __pyx_int_0) < 0) __PYX_ERR(0, 411, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_UNKNOWN, __pyx_int_0) < 0) __PYX_ERR(0, 413, __pyx_L1_error)
 
-  /* "adios.pyx":412
+  /* "adios.pyx":414
  * class FLAG:
  *     UNKNOWN = 0
  *     YES = 1             # <<<<<<<<<<<<<<
  *     NO = 2
  * 
  */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_YES, __pyx_int_1) < 0) __PYX_ERR(0, 412, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_YES, __pyx_int_1) < 0) __PYX_ERR(0, 414, __pyx_L1_error)
 
-  /* "adios.pyx":413
+  /* "adios.pyx":415
  *     UNKNOWN = 0
  *     YES = 1
  *     NO = 2             # <<<<<<<<<<<<<<
  * 
  * class BUFFER_ALLOC_WHEN:
  */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_NO, __pyx_int_2) < 0) __PYX_ERR(0, 413, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_NO, __pyx_int_2) < 0) __PYX_ERR(0, 415, __pyx_L1_error)
 
-  /* "adios.pyx":410
+  /* "adios.pyx":412
  *     string_array = 12
  * 
  * class FLAG:             # <<<<<<<<<<<<<<
  *     UNKNOWN = 0
  *     YES = 1
  */
-  __pyx_t_1 = __Pyx_Py3ClassCreate(((PyObject*)&__Pyx_DefaultClassType), __pyx_n_s_FLAG, __pyx_empty_tuple, __pyx_t_2, NULL, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 410, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_Py3ClassCreate(((PyObject*)&__Pyx_DefaultClassType), __pyx_n_s_FLAG, __pyx_empty_tuple, __pyx_t_2, NULL, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 412, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_FLAG, __pyx_t_1) < 0) __PYX_ERR(0, 410, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_FLAG, __pyx_t_1) < 0) __PYX_ERR(0, 412, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "adios.pyx":415
+  /* "adios.pyx":417
  *     NO = 2
  * 
  * class BUFFER_ALLOC_WHEN:             # <<<<<<<<<<<<<<
  *     UNKNOWN = 0
  *     NOW = 1
  */
-  __pyx_t_2 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_BUFFER_ALLOC_WHEN, __pyx_n_s_BUFFER_ALLOC_WHEN, (PyObject *) NULL, __pyx_n_s_adios, (PyObject *) NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 415, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_BUFFER_ALLOC_WHEN, __pyx_n_s_BUFFER_ALLOC_WHEN, (PyObject *) NULL, __pyx_n_s_adios, (PyObject *) NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 417, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
 
-  /* "adios.pyx":416
+  /* "adios.pyx":418
  * 
  * class BUFFER_ALLOC_WHEN:
  *     UNKNOWN = 0             # <<<<<<<<<<<<<<
  *     NOW = 1
  *     LATER = 2
  */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_UNKNOWN, __pyx_int_0) < 0) __PYX_ERR(0, 416, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_UNKNOWN, __pyx_int_0) < 0) __PYX_ERR(0, 418, __pyx_L1_error)
 
-  /* "adios.pyx":417
+  /* "adios.pyx":419
  * class BUFFER_ALLOC_WHEN:
  *     UNKNOWN = 0
  *     NOW = 1             # <<<<<<<<<<<<<<
  *     LATER = 2
  * 
  */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_NOW, __pyx_int_1) < 0) __PYX_ERR(0, 417, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_NOW, __pyx_int_1) < 0) __PYX_ERR(0, 419, __pyx_L1_error)
 
-  /* "adios.pyx":418
+  /* "adios.pyx":420
  *     UNKNOWN = 0
  *     NOW = 1
  *     LATER = 2             # <<<<<<<<<<<<<<
  * 
  * class READ_METHOD:
  */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_LATER, __pyx_int_2) < 0) __PYX_ERR(0, 418, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_LATER, __pyx_int_2) < 0) __PYX_ERR(0, 420, __pyx_L1_error)
 
-  /* "adios.pyx":415
+  /* "adios.pyx":417
  *     NO = 2
  * 
  * class BUFFER_ALLOC_WHEN:             # <<<<<<<<<<<<<<
  *     UNKNOWN = 0
  *     NOW = 1
  */
-  __pyx_t_1 = __Pyx_Py3ClassCreate(((PyObject*)&__Pyx_DefaultClassType), __pyx_n_s_BUFFER_ALLOC_WHEN, __pyx_empty_tuple, __pyx_t_2, NULL, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 415, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_Py3ClassCreate(((PyObject*)&__Pyx_DefaultClassType), __pyx_n_s_BUFFER_ALLOC_WHEN, __pyx_empty_tuple, __pyx_t_2, NULL, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 417, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_BUFFER_ALLOC_WHEN, __pyx_t_1) < 0) __PYX_ERR(0, 415, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_BUFFER_ALLOC_WHEN, __pyx_t_1) < 0) __PYX_ERR(0, 417, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "adios.pyx":420
+  /* "adios.pyx":422
  *     LATER = 2
  * 
  * class READ_METHOD:             # <<<<<<<<<<<<<<
  *     BP            = 0
  *     BP_AGGREGATE  = 1
  */
-  __pyx_t_2 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_READ_METHOD, __pyx_n_s_READ_METHOD, (PyObject *) NULL, __pyx_n_s_adios, (PyObject *) NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 420, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_READ_METHOD, __pyx_n_s_READ_METHOD, (PyObject *) NULL, __pyx_n_s_adios, (PyObject *) NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 422, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
 
-  /* "adios.pyx":421
+  /* "adios.pyx":423
  * 
  * class READ_METHOD:
  *     BP            = 0             # <<<<<<<<<<<<<<
  *     BP_AGGREGATE  = 1
  *     DATASPACES    = 3
  */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_BP, __pyx_int_0) < 0) __PYX_ERR(0, 421, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_BP, __pyx_int_0) < 0) __PYX_ERR(0, 423, __pyx_L1_error)
 
-  /* "adios.pyx":422
+  /* "adios.pyx":424
  * class READ_METHOD:
  *     BP            = 0
  *     BP_AGGREGATE  = 1             # <<<<<<<<<<<<<<
  *     DATASPACES    = 3
  *     DIMES         = 4
  */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_BP_AGGREGATE, __pyx_int_1) < 0) __PYX_ERR(0, 422, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_BP_AGGREGATE, __pyx_int_1) < 0) __PYX_ERR(0, 424, __pyx_L1_error)
 
-  /* "adios.pyx":423
+  /* "adios.pyx":425
  *     BP            = 0
  *     BP_AGGREGATE  = 1
  *     DATASPACES    = 3             # <<<<<<<<<<<<<<
  *     DIMES         = 4
  *     FLEXPATH      = 5
  */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_DATASPACES, __pyx_int_3) < 0) __PYX_ERR(0, 423, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_DATASPACES, __pyx_int_3) < 0) __PYX_ERR(0, 425, __pyx_L1_error)
 
-  /* "adios.pyx":424
+  /* "adios.pyx":426
  *     BP_AGGREGATE  = 1
  *     DATASPACES    = 3
  *     DIMES         = 4             # <<<<<<<<<<<<<<
  *     FLEXPATH      = 5
  *     ICEE          = 6
  */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_DIMES, __pyx_int_4) < 0) __PYX_ERR(0, 424, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_DIMES, __pyx_int_4) < 0) __PYX_ERR(0, 426, __pyx_L1_error)
 
-  /* "adios.pyx":425
+  /* "adios.pyx":427
  *     DATASPACES    = 3
  *     DIMES         = 4
  *     FLEXPATH      = 5             # <<<<<<<<<<<<<<
  *     ICEE          = 6
  * 
  */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_FLEXPATH, __pyx_int_5) < 0) __PYX_ERR(0, 425, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_FLEXPATH, __pyx_int_5) < 0) __PYX_ERR(0, 427, __pyx_L1_error)
 
-  /* "adios.pyx":426
+  /* "adios.pyx":428
  *     DIMES         = 4
  *     FLEXPATH      = 5
  *     ICEE          = 6             # <<<<<<<<<<<<<<
  * 
  * class LOCKMODE:
  */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_ICEE, __pyx_int_6) < 0) __PYX_ERR(0, 426, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_ICEE, __pyx_int_6) < 0) __PYX_ERR(0, 428, __pyx_L1_error)
 
-  /* "adios.pyx":420
+  /* "adios.pyx":422
  *     LATER = 2
  * 
  * class READ_METHOD:             # <<<<<<<<<<<<<<
  *     BP            = 0
  *     BP_AGGREGATE  = 1
  */
-  __pyx_t_1 = __Pyx_Py3ClassCreate(((PyObject*)&__Pyx_DefaultClassType), __pyx_n_s_READ_METHOD, __pyx_empty_tuple, __pyx_t_2, NULL, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 420, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_Py3ClassCreate(((PyObject*)&__Pyx_DefaultClassType), __pyx_n_s_READ_METHOD, __pyx_empty_tuple, __pyx_t_2, NULL, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 422, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_READ_METHOD, __pyx_t_1) < 0) __PYX_ERR(0, 420, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_READ_METHOD, __pyx_t_1) < 0) __PYX_ERR(0, 422, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "adios.pyx":428
+  /* "adios.pyx":430
  *     ICEE          = 6
  * 
  * class LOCKMODE:             # <<<<<<<<<<<<<<
  *     NONE = 0
  *     CURRENT = 1
  */
-  __pyx_t_2 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_LOCKMODE, __pyx_n_s_LOCKMODE, (PyObject *) NULL, __pyx_n_s_adios, (PyObject *) NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 428, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_LOCKMODE, __pyx_n_s_LOCKMODE, (PyObject *) NULL, __pyx_n_s_adios, (PyObject *) NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 430, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
 
-  /* "adios.pyx":429
+  /* "adios.pyx":431
  * 
  * class LOCKMODE:
  *     NONE = 0             # <<<<<<<<<<<<<<
  *     CURRENT = 1
  *     ALL =2
  */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_NONE, __pyx_int_0) < 0) __PYX_ERR(0, 429, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_NONE, __pyx_int_0) < 0) __PYX_ERR(0, 431, __pyx_L1_error)
 
-  /* "adios.pyx":430
+  /* "adios.pyx":432
  * class LOCKMODE:
  *     NONE = 0
  *     CURRENT = 1             # <<<<<<<<<<<<<<
  *     ALL =2
  * 
  */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_CURRENT, __pyx_int_1) < 0) __PYX_ERR(0, 430, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_CURRENT, __pyx_int_1) < 0) __PYX_ERR(0, 432, __pyx_L1_error)
 
-  /* "adios.pyx":431
+  /* "adios.pyx":433
  *     NONE = 0
  *     CURRENT = 1
  *     ALL =2             # <<<<<<<<<<<<<<
  * 
- * cpdef __parse_index(index, ndim):
+ * class STATISTICS:
  */
-  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_ALL, __pyx_int_2) < 0) __PYX_ERR(0, 431, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_ALL, __pyx_int_2) < 0) __PYX_ERR(0, 433, __pyx_L1_error)
 
-  /* "adios.pyx":428
+  /* "adios.pyx":430
  *     ICEE          = 6
  * 
  * class LOCKMODE:             # <<<<<<<<<<<<<<
  *     NONE = 0
  *     CURRENT = 1
  */
-  __pyx_t_1 = __Pyx_Py3ClassCreate(((PyObject*)&__Pyx_DefaultClassType), __pyx_n_s_LOCKMODE, __pyx_empty_tuple, __pyx_t_2, NULL, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 428, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_Py3ClassCreate(((PyObject*)&__Pyx_DefaultClassType), __pyx_n_s_LOCKMODE, __pyx_empty_tuple, __pyx_t_2, NULL, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 430, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_LOCKMODE, __pyx_t_1) < 0) __PYX_ERR(0, 428, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_LOCKMODE, __pyx_t_1) < 0) __PYX_ERR(0, 430, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "adios.pyx":465
+  /* "adios.pyx":435
+ *     ALL =2
+ * 
+ * class STATISTICS:             # <<<<<<<<<<<<<<
+ *     NONE = adios_stat_no
+ *     MINMAX = adios_stat_minmax
+ */
+  __pyx_t_2 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_STATISTICS, __pyx_n_s_STATISTICS, (PyObject *) NULL, __pyx_n_s_adios, (PyObject *) NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 435, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+
+  /* "adios.pyx":436
+ * 
+ * class STATISTICS:
+ *     NONE = adios_stat_no             # <<<<<<<<<<<<<<
+ *     MINMAX = adios_stat_minmax
+ *     FULL = adios_stat_full
+ */
+  __pyx_t_1 = __Pyx_PyInt_From_ADIOS_STATISTICS_FLAG(adios_stat_no); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 436, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_NONE, __pyx_t_1) < 0) __PYX_ERR(0, 436, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  /* "adios.pyx":437
+ * class STATISTICS:
+ *     NONE = adios_stat_no
+ *     MINMAX = adios_stat_minmax             # <<<<<<<<<<<<<<
+ *     FULL = adios_stat_full
+ *     DEFAULT = adios_stat_default
+ */
+  __pyx_t_1 = __Pyx_PyInt_From_ADIOS_STATISTICS_FLAG(adios_stat_minmax); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 437, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_MINMAX, __pyx_t_1) < 0) __PYX_ERR(0, 437, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  /* "adios.pyx":438
+ *     NONE = adios_stat_no
+ *     MINMAX = adios_stat_minmax
+ *     FULL = adios_stat_full             # <<<<<<<<<<<<<<
+ *     DEFAULT = adios_stat_default
+ * 
+ */
+  __pyx_t_1 = __Pyx_PyInt_From_ADIOS_STATISTICS_FLAG(adios_stat_full); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 438, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_FULL, __pyx_t_1) < 0) __PYX_ERR(0, 438, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  /* "adios.pyx":439
+ *     MINMAX = adios_stat_minmax
+ *     FULL = adios_stat_full
+ *     DEFAULT = adios_stat_default             # <<<<<<<<<<<<<<
+ * 
+ * cpdef __parse_index(index, ndim):
+ */
+  __pyx_t_1 = __Pyx_PyInt_From_ADIOS_STATISTICS_FLAG(adios_stat_default); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 439, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_DEFAULT, __pyx_t_1) < 0) __PYX_ERR(0, 439, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  /* "adios.pyx":435
+ *     ALL =2
+ * 
+ * class STATISTICS:             # <<<<<<<<<<<<<<
+ *     NONE = adios_stat_no
+ *     MINMAX = adios_stat_minmax
+ */
+  __pyx_t_1 = __Pyx_Py3ClassCreate(((PyObject*)&__Pyx_DefaultClassType), __pyx_n_s_STATISTICS, __pyx_empty_tuple, __pyx_t_2, NULL, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 435, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_STATISTICS, __pyx_t_1) < 0) __PYX_ERR(0, 435, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "adios.pyx":473
  * cdef MPI_Comm read_init_comm
  * 
  * cpdef init(str config, MPI_Comm comm = MPI_COMM_WORLD):             # <<<<<<<<<<<<<<
@@ -42037,7 +44234,7 @@ PyMODINIT_FUNC PyInit_adios(void)
   __pyx_k__7 = MPI_COMM_WORLD;
   __pyx_k__7 = MPI_COMM_WORLD;
 
-  /* "adios.pyx":473
+  /* "adios.pyx":481
  *                    str name,
  *                    str mode,
  *                    MPI_Comm comm = MPI_COMM_WORLD):             # <<<<<<<<<<<<<<
@@ -42046,7 +44243,7 @@ PyMODINIT_FUNC PyInit_adios(void)
  */
   __pyx_k__8 = MPI_COMM_WORLD;
 
-  /* "adios.pyx":470
+  /* "adios.pyx":478
  *     return adios_init(s2b(config), init_comm)
  * 
  * cpdef int64_t open(str group_name,             # <<<<<<<<<<<<<<
@@ -42055,7 +44252,7 @@ PyMODINIT_FUNC PyInit_adios(void)
  */
   __pyx_k__8 = MPI_COMM_WORLD;
 
-  /* "adios.pyx":532
+  /* "adios.pyx":540
  * ## ====================
  * 
  * cpdef int init_noxml(MPI_Comm comm = MPI_COMM_WORLD):             # <<<<<<<<<<<<<<
@@ -42065,7 +44262,7 @@ PyMODINIT_FUNC PyInit_adios(void)
   __pyx_k__9 = MPI_COMM_WORLD;
   __pyx_k__9 = MPI_COMM_WORLD;
 
-  /* "adios.pyx":544
+  /* "adios.pyx":552
  * cpdef int64_t declare_group(str name,
  *                             str time_index = "",
  *                             int stats = adios_stat_default):             # <<<<<<<<<<<<<<
@@ -42074,7 +44271,7 @@ PyMODINIT_FUNC PyInit_adios(void)
  */
   __pyx_k__11 = adios_stat_default;
 
-  /* "adios.pyx":542
+  /* "adios.pyx":550
  *                                  buffer_size)
  * 
  * cpdef int64_t declare_group(str name,             # <<<<<<<<<<<<<<
@@ -42083,7 +44280,7 @@ PyMODINIT_FUNC PyInit_adios(void)
  */
   __pyx_k__11 = adios_stat_default;
 
-  /* "adios.pyx":876
+  /* "adios.pyx":884
  * """ Call adios_read_init_method """
  * cpdef int read_init(str method_name = "BP",
  *                     MPI_Comm comm = MPI_COMM_WORLD,             # <<<<<<<<<<<<<<
@@ -42092,7 +44289,7 @@ PyMODINIT_FUNC PyInit_adios(void)
  */
   __pyx_k__12 = MPI_COMM_WORLD;
 
-  /* "adios.pyx":875
+  /* "adios.pyx":883
  * 
  * """ Call adios_read_init_method """
  * cpdef int read_init(str method_name = "BP",             # <<<<<<<<<<<<<<
@@ -42101,7 +44298,7 @@ PyMODINIT_FUNC PyInit_adios(void)
  */
   __pyx_k__12 = MPI_COMM_WORLD;
 
-  /* "adios.pyx":997
+  /* "adios.pyx":1005
  *     def __init__(self, str fname,
  *                  str method_name = "BP",
  *                  MPI_Comm comm = MPI_COMM_WORLD,             # <<<<<<<<<<<<<<
@@ -42110,7 +44307,7 @@ PyMODINIT_FUNC PyInit_adios(void)
  */
   __pyx_k__16 = MPI_COMM_WORLD;
 
-  /* "adios.pyx":999
+  /* "adios.pyx":1007
  *                  MPI_Comm comm = MPI_COMM_WORLD,
  *                  is_stream = False,
  *                  ADIOS_LOCKMODE lock_mode = ADIOS_LOCKMODE_ALL,             # <<<<<<<<<<<<<<
@@ -42119,169 +44316,187 @@ PyMODINIT_FUNC PyInit_adios(void)
  */
   __pyx_k__17 = ADIOS_LOCKMODE_ALL;
 
-  /* "adios.pyx":1964
+  /* "adios.pyx":1973
  *                  bint is_noxml = True,
  *                  str mode = "w",
- *                  MPI_Comm comm = MPI_COMM_WORLD):             # <<<<<<<<<<<<<<
- *         self.gid = 0
- *         self.fname = fname
+ *                  int stats = adios_stat_default,             # <<<<<<<<<<<<<<
+ *                  MPI_Comm comm = MPI_COMM_WORLD,
+ *                  str method = "POSIX1",
  */
-  __pyx_k__54 = MPI_COMM_WORLD;
+  __pyx_k__54 = adios_stat_default;
 
-  /* "adios.pyx":2021
+  /* "adios.pyx":1974
+ *                  str mode = "w",
+ *                  int stats = adios_stat_default,
+ *                  MPI_Comm comm = MPI_COMM_WORLD,             # <<<<<<<<<<<<<<
+ *                  str method = "POSIX1",
+ *                  str method_params = ""):
+ */
+  __pyx_k__55 = MPI_COMM_WORLD;
+
+  /* "adios.pyx":1999
+ *                       str method = "POSIX1",
+ *                       str method_params = "",
+ *                       int stats = adios_stat_default):             # <<<<<<<<<<<<<<
+ *         """
+ *         Define a group associated with the file.
+ */
+  __pyx_k__56 = adios_stat_default;
+
+  /* "adios.pyx":2042
  * 
  *     def define_var(self, str varname,
  *                    ldim = tuple(),             # <<<<<<<<<<<<<<
  *                    gdim = tuple(),
  *                    offset = tuple(),
  */
-  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)(&PyTuple_Type)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2021, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)(&PyTuple_Type)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2042, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_k__55 = __pyx_t_2;
+  __pyx_k__57 = __pyx_t_2;
   __Pyx_GIVEREF(__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "adios.pyx":2022
+  /* "adios.pyx":2043
  *     def define_var(self, str varname,
  *                    ldim = tuple(),
  *                    gdim = tuple(),             # <<<<<<<<<<<<<<
  *                    offset = tuple(),
  *                    transform = None):
  */
-  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)(&PyTuple_Type)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2022, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)(&PyTuple_Type)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2043, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_k__56 = __pyx_t_2;
+  __pyx_k__58 = __pyx_t_2;
   __Pyx_GIVEREF(__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "adios.pyx":2023
+  /* "adios.pyx":2044
  *                    ldim = tuple(),
  *                    gdim = tuple(),
  *                    offset = tuple(),             # <<<<<<<<<<<<<<
  *                    transform = None):
  *         """
  */
-  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)(&PyTuple_Type)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2023, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)(&PyTuple_Type)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2044, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_k__57 = __pyx_t_2;
+  __pyx_k__59 = __pyx_t_2;
   __Pyx_GIVEREF(__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "adios.pyx":2219
+  /* "adios.pyx":2240
  * 
  *     def __init__(self, str name,
  *                  ldim = tuple(),             # <<<<<<<<<<<<<<
  *                  gdim = tuple(),
  *                  offset = tuple(),
  */
-  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)(&PyTuple_Type)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2219, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)(&PyTuple_Type)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2240, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_k__59 = __pyx_t_2;
+  __pyx_k__61 = __pyx_t_2;
   __Pyx_GIVEREF(__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "adios.pyx":2220
+  /* "adios.pyx":2241
  *     def __init__(self, str name,
  *                  ldim = tuple(),
  *                  gdim = tuple(),             # <<<<<<<<<<<<<<
  *                  offset = tuple(),
  *                  value = None,
  */
-  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)(&PyTuple_Type)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2220, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)(&PyTuple_Type)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2241, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_k__60 = __pyx_t_2;
+  __pyx_k__62 = __pyx_t_2;
   __Pyx_GIVEREF(__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "adios.pyx":2221
+  /* "adios.pyx":2242
  *                  ldim = tuple(),
  *                  gdim = tuple(),
  *                  offset = tuple(),             # <<<<<<<<<<<<<<
  *                  value = None,
  *                  transform = None):
  */
-  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)(&PyTuple_Type)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2221, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)(&PyTuple_Type)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2242, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_k__61 = __pyx_t_2;
+  __pyx_k__63 = __pyx_t_2;
   __Pyx_GIVEREF(__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "adios.pyx":2281
+  /* "adios.pyx":2307
  * 
  * ## Aliases
  * File = file             # <<<<<<<<<<<<<<
  * Var = var
  * Attr = attr
  */
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_File, ((PyObject *)__pyx_ptype_5adios_file)) < 0) __PYX_ERR(0, 2281, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_File, ((PyObject *)__pyx_ptype_5adios_file)) < 0) __PYX_ERR(0, 2307, __pyx_L1_error)
 
-  /* "adios.pyx":2282
+  /* "adios.pyx":2308
  * ## Aliases
  * File = file
  * Var = var             # <<<<<<<<<<<<<<
  * Attr = attr
  * Writer = writer
  */
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Var, ((PyObject *)__pyx_ptype_5adios_var)) < 0) __PYX_ERR(0, 2282, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Var, ((PyObject *)__pyx_ptype_5adios_var)) < 0) __PYX_ERR(0, 2308, __pyx_L1_error)
 
-  /* "adios.pyx":2283
+  /* "adios.pyx":2309
  * File = file
  * Var = var
  * Attr = attr             # <<<<<<<<<<<<<<
  * Writer = writer
  * Attrinfo = attrinfo
  */
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Attr, ((PyObject *)__pyx_ptype_5adios_attr)) < 0) __PYX_ERR(0, 2283, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Attr, ((PyObject *)__pyx_ptype_5adios_attr)) < 0) __PYX_ERR(0, 2309, __pyx_L1_error)
 
-  /* "adios.pyx":2284
+  /* "adios.pyx":2310
  * Var = var
  * Attr = attr
  * Writer = writer             # <<<<<<<<<<<<<<
  * Attrinfo = attrinfo
  * Varinfo = varinfo
  */
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Writer, ((PyObject *)__pyx_ptype_5adios_writer)) < 0) __PYX_ERR(0, 2284, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Writer, ((PyObject *)__pyx_ptype_5adios_writer)) < 0) __PYX_ERR(0, 2310, __pyx_L1_error)
 
-  /* "adios.pyx":2285
+  /* "adios.pyx":2311
  * Attr = attr
  * Writer = writer
  * Attrinfo = attrinfo             # <<<<<<<<<<<<<<
  * Varinfo = varinfo
  * 
  */
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Attrinfo, ((PyObject *)__pyx_ptype_5adios_attrinfo)) < 0) __PYX_ERR(0, 2285, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Attrinfo, ((PyObject *)__pyx_ptype_5adios_attrinfo)) < 0) __PYX_ERR(0, 2311, __pyx_L1_error)
 
-  /* "adios.pyx":2286
+  /* "adios.pyx":2312
  * Writer = writer
  * Attrinfo = attrinfo
  * Varinfo = varinfo             # <<<<<<<<<<<<<<
  * 
  * ## ====================
  */
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Varinfo, ((PyObject *)__pyx_ptype_5adios_varinfo)) < 0) __PYX_ERR(0, 2286, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Varinfo, ((PyObject *)__pyx_ptype_5adios_varinfo)) < 0) __PYX_ERR(0, 2312, __pyx_L1_error)
 
-  /* "adios.pyx":2292
+  /* "adios.pyx":2318
  * ## ====================
  * 
  * def readvar(fname, varname):             # <<<<<<<<<<<<<<
  *     """ Retrieve a variable value from an Adios file.
  * 
  */
-  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5adios_93readvar, NULL, __pyx_n_s_adios); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2292, __pyx_L1_error)
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5adios_93readvar, NULL, __pyx_n_s_adios); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2318, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_readvar_2, __pyx_t_2) < 0) __PYX_ERR(0, 2292, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_readvar_2, __pyx_t_2) < 0) __PYX_ERR(0, 2318, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "adios.pyx":2306
+  /* "adios.pyx":2332
  *     return v.read(from_steps=0, nsteps=v.nsteps)
  * 
  * def bpls(fname):             # <<<<<<<<<<<<<<
  *     """ Return meta data of an Adios file as a Python dictionary object.
  * 
  */
-  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5adios_95bpls, NULL, __pyx_n_s_adios); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2306, __pyx_L1_error)
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5adios_95bpls, NULL, __pyx_n_s_adios); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2332, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_bpls, __pyx_t_2) < 0) __PYX_ERR(0, 2306, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_bpls, __pyx_t_2) < 0) __PYX_ERR(0, 2332, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
   /* "adios.pyx":1
@@ -42291,18 +44506,18 @@ PyMODINIT_FUNC PyInit_adios(void)
  */
   __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_kp_u_var_read_line_1457, __pyx_kp_u_Perform_read_Read_data_from_an) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
-  if (PyDict_SetItem(__pyx_t_2, __pyx_kp_u_writer_declare_group_line_1983, __pyx_kp_u_Define_a_group_associated_with) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
-  if (PyDict_SetItem(__pyx_t_2, __pyx_kp_u_writer_define_var_line_2020, __pyx_kp_u_Define_a_variable_associated_wi) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_kp_u_var_read_line_1465, __pyx_kp_u_Perform_read_Read_data_from_an) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_kp_u_writer_declare_group_line_1996, __pyx_kp_u_Define_a_group_associated_with) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_kp_u_writer_define_var_line_2041, __pyx_kp_u_Define_a_variable_associated_wi) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
   if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_2) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":976
- *      arr.base = baseptr
+  /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":997
+ *         raise ImportError("numpy.core.umath failed to import")
  * 
- * cdef inline object get_array_base(ndarray arr):             # <<<<<<<<<<<<<<
- *     if arr.base is NULL:
- *         return None
+ * cdef inline int import_ufunc() except -1:             # <<<<<<<<<<<<<<
+ *     try:
+ *         _import_umath()
  */
 
   /*--- Wrapped vars code ---*/
@@ -42360,6 +44575,144 @@ static PyObject *__Pyx_GetBuiltinName(PyObject *name) {
     return result;
 }
 
+/* PyCFunctionFastCall */
+#if CYTHON_FAST_PYCCALL
+static CYTHON_INLINE PyObject * __Pyx_PyCFunction_FastCall(PyObject *func_obj, PyObject **args, Py_ssize_t nargs) {
+    PyCFunctionObject *func = (PyCFunctionObject*)func_obj;
+    PyCFunction meth = PyCFunction_GET_FUNCTION(func);
+    PyObject *self = PyCFunction_GET_SELF(func);
+    assert(PyCFunction_Check(func));
+    assert(METH_FASTCALL == (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST)));
+    assert(nargs >= 0);
+    assert(nargs == 0 || args != NULL);
+    /* _PyCFunction_FastCallDict() must not be called with an exception set,
+       because it may clear it (directly or indirectly) and so the
+       caller loses its exception */
+    assert(!PyErr_Occurred());
+    return (*((__Pyx_PyCFunctionFast)meth)) (self, args, nargs, NULL);
+}
+#endif  // CYTHON_FAST_PYCCALL
+
+/* PyFunctionFastCall */
+#if CYTHON_FAST_PYCALL
+#include "frameobject.h"
+static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObject **args, Py_ssize_t na,
+                                               PyObject *globals) {
+    PyFrameObject *f;
+    PyThreadState *tstate = PyThreadState_GET();
+    PyObject **fastlocals;
+    Py_ssize_t i;
+    PyObject *result;
+    assert(globals != NULL);
+    /* XXX Perhaps we should create a specialized
+       PyFrame_New() that doesn't take locals, but does
+       take builtins without sanity checking them.
+       */
+    assert(tstate != NULL);
+    f = PyFrame_New(tstate, co, globals, NULL);
+    if (f == NULL) {
+        return NULL;
+    }
+    fastlocals = f->f_localsplus;
+    for (i = 0; i < na; i++) {
+        Py_INCREF(*args);
+        fastlocals[i] = *args++;
+    }
+    result = PyEval_EvalFrameEx(f,0);
+    ++tstate->recursion_depth;
+    Py_DECREF(f);
+    --tstate->recursion_depth;
+    return result;
+}
+#if 1 || PY_VERSION_HEX < 0x030600B1
+static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, int nargs, PyObject *kwargs) {
+    PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func);
+    PyObject *globals = PyFunction_GET_GLOBALS(func);
+    PyObject *argdefs = PyFunction_GET_DEFAULTS(func);
+    PyObject *closure;
+#if PY_MAJOR_VERSION >= 3
+    PyObject *kwdefs;
+#endif
+    PyObject *kwtuple, **k;
+    PyObject **d;
+    Py_ssize_t nd;
+    Py_ssize_t nk;
+    PyObject *result;
+    assert(kwargs == NULL || PyDict_Check(kwargs));
+    nk = kwargs ? PyDict_Size(kwargs) : 0;
+    if (Py_EnterRecursiveCall((char*)" while calling a Python object")) {
+        return NULL;
+    }
+    if (
+#if PY_MAJOR_VERSION >= 3
+            co->co_kwonlyargcount == 0 &&
+#endif
+            likely(kwargs == NULL || nk == 0) &&
+            co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) {
+        if (argdefs == NULL && co->co_argcount == nargs) {
+            result = __Pyx_PyFunction_FastCallNoKw(co, args, nargs, globals);
+            goto done;
+        }
+        else if (nargs == 0 && argdefs != NULL
+                 && co->co_argcount == Py_SIZE(argdefs)) {
+            /* function called with no arguments, but all parameters have
+               a default value: use default values as arguments .*/
+            args = &PyTuple_GET_ITEM(argdefs, 0);
+            result =__Pyx_PyFunction_FastCallNoKw(co, args, Py_SIZE(argdefs), globals);
+            goto done;
+        }
+    }
+    if (kwargs != NULL) {
+        Py_ssize_t pos, i;
+        kwtuple = PyTuple_New(2 * nk);
+        if (kwtuple == NULL) {
+            result = NULL;
+            goto done;
+        }
+        k = &PyTuple_GET_ITEM(kwtuple, 0);
+        pos = i = 0;
+        while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) {
+            Py_INCREF(k[i]);
+            Py_INCREF(k[i+1]);
+            i += 2;
+        }
+        nk = i / 2;
+    }
+    else {
+        kwtuple = NULL;
+        k = NULL;
+    }
+    closure = PyFunction_GET_CLOSURE(func);
+#if PY_MAJOR_VERSION >= 3
+    kwdefs = PyFunction_GET_KW_DEFAULTS(func);
+#endif
+    if (argdefs != NULL) {
+        d = &PyTuple_GET_ITEM(argdefs, 0);
+        nd = Py_SIZE(argdefs);
+    }
+    else {
+        d = NULL;
+        nd = 0;
+    }
+#if PY_MAJOR_VERSION >= 3
+    result = PyEval_EvalCodeEx((PyObject*)co, globals, (PyObject *)NULL,
+                               args, nargs,
+                               k, (int)nk,
+                               d, (int)nd, kwdefs, closure);
+#else
+    result = PyEval_EvalCodeEx(co, globals, (PyObject *)NULL,
+                               args, nargs,
+                               k, (int)nk,
+                               d, (int)nd, closure);
+#endif
+    Py_XDECREF(kwtuple);
+done:
+    Py_LeaveRecursiveCall();
+    return result;
+}
+#endif  // CPython < 3.6
+#endif  // CYTHON_FAST_PYCALL
+
 /* PyObjectCall */
 #if CYTHON_COMPILING_IN_CPYTHON
 static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) {
@@ -42413,6 +44766,11 @@ static PyObject* __Pyx__PyObject_CallOneArg(PyObject *func, PyObject *arg) {
     return result;
 }
 static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) {
+#if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(func)) {
+        return __Pyx_PyFunction_FastCall(func, &arg, 1);
+    }
+#endif
 #ifdef __Pyx_CyFunction_USED
     if (likely(PyCFunction_Check(func) || PyObject_TypeCheck(func, __pyx_CyFunctionType))) {
 #else
@@ -42420,6 +44778,10 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObjec
 #endif
         if (likely(PyCFunction_GET_FLAGS(func) & METH_O)) {
             return __Pyx_PyObject_CallMethO(func, arg);
+#if CYTHON_FAST_PYCCALL
+        } else if (PyCFunction_GET_FLAGS(func) & METH_FASTCALL) {
+            return __Pyx_PyCFunction_FastCall(func, &arg, 1);
+#endif
         }
     }
     return __Pyx__PyObject_CallOneArg(func, arg);
@@ -42438,6 +44800,11 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObjec
 /* PyObjectCallNoArg */
   #if CYTHON_COMPILING_IN_CPYTHON
 static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) {
+#if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(func)) {
+        return __Pyx_PyFunction_FastCall(func, NULL, 0);
+    }
+#endif
 #ifdef __Pyx_CyFunction_USED
     if (likely(PyCFunction_Check(func) || PyObject_TypeCheck(func, __pyx_CyFunctionType))) {
 #else
@@ -42452,7 +44819,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) {
 #endif
 
 /* PyErrFetchRestore */
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_FAST_THREAD_STATE
 static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) {
     PyObject *tmp_type, *tmp_value, *tmp_tb;
     tmp_type = tstate->curexc_type;
@@ -42576,7 +44943,7 @@ static CYTHON_INLINE int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, in
         Py_ssize_t cstart, Py_ssize_t cstop,
         PyObject** _py_start, PyObject** _py_stop, PyObject** _py_slice,
         int has_cstart, int has_cstop, CYTHON_UNUSED int wraparound) {
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_USE_TYPE_SLOTS
     PyMappingMethods* mp;
 #if PY_MAJOR_VERSION < 3
     PySequenceMethods* ms = Py_TYPE(obj)->tp_as_sequence;
@@ -42652,7 +45019,7 @@ static CYTHON_INLINE int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, in
             Py_XDECREF(owned_stop);
             if (unlikely(!py_slice)) goto bad;
         }
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_USE_TYPE_SLOTS
         result = mp->mp_subscript(obj, py_slice);
 #else
         result = PyObject_GetItem(obj, py_slice);
@@ -42679,7 +45046,7 @@ bad:
 static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i,
                                                               CYTHON_NCP_UNUSED int wraparound,
                                                               CYTHON_NCP_UNUSED int boundscheck) {
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (wraparound & unlikely(i < 0)) i += PyList_GET_SIZE(o);
     if ((!boundscheck) || likely((0 <= i) & (i < PyList_GET_SIZE(o)))) {
         PyObject *r = PyList_GET_ITEM(o, i);
@@ -42694,7 +45061,7 @@ static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_
 static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i,
                                                               CYTHON_NCP_UNUSED int wraparound,
                                                               CYTHON_NCP_UNUSED int boundscheck) {
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (wraparound & unlikely(i < 0)) i += PyTuple_GET_SIZE(o);
     if ((!boundscheck) || likely((0 <= i) & (i < PyTuple_GET_SIZE(o)))) {
         PyObject *r = PyTuple_GET_ITEM(o, i);
@@ -42709,7 +45076,7 @@ static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize
 static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list,
                                                      CYTHON_NCP_UNUSED int wraparound,
                                                      CYTHON_NCP_UNUSED int boundscheck) {
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS
     if (is_list || PyList_CheckExact(o)) {
         Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o);
         if ((!boundscheck) || (likely((n >= 0) & (n < PyList_GET_SIZE(o))))) {
@@ -42750,7 +45117,7 @@ static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i,
 }
 
 /* PyIntBinop */
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if !CYTHON_COMPILING_IN_PYPY
 static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED long intval, CYTHON_UNUSED int inplace) {
     #if PY_MAJOR_VERSION < 3
     if (likely(PyInt_CheckExact(op1))) {
@@ -42763,12 +45130,14 @@ static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED
             return PyLong_Type.tp_as_number->nb_add(op1, op2);
     }
     #endif
-    #if CYTHON_USE_PYLONG_INTERNALS && PY_MAJOR_VERSION >= 3
+    #if CYTHON_USE_PYLONG_INTERNALS
     if (likely(PyLong_CheckExact(op1))) {
         const long b = intval;
         long a, x;
+#ifdef HAVE_LONG_LONG
         const PY_LONG_LONG llb = intval;
         PY_LONG_LONG lla, llx;
+#endif
         const digit* digits = ((PyLongObject*)op1)->ob_digit;
         const Py_ssize_t size = Py_SIZE(op1);
         if (likely(__Pyx_sst_abs(size) <= 1)) {
@@ -42780,58 +45149,74 @@ static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED
                     if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
                         a = -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                         break;
+#ifdef HAVE_LONG_LONG
                     } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) {
                         lla = -(PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                         goto long_long;
+#endif
                     }
                 case 2:
                     if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
                         a = (long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                         break;
+#ifdef HAVE_LONG_LONG
                     } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) {
                         lla = (PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                         goto long_long;
+#endif
                     }
                 case -3:
                     if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
                         a = -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                         break;
+#ifdef HAVE_LONG_LONG
                     } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) {
                         lla = -(PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                         goto long_long;
+#endif
                     }
                 case 3:
                     if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
                         a = (long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                         break;
+#ifdef HAVE_LONG_LONG
                     } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) {
                         lla = (PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                         goto long_long;
+#endif
                     }
                 case -4:
                     if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) {
                         a = -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                         break;
+#ifdef HAVE_LONG_LONG
                     } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) {
                         lla = -(PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                         goto long_long;
+#endif
                     }
                 case 4:
                     if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) {
                         a = (long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                         break;
+#ifdef HAVE_LONG_LONG
                     } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) {
                         lla = (PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                         goto long_long;
+#endif
                     }
                 default: return PyLong_Type.tp_as_number->nb_add(op1, op2);
             }
         }
                 x = a + b;
             return PyLong_FromLong(x);
+#ifdef HAVE_LONG_LONG
         long_long:
                 llx = lla + llb;
             return PyLong_FromLongLong(llx);
+#endif
+        
+        
     }
     #endif
     if (PyFloat_CheckExact(op1)) {
@@ -42848,7 +45233,7 @@ static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED
 #endif
 
 /* PyIntBinop */
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if !CYTHON_COMPILING_IN_PYPY
 static PyObject* __Pyx_PyInt_SubtractObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED long intval, CYTHON_UNUSED int inplace) {
     #if PY_MAJOR_VERSION < 3
     if (likely(PyInt_CheckExact(op1))) {
@@ -42861,12 +45246,14 @@ static PyObject* __Pyx_PyInt_SubtractObjC(PyObject *op1, PyObject *op2, CYTHON_U
             return PyLong_Type.tp_as_number->nb_subtract(op1, op2);
     }
     #endif
-    #if CYTHON_USE_PYLONG_INTERNALS && PY_MAJOR_VERSION >= 3
+    #if CYTHON_USE_PYLONG_INTERNALS
     if (likely(PyLong_CheckExact(op1))) {
         const long b = intval;
         long a, x;
+#ifdef HAVE_LONG_LONG
         const PY_LONG_LONG llb = intval;
         PY_LONG_LONG lla, llx;
+#endif
         const digit* digits = ((PyLongObject*)op1)->ob_digit;
         const Py_ssize_t size = Py_SIZE(op1);
         if (likely(__Pyx_sst_abs(size) <= 1)) {
@@ -42878,58 +45265,74 @@ static PyObject* __Pyx_PyInt_SubtractObjC(PyObject *op1, PyObject *op2, CYTHON_U
                     if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
                         a = -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                         break;
+#ifdef HAVE_LONG_LONG
                     } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) {
                         lla = -(PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                         goto long_long;
+#endif
                     }
                 case 2:
                     if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
                         a = (long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                         break;
+#ifdef HAVE_LONG_LONG
                     } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) {
                         lla = (PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                         goto long_long;
+#endif
                     }
                 case -3:
                     if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
                         a = -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                         break;
+#ifdef HAVE_LONG_LONG
                     } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) {
                         lla = -(PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                         goto long_long;
+#endif
                     }
                 case 3:
                     if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
                         a = (long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                         break;
+#ifdef HAVE_LONG_LONG
                     } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) {
                         lla = (PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                         goto long_long;
+#endif
                     }
                 case -4:
                     if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) {
                         a = -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                         break;
+#ifdef HAVE_LONG_LONG
                     } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) {
                         lla = -(PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                         goto long_long;
+#endif
                     }
                 case 4:
                     if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) {
                         a = (long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                         break;
+#ifdef HAVE_LONG_LONG
                     } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) {
                         lla = (PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                         goto long_long;
+#endif
                     }
                 default: return PyLong_Type.tp_as_number->nb_subtract(op1, op2);
             }
         }
                 x = a - b;
             return PyLong_FromLong(x);
+#ifdef HAVE_LONG_LONG
         long_long:
                 llx = lla - llb;
             return PyLong_FromLongLong(llx);
+#endif
+        
+        
     }
     #endif
     if (PyFloat_CheckExact(op1)) {
@@ -43103,7 +45506,7 @@ bad:
 /* GetModuleGlobalName */
     static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name) {
     PyObject *result;
-#if CYTHON_COMPILING_IN_CPYTHON
+#if !CYTHON_AVOID_BORROWED_REFS
     result = PyDict_GetItem(__pyx_d, name);
     if (likely(result)) {
         Py_INCREF(result);
@@ -43241,7 +45644,7 @@ return_ne:
 }
 
 /* PyIntBinop */
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if !CYTHON_COMPILING_IN_PYPY
 static PyObject* __Pyx_PyInt_EqObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED long intval, CYTHON_UNUSED int inplace) {
     if (op1 == op2) {
         Py_RETURN_TRUE;
@@ -43257,7 +45660,7 @@ static PyObject* __Pyx_PyInt_EqObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED
         }
     }
     #endif
-    #if CYTHON_USE_PYLONG_INTERNALS && PY_MAJOR_VERSION >= 3
+    #if CYTHON_USE_PYLONG_INTERNALS
     if (likely(PyLong_CheckExact(op1))) {
         const long b = intval;
         long a;
@@ -43502,7 +45905,7 @@ bad:
     {
         PyMethodDescrObject *descr = (PyMethodDescrObject*) method;
         target->func = descr->d_method->ml_meth;
-        target->flag = descr->d_method->ml_flags & (METH_VARARGS | METH_KEYWORDS | METH_O | METH_NOARGS);
+        target->flag = descr->d_method->ml_flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST);
     }
 #endif
     return 0;
@@ -43512,7 +45915,7 @@ bad:
         static PyObject* __Pyx__CallUnboundCMethod0(__Pyx_CachedCFunction* cfunc, PyObject* self) {
     PyObject *args, *result = NULL;
     if (unlikely(!cfunc->method) && unlikely(__Pyx_TryUnpackUnboundCMethod(cfunc) < 0)) return NULL;
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_ASSUME_SAFE_MACROS
     args = PyTuple_New(1);
     if (unlikely(!args)) goto bad;
     Py_INCREF(self);
@@ -43621,7 +46024,7 @@ static int __Pyx_PyBytes_Tailmatch(PyObject* self, PyObject* substr,
         Py_ssize_t i, count = PyTuple_GET_SIZE(substr);
         for (i = 0; i < count; i++) {
             int result;
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
             result = __Pyx_PyBytes_SingleTailmatch(self, PyTuple_GET_ITEM(substr, i),
                                                    start, end, direction);
 #else
@@ -43646,7 +46049,7 @@ static int __Pyx_PyBytes_Tailmatch(PyObject* self, PyObject* substr,
         Py_ssize_t i, count = PyTuple_GET_SIZE(substr);
         for (i = 0; i < count; i++) {
             Py_ssize_t result;
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
             result = PyUnicode_Tailmatch(s, PyTuple_GET_ITEM(substr, i),
                                          start, end, direction);
 #else
@@ -43689,7 +46092,7 @@ static int __Pyx_PyBytes_Tailmatch(PyObject* self, PyObject* substr,
 
 /* IterFinish */
         static CYTHON_INLINE int __Pyx_IterFinish(void) {
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_FAST_THREAD_STATE
     PyThreadState *tstate = PyThreadState_GET();
     PyObject* exc_type = tstate->curexc_type;
     if (unlikely(exc_type)) {
@@ -43739,7 +46142,7 @@ static int __Pyx_PyBytes_Tailmatch(PyObject* self, PyObject* substr,
         Py_ssize_t cstart, Py_ssize_t cstop,
         PyObject** _py_start, PyObject** _py_stop, PyObject** _py_slice,
         int has_cstart, int has_cstop, CYTHON_UNUSED int wraparound) {
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_USE_TYPE_SLOTS
     PyMappingMethods* mp;
 #if PY_MAJOR_VERSION < 3
     PySequenceMethods* ms = Py_TYPE(obj)->tp_as_sequence;
@@ -43815,7 +46218,7 @@ static int __Pyx_PyBytes_Tailmatch(PyObject* self, PyObject* substr,
             Py_XDECREF(owned_stop);
             if (unlikely(!py_slice)) goto bad;
         }
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_USE_TYPE_SLOTS
         result = mp->mp_ass_subscript(obj, py_slice, value);
 #else
         result = value ? PyObject_SetItem(obj, py_slice, value) : PyObject_DelItem(obj, py_slice);
@@ -43845,7 +46248,7 @@ bad:
     PyObject *method, *result = NULL;
     method = __Pyx_PyObject_GetAttrStr(obj, method_name);
     if (unlikely(!method)) goto bad;
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_UNPACK_METHODS
     if (likely(PyMethod_Check(method))) {
         PyObject *self = PyMethod_GET_SELF(method);
         if (likely(self)) {
@@ -44029,8 +46432,103 @@ static CYTHON_INLINE int __Pyx_dict_iter_next(
         return PyDict_Values(d);
 }
 
+/* SaveResetException */
+        #if CYTHON_FAST_THREAD_STATE
+static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) {
+    *type = tstate->exc_type;
+    *value = tstate->exc_value;
+    *tb = tstate->exc_traceback;
+    Py_XINCREF(*type);
+    Py_XINCREF(*value);
+    Py_XINCREF(*tb);
+}
+static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) {
+    PyObject *tmp_type, *tmp_value, *tmp_tb;
+    tmp_type = tstate->exc_type;
+    tmp_value = tstate->exc_value;
+    tmp_tb = tstate->exc_traceback;
+    tstate->exc_type = type;
+    tstate->exc_value = value;
+    tstate->exc_traceback = tb;
+    Py_XDECREF(tmp_type);
+    Py_XDECREF(tmp_value);
+    Py_XDECREF(tmp_tb);
+}
+#endif
+
+/* PyErrExceptionMatches */
+        #if CYTHON_FAST_THREAD_STATE
+static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err) {
+    PyObject *exc_type = tstate->curexc_type;
+    if (exc_type == err) return 1;
+    if (unlikely(!exc_type)) return 0;
+    return PyErr_GivenExceptionMatches(exc_type, err);
+}
+#endif
+
+/* GetException */
+        #if CYTHON_FAST_THREAD_STATE
+static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) {
+#else
+static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) {
+#endif
+    PyObject *local_type, *local_value, *local_tb;
+#if CYTHON_FAST_THREAD_STATE
+    PyObject *tmp_type, *tmp_value, *tmp_tb;
+    local_type = tstate->curexc_type;
+    local_value = tstate->curexc_value;
+    local_tb = tstate->curexc_traceback;
+    tstate->curexc_type = 0;
+    tstate->curexc_value = 0;
+    tstate->curexc_traceback = 0;
+#else
+    PyErr_Fetch(&local_type, &local_value, &local_tb);
+#endif
+    PyErr_NormalizeException(&local_type, &local_value, &local_tb);
+#if CYTHON_FAST_THREAD_STATE
+    if (unlikely(tstate->curexc_type))
+#else
+    if (unlikely(PyErr_Occurred()))
+#endif
+        goto bad;
+    #if PY_MAJOR_VERSION >= 3
+    if (local_tb) {
+        if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0))
+            goto bad;
+    }
+    #endif
+    Py_XINCREF(local_tb);
+    Py_XINCREF(local_type);
+    Py_XINCREF(local_value);
+    *type = local_type;
+    *value = local_value;
+    *tb = local_tb;
+#if CYTHON_FAST_THREAD_STATE
+    tmp_type = tstate->exc_type;
+    tmp_value = tstate->exc_value;
+    tmp_tb = tstate->exc_traceback;
+    tstate->exc_type = local_type;
+    tstate->exc_value = local_value;
+    tstate->exc_traceback = local_tb;
+    Py_XDECREF(tmp_type);
+    Py_XDECREF(tmp_value);
+    Py_XDECREF(tmp_tb);
+#else
+    PyErr_SetExcInfo(local_type, local_value, local_tb);
+#endif
+    return 0;
+bad:
+    *type = 0;
+    *value = 0;
+    *tb = 0;
+    Py_XDECREF(local_type);
+    Py_XDECREF(local_value);
+    Py_XDECREF(local_tb);
+    return -1;
+}
+
 /* SetVTable */
-        static int __Pyx_SetVtable(PyObject *dict, void *vtable) {
+          static int __Pyx_SetVtable(PyObject *dict, void *vtable) {
 #if PY_VERSION_HEX >= 0x02070000
     PyObject *ob = PyCapsule_New(vtable, 0, 0);
 #else
@@ -44048,7 +46546,7 @@ bad:
 }
 
 /* Import */
-        static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) {
+          static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) {
     PyObject *empty_list = 0;
     PyObject *module = 0;
     PyObject *global_dict = 0;
@@ -44122,7 +46620,7 @@ bad:
 }
 
 /* ImportFrom */
-        static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) {
+          static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) {
     PyObject* value = __Pyx_PyObject_GetAttrStr(module, name);
     if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) {
         PyErr_Format(PyExc_ImportError,
@@ -44136,7 +46634,7 @@ bad:
 }
 
 /* CalculateMetaclass */
-        static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases) {
+          static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases) {
     Py_ssize_t i, nbases = PyTuple_GET_SIZE(bases);
     for (i=0; i < nbases; i++) {
         PyTypeObject *tmptype;
@@ -44175,7 +46673,7 @@ bad:
 }
 
 /* Py3ClassCreate */
-        static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name,
+          static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name,
                                            PyObject *qualname, PyObject *mkw, PyObject *modname, PyObject *doc) {
     PyObject *ns;
     if (metaclass) {
@@ -44242,7 +46740,7 @@ static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObj
 }
 
 /* CodeObjectCache */
-        static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) {
+          static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) {
     int start = 0, mid = 0, end = count - 1;
     if (end >= 0 && code_line > entries[end].code_line) {
         return count;
@@ -44322,7 +46820,7 @@ static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) {
 }
 
 /* AddTraceback */
-        #include "compile.h"
+          #include "compile.h"
 #include "frameobject.h"
 #include "traceback.h"
 static PyCodeObject* __Pyx_CreateCodeObjectForTraceback(
@@ -44395,15 +46893,46 @@ static void __Pyx_AddTraceback(const char *funcname, int c_line,
         0                    /*PyObject *locals*/
     );
     if (!py_frame) goto bad;
-    py_frame->f_lineno = py_line;
+    __Pyx_PyFrame_SetLineNumber(py_frame, py_line);
     PyTraceBack_Here(py_frame);
 bad:
     Py_XDECREF(py_code);
     Py_XDECREF(py_frame);
 }
 
+/* CIntToPy */
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_ADIOS_STATISTICS_FLAG(ADIOS_STATISTICS_FLAG value) {
+    const ADIOS_STATISTICS_FLAG neg_one = (ADIOS_STATISTICS_FLAG) -1, const_zero = (ADIOS_STATISTICS_FLAG) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(ADIOS_STATISTICS_FLAG) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(ADIOS_STATISTICS_FLAG) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(ADIOS_STATISTICS_FLAG) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
+        }
+    } else {
+        if (sizeof(ADIOS_STATISTICS_FLAG) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(ADIOS_STATISTICS_FLAG) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(ADIOS_STATISTICS_FLAG),
+                                     little, !is_unsigned);
+    }
+}
+
 /* CIntFromPyVerify */
-        #define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\
+          #define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\
     __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 0)
 #define __PYX_VERIFY_RETURN_INT_EXC(target_type, func_type, func_value)\
     __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 1)
@@ -44425,7 +46954,7 @@ bad:
     }
 
 /* CIntToPy */
-        static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) {
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) {
     const int neg_one = (int) -1, const_zero = (int) 0;
     const int is_unsigned = neg_one > const_zero;
     if (is_unsigned) {
@@ -44433,14 +46962,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(int) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(int) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -44452,7 +46985,7 @@ bad:
 }
 
 /* CIntToPy */
-        static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int64_t(int64_t value) {
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int64_t(int64_t value) {
     const int64_t neg_one = (int64_t) -1, const_zero = (int64_t) 0;
     const int is_unsigned = neg_one > const_zero;
     if (is_unsigned) {
@@ -44460,14 +46993,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(int64_t) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(int64_t) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(int64_t) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(int64_t) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -44479,7 +47016,7 @@ bad:
 }
 
 /* CIntToPy */
-        static CYTHON_INLINE PyObject* __Pyx_PyInt_From_uint64_t(uint64_t value) {
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_uint64_t(uint64_t value) {
     const uint64_t neg_one = (uint64_t) -1, const_zero = (uint64_t) 0;
     const int is_unsigned = neg_one > const_zero;
     if (is_unsigned) {
@@ -44487,14 +47024,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(uint64_t) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(uint64_t) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(uint64_t) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(uint64_t) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -44506,7 +47047,7 @@ bad:
 }
 
 /* CIntToPy */
-        static CYTHON_INLINE PyObject* __Pyx_PyInt_From_ADIOS_READ_METHOD(ADIOS_READ_METHOD value) {
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_ADIOS_READ_METHOD(ADIOS_READ_METHOD value) {
     const ADIOS_READ_METHOD neg_one = (ADIOS_READ_METHOD) -1, const_zero = (ADIOS_READ_METHOD) 0;
     const int is_unsigned = neg_one > const_zero;
     if (is_unsigned) {
@@ -44514,14 +47055,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(ADIOS_READ_METHOD) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(ADIOS_READ_METHOD) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(ADIOS_READ_METHOD) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(ADIOS_READ_METHOD) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -44533,7 +47078,7 @@ bad:
 }
 
 /* CIntToPy */
-        static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) {
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) {
     const long neg_one = (long) -1, const_zero = (long) 0;
     const int is_unsigned = neg_one > const_zero;
     if (is_unsigned) {
@@ -44541,14 +47086,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(long) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(long) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -44560,7 +47109,7 @@ bad:
 }
 
 /* CIntToPy */
-        static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_long(unsigned long value) {
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_long(unsigned long value) {
     const unsigned long neg_one = (unsigned long) -1, const_zero = (unsigned long) 0;
     const int is_unsigned = neg_one > const_zero;
     if (is_unsigned) {
@@ -44568,14 +47117,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(unsigned long) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(unsigned long) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(unsigned long) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(unsigned long) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -44587,7 +47140,7 @@ bad:
 }
 
 /* CIntToPy */
-        static CYTHON_INLINE PyObject* __Pyx_PyInt_From_uint32_t(uint32_t value) {
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_uint32_t(uint32_t value) {
     const uint32_t neg_one = (uint32_t) -1, const_zero = (uint32_t) 0;
     const int is_unsigned = neg_one > const_zero;
     if (is_unsigned) {
@@ -44595,14 +47148,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(uint32_t) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(uint32_t) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(uint32_t) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(uint32_t) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -44614,7 +47171,7 @@ bad:
 }
 
 /* CIntToPy */
-        static CYTHON_INLINE PyObject* __Pyx_PyInt_From_ADIOS_DATATYPES(ADIOS_DATATYPES value) {
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_ADIOS_DATATYPES(ADIOS_DATATYPES value) {
     const ADIOS_DATATYPES neg_one = (ADIOS_DATATYPES) -1, const_zero = (ADIOS_DATATYPES) 0;
     const int is_unsigned = neg_one > const_zero;
     if (is_unsigned) {
@@ -44622,14 +47179,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(ADIOS_DATATYPES) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(ADIOS_DATATYPES) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(ADIOS_DATATYPES) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(ADIOS_DATATYPES) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -44640,8 +47201,8 @@ bad:
     }
 }
 
-/* None */
-        #if CYTHON_CCOMPLEX
+/* Declarations */
+          #if CYTHON_CCOMPLEX
   #ifdef __cplusplus
     static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) {
       return ::std::complex< float >(x, y);
@@ -44660,61 +47221,86 @@ bad:
     }
 #endif
 
-/* None */
-        #if CYTHON_CCOMPLEX
+/* Arithmetic */
+          #if CYTHON_CCOMPLEX
 #else
-    static CYTHON_INLINE int __Pyx_c_eqf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
+    static CYTHON_INLINE int __Pyx_c_eq_float(__pyx_t_float_complex a, __pyx_t_float_complex b) {
        return (a.real == b.real) && (a.imag == b.imag);
     }
-    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sumf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
+    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sum_float(__pyx_t_float_complex a, __pyx_t_float_complex b) {
         __pyx_t_float_complex z;
         z.real = a.real + b.real;
         z.imag = a.imag + b.imag;
         return z;
     }
-    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_difff(__pyx_t_float_complex a, __pyx_t_float_complex b) {
+    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_diff_float(__pyx_t_float_complex a, __pyx_t_float_complex b) {
         __pyx_t_float_complex z;
         z.real = a.real - b.real;
         z.imag = a.imag - b.imag;
         return z;
     }
-    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prodf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
+    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prod_float(__pyx_t_float_complex a, __pyx_t_float_complex b) {
         __pyx_t_float_complex z;
         z.real = a.real * b.real - a.imag * b.imag;
         z.imag = a.real * b.imag + a.imag * b.real;
         return z;
     }
-    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quotf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
-        __pyx_t_float_complex z;
-        float denom = b.real * b.real + b.imag * b.imag;
-        z.real = (a.real * b.real + a.imag * b.imag) / denom;
-        z.imag = (a.imag * b.real - a.real * b.imag) / denom;
-        return z;
+    #if 1
+    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quot_float(__pyx_t_float_complex a, __pyx_t_float_complex b) {
+        if (b.imag == 0) {
+            return __pyx_t_float_complex_from_parts(a.real / b.real, a.imag / b.real);
+        } else if (fabsf(b.real) >= fabsf(b.imag)) {
+            if (b.real == 0 && b.imag == 0) {
+                return __pyx_t_float_complex_from_parts(a.real / b.real, a.imag / b.imag);
+            } else {
+                float r = b.imag / b.real;
+                float s = 1.0 / (b.real + b.imag * r);
+                return __pyx_t_float_complex_from_parts(
+                    (a.real + a.imag * r) * s, (a.imag - a.real * r) * s);
+            }
+        } else {
+            float r = b.real / b.imag;
+            float s = 1.0 / (b.imag + b.real * r);
+            return __pyx_t_float_complex_from_parts(
+                (a.real * r + a.imag) * s, (a.imag * r - a.real) * s);
+        }
     }
-    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_negf(__pyx_t_float_complex a) {
+    #else
+    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quot_float(__pyx_t_float_complex a, __pyx_t_float_complex b) {
+        if (b.imag == 0) {
+            return __pyx_t_float_complex_from_parts(a.real / b.real, a.imag / b.real);
+        } else {
+            float denom = b.real * b.real + b.imag * b.imag;
+            return __pyx_t_float_complex_from_parts(
+                (a.real * b.real + a.imag * b.imag) / denom,
+                (a.imag * b.real - a.real * b.imag) / denom);
+        }
+    }
+    #endif
+    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_neg_float(__pyx_t_float_complex a) {
         __pyx_t_float_complex z;
         z.real = -a.real;
         z.imag = -a.imag;
         return z;
     }
-    static CYTHON_INLINE int __Pyx_c_is_zerof(__pyx_t_float_complex a) {
+    static CYTHON_INLINE int __Pyx_c_is_zero_float(__pyx_t_float_complex a) {
        return (a.real == 0) && (a.imag == 0);
     }
-    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conjf(__pyx_t_float_complex a) {
+    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conj_float(__pyx_t_float_complex a) {
         __pyx_t_float_complex z;
         z.real =  a.real;
         z.imag = -a.imag;
         return z;
     }
     #if 1
-        static CYTHON_INLINE float __Pyx_c_absf(__pyx_t_float_complex z) {
+        static CYTHON_INLINE float __Pyx_c_abs_float(__pyx_t_float_complex z) {
           #if !defined(HAVE_HYPOT) || defined(_MSC_VER)
             return sqrtf(z.real*z.real + z.imag*z.imag);
           #else
             return hypotf(z.real, z.imag);
           #endif
         }
-        static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_powf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
+        static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_pow_float(__pyx_t_float_complex a, __pyx_t_float_complex b) {
             __pyx_t_float_complex z;
             float r, lnr, theta, z_r, z_theta;
             if (b.imag == 0 && b.real == (int)b.real) {
@@ -44732,24 +47318,32 @@ bad:
                     case 1:
                         return a;
                     case 2:
-                        z = __Pyx_c_prodf(a, a);
-                        return __Pyx_c_prodf(a, a);
+                        z = __Pyx_c_prod_float(a, a);
+                        return __Pyx_c_prod_float(a, a);
                     case 3:
-                        z = __Pyx_c_prodf(a, a);
-                        return __Pyx_c_prodf(z, a);
+                        z = __Pyx_c_prod_float(a, a);
+                        return __Pyx_c_prod_float(z, a);
                     case 4:
-                        z = __Pyx_c_prodf(a, a);
-                        return __Pyx_c_prodf(z, z);
+                        z = __Pyx_c_prod_float(a, a);
+                        return __Pyx_c_prod_float(z, z);
                 }
             }
             if (a.imag == 0) {
                 if (a.real == 0) {
                     return a;
+                } else if (b.imag == 0) {
+                    z.real = powf(a.real, b.real);
+                    z.imag = 0;
+                    return z;
+                } else if (a.real > 0) {
+                    r = a.real;
+                    theta = 0;
+                } else {
+                    r = -a.real;
+                    theta = atan2f(0, -1);
                 }
-                r = a.real;
-                theta = 0;
             } else {
-                r = __Pyx_c_absf(a);
+                r = __Pyx_c_abs_float(a);
                 theta = atan2f(a.imag, a.real);
             }
             lnr = logf(r);
@@ -44762,8 +47356,8 @@ bad:
     #endif
 #endif
 
-/* None */
-        #if CYTHON_CCOMPLEX
+/* Declarations */
+          #if CYTHON_CCOMPLEX
   #ifdef __cplusplus
     static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) {
       return ::std::complex< double >(x, y);
@@ -44782,61 +47376,86 @@ bad:
     }
 #endif
 
-/* None */
-        #if CYTHON_CCOMPLEX
+/* Arithmetic */
+          #if CYTHON_CCOMPLEX
 #else
-    static CYTHON_INLINE int __Pyx_c_eq(__pyx_t_double_complex a, __pyx_t_double_complex b) {
+    static CYTHON_INLINE int __Pyx_c_eq_double(__pyx_t_double_complex a, __pyx_t_double_complex b) {
        return (a.real == b.real) && (a.imag == b.imag);
     }
-    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum(__pyx_t_double_complex a, __pyx_t_double_complex b) {
+    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum_double(__pyx_t_double_complex a, __pyx_t_double_complex b) {
         __pyx_t_double_complex z;
         z.real = a.real + b.real;
         z.imag = a.imag + b.imag;
         return z;
     }
-    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff(__pyx_t_double_complex a, __pyx_t_double_complex b) {
+    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff_double(__pyx_t_double_complex a, __pyx_t_double_complex b) {
         __pyx_t_double_complex z;
         z.real = a.real - b.real;
         z.imag = a.imag - b.imag;
         return z;
     }
-    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod(__pyx_t_double_complex a, __pyx_t_double_complex b) {
+    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod_double(__pyx_t_double_complex a, __pyx_t_double_complex b) {
         __pyx_t_double_complex z;
         z.real = a.real * b.real - a.imag * b.imag;
         z.imag = a.real * b.imag + a.imag * b.real;
         return z;
     }
-    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot(__pyx_t_double_complex a, __pyx_t_double_complex b) {
-        __pyx_t_double_complex z;
-        double denom = b.real * b.real + b.imag * b.imag;
-        z.real = (a.real * b.real + a.imag * b.imag) / denom;
-        z.imag = (a.imag * b.real - a.real * b.imag) / denom;
-        return z;
+    #if 1
+    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot_double(__pyx_t_double_complex a, __pyx_t_double_complex b) {
+        if (b.imag == 0) {
+            return __pyx_t_double_complex_from_parts(a.real / b.real, a.imag / b.real);
+        } else if (fabs(b.real) >= fabs(b.imag)) {
+            if (b.real == 0 && b.imag == 0) {
+                return __pyx_t_double_complex_from_parts(a.real / b.real, a.imag / b.imag);
+            } else {
+                double r = b.imag / b.real;
+                double s = 1.0 / (b.real + b.imag * r);
+                return __pyx_t_double_complex_from_parts(
+                    (a.real + a.imag * r) * s, (a.imag - a.real * r) * s);
+            }
+        } else {
+            double r = b.real / b.imag;
+            double s = 1.0 / (b.imag + b.real * r);
+            return __pyx_t_double_complex_from_parts(
+                (a.real * r + a.imag) * s, (a.imag * r - a.real) * s);
+        }
+    }
+    #else
+    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot_double(__pyx_t_double_complex a, __pyx_t_double_complex b) {
+        if (b.imag == 0) {
+            return __pyx_t_double_complex_from_parts(a.real / b.real, a.imag / b.real);
+        } else {
+            double denom = b.real * b.real + b.imag * b.imag;
+            return __pyx_t_double_complex_from_parts(
+                (a.real * b.real + a.imag * b.imag) / denom,
+                (a.imag * b.real - a.real * b.imag) / denom);
+        }
     }
-    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg(__pyx_t_double_complex a) {
+    #endif
+    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg_double(__pyx_t_double_complex a) {
         __pyx_t_double_complex z;
         z.real = -a.real;
         z.imag = -a.imag;
         return z;
     }
-    static CYTHON_INLINE int __Pyx_c_is_zero(__pyx_t_double_complex a) {
+    static CYTHON_INLINE int __Pyx_c_is_zero_double(__pyx_t_double_complex a) {
        return (a.real == 0) && (a.imag == 0);
     }
-    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj(__pyx_t_double_complex a) {
+    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj_double(__pyx_t_double_complex a) {
         __pyx_t_double_complex z;
         z.real =  a.real;
         z.imag = -a.imag;
         return z;
     }
     #if 1
-        static CYTHON_INLINE double __Pyx_c_abs(__pyx_t_double_complex z) {
+        static CYTHON_INLINE double __Pyx_c_abs_double(__pyx_t_double_complex z) {
           #if !defined(HAVE_HYPOT) || defined(_MSC_VER)
             return sqrt(z.real*z.real + z.imag*z.imag);
           #else
             return hypot(z.real, z.imag);
           #endif
         }
-        static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow(__pyx_t_double_complex a, __pyx_t_double_complex b) {
+        static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow_double(__pyx_t_double_complex a, __pyx_t_double_complex b) {
             __pyx_t_double_complex z;
             double r, lnr, theta, z_r, z_theta;
             if (b.imag == 0 && b.real == (int)b.real) {
@@ -44854,24 +47473,32 @@ bad:
                     case 1:
                         return a;
                     case 2:
-                        z = __Pyx_c_prod(a, a);
-                        return __Pyx_c_prod(a, a);
+                        z = __Pyx_c_prod_double(a, a);
+                        return __Pyx_c_prod_double(a, a);
                     case 3:
-                        z = __Pyx_c_prod(a, a);
-                        return __Pyx_c_prod(z, a);
+                        z = __Pyx_c_prod_double(a, a);
+                        return __Pyx_c_prod_double(z, a);
                     case 4:
-                        z = __Pyx_c_prod(a, a);
-                        return __Pyx_c_prod(z, z);
+                        z = __Pyx_c_prod_double(a, a);
+                        return __Pyx_c_prod_double(z, z);
                 }
             }
             if (a.imag == 0) {
                 if (a.real == 0) {
                     return a;
+                } else if (b.imag == 0) {
+                    z.real = pow(a.real, b.real);
+                    z.imag = 0;
+                    return z;
+                } else if (a.real > 0) {
+                    r = a.real;
+                    theta = 0;
+                } else {
+                    r = -a.real;
+                    theta = atan2(0, -1);
                 }
-                r = a.real;
-                theta = 0;
             } else {
-                r = __Pyx_c_abs(a);
+                r = __Pyx_c_abs_double(a);
                 theta = atan2(a.imag, a.real);
             }
             lnr = log(r);
@@ -44885,7 +47512,7 @@ bad:
 #endif
 
 /* CIntToPy */
-        static CYTHON_INLINE PyObject* __Pyx_PyInt_From_enum__NPY_TYPES(enum NPY_TYPES value) {
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_enum__NPY_TYPES(enum NPY_TYPES value) {
     const enum NPY_TYPES neg_one = (enum NPY_TYPES) -1, const_zero = (enum NPY_TYPES) 0;
     const int is_unsigned = neg_one > const_zero;
     if (is_unsigned) {
@@ -44893,14 +47520,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(enum NPY_TYPES) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(enum NPY_TYPES) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(enum NPY_TYPES) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(enum NPY_TYPES) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -44912,7 +47543,7 @@ bad:
 }
 
 /* CIntFromPy */
-        static CYTHON_INLINE MPI_Comm __Pyx_PyInt_As_MPI_Comm(PyObject *x) {
+          static CYTHON_INLINE MPI_Comm __Pyx_PyInt_As_MPI_Comm(PyObject *x) {
     const MPI_Comm neg_one = (MPI_Comm) -1, const_zero = (MPI_Comm) 0;
     const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
@@ -44979,8 +47610,10 @@ bad:
 #endif
             if (sizeof(MPI_Comm) <= sizeof(unsigned long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(MPI_Comm, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(MPI_Comm) <= sizeof(unsigned PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(MPI_Comm, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
             }
         } else {
 #if CYTHON_USE_PYLONG_INTERNALS
@@ -45047,8 +47680,10 @@ bad:
 #endif
             if (sizeof(MPI_Comm) <= sizeof(long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(MPI_Comm, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(MPI_Comm) <= sizeof(PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(MPI_Comm, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -45097,7 +47732,7 @@ raise_neg_overflow:
 }
 
 /* CIntFromPy */
-        static CYTHON_INLINE int64_t __Pyx_PyInt_As_int64_t(PyObject *x) {
+          static CYTHON_INLINE int64_t __Pyx_PyInt_As_int64_t(PyObject *x) {
     const int64_t neg_one = (int64_t) -1, const_zero = (int64_t) 0;
     const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
@@ -45164,8 +47799,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(int64_t) <= sizeof(unsigned long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(int64_t, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(int64_t) <= sizeof(unsigned PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(int64_t, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
             }
         } else {
 #if CYTHON_USE_PYLONG_INTERNALS
@@ -45232,8 +47869,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(int64_t) <= sizeof(long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(int64_t, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(int64_t) <= sizeof(PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(int64_t, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -45282,7 +47921,7 @@ raise_neg_overflow:
 }
 
 /* CIntFromPy */
-        static CYTHON_INLINE uint64_t __Pyx_PyInt_As_uint64_t(PyObject *x) {
+          static CYTHON_INLINE uint64_t __Pyx_PyInt_As_uint64_t(PyObject *x) {
     const uint64_t neg_one = (uint64_t) -1, const_zero = (uint64_t) 0;
     const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
@@ -45349,8 +47988,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(uint64_t) <= sizeof(unsigned long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(uint64_t, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(uint64_t) <= sizeof(unsigned PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(uint64_t, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
             }
         } else {
 #if CYTHON_USE_PYLONG_INTERNALS
@@ -45417,8 +48058,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(uint64_t) <= sizeof(long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(uint64_t, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(uint64_t) <= sizeof(PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(uint64_t, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -45467,7 +48110,7 @@ raise_neg_overflow:
 }
 
 /* CIntFromPy */
-        static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
+          static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
     const int neg_one = (int) -1, const_zero = (int) 0;
     const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
@@ -45534,8 +48177,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(int) <= sizeof(unsigned long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
             }
         } else {
 #if CYTHON_USE_PYLONG_INTERNALS
@@ -45602,8 +48247,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(int) <= sizeof(long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -45652,7 +48299,7 @@ raise_neg_overflow:
 }
 
 /* CIntFromPy */
-        static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {
+          static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {
     const long neg_one = (long) -1, const_zero = (long) 0;
     const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
@@ -45719,8 +48366,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(long) <= sizeof(unsigned long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
             }
         } else {
 #if CYTHON_USE_PYLONG_INTERNALS
@@ -45787,8 +48436,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(long) <= sizeof(long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -45837,7 +48488,7 @@ raise_neg_overflow:
 }
 
 /* CIntFromPy */
-        static CYTHON_INLINE ADIOS_DATATYPES __Pyx_PyInt_As_ADIOS_DATATYPES(PyObject *x) {
+          static CYTHON_INLINE ADIOS_DATATYPES __Pyx_PyInt_As_ADIOS_DATATYPES(PyObject *x) {
     const ADIOS_DATATYPES neg_one = (ADIOS_DATATYPES) -1, const_zero = (ADIOS_DATATYPES) 0;
     const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
@@ -45904,8 +48555,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(ADIOS_DATATYPES) <= sizeof(unsigned long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(ADIOS_DATATYPES, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(ADIOS_DATATYPES) <= sizeof(unsigned PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(ADIOS_DATATYPES, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
             }
         } else {
 #if CYTHON_USE_PYLONG_INTERNALS
@@ -45972,8 +48625,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(ADIOS_DATATYPES) <= sizeof(long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(ADIOS_DATATYPES, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(ADIOS_DATATYPES) <= sizeof(PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(ADIOS_DATATYPES, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -46022,7 +48677,7 @@ raise_neg_overflow:
 }
 
 /* CIntFromPy */
-        static CYTHON_INLINE ADIOS_LOCKMODE __Pyx_PyInt_As_ADIOS_LOCKMODE(PyObject *x) {
+          static CYTHON_INLINE ADIOS_LOCKMODE __Pyx_PyInt_As_ADIOS_LOCKMODE(PyObject *x) {
     const ADIOS_LOCKMODE neg_one = (ADIOS_LOCKMODE) -1, const_zero = (ADIOS_LOCKMODE) 0;
     const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
@@ -46089,8 +48744,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(ADIOS_LOCKMODE) <= sizeof(unsigned long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(ADIOS_LOCKMODE, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(ADIOS_LOCKMODE) <= sizeof(unsigned PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(ADIOS_LOCKMODE, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
             }
         } else {
 #if CYTHON_USE_PYLONG_INTERNALS
@@ -46157,8 +48814,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(ADIOS_LOCKMODE) <= sizeof(long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(ADIOS_LOCKMODE, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(ADIOS_LOCKMODE) <= sizeof(PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(ADIOS_LOCKMODE, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -46207,7 +48866,7 @@ raise_neg_overflow:
 }
 
 /* CIntFromPy */
-        static CYTHON_INLINE ADIOS_READ_METHOD __Pyx_PyInt_As_ADIOS_READ_METHOD(PyObject *x) {
+          static CYTHON_INLINE ADIOS_READ_METHOD __Pyx_PyInt_As_ADIOS_READ_METHOD(PyObject *x) {
     const ADIOS_READ_METHOD neg_one = (ADIOS_READ_METHOD) -1, const_zero = (ADIOS_READ_METHOD) 0;
     const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
@@ -46274,8 +48933,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(ADIOS_READ_METHOD) <= sizeof(unsigned long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(ADIOS_READ_METHOD, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(ADIOS_READ_METHOD) <= sizeof(unsigned PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(ADIOS_READ_METHOD, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
             }
         } else {
 #if CYTHON_USE_PYLONG_INTERNALS
@@ -46342,8 +49003,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(ADIOS_READ_METHOD) <= sizeof(long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(ADIOS_READ_METHOD, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(ADIOS_READ_METHOD) <= sizeof(PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(ADIOS_READ_METHOD, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -46392,7 +49055,7 @@ raise_neg_overflow:
 }
 
 /* CheckBinaryVersion */
-        static int __Pyx_check_binary_version(void) {
+          static int __Pyx_check_binary_version(void) {
     char ctversion[4], rtversion[4];
     PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION);
     PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion());
@@ -46408,7 +49071,7 @@ raise_neg_overflow:
 }
 
 /* ModuleImport */
-        #ifndef __PYX_HAVE_RT_ImportModule
+          #ifndef __PYX_HAVE_RT_ImportModule
 #define __PYX_HAVE_RT_ImportModule
 static PyObject *__Pyx_ImportModule(const char *name) {
     PyObject *py_name = 0;
@@ -46426,7 +49089,7 @@ bad:
 #endif
 
 /* TypeImport */
-        #ifndef __PYX_HAVE_RT_ImportType
+          #ifndef __PYX_HAVE_RT_ImportType
 #define __PYX_HAVE_RT_ImportType
 static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name,
     size_t size, int strict)
@@ -46491,7 +49154,7 @@ bad:
 #endif
 
 /* InitStrings */
-        static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) {
+          static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) {
     while (t->p) {
         #if PY_MAJOR_VERSION < 3
         if (t->is_unicode) {
@@ -46592,7 +49255,9 @@ static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) {
    else return PyObject_IsTrue(x);
 }
 static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x) {
+#if CYTHON_USE_TYPE_SLOTS
   PyNumberMethods *m;
+#endif
   const char *name = NULL;
   PyObject *res = NULL;
 #if PY_MAJOR_VERSION < 3
@@ -46601,8 +49266,9 @@ static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x) {
   if (PyLong_Check(x))
 #endif
     return __Pyx_NewRef(x);
+#if CYTHON_USE_TYPE_SLOTS
   m = Py_TYPE(x)->tp_as_number;
-#if PY_MAJOR_VERSION < 3
+  #if PY_MAJOR_VERSION < 3
   if (m && m->nb_int) {
     name = "int";
     res = PyNumber_Int(x);
@@ -46611,11 +49277,14 @@ static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x) {
     name = "long";
     res = PyNumber_Long(x);
   }
-#else
+  #else
   if (m && m->nb_int) {
     name = "int";
     res = PyNumber_Long(x);
   }
+  #endif
+#else
+  res = PyNumber_Int(x);
 #endif
   if (res) {
 #if PY_MAJOR_VERSION < 3
diff --git a/wrappers/numpy/adios.pyx b/wrappers/numpy/adios.pyx
index fe7226d..cca0642 100644
--- a/wrappers/numpy/adios.pyx
+++ b/wrappers/numpy/adios.pyx
@@ -19,6 +19,8 @@ cimport numpy as np
 import cython
 cimport cython
 
+import tempfile
+
 from libc.stdlib cimport malloc, free
 from cpython.string cimport PyString_AsString
 from cpython.bytes cimport PyBytes_AsString, PyBytes_AS_STRING
@@ -178,22 +180,22 @@ cdef extern from "adios.h":
 
     cdef int adios_define_var_timescale (const char * timescale , int64_t group_id ,
                                          const char * name)
-    
+
     cdef int adios_define_var_timeseriesformat (const char * timeseries , int64_t group_id ,
                                                 const char * name)
-    
+
     cdef int adios_define_var_hyperslab (const char * hyperslab , int64_t group_id ,
                                          const char * name)
-    
+
     cdef int adios_define_mesh_timevarying (const char * timevarying , int64_t group_id ,
                                             const char * name)
-    
+
     cdef int adios_define_mesh_timesteps (const char * timesteps , int64_t group_id ,
                                           const char * name)
-    
+
     cdef int adios_define_mesh_timescale (const char * timescale , int64_t group_id ,
                                          const char * name)
-    
+
     cdef int adios_define_mesh_timeseriesformat (const char * timeseries , int64_t group_id ,
                                                  const char * name)
 
@@ -205,21 +207,21 @@ cdef extern from "adios.h":
                                    int64_t group_id,
                                    const char * name
                                   )
-    
+
     cdef int adios_define_mesh_rectilinear (char * dimensions,
                                        char * coordinates,
                                        char * nspace,
                                        int64_t group_id,
                                        const char * name
-                                      ) 
-    
+                                      )
+
     cdef int adios_define_mesh_structured (char * dimensions,
                                       char * points,
                                       char * nspace,
                                       int64_t group_id,
                                       const char * name
                                      )
-    
+
     cdef int adios_define_mesh_unstructured (char * points,
                                         char * data,
                                         char * count,
@@ -230,7 +232,7 @@ cdef extern from "adios.h":
                                         const char * name
                                        )
 
-    ### Bis hier 
+    ### Bis hier
 
     cdef int adios_define_attribute (int64_t group,
                                      char * name,
@@ -430,6 +432,12 @@ class LOCKMODE:
     CURRENT = 1
     ALL =2
 
+class STATISTICS:
+    NONE = adios_stat_no
+    MINMAX = adios_stat_minmax
+    FULL = adios_stat_full
+    DEFAULT = adios_stat_default
+
 cpdef __parse_index(index, ndim):
     # Fix index, handling ellipsis and incomplete slices.
     if not isinstance(index, tuple):
@@ -578,25 +586,25 @@ cpdef int define_var_timesteps (str timesteps, int64_t group_id, str name):
 
 cpdef int define_var_timescale (str timescale , int64_t group_id ,str name):
     return adios_define_var_timescale (s2b(timescale) , group_id ,s2b(name))
-                                         
+
 cpdef int define_var_timeseriesformat (str timeseries , int64_t group_id ,str name):
     return adios_define_var_timeseriesformat (s2b(timeseries) , group_id ,s2b(name))
-                                                
+
 cpdef int define_var_hyperslab (str hyperslab , int64_t group_id ,str name):
     return adios_define_var_hyperslab (s2b(hyperslab) , group_id ,s2b(name))
-                                         
+
 cpdef int define_mesh_timevarying (str timevarying , int64_t group_id ,str name):
     return adios_define_mesh_timevarying (s2b(timevarying) , group_id ,s2b(name))
-                                            
+
 cpdef int define_mesh_timesteps (str timesteps , int64_t group_id ,str name):
     return adios_define_mesh_timesteps (s2b(timesteps) , group_id ,s2b(name))
-                                          
+
 cpdef int define_mesh_timescale (str timescale , int64_t group_id ,str name):
     return adios_define_mesh_timescale (s2b(timescale) , group_id ,s2b(name))
-                                         
+
 cpdef int define_mesh_timeseriesformat (str timeseries , int64_t group_id ,str name):
     return adios_define_mesh_timeseriesformat (s2b(timeseries) , group_id ,s2b(name))
-                                                 
+
 cpdef int define_mesh_uniform (str dimensions,
                                    str origin,
                                    str spacing,
@@ -613,20 +621,20 @@ cpdef int define_mesh_uniform (str dimensions,
                                    group_id,
                                    s2b(name)
                                   )
-    
+
 cpdef int define_mesh_rectilinear (str dimensions,
                                        str coordinates,
                                        str nspace,
                                        int64_t group_id,
                                        str name
-                                      ): 
+                                      ):
     return adios_define_mesh_rectilinear (s2b(dimensions),
                                        s2b(coordinates),
                                        s2b(nspace),
                                        group_id,
                                        s2b(name)
-                                      ) 
-    
+                                      )
+
 cpdef int define_mesh_structured (str dimensions,
                                       str points,
                                       str nspace,
@@ -639,7 +647,7 @@ cpdef int define_mesh_structured (str dimensions,
                                       group_id,
                                       s2b(name)
                                      )
-    
+
 cpdef int define_mesh_unstructured (str points,
                                         str data,
                                         str count,
@@ -1917,6 +1925,7 @@ cdef class writer(object):
     cpdef bint is_noxml
     cpdef str mode
     cpdef MPI_Comm comm
+    cpdef int stats
 
     cpdef dict vars
     cpdef dict attrs
@@ -1961,17 +1970,21 @@ cdef class writer(object):
     def __init__(self, str fname,
                  bint is_noxml = True,
                  str mode = "w",
-                 MPI_Comm comm = MPI_COMM_WORLD):
+                 int stats = adios_stat_default,
+                 MPI_Comm comm = MPI_COMM_WORLD,
+                 str method = "POSIX1",
+                 str method_params = ""):
         self.gid = 0
         self.fname = fname
-        self.method = ""
-        self.method_params = ""
+        self.method = method
+        self.method_params = method_params
         self.is_noxml = is_noxml
         self.mode = mode
         self.comm = comm
         self.vars = dict()
         self.attrs = dict()
         self.timeaggregation_buffersize = 0
+        self.stats = stats
 
         init_noxml(comm)
     ##def __var_factory__(self, name, value):
@@ -1982,7 +1995,8 @@ cdef class writer(object):
 
     def declare_group(self, str gname = None,
                       str method = "POSIX1",
-                      str method_params = ""):
+                      str method_params = "",
+                      int stats = adios_stat_default):
         """
         Define a group associated with the file.
 
@@ -1990,6 +2004,7 @@ cdef class writer(object):
             gname (str): group name.
             method (str, optional): Adios write method (default: 'POSIX1')
             method_params (str, optional): parameters for the write method (default: '')
+            stats (int, optional): statistics (default: 'DEFAULT')
 
         Example:
 
@@ -2000,9 +2015,15 @@ cdef class writer(object):
             self.gname = gname
 
         if self.gname is None:
-            self.gname = "group"
+            rank = 0
+            if rank == 0:
+                ftmp = tempfile.NamedTemporaryFile().name
+            else:
+                ftmp = ""
+            ftmp = ftmp
+            self.gname = 'group'+ftmp;
 
-        self.gid = declare_group(self.gname, "", adios_stat_default)
+        self.gid = declare_group(self.gname, "", stats)
         self.method = method
         self.method_params = method_params
         select_method(self.gid, self.method, self.method_params, "")
@@ -2085,9 +2106,9 @@ cdef class writer(object):
         Write variables and attributes to a file and close the writer.
         """
         if self.gid == 0:
-            self.declare_group()
+            self.declare_group(method=self.method, method_params=self.method_params, stats=self.stats)
 
-        fd = open(self.gname, self.fname, self.mode)
+        fd = open(self.gname, self.fname, self.mode, comm=self.comm)
 
         extra_vars = dict()
         extra_attrs = dict()
@@ -2230,7 +2251,8 @@ cdef class varinfo(object):
 
     def define(self, int64_t gid):
         if self.value is None:
-            raise TypeError("Value is none")
+            print ("Warning: skipping defining var(%r) with None value" %(self.name))
+            return
 
         ldim_ = self.ldim
         if isinstance(self.ldim, (tuple, list)):
@@ -2268,6 +2290,10 @@ cdef class varinfo(object):
 
     def write(self, int64_t fd):
         val_ = self.value
+
+        if val_ is None:
+            return
+
         if not isinstance(self.value, (np.ndarray)):
             val_ = np.array(self.value)
 
diff --git a/wrappers/numpy/adios_mpi.cpp b/wrappers/numpy/adios_mpi.cpp
index ca2bd99..b6b702b 100644
--- a/wrappers/numpy/adios_mpi.cpp
+++ b/wrappers/numpy/adios_mpi.cpp
@@ -1,4 +1,4 @@
-/* Generated by Cython 0.24 */
+/* Generated by Cython 0.25.2 */
 
 #define PY_SSIZE_T_CLEAN
 #include "Python.h"
@@ -7,7 +7,7 @@
 #elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03020000)
     #error Cython requires Python 2.6+ or Python 3.2+.
 #else
-#define CYTHON_ABI "0_24"
+#define CYTHON_ABI "0_25_2"
 #include <stddef.h>
 #ifndef offsetof
   #define offsetof(type, member) ( (size_t) & ((type*)0) -> member )
@@ -29,6 +29,11 @@
 #ifndef DL_EXPORT
   #define DL_EXPORT(t) t
 #endif
+#ifndef HAVE_LONG_LONG
+  #if PY_VERSION_HEX >= 0x03030000 || (PY_MAJOR_VERSION == 2 && PY_VERSION_HEX >= 0x02070000)
+    #define HAVE_LONG_LONG
+  #endif
+#endif
 #ifndef PY_LONG_LONG
   #define PY_LONG_LONG LONG_LONG
 #endif
@@ -37,13 +42,110 @@
 #endif
 #ifdef PYPY_VERSION
   #define CYTHON_COMPILING_IN_PYPY 1
+  #define CYTHON_COMPILING_IN_PYSTON 0
   #define CYTHON_COMPILING_IN_CPYTHON 0
+  #undef CYTHON_USE_TYPE_SLOTS
+  #define CYTHON_USE_TYPE_SLOTS 0
+  #undef CYTHON_USE_ASYNC_SLOTS
+  #define CYTHON_USE_ASYNC_SLOTS 0
+  #undef CYTHON_USE_PYLIST_INTERNALS
+  #define CYTHON_USE_PYLIST_INTERNALS 0
+  #undef CYTHON_USE_UNICODE_INTERNALS
+  #define CYTHON_USE_UNICODE_INTERNALS 0
+  #undef CYTHON_USE_UNICODE_WRITER
+  #define CYTHON_USE_UNICODE_WRITER 0
+  #undef CYTHON_USE_PYLONG_INTERNALS
+  #define CYTHON_USE_PYLONG_INTERNALS 0
+  #undef CYTHON_AVOID_BORROWED_REFS
+  #define CYTHON_AVOID_BORROWED_REFS 1
+  #undef CYTHON_ASSUME_SAFE_MACROS
+  #define CYTHON_ASSUME_SAFE_MACROS 0
+  #undef CYTHON_UNPACK_METHODS
+  #define CYTHON_UNPACK_METHODS 0
+  #undef CYTHON_FAST_THREAD_STATE
+  #define CYTHON_FAST_THREAD_STATE 0
+  #undef CYTHON_FAST_PYCALL
+  #define CYTHON_FAST_PYCALL 0
+#elif defined(PYSTON_VERSION)
+  #define CYTHON_COMPILING_IN_PYPY 0
+  #define CYTHON_COMPILING_IN_PYSTON 1
+  #define CYTHON_COMPILING_IN_CPYTHON 0
+  #ifndef CYTHON_USE_TYPE_SLOTS
+    #define CYTHON_USE_TYPE_SLOTS 1
+  #endif
+  #undef CYTHON_USE_ASYNC_SLOTS
+  #define CYTHON_USE_ASYNC_SLOTS 0
+  #undef CYTHON_USE_PYLIST_INTERNALS
+  #define CYTHON_USE_PYLIST_INTERNALS 0
+  #ifndef CYTHON_USE_UNICODE_INTERNALS
+    #define CYTHON_USE_UNICODE_INTERNALS 1
+  #endif
+  #undef CYTHON_USE_UNICODE_WRITER
+  #define CYTHON_USE_UNICODE_WRITER 0
+  #undef CYTHON_USE_PYLONG_INTERNALS
+  #define CYTHON_USE_PYLONG_INTERNALS 0
+  #ifndef CYTHON_AVOID_BORROWED_REFS
+    #define CYTHON_AVOID_BORROWED_REFS 0
+  #endif
+  #ifndef CYTHON_ASSUME_SAFE_MACROS
+    #define CYTHON_ASSUME_SAFE_MACROS 1
+  #endif
+  #ifndef CYTHON_UNPACK_METHODS
+    #define CYTHON_UNPACK_METHODS 1
+  #endif
+  #undef CYTHON_FAST_THREAD_STATE
+  #define CYTHON_FAST_THREAD_STATE 0
+  #undef CYTHON_FAST_PYCALL
+  #define CYTHON_FAST_PYCALL 0
 #else
   #define CYTHON_COMPILING_IN_PYPY 0
+  #define CYTHON_COMPILING_IN_PYSTON 0
   #define CYTHON_COMPILING_IN_CPYTHON 1
+  #ifndef CYTHON_USE_TYPE_SLOTS
+    #define CYTHON_USE_TYPE_SLOTS 1
+  #endif
+  #if PY_MAJOR_VERSION < 3
+    #undef CYTHON_USE_ASYNC_SLOTS
+    #define CYTHON_USE_ASYNC_SLOTS 0
+  #elif !defined(CYTHON_USE_ASYNC_SLOTS)
+    #define CYTHON_USE_ASYNC_SLOTS 1
+  #endif
+  #if PY_VERSION_HEX < 0x02070000
+    #undef CYTHON_USE_PYLONG_INTERNALS
+    #define CYTHON_USE_PYLONG_INTERNALS 0
+  #elif !defined(CYTHON_USE_PYLONG_INTERNALS)
+    #define CYTHON_USE_PYLONG_INTERNALS 1
+  #endif
+  #ifndef CYTHON_USE_PYLIST_INTERNALS
+    #define CYTHON_USE_PYLIST_INTERNALS 1
+  #endif
+  #ifndef CYTHON_USE_UNICODE_INTERNALS
+    #define CYTHON_USE_UNICODE_INTERNALS 1
+  #endif
+  #if PY_VERSION_HEX < 0x030300F0
+    #undef CYTHON_USE_UNICODE_WRITER
+    #define CYTHON_USE_UNICODE_WRITER 0
+  #elif !defined(CYTHON_USE_UNICODE_WRITER)
+    #define CYTHON_USE_UNICODE_WRITER 1
+  #endif
+  #ifndef CYTHON_AVOID_BORROWED_REFS
+    #define CYTHON_AVOID_BORROWED_REFS 0
+  #endif
+  #ifndef CYTHON_ASSUME_SAFE_MACROS
+    #define CYTHON_ASSUME_SAFE_MACROS 1
+  #endif
+  #ifndef CYTHON_UNPACK_METHODS
+    #define CYTHON_UNPACK_METHODS 1
+  #endif
+  #ifndef CYTHON_FAST_THREAD_STATE
+    #define CYTHON_FAST_THREAD_STATE 1
+  #endif
+  #ifndef CYTHON_FAST_PYCALL
+    #define CYTHON_FAST_PYCALL 1
+  #endif
 #endif
-#if !defined(CYTHON_USE_PYLONG_INTERNALS) && CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x02070000
-  #define CYTHON_USE_PYLONG_INTERNALS 1
+#if !defined(CYTHON_FAST_PYCCALL)
+#define CYTHON_FAST_PYCCALL  (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1)
 #endif
 #if CYTHON_USE_PYLONG_INTERNALS
   #include "longintrepr.h"
@@ -79,24 +181,44 @@
 #ifndef Py_TPFLAGS_HAVE_FINALIZE
   #define Py_TPFLAGS_HAVE_FINALIZE 0
 #endif
+#ifndef METH_FASTCALL
+  #define METH_FASTCALL 0x80
+  typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject **args,
+                                              Py_ssize_t nargs, PyObject *kwnames);
+#else
+  #define __Pyx_PyCFunctionFast _PyCFunctionFast
+#endif
+#if CYTHON_FAST_PYCCALL
+#define __Pyx_PyFastCFunction_Check(func)\
+    ((PyCFunction_Check(func) && (METH_FASTCALL == (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST)))))
+#else
+#define __Pyx_PyFastCFunction_Check(func) 0
+#endif
 #if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND)
   #define CYTHON_PEP393_ENABLED 1
   #define __Pyx_PyUnicode_READY(op)       (likely(PyUnicode_IS_READY(op)) ?\
                                               0 : _PyUnicode_Ready((PyObject *)(op)))
   #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_LENGTH(u)
   #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i)
+  #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u)   PyUnicode_MAX_CHAR_VALUE(u)
   #define __Pyx_PyUnicode_KIND(u)         PyUnicode_KIND(u)
   #define __Pyx_PyUnicode_DATA(u)         PyUnicode_DATA(u)
   #define __Pyx_PyUnicode_READ(k, d, i)   PyUnicode_READ(k, d, i)
+  #define __Pyx_PyUnicode_WRITE(k, d, i, ch)  PyUnicode_WRITE(k, d, i, ch)
   #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u)))
 #else
   #define CYTHON_PEP393_ENABLED 0
+  #define PyUnicode_1BYTE_KIND  1
+  #define PyUnicode_2BYTE_KIND  2
+  #define PyUnicode_4BYTE_KIND  4
   #define __Pyx_PyUnicode_READY(op)       (0)
   #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_SIZE(u)
   #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i]))
+  #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u)   ((sizeof(Py_UNICODE) == 2) ? 65535 : 1114111)
   #define __Pyx_PyUnicode_KIND(u)         (sizeof(Py_UNICODE))
   #define __Pyx_PyUnicode_DATA(u)         ((void*)PyUnicode_AS_UNICODE(u))
   #define __Pyx_PyUnicode_READ(k, d, i)   ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i]))
+  #define __Pyx_PyUnicode_WRITE(k, d, i, ch)  (((void)(k)), ((Py_UNICODE*)d)[i] = ch)
   #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != PyUnicode_GET_SIZE(u))
 #endif
 #if CYTHON_COMPILING_IN_PYPY
@@ -110,6 +232,9 @@
 #if CYTHON_COMPILING_IN_PYPY && !defined(PyUnicode_Contains)
   #define PyUnicode_Contains(u, s)  PySequence_Contains(u, s)
 #endif
+#if CYTHON_COMPILING_IN_PYPY && !defined(PyByteArray_Check)
+  #define PyByteArray_Check(obj)  PyObject_TypeCheck(obj, &PyByteArray_Type)
+#endif
 #if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Format)
   #define PyObject_Format(obj, fmt)  PyObject_CallMethod(obj, "__format__", "O", fmt)
 #endif
@@ -118,6 +243,13 @@
   #define PyObject_Free(p)     PyMem_Free(p)
   #define PyObject_Realloc(p)  PyMem_Realloc(p)
 #endif
+#if CYTHON_COMPILING_IN_PYSTON
+  #define __Pyx_PyCode_HasFreeVars(co)  PyCode_HasFreeVars(co)
+  #define __Pyx_PyFrame_SetLineNumber(frame, lineno) PyFrame_SetLineNumber(frame, lineno)
+#else
+  #define __Pyx_PyCode_HasFreeVars(co)  (PyCode_GetNumFree(co) > 0)
+  #define __Pyx_PyFrame_SetLineNumber(frame, lineno)  (frame)->f_lineno = (lineno)
+#endif
 #define __Pyx_PyString_FormatSafe(a, b)   ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b))
 #define __Pyx_PyUnicode_FormatSafe(a, b)  ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b))
 #if PY_MAJOR_VERSION >= 3
@@ -146,6 +278,7 @@
   #define PySet_CheckExact(obj)        (Py_TYPE(obj) == &PySet_Type)
 #endif
 #define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type)
+#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception)
 #if PY_MAJOR_VERSION >= 3
   #define PyIntObject                  PyLongObject
   #define PyInt_Type                   PyLong_Type
@@ -184,18 +317,20 @@
 #else
   #define __Pyx_PyMethod_New(func, self, klass) PyMethod_New(func, self, klass)
 #endif
-#if PY_VERSION_HEX >= 0x030500B1
-#define __Pyx_PyAsyncMethodsStruct PyAsyncMethods
-#define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async)
-#elif CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
-typedef struct {
-    unaryfunc am_await;
-    unaryfunc am_aiter;
-    unaryfunc am_anext;
-} __Pyx_PyAsyncMethodsStruct;
-#define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved))
+#if CYTHON_USE_ASYNC_SLOTS
+  #if PY_VERSION_HEX >= 0x030500B1
+    #define __Pyx_PyAsyncMethodsStruct PyAsyncMethods
+    #define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async)
+  #else
+    typedef struct {
+        unaryfunc am_await;
+        unaryfunc am_aiter;
+        unaryfunc am_anext;
+    } __Pyx_PyAsyncMethodsStruct;
+    #define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved))
+  #endif
 #else
-#define __Pyx_PyType_AsAsync(obj) NULL
+  #define __Pyx_PyType_AsAsync(obj) NULL
 #endif
 #ifndef CYTHON_RESTRICT
   #if defined(__GNUC__)
@@ -208,13 +343,44 @@ typedef struct {
     #define CYTHON_RESTRICT
   #endif
 #endif
+#ifndef CYTHON_UNUSED
+# if defined(__GNUC__)
+#   if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
+#     define CYTHON_UNUSED __attribute__ ((__unused__))
+#   else
+#     define CYTHON_UNUSED
+#   endif
+# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER))
+#   define CYTHON_UNUSED __attribute__ ((__unused__))
+# else
+#   define CYTHON_UNUSED
+# endif
+#endif
+#ifndef CYTHON_MAYBE_UNUSED_VAR
+#  if defined(__cplusplus)
+     template<class T> void CYTHON_MAYBE_UNUSED_VAR( const T& ) { }
+#  else
+#    define CYTHON_MAYBE_UNUSED_VAR(x) (void)(x)
+#  endif
+#endif
+#ifndef CYTHON_NCP_UNUSED
+# if CYTHON_COMPILING_IN_CPYTHON
+#  define CYTHON_NCP_UNUSED
+# else
+#  define CYTHON_NCP_UNUSED CYTHON_UNUSED
+# endif
+#endif
 #define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None)
 
 #ifndef __cplusplus
   #error "Cython files generated with the C++ option must be compiled with a C++ compiler."
 #endif
 #ifndef CYTHON_INLINE
-  #define CYTHON_INLINE inline
+  #if defined(__clang__)
+    #define CYTHON_INLINE __inline__ __attribute__ ((__unused__))
+  #else
+    #define CYTHON_INLINE inline
+  #endif
 #endif
 template<typename T>
 void __Pyx_call_destructor(T& x) {
@@ -226,7 +392,10 @@ class __Pyx_FakeReference {
     __Pyx_FakeReference() : ptr(NULL) { }
     __Pyx_FakeReference(const T& ref) : ptr(const_cast<T*>(&ref)) { }
     T *operator->() { return ptr; }
+    T *operator&() { return ptr; }
     operator T&() { return *ptr; }
+    template<typename U> bool operator ==(U other) { return *ptr == other; }
+    template<typename U> bool operator !=(U other) { return *ptr != other; }
   private:
     T *ptr;
 };
@@ -244,6 +413,11 @@ static CYTHON_INLINE float __PYX_NAN() {
   return value;
 }
 #endif
+#if defined(__CYGWIN__) && defined(_LDBL_EQ_DBL)
+#define __Pyx_truncl trunc
+#else
+#define __Pyx_truncl truncl
+#endif
 
 
 #define __PYX_ERR(f_index, lineno, Ln_error) \
@@ -271,12 +445,13 @@ static CYTHON_INLINE float __PYX_NAN() {
 #define __PYX_HAVE_API__adios_mpi
 #include "mpi-compat.h"
 #include "string.h"
-#include "stdio.h"
-#include "stdlib.h"
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
 #include "numpy/arrayobject.h"
 #include "numpy/ufuncobject.h"
 #include "mpi.h"
-#include "stdint.h"
+#include <stdint.h>
 #include "adios_types.h"
 #include "adios.h"
 #include "adios_selection.h"
@@ -289,26 +464,6 @@ static CYTHON_INLINE float __PYX_NAN() {
 #define CYTHON_WITHOUT_ASSERTIONS
 #endif
 
-#ifndef CYTHON_UNUSED
-# if defined(__GNUC__)
-#   if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
-#     define CYTHON_UNUSED __attribute__ ((__unused__))
-#   else
-#     define CYTHON_UNUSED
-#   endif
-# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER))
-#   define CYTHON_UNUSED __attribute__ ((__unused__))
-# else
-#   define CYTHON_UNUSED
-# endif
-#endif
-#ifndef CYTHON_NCP_UNUSED
-# if CYTHON_COMPILING_IN_CPYTHON
-#  define CYTHON_NCP_UNUSED
-# else
-#  define CYTHON_NCP_UNUSED CYTHON_UNUSED
-# endif
-#endif
 typedef struct {PyObject **p; const char *s; const Py_ssize_t n; const char* encoding;
                 const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry;
 
@@ -386,7 +541,7 @@ static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*);
 static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x);
 static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*);
 static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t);
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_ASSUME_SAFE_MACROS
 #define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x))
 #else
 #define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x)
@@ -494,7 +649,7 @@ static int __pyx_clineno = 0;
 static const char * __pyx_cfilenm= __FILE__;
 static const char *__pyx_filename;
 
-/* None.proto */
+/* Header.proto */
 #if !defined(CYTHON_CCOMPLEX)
   #if defined(__cplusplus)
     #define CYTHON_CCOMPLEX 1
@@ -712,7 +867,7 @@ typedef npy_double __pyx_t_5numpy_double_t;
  * ctypedef npy_cfloat      cfloat_t
  */
 typedef npy_longdouble __pyx_t_5numpy_longdouble_t;
-/* None.proto */
+/* Declarations.proto */
 #if CYTHON_CCOMPLEX
   #ifdef __cplusplus
     typedef ::std::complex< float > __pyx_t_float_complex;
@@ -722,8 +877,9 @@ typedef npy_longdouble __pyx_t_5numpy_longdouble_t;
 #else
     typedef struct { float real, imag; } __pyx_t_float_complex;
 #endif
+static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float, float);
 
-/* None.proto */
+/* Declarations.proto */
 #if CYTHON_CCOMPLEX
   #ifdef __cplusplus
     typedef ::std::complex< double > __pyx_t_double_complex;
@@ -733,6 +889,7 @@ typedef npy_longdouble __pyx_t_5numpy_longdouble_t;
 #else
     typedef struct { double real, imag; } __pyx_t_double_complex;
 #endif
+static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double, double);
 
 
 /*--- Type declarations ---*/
@@ -817,7 +974,7 @@ struct __pyx_opt_args_9adios_mpi_3var_read_points;
 struct __pyx_opt_args_9adios_mpi_3var_read_writeblock;
 struct __pyx_opt_args_9adios_mpi_3var_read;
 
-/* "adios_mpi.pyx":464
+/* "adios_mpi.pyx":472
  * cdef MPI.Comm read_init_comm
  * 
  * cpdef init(str config, MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
@@ -829,7 +986,7 @@ struct __pyx_opt_args_9adios_mpi_init {
   struct PyMPICommObject *comm;
 };
 
-/* "adios_mpi.pyx":469
+/* "adios_mpi.pyx":477
  *     return adios_init(s2b(config), init_comm.ob_mpi)
  * 
  * cpdef int64_t open(str group_name,             # <<<<<<<<<<<<<<
@@ -841,7 +998,7 @@ struct __pyx_opt_args_9adios_mpi_open {
   struct PyMPICommObject *comm;
 };
 
-/* "adios_mpi.pyx":484
+/* "adios_mpi.pyx":492
  *     return total_size
  * 
  * cpdef int write (int64_t fd_p, str name, val, dtype=None):             # <<<<<<<<<<<<<<
@@ -853,7 +1010,7 @@ struct __pyx_opt_args_9adios_mpi_write {
   PyObject *dtype;
 };
 
-/* "adios_mpi.pyx":524
+/* "adios_mpi.pyx":532
  *     return adios_close(fd_p)
  * 
  * cpdef int finalize(int mype = 0):             # <<<<<<<<<<<<<<
@@ -865,7 +1022,7 @@ struct __pyx_opt_args_9adios_mpi_finalize {
   int mype;
 };
 
-/* "adios_mpi.pyx":531
+/* "adios_mpi.pyx":539
  * ## ====================
  * 
  * cpdef int init_noxml(MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
@@ -877,7 +1034,7 @@ struct __pyx_opt_args_9adios_mpi_init_noxml {
   struct PyMPICommObject *comm;
 };
 
-/* "adios_mpi.pyx":541
+/* "adios_mpi.pyx":549
  *                                  buffer_size)
  * 
  * cpdef int64_t declare_group(str name,             # <<<<<<<<<<<<<<
@@ -890,7 +1047,7 @@ struct __pyx_opt_args_9adios_mpi_declare_group {
   int stats;
 };
 
-/* "adios_mpi.pyx":551
+/* "adios_mpi.pyx":559
  *     return id
  * 
  * cpdef int64_t define_var(int64_t group_id,             # <<<<<<<<<<<<<<
@@ -904,7 +1061,7 @@ struct __pyx_opt_args_9adios_mpi_define_var {
   PyObject *local_offsets;
 };
 
-/* "adios_mpi.pyx":718
+/* "adios_mpi.pyx":726
  *                                         <void *> val_.data)
  * 
  * cpdef int select_method (int64_t group,             # <<<<<<<<<<<<<<
@@ -917,7 +1074,7 @@ struct __pyx_opt_args_9adios_mpi_select_method {
   PyObject *base_path;
 };
 
-/* "adios_mpi.pyx":745
+/* "adios_mpi.pyx":753
  * ## ====================
  * 
  * cpdef np.dtype adios2npdtype(ADIOS_DATATYPES t, int strlen = 1):             # <<<<<<<<<<<<<<
@@ -929,7 +1086,7 @@ struct __pyx_opt_args_9adios_mpi_adios2npdtype {
   int strlen;
 };
 
-/* "adios_mpi.pyx":874
+/* "adios_mpi.pyx":882
  * 
  * """ Call adios_read_init_method """
  * cpdef int read_init(str method_name = "BP",             # <<<<<<<<<<<<<<
@@ -943,7 +1100,7 @@ struct __pyx_opt_args_9adios_mpi_read_init {
   PyObject *parameters;
 };
 
-/* "adios_mpi.pyx":884
+/* "adios_mpi.pyx":892
  * 
  * """ Call adios_read_finalize_method """
  * cpdef int read_finalize(str method_name = "BP"):             # <<<<<<<<<<<<<<
@@ -955,7 +1112,7 @@ struct __pyx_opt_args_9adios_mpi_read_finalize {
   PyObject *method_name;
 };
 
-/* "adios_mpi.pyx":1061
+/* "adios_mpi.pyx":1069
  *         adios_release_step(self.fp)
  * 
  *     cpdef advance(self, int last = 0, float timeout_sec = 0.0):             # <<<<<<<<<<<<<<
@@ -968,7 +1125,7 @@ struct __pyx_opt_args_9adios_mpi_4file_advance {
   float timeout_sec;
 };
 
-/* "adios_mpi.pyx":1359
+/* "adios_mpi.pyx":1367
  *         self.nsteps = self.vp.nsteps
  * 
  *     cpdef read_points(self, tuple points = (), from_steps = None, nsteps = None):             # <<<<<<<<<<<<<<
@@ -982,7 +1139,7 @@ struct __pyx_opt_args_9adios_mpi_3var_read_points {
   PyObject *nsteps;
 };
 
-/* "adios_mpi.pyx":1415
+/* "adios_mpi.pyx":1423
  *         return var
  * 
  *     cpdef read_writeblock(self, int rank, from_steps = None, nsteps = None):             # <<<<<<<<<<<<<<
@@ -995,7 +1152,7 @@ struct __pyx_opt_args_9adios_mpi_3var_read_writeblock {
   PyObject *nsteps;
 };
 
-/* "adios_mpi.pyx":1456
+/* "adios_mpi.pyx":1464
  *         return var
  * 
  *     cpdef read(self, tuple offset = (), tuple count = (), tuple scalar = (),             # <<<<<<<<<<<<<<
@@ -1013,7 +1170,7 @@ struct __pyx_opt_args_9adios_mpi_3var_read {
   PyObject *step_scalar;
 };
 
-/* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/mpi4py/include/mpi4py/MPI.pxd":28
+/* "../../../../.local/lib/python2.7/site-packages/mpi4py/include/mpi4py/MPI.pxd":28
  *     ctypedef MPI_Count  Count  "MPI_Count"
  * 
  * ctypedef public api class Status [             # <<<<<<<<<<<<<<
@@ -1029,7 +1186,7 @@ typedef struct PyMPIStatusObject PyMPIStatusObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIStatus_Type;
 
-/* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/mpi4py/include/mpi4py/MPI.pxd":35
+/* "../../../../.local/lib/python2.7/site-packages/mpi4py/include/mpi4py/MPI.pxd":35
  *     cdef unsigned   flags
  * 
  * ctypedef public api class Datatype [             # <<<<<<<<<<<<<<
@@ -1045,7 +1202,7 @@ typedef struct PyMPIDatatypeObject PyMPIDatatypeObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIDatatype_Type;
 
-/* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/mpi4py/include/mpi4py/MPI.pxd":42
+/* "../../../../.local/lib/python2.7/site-packages/mpi4py/include/mpi4py/MPI.pxd":42
  *     cdef unsigned     flags
  * 
  * ctypedef public api class Request [             # <<<<<<<<<<<<<<
@@ -1062,7 +1219,7 @@ typedef struct PyMPIRequestObject PyMPIRequestObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIRequest_Type;
 
-/* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/mpi4py/include/mpi4py/MPI.pxd":50
+/* "../../../../.local/lib/python2.7/site-packages/mpi4py/include/mpi4py/MPI.pxd":50
  *     cdef object      ob_buf
  * 
  * ctypedef public api class Prequest(Request) [             # <<<<<<<<<<<<<<
@@ -1076,7 +1233,7 @@ typedef struct PyMPIPrequestObject PyMPIPrequestObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIPrequest_Type;
 
-/* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/mpi4py/include/mpi4py/MPI.pxd":56
+/* "../../../../.local/lib/python2.7/site-packages/mpi4py/include/mpi4py/MPI.pxd":56
  *     pass
  * 
  * ctypedef public api class Grequest(Request) [             # <<<<<<<<<<<<<<
@@ -1091,7 +1248,7 @@ typedef struct PyMPIGrequestObject PyMPIGrequestObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIGrequest_Type;
 
-/* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/mpi4py/include/mpi4py/MPI.pxd":62
+/* "../../../../.local/lib/python2.7/site-packages/mpi4py/include/mpi4py/MPI.pxd":62
  *     cdef MPI_Request ob_grequest
  * 
  * ctypedef public api class Message [             # <<<<<<<<<<<<<<
@@ -1108,7 +1265,7 @@ typedef struct PyMPIMessageObject PyMPIMessageObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIMessage_Type;
 
-/* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/mpi4py/include/mpi4py/MPI.pxd":70
+/* "../../../../.local/lib/python2.7/site-packages/mpi4py/include/mpi4py/MPI.pxd":70
  *     cdef object      ob_buf
  * 
  * ctypedef public api class Op [             # <<<<<<<<<<<<<<
@@ -1126,7 +1283,7 @@ typedef struct PyMPIOpObject PyMPIOpObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIOp_Type;
 
-/* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/mpi4py/include/mpi4py/MPI.pxd":79
+/* "../../../../.local/lib/python2.7/site-packages/mpi4py/include/mpi4py/MPI.pxd":79
  *     cdef int    ob_usrid
  * 
  * ctypedef public api class Group [             # <<<<<<<<<<<<<<
@@ -1142,7 +1299,7 @@ typedef struct PyMPIGroupObject PyMPIGroupObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIGroup_Type;
 
-/* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/mpi4py/include/mpi4py/MPI.pxd":86
+/* "../../../../.local/lib/python2.7/site-packages/mpi4py/include/mpi4py/MPI.pxd":86
  *     cdef unsigned  flags
  * 
  * ctypedef public api class Info [             # <<<<<<<<<<<<<<
@@ -1158,7 +1315,7 @@ typedef struct PyMPIInfoObject PyMPIInfoObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIInfo_Type;
 
-/* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/mpi4py/include/mpi4py/MPI.pxd":93
+/* "../../../../.local/lib/python2.7/site-packages/mpi4py/include/mpi4py/MPI.pxd":93
  *     cdef unsigned flags
  * 
  * ctypedef public api class Errhandler [             # <<<<<<<<<<<<<<
@@ -1174,7 +1331,7 @@ typedef struct PyMPIErrhandlerObject PyMPIErrhandlerObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIErrhandler_Type;
 
-/* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/mpi4py/include/mpi4py/MPI.pxd":100
+/* "../../../../.local/lib/python2.7/site-packages/mpi4py/include/mpi4py/MPI.pxd":100
  *     cdef unsigned       flags
  * 
  * ctypedef public api class Comm [             # <<<<<<<<<<<<<<
@@ -1190,7 +1347,7 @@ typedef struct PyMPICommObject PyMPICommObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIComm_Type;
 
-/* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/mpi4py/include/mpi4py/MPI.pxd":107
+/* "../../../../.local/lib/python2.7/site-packages/mpi4py/include/mpi4py/MPI.pxd":107
  *     cdef unsigned flags
  * 
  * ctypedef public api class Intracomm(Comm) [             # <<<<<<<<<<<<<<
@@ -1204,7 +1361,7 @@ typedef struct PyMPIIntracommObject PyMPIIntracommObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIIntracomm_Type;
 
-/* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/mpi4py/include/mpi4py/MPI.pxd":113
+/* "../../../../.local/lib/python2.7/site-packages/mpi4py/include/mpi4py/MPI.pxd":113
  *     pass
  * 
  * ctypedef public api class Topocomm(Intracomm) [             # <<<<<<<<<<<<<<
@@ -1218,7 +1375,7 @@ typedef struct PyMPITopocommObject PyMPITopocommObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPITopocomm_Type;
 
-/* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/mpi4py/include/mpi4py/MPI.pxd":119
+/* "../../../../.local/lib/python2.7/site-packages/mpi4py/include/mpi4py/MPI.pxd":119
  *     pass
  * 
  * ctypedef public api class Cartcomm(Topocomm) [             # <<<<<<<<<<<<<<
@@ -1232,7 +1389,7 @@ typedef struct PyMPICartcommObject PyMPICartcommObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPICartcomm_Type;
 
-/* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/mpi4py/include/mpi4py/MPI.pxd":125
+/* "../../../../.local/lib/python2.7/site-packages/mpi4py/include/mpi4py/MPI.pxd":125
  *     pass
  * 
  * ctypedef public api class Graphcomm(Topocomm) [             # <<<<<<<<<<<<<<
@@ -1246,7 +1403,7 @@ typedef struct PyMPIGraphcommObject PyMPIGraphcommObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIGraphcomm_Type;
 
-/* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/mpi4py/include/mpi4py/MPI.pxd":131
+/* "../../../../.local/lib/python2.7/site-packages/mpi4py/include/mpi4py/MPI.pxd":131
  *     pass
  * 
  * ctypedef public api class Distgraphcomm(Topocomm) [             # <<<<<<<<<<<<<<
@@ -1260,7 +1417,7 @@ typedef struct PyMPIDistgraphcommObject PyMPIDistgraphcommObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIDistgraphcomm_Type;
 
-/* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/mpi4py/include/mpi4py/MPI.pxd":137
+/* "../../../../.local/lib/python2.7/site-packages/mpi4py/include/mpi4py/MPI.pxd":137
  *     pass
  * 
  * ctypedef public api class Intercomm(Comm) [             # <<<<<<<<<<<<<<
@@ -1274,7 +1431,7 @@ typedef struct PyMPIIntercommObject PyMPIIntercommObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIIntercomm_Type;
 
-/* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/mpi4py/include/mpi4py/MPI.pxd":143
+/* "../../../../.local/lib/python2.7/site-packages/mpi4py/include/mpi4py/MPI.pxd":143
  *     pass
  * 
  * ctypedef public api class Win [             # <<<<<<<<<<<<<<
@@ -1291,7 +1448,7 @@ typedef struct PyMPIWinObject PyMPIWinObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIWin_Type;
 
-/* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/mpi4py/include/mpi4py/MPI.pxd":151
+/* "../../../../.local/lib/python2.7/site-packages/mpi4py/include/mpi4py/MPI.pxd":151
  *     cdef object   ob_mem
  * 
  * ctypedef public api class File [             # <<<<<<<<<<<<<<
@@ -1307,7 +1464,7 @@ typedef struct PyMPIFileObject PyMPIFileObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIFile_Type;
 
-/* "adios_mpi.pyx":889
+/* "adios_mpi.pyx":897
  * 
  * ## dict for handling '/' prefix
  * cdef class softdict(dict):             # <<<<<<<<<<<<<<
@@ -1319,7 +1476,7 @@ struct __pyx_obj_9adios_mpi_softdict {
 };
 
 
-/* "adios_mpi.pyx":913
+/* "adios_mpi.pyx":921
  * 
  * ## Python class for ADIOS_FILE structure
  * cdef class file(dict):             # <<<<<<<<<<<<<<
@@ -1346,7 +1503,7 @@ struct __pyx_obj_9adios_mpi_file {
 };
 
 
-/* "adios_mpi.pyx":1185
+/* "adios_mpi.pyx":1193
  *         return list(s-set(['']))
  * 
  * cdef class blockinfo(object):             # <<<<<<<<<<<<<<
@@ -1362,7 +1519,7 @@ struct __pyx_obj_9adios_mpi_blockinfo {
 };
 
 
-/* "adios_mpi.pyx":1220
+/* "adios_mpi.pyx":1228
  *                 self.count)
  * 
  * cdef class var(dict):             # <<<<<<<<<<<<<<
@@ -1385,7 +1542,7 @@ struct __pyx_obj_9adios_mpi_var {
 };
 
 
-/* "adios_mpi.pyx":1685
+/* "adios_mpi.pyx":1693
  *         return self.attrs.keys()
  * 
  * cdef class attr(object):             # <<<<<<<<<<<<<<
@@ -1401,7 +1558,7 @@ struct __pyx_obj_9adios_mpi_attr {
 };
 
 
-/* "adios_mpi.pyx":1771
+/* "adios_mpi.pyx":1779
  *                (self.name, self.dtype, self.value)
  * 
  * cdef class group(dict):             # <<<<<<<<<<<<<<
@@ -1417,7 +1574,7 @@ struct __pyx_obj_9adios_mpi_group {
 };
 
 
-/* "adios_mpi.pyx":1883
+/* "adios_mpi.pyx":1891
  * 
  * ## Helper dict
  * cdef class smartdict(dict):             # <<<<<<<<<<<<<<
@@ -1430,7 +1587,7 @@ struct __pyx_obj_9adios_mpi_smartdict {
 };
 
 
-/* "adios_mpi.pyx":1895
+/* "adios_mpi.pyx":1903
  *             self.factory(key, value)
  * 
  * cdef class writer(object):             # <<<<<<<<<<<<<<
@@ -1447,13 +1604,14 @@ struct __pyx_obj_9adios_mpi_writer {
   int is_noxml;
   PyObject *mode;
   struct PyMPICommObject *comm;
+  int stats;
   PyObject *vars;
   PyObject *attrs;
   uint64_t timeaggregation_buffersize;
 };
 
 
-/* "adios_mpi.pyx":2149
+/* "adios_mpi.pyx":2170
  *         self.close()
  * 
  * cdef class attrinfo(object):             # <<<<<<<<<<<<<<
@@ -1469,7 +1627,7 @@ struct __pyx_obj_9adios_mpi_attrinfo {
 };
 
 
-/* "adios_mpi.pyx":2202
+/* "adios_mpi.pyx":2223
  *                  self.dtype)
  * 
  * cdef class varinfo(object):             # <<<<<<<<<<<<<<
@@ -1488,7 +1646,7 @@ struct __pyx_obj_9adios_mpi_varinfo {
 
 
 
-/* "adios_mpi.pyx":913
+/* "adios_mpi.pyx":921
  * 
  * ## Python class for ADIOS_FILE structure
  * cdef class file(dict):             # <<<<<<<<<<<<<<
@@ -1505,7 +1663,7 @@ struct __pyx_vtabstruct_9adios_mpi_file {
 static struct __pyx_vtabstruct_9adios_mpi_file *__pyx_vtabptr_9adios_mpi_file;
 
 
-/* "adios_mpi.pyx":1220
+/* "adios_mpi.pyx":1228
  *                 self.count)
  * 
  * cdef class var(dict):             # <<<<<<<<<<<<<<
@@ -1588,7 +1746,7 @@ static struct __pyx_vtabstruct_9adios_mpi_var *__pyx_vtabptr_9adios_mpi_var;
 #define __Pyx_XCLEAR(r)   do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0)
 
 /* PyObjectGetAttrStr.proto */
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_USE_TYPE_SLOTS
 static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) {
     PyTypeObject* tp = Py_TYPE(obj);
     if (likely(tp->tp_getattro))
@@ -1606,6 +1764,24 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject
 /* GetBuiltinName.proto */
 static PyObject *__Pyx_GetBuiltinName(PyObject *name);
 
+/* PyCFunctionFastCall.proto */
+#if CYTHON_FAST_PYCCALL
+static CYTHON_INLINE PyObject *__Pyx_PyCFunction_FastCall(PyObject *func, PyObject **args, Py_ssize_t nargs);
+#else
+#define __Pyx_PyCFunction_FastCall(func, args, nargs)  (assert(0), NULL)
+#endif
+
+/* PyFunctionFastCall.proto */
+#if CYTHON_FAST_PYCALL
+#define __Pyx_PyFunction_FastCall(func, args, nargs)\
+    __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL)
+#if 1 || PY_VERSION_HEX < 0x030600B1
+static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, int nargs, PyObject *kwargs);
+#else
+#define __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs) _PyFunction_FastCallDict(func, args, nargs, kwargs)
+#endif
+#endif
+
 /* PyObjectCall.proto */
 #if CYTHON_COMPILING_IN_CPYTHON
 static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw);
@@ -1629,7 +1805,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func);
 #endif
 
 /* PyThreadStateGet.proto */
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_FAST_THREAD_STATE
 #define __Pyx_PyThreadState_declare  PyThreadState *__pyx_tstate;
 #define __Pyx_PyThreadState_assign  __pyx_tstate = PyThreadState_GET();
 #else
@@ -1638,7 +1814,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func);
 #endif
 
 /* PyErrFetchRestore.proto */
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_FAST_THREAD_STATE
 #define __Pyx_ErrRestoreWithState(type, value, tb)  __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb)
 #define __Pyx_ErrFetchWithState(type, value, tb)    __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb)
 #define __Pyx_ErrRestore(type, value, tb)  __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb)
@@ -1690,7 +1866,7 @@ static CYTHON_INLINE int __Pyx_PySequence_ContainsTF(PyObject* item, PyObject* s
 }
 
 /* ListAppend.proto */
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS
 static CYTHON_INLINE int __Pyx_PyList_Append(PyObject* list, PyObject* x) {
     PyListObject* L = (PyListObject*) list;
     Py_ssize_t len = Py_SIZE(list);
@@ -1742,7 +1918,7 @@ static CYTHON_INLINE int __Pyx_PyList_Extend(PyObject* L, PyObject* v) {
 }
 
 /* PyIntBinop.proto */
-#if CYTHON_COMPILING_IN_CPYTHON
+#if !CYTHON_COMPILING_IN_PYPY
 static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, long intval, int inplace);
 #else
 #define __Pyx_PyInt_AddObjC(op1, op2, intval, inplace)\
@@ -1750,7 +1926,7 @@ static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, long intval,
 #endif
 
 /* PyIntBinop.proto */
-#if CYTHON_COMPILING_IN_CPYTHON
+#if !CYTHON_COMPILING_IN_PYPY
 static PyObject* __Pyx_PyInt_SubtractObjC(PyObject *op1, PyObject *op2, long intval, int inplace);
 #else
 #define __Pyx_PyInt_SubtractObjC(op1, op2, intval, inplace)\
@@ -1792,7 +1968,7 @@ static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int
 #endif
 
 /* PyIntBinop.proto */
-#if CYTHON_COMPILING_IN_CPYTHON
+#if !CYTHON_COMPILING_IN_PYPY
 static PyObject* __Pyx_PyInt_EqObjC(PyObject *op1, PyObject *op2, long intval, int inplace);
 #else
 #define __Pyx_PyInt_EqObjC(op1, op2, intval, inplace)\
@@ -1800,7 +1976,7 @@ static PyObject* __Pyx_PyInt_EqObjC(PyObject *op1, PyObject *op2, long intval, i
     #endif
 
 /* ListCompAppend.proto */
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS
 static CYTHON_INLINE int __Pyx_ListComp_Append(PyObject* list, PyObject* x) {
     PyListObject* L = (PyListObject*) list;
     Py_ssize_t len = Py_SIZE(list);
@@ -1838,7 +2014,9 @@ static PyObject* __Pyx__CallUnboundCMethod0(__Pyx_CachedCFunction* cfunc, PyObje
     ((likely((cfunc)->func)) ?\
         (likely((cfunc)->flag == METH_NOARGS) ?  (*((cfunc)->func))(self, NULL) :\
          (likely((cfunc)->flag == (METH_VARARGS | METH_KEYWORDS)) ?  ((*(PyCFunctionWithKeywords)(cfunc)->func)(self, __pyx_empty_tuple, NULL)) :\
-             ((cfunc)->flag == METH_VARARGS ?  (*((cfunc)->func))(self, __pyx_empty_tuple) : __Pyx__CallUnboundCMethod0(cfunc, self)))) :\
+             ((cfunc)->flag == METH_VARARGS ?  (*((cfunc)->func))(self, __pyx_empty_tuple) :\
+              (PY_VERSION_HEX >= 0x030600B1 && (cfunc)->flag == METH_FASTCALL ?  (*(__Pyx_PyCFunctionFast)(cfunc)->func)(self, &PyTuple_GET_ITEM(__pyx_empty_tuple, 0), 0, NULL) :\
+                __Pyx__CallUnboundCMethod0(cfunc, self))))) :\
         __Pyx__CallUnboundCMethod0(cfunc, self))
 #else
 #define __Pyx_CallUnboundCMethod0(cfunc, self)  __Pyx__CallUnboundCMethod0(cfunc, self)
@@ -1913,7 +2091,7 @@ static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) {
 #endif
 
 /* PyObjectSetAttrStr.proto */
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_USE_TYPE_SLOTS
 #define __Pyx_PyObject_DelAttrStr(o,n) __Pyx_PyObject_SetAttrStr(o,n,NULL)
 static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr_name, PyObject* value) {
     PyTypeObject* tp = Py_TYPE(obj);
@@ -1952,6 +2130,33 @@ static CYTHON_INLINE int __Pyx_dict_iter_next(PyObject* dict_or_iter, Py_ssize_t
 /* py_dict_values.proto */
 static CYTHON_INLINE PyObject* __Pyx_PyDict_Values(PyObject* d);
 
+/* SaveResetException.proto */
+#if CYTHON_FAST_THREAD_STATE
+#define __Pyx_ExceptionSave(type, value, tb)  __Pyx__ExceptionSave(__pyx_tstate, type, value, tb)
+static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
+#define __Pyx_ExceptionReset(type, value, tb)  __Pyx__ExceptionReset(__pyx_tstate, type, value, tb)
+static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb);
+#else
+#define __Pyx_ExceptionSave(type, value, tb)   PyErr_GetExcInfo(type, value, tb)
+#define __Pyx_ExceptionReset(type, value, tb)  PyErr_SetExcInfo(type, value, tb)
+#endif
+
+/* PyErrExceptionMatches.proto */
+#if CYTHON_FAST_THREAD_STATE
+#define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState(__pyx_tstate, err)
+static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err);
+#else
+#define __Pyx_PyErr_ExceptionMatches(err)  PyErr_ExceptionMatches(err)
+#endif
+
+/* GetException.proto */
+#if CYTHON_FAST_THREAD_STATE
+#define __Pyx_GetException(type, value, tb)  __Pyx__GetException(__pyx_tstate, type, value, tb)
+static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
+#else
+static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb);
+#endif
+
 /* SetVTable.proto */
 static int __Pyx_SetVtable(PyObject *dict, void *vtable);
 
@@ -1990,6 +2195,9 @@ static void __Pyx_AddTraceback(const char *funcname, int c_line,
                                int py_line, const char *filename);
 
 /* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_ADIOS_STATISTICS_FLAG(ADIOS_STATISTICS_FLAG value);
+
+/* CIntToPy.proto */
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value);
 
 /* CIntToPy.proto */
@@ -2013,7 +2221,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_uint32_t(uint32_t value);
 /* CIntToPy.proto */
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_ADIOS_DATATYPES(ADIOS_DATATYPES value);
 
-/* None.proto */
+/* RealImag.proto */
 #if CYTHON_CCOMPLEX
   #ifdef __cplusplus
     #define __Pyx_CREAL(z) ((z).real())
@@ -2026,7 +2234,8 @@ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_ADIOS_DATATYPES(ADIOS_DATATYPES
     #define __Pyx_CREAL(z) ((z).real)
     #define __Pyx_CIMAG(z) ((z).imag)
 #endif
-#if defined(__cplusplus) && CYTHON_CCOMPLEX         && (defined(_WIN32) || defined(__clang__) || (defined(__GNUC__) && (__GNUC__ >= 5 || __GNUC__ == 4 && __GNUC_MINOR__ >= 4 )) || __cplusplus >= 201103)
+#if defined(__cplusplus) && CYTHON_CCOMPLEX\
+        && (defined(_WIN32) || defined(__clang__) || (defined(__GNUC__) && (__GNUC__ >= 5 || __GNUC__ == 4 && __GNUC_MINOR__ >= 4 )) || __cplusplus >= 201103)
     #define __Pyx_SET_CREAL(z,x) ((z).real(x))
     #define __Pyx_SET_CIMAG(z,y) ((z).imag(y))
 #else
@@ -2034,85 +2243,79 @@ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_ADIOS_DATATYPES(ADIOS_DATATYPES
     #define __Pyx_SET_CIMAG(z,y) __Pyx_CIMAG(z) = (y)
 #endif
 
-/* None.proto */
-static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float, float);
-
-/* None.proto */
+/* Arithmetic.proto */
 #if CYTHON_CCOMPLEX
-    #define __Pyx_c_eqf(a, b)   ((a)==(b))
-    #define __Pyx_c_sumf(a, b)  ((a)+(b))
-    #define __Pyx_c_difff(a, b) ((a)-(b))
-    #define __Pyx_c_prodf(a, b) ((a)*(b))
-    #define __Pyx_c_quotf(a, b) ((a)/(b))
-    #define __Pyx_c_negf(a)     (-(a))
+    #define __Pyx_c_eq_float(a, b)   ((a)==(b))
+    #define __Pyx_c_sum_float(a, b)  ((a)+(b))
+    #define __Pyx_c_diff_float(a, b) ((a)-(b))
+    #define __Pyx_c_prod_float(a, b) ((a)*(b))
+    #define __Pyx_c_quot_float(a, b) ((a)/(b))
+    #define __Pyx_c_neg_float(a)     (-(a))
   #ifdef __cplusplus
-    #define __Pyx_c_is_zerof(z) ((z)==(float)0)
-    #define __Pyx_c_conjf(z)    (::std::conj(z))
+    #define __Pyx_c_is_zero_float(z) ((z)==(float)0)
+    #define __Pyx_c_conj_float(z)    (::std::conj(z))
     #if 1
-        #define __Pyx_c_absf(z)     (::std::abs(z))
-        #define __Pyx_c_powf(a, b)  (::std::pow(a, b))
+        #define __Pyx_c_abs_float(z)     (::std::abs(z))
+        #define __Pyx_c_pow_float(a, b)  (::std::pow(a, b))
     #endif
   #else
-    #define __Pyx_c_is_zerof(z) ((z)==0)
-    #define __Pyx_c_conjf(z)    (conjf(z))
+    #define __Pyx_c_is_zero_float(z) ((z)==0)
+    #define __Pyx_c_conj_float(z)    (conjf(z))
     #if 1
-        #define __Pyx_c_absf(z)     (cabsf(z))
-        #define __Pyx_c_powf(a, b)  (cpowf(a, b))
+        #define __Pyx_c_abs_float(z)     (cabsf(z))
+        #define __Pyx_c_pow_float(a, b)  (cpowf(a, b))
     #endif
  #endif
 #else
-    static CYTHON_INLINE int __Pyx_c_eqf(__pyx_t_float_complex, __pyx_t_float_complex);
-    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sumf(__pyx_t_float_complex, __pyx_t_float_complex);
-    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_difff(__pyx_t_float_complex, __pyx_t_float_complex);
-    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prodf(__pyx_t_float_complex, __pyx_t_float_complex);
-    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quotf(__pyx_t_float_complex, __pyx_t_float_complex);
-    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_negf(__pyx_t_float_complex);
-    static CYTHON_INLINE int __Pyx_c_is_zerof(__pyx_t_float_complex);
-    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conjf(__pyx_t_float_complex);
+    static CYTHON_INLINE int __Pyx_c_eq_float(__pyx_t_float_complex, __pyx_t_float_complex);
+    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sum_float(__pyx_t_float_complex, __pyx_t_float_complex);
+    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_diff_float(__pyx_t_float_complex, __pyx_t_float_complex);
+    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prod_float(__pyx_t_float_complex, __pyx_t_float_complex);
+    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quot_float(__pyx_t_float_complex, __pyx_t_float_complex);
+    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_neg_float(__pyx_t_float_complex);
+    static CYTHON_INLINE int __Pyx_c_is_zero_float(__pyx_t_float_complex);
+    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conj_float(__pyx_t_float_complex);
     #if 1
-        static CYTHON_INLINE float __Pyx_c_absf(__pyx_t_float_complex);
-        static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_powf(__pyx_t_float_complex, __pyx_t_float_complex);
+        static CYTHON_INLINE float __Pyx_c_abs_float(__pyx_t_float_complex);
+        static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_pow_float(__pyx_t_float_complex, __pyx_t_float_complex);
     #endif
 #endif
 
-/* None.proto */
-static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double, double);
-
-/* None.proto */
+/* Arithmetic.proto */
 #if CYTHON_CCOMPLEX
-    #define __Pyx_c_eq(a, b)   ((a)==(b))
-    #define __Pyx_c_sum(a, b)  ((a)+(b))
-    #define __Pyx_c_diff(a, b) ((a)-(b))
-    #define __Pyx_c_prod(a, b) ((a)*(b))
-    #define __Pyx_c_quot(a, b) ((a)/(b))
-    #define __Pyx_c_neg(a)     (-(a))
+    #define __Pyx_c_eq_double(a, b)   ((a)==(b))
+    #define __Pyx_c_sum_double(a, b)  ((a)+(b))
+    #define __Pyx_c_diff_double(a, b) ((a)-(b))
+    #define __Pyx_c_prod_double(a, b) ((a)*(b))
+    #define __Pyx_c_quot_double(a, b) ((a)/(b))
+    #define __Pyx_c_neg_double(a)     (-(a))
   #ifdef __cplusplus
-    #define __Pyx_c_is_zero(z) ((z)==(double)0)
-    #define __Pyx_c_conj(z)    (::std::conj(z))
+    #define __Pyx_c_is_zero_double(z) ((z)==(double)0)
+    #define __Pyx_c_conj_double(z)    (::std::conj(z))
     #if 1
-        #define __Pyx_c_abs(z)     (::std::abs(z))
-        #define __Pyx_c_pow(a, b)  (::std::pow(a, b))
+        #define __Pyx_c_abs_double(z)     (::std::abs(z))
+        #define __Pyx_c_pow_double(a, b)  (::std::pow(a, b))
     #endif
   #else
-    #define __Pyx_c_is_zero(z) ((z)==0)
-    #define __Pyx_c_conj(z)    (conj(z))
+    #define __Pyx_c_is_zero_double(z) ((z)==0)
+    #define __Pyx_c_conj_double(z)    (conj(z))
     #if 1
-        #define __Pyx_c_abs(z)     (cabs(z))
-        #define __Pyx_c_pow(a, b)  (cpow(a, b))
+        #define __Pyx_c_abs_double(z)     (cabs(z))
+        #define __Pyx_c_pow_double(a, b)  (cpow(a, b))
     #endif
  #endif
 #else
-    static CYTHON_INLINE int __Pyx_c_eq(__pyx_t_double_complex, __pyx_t_double_complex);
-    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum(__pyx_t_double_complex, __pyx_t_double_complex);
-    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff(__pyx_t_double_complex, __pyx_t_double_complex);
-    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod(__pyx_t_double_complex, __pyx_t_double_complex);
-    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot(__pyx_t_double_complex, __pyx_t_double_complex);
-    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg(__pyx_t_double_complex);
-    static CYTHON_INLINE int __Pyx_c_is_zero(__pyx_t_double_complex);
-    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj(__pyx_t_double_complex);
+    static CYTHON_INLINE int __Pyx_c_eq_double(__pyx_t_double_complex, __pyx_t_double_complex);
+    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum_double(__pyx_t_double_complex, __pyx_t_double_complex);
+    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff_double(__pyx_t_double_complex, __pyx_t_double_complex);
+    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod_double(__pyx_t_double_complex, __pyx_t_double_complex);
+    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot_double(__pyx_t_double_complex, __pyx_t_double_complex);
+    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg_double(__pyx_t_double_complex);
+    static CYTHON_INLINE int __Pyx_c_is_zero_double(__pyx_t_double_complex);
+    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj_double(__pyx_t_double_complex);
     #if 1
-        static CYTHON_INLINE double __Pyx_c_abs(__pyx_t_double_complex);
-        static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow(__pyx_t_double_complex, __pyx_t_double_complex);
+        static CYTHON_INLINE double __Pyx_c_abs_double(__pyx_t_double_complex);
+        static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow_double(__pyx_t_double_complex, __pyx_t_double_complex);
     #endif
 #endif
 
@@ -2315,6 +2518,7 @@ static PyObject *__pyx_builtin_enumerate;
 static PyObject *__pyx_builtin_NotImplementedError;
 static PyObject *__pyx_builtin_ValueError;
 static PyObject *__pyx_builtin_RuntimeError;
+static PyObject *__pyx_builtin_ImportError;
 static const char __pyx_k_[] = "/";
 static const char __pyx_k_C[] = "C";
 static const char __pyx_k_S[] = "S";
@@ -2339,9 +2543,9 @@ static const char __pyx_k_NOW[] = "NOW";
 static const char __pyx_k_Var[] = "Var";
 static const char __pyx_k_YES[] = "YES";
 static const char __pyx_k__10[] = "";
-static const char __pyx_k__63[] = " ";
-static const char __pyx_k__65[] = "(,)";
-static const char __pyx_k__77[] = "*";
+static const char __pyx_k__64[] = " ";
+static const char __pyx_k__66[] = "(,)";
+static const char __pyx_k__81[] = "*";
 static const char __pyx_k_all[] = "all";
 static const char __pyx_k_any[] = "any";
 static const char __pyx_k_doc[] = "__doc__";
@@ -2353,6 +2557,7 @@ static const char __pyx_k_var[] = "var";
 static const char __pyx_k_zip[] = "zip";
 static const char __pyx_k_Attr[] = "Attr";
 static const char __pyx_k_FLAG[] = "FLAG";
+static const char __pyx_k_FULL[] = "FULL";
 static const char __pyx_k_File[] = "File";
 static const char __pyx_k_ICEE[] = "ICEE";
 static const char __pyx_k_NONE[] = "NONE";
@@ -2385,6 +2590,7 @@ static const char __pyx_k_prod[] = "prod";
 static const char __pyx_k_rank[] = "rank";
 static const char __pyx_k_read[] = "read";
 static const char __pyx_k_real[] = "real";
+static const char __pyx_k_root[] = "root";
 static const char __pyx_k_size[] = "size";
 static const char __pyx_k_test[] = "__test__";
 static const char __pyx_k_type[] = "type";
@@ -2398,6 +2604,7 @@ static const char __pyx_k_LATER[] = "LATER";
 static const char __pyx_k_array[] = "array";
 static const char __pyx_k_attrs[] = "attrs";
 static const char __pyx_k_atype[] = "atype";
+static const char __pyx_k_bcast[] = "bcast";
 static const char __pyx_k_bytes[] = "(bytes)";
 static const char __pyx_k_close[] = "close";
 static const char __pyx_k_count[] = "count";
@@ -2428,6 +2635,7 @@ static const char __pyx_k_varid[] = "varid";
 static const char __pyx_k_write[] = "write";
 static const char __pyx_k_zeros[] = "zeros";
 static const char __pyx_k_15s_lu[] = "%15s : %lu";
+static const char __pyx_k_MINMAX[] = "MINMAX";
 static const char __pyx_k_POSIX1[] = "POSIX1";
 static const char __pyx_k_Writer[] = "Writer";
 static const char __pyx_k_config[] = "config";
@@ -2457,6 +2665,7 @@ static const char __pyx_k_values[] = "values";
 static const char __pyx_k_var_id[] = "var_id";
 static const char __pyx_k_xrange[] = "xrange";
 static const char __pyx_k_CURRENT[] = "CURRENT";
+static const char __pyx_k_DEFAULT[] = "DEFAULT";
 static const char __pyx_k_Reading[] = "Reading ... ";
 static const char __pyx_k_UNKNOWN[] = "UNKNOWN";
 static const char __pyx_k_Varinfo[] = "Varinfo";
@@ -2486,6 +2695,7 @@ static const char __pyx_k_Attrinfo[] = "Attrinfo";
 static const char __pyx_k_DATATYPE[] = "DATATYPE";
 static const char __pyx_k_Ellipsis[] = "Ellipsis";
 static const char __pyx_k_FLEXPATH[] = "FLEXPATH";
+static const char __pyx_k_Get_rank[] = "Get_rank";
 static const char __pyx_k_KeyError[] = "KeyError";
 static const char __pyx_k_LOCKMODE[] = "LOCKMODE";
 static const char __pyx_k_asscalar[] = "asscalar";
@@ -2499,6 +2709,7 @@ static const char __pyx_k_meshname[] = "meshname";
 static const char __pyx_k_qualname[] = "__qualname__";
 static const char __pyx_k_readattr[] = "_readattr";
 static const char __pyx_k_string_2[] = "string_";
+static const char __pyx_k_tempfile[] = "tempfile";
 static const char __pyx_k_tostring[] = "tostring";
 static const char __pyx_k_AdiosFile[] = "=== AdiosFile ===";
 static const char __pyx_k_COMM_SELF[] = "COMM_SELF";
@@ -2528,6 +2739,7 @@ static const char __pyx_k_transform[] = "transform";
 static const char __pyx_k_COMM_WORLD[] = "COMM_WORLD";
 static const char __pyx_k_DATASPACES[] = "DATASPACES";
 static const char __pyx_k_IndexError[] = "IndexError";
+static const char __pyx_k_STATISTICS[] = "STATISTICS";
 static const char __pyx_k_ValueError[] = "ValueError";
 static const char __pyx_k_buffersize[] = "buffersize";
 static const char __pyx_k_complex128[] = "complex128";
@@ -2545,6 +2757,7 @@ static const char __pyx_k_startswith[] = "startswith";
 static const char __pyx_k_time_index[] = "time_index";
 static const char __pyx_k_time_steps[] = "time_steps";
 static const char __pyx_k_timeseries[] = "timeseries";
+static const char __pyx_k_ImportError[] = "ImportError";
 static const char __pyx_k_READ_METHOD[] = "READ_METHOD";
 static const char __pyx_k_buffer_size[] = "buffer_size";
 static const char __pyx_k_concatenate[] = "concatenate";
@@ -2586,8 +2799,9 @@ static const char __pyx_k_Not_an_open_file[] = "Not an open file";
 static const char __pyx_k_unsigned_integer[] = "unsigned_integer";
 static const char __pyx_k_BUFFER_ALLOC_WHEN[] = "BUFFER_ALLOC_WHEN";
 static const char __pyx_k_global_dimensions[] = "global_dimensions";
+static const char __pyx_k_NamedTemporaryFile[] = "NamedTemporaryFile";
 static const char __pyx_k_transform_type_str[] = "transform_type_str";
-static const char __pyx_k_var_read_line_1456[] = "var.read (line 1456)";
+static const char __pyx_k_var_read_line_1464[] = "var.read (line 1464)";
 static const char __pyx_k_NotImplementedError[] = "NotImplementedError";
 static const char __pyx_k_Not_implemented_yet[] = "Not implemented yet";
 static const char __pyx_k_Not_an_open_variable[] = "Not an open variable";
@@ -2595,13 +2809,13 @@ static const char __pyx_k_set_time_aggregation[] = "set_time_aggregation";
 static const char __pyx_k_Use_default_BP_method[] = ". Use default BP method";
 static const char __pyx_k_AdiosGroup_vars_r_attrs_r[] = "AdiosGroup (vars=%r, attrs=%r)";
 static const char __pyx_k_ndarray_is_not_C_contiguous[] = "ndarray is not C contiguous";
-static const char __pyx_k_writer_define_var_line_2019[] = "writer.define_var (line 2019)";
+static const char __pyx_k_writer_define_var_line_2040[] = "writer.define_var (line 2040)";
 static const char __pyx_k_Rank_is_out_of_range_nblock_r[] = "Rank is out of range (nblock=%r)";
 static const char __pyx_k_WARN_Invalid_read_method_name[] = "[WARN] Invalid read method name:";
 static const char __pyx_k_Data_type_is_not_supported_yet[] = "Data type is not supported yet";
-static const char __pyx_k_Define_a_group_associated_with[] = "\n        Define a group associated with the file.\n\n        Args:\n            gname (str): group name.\n            method (str, optional): Adios write method (default: 'POSIX1')\n            method_params (str, optional): parameters for the write method (default: '')\n\n        Example:\n\n        >>>  fw.declare_group('group', method='MPI', method_params='verbose=3')\n\n        ";
+static const char __pyx_k_Define_a_group_associated_with[] = "\n        Define a group associated with the file.\n\n        Args:\n            gname (str): group name.\n            method (str, optional): Adios write method (default: 'POSIX1')\n            method_params (str, optional): parameters for the write method (default: '')\n            stats (int, optional): statistics (default: 'DEFAULT')\n\n        Example:\n\n        >>>  fw.declare_group('group', method='MPI', method_params= [...]
 static const char __pyx_k_Perform_read_Read_data_from_an[] = " Perform read.\n\n        Read data from an ADIOS BP file. Subset reading is\n        supported. Without any options, this will read out a whole\n        data.\n\n        Args:\n            offset (tuple of int, optional): offset (default: ())\n            count (tuple of int, optional): count (default: ())\n            scalar (tuple of bool, optional): scalar (default: ())\n            from_steps (int, optional): starting ste [...]
-static const char __pyx_k_writer_declare_group_line_1982[] = "writer.declare_group (line 1982)";
+static const char __pyx_k_writer_declare_group_line_1995[] = "writer.declare_group (line 1995)";
 static const char __pyx_k_AdiosFile_path_r_nvars_r_vars_r[] = "AdiosFile (path=%r, nvars=%r, vars=%r, nattrs=%r, attrs=%r, current_step=%r, last_step=%r, file_size=%r)";
 static const char __pyx_k_AdiosVar_varid_r_name_r_dtype_r[] = "AdiosVar (varid=%r, name=%r, dtype=%r, ndim=%r, dims=%r, nsteps=%r, attrs=%r)";
 static const char __pyx_k_AdiosVarinfo_name_r_ldim_r_gdim[] = "AdiosVarinfo (name=%r, ldim=%r, gdim=%r, offset=%r, transform=%r, value=%r)";
@@ -2609,6 +2823,8 @@ static const char __pyx_k_Define_a_variable_associated_wi[] = "\n        Define
 static const char __pyx_k_Step_index_is_out_of_range_from[] = "Step index is out of range: from_steps=%r, nsteps=%r";
 static const char __pyx_k_Users_jyc_project_adios_devel_w[] = "/Users/jyc/project/adios-devel/wrappers/numpy/adios_mpi.pyx";
 static const char __pyx_k_Warning_No_support_yet_s_type_d[] = "Warning: No support yet: %s (type=%d, bytes=%d)";
+static const char __pyx_k_Warning_skipping_defining_var_r[] = "Warning: skipping defining var(%r) with None value";
+static const char __pyx_k_numpy_core_multiarray_failed_to[] = "numpy.core.multiarray failed to import";
 static const char __pyx_k_unknown_dtype_code_in_numpy_pxd[] = "unknown dtype code in numpy.pxd (%d)";
 static const char __pyx_k_ADIOS_ADIOS_python_module_module[] = "ADIOS: ADIOS python module\n\n.. moduleauthor:: Jong Choi <choij at ornl.gov>\n";
 static const char __pyx_k_AdiosAttr_name_r_dtype_r_value_r[] = "AdiosAttr (name=%r, dtype=%r, value=%r)";
@@ -2624,6 +2840,7 @@ static const char __pyx_k_Only_contiguous_arrays_are_suppo[] = "Only contiguous
 static const char __pyx_k_Requested_is_larger_than_the_sha[] = "Requested is larger than the shape.";
 static const char __pyx_k_Scalar_dimension_mismatch_scalar[] = "Scalar dimension mismatch (scalar dim: %r)";
 static const char __pyx_k_ndarray_is_not_Fortran_contiguou[] = "ndarray is not Fortran contiguous";
+static const char __pyx_k_numpy_core_umath_failed_to_impor[] = "numpy.core.umath failed to import";
 static const char __pyx_k_Format_string_allocated_too_shor_2[] = "Format string allocated too short.";
 static PyObject *__pyx_kp_s_;
 static PyObject *__pyx_kp_s_15s_d;
@@ -2654,6 +2871,7 @@ static PyObject *__pyx_n_s_Clone;
 static PyObject *__pyx_kp_s_Count_dimension_mismatch_count_d;
 static PyObject *__pyx_n_s_DATASPACES;
 static PyObject *__pyx_n_s_DATATYPE;
+static PyObject *__pyx_n_s_DEFAULT;
 static PyObject *__pyx_n_s_DIMES;
 static PyObject *__pyx_kp_s_Data_type_is_not_supported_yet;
 static PyObject *__pyx_kp_u_Define_a_group_associated_with;
@@ -2661,19 +2879,24 @@ static PyObject *__pyx_kp_u_Define_a_variable_associated_wi;
 static PyObject *__pyx_n_s_Ellipsis;
 static PyObject *__pyx_n_s_FLAG;
 static PyObject *__pyx_n_s_FLEXPATH;
+static PyObject *__pyx_n_s_FULL;
 static PyObject *__pyx_n_s_FancySelection;
 static PyObject *__pyx_n_s_File;
 static PyObject *__pyx_kp_u_Format_string_allocated_too_shor;
 static PyObject *__pyx_kp_u_Format_string_allocated_too_shor_2;
+static PyObject *__pyx_n_s_Get_rank;
 static PyObject *__pyx_n_s_ICEE;
+static PyObject *__pyx_n_s_ImportError;
 static PyObject *__pyx_n_s_IndexError;
 static PyObject *__pyx_n_s_KeyError;
 static PyObject *__pyx_n_s_LATER;
 static PyObject *__pyx_n_s_LOCKMODE;
+static PyObject *__pyx_n_s_MINMAX;
 static PyObject *__pyx_n_s_MPI;
 static PyObject *__pyx_n_s_NO;
 static PyObject *__pyx_n_s_NONE;
 static PyObject *__pyx_n_s_NOW;
+static PyObject *__pyx_n_s_NamedTemporaryFile;
 static PyObject *__pyx_kp_u_Non_native_byte_order_not_suppor;
 static PyObject *__pyx_n_s_NotImplementedError;
 static PyObject *__pyx_kp_s_Not_a_valid_var;
@@ -2691,6 +2914,7 @@ static PyObject *__pyx_kp_s_Reading;
 static PyObject *__pyx_kp_s_Requested_is_larger_than_the_sha;
 static PyObject *__pyx_n_s_RuntimeError;
 static PyObject *__pyx_n_s_S;
+static PyObject *__pyx_n_s_STATISTICS;
 static PyObject *__pyx_kp_s_Scalar_dimension_mismatch_scalar;
 static PyObject *__pyx_n_s_SimpleSelection;
 static PyObject *__pyx_kp_s_Step_index_is_out_of_range_from;
@@ -2706,12 +2930,13 @@ static PyObject *__pyx_n_s_Var;
 static PyObject *__pyx_n_s_Varinfo;
 static PyObject *__pyx_kp_s_WARN_Invalid_read_method_name;
 static PyObject *__pyx_kp_s_Warning_No_support_yet_s_type_d;
+static PyObject *__pyx_kp_s_Warning_skipping_defining_var_r;
 static PyObject *__pyx_n_s_Writer;
 static PyObject *__pyx_n_s_YES;
 static PyObject *__pyx_kp_s__10;
-static PyObject *__pyx_kp_s__63;
-static PyObject *__pyx_kp_s__65;
-static PyObject *__pyx_n_s__77;
+static PyObject *__pyx_kp_s__64;
+static PyObject *__pyx_kp_s__66;
+static PyObject *__pyx_n_s__81;
 static PyObject *__pyx_n_s_adios_mpi;
 static PyObject *__pyx_n_s_advance;
 static PyObject *__pyx_n_s_all;
@@ -2724,6 +2949,7 @@ static PyObject *__pyx_n_s_attrs;
 static PyObject *__pyx_n_s_atype;
 static PyObject *__pyx_n_s_axis;
 static PyObject *__pyx_n_s_base_path;
+static PyObject *__pyx_n_s_bcast;
 static PyObject *__pyx_n_s_bool;
 static PyObject *__pyx_n_s_bpls;
 static PyObject *__pyx_n_s_buffer_size;
@@ -2839,6 +3065,8 @@ static PyObject *__pyx_n_s_npoints;
 static PyObject *__pyx_n_s_nspace;
 static PyObject *__pyx_n_s_nsteps;
 static PyObject *__pyx_n_s_numpy;
+static PyObject *__pyx_kp_s_numpy_core_multiarray_failed_to;
+static PyObject *__pyx_kp_s_numpy_core_umath_failed_to_impor;
 static PyObject *__pyx_n_s_nvars;
 static PyObject *__pyx_n_s_offset;
 static PyObject *__pyx_n_s_order;
@@ -2866,6 +3094,7 @@ static PyObject *__pyx_n_s_real;
 static PyObject *__pyx_n_s_release_step;
 static PyObject *__pyx_n_s_replace;
 static PyObject *__pyx_n_s_reshape;
+static PyObject *__pyx_n_s_root;
 static PyObject *__pyx_n_s_rstrip;
 static PyObject *__pyx_n_s_scalar;
 static PyObject *__pyx_n_s_schema_version;
@@ -2890,6 +3119,7 @@ static PyObject *__pyx_n_s_strip;
 static PyObject *__pyx_n_s_strlen;
 static PyObject *__pyx_n_s_syncgroupid;
 static PyObject *__pyx_n_s_t;
+static PyObject *__pyx_n_s_tempfile;
 static PyObject *__pyx_n_s_test;
 static PyObject *__pyx_n_s_time_index;
 static PyObject *__pyx_n_s_time_steps;
@@ -2920,7 +3150,7 @@ static PyObject *__pyx_n_s_values;
 static PyObject *__pyx_n_s_var;
 static PyObject *__pyx_n_s_var_id;
 static PyObject *__pyx_n_s_var_namelist;
-static PyObject *__pyx_kp_u_var_read_line_1456;
+static PyObject *__pyx_kp_u_var_read_line_1464;
 static PyObject *__pyx_n_s_varid;
 static PyObject *__pyx_n_s_varname;
 static PyObject *__pyx_n_s_vars;
@@ -2929,8 +3159,8 @@ static PyObject *__pyx_n_s_vp;
 static PyObject *__pyx_n_s_w;
 static PyObject *__pyx_n_s_when;
 static PyObject *__pyx_n_s_write;
-static PyObject *__pyx_kp_u_writer_declare_group_line_1982;
-static PyObject *__pyx_kp_u_writer_define_var_line_2019;
+static PyObject *__pyx_kp_u_writer_declare_group_line_1995;
+static PyObject *__pyx_kp_u_writer_define_var_line_2040;
 static PyObject *__pyx_n_s_xrange;
 static PyObject *__pyx_n_s_zeros;
 static PyObject *__pyx_n_s_zip;
@@ -3078,8 +3308,8 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_4mode___get__(struct __pyx_obj_9adi
 static PyObject *__pyx_pf_9adios_mpi_6writer_4vars___get__(struct __pyx_obj_9adios_mpi_writer *__pyx_v_self); /* proto */
 static PyObject *__pyx_pf_9adios_mpi_6writer_5attrs___get__(struct __pyx_obj_9adios_mpi_writer *__pyx_v_self); /* proto */
 static PyObject *__pyx_pf_9adios_mpi_6writer_26timeaggregation_buffersize___get__(struct __pyx_obj_9adios_mpi_writer *__pyx_v_self); /* proto */
-static int __pyx_pf_9adios_mpi_6writer___init__(struct __pyx_obj_9adios_mpi_writer *__pyx_v_self, PyObject *__pyx_v_fname, int __pyx_v_is_noxml, PyObject *__pyx_v_mode, struct PyMPICommObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_9adios_mpi_6writer_2declare_group(struct __pyx_obj_9adios_mpi_writer *__pyx_v_self, PyObject *__pyx_v_gname, PyObject *__pyx_v_method, PyObject *__pyx_v_method_params); /* proto */
+static int __pyx_pf_9adios_mpi_6writer___init__(struct __pyx_obj_9adios_mpi_writer *__pyx_v_self, PyObject *__pyx_v_fname, int __pyx_v_is_noxml, PyObject *__pyx_v_mode, int __pyx_v_stats, struct PyMPICommObject *__pyx_v_comm, PyObject *__pyx_v_method, PyObject *__pyx_v_method_params); /* proto */
+static PyObject *__pyx_pf_9adios_mpi_6writer_2declare_group(struct __pyx_obj_9adios_mpi_writer *__pyx_v_self, PyObject *__pyx_v_gname, PyObject *__pyx_v_method, PyObject *__pyx_v_method_params, int __pyx_v_stats); /* proto */
 static PyObject *__pyx_pf_9adios_mpi_6writer_4set_time_aggregation(struct __pyx_obj_9adios_mpi_writer *__pyx_v_self, PyObject *__pyx_v_buffer_size); /* proto */
 static PyObject *__pyx_pf_9adios_mpi_6writer_6define_var(struct __pyx_obj_9adios_mpi_writer *__pyx_v_self, PyObject *__pyx_v_varname, PyObject *__pyx_v_ldim, PyObject *__pyx_v_gdim, PyObject *__pyx_v_offset, PyObject *__pyx_v_transform); /* proto */
 static PyObject *__pyx_pf_9adios_mpi_6writer_8define_attr(struct __pyx_obj_9adios_mpi_writer *__pyx_v_self, PyObject *__pyx_v_attrname); /* proto */
@@ -3158,12 +3388,14 @@ static struct PyMPICommObject *__pyx_k__12;
 static struct PyMPICommObject *__pyx_k__16;
 static ADIOS_LOCKMODE __pyx_k__17;
 static struct PyMPICommObject *__pyx_k__54;
-static PyObject *__pyx_k__55;
-static PyObject *__pyx_k__56;
+static int __pyx_k__55;
+static int __pyx_k__56;
 static PyObject *__pyx_k__57;
+static PyObject *__pyx_k__58;
 static PyObject *__pyx_k__59;
-static PyObject *__pyx_k__60;
 static PyObject *__pyx_k__61;
+static PyObject *__pyx_k__62;
+static PyObject *__pyx_k__63;
 static PyObject *__pyx_slice__3;
 static PyObject *__pyx_slice__4;
 static PyObject *__pyx_slice__5;
@@ -3208,10 +3440,8 @@ static PyObject *__pyx_tuple__48;
 static PyObject *__pyx_tuple__50;
 static PyObject *__pyx_tuple__51;
 static PyObject *__pyx_tuple__53;
-static PyObject *__pyx_tuple__58;
-static PyObject *__pyx_tuple__62;
-static PyObject *__pyx_tuple__64;
-static PyObject *__pyx_tuple__66;
+static PyObject *__pyx_tuple__60;
+static PyObject *__pyx_tuple__65;
 static PyObject *__pyx_tuple__67;
 static PyObject *__pyx_tuple__68;
 static PyObject *__pyx_tuple__69;
@@ -3222,14 +3452,18 @@ static PyObject *__pyx_tuple__73;
 static PyObject *__pyx_tuple__74;
 static PyObject *__pyx_tuple__75;
 static PyObject *__pyx_tuple__76;
+static PyObject *__pyx_tuple__77;
 static PyObject *__pyx_tuple__78;
+static PyObject *__pyx_tuple__79;
 static PyObject *__pyx_tuple__80;
 static PyObject *__pyx_tuple__82;
-static PyObject *__pyx_codeobj__79;
-static PyObject *__pyx_codeobj__81;
+static PyObject *__pyx_tuple__84;
+static PyObject *__pyx_tuple__86;
 static PyObject *__pyx_codeobj__83;
+static PyObject *__pyx_codeobj__85;
+static PyObject *__pyx_codeobj__87;
 
-/* "adios_mpi.pyx":33
+/* "adios_mpi.pyx":35
  * ## To convert a string to bytes: "str".encode()
  * ## To convert bytes to a String: b"".decode() or str(b"")
  * cpdef void test_str(str x):             # <<<<<<<<<<<<<<
@@ -3247,17 +3481,17 @@ static void __pyx_f_9adios_mpi_test_str(PyObject *__pyx_v_x, CYTHON_UNUSED int _
   char const *__pyx_t_4;
   __Pyx_RefNannySetupContext("test_str", 0);
 
-  /* "adios_mpi.pyx":34
+  /* "adios_mpi.pyx":36
  * ## To convert bytes to a String: b"".decode() or str(b"")
  * cpdef void test_str(str x):
  *     cdef char * y = strdup(x.encode())             # <<<<<<<<<<<<<<
  *     print(x, str(y))
  * 
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_x, __pyx_n_s_encode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 34, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_x, __pyx_n_s_encode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 36, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
     __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
     if (likely(__pyx_t_3)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
@@ -3267,35 +3501,35 @@ static void __pyx_f_9adios_mpi_test_str(PyObject *__pyx_v_x, CYTHON_UNUSED int _
     }
   }
   if (__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 34, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 36, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   } else {
-    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 34, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 36, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 34, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 36, __pyx_L1_error)
   __pyx_v_y = strdup(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":35
+  /* "adios_mpi.pyx":37
  * cpdef void test_str(str x):
  *     cdef char * y = strdup(x.encode())
  *     print(x, str(y))             # <<<<<<<<<<<<<<
  * 
  * from cpython.version cimport PY_MAJOR_VERSION
  */
-  __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_y); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 35, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_y); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 37, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 35, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 37, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 35, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 37, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 35, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 37, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_v_x);
   __Pyx_GIVEREF(__pyx_v_x);
@@ -3303,12 +3537,12 @@ static void __pyx_f_9adios_mpi_test_str(PyObject *__pyx_v_x, CYTHON_UNUSED int _
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 35, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 37, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":33
+  /* "adios_mpi.pyx":35
  * ## To convert a string to bytes: "str".encode()
  * ## To convert bytes to a String: b"".decode() or str(b"")
  * cpdef void test_str(str x):             # <<<<<<<<<<<<<<
@@ -3334,7 +3568,7 @@ static PyObject *__pyx_pw_9adios_mpi_1test_str(PyObject *__pyx_self, PyObject *_
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("test_str (wrapper)", 0);
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), (&PyString_Type), 1, "x", 1))) __PYX_ERR(0, 33, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), (&PyString_Type), 1, "x", 1))) __PYX_ERR(0, 35, __pyx_L1_error)
   __pyx_r = __pyx_pf_9adios_mpi_test_str(__pyx_self, ((PyObject*)__pyx_v_x));
 
   /* function exit code */
@@ -3352,7 +3586,7 @@ static PyObject *__pyx_pf_9adios_mpi_test_str(CYTHON_UNUSED PyObject *__pyx_self
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("test_str", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_void_to_None(__pyx_f_9adios_mpi_test_str(__pyx_v_x, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 33, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_void_to_None(__pyx_f_9adios_mpi_test_str(__pyx_v_x, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 35, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -3369,7 +3603,7 @@ static PyObject *__pyx_pf_9adios_mpi_test_str(CYTHON_UNUSED PyObject *__pyx_self
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":46
+/* "adios_mpi.pyx":48
  * ## python2: str(b"") return str
  * ## python3: str(b"") return 'b""'. Correct way: b"".decode()
  * cpdef str b2s(bytes x):             # <<<<<<<<<<<<<<
@@ -3386,7 +3620,7 @@ static PyObject *__pyx_f_9adios_mpi_b2s(PyObject *__pyx_v_x, CYTHON_UNUSED int _
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("b2s", 0);
 
-  /* "adios_mpi.pyx":47
+  /* "adios_mpi.pyx":49
  * ## python3: str(b"") return 'b""'. Correct way: b"".decode()
  * cpdef str b2s(bytes x):
  *     if PY_MAJOR_VERSION < 3:             # <<<<<<<<<<<<<<
@@ -3396,7 +3630,7 @@ static PyObject *__pyx_f_9adios_mpi_b2s(PyObject *__pyx_v_x, CYTHON_UNUSED int _
   __pyx_t_1 = ((PY_MAJOR_VERSION < 3) != 0);
   if (__pyx_t_1) {
 
-    /* "adios_mpi.pyx":48
+    /* "adios_mpi.pyx":50
  * cpdef str b2s(bytes x):
  *     if PY_MAJOR_VERSION < 3:
  *         return str(x)             # <<<<<<<<<<<<<<
@@ -3404,20 +3638,20 @@ static PyObject *__pyx_f_9adios_mpi_b2s(PyObject *__pyx_v_x, CYTHON_UNUSED int _
  *         return x.decode()
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 48, __pyx_L1_error)
+    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 50, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_INCREF(__pyx_v_x);
     __Pyx_GIVEREF(__pyx_v_x);
     PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_x);
-    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 48, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 50, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    if (!(likely(PyString_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_3)->tp_name), 0))) __PYX_ERR(0, 48, __pyx_L1_error)
+    if (!(likely(PyString_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_3)->tp_name), 0))) __PYX_ERR(0, 50, __pyx_L1_error)
     __pyx_r = ((PyObject*)__pyx_t_3);
     __pyx_t_3 = 0;
     goto __pyx_L0;
 
-    /* "adios_mpi.pyx":47
+    /* "adios_mpi.pyx":49
  * ## python3: str(b"") return 'b""'. Correct way: b"".decode()
  * cpdef str b2s(bytes x):
  *     if PY_MAJOR_VERSION < 3:             # <<<<<<<<<<<<<<
@@ -3426,7 +3660,7 @@ static PyObject *__pyx_f_9adios_mpi_b2s(PyObject *__pyx_v_x, CYTHON_UNUSED int _
  */
   }
 
-  /* "adios_mpi.pyx":50
+  /* "adios_mpi.pyx":52
  *         return str(x)
  *     else:
  *         return x.decode()             # <<<<<<<<<<<<<<
@@ -3437,17 +3671,17 @@ static PyObject *__pyx_f_9adios_mpi_b2s(PyObject *__pyx_v_x, CYTHON_UNUSED int _
     __Pyx_XDECREF(__pyx_r);
     if (unlikely(__pyx_v_x == Py_None)) {
       PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "decode");
-      __PYX_ERR(0, 50, __pyx_L1_error)
+      __PYX_ERR(0, 52, __pyx_L1_error)
     }
-    __pyx_t_3 = __Pyx_decode_bytes(__pyx_v_x, 0, PY_SSIZE_T_MAX, NULL, NULL, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 50, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_decode_bytes(__pyx_v_x, 0, PY_SSIZE_T_MAX, NULL, NULL, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 52, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    if (!(likely(PyString_CheckExact(__pyx_t_3))||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_3)->tp_name), 0))) __PYX_ERR(0, 50, __pyx_L1_error)
+    if (!(likely(PyString_CheckExact(__pyx_t_3))||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_3)->tp_name), 0))) __PYX_ERR(0, 52, __pyx_L1_error)
     __pyx_r = ((PyObject*)__pyx_t_3);
     __pyx_t_3 = 0;
     goto __pyx_L0;
   }
 
-  /* "adios_mpi.pyx":46
+  /* "adios_mpi.pyx":48
  * ## python2: str(b"") return str
  * ## python3: str(b"") return 'b""'. Correct way: b"".decode()
  * cpdef str b2s(bytes x):             # <<<<<<<<<<<<<<
@@ -3474,7 +3708,7 @@ static PyObject *__pyx_pw_9adios_mpi_3b2s(PyObject *__pyx_self, PyObject *__pyx_
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("b2s (wrapper)", 0);
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), (&PyBytes_Type), 1, "x", 1))) __PYX_ERR(0, 46, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), (&PyBytes_Type), 1, "x", 1))) __PYX_ERR(0, 48, __pyx_L1_error)
   __pyx_r = __pyx_pf_9adios_mpi_2b2s(__pyx_self, ((PyObject*)__pyx_v_x));
 
   /* function exit code */
@@ -3492,7 +3726,7 @@ static PyObject *__pyx_pf_9adios_mpi_2b2s(CYTHON_UNUSED PyObject *__pyx_self, Py
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("b2s", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_9adios_mpi_b2s(__pyx_v_x, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 46, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_9adios_mpi_b2s(__pyx_v_x, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 48, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -3509,7 +3743,7 @@ static PyObject *__pyx_pf_9adios_mpi_2b2s(CYTHON_UNUSED PyObject *__pyx_self, Py
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":52
+/* "adios_mpi.pyx":54
  *         return x.decode()
  * 
  * cpdef bytes s2b(str x):             # <<<<<<<<<<<<<<
@@ -3527,7 +3761,7 @@ static PyObject *__pyx_f_9adios_mpi_s2b(PyObject *__pyx_v_x, CYTHON_UNUSED int _
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("s2b", 0);
 
-  /* "adios_mpi.pyx":53
+  /* "adios_mpi.pyx":55
  * 
  * cpdef bytes s2b(str x):
  *     if PY_MAJOR_VERSION < 3:             # <<<<<<<<<<<<<<
@@ -3537,7 +3771,7 @@ static PyObject *__pyx_f_9adios_mpi_s2b(PyObject *__pyx_v_x, CYTHON_UNUSED int _
   __pyx_t_1 = ((PY_MAJOR_VERSION < 3) != 0);
   if (__pyx_t_1) {
 
-    /* "adios_mpi.pyx":54
+    /* "adios_mpi.pyx":56
  * cpdef bytes s2b(str x):
  *     if PY_MAJOR_VERSION < 3:
  *         return <bytes>x             # <<<<<<<<<<<<<<
@@ -3549,7 +3783,7 @@ static PyObject *__pyx_f_9adios_mpi_s2b(PyObject *__pyx_v_x, CYTHON_UNUSED int _
     __pyx_r = ((PyObject*)__pyx_v_x);
     goto __pyx_L0;
 
-    /* "adios_mpi.pyx":53
+    /* "adios_mpi.pyx":55
  * 
  * cpdef bytes s2b(str x):
  *     if PY_MAJOR_VERSION < 3:             # <<<<<<<<<<<<<<
@@ -3558,7 +3792,7 @@ static PyObject *__pyx_f_9adios_mpi_s2b(PyObject *__pyx_v_x, CYTHON_UNUSED int _
  */
   }
 
-  /* "adios_mpi.pyx":56
+  /* "adios_mpi.pyx":58
  *         return <bytes>x
  *     else:
  *         return x.encode()             # <<<<<<<<<<<<<<
@@ -3567,10 +3801,10 @@ static PyObject *__pyx_f_9adios_mpi_s2b(PyObject *__pyx_v_x, CYTHON_UNUSED int _
  */
   /*else*/ {
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_x, __pyx_n_s_encode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 56, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_x, __pyx_n_s_encode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 58, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_4 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
       __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
       if (likely(__pyx_t_4)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -3580,20 +3814,20 @@ static PyObject *__pyx_f_9adios_mpi_s2b(PyObject *__pyx_v_x, CYTHON_UNUSED int _
       }
     }
     if (__pyx_t_4) {
-      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 56, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 58, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     } else {
-      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 56, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 58, __pyx_L1_error)
     }
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    if (!(likely(PyBytes_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_2)->tp_name), 0))) __PYX_ERR(0, 56, __pyx_L1_error)
+    if (!(likely(PyBytes_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_2)->tp_name), 0))) __PYX_ERR(0, 58, __pyx_L1_error)
     __pyx_r = ((PyObject*)__pyx_t_2);
     __pyx_t_2 = 0;
     goto __pyx_L0;
   }
 
-  /* "adios_mpi.pyx":52
+  /* "adios_mpi.pyx":54
  *         return x.decode()
  * 
  * cpdef bytes s2b(str x):             # <<<<<<<<<<<<<<
@@ -3621,7 +3855,7 @@ static PyObject *__pyx_pw_9adios_mpi_5s2b(PyObject *__pyx_self, PyObject *__pyx_
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("s2b (wrapper)", 0);
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), (&PyString_Type), 1, "x", 1))) __PYX_ERR(0, 52, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), (&PyString_Type), 1, "x", 1))) __PYX_ERR(0, 54, __pyx_L1_error)
   __pyx_r = __pyx_pf_9adios_mpi_4s2b(__pyx_self, ((PyObject*)__pyx_v_x));
 
   /* function exit code */
@@ -3639,7 +3873,7 @@ static PyObject *__pyx_pf_9adios_mpi_4s2b(CYTHON_UNUSED PyObject *__pyx_self, Py
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("s2b", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_x, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 52, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_x, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 54, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -3656,7 +3890,7 @@ static PyObject *__pyx_pf_9adios_mpi_4s2b(CYTHON_UNUSED PyObject *__pyx_self, Py
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":58
+/* "adios_mpi.pyx":60
  *         return x.encode()
  * 
  * def normalize_key(keys):             # <<<<<<<<<<<<<<
@@ -3695,7 +3929,7 @@ static PyObject *__pyx_pf_9adios_mpi_6normalize_key(CYTHON_UNUSED PyObject *__py
   __Pyx_RefNannySetupContext("normalize_key", 0);
   __Pyx_INCREF(__pyx_v_keys);
 
-  /* "adios_mpi.pyx":59
+  /* "adios_mpi.pyx":61
  * 
  * def normalize_key(keys):
  *     if not isinstance(keys, list):             # <<<<<<<<<<<<<<
@@ -3706,14 +3940,14 @@ static PyObject *__pyx_pf_9adios_mpi_6normalize_key(CYTHON_UNUSED PyObject *__py
   __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0);
   if (__pyx_t_2) {
 
-    /* "adios_mpi.pyx":60
+    /* "adios_mpi.pyx":62
  * def normalize_key(keys):
  *     if not isinstance(keys, list):
  *         keys = [keys,]             # <<<<<<<<<<<<<<
  *     l = list()
  *     for key in keys:
  */
-    __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 60, __pyx_L1_error)
+    __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 62, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_keys);
     __Pyx_GIVEREF(__pyx_v_keys);
@@ -3721,7 +3955,7 @@ static PyObject *__pyx_pf_9adios_mpi_6normalize_key(CYTHON_UNUSED PyObject *__py
     __Pyx_DECREF_SET(__pyx_v_keys, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "adios_mpi.pyx":59
+    /* "adios_mpi.pyx":61
  * 
  * def normalize_key(keys):
  *     if not isinstance(keys, list):             # <<<<<<<<<<<<<<
@@ -3730,19 +3964,19 @@ static PyObject *__pyx_pf_9adios_mpi_6normalize_key(CYTHON_UNUSED PyObject *__py
  */
   }
 
-  /* "adios_mpi.pyx":61
+  /* "adios_mpi.pyx":63
  *     if not isinstance(keys, list):
  *         keys = [keys,]
  *     l = list()             # <<<<<<<<<<<<<<
  *     for key in keys:
  *         if key.startswith('/'):
  */
-  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 61, __pyx_L1_error)
+  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 63, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_l = ((PyObject*)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "adios_mpi.pyx":62
+  /* "adios_mpi.pyx":64
  *         keys = [keys,]
  *     l = list()
  *     for key in keys:             # <<<<<<<<<<<<<<
@@ -3753,26 +3987,26 @@ static PyObject *__pyx_pf_9adios_mpi_6normalize_key(CYTHON_UNUSED PyObject *__py
     __pyx_t_3 = __pyx_v_keys; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0;
     __pyx_t_5 = NULL;
   } else {
-    __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 62, __pyx_L1_error)
+    __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 64, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_5 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 62, __pyx_L1_error)
+    __pyx_t_5 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 64, __pyx_L1_error)
   }
   for (;;) {
     if (likely(!__pyx_t_5)) {
       if (likely(PyList_CheckExact(__pyx_t_3))) {
         if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_6 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 62, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_6 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 64, __pyx_L1_error)
         #else
-        __pyx_t_6 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 62, __pyx_L1_error)
+        __pyx_t_6 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 64, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
         #endif
       } else {
         if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 62, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 64, __pyx_L1_error)
         #else
-        __pyx_t_6 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 62, __pyx_L1_error)
+        __pyx_t_6 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 64, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
         #endif
       }
@@ -3782,7 +4016,7 @@ static PyObject *__pyx_pf_9adios_mpi_6normalize_key(CYTHON_UNUSED PyObject *__py
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
           if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-          else __PYX_ERR(0, 62, __pyx_L1_error)
+          else __PYX_ERR(0, 64, __pyx_L1_error)
         }
         break;
       }
@@ -3791,35 +4025,35 @@ static PyObject *__pyx_pf_9adios_mpi_6normalize_key(CYTHON_UNUSED PyObject *__py
     __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_6);
     __pyx_t_6 = 0;
 
-    /* "adios_mpi.pyx":63
+    /* "adios_mpi.pyx":65
  *     l = list()
  *     for key in keys:
  *         if key.startswith('/'):             # <<<<<<<<<<<<<<
  *             key = key[1:]
  *         if '/' not in key:
  */
-    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_key, __pyx_n_s_startswith); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 63, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_key, __pyx_n_s_startswith); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 65, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 63, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 65, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 63, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 65, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     if (__pyx_t_2) {
 
-      /* "adios_mpi.pyx":64
+      /* "adios_mpi.pyx":66
  *     for key in keys:
  *         if key.startswith('/'):
  *             key = key[1:]             # <<<<<<<<<<<<<<
  *         if '/' not in key:
  *             l.append(key)
  */
-      __pyx_t_7 = __Pyx_PyObject_GetSlice(__pyx_v_key, 1, 0, NULL, NULL, &__pyx_slice__3, 1, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 64, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetSlice(__pyx_v_key, 1, 0, NULL, NULL, &__pyx_slice__3, 1, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 66, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF_SET(__pyx_v_key, __pyx_t_7);
       __pyx_t_7 = 0;
 
-      /* "adios_mpi.pyx":63
+      /* "adios_mpi.pyx":65
  *     l = list()
  *     for key in keys:
  *         if key.startswith('/'):             # <<<<<<<<<<<<<<
@@ -3828,27 +4062,27 @@ static PyObject *__pyx_pf_9adios_mpi_6normalize_key(CYTHON_UNUSED PyObject *__py
  */
     }
 
-    /* "adios_mpi.pyx":65
+    /* "adios_mpi.pyx":67
  *         if key.startswith('/'):
  *             key = key[1:]
  *         if '/' not in key:             # <<<<<<<<<<<<<<
  *             l.append(key)
  *     return (l)
  */
-    __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_kp_s_, __pyx_v_key, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 65, __pyx_L1_error)
+    __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_kp_s_, __pyx_v_key, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 67, __pyx_L1_error)
     __pyx_t_1 = (__pyx_t_2 != 0);
     if (__pyx_t_1) {
 
-      /* "adios_mpi.pyx":66
+      /* "adios_mpi.pyx":68
  *             key = key[1:]
  *         if '/' not in key:
  *             l.append(key)             # <<<<<<<<<<<<<<
  *     return (l)
  * 
  */
-      __pyx_t_8 = __Pyx_PyList_Append(__pyx_v_l, __pyx_v_key); if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(0, 66, __pyx_L1_error)
+      __pyx_t_8 = __Pyx_PyList_Append(__pyx_v_l, __pyx_v_key); if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(0, 68, __pyx_L1_error)
 
-      /* "adios_mpi.pyx":65
+      /* "adios_mpi.pyx":67
  *         if key.startswith('/'):
  *             key = key[1:]
  *         if '/' not in key:             # <<<<<<<<<<<<<<
@@ -3857,7 +4091,7 @@ static PyObject *__pyx_pf_9adios_mpi_6normalize_key(CYTHON_UNUSED PyObject *__py
  */
     }
 
-    /* "adios_mpi.pyx":62
+    /* "adios_mpi.pyx":64
  *         keys = [keys,]
  *     l = list()
  *     for key in keys:             # <<<<<<<<<<<<<<
@@ -3867,7 +4101,7 @@ static PyObject *__pyx_pf_9adios_mpi_6normalize_key(CYTHON_UNUSED PyObject *__py
   }
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "adios_mpi.pyx":67
+  /* "adios_mpi.pyx":69
  *         if '/' not in key:
  *             l.append(key)
  *     return (l)             # <<<<<<<<<<<<<<
@@ -3879,7 +4113,7 @@ static PyObject *__pyx_pf_9adios_mpi_6normalize_key(CYTHON_UNUSED PyObject *__py
   __pyx_r = __pyx_v_l;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":58
+  /* "adios_mpi.pyx":60
  *         return x.encode()
  * 
  * def normalize_key(keys):             # <<<<<<<<<<<<<<
@@ -3903,7 +4137,7 @@ static PyObject *__pyx_pf_9adios_mpi_6normalize_key(CYTHON_UNUSED PyObject *__py
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":69
+/* "adios_mpi.pyx":71
  *     return (l)
  * 
  * cdef char ** to_cstring_array(list_str):             # <<<<<<<<<<<<<<
@@ -3924,55 +4158,55 @@ static char **__pyx_f_9adios_mpi_to_cstring_array(PyObject *__pyx_v_list_str) {
   char *__pyx_t_5;
   __Pyx_RefNannySetupContext("to_cstring_array", 0);
 
-  /* "adios_mpi.pyx":70
+  /* "adios_mpi.pyx":72
  * 
  * cdef char ** to_cstring_array(list_str):
  *     cdef char **ret = <char **>malloc(len(list_str) * sizeof(char *))             # <<<<<<<<<<<<<<
  *     for i in xrange(len(list_str)):
  *         bstr = s2b(list_str[i])
  */
-  __pyx_t_1 = PyObject_Length(__pyx_v_list_str); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 70, __pyx_L1_error)
+  __pyx_t_1 = PyObject_Length(__pyx_v_list_str); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 72, __pyx_L1_error)
   __pyx_v_ret = ((char **)malloc((__pyx_t_1 * (sizeof(char *)))));
 
-  /* "adios_mpi.pyx":71
+  /* "adios_mpi.pyx":73
  * cdef char ** to_cstring_array(list_str):
  *     cdef char **ret = <char **>malloc(len(list_str) * sizeof(char *))
  *     for i in xrange(len(list_str)):             # <<<<<<<<<<<<<<
  *         bstr = s2b(list_str[i])
  *         ret[i] = PyBytes_AsString(bstr)
  */
-  __pyx_t_1 = PyObject_Length(__pyx_v_list_str); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 71, __pyx_L1_error)
+  __pyx_t_1 = PyObject_Length(__pyx_v_list_str); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 73, __pyx_L1_error)
   for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_1; __pyx_t_2+=1) {
     __pyx_v_i = __pyx_t_2;
 
-    /* "adios_mpi.pyx":72
+    /* "adios_mpi.pyx":74
  *     cdef char **ret = <char **>malloc(len(list_str) * sizeof(char *))
  *     for i in xrange(len(list_str)):
  *         bstr = s2b(list_str[i])             # <<<<<<<<<<<<<<
  *         ret[i] = PyBytes_AsString(bstr)
  *     return ret
  */
-    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_list_str, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 72, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_list_str, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 74, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    if (!(likely(PyString_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_3)->tp_name), 0))) __PYX_ERR(0, 72, __pyx_L1_error)
-    __pyx_t_4 = __pyx_f_9adios_mpi_s2b(((PyObject*)__pyx_t_3), 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 72, __pyx_L1_error)
+    if (!(likely(PyString_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_3)->tp_name), 0))) __PYX_ERR(0, 74, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_9adios_mpi_s2b(((PyObject*)__pyx_t_3), 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 74, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_XDECREF_SET(__pyx_v_bstr, ((PyObject*)__pyx_t_4));
     __pyx_t_4 = 0;
 
-    /* "adios_mpi.pyx":73
+    /* "adios_mpi.pyx":75
  *     for i in xrange(len(list_str)):
  *         bstr = s2b(list_str[i])
  *         ret[i] = PyBytes_AsString(bstr)             # <<<<<<<<<<<<<<
  *     return ret
  * 
  */
-    __pyx_t_5 = PyBytes_AsString(__pyx_v_bstr); if (unlikely(__pyx_t_5 == NULL)) __PYX_ERR(0, 73, __pyx_L1_error)
+    __pyx_t_5 = PyBytes_AsString(__pyx_v_bstr); if (unlikely(__pyx_t_5 == NULL)) __PYX_ERR(0, 75, __pyx_L1_error)
     (__pyx_v_ret[__pyx_v_i]) = __pyx_t_5;
   }
 
-  /* "adios_mpi.pyx":74
+  /* "adios_mpi.pyx":76
  *         bstr = s2b(list_str[i])
  *         ret[i] = PyBytes_AsString(bstr)
  *     return ret             # <<<<<<<<<<<<<<
@@ -3982,7 +4216,7 @@ static char **__pyx_f_9adios_mpi_to_cstring_array(PyObject *__pyx_v_list_str) {
   __pyx_r = __pyx_v_ret;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":69
+  /* "adios_mpi.pyx":71
  *     return (l)
  * 
  * cdef char ** to_cstring_array(list_str):             # <<<<<<<<<<<<<<
@@ -4002,8 +4236,8 @@ static char **__pyx_f_9adios_mpi_to_cstring_array(PyObject *__pyx_v_list_str) {
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":432
- *     ALL =2
+/* "adios_mpi.pyx":440
+ *     DEFAULT = adios_stat_default
  * 
  * cpdef __parse_index(index, ndim):             # <<<<<<<<<<<<<<
  *     # Fix index, handling ellipsis and incomplete slices.
@@ -4031,7 +4265,7 @@ static PyObject *__pyx_f_9adios_mpi___parse_index(PyObject *__pyx_v_index, PyObj
   __Pyx_RefNannySetupContext("__parse_index", 0);
   __Pyx_INCREF(__pyx_v_index);
 
-  /* "adios_mpi.pyx":434
+  /* "adios_mpi.pyx":442
  * cpdef __parse_index(index, ndim):
  *     # Fix index, handling ellipsis and incomplete slices.
  *     if not isinstance(index, tuple):             # <<<<<<<<<<<<<<
@@ -4042,14 +4276,14 @@ static PyObject *__pyx_f_9adios_mpi___parse_index(PyObject *__pyx_v_index, PyObj
   __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0);
   if (__pyx_t_2) {
 
-    /* "adios_mpi.pyx":435
+    /* "adios_mpi.pyx":443
  *     # Fix index, handling ellipsis and incomplete slices.
  *     if not isinstance(index, tuple):
  *         index = (index,)             # <<<<<<<<<<<<<<
  * 
  *     fixed = []
  */
-    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 435, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 443, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_index);
     __Pyx_GIVEREF(__pyx_v_index);
@@ -4057,7 +4291,7 @@ static PyObject *__pyx_f_9adios_mpi___parse_index(PyObject *__pyx_v_index, PyObj
     __Pyx_DECREF_SET(__pyx_v_index, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "adios_mpi.pyx":434
+    /* "adios_mpi.pyx":442
  * cpdef __parse_index(index, ndim):
  *     # Fix index, handling ellipsis and incomplete slices.
  *     if not isinstance(index, tuple):             # <<<<<<<<<<<<<<
@@ -4066,32 +4300,32 @@ static PyObject *__pyx_f_9adios_mpi___parse_index(PyObject *__pyx_v_index, PyObj
  */
   }
 
-  /* "adios_mpi.pyx":437
+  /* "adios_mpi.pyx":445
  *         index = (index,)
  * 
  *     fixed = []             # <<<<<<<<<<<<<<
  *     length = len(index)
  * 
  */
-  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 437, __pyx_L1_error)
+  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 445, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_fixed = ((PyObject*)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "adios_mpi.pyx":438
+  /* "adios_mpi.pyx":446
  * 
  *     fixed = []
  *     length = len(index)             # <<<<<<<<<<<<<<
  * 
  *     for slice_ in index:
  */
-  __pyx_t_4 = PyObject_Length(__pyx_v_index); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 438, __pyx_L1_error)
-  __pyx_t_3 = PyInt_FromSsize_t(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 438, __pyx_L1_error)
+  __pyx_t_4 = PyObject_Length(__pyx_v_index); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 446, __pyx_L1_error)
+  __pyx_t_3 = PyInt_FromSsize_t(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 446, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_length = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "adios_mpi.pyx":440
+  /* "adios_mpi.pyx":448
  *     length = len(index)
  * 
  *     for slice_ in index:             # <<<<<<<<<<<<<<
@@ -4102,26 +4336,26 @@ static PyObject *__pyx_f_9adios_mpi___parse_index(PyObject *__pyx_v_index, PyObj
     __pyx_t_3 = __pyx_v_index; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0;
     __pyx_t_5 = NULL;
   } else {
-    __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_index); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 440, __pyx_L1_error)
+    __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_index); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 448, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_5 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 440, __pyx_L1_error)
+    __pyx_t_5 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 448, __pyx_L1_error)
   }
   for (;;) {
     if (likely(!__pyx_t_5)) {
       if (likely(PyList_CheckExact(__pyx_t_3))) {
         if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_6 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 440, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_6 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 448, __pyx_L1_error)
         #else
-        __pyx_t_6 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 440, __pyx_L1_error)
+        __pyx_t_6 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 448, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
         #endif
       } else {
         if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 440, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 448, __pyx_L1_error)
         #else
-        __pyx_t_6 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 440, __pyx_L1_error)
+        __pyx_t_6 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 448, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
         #endif
       }
@@ -4131,7 +4365,7 @@ static PyObject *__pyx_f_9adios_mpi___parse_index(PyObject *__pyx_v_index, PyObj
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
           if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-          else __PYX_ERR(0, 440, __pyx_L1_error)
+          else __PYX_ERR(0, 448, __pyx_L1_error)
         }
         break;
       }
@@ -4140,7 +4374,7 @@ static PyObject *__pyx_f_9adios_mpi___parse_index(PyObject *__pyx_v_index, PyObj
     __Pyx_XDECREF_SET(__pyx_v_slice_, __pyx_t_6);
     __pyx_t_6 = 0;
 
-    /* "adios_mpi.pyx":441
+    /* "adios_mpi.pyx":449
  * 
  *     for slice_ in index:
  *         if slice_ is Ellipsis:             # <<<<<<<<<<<<<<
@@ -4151,40 +4385,40 @@ static PyObject *__pyx_f_9adios_mpi___parse_index(PyObject *__pyx_v_index, PyObj
     __pyx_t_1 = (__pyx_t_2 != 0);
     if (__pyx_t_1) {
 
-      /* "adios_mpi.pyx":442
+      /* "adios_mpi.pyx":450
  *     for slice_ in index:
  *         if slice_ is Ellipsis:
  *             fixed.extend([slice(None)] * (ndim-length-len(fixed)+1))             # <<<<<<<<<<<<<<
  *         elif isinstance(slice_, (int, long)):
  *             fixed.append(slice(slice_, slice_+1, None))
  */
-      __pyx_t_6 = PyNumber_Subtract(__pyx_v_ndim, __pyx_v_length); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 442, __pyx_L1_error)
+      __pyx_t_6 = PyNumber_Subtract(__pyx_v_ndim, __pyx_v_length); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 450, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
-      __pyx_t_7 = PyList_GET_SIZE(__pyx_v_fixed); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 442, __pyx_L1_error)
-      __pyx_t_8 = PyInt_FromSsize_t(__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 442, __pyx_L1_error)
+      __pyx_t_7 = PyList_GET_SIZE(__pyx_v_fixed); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 450, __pyx_L1_error)
+      __pyx_t_8 = PyInt_FromSsize_t(__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 450, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
-      __pyx_t_9 = PyNumber_Subtract(__pyx_t_6, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 442, __pyx_L1_error)
+      __pyx_t_9 = PyNumber_Subtract(__pyx_t_6, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 450, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-      __pyx_t_8 = __Pyx_PyInt_AddObjC(__pyx_t_9, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 442, __pyx_L1_error)
+      __pyx_t_8 = __Pyx_PyInt_AddObjC(__pyx_t_9, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 450, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-      __pyx_t_9 = PyList_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 442, __pyx_L1_error)
+      __pyx_t_9 = PyList_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 450, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
       __Pyx_INCREF(__pyx_slice__4);
       __Pyx_GIVEREF(__pyx_slice__4);
       PyList_SET_ITEM(__pyx_t_9, 0, __pyx_slice__4);
-      { PyObject* __pyx_temp = PyNumber_InPlaceMultiply(__pyx_t_9, __pyx_t_8); if (unlikely(!__pyx_temp)) __PYX_ERR(0, 442, __pyx_L1_error)
+      { PyObject* __pyx_temp = PyNumber_InPlaceMultiply(__pyx_t_9, __pyx_t_8); if (unlikely(!__pyx_temp)) __PYX_ERR(0, 450, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_temp);
         __Pyx_DECREF(__pyx_t_9);
         __pyx_t_9 = __pyx_temp;
       }
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-      __pyx_t_10 = __Pyx_PyList_Extend(__pyx_v_fixed, __pyx_t_9); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 442, __pyx_L1_error)
+      __pyx_t_10 = __Pyx_PyList_Extend(__pyx_v_fixed, __pyx_t_9); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 450, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-      /* "adios_mpi.pyx":441
+      /* "adios_mpi.pyx":449
  * 
  *     for slice_ in index:
  *         if slice_ is Ellipsis:             # <<<<<<<<<<<<<<
@@ -4194,7 +4428,7 @@ static PyObject *__pyx_f_9adios_mpi___parse_index(PyObject *__pyx_v_index, PyObj
       goto __pyx_L6;
     }
 
-    /* "adios_mpi.pyx":443
+    /* "adios_mpi.pyx":451
  *         if slice_ is Ellipsis:
  *             fixed.extend([slice(None)] * (ndim-length-len(fixed)+1))
  *         elif isinstance(slice_, (int, long)):             # <<<<<<<<<<<<<<
@@ -4215,22 +4449,22 @@ static PyObject *__pyx_f_9adios_mpi___parse_index(PyObject *__pyx_v_index, PyObj
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
 
-      /* "adios_mpi.pyx":444
+      /* "adios_mpi.pyx":452
  *             fixed.extend([slice(None)] * (ndim-length-len(fixed)+1))
  *         elif isinstance(slice_, (int, long)):
  *             fixed.append(slice(slice_, slice_+1, None))             # <<<<<<<<<<<<<<
  *         elif isinstance(slice_, (float)):
  *             fixed.append(slice(int(slice_), int(slice_)+1, None))
  */
-      __pyx_t_9 = __Pyx_PyInt_AddObjC(__pyx_v_slice_, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 444, __pyx_L1_error)
+      __pyx_t_9 = __Pyx_PyInt_AddObjC(__pyx_v_slice_, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 452, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
-      __pyx_t_8 = PySlice_New(__pyx_v_slice_, __pyx_t_9, Py_None); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 444, __pyx_L1_error)
+      __pyx_t_8 = PySlice_New(__pyx_v_slice_, __pyx_t_9, Py_None); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 452, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-      __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_fixed, __pyx_t_8); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 444, __pyx_L1_error)
+      __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_fixed, __pyx_t_8); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 452, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-      /* "adios_mpi.pyx":443
+      /* "adios_mpi.pyx":451
  *         if slice_ is Ellipsis:
  *             fixed.extend([slice(None)] * (ndim-length-len(fixed)+1))
  *         elif isinstance(slice_, (int, long)):             # <<<<<<<<<<<<<<
@@ -4240,7 +4474,7 @@ static PyObject *__pyx_f_9adios_mpi___parse_index(PyObject *__pyx_v_index, PyObj
       goto __pyx_L6;
     }
 
-    /* "adios_mpi.pyx":445
+    /* "adios_mpi.pyx":453
  *         elif isinstance(slice_, (int, long)):
  *             fixed.append(slice(slice_, slice_+1, None))
  *         elif isinstance(slice_, (float)):             # <<<<<<<<<<<<<<
@@ -4251,28 +4485,28 @@ static PyObject *__pyx_f_9adios_mpi___parse_index(PyObject *__pyx_v_index, PyObj
     __pyx_t_1 = (__pyx_t_2 != 0);
     if (__pyx_t_1) {
 
-      /* "adios_mpi.pyx":446
+      /* "adios_mpi.pyx":454
  *             fixed.append(slice(slice_, slice_+1, None))
  *         elif isinstance(slice_, (float)):
  *             fixed.append(slice(int(slice_), int(slice_)+1, None))             # <<<<<<<<<<<<<<
  *         else:
  *             fixed.append(slice_)
  */
-      __pyx_t_8 = __Pyx_PyNumber_Int(__pyx_v_slice_); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 446, __pyx_L1_error)
+      __pyx_t_8 = __Pyx_PyNumber_Int(__pyx_v_slice_); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 454, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
-      __pyx_t_9 = __Pyx_PyNumber_Int(__pyx_v_slice_); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 446, __pyx_L1_error)
+      __pyx_t_9 = __Pyx_PyNumber_Int(__pyx_v_slice_); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 454, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
-      __pyx_t_6 = __Pyx_PyInt_AddObjC(__pyx_t_9, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 446, __pyx_L1_error)
+      __pyx_t_6 = __Pyx_PyInt_AddObjC(__pyx_t_9, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 454, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-      __pyx_t_9 = PySlice_New(__pyx_t_8, __pyx_t_6, Py_None); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 446, __pyx_L1_error)
+      __pyx_t_9 = PySlice_New(__pyx_t_8, __pyx_t_6, Py_None); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 454, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-      __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_fixed, __pyx_t_9); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 446, __pyx_L1_error)
+      __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_fixed, __pyx_t_9); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 454, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-      /* "adios_mpi.pyx":445
+      /* "adios_mpi.pyx":453
  *         elif isinstance(slice_, (int, long)):
  *             fixed.append(slice(slice_, slice_+1, None))
  *         elif isinstance(slice_, (float)):             # <<<<<<<<<<<<<<
@@ -4282,7 +4516,7 @@ static PyObject *__pyx_f_9adios_mpi___parse_index(PyObject *__pyx_v_index, PyObj
       goto __pyx_L6;
     }
 
-    /* "adios_mpi.pyx":448
+    /* "adios_mpi.pyx":456
  *             fixed.append(slice(int(slice_), int(slice_)+1, None))
  *         else:
  *             fixed.append(slice_)             # <<<<<<<<<<<<<<
@@ -4290,23 +4524,23 @@ static PyObject *__pyx_f_9adios_mpi___parse_index(PyObject *__pyx_v_index, PyObj
  * 
  */
     /*else*/ {
-      __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_fixed, __pyx_v_slice_); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 448, __pyx_L1_error)
+      __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_fixed, __pyx_v_slice_); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 456, __pyx_L1_error)
     }
     __pyx_L6:;
 
-    /* "adios_mpi.pyx":449
+    /* "adios_mpi.pyx":457
  *         else:
  *             fixed.append(slice_)
  *         length -= 1             # <<<<<<<<<<<<<<
  * 
  *     index = tuple(fixed)
  */
-    __pyx_t_9 = __Pyx_PyInt_SubtractObjC(__pyx_v_length, __pyx_int_1, 1, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 449, __pyx_L1_error)
+    __pyx_t_9 = __Pyx_PyInt_SubtractObjC(__pyx_v_length, __pyx_int_1, 1, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 457, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
     __Pyx_DECREF_SET(__pyx_v_length, __pyx_t_9);
     __pyx_t_9 = 0;
 
-    /* "adios_mpi.pyx":440
+    /* "adios_mpi.pyx":448
  *     length = len(index)
  * 
  *     for slice_ in index:             # <<<<<<<<<<<<<<
@@ -4316,57 +4550,57 @@ static PyObject *__pyx_f_9adios_mpi___parse_index(PyObject *__pyx_v_index, PyObj
   }
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "adios_mpi.pyx":451
+  /* "adios_mpi.pyx":459
  *         length -= 1
  * 
  *     index = tuple(fixed)             # <<<<<<<<<<<<<<
  *     if len(index) < ndim:
  *         index += (slice(None),) * (ndim-len(index))
  */
-  __pyx_t_3 = PyList_AsTuple(__pyx_v_fixed); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 451, __pyx_L1_error)
+  __pyx_t_3 = PyList_AsTuple(__pyx_v_fixed); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 459, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF_SET(__pyx_v_index, __pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "adios_mpi.pyx":452
+  /* "adios_mpi.pyx":460
  * 
  *     index = tuple(fixed)
  *     if len(index) < ndim:             # <<<<<<<<<<<<<<
  *         index += (slice(None),) * (ndim-len(index))
  * 
  */
-  __pyx_t_4 = PyObject_Length(__pyx_v_index); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 452, __pyx_L1_error)
-  __pyx_t_3 = PyInt_FromSsize_t(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 452, __pyx_L1_error)
+  __pyx_t_4 = PyObject_Length(__pyx_v_index); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 460, __pyx_L1_error)
+  __pyx_t_3 = PyInt_FromSsize_t(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 460, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_9 = PyObject_RichCompare(__pyx_t_3, __pyx_v_ndim, Py_LT); __Pyx_XGOTREF(__pyx_t_9); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 452, __pyx_L1_error)
+  __pyx_t_9 = PyObject_RichCompare(__pyx_t_3, __pyx_v_ndim, Py_LT); __Pyx_XGOTREF(__pyx_t_9); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 460, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 452, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 460, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
   if (__pyx_t_1) {
 
-    /* "adios_mpi.pyx":453
+    /* "adios_mpi.pyx":461
  *     index = tuple(fixed)
  *     if len(index) < ndim:
  *         index += (slice(None),) * (ndim-len(index))             # <<<<<<<<<<<<<<
  * 
  *     return index
  */
-    __pyx_t_4 = PyObject_Length(__pyx_v_index); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 453, __pyx_L1_error)
-    __pyx_t_9 = PyInt_FromSsize_t(__pyx_t_4); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 453, __pyx_L1_error)
+    __pyx_t_4 = PyObject_Length(__pyx_v_index); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 461, __pyx_L1_error)
+    __pyx_t_9 = PyInt_FromSsize_t(__pyx_t_4); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 461, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
-    __pyx_t_3 = PyNumber_Subtract(__pyx_v_ndim, __pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 453, __pyx_L1_error)
+    __pyx_t_3 = PyNumber_Subtract(__pyx_v_ndim, __pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 461, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-    __pyx_t_9 = PyNumber_Multiply(__pyx_tuple__6, __pyx_t_3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 453, __pyx_L1_error)
+    __pyx_t_9 = PyNumber_Multiply(__pyx_tuple__6, __pyx_t_3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 461, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_3 = PyNumber_InPlaceAdd(__pyx_v_index, __pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 453, __pyx_L1_error)
+    __pyx_t_3 = PyNumber_InPlaceAdd(__pyx_v_index, __pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 461, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     __Pyx_DECREF_SET(__pyx_v_index, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "adios_mpi.pyx":452
+    /* "adios_mpi.pyx":460
  * 
  *     index = tuple(fixed)
  *     if len(index) < ndim:             # <<<<<<<<<<<<<<
@@ -4375,7 +4609,7 @@ static PyObject *__pyx_f_9adios_mpi___parse_index(PyObject *__pyx_v_index, PyObj
  */
   }
 
-  /* "adios_mpi.pyx":455
+  /* "adios_mpi.pyx":463
  *         index += (slice(None),) * (ndim-len(index))
  * 
  *     return index             # <<<<<<<<<<<<<<
@@ -4387,8 +4621,8 @@ static PyObject *__pyx_f_9adios_mpi___parse_index(PyObject *__pyx_v_index, PyObj
   __pyx_r = __pyx_v_index;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":432
- *     ALL =2
+  /* "adios_mpi.pyx":440
+ *     DEFAULT = adios_stat_default
  * 
  * cpdef __parse_index(index, ndim):             # <<<<<<<<<<<<<<
  *     # Fix index, handling ellipsis and incomplete slices.
@@ -4442,11 +4676,11 @@ static PyObject *__pyx_pw_9adios_mpi_9__parse_index(PyObject *__pyx_self, PyObje
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_ndim)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__parse_index", 1, 2, 2, 1); __PYX_ERR(0, 432, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__parse_index", 1, 2, 2, 1); __PYX_ERR(0, 440, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__parse_index") < 0)) __PYX_ERR(0, 432, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__parse_index") < 0)) __PYX_ERR(0, 440, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -4459,7 +4693,7 @@ static PyObject *__pyx_pw_9adios_mpi_9__parse_index(PyObject *__pyx_self, PyObje
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__parse_index", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 432, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__parse_index", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 440, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.__parse_index", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -4478,7 +4712,7 @@ static PyObject *__pyx_pf_9adios_mpi_8__parse_index(CYTHON_UNUSED PyObject *__py
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__parse_index", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_9adios_mpi___parse_index(__pyx_v_index, __pyx_v_ndim, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 432, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_9adios_mpi___parse_index(__pyx_v_index, __pyx_v_ndim, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 440, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -4495,7 +4729,7 @@ static PyObject *__pyx_pf_9adios_mpi_8__parse_index(CYTHON_UNUSED PyObject *__py
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":464
+/* "adios_mpi.pyx":472
  * cdef MPI.Comm read_init_comm
  * 
  * cpdef init(str config, MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
@@ -4519,17 +4753,17 @@ static PyObject *__pyx_f_9adios_mpi_init(PyObject *__pyx_v_config, CYTHON_UNUSED
     }
   }
 
-  /* "adios_mpi.pyx":466
+  /* "adios_mpi.pyx":474
  * cpdef init(str config, MPI.Comm comm = MPI.COMM_WORLD):
  *     global init_comm
  *     init_comm = comm.Clone()             # <<<<<<<<<<<<<<
  *     return adios_init(s2b(config), init_comm.ob_mpi)
  * 
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_comm), __pyx_n_s_Clone); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 466, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_comm), __pyx_n_s_Clone); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 474, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
     __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
     if (likely(__pyx_t_3)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
@@ -4539,20 +4773,20 @@ static PyObject *__pyx_f_9adios_mpi_init(PyObject *__pyx_v_config, CYTHON_UNUSED
     }
   }
   if (__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 466, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 474, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   } else {
-    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 466, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 474, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_6mpi4py_3MPI_Comm))))) __PYX_ERR(0, 466, __pyx_L1_error)
+  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_6mpi4py_3MPI_Comm))))) __PYX_ERR(0, 474, __pyx_L1_error)
   __Pyx_XGOTREF(((PyObject *)__pyx_v_9adios_mpi_init_comm));
   __Pyx_DECREF_SET(__pyx_v_9adios_mpi_init_comm, ((struct PyMPICommObject *)__pyx_t_1));
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":467
+  /* "adios_mpi.pyx":475
  *     global init_comm
  *     init_comm = comm.Clone()
  *     return adios_init(s2b(config), init_comm.ob_mpi)             # <<<<<<<<<<<<<<
@@ -4560,17 +4794,17 @@ static PyObject *__pyx_f_9adios_mpi_init(PyObject *__pyx_v_config, CYTHON_UNUSED
  * cpdef int64_t open(str group_name,
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_config, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 467, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_config, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 475, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 467, __pyx_L1_error)
-  __pyx_t_2 = __Pyx_PyInt_From_int(adios_init(__pyx_t_4, __pyx_v_9adios_mpi_init_comm->ob_mpi)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 467, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 475, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyInt_From_int(adios_init(__pyx_t_4, __pyx_v_9adios_mpi_init_comm->ob_mpi)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 475, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":464
+  /* "adios_mpi.pyx":472
  * cdef MPI.Comm read_init_comm
  * 
  * cpdef init(str config, MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
@@ -4625,7 +4859,7 @@ static PyObject *__pyx_pw_9adios_mpi_11init(PyObject *__pyx_self, PyObject *__py
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "init") < 0)) __PYX_ERR(0, 464, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "init") < 0)) __PYX_ERR(0, 472, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -4640,14 +4874,14 @@ static PyObject *__pyx_pw_9adios_mpi_11init(PyObject *__pyx_self, PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("init", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 464, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("init", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 472, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.init", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_config), (&PyString_Type), 1, "config", 1))) __PYX_ERR(0, 464, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_comm), __pyx_ptype_6mpi4py_3MPI_Comm, 1, "comm", 0))) __PYX_ERR(0, 464, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_config), (&PyString_Type), 1, "config", 1))) __PYX_ERR(0, 472, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_comm), __pyx_ptype_6mpi4py_3MPI_Comm, 1, "comm", 0))) __PYX_ERR(0, 472, __pyx_L1_error)
   __pyx_r = __pyx_pf_9adios_mpi_10init(__pyx_self, __pyx_v_config, __pyx_v_comm);
 
   /* function exit code */
@@ -4668,7 +4902,7 @@ static PyObject *__pyx_pf_9adios_mpi_10init(CYTHON_UNUSED PyObject *__pyx_self,
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_2.__pyx_n = 1;
   __pyx_t_2.comm = __pyx_v_comm;
-  __pyx_t_1 = __pyx_f_9adios_mpi_init(__pyx_v_config, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 464, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_9adios_mpi_init(__pyx_v_config, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 472, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -4685,7 +4919,7 @@ static PyObject *__pyx_pf_9adios_mpi_10init(CYTHON_UNUSED PyObject *__pyx_self,
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":469
+/* "adios_mpi.pyx":477
  *     return adios_init(s2b(config), init_comm.ob_mpi)
  * 
  * cpdef int64_t open(str group_name,             # <<<<<<<<<<<<<<
@@ -4713,28 +4947,28 @@ static int64_t __pyx_f_9adios_mpi_open(PyObject *__pyx_v_group_name, PyObject *_
     }
   }
 
-  /* "adios_mpi.pyx":475
+  /* "adios_mpi.pyx":483
  *     cdef int64_t fd
  *     cdef int result
  *     result = adios_open(&fd, s2b(group_name), s2b(name), s2b(mode), comm.ob_mpi)             # <<<<<<<<<<<<<<
  *     return fd
  * 
  */
-  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_group_name, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 475, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_group_name, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 483, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 475, __pyx_L1_error)
-  __pyx_t_3 = __pyx_f_9adios_mpi_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 475, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 483, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_9adios_mpi_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 483, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 475, __pyx_L1_error)
-  __pyx_t_5 = __pyx_f_9adios_mpi_s2b(__pyx_v_mode, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 475, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 483, __pyx_L1_error)
+  __pyx_t_5 = __pyx_f_9adios_mpi_s2b(__pyx_v_mode, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 483, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_t_5); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(0, 475, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_t_5); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(0, 483, __pyx_L1_error)
   __pyx_v_result = adios_open((&__pyx_v_fd), __pyx_t_2, __pyx_t_4, __pyx_t_6, __pyx_v_comm->ob_mpi);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "adios_mpi.pyx":476
+  /* "adios_mpi.pyx":484
  *     cdef int result
  *     result = adios_open(&fd, s2b(group_name), s2b(name), s2b(mode), comm.ob_mpi)
  *     return fd             # <<<<<<<<<<<<<<
@@ -4744,7 +4978,7 @@ static int64_t __pyx_f_9adios_mpi_open(PyObject *__pyx_v_group_name, PyObject *_
   __pyx_r = __pyx_v_fd;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":469
+  /* "adios_mpi.pyx":477
  *     return adios_init(s2b(config), init_comm.ob_mpi)
  * 
  * cpdef int64_t open(str group_name,             # <<<<<<<<<<<<<<
@@ -4798,12 +5032,12 @@ static PyObject *__pyx_pw_9adios_mpi_13open(PyObject *__pyx_self, PyObject *__py
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("open", 0, 3, 4, 1); __PYX_ERR(0, 469, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("open", 0, 3, 4, 1); __PYX_ERR(0, 477, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mode)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("open", 0, 3, 4, 2); __PYX_ERR(0, 469, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("open", 0, 3, 4, 2); __PYX_ERR(0, 477, __pyx_L3_error)
         }
         case  3:
         if (kw_args > 0) {
@@ -4812,7 +5046,7 @@ static PyObject *__pyx_pw_9adios_mpi_13open(PyObject *__pyx_self, PyObject *__py
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "open") < 0)) __PYX_ERR(0, 469, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "open") < 0)) __PYX_ERR(0, 477, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -4831,16 +5065,16 @@ static PyObject *__pyx_pw_9adios_mpi_13open(PyObject *__pyx_self, PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("open", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 469, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("open", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 477, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.open", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_group_name), (&PyString_Type), 1, "group_name", 1))) __PYX_ERR(0, 469, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 470, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mode), (&PyString_Type), 1, "mode", 1))) __PYX_ERR(0, 471, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_comm), __pyx_ptype_6mpi4py_3MPI_Comm, 1, "comm", 0))) __PYX_ERR(0, 472, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_group_name), (&PyString_Type), 1, "group_name", 1))) __PYX_ERR(0, 477, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 478, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mode), (&PyString_Type), 1, "mode", 1))) __PYX_ERR(0, 479, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_comm), __pyx_ptype_6mpi4py_3MPI_Comm, 1, "comm", 0))) __PYX_ERR(0, 480, __pyx_L1_error)
   __pyx_r = __pyx_pf_9adios_mpi_12open(__pyx_self, __pyx_v_group_name, __pyx_v_name, __pyx_v_mode, __pyx_v_comm);
 
   /* function exit code */
@@ -4863,7 +5097,7 @@ static PyObject *__pyx_pf_9adios_mpi_12open(CYTHON_UNUSED PyObject *__pyx_self,
   __pyx_t_2.__pyx_n = 1;
   __pyx_t_2.comm = __pyx_v_comm;
   __pyx_t_1 = __pyx_f_9adios_mpi_open(__pyx_v_group_name, __pyx_v_name, __pyx_v_mode, 0, &__pyx_t_2); 
-  __pyx_t_3 = __Pyx_PyInt_From_int64_t(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 469, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyInt_From_int64_t(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 477, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
@@ -4880,7 +5114,7 @@ static PyObject *__pyx_pf_9adios_mpi_12open(CYTHON_UNUSED PyObject *__pyx_self,
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":478
+/* "adios_mpi.pyx":486
  *     return fd
  * 
  * cpdef int64_t set_group_size(int64_t fd_p, uint64_t data_size):             # <<<<<<<<<<<<<<
@@ -4896,7 +5130,7 @@ static int64_t __pyx_f_9adios_mpi_set_group_size(int64_t __pyx_v_fd_p, uint64_t
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("set_group_size", 0);
 
-  /* "adios_mpi.pyx":481
+  /* "adios_mpi.pyx":489
  *     cdef uint64_t total_size
  *     cdef int result
  *     result = adios_group_size(fd_p, data_size, &total_size)             # <<<<<<<<<<<<<<
@@ -4905,7 +5139,7 @@ static int64_t __pyx_f_9adios_mpi_set_group_size(int64_t __pyx_v_fd_p, uint64_t
  */
   __pyx_v_result = adios_group_size(__pyx_v_fd_p, __pyx_v_data_size, (&__pyx_v_total_size));
 
-  /* "adios_mpi.pyx":482
+  /* "adios_mpi.pyx":490
  *     cdef int result
  *     result = adios_group_size(fd_p, data_size, &total_size)
  *     return total_size             # <<<<<<<<<<<<<<
@@ -4915,7 +5149,7 @@ static int64_t __pyx_f_9adios_mpi_set_group_size(int64_t __pyx_v_fd_p, uint64_t
   __pyx_r = __pyx_v_total_size;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":478
+  /* "adios_mpi.pyx":486
  *     return fd
  * 
  * cpdef int64_t set_group_size(int64_t fd_p, uint64_t data_size):             # <<<<<<<<<<<<<<
@@ -4958,11 +5192,11 @@ static PyObject *__pyx_pw_9adios_mpi_15set_group_size(PyObject *__pyx_self, PyOb
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_data_size)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("set_group_size", 1, 2, 2, 1); __PYX_ERR(0, 478, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("set_group_size", 1, 2, 2, 1); __PYX_ERR(0, 486, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_group_size") < 0)) __PYX_ERR(0, 478, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_group_size") < 0)) __PYX_ERR(0, 486, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -4970,12 +5204,12 @@ static PyObject *__pyx_pw_9adios_mpi_15set_group_size(PyObject *__pyx_self, PyOb
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
     }
-    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 478, __pyx_L3_error)
-    __pyx_v_data_size = __Pyx_PyInt_As_uint64_t(values[1]); if (unlikely((__pyx_v_data_size == (uint64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 478, __pyx_L3_error)
+    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 486, __pyx_L3_error)
+    __pyx_v_data_size = __Pyx_PyInt_As_uint64_t(values[1]); if (unlikely((__pyx_v_data_size == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 486, __pyx_L3_error)
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("set_group_size", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 478, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("set_group_size", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 486, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.set_group_size", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -4994,7 +5228,7 @@ static PyObject *__pyx_pf_9adios_mpi_14set_group_size(CYTHON_UNUSED PyObject *__
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("set_group_size", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int64_t(__pyx_f_9adios_mpi_set_group_size(__pyx_v_fd_p, __pyx_v_data_size, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 478, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int64_t(__pyx_f_9adios_mpi_set_group_size(__pyx_v_fd_p, __pyx_v_data_size, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 486, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -5011,7 +5245,7 @@ static PyObject *__pyx_pf_9adios_mpi_14set_group_size(CYTHON_UNUSED PyObject *__
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":484
+/* "adios_mpi.pyx":492
  *     return total_size
  * 
  * cpdef int write (int64_t fd_p, str name, val, dtype=None):             # <<<<<<<<<<<<<<
@@ -5041,7 +5275,7 @@ static int __pyx_f_9adios_mpi_write(int64_t __pyx_v_fd_p, PyObject *__pyx_v_name
     }
   }
 
-  /* "adios_mpi.pyx":486
+  /* "adios_mpi.pyx":494
  * cpdef int write (int64_t fd_p, str name, val, dtype=None):
  *     cdef np.ndarray val_
  *     if isinstance(val, (np.ndarray)):             # <<<<<<<<<<<<<<
@@ -5052,36 +5286,36 @@ static int __pyx_f_9adios_mpi_write(int64_t __pyx_v_fd_p, PyObject *__pyx_v_name
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "adios_mpi.pyx":487
+    /* "adios_mpi.pyx":495
  *     cdef np.ndarray val_
  *     if isinstance(val, (np.ndarray)):
  *         if val.flags.contiguous:             # <<<<<<<<<<<<<<
  *             val_ = val
  *         else:
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_val, __pyx_n_s_flags); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 487, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_val, __pyx_n_s_flags); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 495, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_contiguous); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 487, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_contiguous); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 495, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 487, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 495, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     if (__pyx_t_2) {
 
-      /* "adios_mpi.pyx":488
+      /* "adios_mpi.pyx":496
  *     if isinstance(val, (np.ndarray)):
  *         if val.flags.contiguous:
  *             val_ = val             # <<<<<<<<<<<<<<
  *         else:
  *             val_ = np.array(val, copy=True)
  */
-      if (!(likely(((__pyx_v_val) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_val, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 488, __pyx_L1_error)
+      if (!(likely(((__pyx_v_val) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_val, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 496, __pyx_L1_error)
       __pyx_t_4 = __pyx_v_val;
       __Pyx_INCREF(__pyx_t_4);
       __pyx_v_val_ = ((PyArrayObject *)__pyx_t_4);
       __pyx_t_4 = 0;
 
-      /* "adios_mpi.pyx":487
+      /* "adios_mpi.pyx":495
  *     cdef np.ndarray val_
  *     if isinstance(val, (np.ndarray)):
  *         if val.flags.contiguous:             # <<<<<<<<<<<<<<
@@ -5091,7 +5325,7 @@ static int __pyx_f_9adios_mpi_write(int64_t __pyx_v_fd_p, PyObject *__pyx_v_name
       goto __pyx_L4;
     }
 
-    /* "adios_mpi.pyx":490
+    /* "adios_mpi.pyx":498
  *             val_ = val
  *         else:
  *             val_ = np.array(val, copy=True)             # <<<<<<<<<<<<<<
@@ -5099,31 +5333,31 @@ static int __pyx_f_9adios_mpi_write(int64_t __pyx_v_fd_p, PyObject *__pyx_v_name
  *         val_ = np.array(val, dtype=dtype)
  */
     /*else*/ {
-      __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 490, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 498, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_array); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 490, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_array); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 498, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 490, __pyx_L1_error)
+      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 498, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_INCREF(__pyx_v_val);
       __Pyx_GIVEREF(__pyx_v_val);
       PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_val);
-      __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 490, __pyx_L1_error)
+      __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 498, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
-      if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_copy, Py_True) < 0) __PYX_ERR(0, 490, __pyx_L1_error)
-      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 490, __pyx_L1_error)
+      if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_copy, Py_True) < 0) __PYX_ERR(0, 498, __pyx_L1_error)
+      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 498, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 490, __pyx_L1_error)
+      if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 498, __pyx_L1_error)
       __pyx_v_val_ = ((PyArrayObject *)__pyx_t_6);
       __pyx_t_6 = 0;
     }
     __pyx_L4:;
 
-    /* "adios_mpi.pyx":486
+    /* "adios_mpi.pyx":494
  * cpdef int write (int64_t fd_p, str name, val, dtype=None):
  *     cdef np.ndarray val_
  *     if isinstance(val, (np.ndarray)):             # <<<<<<<<<<<<<<
@@ -5133,7 +5367,7 @@ static int __pyx_f_9adios_mpi_write(int64_t __pyx_v_fd_p, PyObject *__pyx_v_name
     goto __pyx_L3;
   }
 
-  /* "adios_mpi.pyx":492
+  /* "adios_mpi.pyx":500
  *             val_ = np.array(val, copy=True)
  *     else:
  *         val_ = np.array(val, dtype=dtype)             # <<<<<<<<<<<<<<
@@ -5141,66 +5375,66 @@ static int __pyx_f_9adios_mpi_write(int64_t __pyx_v_fd_p, PyObject *__pyx_v_name
  *     cdef void * ptr
  */
   /*else*/ {
-    __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 492, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 500, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_array); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 492, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_array); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 500, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-    __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 492, __pyx_L1_error)
+    __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 500, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_INCREF(__pyx_v_val);
     __Pyx_GIVEREF(__pyx_v_val);
     PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_val);
-    __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 492, __pyx_L1_error)
+    __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 500, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_v_dtype) < 0) __PYX_ERR(0, 492, __pyx_L1_error)
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 492, __pyx_L1_error)
+    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_v_dtype) < 0) __PYX_ERR(0, 500, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 500, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 492, __pyx_L1_error)
+    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 500, __pyx_L1_error)
     __pyx_v_val_ = ((PyArrayObject *)__pyx_t_3);
     __pyx_t_3 = 0;
   }
   __pyx_L3:;
 
-  /* "adios_mpi.pyx":495
+  /* "adios_mpi.pyx":503
  * 
  *     cdef void * ptr
  *     if (val_.dtype.char in ('S', 'U')):             # <<<<<<<<<<<<<<
  *         bstr = val_.tostring()
  *         ptr = <void *> PyBytes_AS_STRING(bstr)
  */
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val_), __pyx_n_s_dtype); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 495, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val_), __pyx_n_s_dtype); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 503, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_char); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 495, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_char); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 503, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_4, __pyx_n_s_S, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 495, __pyx_L1_error)
+  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_4, __pyx_n_s_S, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 503, __pyx_L1_error)
   if (!__pyx_t_1) {
   } else {
     __pyx_t_2 = __pyx_t_1;
     goto __pyx_L6_bool_binop_done;
   }
-  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_4, __pyx_n_s_U, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 495, __pyx_L1_error)
+  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_4, __pyx_n_s_U, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 503, __pyx_L1_error)
   __pyx_t_2 = __pyx_t_1;
   __pyx_L6_bool_binop_done:;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "adios_mpi.pyx":496
+    /* "adios_mpi.pyx":504
  *     cdef void * ptr
  *     if (val_.dtype.char in ('S', 'U')):
  *         bstr = val_.tostring()             # <<<<<<<<<<<<<<
  *         ptr = <void *> PyBytes_AS_STRING(bstr)
  *     else:
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val_), __pyx_n_s_tostring); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 496, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val_), __pyx_n_s_tostring); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 504, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_6 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
       __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_3);
       if (likely(__pyx_t_6)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -5210,17 +5444,17 @@ static int __pyx_f_9adios_mpi_write(int64_t __pyx_v_fd_p, PyObject *__pyx_v_name
       }
     }
     if (__pyx_t_6) {
-      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 496, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 504, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     } else {
-      __pyx_t_4 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 496, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 504, __pyx_L1_error)
     }
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __pyx_v_bstr = __pyx_t_4;
     __pyx_t_4 = 0;
 
-    /* "adios_mpi.pyx":497
+    /* "adios_mpi.pyx":505
  *     if (val_.dtype.char in ('S', 'U')):
  *         bstr = val_.tostring()
  *         ptr = <void *> PyBytes_AS_STRING(bstr)             # <<<<<<<<<<<<<<
@@ -5229,7 +5463,7 @@ static int __pyx_f_9adios_mpi_write(int64_t __pyx_v_fd_p, PyObject *__pyx_v_name
  */
     __pyx_v_ptr = ((void *)PyBytes_AS_STRING(__pyx_v_bstr));
 
-    /* "adios_mpi.pyx":495
+    /* "adios_mpi.pyx":503
  * 
  *     cdef void * ptr
  *     if (val_.dtype.char in ('S', 'U')):             # <<<<<<<<<<<<<<
@@ -5239,7 +5473,7 @@ static int __pyx_f_9adios_mpi_write(int64_t __pyx_v_fd_p, PyObject *__pyx_v_name
     goto __pyx_L5;
   }
 
-  /* "adios_mpi.pyx":499
+  /* "adios_mpi.pyx":507
  *         ptr = <void *> PyBytes_AS_STRING(bstr)
  *     else:
  *         ptr = <void *> val_.data             # <<<<<<<<<<<<<<
@@ -5251,21 +5485,21 @@ static int __pyx_f_9adios_mpi_write(int64_t __pyx_v_fd_p, PyObject *__pyx_v_name
   }
   __pyx_L5:;
 
-  /* "adios_mpi.pyx":501
+  /* "adios_mpi.pyx":509
  *         ptr = <void *> val_.data
  * 
  *     return adios_write (fd_p, s2b(name), ptr)             # <<<<<<<<<<<<<<
  * 
  * cpdef int write_int (int64_t fd_p, str name, int val):
  */
-  __pyx_t_4 = __pyx_f_9adios_mpi_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 501, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_9adios_mpi_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 509, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_7 = __Pyx_PyObject_AsString(__pyx_t_4); if (unlikely((!__pyx_t_7) && PyErr_Occurred())) __PYX_ERR(0, 501, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyObject_AsString(__pyx_t_4); if (unlikely((!__pyx_t_7) && PyErr_Occurred())) __PYX_ERR(0, 509, __pyx_L1_error)
   __pyx_r = adios_write(__pyx_v_fd_p, __pyx_t_7, __pyx_v_ptr);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":484
+  /* "adios_mpi.pyx":492
  *     return total_size
  * 
  * cpdef int write (int64_t fd_p, str name, val, dtype=None):             # <<<<<<<<<<<<<<
@@ -5322,12 +5556,12 @@ static PyObject *__pyx_pw_9adios_mpi_17write(PyObject *__pyx_self, PyObject *__p
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("write", 0, 3, 4, 1); __PYX_ERR(0, 484, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("write", 0, 3, 4, 1); __PYX_ERR(0, 492, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_val)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("write", 0, 3, 4, 2); __PYX_ERR(0, 484, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("write", 0, 3, 4, 2); __PYX_ERR(0, 492, __pyx_L3_error)
         }
         case  3:
         if (kw_args > 0) {
@@ -5336,7 +5570,7 @@ static PyObject *__pyx_pw_9adios_mpi_17write(PyObject *__pyx_self, PyObject *__p
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "write") < 0)) __PYX_ERR(0, 484, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "write") < 0)) __PYX_ERR(0, 492, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -5348,20 +5582,20 @@ static PyObject *__pyx_pw_9adios_mpi_17write(PyObject *__pyx_self, PyObject *__p
         default: goto __pyx_L5_argtuple_error;
       }
     }
-    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 484, __pyx_L3_error)
+    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 492, __pyx_L3_error)
     __pyx_v_name = ((PyObject*)values[1]);
     __pyx_v_val = values[2];
     __pyx_v_dtype = values[3];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("write", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 484, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("write", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 492, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.write", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 484, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 492, __pyx_L1_error)
   __pyx_r = __pyx_pf_9adios_mpi_16write(__pyx_self, __pyx_v_fd_p, __pyx_v_name, __pyx_v_val, __pyx_v_dtype);
 
   /* function exit code */
@@ -5384,7 +5618,7 @@ static PyObject *__pyx_pf_9adios_mpi_16write(CYTHON_UNUSED PyObject *__pyx_self,
   __pyx_t_2.__pyx_n = 1;
   __pyx_t_2.dtype = __pyx_v_dtype;
   __pyx_t_1 = __pyx_f_9adios_mpi_write(__pyx_v_fd_p, __pyx_v_name, __pyx_v_val, 0, &__pyx_t_2); 
-  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 484, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 492, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
@@ -5401,7 +5635,7 @@ static PyObject *__pyx_pf_9adios_mpi_16write(CYTHON_UNUSED PyObject *__pyx_self,
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":503
+/* "adios_mpi.pyx":511
  *     return adios_write (fd_p, s2b(name), ptr)
  * 
  * cpdef int write_int (int64_t fd_p, str name, int val):             # <<<<<<<<<<<<<<
@@ -5417,21 +5651,21 @@ static int __pyx_f_9adios_mpi_write_int(int64_t __pyx_v_fd_p, PyObject *__pyx_v_
   char *__pyx_t_2;
   __Pyx_RefNannySetupContext("write_int", 0);
 
-  /* "adios_mpi.pyx":504
+  /* "adios_mpi.pyx":512
  * 
  * cpdef int write_int (int64_t fd_p, str name, int val):
  *     return adios_write (fd_p, s2b(name), &val)             # <<<<<<<<<<<<<<
  * 
  * cpdef int write_long (int64_t fd_p, str name, long val):
  */
-  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 504, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 512, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 504, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 512, __pyx_L1_error)
   __pyx_r = adios_write(__pyx_v_fd_p, __pyx_t_2, (&__pyx_v_val));
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":503
+  /* "adios_mpi.pyx":511
  *     return adios_write (fd_p, s2b(name), ptr)
  * 
  * cpdef int write_int (int64_t fd_p, str name, int val):             # <<<<<<<<<<<<<<
@@ -5480,16 +5714,16 @@ static PyObject *__pyx_pw_9adios_mpi_19write_int(PyObject *__pyx_self, PyObject
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("write_int", 1, 3, 3, 1); __PYX_ERR(0, 503, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("write_int", 1, 3, 3, 1); __PYX_ERR(0, 511, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_val)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("write_int", 1, 3, 3, 2); __PYX_ERR(0, 503, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("write_int", 1, 3, 3, 2); __PYX_ERR(0, 511, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "write_int") < 0)) __PYX_ERR(0, 503, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "write_int") < 0)) __PYX_ERR(0, 511, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -5498,19 +5732,19 @@ static PyObject *__pyx_pw_9adios_mpi_19write_int(PyObject *__pyx_self, PyObject
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
     }
-    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 503, __pyx_L3_error)
+    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 511, __pyx_L3_error)
     __pyx_v_name = ((PyObject*)values[1]);
-    __pyx_v_val = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_val == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 503, __pyx_L3_error)
+    __pyx_v_val = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_val == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 511, __pyx_L3_error)
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("write_int", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 503, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("write_int", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 511, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.write_int", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 503, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 511, __pyx_L1_error)
   __pyx_r = __pyx_pf_9adios_mpi_18write_int(__pyx_self, __pyx_v_fd_p, __pyx_v_name, __pyx_v_val);
 
   /* function exit code */
@@ -5528,7 +5762,7 @@ static PyObject *__pyx_pf_9adios_mpi_18write_int(CYTHON_UNUSED PyObject *__pyx_s
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("write_int", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_write_int(__pyx_v_fd_p, __pyx_v_name, __pyx_v_val, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 503, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_write_int(__pyx_v_fd_p, __pyx_v_name, __pyx_v_val, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 511, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -5545,7 +5779,7 @@ static PyObject *__pyx_pf_9adios_mpi_18write_int(CYTHON_UNUSED PyObject *__pyx_s
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":506
+/* "adios_mpi.pyx":514
  *     return adios_write (fd_p, s2b(name), &val)
  * 
  * cpdef int write_long (int64_t fd_p, str name, long val):             # <<<<<<<<<<<<<<
@@ -5561,21 +5795,21 @@ static int __pyx_f_9adios_mpi_write_long(int64_t __pyx_v_fd_p, PyObject *__pyx_v
   char *__pyx_t_2;
   __Pyx_RefNannySetupContext("write_long", 0);
 
-  /* "adios_mpi.pyx":507
+  /* "adios_mpi.pyx":515
  * 
  * cpdef int write_long (int64_t fd_p, str name, long val):
  *     return adios_write (fd_p, s2b(name), &val)             # <<<<<<<<<<<<<<
  * 
  * cpdef int write_float (int64_t fd_p, str name, float val):
  */
-  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 507, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 515, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 507, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 515, __pyx_L1_error)
   __pyx_r = adios_write(__pyx_v_fd_p, __pyx_t_2, (&__pyx_v_val));
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":506
+  /* "adios_mpi.pyx":514
  *     return adios_write (fd_p, s2b(name), &val)
  * 
  * cpdef int write_long (int64_t fd_p, str name, long val):             # <<<<<<<<<<<<<<
@@ -5624,16 +5858,16 @@ static PyObject *__pyx_pw_9adios_mpi_21write_long(PyObject *__pyx_self, PyObject
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("write_long", 1, 3, 3, 1); __PYX_ERR(0, 506, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("write_long", 1, 3, 3, 1); __PYX_ERR(0, 514, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_val)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("write_long", 1, 3, 3, 2); __PYX_ERR(0, 506, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("write_long", 1, 3, 3, 2); __PYX_ERR(0, 514, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "write_long") < 0)) __PYX_ERR(0, 506, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "write_long") < 0)) __PYX_ERR(0, 514, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -5642,19 +5876,19 @@ static PyObject *__pyx_pw_9adios_mpi_21write_long(PyObject *__pyx_self, PyObject
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
     }
-    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 506, __pyx_L3_error)
+    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 514, __pyx_L3_error)
     __pyx_v_name = ((PyObject*)values[1]);
-    __pyx_v_val = __Pyx_PyInt_As_long(values[2]); if (unlikely((__pyx_v_val == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 506, __pyx_L3_error)
+    __pyx_v_val = __Pyx_PyInt_As_long(values[2]); if (unlikely((__pyx_v_val == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 514, __pyx_L3_error)
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("write_long", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 506, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("write_long", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 514, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.write_long", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 506, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 514, __pyx_L1_error)
   __pyx_r = __pyx_pf_9adios_mpi_20write_long(__pyx_self, __pyx_v_fd_p, __pyx_v_name, __pyx_v_val);
 
   /* function exit code */
@@ -5672,7 +5906,7 @@ static PyObject *__pyx_pf_9adios_mpi_20write_long(CYTHON_UNUSED PyObject *__pyx_
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("write_long", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_write_long(__pyx_v_fd_p, __pyx_v_name, __pyx_v_val, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 506, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_write_long(__pyx_v_fd_p, __pyx_v_name, __pyx_v_val, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 514, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -5689,7 +5923,7 @@ static PyObject *__pyx_pf_9adios_mpi_20write_long(CYTHON_UNUSED PyObject *__pyx_
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":509
+/* "adios_mpi.pyx":517
  *     return adios_write (fd_p, s2b(name), &val)
  * 
  * cpdef int write_float (int64_t fd_p, str name, float val):             # <<<<<<<<<<<<<<
@@ -5705,21 +5939,21 @@ static int __pyx_f_9adios_mpi_write_float(int64_t __pyx_v_fd_p, PyObject *__pyx_
   char *__pyx_t_2;
   __Pyx_RefNannySetupContext("write_float", 0);
 
-  /* "adios_mpi.pyx":510
+  /* "adios_mpi.pyx":518
  * 
  * cpdef int write_float (int64_t fd_p, str name, float val):
  *     return adios_write (fd_p, s2b(name), &val)             # <<<<<<<<<<<<<<
  * 
  * cpdef int write_double (int64_t fd_p, str name, double val):
  */
-  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 510, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 518, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 510, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 518, __pyx_L1_error)
   __pyx_r = adios_write(__pyx_v_fd_p, __pyx_t_2, (&__pyx_v_val));
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":509
+  /* "adios_mpi.pyx":517
  *     return adios_write (fd_p, s2b(name), &val)
  * 
  * cpdef int write_float (int64_t fd_p, str name, float val):             # <<<<<<<<<<<<<<
@@ -5768,16 +6002,16 @@ static PyObject *__pyx_pw_9adios_mpi_23write_float(PyObject *__pyx_self, PyObjec
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("write_float", 1, 3, 3, 1); __PYX_ERR(0, 509, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("write_float", 1, 3, 3, 1); __PYX_ERR(0, 517, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_val)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("write_float", 1, 3, 3, 2); __PYX_ERR(0, 509, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("write_float", 1, 3, 3, 2); __PYX_ERR(0, 517, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "write_float") < 0)) __PYX_ERR(0, 509, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "write_float") < 0)) __PYX_ERR(0, 517, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -5786,19 +6020,19 @@ static PyObject *__pyx_pw_9adios_mpi_23write_float(PyObject *__pyx_self, PyObjec
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
     }
-    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 509, __pyx_L3_error)
+    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 517, __pyx_L3_error)
     __pyx_v_name = ((PyObject*)values[1]);
-    __pyx_v_val = __pyx_PyFloat_AsFloat(values[2]); if (unlikely((__pyx_v_val == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 509, __pyx_L3_error)
+    __pyx_v_val = __pyx_PyFloat_AsFloat(values[2]); if (unlikely((__pyx_v_val == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 517, __pyx_L3_error)
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("write_float", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 509, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("write_float", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 517, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.write_float", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 509, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 517, __pyx_L1_error)
   __pyx_r = __pyx_pf_9adios_mpi_22write_float(__pyx_self, __pyx_v_fd_p, __pyx_v_name, __pyx_v_val);
 
   /* function exit code */
@@ -5816,7 +6050,7 @@ static PyObject *__pyx_pf_9adios_mpi_22write_float(CYTHON_UNUSED PyObject *__pyx
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("write_float", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_write_float(__pyx_v_fd_p, __pyx_v_name, __pyx_v_val, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 509, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_write_float(__pyx_v_fd_p, __pyx_v_name, __pyx_v_val, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 517, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -5833,7 +6067,7 @@ static PyObject *__pyx_pf_9adios_mpi_22write_float(CYTHON_UNUSED PyObject *__pyx
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":512
+/* "adios_mpi.pyx":520
  *     return adios_write (fd_p, s2b(name), &val)
  * 
  * cpdef int write_double (int64_t fd_p, str name, double val):             # <<<<<<<<<<<<<<
@@ -5849,21 +6083,21 @@ static int __pyx_f_9adios_mpi_write_double(int64_t __pyx_v_fd_p, PyObject *__pyx
   char *__pyx_t_2;
   __Pyx_RefNannySetupContext("write_double", 0);
 
-  /* "adios_mpi.pyx":513
+  /* "adios_mpi.pyx":521
  * 
  * cpdef int write_double (int64_t fd_p, str name, double val):
  *     return adios_write (fd_p, s2b(name), &val)             # <<<<<<<<<<<<<<
  * 
  * 
  */
-  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 513, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 521, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 513, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 521, __pyx_L1_error)
   __pyx_r = adios_write(__pyx_v_fd_p, __pyx_t_2, (&__pyx_v_val));
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":512
+  /* "adios_mpi.pyx":520
  *     return adios_write (fd_p, s2b(name), &val)
  * 
  * cpdef int write_double (int64_t fd_p, str name, double val):             # <<<<<<<<<<<<<<
@@ -5912,16 +6146,16 @@ static PyObject *__pyx_pw_9adios_mpi_25write_double(PyObject *__pyx_self, PyObje
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("write_double", 1, 3, 3, 1); __PYX_ERR(0, 512, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("write_double", 1, 3, 3, 1); __PYX_ERR(0, 520, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_val)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("write_double", 1, 3, 3, 2); __PYX_ERR(0, 512, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("write_double", 1, 3, 3, 2); __PYX_ERR(0, 520, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "write_double") < 0)) __PYX_ERR(0, 512, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "write_double") < 0)) __PYX_ERR(0, 520, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -5930,19 +6164,19 @@ static PyObject *__pyx_pw_9adios_mpi_25write_double(PyObject *__pyx_self, PyObje
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
     }
-    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 512, __pyx_L3_error)
+    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 520, __pyx_L3_error)
     __pyx_v_name = ((PyObject*)values[1]);
-    __pyx_v_val = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_val == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 512, __pyx_L3_error)
+    __pyx_v_val = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_val == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 520, __pyx_L3_error)
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("write_double", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 512, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("write_double", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 520, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.write_double", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 512, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 520, __pyx_L1_error)
   __pyx_r = __pyx_pf_9adios_mpi_24write_double(__pyx_self, __pyx_v_fd_p, __pyx_v_name, __pyx_v_val);
 
   /* function exit code */
@@ -5960,7 +6194,7 @@ static PyObject *__pyx_pf_9adios_mpi_24write_double(CYTHON_UNUSED PyObject *__py
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("write_double", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_write_double(__pyx_v_fd_p, __pyx_v_name, __pyx_v_val, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 512, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_write_double(__pyx_v_fd_p, __pyx_v_name, __pyx_v_val, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 520, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -5977,7 +6211,7 @@ static PyObject *__pyx_pf_9adios_mpi_24write_double(CYTHON_UNUSED PyObject *__py
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":516
+/* "adios_mpi.pyx":524
  * 
  * 
  * cpdef int read(int64_t fd_p, str name, np.ndarray val):             # <<<<<<<<<<<<<<
@@ -5998,7 +6232,7 @@ static int __pyx_f_9adios_mpi_read(int64_t __pyx_v_fd_p, PyObject *__pyx_v_name,
   uint64_t __pyx_t_7;
   __Pyx_RefNannySetupContext("read", 0);
 
-  /* "adios_mpi.pyx":517
+  /* "adios_mpi.pyx":525
  * 
  * cpdef int read(int64_t fd_p, str name, np.ndarray val):
  *     assert val.flags.contiguous, 'Only contiguous arrays are supported.'             # <<<<<<<<<<<<<<
@@ -6007,36 +6241,36 @@ static int __pyx_f_9adios_mpi_read(int64_t __pyx_v_fd_p, PyObject *__pyx_v_name,
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
   if (unlikely(!Py_OptimizeFlag)) {
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val), __pyx_n_s_flags); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 517, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val), __pyx_n_s_flags); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 525, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_contiguous); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 517, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_contiguous); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 525, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 517, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 525, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     if (unlikely(!__pyx_t_3)) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Only_contiguous_arrays_are_suppo);
-      __PYX_ERR(0, 517, __pyx_L1_error)
+      __PYX_ERR(0, 525, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "adios_mpi.pyx":518
+  /* "adios_mpi.pyx":526
  * cpdef int read(int64_t fd_p, str name, np.ndarray val):
  *     assert val.flags.contiguous, 'Only contiguous arrays are supported.'
  *     print ("Reading ... ", val.itemsize * val.size, "(bytes)")             # <<<<<<<<<<<<<<
  *     return adios_read(fd_p, s2b(name), <void *> val.data, val.itemsize * val.size)
  * 
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val), __pyx_n_s_itemsize); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 518, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val), __pyx_n_s_itemsize); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 526, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val), __pyx_n_s_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 518, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val), __pyx_n_s_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 526, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = PyNumber_Multiply(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 518, __pyx_L1_error)
+  __pyx_t_4 = PyNumber_Multiply(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 526, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 518, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 526, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_kp_s_Reading);
   __Pyx_GIVEREF(__pyx_kp_s_Reading);
@@ -6047,36 +6281,36 @@ static int __pyx_f_9adios_mpi_read(int64_t __pyx_v_fd_p, PyObject *__pyx_v_name,
   __Pyx_GIVEREF(__pyx_kp_s_bytes);
   PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_kp_s_bytes);
   __pyx_t_4 = 0;
-  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 518, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 526, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "adios_mpi.pyx":519
+  /* "adios_mpi.pyx":527
  *     assert val.flags.contiguous, 'Only contiguous arrays are supported.'
  *     print ("Reading ... ", val.itemsize * val.size, "(bytes)")
  *     return adios_read(fd_p, s2b(name), <void *> val.data, val.itemsize * val.size)             # <<<<<<<<<<<<<<
  * 
  * cpdef int close(int64_t fd_p):
  */
-  __pyx_t_4 = __pyx_f_9adios_mpi_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 519, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_9adios_mpi_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 527, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = __Pyx_PyObject_AsString(__pyx_t_4); if (unlikely((!__pyx_t_5) && PyErr_Occurred())) __PYX_ERR(0, 519, __pyx_L1_error)
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val), __pyx_n_s_itemsize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 519, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_AsString(__pyx_t_4); if (unlikely((!__pyx_t_5) && PyErr_Occurred())) __PYX_ERR(0, 527, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val), __pyx_n_s_itemsize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 527, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val), __pyx_n_s_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 519, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val), __pyx_n_s_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 527, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_6 = PyNumber_Multiply(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 519, __pyx_L1_error)
+  __pyx_t_6 = PyNumber_Multiply(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 527, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_7 = __Pyx_PyInt_As_uint64_t(__pyx_t_6); if (unlikely((__pyx_t_7 == (uint64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 519, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyInt_As_uint64_t(__pyx_t_6); if (unlikely((__pyx_t_7 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 527, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __pyx_r = adios_read(__pyx_v_fd_p, __pyx_t_5, ((void *)__pyx_v_val->data), __pyx_t_7);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":516
+  /* "adios_mpi.pyx":524
  * 
  * 
  * cpdef int read(int64_t fd_p, str name, np.ndarray val):             # <<<<<<<<<<<<<<
@@ -6128,16 +6362,16 @@ static PyObject *__pyx_pw_9adios_mpi_27read(PyObject *__pyx_self, PyObject *__py
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("read", 1, 3, 3, 1); __PYX_ERR(0, 516, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("read", 1, 3, 3, 1); __PYX_ERR(0, 524, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_val)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("read", 1, 3, 3, 2); __PYX_ERR(0, 516, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("read", 1, 3, 3, 2); __PYX_ERR(0, 524, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "read") < 0)) __PYX_ERR(0, 516, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "read") < 0)) __PYX_ERR(0, 524, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -6146,20 +6380,20 @@ static PyObject *__pyx_pw_9adios_mpi_27read(PyObject *__pyx_self, PyObject *__py
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
     }
-    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 516, __pyx_L3_error)
+    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 524, __pyx_L3_error)
     __pyx_v_name = ((PyObject*)values[1]);
     __pyx_v_val = ((PyArrayObject *)values[2]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("read", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 516, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("read", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 524, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.read", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 516, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_val), __pyx_ptype_5numpy_ndarray, 1, "val", 0))) __PYX_ERR(0, 516, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 524, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_val), __pyx_ptype_5numpy_ndarray, 1, "val", 0))) __PYX_ERR(0, 524, __pyx_L1_error)
   __pyx_r = __pyx_pf_9adios_mpi_26read(__pyx_self, __pyx_v_fd_p, __pyx_v_name, __pyx_v_val);
 
   /* function exit code */
@@ -6177,7 +6411,7 @@ static PyObject *__pyx_pf_9adios_mpi_26read(CYTHON_UNUSED PyObject *__pyx_self,
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("read", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_read(__pyx_v_fd_p, __pyx_v_name, __pyx_v_val, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 516, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_read(__pyx_v_fd_p, __pyx_v_name, __pyx_v_val, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 524, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -6194,7 +6428,7 @@ static PyObject *__pyx_pf_9adios_mpi_26read(CYTHON_UNUSED PyObject *__pyx_self,
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":521
+/* "adios_mpi.pyx":529
  *     return adios_read(fd_p, s2b(name), <void *> val.data, val.itemsize * val.size)
  * 
  * cpdef int close(int64_t fd_p):             # <<<<<<<<<<<<<<
@@ -6208,7 +6442,7 @@ static int __pyx_f_9adios_mpi_close(int64_t __pyx_v_fd_p, CYTHON_UNUSED int __py
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("close", 0);
 
-  /* "adios_mpi.pyx":522
+  /* "adios_mpi.pyx":530
  * 
  * cpdef int close(int64_t fd_p):
  *     return adios_close(fd_p)             # <<<<<<<<<<<<<<
@@ -6218,7 +6452,7 @@ static int __pyx_f_9adios_mpi_close(int64_t __pyx_v_fd_p, CYTHON_UNUSED int __py
   __pyx_r = adios_close(__pyx_v_fd_p);
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":521
+  /* "adios_mpi.pyx":529
  *     return adios_read(fd_p, s2b(name), <void *> val.data, val.itemsize * val.size)
  * 
  * cpdef int close(int64_t fd_p):             # <<<<<<<<<<<<<<
@@ -6241,7 +6475,7 @@ static PyObject *__pyx_pw_9adios_mpi_29close(PyObject *__pyx_self, PyObject *__p
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("close (wrapper)", 0);
   assert(__pyx_arg_fd_p); {
-    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(__pyx_arg_fd_p); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 521, __pyx_L3_error)
+    __pyx_v_fd_p = __Pyx_PyInt_As_int64_t(__pyx_arg_fd_p); if (unlikely((__pyx_v_fd_p == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 529, __pyx_L3_error)
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L3_error:;
@@ -6262,7 +6496,7 @@ static PyObject *__pyx_pf_9adios_mpi_28close(CYTHON_UNUSED PyObject *__pyx_self,
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("close", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_close(__pyx_v_fd_p, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 521, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_close(__pyx_v_fd_p, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 529, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -6279,7 +6513,7 @@ static PyObject *__pyx_pf_9adios_mpi_28close(CYTHON_UNUSED PyObject *__pyx_self,
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":524
+/* "adios_mpi.pyx":532
  *     return adios_close(fd_p)
  * 
  * cpdef int finalize(int mype = 0):             # <<<<<<<<<<<<<<
@@ -6299,7 +6533,7 @@ static int __pyx_f_9adios_mpi_finalize(CYTHON_UNUSED int __pyx_skip_dispatch, st
     }
   }
 
-  /* "adios_mpi.pyx":525
+  /* "adios_mpi.pyx":533
  * 
  * cpdef int finalize(int mype = 0):
  *     return adios_finalize(mype)             # <<<<<<<<<<<<<<
@@ -6309,7 +6543,7 @@ static int __pyx_f_9adios_mpi_finalize(CYTHON_UNUSED int __pyx_skip_dispatch, st
   __pyx_r = adios_finalize(__pyx_v_mype);
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":524
+  /* "adios_mpi.pyx":532
  *     return adios_close(fd_p)
  * 
  * cpdef int finalize(int mype = 0):             # <<<<<<<<<<<<<<
@@ -6351,7 +6585,7 @@ static PyObject *__pyx_pw_9adios_mpi_31finalize(PyObject *__pyx_self, PyObject *
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "finalize") < 0)) __PYX_ERR(0, 524, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "finalize") < 0)) __PYX_ERR(0, 532, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -6361,14 +6595,14 @@ static PyObject *__pyx_pw_9adios_mpi_31finalize(PyObject *__pyx_self, PyObject *
       }
     }
     if (values[0]) {
-      __pyx_v_mype = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_mype == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 524, __pyx_L3_error)
+      __pyx_v_mype = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_mype == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 532, __pyx_L3_error)
     } else {
       __pyx_v_mype = ((int)0);
     }
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("finalize", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 524, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("finalize", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 532, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.finalize", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -6392,7 +6626,7 @@ static PyObject *__pyx_pf_9adios_mpi_30finalize(CYTHON_UNUSED PyObject *__pyx_se
   __pyx_t_2.__pyx_n = 1;
   __pyx_t_2.mype = __pyx_v_mype;
   __pyx_t_1 = __pyx_f_9adios_mpi_finalize(0, &__pyx_t_2); 
-  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 524, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 532, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
@@ -6409,7 +6643,7 @@ static PyObject *__pyx_pf_9adios_mpi_30finalize(CYTHON_UNUSED PyObject *__pyx_se
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":531
+/* "adios_mpi.pyx":539
  * ## ====================
  * 
  * cpdef int init_noxml(MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
@@ -6432,17 +6666,17 @@ static int __pyx_f_9adios_mpi_init_noxml(CYTHON_UNUSED int __pyx_skip_dispatch,
     }
   }
 
-  /* "adios_mpi.pyx":533
+  /* "adios_mpi.pyx":541
  * cpdef int init_noxml(MPI.Comm comm = MPI.COMM_WORLD):
  *     global init_comm
  *     init_comm = comm.Clone()             # <<<<<<<<<<<<<<
  *     return adios_init_noxml(init_comm.ob_mpi)
  * 
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_comm), __pyx_n_s_Clone); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 533, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_comm), __pyx_n_s_Clone); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 541, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
     __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
     if (likely(__pyx_t_3)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
@@ -6452,20 +6686,20 @@ static int __pyx_f_9adios_mpi_init_noxml(CYTHON_UNUSED int __pyx_skip_dispatch,
     }
   }
   if (__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 533, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 541, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   } else {
-    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 533, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 541, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_6mpi4py_3MPI_Comm))))) __PYX_ERR(0, 533, __pyx_L1_error)
+  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_6mpi4py_3MPI_Comm))))) __PYX_ERR(0, 541, __pyx_L1_error)
   __Pyx_XGOTREF(((PyObject *)__pyx_v_9adios_mpi_init_comm));
   __Pyx_DECREF_SET(__pyx_v_9adios_mpi_init_comm, ((struct PyMPICommObject *)__pyx_t_1));
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":534
+  /* "adios_mpi.pyx":542
  *     global init_comm
  *     init_comm = comm.Clone()
  *     return adios_init_noxml(init_comm.ob_mpi)             # <<<<<<<<<<<<<<
@@ -6475,7 +6709,7 @@ static int __pyx_f_9adios_mpi_init_noxml(CYTHON_UNUSED int __pyx_skip_dispatch,
   __pyx_r = adios_init_noxml(__pyx_v_9adios_mpi_init_comm->ob_mpi);
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":531
+  /* "adios_mpi.pyx":539
  * ## ====================
  * 
  * cpdef int init_noxml(MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
@@ -6524,7 +6758,7 @@ static PyObject *__pyx_pw_9adios_mpi_33init_noxml(PyObject *__pyx_self, PyObject
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "init_noxml") < 0)) __PYX_ERR(0, 531, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "init_noxml") < 0)) __PYX_ERR(0, 539, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -6537,13 +6771,13 @@ static PyObject *__pyx_pw_9adios_mpi_33init_noxml(PyObject *__pyx_self, PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("init_noxml", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 531, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("init_noxml", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 539, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.init_noxml", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_comm), __pyx_ptype_6mpi4py_3MPI_Comm, 1, "comm", 0))) __PYX_ERR(0, 531, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_comm), __pyx_ptype_6mpi4py_3MPI_Comm, 1, "comm", 0))) __PYX_ERR(0, 539, __pyx_L1_error)
   __pyx_r = __pyx_pf_9adios_mpi_32init_noxml(__pyx_self, __pyx_v_comm);
 
   /* function exit code */
@@ -6566,7 +6800,7 @@ static PyObject *__pyx_pf_9adios_mpi_32init_noxml(CYTHON_UNUSED PyObject *__pyx_
   __pyx_t_2.__pyx_n = 1;
   __pyx_t_2.comm = __pyx_v_comm;
   __pyx_t_1 = __pyx_f_9adios_mpi_init_noxml(0, &__pyx_t_2); 
-  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 531, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 539, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
@@ -6583,7 +6817,7 @@ static PyObject *__pyx_pf_9adios_mpi_32init_noxml(CYTHON_UNUSED PyObject *__pyx_
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":536
+/* "adios_mpi.pyx":544
  *     return adios_init_noxml(init_comm.ob_mpi)
  * 
  * cpdef int allocate_buffer(int when,             # <<<<<<<<<<<<<<
@@ -6597,7 +6831,7 @@ static int __pyx_f_9adios_mpi_allocate_buffer(int __pyx_v_when, uint64_t __pyx_v
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("allocate_buffer", 0);
 
-  /* "adios_mpi.pyx":538
+  /* "adios_mpi.pyx":546
  * cpdef int allocate_buffer(int when,
  *                           uint64_t buffer_size):
  *     return adios_allocate_buffer(<ADIOS_BUFFER_ALLOC_WHEN> when,             # <<<<<<<<<<<<<<
@@ -6607,7 +6841,7 @@ static int __pyx_f_9adios_mpi_allocate_buffer(int __pyx_v_when, uint64_t __pyx_v
   __pyx_r = adios_allocate_buffer(((ADIOS_BUFFER_ALLOC_WHEN)__pyx_v_when), __pyx_v_buffer_size);
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":536
+  /* "adios_mpi.pyx":544
  *     return adios_init_noxml(init_comm.ob_mpi)
  * 
  * cpdef int allocate_buffer(int when,             # <<<<<<<<<<<<<<
@@ -6650,11 +6884,11 @@ static PyObject *__pyx_pw_9adios_mpi_35allocate_buffer(PyObject *__pyx_self, PyO
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_buffer_size)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("allocate_buffer", 1, 2, 2, 1); __PYX_ERR(0, 536, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("allocate_buffer", 1, 2, 2, 1); __PYX_ERR(0, 544, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "allocate_buffer") < 0)) __PYX_ERR(0, 536, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "allocate_buffer") < 0)) __PYX_ERR(0, 544, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -6662,12 +6896,12 @@ static PyObject *__pyx_pw_9adios_mpi_35allocate_buffer(PyObject *__pyx_self, PyO
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
     }
-    __pyx_v_when = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_when == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 536, __pyx_L3_error)
-    __pyx_v_buffer_size = __Pyx_PyInt_As_uint64_t(values[1]); if (unlikely((__pyx_v_buffer_size == (uint64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 537, __pyx_L3_error)
+    __pyx_v_when = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_when == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 544, __pyx_L3_error)
+    __pyx_v_buffer_size = __Pyx_PyInt_As_uint64_t(values[1]); if (unlikely((__pyx_v_buffer_size == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 545, __pyx_L3_error)
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("allocate_buffer", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 536, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("allocate_buffer", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 544, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.allocate_buffer", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -6686,7 +6920,7 @@ static PyObject *__pyx_pf_9adios_mpi_34allocate_buffer(CYTHON_UNUSED PyObject *_
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("allocate_buffer", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_allocate_buffer(__pyx_v_when, __pyx_v_buffer_size, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 536, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_allocate_buffer(__pyx_v_when, __pyx_v_buffer_size, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 544, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -6703,7 +6937,7 @@ static PyObject *__pyx_pf_9adios_mpi_34allocate_buffer(CYTHON_UNUSED PyObject *_
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":541
+/* "adios_mpi.pyx":549
  *                                  buffer_size)
  * 
  * cpdef int64_t declare_group(str name,             # <<<<<<<<<<<<<<
@@ -6732,7 +6966,7 @@ static int64_t __pyx_f_9adios_mpi_declare_group(PyObject *__pyx_v_name, CYTHON_U
     }
   }
 
-  /* "adios_mpi.pyx":544
+  /* "adios_mpi.pyx":552
  *                             str time_index = "",
  *                             int stats = adios_stat_default):
  *     cdef int64_t id = 0             # <<<<<<<<<<<<<<
@@ -6741,29 +6975,29 @@ static int64_t __pyx_f_9adios_mpi_declare_group(PyObject *__pyx_v_name, CYTHON_U
  */
   __pyx_v_id = 0;
 
-  /* "adios_mpi.pyx":546
+  /* "adios_mpi.pyx":554
  *     cdef int64_t id = 0
  *     adios_declare_group (&id,
  *                          s2b(name),             # <<<<<<<<<<<<<<
  *                          s2b(time_index),
  *                          <ADIOS_STATISTICS_FLAG> stats)
  */
-  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 546, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 554, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 546, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 554, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":547
+  /* "adios_mpi.pyx":555
  *     adios_declare_group (&id,
  *                          s2b(name),
  *                          s2b(time_index),             # <<<<<<<<<<<<<<
  *                          <ADIOS_STATISTICS_FLAG> stats)
  *     return id
  */
-  __pyx_t_3 = __pyx_f_9adios_mpi_s2b(__pyx_v_time_index, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 547, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_9adios_mpi_s2b(__pyx_v_time_index, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 555, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 547, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 555, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":545
+  /* "adios_mpi.pyx":553
  *                             int stats = adios_stat_default):
  *     cdef int64_t id = 0
  *     adios_declare_group (&id,             # <<<<<<<<<<<<<<
@@ -6774,7 +7008,7 @@ static int64_t __pyx_f_9adios_mpi_declare_group(PyObject *__pyx_v_name, CYTHON_U
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "adios_mpi.pyx":549
+  /* "adios_mpi.pyx":557
  *                          s2b(time_index),
  *                          <ADIOS_STATISTICS_FLAG> stats)
  *     return id             # <<<<<<<<<<<<<<
@@ -6784,7 +7018,7 @@ static int64_t __pyx_f_9adios_mpi_declare_group(PyObject *__pyx_v_name, CYTHON_U
   __pyx_r = __pyx_v_id;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":541
+  /* "adios_mpi.pyx":549
  *                                  buffer_size)
  * 
  * cpdef int64_t declare_group(str name,             # <<<<<<<<<<<<<<
@@ -6844,7 +7078,7 @@ static PyObject *__pyx_pw_9adios_mpi_37declare_group(PyObject *__pyx_self, PyObj
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "declare_group") < 0)) __PYX_ERR(0, 541, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "declare_group") < 0)) __PYX_ERR(0, 549, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -6858,21 +7092,21 @@ static PyObject *__pyx_pw_9adios_mpi_37declare_group(PyObject *__pyx_self, PyObj
     __pyx_v_name = ((PyObject*)values[0]);
     __pyx_v_time_index = ((PyObject*)values[1]);
     if (values[2]) {
-      __pyx_v_stats = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_stats == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 543, __pyx_L3_error)
+      __pyx_v_stats = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_stats == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 551, __pyx_L3_error)
     } else {
       __pyx_v_stats = __pyx_k__11;
     }
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("declare_group", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 541, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("declare_group", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 549, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.declare_group", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 541, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_time_index), (&PyString_Type), 1, "time_index", 1))) __PYX_ERR(0, 542, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 549, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_time_index), (&PyString_Type), 1, "time_index", 1))) __PYX_ERR(0, 550, __pyx_L1_error)
   __pyx_r = __pyx_pf_9adios_mpi_36declare_group(__pyx_self, __pyx_v_name, __pyx_v_time_index, __pyx_v_stats);
 
   /* function exit code */
@@ -6896,7 +7130,7 @@ static PyObject *__pyx_pf_9adios_mpi_36declare_group(CYTHON_UNUSED PyObject *__p
   __pyx_t_2.time_index = __pyx_v_time_index;
   __pyx_t_2.stats = __pyx_v_stats;
   __pyx_t_1 = __pyx_f_9adios_mpi_declare_group(__pyx_v_name, 0, &__pyx_t_2); 
-  __pyx_t_3 = __Pyx_PyInt_From_int64_t(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 541, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyInt_From_int64_t(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 549, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
@@ -6913,7 +7147,7 @@ static PyObject *__pyx_pf_9adios_mpi_36declare_group(CYTHON_UNUSED PyObject *__p
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":551
+/* "adios_mpi.pyx":559
  *     return id
  * 
  * cpdef int64_t define_var(int64_t group_id,             # <<<<<<<<<<<<<<
@@ -6951,62 +7185,62 @@ static int64_t __pyx_f_9adios_mpi_define_var(int64_t __pyx_v_group_id, PyObject
     }
   }
 
-  /* "adios_mpi.pyx":559
+  /* "adios_mpi.pyx":567
  *                      str local_offsets = ""):
  *     return adios_define_var(group_id,
  *                             s2b(name),             # <<<<<<<<<<<<<<
  *                             s2b(path),
  *                             <ADIOS_DATATYPES> atype,
  */
-  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 559, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 567, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 559, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 567, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":560
+  /* "adios_mpi.pyx":568
  *     return adios_define_var(group_id,
  *                             s2b(name),
  *                             s2b(path),             # <<<<<<<<<<<<<<
  *                             <ADIOS_DATATYPES> atype,
  *                             s2b(dimensions),
  */
-  __pyx_t_3 = __pyx_f_9adios_mpi_s2b(__pyx_v_path, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 560, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_9adios_mpi_s2b(__pyx_v_path, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 568, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 560, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 568, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":562
+  /* "adios_mpi.pyx":570
  *                             s2b(path),
  *                             <ADIOS_DATATYPES> atype,
  *                             s2b(dimensions),             # <<<<<<<<<<<<<<
  *                             s2b(global_dimensions),
  *                             s2b(local_offsets))
  */
-  __pyx_t_5 = __pyx_f_9adios_mpi_s2b(__pyx_v_dimensions, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 562, __pyx_L1_error)
+  __pyx_t_5 = __pyx_f_9adios_mpi_s2b(__pyx_v_dimensions, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 570, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_t_5); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(0, 562, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_t_5); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(0, 570, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":563
+  /* "adios_mpi.pyx":571
  *                             <ADIOS_DATATYPES> atype,
  *                             s2b(dimensions),
  *                             s2b(global_dimensions),             # <<<<<<<<<<<<<<
  *                             s2b(local_offsets))
  * 
  */
-  __pyx_t_7 = __pyx_f_9adios_mpi_s2b(__pyx_v_global_dimensions, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 563, __pyx_L1_error)
+  __pyx_t_7 = __pyx_f_9adios_mpi_s2b(__pyx_v_global_dimensions, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 571, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_8 = __Pyx_PyObject_AsString(__pyx_t_7); if (unlikely((!__pyx_t_8) && PyErr_Occurred())) __PYX_ERR(0, 563, __pyx_L1_error)
+  __pyx_t_8 = __Pyx_PyObject_AsString(__pyx_t_7); if (unlikely((!__pyx_t_8) && PyErr_Occurred())) __PYX_ERR(0, 571, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":564
+  /* "adios_mpi.pyx":572
  *                             s2b(dimensions),
  *                             s2b(global_dimensions),
  *                             s2b(local_offsets))             # <<<<<<<<<<<<<<
  * 
  * cpdef int define_schema_version (int64_t group_id, str schema_version):
  */
-  __pyx_t_9 = __pyx_f_9adios_mpi_s2b(__pyx_v_local_offsets, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 564, __pyx_L1_error)
+  __pyx_t_9 = __pyx_f_9adios_mpi_s2b(__pyx_v_local_offsets, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 572, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
-  __pyx_t_10 = __Pyx_PyObject_AsString(__pyx_t_9); if (unlikely((!__pyx_t_10) && PyErr_Occurred())) __PYX_ERR(0, 564, __pyx_L1_error)
+  __pyx_t_10 = __Pyx_PyObject_AsString(__pyx_t_9); if (unlikely((!__pyx_t_10) && PyErr_Occurred())) __PYX_ERR(0, 572, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":558
+  /* "adios_mpi.pyx":566
  *                      str global_dimensions = "",
  *                      str local_offsets = ""):
  *     return adios_define_var(group_id,             # <<<<<<<<<<<<<<
@@ -7021,7 +7255,7 @@ static int64_t __pyx_f_9adios_mpi_define_var(int64_t __pyx_v_group_id, PyObject
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":551
+  /* "adios_mpi.pyx":559
  *     return id
  * 
  * cpdef int64_t define_var(int64_t group_id,             # <<<<<<<<<<<<<<
@@ -7085,17 +7319,17 @@ static PyObject *__pyx_pw_9adios_mpi_39define_var(PyObject *__pyx_self, PyObject
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_var", 0, 4, 7, 1); __PYX_ERR(0, 551, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_var", 0, 4, 7, 1); __PYX_ERR(0, 559, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_path)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_var", 0, 4, 7, 2); __PYX_ERR(0, 551, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_var", 0, 4, 7, 2); __PYX_ERR(0, 559, __pyx_L3_error)
         }
         case  3:
         if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_atype)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_var", 0, 4, 7, 3); __PYX_ERR(0, 551, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_var", 0, 4, 7, 3); __PYX_ERR(0, 559, __pyx_L3_error)
         }
         case  4:
         if (kw_args > 0) {
@@ -7114,7 +7348,7 @@ static PyObject *__pyx_pw_9adios_mpi_39define_var(PyObject *__pyx_self, PyObject
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_var") < 0)) __PYX_ERR(0, 551, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_var") < 0)) __PYX_ERR(0, 559, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -7129,27 +7363,27 @@ static PyObject *__pyx_pw_9adios_mpi_39define_var(PyObject *__pyx_self, PyObject
         default: goto __pyx_L5_argtuple_error;
       }
     }
-    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_group_id == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 551, __pyx_L3_error)
+    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_group_id == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 559, __pyx_L3_error)
     __pyx_v_name = ((PyObject*)values[1]);
     __pyx_v_path = ((PyObject*)values[2]);
-    __pyx_v_atype = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_atype == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 554, __pyx_L3_error)
+    __pyx_v_atype = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_atype == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 562, __pyx_L3_error)
     __pyx_v_dimensions = ((PyObject*)values[4]);
     __pyx_v_global_dimensions = ((PyObject*)values[5]);
     __pyx_v_local_offsets = ((PyObject*)values[6]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("define_var", 0, 4, 7, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 551, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("define_var", 0, 4, 7, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 559, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.define_var", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 552, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_path), (&PyString_Type), 1, "path", 1))) __PYX_ERR(0, 553, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dimensions), (&PyString_Type), 1, "dimensions", 1))) __PYX_ERR(0, 555, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_global_dimensions), (&PyString_Type), 1, "global_dimensions", 1))) __PYX_ERR(0, 556, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_local_offsets), (&PyString_Type), 1, "local_offsets", 1))) __PYX_ERR(0, 557, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 560, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_path), (&PyString_Type), 1, "path", 1))) __PYX_ERR(0, 561, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dimensions), (&PyString_Type), 1, "dimensions", 1))) __PYX_ERR(0, 563, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_global_dimensions), (&PyString_Type), 1, "global_dimensions", 1))) __PYX_ERR(0, 564, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_local_offsets), (&PyString_Type), 1, "local_offsets", 1))) __PYX_ERR(0, 565, __pyx_L1_error)
   __pyx_r = __pyx_pf_9adios_mpi_38define_var(__pyx_self, __pyx_v_group_id, __pyx_v_name, __pyx_v_path, __pyx_v_atype, __pyx_v_dimensions, __pyx_v_global_dimensions, __pyx_v_local_offsets);
 
   /* function exit code */
@@ -7174,7 +7408,7 @@ static PyObject *__pyx_pf_9adios_mpi_38define_var(CYTHON_UNUSED PyObject *__pyx_
   __pyx_t_2.global_dimensions = __pyx_v_global_dimensions;
   __pyx_t_2.local_offsets = __pyx_v_local_offsets;
   __pyx_t_1 = __pyx_f_9adios_mpi_define_var(__pyx_v_group_id, __pyx_v_name, __pyx_v_path, __pyx_v_atype, 0, &__pyx_t_2); 
-  __pyx_t_3 = __Pyx_PyInt_From_int64_t(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 551, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyInt_From_int64_t(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 559, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
@@ -7191,7 +7425,7 @@ static PyObject *__pyx_pf_9adios_mpi_38define_var(CYTHON_UNUSED PyObject *__pyx_
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":566
+/* "adios_mpi.pyx":574
  *                             s2b(local_offsets))
  * 
  * cpdef int define_schema_version (int64_t group_id, str schema_version):             # <<<<<<<<<<<<<<
@@ -7207,21 +7441,21 @@ static int __pyx_f_9adios_mpi_define_schema_version(int64_t __pyx_v_group_id, Py
   char *__pyx_t_2;
   __Pyx_RefNannySetupContext("define_schema_version", 0);
 
-  /* "adios_mpi.pyx":567
+  /* "adios_mpi.pyx":575
  * 
  * cpdef int define_schema_version (int64_t group_id, str schema_version):
  *     return adios_define_schema_version (group_id, s2b(schema_version))             # <<<<<<<<<<<<<<
  * 
  * cpdef int define_var_mesh (int64_t group_id, str varname, str meshname):
  */
-  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_schema_version, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 567, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_schema_version, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 575, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 567, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 575, __pyx_L1_error)
   __pyx_r = adios_define_schema_version(__pyx_v_group_id, __pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":566
+  /* "adios_mpi.pyx":574
  *                             s2b(local_offsets))
  * 
  * cpdef int define_schema_version (int64_t group_id, str schema_version):             # <<<<<<<<<<<<<<
@@ -7268,11 +7502,11 @@ static PyObject *__pyx_pw_9adios_mpi_41define_schema_version(PyObject *__pyx_sel
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_schema_version)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_schema_version", 1, 2, 2, 1); __PYX_ERR(0, 566, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_schema_version", 1, 2, 2, 1); __PYX_ERR(0, 574, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_schema_version") < 0)) __PYX_ERR(0, 566, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_schema_version") < 0)) __PYX_ERR(0, 574, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -7280,18 +7514,18 @@ static PyObject *__pyx_pw_9adios_mpi_41define_schema_version(PyObject *__pyx_sel
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
     }
-    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_group_id == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 566, __pyx_L3_error)
+    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_group_id == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 574, __pyx_L3_error)
     __pyx_v_schema_version = ((PyObject*)values[1]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("define_schema_version", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 566, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("define_schema_version", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 574, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.define_schema_version", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_schema_version), (&PyString_Type), 1, "schema_version", 1))) __PYX_ERR(0, 566, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_schema_version), (&PyString_Type), 1, "schema_version", 1))) __PYX_ERR(0, 574, __pyx_L1_error)
   __pyx_r = __pyx_pf_9adios_mpi_40define_schema_version(__pyx_self, __pyx_v_group_id, __pyx_v_schema_version);
 
   /* function exit code */
@@ -7309,7 +7543,7 @@ static PyObject *__pyx_pf_9adios_mpi_40define_schema_version(CYTHON_UNUSED PyObj
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("define_schema_version", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_define_schema_version(__pyx_v_group_id, __pyx_v_schema_version, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 566, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_define_schema_version(__pyx_v_group_id, __pyx_v_schema_version, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 574, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -7326,7 +7560,7 @@ static PyObject *__pyx_pf_9adios_mpi_40define_schema_version(CYTHON_UNUSED PyObj
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":569
+/* "adios_mpi.pyx":577
  *     return adios_define_schema_version (group_id, s2b(schema_version))
  * 
  * cpdef int define_var_mesh (int64_t group_id, str varname, str meshname):             # <<<<<<<<<<<<<<
@@ -7344,25 +7578,25 @@ static int __pyx_f_9adios_mpi_define_var_mesh(int64_t __pyx_v_group_id, PyObject
   char const *__pyx_t_4;
   __Pyx_RefNannySetupContext("define_var_mesh", 0);
 
-  /* "adios_mpi.pyx":570
+  /* "adios_mpi.pyx":578
  * 
  * cpdef int define_var_mesh (int64_t group_id, str varname, str meshname):
  *     return adios_define_var_mesh (group_id, s2b(varname), s2b(meshname))             # <<<<<<<<<<<<<<
  * 
  * cpdef int define_var_centering (int64_t group_id, str varname, str centering):
  */
-  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_varname, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 570, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_varname, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 578, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 570, __pyx_L1_error)
-  __pyx_t_3 = __pyx_f_9adios_mpi_s2b(__pyx_v_meshname, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 570, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 578, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_9adios_mpi_s2b(__pyx_v_meshname, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 578, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 570, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 578, __pyx_L1_error)
   __pyx_r = adios_define_var_mesh(__pyx_v_group_id, __pyx_t_2, __pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":569
+  /* "adios_mpi.pyx":577
  *     return adios_define_schema_version (group_id, s2b(schema_version))
  * 
  * cpdef int define_var_mesh (int64_t group_id, str varname, str meshname):             # <<<<<<<<<<<<<<
@@ -7412,16 +7646,16 @@ static PyObject *__pyx_pw_9adios_mpi_43define_var_mesh(PyObject *__pyx_self, PyO
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_varname)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_var_mesh", 1, 3, 3, 1); __PYX_ERR(0, 569, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_var_mesh", 1, 3, 3, 1); __PYX_ERR(0, 577, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_meshname)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_var_mesh", 1, 3, 3, 2); __PYX_ERR(0, 569, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_var_mesh", 1, 3, 3, 2); __PYX_ERR(0, 577, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_var_mesh") < 0)) __PYX_ERR(0, 569, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_var_mesh") < 0)) __PYX_ERR(0, 577, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -7430,20 +7664,20 @@ static PyObject *__pyx_pw_9adios_mpi_43define_var_mesh(PyObject *__pyx_self, PyO
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
     }
-    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_group_id == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 569, __pyx_L3_error)
+    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_group_id == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 577, __pyx_L3_error)
     __pyx_v_varname = ((PyObject*)values[1]);
     __pyx_v_meshname = ((PyObject*)values[2]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("define_var_mesh", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 569, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("define_var_mesh", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 577, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.define_var_mesh", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_varname), (&PyString_Type), 1, "varname", 1))) __PYX_ERR(0, 569, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_meshname), (&PyString_Type), 1, "meshname", 1))) __PYX_ERR(0, 569, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_varname), (&PyString_Type), 1, "varname", 1))) __PYX_ERR(0, 577, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_meshname), (&PyString_Type), 1, "meshname", 1))) __PYX_ERR(0, 577, __pyx_L1_error)
   __pyx_r = __pyx_pf_9adios_mpi_42define_var_mesh(__pyx_self, __pyx_v_group_id, __pyx_v_varname, __pyx_v_meshname);
 
   /* function exit code */
@@ -7461,7 +7695,7 @@ static PyObject *__pyx_pf_9adios_mpi_42define_var_mesh(CYTHON_UNUSED PyObject *_
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("define_var_mesh", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_define_var_mesh(__pyx_v_group_id, __pyx_v_varname, __pyx_v_meshname, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 569, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_define_var_mesh(__pyx_v_group_id, __pyx_v_varname, __pyx_v_meshname, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 577, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -7478,7 +7712,7 @@ static PyObject *__pyx_pf_9adios_mpi_42define_var_mesh(CYTHON_UNUSED PyObject *_
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":572
+/* "adios_mpi.pyx":580
  *     return adios_define_var_mesh (group_id, s2b(varname), s2b(meshname))
  * 
  * cpdef int define_var_centering (int64_t group_id, str varname, str centering):             # <<<<<<<<<<<<<<
@@ -7496,25 +7730,25 @@ static int __pyx_f_9adios_mpi_define_var_centering(int64_t __pyx_v_group_id, PyO
   char const *__pyx_t_4;
   __Pyx_RefNannySetupContext("define_var_centering", 0);
 
-  /* "adios_mpi.pyx":573
+  /* "adios_mpi.pyx":581
  * 
  * cpdef int define_var_centering (int64_t group_id, str varname, str centering):
  *     return adios_define_var_centering (group_id, s2b(varname), s2b(centering))             # <<<<<<<<<<<<<<
  * 
  * cpdef int define_var_timesteps (str timesteps, int64_t group_id, str name):
  */
-  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_varname, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 573, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_varname, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 581, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 573, __pyx_L1_error)
-  __pyx_t_3 = __pyx_f_9adios_mpi_s2b(__pyx_v_centering, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 573, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 581, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_9adios_mpi_s2b(__pyx_v_centering, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 581, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 573, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 581, __pyx_L1_error)
   __pyx_r = adios_define_var_centering(__pyx_v_group_id, __pyx_t_2, __pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":572
+  /* "adios_mpi.pyx":580
  *     return adios_define_var_mesh (group_id, s2b(varname), s2b(meshname))
  * 
  * cpdef int define_var_centering (int64_t group_id, str varname, str centering):             # <<<<<<<<<<<<<<
@@ -7564,16 +7798,16 @@ static PyObject *__pyx_pw_9adios_mpi_45define_var_centering(PyObject *__pyx_self
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_varname)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_var_centering", 1, 3, 3, 1); __PYX_ERR(0, 572, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_var_centering", 1, 3, 3, 1); __PYX_ERR(0, 580, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_centering)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_var_centering", 1, 3, 3, 2); __PYX_ERR(0, 572, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_var_centering", 1, 3, 3, 2); __PYX_ERR(0, 580, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_var_centering") < 0)) __PYX_ERR(0, 572, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_var_centering") < 0)) __PYX_ERR(0, 580, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -7582,20 +7816,20 @@ static PyObject *__pyx_pw_9adios_mpi_45define_var_centering(PyObject *__pyx_self
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
     }
-    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_group_id == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 572, __pyx_L3_error)
+    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_group_id == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 580, __pyx_L3_error)
     __pyx_v_varname = ((PyObject*)values[1]);
     __pyx_v_centering = ((PyObject*)values[2]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("define_var_centering", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 572, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("define_var_centering", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 580, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.define_var_centering", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_varname), (&PyString_Type), 1, "varname", 1))) __PYX_ERR(0, 572, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_centering), (&PyString_Type), 1, "centering", 1))) __PYX_ERR(0, 572, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_varname), (&PyString_Type), 1, "varname", 1))) __PYX_ERR(0, 580, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_centering), (&PyString_Type), 1, "centering", 1))) __PYX_ERR(0, 580, __pyx_L1_error)
   __pyx_r = __pyx_pf_9adios_mpi_44define_var_centering(__pyx_self, __pyx_v_group_id, __pyx_v_varname, __pyx_v_centering);
 
   /* function exit code */
@@ -7613,7 +7847,7 @@ static PyObject *__pyx_pf_9adios_mpi_44define_var_centering(CYTHON_UNUSED PyObje
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("define_var_centering", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_define_var_centering(__pyx_v_group_id, __pyx_v_varname, __pyx_v_centering, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 572, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_define_var_centering(__pyx_v_group_id, __pyx_v_varname, __pyx_v_centering, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 580, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -7630,7 +7864,7 @@ static PyObject *__pyx_pf_9adios_mpi_44define_var_centering(CYTHON_UNUSED PyObje
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":575
+/* "adios_mpi.pyx":583
  *     return adios_define_var_centering (group_id, s2b(varname), s2b(centering))
  * 
  * cpdef int define_var_timesteps (str timesteps, int64_t group_id, str name):             # <<<<<<<<<<<<<<
@@ -7648,25 +7882,25 @@ static int __pyx_f_9adios_mpi_define_var_timesteps(PyObject *__pyx_v_timesteps,
   char const *__pyx_t_4;
   __Pyx_RefNannySetupContext("define_var_timesteps", 0);
 
-  /* "adios_mpi.pyx":576
+  /* "adios_mpi.pyx":584
  * 
  * cpdef int define_var_timesteps (str timesteps, int64_t group_id, str name):
  *     return adios_define_var_timesteps (s2b(timesteps), group_id, s2b(name))             # <<<<<<<<<<<<<<
  * 
  * cpdef int define_var_timescale (str timescale , int64_t group_id ,str name):
  */
-  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_timesteps, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 576, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_timesteps, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 584, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 576, __pyx_L1_error)
-  __pyx_t_3 = __pyx_f_9adios_mpi_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 576, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 584, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_9adios_mpi_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 584, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 576, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 584, __pyx_L1_error)
   __pyx_r = adios_define_var_timesteps(__pyx_t_2, __pyx_v_group_id, __pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":575
+  /* "adios_mpi.pyx":583
  *     return adios_define_var_centering (group_id, s2b(varname), s2b(centering))
  * 
  * cpdef int define_var_timesteps (str timesteps, int64_t group_id, str name):             # <<<<<<<<<<<<<<
@@ -7716,16 +7950,16 @@ static PyObject *__pyx_pw_9adios_mpi_47define_var_timesteps(PyObject *__pyx_self
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_group_id)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_var_timesteps", 1, 3, 3, 1); __PYX_ERR(0, 575, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_var_timesteps", 1, 3, 3, 1); __PYX_ERR(0, 583, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_var_timesteps", 1, 3, 3, 2); __PYX_ERR(0, 575, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_var_timesteps", 1, 3, 3, 2); __PYX_ERR(0, 583, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_var_timesteps") < 0)) __PYX_ERR(0, 575, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_var_timesteps") < 0)) __PYX_ERR(0, 583, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -7735,19 +7969,19 @@ static PyObject *__pyx_pw_9adios_mpi_47define_var_timesteps(PyObject *__pyx_self
       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
     }
     __pyx_v_timesteps = ((PyObject*)values[0]);
-    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[1]); if (unlikely((__pyx_v_group_id == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 575, __pyx_L3_error)
+    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[1]); if (unlikely((__pyx_v_group_id == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 583, __pyx_L3_error)
     __pyx_v_name = ((PyObject*)values[2]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("define_var_timesteps", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 575, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("define_var_timesteps", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 583, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.define_var_timesteps", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_timesteps), (&PyString_Type), 1, "timesteps", 1))) __PYX_ERR(0, 575, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 575, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_timesteps), (&PyString_Type), 1, "timesteps", 1))) __PYX_ERR(0, 583, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 583, __pyx_L1_error)
   __pyx_r = __pyx_pf_9adios_mpi_46define_var_timesteps(__pyx_self, __pyx_v_timesteps, __pyx_v_group_id, __pyx_v_name);
 
   /* function exit code */
@@ -7765,7 +7999,7 @@ static PyObject *__pyx_pf_9adios_mpi_46define_var_timesteps(CYTHON_UNUSED PyObje
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("define_var_timesteps", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_define_var_timesteps(__pyx_v_timesteps, __pyx_v_group_id, __pyx_v_name, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 575, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_define_var_timesteps(__pyx_v_timesteps, __pyx_v_group_id, __pyx_v_name, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 583, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -7782,7 +8016,7 @@ static PyObject *__pyx_pf_9adios_mpi_46define_var_timesteps(CYTHON_UNUSED PyObje
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":578
+/* "adios_mpi.pyx":586
  *     return adios_define_var_timesteps (s2b(timesteps), group_id, s2b(name))
  * 
  * cpdef int define_var_timescale (str timescale , int64_t group_id ,str name):             # <<<<<<<<<<<<<<
@@ -7800,25 +8034,25 @@ static int __pyx_f_9adios_mpi_define_var_timescale(PyObject *__pyx_v_timescale,
   char const *__pyx_t_4;
   __Pyx_RefNannySetupContext("define_var_timescale", 0);
 
-  /* "adios_mpi.pyx":579
+  /* "adios_mpi.pyx":587
  * 
  * cpdef int define_var_timescale (str timescale , int64_t group_id ,str name):
  *     return adios_define_var_timescale (s2b(timescale) , group_id ,s2b(name))             # <<<<<<<<<<<<<<
  * 
  * cpdef int define_var_timeseriesformat (str timeseries , int64_t group_id ,str name):
  */
-  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_timescale, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 579, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_timescale, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 587, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 579, __pyx_L1_error)
-  __pyx_t_3 = __pyx_f_9adios_mpi_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 579, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 587, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_9adios_mpi_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 587, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 579, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 587, __pyx_L1_error)
   __pyx_r = adios_define_var_timescale(__pyx_t_2, __pyx_v_group_id, __pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":578
+  /* "adios_mpi.pyx":586
  *     return adios_define_var_timesteps (s2b(timesteps), group_id, s2b(name))
  * 
  * cpdef int define_var_timescale (str timescale , int64_t group_id ,str name):             # <<<<<<<<<<<<<<
@@ -7868,16 +8102,16 @@ static PyObject *__pyx_pw_9adios_mpi_49define_var_timescale(PyObject *__pyx_self
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_group_id)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_var_timescale", 1, 3, 3, 1); __PYX_ERR(0, 578, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_var_timescale", 1, 3, 3, 1); __PYX_ERR(0, 586, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_var_timescale", 1, 3, 3, 2); __PYX_ERR(0, 578, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_var_timescale", 1, 3, 3, 2); __PYX_ERR(0, 586, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_var_timescale") < 0)) __PYX_ERR(0, 578, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_var_timescale") < 0)) __PYX_ERR(0, 586, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -7887,19 +8121,19 @@ static PyObject *__pyx_pw_9adios_mpi_49define_var_timescale(PyObject *__pyx_self
       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
     }
     __pyx_v_timescale = ((PyObject*)values[0]);
-    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[1]); if (unlikely((__pyx_v_group_id == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 578, __pyx_L3_error)
+    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[1]); if (unlikely((__pyx_v_group_id == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 586, __pyx_L3_error)
     __pyx_v_name = ((PyObject*)values[2]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("define_var_timescale", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 578, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("define_var_timescale", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 586, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.define_var_timescale", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_timescale), (&PyString_Type), 1, "timescale", 1))) __PYX_ERR(0, 578, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 578, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_timescale), (&PyString_Type), 1, "timescale", 1))) __PYX_ERR(0, 586, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 586, __pyx_L1_error)
   __pyx_r = __pyx_pf_9adios_mpi_48define_var_timescale(__pyx_self, __pyx_v_timescale, __pyx_v_group_id, __pyx_v_name);
 
   /* function exit code */
@@ -7917,7 +8151,7 @@ static PyObject *__pyx_pf_9adios_mpi_48define_var_timescale(CYTHON_UNUSED PyObje
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("define_var_timescale", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_define_var_timescale(__pyx_v_timescale, __pyx_v_group_id, __pyx_v_name, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 578, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_define_var_timescale(__pyx_v_timescale, __pyx_v_group_id, __pyx_v_name, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 586, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -7934,7 +8168,7 @@ static PyObject *__pyx_pf_9adios_mpi_48define_var_timescale(CYTHON_UNUSED PyObje
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":581
+/* "adios_mpi.pyx":589
  *     return adios_define_var_timescale (s2b(timescale) , group_id ,s2b(name))
  * 
  * cpdef int define_var_timeseriesformat (str timeseries , int64_t group_id ,str name):             # <<<<<<<<<<<<<<
@@ -7952,25 +8186,25 @@ static int __pyx_f_9adios_mpi_define_var_timeseriesformat(PyObject *__pyx_v_time
   char const *__pyx_t_4;
   __Pyx_RefNannySetupContext("define_var_timeseriesformat", 0);
 
-  /* "adios_mpi.pyx":582
+  /* "adios_mpi.pyx":590
  * 
  * cpdef int define_var_timeseriesformat (str timeseries , int64_t group_id ,str name):
  *     return adios_define_var_timeseriesformat (s2b(timeseries) , group_id ,s2b(name))             # <<<<<<<<<<<<<<
  * 
  * cpdef int define_var_hyperslab (str hyperslab , int64_t group_id ,str name):
  */
-  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_timeseries, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 582, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_timeseries, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 590, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 582, __pyx_L1_error)
-  __pyx_t_3 = __pyx_f_9adios_mpi_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 582, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 590, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_9adios_mpi_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 590, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 582, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 590, __pyx_L1_error)
   __pyx_r = adios_define_var_timeseriesformat(__pyx_t_2, __pyx_v_group_id, __pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":581
+  /* "adios_mpi.pyx":589
  *     return adios_define_var_timescale (s2b(timescale) , group_id ,s2b(name))
  * 
  * cpdef int define_var_timeseriesformat (str timeseries , int64_t group_id ,str name):             # <<<<<<<<<<<<<<
@@ -8020,16 +8254,16 @@ static PyObject *__pyx_pw_9adios_mpi_51define_var_timeseriesformat(PyObject *__p
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_group_id)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_var_timeseriesformat", 1, 3, 3, 1); __PYX_ERR(0, 581, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_var_timeseriesformat", 1, 3, 3, 1); __PYX_ERR(0, 589, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_var_timeseriesformat", 1, 3, 3, 2); __PYX_ERR(0, 581, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_var_timeseriesformat", 1, 3, 3, 2); __PYX_ERR(0, 589, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_var_timeseriesformat") < 0)) __PYX_ERR(0, 581, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_var_timeseriesformat") < 0)) __PYX_ERR(0, 589, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -8039,19 +8273,19 @@ static PyObject *__pyx_pw_9adios_mpi_51define_var_timeseriesformat(PyObject *__p
       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
     }
     __pyx_v_timeseries = ((PyObject*)values[0]);
-    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[1]); if (unlikely((__pyx_v_group_id == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 581, __pyx_L3_error)
+    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[1]); if (unlikely((__pyx_v_group_id == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 589, __pyx_L3_error)
     __pyx_v_name = ((PyObject*)values[2]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("define_var_timeseriesformat", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 581, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("define_var_timeseriesformat", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 589, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.define_var_timeseriesformat", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_timeseries), (&PyString_Type), 1, "timeseries", 1))) __PYX_ERR(0, 581, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 581, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_timeseries), (&PyString_Type), 1, "timeseries", 1))) __PYX_ERR(0, 589, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 589, __pyx_L1_error)
   __pyx_r = __pyx_pf_9adios_mpi_50define_var_timeseriesformat(__pyx_self, __pyx_v_timeseries, __pyx_v_group_id, __pyx_v_name);
 
   /* function exit code */
@@ -8069,7 +8303,7 @@ static PyObject *__pyx_pf_9adios_mpi_50define_var_timeseriesformat(CYTHON_UNUSED
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("define_var_timeseriesformat", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_define_var_timeseriesformat(__pyx_v_timeseries, __pyx_v_group_id, __pyx_v_name, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 581, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_define_var_timeseriesformat(__pyx_v_timeseries, __pyx_v_group_id, __pyx_v_name, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 589, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -8086,7 +8320,7 @@ static PyObject *__pyx_pf_9adios_mpi_50define_var_timeseriesformat(CYTHON_UNUSED
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":584
+/* "adios_mpi.pyx":592
  *     return adios_define_var_timeseriesformat (s2b(timeseries) , group_id ,s2b(name))
  * 
  * cpdef int define_var_hyperslab (str hyperslab , int64_t group_id ,str name):             # <<<<<<<<<<<<<<
@@ -8104,25 +8338,25 @@ static int __pyx_f_9adios_mpi_define_var_hyperslab(PyObject *__pyx_v_hyperslab,
   char const *__pyx_t_4;
   __Pyx_RefNannySetupContext("define_var_hyperslab", 0);
 
-  /* "adios_mpi.pyx":585
+  /* "adios_mpi.pyx":593
  * 
  * cpdef int define_var_hyperslab (str hyperslab , int64_t group_id ,str name):
  *     return adios_define_var_hyperslab (s2b(hyperslab) , group_id ,s2b(name))             # <<<<<<<<<<<<<<
  * 
  * cpdef int define_mesh_timevarying (str timevarying , int64_t group_id ,str name):
  */
-  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_hyperslab, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 585, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_hyperslab, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 593, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 585, __pyx_L1_error)
-  __pyx_t_3 = __pyx_f_9adios_mpi_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 585, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 593, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_9adios_mpi_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 593, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 585, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 593, __pyx_L1_error)
   __pyx_r = adios_define_var_hyperslab(__pyx_t_2, __pyx_v_group_id, __pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":584
+  /* "adios_mpi.pyx":592
  *     return adios_define_var_timeseriesformat (s2b(timeseries) , group_id ,s2b(name))
  * 
  * cpdef int define_var_hyperslab (str hyperslab , int64_t group_id ,str name):             # <<<<<<<<<<<<<<
@@ -8172,16 +8406,16 @@ static PyObject *__pyx_pw_9adios_mpi_53define_var_hyperslab(PyObject *__pyx_self
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_group_id)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_var_hyperslab", 1, 3, 3, 1); __PYX_ERR(0, 584, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_var_hyperslab", 1, 3, 3, 1); __PYX_ERR(0, 592, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_var_hyperslab", 1, 3, 3, 2); __PYX_ERR(0, 584, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_var_hyperslab", 1, 3, 3, 2); __PYX_ERR(0, 592, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_var_hyperslab") < 0)) __PYX_ERR(0, 584, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_var_hyperslab") < 0)) __PYX_ERR(0, 592, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -8191,19 +8425,19 @@ static PyObject *__pyx_pw_9adios_mpi_53define_var_hyperslab(PyObject *__pyx_self
       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
     }
     __pyx_v_hyperslab = ((PyObject*)values[0]);
-    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[1]); if (unlikely((__pyx_v_group_id == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 584, __pyx_L3_error)
+    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[1]); if (unlikely((__pyx_v_group_id == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 592, __pyx_L3_error)
     __pyx_v_name = ((PyObject*)values[2]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("define_var_hyperslab", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 584, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("define_var_hyperslab", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 592, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.define_var_hyperslab", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_hyperslab), (&PyString_Type), 1, "hyperslab", 1))) __PYX_ERR(0, 584, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 584, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_hyperslab), (&PyString_Type), 1, "hyperslab", 1))) __PYX_ERR(0, 592, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 592, __pyx_L1_error)
   __pyx_r = __pyx_pf_9adios_mpi_52define_var_hyperslab(__pyx_self, __pyx_v_hyperslab, __pyx_v_group_id, __pyx_v_name);
 
   /* function exit code */
@@ -8221,7 +8455,7 @@ static PyObject *__pyx_pf_9adios_mpi_52define_var_hyperslab(CYTHON_UNUSED PyObje
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("define_var_hyperslab", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_define_var_hyperslab(__pyx_v_hyperslab, __pyx_v_group_id, __pyx_v_name, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 584, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_define_var_hyperslab(__pyx_v_hyperslab, __pyx_v_group_id, __pyx_v_name, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 592, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -8238,7 +8472,7 @@ static PyObject *__pyx_pf_9adios_mpi_52define_var_hyperslab(CYTHON_UNUSED PyObje
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":587
+/* "adios_mpi.pyx":595
  *     return adios_define_var_hyperslab (s2b(hyperslab) , group_id ,s2b(name))
  * 
  * cpdef int define_mesh_timevarying (str timevarying , int64_t group_id ,str name):             # <<<<<<<<<<<<<<
@@ -8256,25 +8490,25 @@ static int __pyx_f_9adios_mpi_define_mesh_timevarying(PyObject *__pyx_v_timevary
   char const *__pyx_t_4;
   __Pyx_RefNannySetupContext("define_mesh_timevarying", 0);
 
-  /* "adios_mpi.pyx":588
+  /* "adios_mpi.pyx":596
  * 
  * cpdef int define_mesh_timevarying (str timevarying , int64_t group_id ,str name):
  *     return adios_define_mesh_timevarying (s2b(timevarying) , group_id ,s2b(name))             # <<<<<<<<<<<<<<
  * 
  * cpdef int define_mesh_timesteps (str timesteps , int64_t group_id ,str name):
  */
-  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_timevarying, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 588, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_timevarying, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 596, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 588, __pyx_L1_error)
-  __pyx_t_3 = __pyx_f_9adios_mpi_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 588, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 596, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_9adios_mpi_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 596, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 588, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 596, __pyx_L1_error)
   __pyx_r = adios_define_mesh_timevarying(__pyx_t_2, __pyx_v_group_id, __pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":587
+  /* "adios_mpi.pyx":595
  *     return adios_define_var_hyperslab (s2b(hyperslab) , group_id ,s2b(name))
  * 
  * cpdef int define_mesh_timevarying (str timevarying , int64_t group_id ,str name):             # <<<<<<<<<<<<<<
@@ -8324,16 +8558,16 @@ static PyObject *__pyx_pw_9adios_mpi_55define_mesh_timevarying(PyObject *__pyx_s
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_group_id)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_timevarying", 1, 3, 3, 1); __PYX_ERR(0, 587, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_timevarying", 1, 3, 3, 1); __PYX_ERR(0, 595, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_timevarying", 1, 3, 3, 2); __PYX_ERR(0, 587, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_timevarying", 1, 3, 3, 2); __PYX_ERR(0, 595, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_mesh_timevarying") < 0)) __PYX_ERR(0, 587, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_mesh_timevarying") < 0)) __PYX_ERR(0, 595, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -8343,19 +8577,19 @@ static PyObject *__pyx_pw_9adios_mpi_55define_mesh_timevarying(PyObject *__pyx_s
       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
     }
     __pyx_v_timevarying = ((PyObject*)values[0]);
-    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[1]); if (unlikely((__pyx_v_group_id == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 587, __pyx_L3_error)
+    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[1]); if (unlikely((__pyx_v_group_id == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 595, __pyx_L3_error)
     __pyx_v_name = ((PyObject*)values[2]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("define_mesh_timevarying", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 587, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("define_mesh_timevarying", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 595, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.define_mesh_timevarying", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_timevarying), (&PyString_Type), 1, "timevarying", 1))) __PYX_ERR(0, 587, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 587, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_timevarying), (&PyString_Type), 1, "timevarying", 1))) __PYX_ERR(0, 595, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 595, __pyx_L1_error)
   __pyx_r = __pyx_pf_9adios_mpi_54define_mesh_timevarying(__pyx_self, __pyx_v_timevarying, __pyx_v_group_id, __pyx_v_name);
 
   /* function exit code */
@@ -8373,7 +8607,7 @@ static PyObject *__pyx_pf_9adios_mpi_54define_mesh_timevarying(CYTHON_UNUSED PyO
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("define_mesh_timevarying", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_define_mesh_timevarying(__pyx_v_timevarying, __pyx_v_group_id, __pyx_v_name, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 587, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_define_mesh_timevarying(__pyx_v_timevarying, __pyx_v_group_id, __pyx_v_name, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 595, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -8390,7 +8624,7 @@ static PyObject *__pyx_pf_9adios_mpi_54define_mesh_timevarying(CYTHON_UNUSED PyO
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":590
+/* "adios_mpi.pyx":598
  *     return adios_define_mesh_timevarying (s2b(timevarying) , group_id ,s2b(name))
  * 
  * cpdef int define_mesh_timesteps (str timesteps , int64_t group_id ,str name):             # <<<<<<<<<<<<<<
@@ -8408,25 +8642,25 @@ static int __pyx_f_9adios_mpi_define_mesh_timesteps(PyObject *__pyx_v_timesteps,
   char const *__pyx_t_4;
   __Pyx_RefNannySetupContext("define_mesh_timesteps", 0);
 
-  /* "adios_mpi.pyx":591
+  /* "adios_mpi.pyx":599
  * 
  * cpdef int define_mesh_timesteps (str timesteps , int64_t group_id ,str name):
  *     return adios_define_mesh_timesteps (s2b(timesteps) , group_id ,s2b(name))             # <<<<<<<<<<<<<<
  * 
  * cpdef int define_mesh_timescale (str timescale , int64_t group_id ,str name):
  */
-  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_timesteps, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 591, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_timesteps, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 599, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 591, __pyx_L1_error)
-  __pyx_t_3 = __pyx_f_9adios_mpi_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 591, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 599, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_9adios_mpi_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 599, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 591, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 599, __pyx_L1_error)
   __pyx_r = adios_define_mesh_timesteps(__pyx_t_2, __pyx_v_group_id, __pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":590
+  /* "adios_mpi.pyx":598
  *     return adios_define_mesh_timevarying (s2b(timevarying) , group_id ,s2b(name))
  * 
  * cpdef int define_mesh_timesteps (str timesteps , int64_t group_id ,str name):             # <<<<<<<<<<<<<<
@@ -8476,16 +8710,16 @@ static PyObject *__pyx_pw_9adios_mpi_57define_mesh_timesteps(PyObject *__pyx_sel
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_group_id)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_timesteps", 1, 3, 3, 1); __PYX_ERR(0, 590, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_timesteps", 1, 3, 3, 1); __PYX_ERR(0, 598, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_timesteps", 1, 3, 3, 2); __PYX_ERR(0, 590, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_timesteps", 1, 3, 3, 2); __PYX_ERR(0, 598, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_mesh_timesteps") < 0)) __PYX_ERR(0, 590, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_mesh_timesteps") < 0)) __PYX_ERR(0, 598, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -8495,19 +8729,19 @@ static PyObject *__pyx_pw_9adios_mpi_57define_mesh_timesteps(PyObject *__pyx_sel
       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
     }
     __pyx_v_timesteps = ((PyObject*)values[0]);
-    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[1]); if (unlikely((__pyx_v_group_id == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 590, __pyx_L3_error)
+    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[1]); if (unlikely((__pyx_v_group_id == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 598, __pyx_L3_error)
     __pyx_v_name = ((PyObject*)values[2]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("define_mesh_timesteps", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 590, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("define_mesh_timesteps", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 598, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.define_mesh_timesteps", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_timesteps), (&PyString_Type), 1, "timesteps", 1))) __PYX_ERR(0, 590, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 590, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_timesteps), (&PyString_Type), 1, "timesteps", 1))) __PYX_ERR(0, 598, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 598, __pyx_L1_error)
   __pyx_r = __pyx_pf_9adios_mpi_56define_mesh_timesteps(__pyx_self, __pyx_v_timesteps, __pyx_v_group_id, __pyx_v_name);
 
   /* function exit code */
@@ -8525,7 +8759,7 @@ static PyObject *__pyx_pf_9adios_mpi_56define_mesh_timesteps(CYTHON_UNUSED PyObj
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("define_mesh_timesteps", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_define_mesh_timesteps(__pyx_v_timesteps, __pyx_v_group_id, __pyx_v_name, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 590, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_define_mesh_timesteps(__pyx_v_timesteps, __pyx_v_group_id, __pyx_v_name, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 598, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -8542,7 +8776,7 @@ static PyObject *__pyx_pf_9adios_mpi_56define_mesh_timesteps(CYTHON_UNUSED PyObj
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":593
+/* "adios_mpi.pyx":601
  *     return adios_define_mesh_timesteps (s2b(timesteps) , group_id ,s2b(name))
  * 
  * cpdef int define_mesh_timescale (str timescale , int64_t group_id ,str name):             # <<<<<<<<<<<<<<
@@ -8560,25 +8794,25 @@ static int __pyx_f_9adios_mpi_define_mesh_timescale(PyObject *__pyx_v_timescale,
   char const *__pyx_t_4;
   __Pyx_RefNannySetupContext("define_mesh_timescale", 0);
 
-  /* "adios_mpi.pyx":594
+  /* "adios_mpi.pyx":602
  * 
  * cpdef int define_mesh_timescale (str timescale , int64_t group_id ,str name):
  *     return adios_define_mesh_timescale (s2b(timescale) , group_id ,s2b(name))             # <<<<<<<<<<<<<<
  * 
  * cpdef int define_mesh_timeseriesformat (str timeseries , int64_t group_id ,str name):
  */
-  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_timescale, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 594, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_timescale, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 602, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 594, __pyx_L1_error)
-  __pyx_t_3 = __pyx_f_9adios_mpi_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 594, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 602, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_9adios_mpi_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 602, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 594, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 602, __pyx_L1_error)
   __pyx_r = adios_define_mesh_timescale(__pyx_t_2, __pyx_v_group_id, __pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":593
+  /* "adios_mpi.pyx":601
  *     return adios_define_mesh_timesteps (s2b(timesteps) , group_id ,s2b(name))
  * 
  * cpdef int define_mesh_timescale (str timescale , int64_t group_id ,str name):             # <<<<<<<<<<<<<<
@@ -8628,16 +8862,16 @@ static PyObject *__pyx_pw_9adios_mpi_59define_mesh_timescale(PyObject *__pyx_sel
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_group_id)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_timescale", 1, 3, 3, 1); __PYX_ERR(0, 593, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_timescale", 1, 3, 3, 1); __PYX_ERR(0, 601, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_timescale", 1, 3, 3, 2); __PYX_ERR(0, 593, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_timescale", 1, 3, 3, 2); __PYX_ERR(0, 601, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_mesh_timescale") < 0)) __PYX_ERR(0, 593, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_mesh_timescale") < 0)) __PYX_ERR(0, 601, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -8647,19 +8881,19 @@ static PyObject *__pyx_pw_9adios_mpi_59define_mesh_timescale(PyObject *__pyx_sel
       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
     }
     __pyx_v_timescale = ((PyObject*)values[0]);
-    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[1]); if (unlikely((__pyx_v_group_id == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 593, __pyx_L3_error)
+    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[1]); if (unlikely((__pyx_v_group_id == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 601, __pyx_L3_error)
     __pyx_v_name = ((PyObject*)values[2]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("define_mesh_timescale", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 593, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("define_mesh_timescale", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 601, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.define_mesh_timescale", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_timescale), (&PyString_Type), 1, "timescale", 1))) __PYX_ERR(0, 593, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 593, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_timescale), (&PyString_Type), 1, "timescale", 1))) __PYX_ERR(0, 601, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 601, __pyx_L1_error)
   __pyx_r = __pyx_pf_9adios_mpi_58define_mesh_timescale(__pyx_self, __pyx_v_timescale, __pyx_v_group_id, __pyx_v_name);
 
   /* function exit code */
@@ -8677,7 +8911,7 @@ static PyObject *__pyx_pf_9adios_mpi_58define_mesh_timescale(CYTHON_UNUSED PyObj
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("define_mesh_timescale", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_define_mesh_timescale(__pyx_v_timescale, __pyx_v_group_id, __pyx_v_name, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 593, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_define_mesh_timescale(__pyx_v_timescale, __pyx_v_group_id, __pyx_v_name, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 601, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -8694,7 +8928,7 @@ static PyObject *__pyx_pf_9adios_mpi_58define_mesh_timescale(CYTHON_UNUSED PyObj
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":596
+/* "adios_mpi.pyx":604
  *     return adios_define_mesh_timescale (s2b(timescale) , group_id ,s2b(name))
  * 
  * cpdef int define_mesh_timeseriesformat (str timeseries , int64_t group_id ,str name):             # <<<<<<<<<<<<<<
@@ -8712,25 +8946,25 @@ static int __pyx_f_9adios_mpi_define_mesh_timeseriesformat(PyObject *__pyx_v_tim
   char const *__pyx_t_4;
   __Pyx_RefNannySetupContext("define_mesh_timeseriesformat", 0);
 
-  /* "adios_mpi.pyx":597
+  /* "adios_mpi.pyx":605
  * 
  * cpdef int define_mesh_timeseriesformat (str timeseries , int64_t group_id ,str name):
  *     return adios_define_mesh_timeseriesformat (s2b(timeseries) , group_id ,s2b(name))             # <<<<<<<<<<<<<<
  * 
  * cpdef int define_mesh_uniform (str dimensions,
  */
-  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_timeseries, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 597, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_timeseries, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 605, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 597, __pyx_L1_error)
-  __pyx_t_3 = __pyx_f_9adios_mpi_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 597, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 605, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_9adios_mpi_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 605, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 597, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 605, __pyx_L1_error)
   __pyx_r = adios_define_mesh_timeseriesformat(__pyx_t_2, __pyx_v_group_id, __pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":596
+  /* "adios_mpi.pyx":604
  *     return adios_define_mesh_timescale (s2b(timescale) , group_id ,s2b(name))
  * 
  * cpdef int define_mesh_timeseriesformat (str timeseries , int64_t group_id ,str name):             # <<<<<<<<<<<<<<
@@ -8780,16 +9014,16 @@ static PyObject *__pyx_pw_9adios_mpi_61define_mesh_timeseriesformat(PyObject *__
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_group_id)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_timeseriesformat", 1, 3, 3, 1); __PYX_ERR(0, 596, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_timeseriesformat", 1, 3, 3, 1); __PYX_ERR(0, 604, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_timeseriesformat", 1, 3, 3, 2); __PYX_ERR(0, 596, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_timeseriesformat", 1, 3, 3, 2); __PYX_ERR(0, 604, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_mesh_timeseriesformat") < 0)) __PYX_ERR(0, 596, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_mesh_timeseriesformat") < 0)) __PYX_ERR(0, 604, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -8799,19 +9033,19 @@ static PyObject *__pyx_pw_9adios_mpi_61define_mesh_timeseriesformat(PyObject *__
       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
     }
     __pyx_v_timeseries = ((PyObject*)values[0]);
-    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[1]); if (unlikely((__pyx_v_group_id == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 596, __pyx_L3_error)
+    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[1]); if (unlikely((__pyx_v_group_id == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 604, __pyx_L3_error)
     __pyx_v_name = ((PyObject*)values[2]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("define_mesh_timeseriesformat", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 596, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("define_mesh_timeseriesformat", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 604, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.define_mesh_timeseriesformat", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_timeseries), (&PyString_Type), 1, "timeseries", 1))) __PYX_ERR(0, 596, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 596, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_timeseries), (&PyString_Type), 1, "timeseries", 1))) __PYX_ERR(0, 604, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 604, __pyx_L1_error)
   __pyx_r = __pyx_pf_9adios_mpi_60define_mesh_timeseriesformat(__pyx_self, __pyx_v_timeseries, __pyx_v_group_id, __pyx_v_name);
 
   /* function exit code */
@@ -8829,7 +9063,7 @@ static PyObject *__pyx_pf_9adios_mpi_60define_mesh_timeseriesformat(CYTHON_UNUSE
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("define_mesh_timeseriesformat", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_define_mesh_timeseriesformat(__pyx_v_timeseries, __pyx_v_group_id, __pyx_v_name, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 596, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_define_mesh_timeseriesformat(__pyx_v_timeseries, __pyx_v_group_id, __pyx_v_name, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 604, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -8846,7 +9080,7 @@ static PyObject *__pyx_pf_9adios_mpi_60define_mesh_timeseriesformat(CYTHON_UNUSE
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":599
+/* "adios_mpi.pyx":607
  *     return adios_define_mesh_timeseriesformat (s2b(timeseries) , group_id ,s2b(name))
  * 
  * cpdef int define_mesh_uniform (str dimensions,             # <<<<<<<<<<<<<<
@@ -8872,73 +9106,73 @@ static int __pyx_f_9adios_mpi_define_mesh_uniform(PyObject *__pyx_v_dimensions,
   char const *__pyx_t_12;
   __Pyx_RefNannySetupContext("define_mesh_uniform", 0);
 
-  /* "adios_mpi.pyx":607
+  /* "adios_mpi.pyx":615
  *                                    str name
  *                                   ):
  *     return adios_define_mesh_uniform (s2b(dimensions),             # <<<<<<<<<<<<<<
  *                                    s2b(origin),
  *                                    s2b(spacing),
  */
-  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_dimensions, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 607, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_dimensions, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 615, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 607, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 615, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":608
+  /* "adios_mpi.pyx":616
  *                                   ):
  *     return adios_define_mesh_uniform (s2b(dimensions),
  *                                    s2b(origin),             # <<<<<<<<<<<<<<
  *                                    s2b(spacing),
  *                                    s2b(maximum),
  */
-  __pyx_t_3 = __pyx_f_9adios_mpi_s2b(__pyx_v_origin, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 608, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_9adios_mpi_s2b(__pyx_v_origin, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 616, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 608, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 616, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":609
+  /* "adios_mpi.pyx":617
  *     return adios_define_mesh_uniform (s2b(dimensions),
  *                                    s2b(origin),
  *                                    s2b(spacing),             # <<<<<<<<<<<<<<
  *                                    s2b(maximum),
  *                                    s2b(nspace),
  */
-  __pyx_t_5 = __pyx_f_9adios_mpi_s2b(__pyx_v_spacing, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 609, __pyx_L1_error)
+  __pyx_t_5 = __pyx_f_9adios_mpi_s2b(__pyx_v_spacing, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 617, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_t_5); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(0, 609, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_t_5); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(0, 617, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":610
+  /* "adios_mpi.pyx":618
  *                                    s2b(origin),
  *                                    s2b(spacing),
  *                                    s2b(maximum),             # <<<<<<<<<<<<<<
  *                                    s2b(nspace),
  *                                    group_id,
  */
-  __pyx_t_7 = __pyx_f_9adios_mpi_s2b(__pyx_v_maximum, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 610, __pyx_L1_error)
+  __pyx_t_7 = __pyx_f_9adios_mpi_s2b(__pyx_v_maximum, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 618, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_8 = __Pyx_PyObject_AsString(__pyx_t_7); if (unlikely((!__pyx_t_8) && PyErr_Occurred())) __PYX_ERR(0, 610, __pyx_L1_error)
+  __pyx_t_8 = __Pyx_PyObject_AsString(__pyx_t_7); if (unlikely((!__pyx_t_8) && PyErr_Occurred())) __PYX_ERR(0, 618, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":611
+  /* "adios_mpi.pyx":619
  *                                    s2b(spacing),
  *                                    s2b(maximum),
  *                                    s2b(nspace),             # <<<<<<<<<<<<<<
  *                                    group_id,
  *                                    s2b(name)
  */
-  __pyx_t_9 = __pyx_f_9adios_mpi_s2b(__pyx_v_nspace, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 611, __pyx_L1_error)
+  __pyx_t_9 = __pyx_f_9adios_mpi_s2b(__pyx_v_nspace, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 619, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
-  __pyx_t_10 = __Pyx_PyObject_AsString(__pyx_t_9); if (unlikely((!__pyx_t_10) && PyErr_Occurred())) __PYX_ERR(0, 611, __pyx_L1_error)
+  __pyx_t_10 = __Pyx_PyObject_AsString(__pyx_t_9); if (unlikely((!__pyx_t_10) && PyErr_Occurred())) __PYX_ERR(0, 619, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":613
+  /* "adios_mpi.pyx":621
  *                                    s2b(nspace),
  *                                    group_id,
  *                                    s2b(name)             # <<<<<<<<<<<<<<
  *                                   )
  * 
  */
-  __pyx_t_11 = __pyx_f_9adios_mpi_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 613, __pyx_L1_error)
+  __pyx_t_11 = __pyx_f_9adios_mpi_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 621, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_11);
-  __pyx_t_12 = __Pyx_PyObject_AsString(__pyx_t_11); if (unlikely((!__pyx_t_12) && PyErr_Occurred())) __PYX_ERR(0, 613, __pyx_L1_error)
+  __pyx_t_12 = __Pyx_PyObject_AsString(__pyx_t_11); if (unlikely((!__pyx_t_12) && PyErr_Occurred())) __PYX_ERR(0, 621, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":607
+  /* "adios_mpi.pyx":615
  *                                    str name
  *                                   ):
  *     return adios_define_mesh_uniform (s2b(dimensions),             # <<<<<<<<<<<<<<
@@ -8954,7 +9188,7 @@ static int __pyx_f_9adios_mpi_define_mesh_uniform(PyObject *__pyx_v_dimensions,
   __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":599
+  /* "adios_mpi.pyx":607
  *     return adios_define_mesh_timeseriesformat (s2b(timeseries) , group_id ,s2b(name))
  * 
  * cpdef int define_mesh_uniform (str dimensions,             # <<<<<<<<<<<<<<
@@ -9016,36 +9250,36 @@ static PyObject *__pyx_pw_9adios_mpi_63define_mesh_uniform(PyObject *__pyx_self,
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_origin)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_uniform", 1, 7, 7, 1); __PYX_ERR(0, 599, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_uniform", 1, 7, 7, 1); __PYX_ERR(0, 607, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_spacing)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_uniform", 1, 7, 7, 2); __PYX_ERR(0, 599, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_uniform", 1, 7, 7, 2); __PYX_ERR(0, 607, __pyx_L3_error)
         }
         case  3:
         if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_maximum)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_uniform", 1, 7, 7, 3); __PYX_ERR(0, 599, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_uniform", 1, 7, 7, 3); __PYX_ERR(0, 607, __pyx_L3_error)
         }
         case  4:
         if (likely((values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_nspace)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_uniform", 1, 7, 7, 4); __PYX_ERR(0, 599, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_uniform", 1, 7, 7, 4); __PYX_ERR(0, 607, __pyx_L3_error)
         }
         case  5:
         if (likely((values[5] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_group_id)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_uniform", 1, 7, 7, 5); __PYX_ERR(0, 599, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_uniform", 1, 7, 7, 5); __PYX_ERR(0, 607, __pyx_L3_error)
         }
         case  6:
         if (likely((values[6] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_uniform", 1, 7, 7, 6); __PYX_ERR(0, 599, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_uniform", 1, 7, 7, 6); __PYX_ERR(0, 607, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_mesh_uniform") < 0)) __PYX_ERR(0, 599, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_mesh_uniform") < 0)) __PYX_ERR(0, 607, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 7) {
       goto __pyx_L5_argtuple_error;
@@ -9063,23 +9297,23 @@ static PyObject *__pyx_pw_9adios_mpi_63define_mesh_uniform(PyObject *__pyx_self,
     __pyx_v_spacing = ((PyObject*)values[2]);
     __pyx_v_maximum = ((PyObject*)values[3]);
     __pyx_v_nspace = ((PyObject*)values[4]);
-    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[5]); if (unlikely((__pyx_v_group_id == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 604, __pyx_L3_error)
+    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[5]); if (unlikely((__pyx_v_group_id == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 612, __pyx_L3_error)
     __pyx_v_name = ((PyObject*)values[6]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("define_mesh_uniform", 1, 7, 7, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 599, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("define_mesh_uniform", 1, 7, 7, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 607, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.define_mesh_uniform", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dimensions), (&PyString_Type), 1, "dimensions", 1))) __PYX_ERR(0, 599, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_origin), (&PyString_Type), 1, "origin", 1))) __PYX_ERR(0, 600, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_spacing), (&PyString_Type), 1, "spacing", 1))) __PYX_ERR(0, 601, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_maximum), (&PyString_Type), 1, "maximum", 1))) __PYX_ERR(0, 602, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_nspace), (&PyString_Type), 1, "nspace", 1))) __PYX_ERR(0, 603, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 605, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dimensions), (&PyString_Type), 1, "dimensions", 1))) __PYX_ERR(0, 607, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_origin), (&PyString_Type), 1, "origin", 1))) __PYX_ERR(0, 608, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_spacing), (&PyString_Type), 1, "spacing", 1))) __PYX_ERR(0, 609, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_maximum), (&PyString_Type), 1, "maximum", 1))) __PYX_ERR(0, 610, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_nspace), (&PyString_Type), 1, "nspace", 1))) __PYX_ERR(0, 611, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 613, __pyx_L1_error)
   __pyx_r = __pyx_pf_9adios_mpi_62define_mesh_uniform(__pyx_self, __pyx_v_dimensions, __pyx_v_origin, __pyx_v_spacing, __pyx_v_maximum, __pyx_v_nspace, __pyx_v_group_id, __pyx_v_name);
 
   /* function exit code */
@@ -9097,7 +9331,7 @@ static PyObject *__pyx_pf_9adios_mpi_62define_mesh_uniform(CYTHON_UNUSED PyObjec
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("define_mesh_uniform", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_define_mesh_uniform(__pyx_v_dimensions, __pyx_v_origin, __pyx_v_spacing, __pyx_v_maximum, __pyx_v_nspace, __pyx_v_group_id, __pyx_v_name, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 599, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_define_mesh_uniform(__pyx_v_dimensions, __pyx_v_origin, __pyx_v_spacing, __pyx_v_maximum, __pyx_v_nspace, __pyx_v_group_id, __pyx_v_name, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 607, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -9114,7 +9348,7 @@ static PyObject *__pyx_pf_9adios_mpi_62define_mesh_uniform(CYTHON_UNUSED PyObjec
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":616
+/* "adios_mpi.pyx":624
  *                                   )
  * 
  * cpdef int define_mesh_rectilinear (str dimensions,             # <<<<<<<<<<<<<<
@@ -9136,51 +9370,51 @@ static int __pyx_f_9adios_mpi_define_mesh_rectilinear(PyObject *__pyx_v_dimensio
   char const *__pyx_t_8;
   __Pyx_RefNannySetupContext("define_mesh_rectilinear", 0);
 
-  /* "adios_mpi.pyx":622
+  /* "adios_mpi.pyx":630
  *                                        str name
  *                                       ):
  *     return adios_define_mesh_rectilinear (s2b(dimensions),             # <<<<<<<<<<<<<<
  *                                        s2b(coordinates),
  *                                        s2b(nspace),
  */
-  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_dimensions, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 622, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_dimensions, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 630, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 622, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 630, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":623
+  /* "adios_mpi.pyx":631
  *                                       ):
  *     return adios_define_mesh_rectilinear (s2b(dimensions),
  *                                        s2b(coordinates),             # <<<<<<<<<<<<<<
  *                                        s2b(nspace),
  *                                        group_id,
  */
-  __pyx_t_3 = __pyx_f_9adios_mpi_s2b(__pyx_v_coordinates, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 623, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_9adios_mpi_s2b(__pyx_v_coordinates, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 631, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 623, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 631, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":624
+  /* "adios_mpi.pyx":632
  *     return adios_define_mesh_rectilinear (s2b(dimensions),
  *                                        s2b(coordinates),
  *                                        s2b(nspace),             # <<<<<<<<<<<<<<
  *                                        group_id,
  *                                        s2b(name)
  */
-  __pyx_t_5 = __pyx_f_9adios_mpi_s2b(__pyx_v_nspace, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 624, __pyx_L1_error)
+  __pyx_t_5 = __pyx_f_9adios_mpi_s2b(__pyx_v_nspace, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 632, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_t_5); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(0, 624, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_t_5); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(0, 632, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":626
+  /* "adios_mpi.pyx":634
  *                                        s2b(nspace),
  *                                        group_id,
  *                                        s2b(name)             # <<<<<<<<<<<<<<
  *                                       )
  * 
  */
-  __pyx_t_7 = __pyx_f_9adios_mpi_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 626, __pyx_L1_error)
+  __pyx_t_7 = __pyx_f_9adios_mpi_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 634, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_8 = __Pyx_PyObject_AsString(__pyx_t_7); if (unlikely((!__pyx_t_8) && PyErr_Occurred())) __PYX_ERR(0, 626, __pyx_L1_error)
+  __pyx_t_8 = __Pyx_PyObject_AsString(__pyx_t_7); if (unlikely((!__pyx_t_8) && PyErr_Occurred())) __PYX_ERR(0, 634, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":622
+  /* "adios_mpi.pyx":630
  *                                        str name
  *                                       ):
  *     return adios_define_mesh_rectilinear (s2b(dimensions),             # <<<<<<<<<<<<<<
@@ -9194,7 +9428,7 @@ static int __pyx_f_9adios_mpi_define_mesh_rectilinear(PyObject *__pyx_v_dimensio
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":616
+  /* "adios_mpi.pyx":624
  *                                   )
  * 
  * cpdef int define_mesh_rectilinear (str dimensions,             # <<<<<<<<<<<<<<
@@ -9250,26 +9484,26 @@ static PyObject *__pyx_pw_9adios_mpi_65define_mesh_rectilinear(PyObject *__pyx_s
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_coordinates)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_rectilinear", 1, 5, 5, 1); __PYX_ERR(0, 616, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_rectilinear", 1, 5, 5, 1); __PYX_ERR(0, 624, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_nspace)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_rectilinear", 1, 5, 5, 2); __PYX_ERR(0, 616, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_rectilinear", 1, 5, 5, 2); __PYX_ERR(0, 624, __pyx_L3_error)
         }
         case  3:
         if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_group_id)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_rectilinear", 1, 5, 5, 3); __PYX_ERR(0, 616, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_rectilinear", 1, 5, 5, 3); __PYX_ERR(0, 624, __pyx_L3_error)
         }
         case  4:
         if (likely((values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_rectilinear", 1, 5, 5, 4); __PYX_ERR(0, 616, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_rectilinear", 1, 5, 5, 4); __PYX_ERR(0, 624, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_mesh_rectilinear") < 0)) __PYX_ERR(0, 616, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_mesh_rectilinear") < 0)) __PYX_ERR(0, 624, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 5) {
       goto __pyx_L5_argtuple_error;
@@ -9283,21 +9517,21 @@ static PyObject *__pyx_pw_9adios_mpi_65define_mesh_rectilinear(PyObject *__pyx_s
     __pyx_v_dimensions = ((PyObject*)values[0]);
     __pyx_v_coordinates = ((PyObject*)values[1]);
     __pyx_v_nspace = ((PyObject*)values[2]);
-    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[3]); if (unlikely((__pyx_v_group_id == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 619, __pyx_L3_error)
+    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[3]); if (unlikely((__pyx_v_group_id == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 627, __pyx_L3_error)
     __pyx_v_name = ((PyObject*)values[4]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("define_mesh_rectilinear", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 616, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("define_mesh_rectilinear", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 624, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.define_mesh_rectilinear", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dimensions), (&PyString_Type), 1, "dimensions", 1))) __PYX_ERR(0, 616, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_coordinates), (&PyString_Type), 1, "coordinates", 1))) __PYX_ERR(0, 617, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_nspace), (&PyString_Type), 1, "nspace", 1))) __PYX_ERR(0, 618, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 620, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dimensions), (&PyString_Type), 1, "dimensions", 1))) __PYX_ERR(0, 624, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_coordinates), (&PyString_Type), 1, "coordinates", 1))) __PYX_ERR(0, 625, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_nspace), (&PyString_Type), 1, "nspace", 1))) __PYX_ERR(0, 626, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 628, __pyx_L1_error)
   __pyx_r = __pyx_pf_9adios_mpi_64define_mesh_rectilinear(__pyx_self, __pyx_v_dimensions, __pyx_v_coordinates, __pyx_v_nspace, __pyx_v_group_id, __pyx_v_name);
 
   /* function exit code */
@@ -9315,7 +9549,7 @@ static PyObject *__pyx_pf_9adios_mpi_64define_mesh_rectilinear(CYTHON_UNUSED PyO
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("define_mesh_rectilinear", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_define_mesh_rectilinear(__pyx_v_dimensions, __pyx_v_coordinates, __pyx_v_nspace, __pyx_v_group_id, __pyx_v_name, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 616, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_define_mesh_rectilinear(__pyx_v_dimensions, __pyx_v_coordinates, __pyx_v_nspace, __pyx_v_group_id, __pyx_v_name, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 624, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -9332,7 +9566,7 @@ static PyObject *__pyx_pf_9adios_mpi_64define_mesh_rectilinear(CYTHON_UNUSED PyO
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":629
+/* "adios_mpi.pyx":637
  *                                       )
  * 
  * cpdef int define_mesh_structured (str dimensions,             # <<<<<<<<<<<<<<
@@ -9354,51 +9588,51 @@ static int __pyx_f_9adios_mpi_define_mesh_structured(PyObject *__pyx_v_dimension
   char const *__pyx_t_8;
   __Pyx_RefNannySetupContext("define_mesh_structured", 0);
 
-  /* "adios_mpi.pyx":635
+  /* "adios_mpi.pyx":643
  *                                       str name
  *                                      ):
  *     return adios_define_mesh_structured (s2b(dimensions),             # <<<<<<<<<<<<<<
  *                                       s2b(points),
  *                                       s2b(nspace),
  */
-  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_dimensions, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 635, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_dimensions, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 643, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 635, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 643, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":636
+  /* "adios_mpi.pyx":644
  *                                      ):
  *     return adios_define_mesh_structured (s2b(dimensions),
  *                                       s2b(points),             # <<<<<<<<<<<<<<
  *                                       s2b(nspace),
  *                                       group_id,
  */
-  __pyx_t_3 = __pyx_f_9adios_mpi_s2b(__pyx_v_points, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 636, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_9adios_mpi_s2b(__pyx_v_points, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 644, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 636, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 644, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":637
+  /* "adios_mpi.pyx":645
  *     return adios_define_mesh_structured (s2b(dimensions),
  *                                       s2b(points),
  *                                       s2b(nspace),             # <<<<<<<<<<<<<<
  *                                       group_id,
  *                                       s2b(name)
  */
-  __pyx_t_5 = __pyx_f_9adios_mpi_s2b(__pyx_v_nspace, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 637, __pyx_L1_error)
+  __pyx_t_5 = __pyx_f_9adios_mpi_s2b(__pyx_v_nspace, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 645, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_t_5); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(0, 637, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_t_5); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(0, 645, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":639
+  /* "adios_mpi.pyx":647
  *                                       s2b(nspace),
  *                                       group_id,
  *                                       s2b(name)             # <<<<<<<<<<<<<<
  *                                      )
  * 
  */
-  __pyx_t_7 = __pyx_f_9adios_mpi_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 639, __pyx_L1_error)
+  __pyx_t_7 = __pyx_f_9adios_mpi_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 647, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_8 = __Pyx_PyObject_AsString(__pyx_t_7); if (unlikely((!__pyx_t_8) && PyErr_Occurred())) __PYX_ERR(0, 639, __pyx_L1_error)
+  __pyx_t_8 = __Pyx_PyObject_AsString(__pyx_t_7); if (unlikely((!__pyx_t_8) && PyErr_Occurred())) __PYX_ERR(0, 647, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":635
+  /* "adios_mpi.pyx":643
  *                                       str name
  *                                      ):
  *     return adios_define_mesh_structured (s2b(dimensions),             # <<<<<<<<<<<<<<
@@ -9412,7 +9646,7 @@ static int __pyx_f_9adios_mpi_define_mesh_structured(PyObject *__pyx_v_dimension
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":629
+  /* "adios_mpi.pyx":637
  *                                       )
  * 
  * cpdef int define_mesh_structured (str dimensions,             # <<<<<<<<<<<<<<
@@ -9468,26 +9702,26 @@ static PyObject *__pyx_pw_9adios_mpi_67define_mesh_structured(PyObject *__pyx_se
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_points)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_structured", 1, 5, 5, 1); __PYX_ERR(0, 629, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_structured", 1, 5, 5, 1); __PYX_ERR(0, 637, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_nspace)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_structured", 1, 5, 5, 2); __PYX_ERR(0, 629, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_structured", 1, 5, 5, 2); __PYX_ERR(0, 637, __pyx_L3_error)
         }
         case  3:
         if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_group_id)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_structured", 1, 5, 5, 3); __PYX_ERR(0, 629, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_structured", 1, 5, 5, 3); __PYX_ERR(0, 637, __pyx_L3_error)
         }
         case  4:
         if (likely((values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_structured", 1, 5, 5, 4); __PYX_ERR(0, 629, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_structured", 1, 5, 5, 4); __PYX_ERR(0, 637, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_mesh_structured") < 0)) __PYX_ERR(0, 629, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_mesh_structured") < 0)) __PYX_ERR(0, 637, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 5) {
       goto __pyx_L5_argtuple_error;
@@ -9501,21 +9735,21 @@ static PyObject *__pyx_pw_9adios_mpi_67define_mesh_structured(PyObject *__pyx_se
     __pyx_v_dimensions = ((PyObject*)values[0]);
     __pyx_v_points = ((PyObject*)values[1]);
     __pyx_v_nspace = ((PyObject*)values[2]);
-    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[3]); if (unlikely((__pyx_v_group_id == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 632, __pyx_L3_error)
+    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[3]); if (unlikely((__pyx_v_group_id == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 640, __pyx_L3_error)
     __pyx_v_name = ((PyObject*)values[4]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("define_mesh_structured", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 629, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("define_mesh_structured", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 637, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.define_mesh_structured", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dimensions), (&PyString_Type), 1, "dimensions", 1))) __PYX_ERR(0, 629, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_points), (&PyString_Type), 1, "points", 1))) __PYX_ERR(0, 630, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_nspace), (&PyString_Type), 1, "nspace", 1))) __PYX_ERR(0, 631, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 633, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dimensions), (&PyString_Type), 1, "dimensions", 1))) __PYX_ERR(0, 637, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_points), (&PyString_Type), 1, "points", 1))) __PYX_ERR(0, 638, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_nspace), (&PyString_Type), 1, "nspace", 1))) __PYX_ERR(0, 639, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 641, __pyx_L1_error)
   __pyx_r = __pyx_pf_9adios_mpi_66define_mesh_structured(__pyx_self, __pyx_v_dimensions, __pyx_v_points, __pyx_v_nspace, __pyx_v_group_id, __pyx_v_name);
 
   /* function exit code */
@@ -9533,7 +9767,7 @@ static PyObject *__pyx_pf_9adios_mpi_66define_mesh_structured(CYTHON_UNUSED PyOb
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("define_mesh_structured", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_define_mesh_structured(__pyx_v_dimensions, __pyx_v_points, __pyx_v_nspace, __pyx_v_group_id, __pyx_v_name, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 629, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_define_mesh_structured(__pyx_v_dimensions, __pyx_v_points, __pyx_v_nspace, __pyx_v_group_id, __pyx_v_name, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 637, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -9550,7 +9784,7 @@ static PyObject *__pyx_pf_9adios_mpi_66define_mesh_structured(CYTHON_UNUSED PyOb
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":642
+/* "adios_mpi.pyx":650
  *                                      )
  * 
  * cpdef int define_mesh_unstructured (str points,             # <<<<<<<<<<<<<<
@@ -9578,84 +9812,84 @@ static int __pyx_f_9adios_mpi_define_mesh_unstructured(PyObject *__pyx_v_points,
   char const *__pyx_t_14;
   __Pyx_RefNannySetupContext("define_mesh_unstructured", 0);
 
-  /* "adios_mpi.pyx":651
+  /* "adios_mpi.pyx":659
  *                                         str name
  *                                        ):
  *     return adios_define_mesh_unstructured (s2b(points),             # <<<<<<<<<<<<<<
  *                                         s2b(data),
  *                                         s2b(count),
  */
-  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_points, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 651, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_points, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 659, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 651, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 659, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":652
+  /* "adios_mpi.pyx":660
  *                                        ):
  *     return adios_define_mesh_unstructured (s2b(points),
  *                                         s2b(data),             # <<<<<<<<<<<<<<
  *                                         s2b(count),
  *                                         s2b(cell_type),
  */
-  __pyx_t_3 = __pyx_f_9adios_mpi_s2b(__pyx_v_data, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 652, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_9adios_mpi_s2b(__pyx_v_data, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 660, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 652, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 660, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":653
+  /* "adios_mpi.pyx":661
  *     return adios_define_mesh_unstructured (s2b(points),
  *                                         s2b(data),
  *                                         s2b(count),             # <<<<<<<<<<<<<<
  *                                         s2b(cell_type),
  *                                         s2b(npoints),
  */
-  __pyx_t_5 = __pyx_f_9adios_mpi_s2b(__pyx_v_count, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 653, __pyx_L1_error)
+  __pyx_t_5 = __pyx_f_9adios_mpi_s2b(__pyx_v_count, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 661, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_t_5); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(0, 653, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_t_5); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(0, 661, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":654
+  /* "adios_mpi.pyx":662
  *                                         s2b(data),
  *                                         s2b(count),
  *                                         s2b(cell_type),             # <<<<<<<<<<<<<<
  *                                         s2b(npoints),
  *                                         s2b(nspace),
  */
-  __pyx_t_7 = __pyx_f_9adios_mpi_s2b(__pyx_v_cell_type, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 654, __pyx_L1_error)
+  __pyx_t_7 = __pyx_f_9adios_mpi_s2b(__pyx_v_cell_type, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 662, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_8 = __Pyx_PyObject_AsString(__pyx_t_7); if (unlikely((!__pyx_t_8) && PyErr_Occurred())) __PYX_ERR(0, 654, __pyx_L1_error)
+  __pyx_t_8 = __Pyx_PyObject_AsString(__pyx_t_7); if (unlikely((!__pyx_t_8) && PyErr_Occurred())) __PYX_ERR(0, 662, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":655
+  /* "adios_mpi.pyx":663
  *                                         s2b(count),
  *                                         s2b(cell_type),
  *                                         s2b(npoints),             # <<<<<<<<<<<<<<
  *                                         s2b(nspace),
  *                                         group_id,
  */
-  __pyx_t_9 = __pyx_f_9adios_mpi_s2b(__pyx_v_npoints, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 655, __pyx_L1_error)
+  __pyx_t_9 = __pyx_f_9adios_mpi_s2b(__pyx_v_npoints, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 663, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
-  __pyx_t_10 = __Pyx_PyObject_AsString(__pyx_t_9); if (unlikely((!__pyx_t_10) && PyErr_Occurred())) __PYX_ERR(0, 655, __pyx_L1_error)
+  __pyx_t_10 = __Pyx_PyObject_AsString(__pyx_t_9); if (unlikely((!__pyx_t_10) && PyErr_Occurred())) __PYX_ERR(0, 663, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":656
+  /* "adios_mpi.pyx":664
  *                                         s2b(cell_type),
  *                                         s2b(npoints),
  *                                         s2b(nspace),             # <<<<<<<<<<<<<<
  *                                         group_id,
  *                                         s2b(name)
  */
-  __pyx_t_11 = __pyx_f_9adios_mpi_s2b(__pyx_v_nspace, 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 656, __pyx_L1_error)
+  __pyx_t_11 = __pyx_f_9adios_mpi_s2b(__pyx_v_nspace, 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 664, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_11);
-  __pyx_t_12 = __Pyx_PyObject_AsString(__pyx_t_11); if (unlikely((!__pyx_t_12) && PyErr_Occurred())) __PYX_ERR(0, 656, __pyx_L1_error)
+  __pyx_t_12 = __Pyx_PyObject_AsString(__pyx_t_11); if (unlikely((!__pyx_t_12) && PyErr_Occurred())) __PYX_ERR(0, 664, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":658
+  /* "adios_mpi.pyx":666
  *                                         s2b(nspace),
  *                                         group_id,
  *                                         s2b(name)             # <<<<<<<<<<<<<<
  *                                        )
  * 
  */
-  __pyx_t_13 = __pyx_f_9adios_mpi_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 658, __pyx_L1_error)
+  __pyx_t_13 = __pyx_f_9adios_mpi_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 666, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_13);
-  __pyx_t_14 = __Pyx_PyObject_AsString(__pyx_t_13); if (unlikely((!__pyx_t_14) && PyErr_Occurred())) __PYX_ERR(0, 658, __pyx_L1_error)
+  __pyx_t_14 = __Pyx_PyObject_AsString(__pyx_t_13); if (unlikely((!__pyx_t_14) && PyErr_Occurred())) __PYX_ERR(0, 666, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":651
+  /* "adios_mpi.pyx":659
  *                                         str name
  *                                        ):
  *     return adios_define_mesh_unstructured (s2b(points),             # <<<<<<<<<<<<<<
@@ -9672,7 +9906,7 @@ static int __pyx_f_9adios_mpi_define_mesh_unstructured(PyObject *__pyx_v_points,
   __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":642
+  /* "adios_mpi.pyx":650
  *                                      )
  * 
  * cpdef int define_mesh_unstructured (str points,             # <<<<<<<<<<<<<<
@@ -9737,41 +9971,41 @@ static PyObject *__pyx_pw_9adios_mpi_69define_mesh_unstructured(PyObject *__pyx_
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_data)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_unstructured", 1, 8, 8, 1); __PYX_ERR(0, 642, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_unstructured", 1, 8, 8, 1); __PYX_ERR(0, 650, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_count)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_unstructured", 1, 8, 8, 2); __PYX_ERR(0, 642, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_unstructured", 1, 8, 8, 2); __PYX_ERR(0, 650, __pyx_L3_error)
         }
         case  3:
         if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_cell_type)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_unstructured", 1, 8, 8, 3); __PYX_ERR(0, 642, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_unstructured", 1, 8, 8, 3); __PYX_ERR(0, 650, __pyx_L3_error)
         }
         case  4:
         if (likely((values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_npoints)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_unstructured", 1, 8, 8, 4); __PYX_ERR(0, 642, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_unstructured", 1, 8, 8, 4); __PYX_ERR(0, 650, __pyx_L3_error)
         }
         case  5:
         if (likely((values[5] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_nspace)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_unstructured", 1, 8, 8, 5); __PYX_ERR(0, 642, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_unstructured", 1, 8, 8, 5); __PYX_ERR(0, 650, __pyx_L3_error)
         }
         case  6:
         if (likely((values[6] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_group_id)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_unstructured", 1, 8, 8, 6); __PYX_ERR(0, 642, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_unstructured", 1, 8, 8, 6); __PYX_ERR(0, 650, __pyx_L3_error)
         }
         case  7:
         if (likely((values[7] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_mesh_unstructured", 1, 8, 8, 7); __PYX_ERR(0, 642, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_mesh_unstructured", 1, 8, 8, 7); __PYX_ERR(0, 650, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_mesh_unstructured") < 0)) __PYX_ERR(0, 642, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_mesh_unstructured") < 0)) __PYX_ERR(0, 650, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 8) {
       goto __pyx_L5_argtuple_error;
@@ -9791,24 +10025,24 @@ static PyObject *__pyx_pw_9adios_mpi_69define_mesh_unstructured(PyObject *__pyx_
     __pyx_v_cell_type = ((PyObject*)values[3]);
     __pyx_v_npoints = ((PyObject*)values[4]);
     __pyx_v_nspace = ((PyObject*)values[5]);
-    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[6]); if (unlikely((__pyx_v_group_id == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 648, __pyx_L3_error)
+    __pyx_v_group_id = __Pyx_PyInt_As_int64_t(values[6]); if (unlikely((__pyx_v_group_id == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 656, __pyx_L3_error)
     __pyx_v_name = ((PyObject*)values[7]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("define_mesh_unstructured", 1, 8, 8, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 642, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("define_mesh_unstructured", 1, 8, 8, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 650, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.define_mesh_unstructured", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_points), (&PyString_Type), 1, "points", 1))) __PYX_ERR(0, 642, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_data), (&PyString_Type), 1, "data", 1))) __PYX_ERR(0, 643, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_count), (&PyString_Type), 1, "count", 1))) __PYX_ERR(0, 644, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_cell_type), (&PyString_Type), 1, "cell_type", 1))) __PYX_ERR(0, 645, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_npoints), (&PyString_Type), 1, "npoints", 1))) __PYX_ERR(0, 646, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_nspace), (&PyString_Type), 1, "nspace", 1))) __PYX_ERR(0, 647, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 649, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_points), (&PyString_Type), 1, "points", 1))) __PYX_ERR(0, 650, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_data), (&PyString_Type), 1, "data", 1))) __PYX_ERR(0, 651, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_count), (&PyString_Type), 1, "count", 1))) __PYX_ERR(0, 652, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_cell_type), (&PyString_Type), 1, "cell_type", 1))) __PYX_ERR(0, 653, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_npoints), (&PyString_Type), 1, "npoints", 1))) __PYX_ERR(0, 654, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_nspace), (&PyString_Type), 1, "nspace", 1))) __PYX_ERR(0, 655, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 657, __pyx_L1_error)
   __pyx_r = __pyx_pf_9adios_mpi_68define_mesh_unstructured(__pyx_self, __pyx_v_points, __pyx_v_data, __pyx_v_count, __pyx_v_cell_type, __pyx_v_npoints, __pyx_v_nspace, __pyx_v_group_id, __pyx_v_name);
 
   /* function exit code */
@@ -9826,7 +10060,7 @@ static PyObject *__pyx_pf_9adios_mpi_68define_mesh_unstructured(CYTHON_UNUSED Py
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("define_mesh_unstructured", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_define_mesh_unstructured(__pyx_v_points, __pyx_v_data, __pyx_v_count, __pyx_v_cell_type, __pyx_v_npoints, __pyx_v_nspace, __pyx_v_group_id, __pyx_v_name, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 642, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_define_mesh_unstructured(__pyx_v_points, __pyx_v_data, __pyx_v_count, __pyx_v_cell_type, __pyx_v_npoints, __pyx_v_nspace, __pyx_v_group_id, __pyx_v_name, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 650, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -9843,7 +10077,7 @@ static PyObject *__pyx_pf_9adios_mpi_68define_mesh_unstructured(CYTHON_UNUSED Py
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":661
+/* "adios_mpi.pyx":669
  *                                        )
  * 
  * cpdef int define_attribute (int64_t group,             # <<<<<<<<<<<<<<
@@ -9865,51 +10099,51 @@ static int __pyx_f_9adios_mpi_define_attribute(int64_t __pyx_v_group, PyObject *
   char *__pyx_t_8;
   __Pyx_RefNannySetupContext("define_attribute", 0);
 
-  /* "adios_mpi.pyx":668
+  /* "adios_mpi.pyx":676
  *                             str var):
  *     return adios_define_attribute (group,
  *                                    s2b(name),             # <<<<<<<<<<<<<<
  *                                    s2b(path),
  *                                    <ADIOS_DATATYPES> atype,
  */
-  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 668, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 676, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 668, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 676, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":669
+  /* "adios_mpi.pyx":677
  *     return adios_define_attribute (group,
  *                                    s2b(name),
  *                                    s2b(path),             # <<<<<<<<<<<<<<
  *                                    <ADIOS_DATATYPES> atype,
  *                                    s2b(value),
  */
-  __pyx_t_3 = __pyx_f_9adios_mpi_s2b(__pyx_v_path, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 669, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_9adios_mpi_s2b(__pyx_v_path, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 677, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 669, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 677, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":671
+  /* "adios_mpi.pyx":679
  *                                    s2b(path),
  *                                    <ADIOS_DATATYPES> atype,
  *                                    s2b(value),             # <<<<<<<<<<<<<<
  *                                    s2b(var))
  * 
  */
-  __pyx_t_5 = __pyx_f_9adios_mpi_s2b(__pyx_v_value, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 671, __pyx_L1_error)
+  __pyx_t_5 = __pyx_f_9adios_mpi_s2b(__pyx_v_value, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 679, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_t_5); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(0, 671, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_t_5); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(0, 679, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":672
+  /* "adios_mpi.pyx":680
  *                                    <ADIOS_DATATYPES> atype,
  *                                    s2b(value),
  *                                    s2b(var))             # <<<<<<<<<<<<<<
  * 
  * cpdef int define_attribute_byvalue (int64_t group,
  */
-  __pyx_t_7 = __pyx_f_9adios_mpi_s2b(__pyx_v_var, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 672, __pyx_L1_error)
+  __pyx_t_7 = __pyx_f_9adios_mpi_s2b(__pyx_v_var, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 680, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_8 = __Pyx_PyObject_AsString(__pyx_t_7); if (unlikely((!__pyx_t_8) && PyErr_Occurred())) __PYX_ERR(0, 672, __pyx_L1_error)
+  __pyx_t_8 = __Pyx_PyObject_AsString(__pyx_t_7); if (unlikely((!__pyx_t_8) && PyErr_Occurred())) __PYX_ERR(0, 680, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":667
+  /* "adios_mpi.pyx":675
  *                             str value,
  *                             str var):
  *     return adios_define_attribute (group,             # <<<<<<<<<<<<<<
@@ -9923,7 +10157,7 @@ static int __pyx_f_9adios_mpi_define_attribute(int64_t __pyx_v_group, PyObject *
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":661
+  /* "adios_mpi.pyx":669
  *                                        )
  * 
  * cpdef int define_attribute (int64_t group,             # <<<<<<<<<<<<<<
@@ -9981,31 +10215,31 @@ static PyObject *__pyx_pw_9adios_mpi_71define_attribute(PyObject *__pyx_self, Py
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, 1); __PYX_ERR(0, 661, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, 1); __PYX_ERR(0, 669, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_path)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, 2); __PYX_ERR(0, 661, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, 2); __PYX_ERR(0, 669, __pyx_L3_error)
         }
         case  3:
         if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_atype)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, 3); __PYX_ERR(0, 661, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, 3); __PYX_ERR(0, 669, __pyx_L3_error)
         }
         case  4:
         if (likely((values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_value)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, 4); __PYX_ERR(0, 661, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, 4); __PYX_ERR(0, 669, __pyx_L3_error)
         }
         case  5:
         if (likely((values[5] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_var)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, 5); __PYX_ERR(0, 661, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, 5); __PYX_ERR(0, 669, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_attribute") < 0)) __PYX_ERR(0, 661, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_attribute") < 0)) __PYX_ERR(0, 669, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 6) {
       goto __pyx_L5_argtuple_error;
@@ -10017,25 +10251,25 @@ static PyObject *__pyx_pw_9adios_mpi_71define_attribute(PyObject *__pyx_self, Py
       values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
       values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
     }
-    __pyx_v_group = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_group == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 661, __pyx_L3_error)
+    __pyx_v_group = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_group == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 669, __pyx_L3_error)
     __pyx_v_name = ((PyObject*)values[1]);
     __pyx_v_path = ((PyObject*)values[2]);
-    __pyx_v_atype = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_atype == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 664, __pyx_L3_error)
+    __pyx_v_atype = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_atype == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 672, __pyx_L3_error)
     __pyx_v_value = ((PyObject*)values[4]);
     __pyx_v_var = ((PyObject*)values[5]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 661, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 669, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.define_attribute", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 662, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_path), (&PyString_Type), 1, "path", 1))) __PYX_ERR(0, 663, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_value), (&PyString_Type), 1, "value", 1))) __PYX_ERR(0, 665, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_var), (&PyString_Type), 1, "var", 1))) __PYX_ERR(0, 666, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 670, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_path), (&PyString_Type), 1, "path", 1))) __PYX_ERR(0, 671, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_value), (&PyString_Type), 1, "value", 1))) __PYX_ERR(0, 673, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_var), (&PyString_Type), 1, "var", 1))) __PYX_ERR(0, 674, __pyx_L1_error)
   __pyx_r = __pyx_pf_9adios_mpi_70define_attribute(__pyx_self, __pyx_v_group, __pyx_v_name, __pyx_v_path, __pyx_v_atype, __pyx_v_value, __pyx_v_var);
 
   /* function exit code */
@@ -10053,7 +10287,7 @@ static PyObject *__pyx_pf_9adios_mpi_70define_attribute(CYTHON_UNUSED PyObject *
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("define_attribute", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_define_attribute(__pyx_v_group, __pyx_v_name, __pyx_v_path, __pyx_v_atype, __pyx_v_value, __pyx_v_var, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 661, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_define_attribute(__pyx_v_group, __pyx_v_name, __pyx_v_path, __pyx_v_atype, __pyx_v_value, __pyx_v_var, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 669, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -10070,7 +10304,7 @@ static PyObject *__pyx_pf_9adios_mpi_70define_attribute(CYTHON_UNUSED PyObject *
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":674
+/* "adios_mpi.pyx":682
  *                                    s2b(var))
  * 
  * cpdef int define_attribute_byvalue (int64_t group,             # <<<<<<<<<<<<<<
@@ -10100,7 +10334,7 @@ static int __pyx_f_9adios_mpi_define_attribute_byvalue(int64_t __pyx_v_group, Py
   int __pyx_t_11;
   __Pyx_RefNannySetupContext("define_attribute_byvalue", 0);
 
-  /* "adios_mpi.pyx":679
+  /* "adios_mpi.pyx":687
  *                                     val):
  *     cdef np.ndarray val_
  *     if isinstance(val, (np.ndarray)):             # <<<<<<<<<<<<<<
@@ -10111,36 +10345,36 @@ static int __pyx_f_9adios_mpi_define_attribute_byvalue(int64_t __pyx_v_group, Py
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "adios_mpi.pyx":680
+    /* "adios_mpi.pyx":688
  *     cdef np.ndarray val_
  *     if isinstance(val, (np.ndarray)):
  *         if val.flags.contiguous:             # <<<<<<<<<<<<<<
  *             val_ = val
  *         else:
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_val, __pyx_n_s_flags); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 680, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_val, __pyx_n_s_flags); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 688, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_contiguous); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 680, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_contiguous); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 688, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 680, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 688, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     if (__pyx_t_2) {
 
-      /* "adios_mpi.pyx":681
+      /* "adios_mpi.pyx":689
  *     if isinstance(val, (np.ndarray)):
  *         if val.flags.contiguous:
  *             val_ = val             # <<<<<<<<<<<<<<
  *         else:
  *             val_ = np.array(val, copy=True)
  */
-      if (!(likely(((__pyx_v_val) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_val, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 681, __pyx_L1_error)
+      if (!(likely(((__pyx_v_val) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_val, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 689, __pyx_L1_error)
       __pyx_t_4 = __pyx_v_val;
       __Pyx_INCREF(__pyx_t_4);
       __pyx_v_val_ = ((PyArrayObject *)__pyx_t_4);
       __pyx_t_4 = 0;
 
-      /* "adios_mpi.pyx":680
+      /* "adios_mpi.pyx":688
  *     cdef np.ndarray val_
  *     if isinstance(val, (np.ndarray)):
  *         if val.flags.contiguous:             # <<<<<<<<<<<<<<
@@ -10150,7 +10384,7 @@ static int __pyx_f_9adios_mpi_define_attribute_byvalue(int64_t __pyx_v_group, Py
       goto __pyx_L4;
     }
 
-    /* "adios_mpi.pyx":683
+    /* "adios_mpi.pyx":691
  *             val_ = val
  *         else:
  *             val_ = np.array(val, copy=True)             # <<<<<<<<<<<<<<
@@ -10158,31 +10392,31 @@ static int __pyx_f_9adios_mpi_define_attribute_byvalue(int64_t __pyx_v_group, Py
  *         val_ = np.array(val)
  */
     /*else*/ {
-      __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 683, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 691, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_array); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 683, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_array); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 691, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 683, __pyx_L1_error)
+      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 691, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_INCREF(__pyx_v_val);
       __Pyx_GIVEREF(__pyx_v_val);
       PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_val);
-      __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 683, __pyx_L1_error)
+      __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 691, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
-      if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_copy, Py_True) < 0) __PYX_ERR(0, 683, __pyx_L1_error)
-      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 683, __pyx_L1_error)
+      if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_copy, Py_True) < 0) __PYX_ERR(0, 691, __pyx_L1_error)
+      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 691, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 683, __pyx_L1_error)
+      if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 691, __pyx_L1_error)
       __pyx_v_val_ = ((PyArrayObject *)__pyx_t_6);
       __pyx_t_6 = 0;
     }
     __pyx_L4:;
 
-    /* "adios_mpi.pyx":679
+    /* "adios_mpi.pyx":687
  *                                     val):
  *     cdef np.ndarray val_
  *     if isinstance(val, (np.ndarray)):             # <<<<<<<<<<<<<<
@@ -10192,7 +10426,7 @@ static int __pyx_f_9adios_mpi_define_attribute_byvalue(int64_t __pyx_v_group, Py
     goto __pyx_L3;
   }
 
-  /* "adios_mpi.pyx":685
+  /* "adios_mpi.pyx":693
  *             val_ = np.array(val, copy=True)
  *     else:
  *         val_ = np.array(val)             # <<<<<<<<<<<<<<
@@ -10200,13 +10434,13 @@ static int __pyx_f_9adios_mpi_define_attribute_byvalue(int64_t __pyx_v_group, Py
  *     atype = np2adiostype(val_.dtype)
  */
   /*else*/ {
-    __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 685, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 693, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_array); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 685, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_array); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 693, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __pyx_t_5 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_4))) {
+    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
       __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
       if (likely(__pyx_t_5)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
@@ -10216,153 +10450,171 @@ static int __pyx_f_9adios_mpi_define_attribute_byvalue(int64_t __pyx_v_group, Py
       }
     }
     if (!__pyx_t_5) {
-      __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_val); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 685, __pyx_L1_error)
+      __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_val); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 693, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
     } else {
-      __pyx_t_3 = PyTuple_New(1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 685, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_3);
-      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5); __pyx_t_5 = NULL;
-      __Pyx_INCREF(__pyx_v_val);
-      __Pyx_GIVEREF(__pyx_v_val);
-      PyTuple_SET_ITEM(__pyx_t_3, 0+1, __pyx_v_val);
-      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_3, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 685, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_6);
-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_4)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_5, __pyx_v_val};
+        __pyx_t_6 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 693, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+        __Pyx_GOTREF(__pyx_t_6);
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_5, __pyx_v_val};
+        __pyx_t_6 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 693, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+        __Pyx_GOTREF(__pyx_t_6);
+      } else
+      #endif
+      {
+        __pyx_t_3 = PyTuple_New(1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 693, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_3);
+        __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5); __pyx_t_5 = NULL;
+        __Pyx_INCREF(__pyx_v_val);
+        __Pyx_GIVEREF(__pyx_v_val);
+        PyTuple_SET_ITEM(__pyx_t_3, 0+1, __pyx_v_val);
+        __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_3, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 693, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_6);
+        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      }
     }
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 685, __pyx_L1_error)
+    if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 693, __pyx_L1_error)
     __pyx_v_val_ = ((PyArrayObject *)__pyx_t_6);
     __pyx_t_6 = 0;
   }
   __pyx_L3:;
 
-  /* "adios_mpi.pyx":687
+  /* "adios_mpi.pyx":695
  *         val_ = np.array(val)
  * 
  *     atype = np2adiostype(val_.dtype)             # <<<<<<<<<<<<<<
  * 
  *     cdef char * pt1
  */
-  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val_), __pyx_n_s_dtype); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 687, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val_), __pyx_n_s_dtype); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 695, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_dtype))))) __PYX_ERR(0, 687, __pyx_L1_error)
-  __pyx_t_4 = __pyx_f_9adios_mpi_np2adiostype(((PyArray_Descr *)__pyx_t_6), 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 687, __pyx_L1_error)
+  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_dtype))))) __PYX_ERR(0, 695, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_9adios_mpi_np2adiostype(((PyArray_Descr *)__pyx_t_6), 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 695, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __pyx_v_atype = __pyx_t_4;
   __pyx_t_4 = 0;
 
-  /* "adios_mpi.pyx":691
+  /* "adios_mpi.pyx":699
  *     cdef char * pt1
  *     cdef char ** pt2
  *     if (val_.dtype.char in ('S', 'U')):             # <<<<<<<<<<<<<<
  *         if (val_.size == 1):
  *             bstr = s2b(str(val))
  */
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val_), __pyx_n_s_dtype); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 691, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val_), __pyx_n_s_dtype); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 699, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_char); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 691, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_char); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 699, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_6, __pyx_n_s_S, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 691, __pyx_L1_error)
+  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_6, __pyx_n_s_S, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 699, __pyx_L1_error)
   if (!__pyx_t_1) {
   } else {
     __pyx_t_2 = __pyx_t_1;
     goto __pyx_L6_bool_binop_done;
   }
-  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_6, __pyx_n_s_U, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 691, __pyx_L1_error)
+  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_6, __pyx_n_s_U, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 699, __pyx_L1_error)
   __pyx_t_2 = __pyx_t_1;
   __pyx_L6_bool_binop_done:;
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "adios_mpi.pyx":692
+    /* "adios_mpi.pyx":700
  *     cdef char ** pt2
  *     if (val_.dtype.char in ('S', 'U')):
  *         if (val_.size == 1):             # <<<<<<<<<<<<<<
  *             bstr = s2b(str(val))
  *             pt1 = PyBytes_AsString(bstr)
  */
-    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val_), __pyx_n_s_size); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 692, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val_), __pyx_n_s_size); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 700, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_4 = __Pyx_PyInt_EqObjC(__pyx_t_6, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 692, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyInt_EqObjC(__pyx_t_6, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 700, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 692, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 700, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     if (__pyx_t_1) {
 
-      /* "adios_mpi.pyx":693
+      /* "adios_mpi.pyx":701
  *     if (val_.dtype.char in ('S', 'U')):
  *         if (val_.size == 1):
  *             bstr = s2b(str(val))             # <<<<<<<<<<<<<<
  *             pt1 = PyBytes_AsString(bstr)
  *             adios_define_attribute_byvalue (group,
  */
-      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 693, __pyx_L1_error)
+      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 701, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_INCREF(__pyx_v_val);
       __Pyx_GIVEREF(__pyx_v_val);
       PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_val);
-      __pyx_t_6 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_4, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 693, __pyx_L1_error)
+      __pyx_t_6 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_4, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 701, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-      if (!(likely(PyString_CheckExact(__pyx_t_6))||((__pyx_t_6) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_6)->tp_name), 0))) __PYX_ERR(0, 693, __pyx_L1_error)
-      __pyx_t_4 = __pyx_f_9adios_mpi_s2b(((PyObject*)__pyx_t_6), 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 693, __pyx_L1_error)
+      if (!(likely(PyString_CheckExact(__pyx_t_6))||((__pyx_t_6) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_6)->tp_name), 0))) __PYX_ERR(0, 701, __pyx_L1_error)
+      __pyx_t_4 = __pyx_f_9adios_mpi_s2b(((PyObject*)__pyx_t_6), 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 701, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __pyx_v_bstr = ((PyObject*)__pyx_t_4);
       __pyx_t_4 = 0;
 
-      /* "adios_mpi.pyx":694
+      /* "adios_mpi.pyx":702
  *         if (val_.size == 1):
  *             bstr = s2b(str(val))
  *             pt1 = PyBytes_AsString(bstr)             # <<<<<<<<<<<<<<
  *             adios_define_attribute_byvalue (group,
  *                                             s2b(name),
  */
-      __pyx_t_7 = PyBytes_AsString(__pyx_v_bstr); if (unlikely(__pyx_t_7 == NULL)) __PYX_ERR(0, 694, __pyx_L1_error)
+      __pyx_t_7 = PyBytes_AsString(__pyx_v_bstr); if (unlikely(__pyx_t_7 == NULL)) __PYX_ERR(0, 702, __pyx_L1_error)
       __pyx_v_pt1 = __pyx_t_7;
 
-      /* "adios_mpi.pyx":696
+      /* "adios_mpi.pyx":704
  *             pt1 = PyBytes_AsString(bstr)
  *             adios_define_attribute_byvalue (group,
  *                                             s2b(name),             # <<<<<<<<<<<<<<
  *                                             s2b(path),
  *                                             DATATYPE.string,
  */
-      __pyx_t_4 = __pyx_f_9adios_mpi_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 696, __pyx_L1_error)
+      __pyx_t_4 = __pyx_f_9adios_mpi_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 704, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_7 = __Pyx_PyObject_AsString(__pyx_t_4); if (unlikely((!__pyx_t_7) && PyErr_Occurred())) __PYX_ERR(0, 696, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_AsString(__pyx_t_4); if (unlikely((!__pyx_t_7) && PyErr_Occurred())) __PYX_ERR(0, 704, __pyx_L1_error)
 
-      /* "adios_mpi.pyx":697
+      /* "adios_mpi.pyx":705
  *             adios_define_attribute_byvalue (group,
  *                                             s2b(name),
  *                                             s2b(path),             # <<<<<<<<<<<<<<
  *                                             DATATYPE.string,
  *                                             1,
  */
-      __pyx_t_6 = __pyx_f_9adios_mpi_s2b(__pyx_v_path, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 697, __pyx_L1_error)
+      __pyx_t_6 = __pyx_f_9adios_mpi_s2b(__pyx_v_path, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 705, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
-      __pyx_t_8 = __Pyx_PyObject_AsString(__pyx_t_6); if (unlikely((!__pyx_t_8) && PyErr_Occurred())) __PYX_ERR(0, 697, __pyx_L1_error)
+      __pyx_t_8 = __Pyx_PyObject_AsString(__pyx_t_6); if (unlikely((!__pyx_t_8) && PyErr_Occurred())) __PYX_ERR(0, 705, __pyx_L1_error)
 
-      /* "adios_mpi.pyx":698
+      /* "adios_mpi.pyx":706
  *                                             s2b(name),
  *                                             s2b(path),
  *                                             DATATYPE.string,             # <<<<<<<<<<<<<<
  *                                             1,
  *                                             <void *> pt1)
  */
-      __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 698, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 706, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_string); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 698, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_string); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 706, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      __pyx_t_9 = ((ADIOS_DATATYPES)__Pyx_PyInt_As_ADIOS_DATATYPES(__pyx_t_5)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 698, __pyx_L1_error)
+      __pyx_t_9 = ((ADIOS_DATATYPES)__Pyx_PyInt_As_ADIOS_DATATYPES(__pyx_t_5)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 706, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-      /* "adios_mpi.pyx":695
+      /* "adios_mpi.pyx":703
  *             bstr = s2b(str(val))
  *             pt1 = PyBytes_AsString(bstr)
  *             adios_define_attribute_byvalue (group,             # <<<<<<<<<<<<<<
@@ -10373,7 +10625,7 @@ static int __pyx_f_9adios_mpi_define_attribute_byvalue(int64_t __pyx_v_group, Py
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-      /* "adios_mpi.pyx":692
+      /* "adios_mpi.pyx":700
  *     cdef char ** pt2
  *     if (val_.dtype.char in ('S', 'U')):
  *         if (val_.size == 1):             # <<<<<<<<<<<<<<
@@ -10383,7 +10635,7 @@ static int __pyx_f_9adios_mpi_define_attribute_byvalue(int64_t __pyx_v_group, Py
       goto __pyx_L8;
     }
 
-    /* "adios_mpi.pyx":702
+    /* "adios_mpi.pyx":710
  *                                             <void *> pt1)
  *         else:
  *             pt2 = to_cstring_array(val)             # <<<<<<<<<<<<<<
@@ -10393,53 +10645,53 @@ static int __pyx_f_9adios_mpi_define_attribute_byvalue(int64_t __pyx_v_group, Py
     /*else*/ {
       __pyx_v_pt2 = __pyx_f_9adios_mpi_to_cstring_array(__pyx_v_val);
 
-      /* "adios_mpi.pyx":704
+      /* "adios_mpi.pyx":712
  *             pt2 = to_cstring_array(val)
  *             adios_define_attribute_byvalue (group,
  *                                             s2b(name),             # <<<<<<<<<<<<<<
  *                                             s2b(path),
  *                                             DATATYPE.string_array,
  */
-      __pyx_t_6 = __pyx_f_9adios_mpi_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 704, __pyx_L1_error)
+      __pyx_t_6 = __pyx_f_9adios_mpi_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 712, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
-      __pyx_t_8 = __Pyx_PyObject_AsString(__pyx_t_6); if (unlikely((!__pyx_t_8) && PyErr_Occurred())) __PYX_ERR(0, 704, __pyx_L1_error)
+      __pyx_t_8 = __Pyx_PyObject_AsString(__pyx_t_6); if (unlikely((!__pyx_t_8) && PyErr_Occurred())) __PYX_ERR(0, 712, __pyx_L1_error)
 
-      /* "adios_mpi.pyx":705
+      /* "adios_mpi.pyx":713
  *             adios_define_attribute_byvalue (group,
  *                                             s2b(name),
  *                                             s2b(path),             # <<<<<<<<<<<<<<
  *                                             DATATYPE.string_array,
  *                                             len(val),
  */
-      __pyx_t_4 = __pyx_f_9adios_mpi_s2b(__pyx_v_path, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 705, __pyx_L1_error)
+      __pyx_t_4 = __pyx_f_9adios_mpi_s2b(__pyx_v_path, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 713, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_7 = __Pyx_PyObject_AsString(__pyx_t_4); if (unlikely((!__pyx_t_7) && PyErr_Occurred())) __PYX_ERR(0, 705, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_AsString(__pyx_t_4); if (unlikely((!__pyx_t_7) && PyErr_Occurred())) __PYX_ERR(0, 713, __pyx_L1_error)
 
-      /* "adios_mpi.pyx":706
+      /* "adios_mpi.pyx":714
  *                                             s2b(name),
  *                                             s2b(path),
  *                                             DATATYPE.string_array,             # <<<<<<<<<<<<<<
  *                                             len(val),
  *                                             <void *> pt2)
  */
-      __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 706, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 714, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_string_array); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 706, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_string_array); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 714, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      __pyx_t_9 = ((ADIOS_DATATYPES)__Pyx_PyInt_As_ADIOS_DATATYPES(__pyx_t_3)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 706, __pyx_L1_error)
+      __pyx_t_9 = ((ADIOS_DATATYPES)__Pyx_PyInt_As_ADIOS_DATATYPES(__pyx_t_3)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 714, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-      /* "adios_mpi.pyx":707
+      /* "adios_mpi.pyx":715
  *                                             s2b(path),
  *                                             DATATYPE.string_array,
  *                                             len(val),             # <<<<<<<<<<<<<<
  *                                             <void *> pt2)
  *             free(pt2)
  */
-      __pyx_t_10 = PyObject_Length(__pyx_v_val); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 707, __pyx_L1_error)
+      __pyx_t_10 = PyObject_Length(__pyx_v_val); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 715, __pyx_L1_error)
 
-      /* "adios_mpi.pyx":703
+      /* "adios_mpi.pyx":711
  *         else:
  *             pt2 = to_cstring_array(val)
  *             adios_define_attribute_byvalue (group,             # <<<<<<<<<<<<<<
@@ -10450,7 +10702,7 @@ static int __pyx_f_9adios_mpi_define_attribute_byvalue(int64_t __pyx_v_group, Py
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-      /* "adios_mpi.pyx":709
+      /* "adios_mpi.pyx":717
  *                                             len(val),
  *                                             <void *> pt2)
  *             free(pt2)             # <<<<<<<<<<<<<<
@@ -10461,7 +10713,7 @@ static int __pyx_f_9adios_mpi_define_attribute_byvalue(int64_t __pyx_v_group, Py
     }
     __pyx_L8:;
 
-    /* "adios_mpi.pyx":691
+    /* "adios_mpi.pyx":699
  *     cdef char * pt1
  *     cdef char ** pt2
  *     if (val_.dtype.char in ('S', 'U')):             # <<<<<<<<<<<<<<
@@ -10471,7 +10723,7 @@ static int __pyx_f_9adios_mpi_define_attribute_byvalue(int64_t __pyx_v_group, Py
     goto __pyx_L5;
   }
 
-  /* "adios_mpi.pyx":711
+  /* "adios_mpi.pyx":719
  *             free(pt2)
  *     else:
  *         adios_define_attribute_byvalue (group,             # <<<<<<<<<<<<<<
@@ -10480,50 +10732,50 @@ static int __pyx_f_9adios_mpi_define_attribute_byvalue(int64_t __pyx_v_group, Py
  */
   /*else*/ {
 
-    /* "adios_mpi.pyx":712
+    /* "adios_mpi.pyx":720
  *     else:
  *         adios_define_attribute_byvalue (group,
  *                                         s2b(name),             # <<<<<<<<<<<<<<
  *                                         s2b(path),
  *                                         <ADIOS_DATATYPES> atype,
  */
-    __pyx_t_4 = __pyx_f_9adios_mpi_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 712, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_9adios_mpi_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 720, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_7 = __Pyx_PyObject_AsString(__pyx_t_4); if (unlikely((!__pyx_t_7) && PyErr_Occurred())) __PYX_ERR(0, 712, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyObject_AsString(__pyx_t_4); if (unlikely((!__pyx_t_7) && PyErr_Occurred())) __PYX_ERR(0, 720, __pyx_L1_error)
 
-    /* "adios_mpi.pyx":713
+    /* "adios_mpi.pyx":721
  *         adios_define_attribute_byvalue (group,
  *                                         s2b(name),
  *                                         s2b(path),             # <<<<<<<<<<<<<<
  *                                         <ADIOS_DATATYPES> atype,
  *                                         val_.size,
  */
-    __pyx_t_6 = __pyx_f_9adios_mpi_s2b(__pyx_v_path, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 713, __pyx_L1_error)
+    __pyx_t_6 = __pyx_f_9adios_mpi_s2b(__pyx_v_path, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 721, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_8 = __Pyx_PyObject_AsString(__pyx_t_6); if (unlikely((!__pyx_t_8) && PyErr_Occurred())) __PYX_ERR(0, 713, __pyx_L1_error)
+    __pyx_t_8 = __Pyx_PyObject_AsString(__pyx_t_6); if (unlikely((!__pyx_t_8) && PyErr_Occurred())) __PYX_ERR(0, 721, __pyx_L1_error)
 
-    /* "adios_mpi.pyx":714
+    /* "adios_mpi.pyx":722
  *                                         s2b(name),
  *                                         s2b(path),
  *                                         <ADIOS_DATATYPES> atype,             # <<<<<<<<<<<<<<
  *                                         val_.size,
  *                                         <void *> val_.data)
  */
-    __pyx_t_9 = ((ADIOS_DATATYPES)__Pyx_PyInt_As_ADIOS_DATATYPES(__pyx_v_atype)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 714, __pyx_L1_error)
+    __pyx_t_9 = ((ADIOS_DATATYPES)__Pyx_PyInt_As_ADIOS_DATATYPES(__pyx_v_atype)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 722, __pyx_L1_error)
 
-    /* "adios_mpi.pyx":715
+    /* "adios_mpi.pyx":723
  *                                         s2b(path),
  *                                         <ADIOS_DATATYPES> atype,
  *                                         val_.size,             # <<<<<<<<<<<<<<
  *                                         <void *> val_.data)
  * 
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val_), __pyx_n_s_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 715, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val_), __pyx_n_s_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 723, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_11 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 715, __pyx_L1_error)
+    __pyx_t_11 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 723, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "adios_mpi.pyx":711
+    /* "adios_mpi.pyx":719
  *             free(pt2)
  *     else:
  *         adios_define_attribute_byvalue (group,             # <<<<<<<<<<<<<<
@@ -10536,7 +10788,7 @@ static int __pyx_f_9adios_mpi_define_attribute_byvalue(int64_t __pyx_v_group, Py
   }
   __pyx_L5:;
 
-  /* "adios_mpi.pyx":674
+  /* "adios_mpi.pyx":682
  *                                    s2b(var))
  * 
  * cpdef int define_attribute_byvalue (int64_t group,             # <<<<<<<<<<<<<<
@@ -10595,21 +10847,21 @@ static PyObject *__pyx_pw_9adios_mpi_73define_attribute_byvalue(PyObject *__pyx_
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_attribute_byvalue", 1, 4, 4, 1); __PYX_ERR(0, 674, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_attribute_byvalue", 1, 4, 4, 1); __PYX_ERR(0, 682, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_path)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_attribute_byvalue", 1, 4, 4, 2); __PYX_ERR(0, 674, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_attribute_byvalue", 1, 4, 4, 2); __PYX_ERR(0, 682, __pyx_L3_error)
         }
         case  3:
         if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_val)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_attribute_byvalue", 1, 4, 4, 3); __PYX_ERR(0, 674, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_attribute_byvalue", 1, 4, 4, 3); __PYX_ERR(0, 682, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_attribute_byvalue") < 0)) __PYX_ERR(0, 674, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_attribute_byvalue") < 0)) __PYX_ERR(0, 682, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
       goto __pyx_L5_argtuple_error;
@@ -10619,21 +10871,21 @@ static PyObject *__pyx_pw_9adios_mpi_73define_attribute_byvalue(PyObject *__pyx_
       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
       values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
     }
-    __pyx_v_group = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_group == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 674, __pyx_L3_error)
+    __pyx_v_group = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_group == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 682, __pyx_L3_error)
     __pyx_v_name = ((PyObject*)values[1]);
     __pyx_v_path = ((PyObject*)values[2]);
     __pyx_v_val = values[3];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("define_attribute_byvalue", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 674, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("define_attribute_byvalue", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 682, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.define_attribute_byvalue", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 675, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_path), (&PyString_Type), 1, "path", 1))) __PYX_ERR(0, 676, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 683, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_path), (&PyString_Type), 1, "path", 1))) __PYX_ERR(0, 684, __pyx_L1_error)
   __pyx_r = __pyx_pf_9adios_mpi_72define_attribute_byvalue(__pyx_self, __pyx_v_group, __pyx_v_name, __pyx_v_path, __pyx_v_val);
 
   /* function exit code */
@@ -10651,7 +10903,7 @@ static PyObject *__pyx_pf_9adios_mpi_72define_attribute_byvalue(CYTHON_UNUSED Py
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("define_attribute_byvalue", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_define_attribute_byvalue(__pyx_v_group, __pyx_v_name, __pyx_v_path, __pyx_v_val, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 674, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_define_attribute_byvalue(__pyx_v_group, __pyx_v_name, __pyx_v_path, __pyx_v_val, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 682, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -10668,7 +10920,7 @@ static PyObject *__pyx_pf_9adios_mpi_72define_attribute_byvalue(CYTHON_UNUSED Py
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":718
+/* "adios_mpi.pyx":726
  *                                         <void *> val_.data)
  * 
  * cpdef int select_method (int64_t group,             # <<<<<<<<<<<<<<
@@ -10698,40 +10950,40 @@ static int __pyx_f_9adios_mpi_select_method(int64_t __pyx_v_group, PyObject *__p
     }
   }
 
-  /* "adios_mpi.pyx":723
+  /* "adios_mpi.pyx":731
  *                          str base_path = ""):
  *     return adios_select_method (group,
  *                                 s2b(method),             # <<<<<<<<<<<<<<
  *                                 s2b(parameters),
  *                                 s2b(base_path))
  */
-  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_method, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 723, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_method, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 731, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 723, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 731, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":724
+  /* "adios_mpi.pyx":732
  *     return adios_select_method (group,
  *                                 s2b(method),
  *                                 s2b(parameters),             # <<<<<<<<<<<<<<
  *                                 s2b(base_path))
  * 
  */
-  __pyx_t_3 = __pyx_f_9adios_mpi_s2b(__pyx_v_parameters, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 724, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_9adios_mpi_s2b(__pyx_v_parameters, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 732, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 724, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_AsString(__pyx_t_3); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 732, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":725
+  /* "adios_mpi.pyx":733
  *                                 s2b(method),
  *                                 s2b(parameters),
  *                                 s2b(base_path))             # <<<<<<<<<<<<<<
  * 
  * cpdef int set_transform (int64_t var_id, str transform_type_str):
  */
-  __pyx_t_5 = __pyx_f_9adios_mpi_s2b(__pyx_v_base_path, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 725, __pyx_L1_error)
+  __pyx_t_5 = __pyx_f_9adios_mpi_s2b(__pyx_v_base_path, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 733, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_t_5); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(0, 725, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_t_5); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(0, 733, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":722
+  /* "adios_mpi.pyx":730
  *                          str parameters = "",
  *                          str base_path = ""):
  *     return adios_select_method (group,             # <<<<<<<<<<<<<<
@@ -10744,7 +10996,7 @@ static int __pyx_f_9adios_mpi_select_method(int64_t __pyx_v_group, PyObject *__p
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":718
+  /* "adios_mpi.pyx":726
  *                                         <void *> val_.data)
  * 
  * cpdef int select_method (int64_t group,             # <<<<<<<<<<<<<<
@@ -10799,7 +11051,7 @@ static PyObject *__pyx_pw_9adios_mpi_75select_method(PyObject *__pyx_self, PyObj
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_method)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("select_method", 0, 2, 4, 1); __PYX_ERR(0, 718, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("select_method", 0, 2, 4, 1); __PYX_ERR(0, 726, __pyx_L3_error)
         }
         case  2:
         if (kw_args > 0) {
@@ -10813,7 +11065,7 @@ static PyObject *__pyx_pw_9adios_mpi_75select_method(PyObject *__pyx_self, PyObj
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "select_method") < 0)) __PYX_ERR(0, 718, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "select_method") < 0)) __PYX_ERR(0, 726, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -10825,22 +11077,22 @@ static PyObject *__pyx_pw_9adios_mpi_75select_method(PyObject *__pyx_self, PyObj
         default: goto __pyx_L5_argtuple_error;
       }
     }
-    __pyx_v_group = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_group == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 718, __pyx_L3_error)
+    __pyx_v_group = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_group == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 726, __pyx_L3_error)
     __pyx_v_method = ((PyObject*)values[1]);
     __pyx_v_parameters = ((PyObject*)values[2]);
     __pyx_v_base_path = ((PyObject*)values[3]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("select_method", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 718, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("select_method", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 726, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.select_method", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_method), (&PyString_Type), 1, "method", 1))) __PYX_ERR(0, 719, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_parameters), (&PyString_Type), 1, "parameters", 1))) __PYX_ERR(0, 720, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_base_path), (&PyString_Type), 1, "base_path", 1))) __PYX_ERR(0, 721, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_method), (&PyString_Type), 1, "method", 1))) __PYX_ERR(0, 727, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_parameters), (&PyString_Type), 1, "parameters", 1))) __PYX_ERR(0, 728, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_base_path), (&PyString_Type), 1, "base_path", 1))) __PYX_ERR(0, 729, __pyx_L1_error)
   __pyx_r = __pyx_pf_9adios_mpi_74select_method(__pyx_self, __pyx_v_group, __pyx_v_method, __pyx_v_parameters, __pyx_v_base_path);
 
   /* function exit code */
@@ -10864,7 +11116,7 @@ static PyObject *__pyx_pf_9adios_mpi_74select_method(CYTHON_UNUSED PyObject *__p
   __pyx_t_2.parameters = __pyx_v_parameters;
   __pyx_t_2.base_path = __pyx_v_base_path;
   __pyx_t_1 = __pyx_f_9adios_mpi_select_method(__pyx_v_group, __pyx_v_method, 0, &__pyx_t_2); 
-  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 718, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 726, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
@@ -10881,7 +11133,7 @@ static PyObject *__pyx_pf_9adios_mpi_74select_method(CYTHON_UNUSED PyObject *__p
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":727
+/* "adios_mpi.pyx":735
  *                                 s2b(base_path))
  * 
  * cpdef int set_transform (int64_t var_id, str transform_type_str):             # <<<<<<<<<<<<<<
@@ -10897,21 +11149,21 @@ static int __pyx_f_9adios_mpi_set_transform(int64_t __pyx_v_var_id, PyObject *__
   char const *__pyx_t_2;
   __Pyx_RefNannySetupContext("set_transform", 0);
 
-  /* "adios_mpi.pyx":728
+  /* "adios_mpi.pyx":736
  * 
  * cpdef int set_transform (int64_t var_id, str transform_type_str):
  *     return adios_set_transform (var_id, s2b(transform_type_str))             # <<<<<<<<<<<<<<
  * 
  * cpdef void set_max_buffer_size (int64_t max_buffer_size_MB):
  */
-  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_transform_type_str, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 728, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_transform_type_str, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 736, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 728, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 736, __pyx_L1_error)
   __pyx_r = adios_set_transform(__pyx_v_var_id, __pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":727
+  /* "adios_mpi.pyx":735
  *                                 s2b(base_path))
  * 
  * cpdef int set_transform (int64_t var_id, str transform_type_str):             # <<<<<<<<<<<<<<
@@ -10958,11 +11210,11 @@ static PyObject *__pyx_pw_9adios_mpi_77set_transform(PyObject *__pyx_self, PyObj
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_transform_type_str)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("set_transform", 1, 2, 2, 1); __PYX_ERR(0, 727, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("set_transform", 1, 2, 2, 1); __PYX_ERR(0, 735, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_transform") < 0)) __PYX_ERR(0, 727, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_transform") < 0)) __PYX_ERR(0, 735, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -10970,18 +11222,18 @@ static PyObject *__pyx_pw_9adios_mpi_77set_transform(PyObject *__pyx_self, PyObj
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
     }
-    __pyx_v_var_id = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_var_id == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 727, __pyx_L3_error)
+    __pyx_v_var_id = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_var_id == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 735, __pyx_L3_error)
     __pyx_v_transform_type_str = ((PyObject*)values[1]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("set_transform", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 727, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("set_transform", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 735, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.set_transform", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_transform_type_str), (&PyString_Type), 1, "transform_type_str", 1))) __PYX_ERR(0, 727, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_transform_type_str), (&PyString_Type), 1, "transform_type_str", 1))) __PYX_ERR(0, 735, __pyx_L1_error)
   __pyx_r = __pyx_pf_9adios_mpi_76set_transform(__pyx_self, __pyx_v_var_id, __pyx_v_transform_type_str);
 
   /* function exit code */
@@ -10999,7 +11251,7 @@ static PyObject *__pyx_pf_9adios_mpi_76set_transform(CYTHON_UNUSED PyObject *__p
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("set_transform", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_set_transform(__pyx_v_var_id, __pyx_v_transform_type_str, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 727, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_set_transform(__pyx_v_var_id, __pyx_v_transform_type_str, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 735, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -11016,7 +11268,7 @@ static PyObject *__pyx_pf_9adios_mpi_76set_transform(CYTHON_UNUSED PyObject *__p
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":730
+/* "adios_mpi.pyx":738
  *     return adios_set_transform (var_id, s2b(transform_type_str))
  * 
  * cpdef void set_max_buffer_size (int64_t max_buffer_size_MB):             # <<<<<<<<<<<<<<
@@ -11029,7 +11281,7 @@ static void __pyx_f_9adios_mpi_set_max_buffer_size(int64_t __pyx_v_max_buffer_si
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("set_max_buffer_size", 0);
 
-  /* "adios_mpi.pyx":731
+  /* "adios_mpi.pyx":739
  * 
  * cpdef void set_max_buffer_size (int64_t max_buffer_size_MB):
  *     adios_set_max_buffer_size (max_buffer_size_MB)             # <<<<<<<<<<<<<<
@@ -11038,7 +11290,7 @@ static void __pyx_f_9adios_mpi_set_max_buffer_size(int64_t __pyx_v_max_buffer_si
  */
   adios_set_max_buffer_size(__pyx_v_max_buffer_size_MB);
 
-  /* "adios_mpi.pyx":730
+  /* "adios_mpi.pyx":738
  *     return adios_set_transform (var_id, s2b(transform_type_str))
  * 
  * cpdef void set_max_buffer_size (int64_t max_buffer_size_MB):             # <<<<<<<<<<<<<<
@@ -11059,7 +11311,7 @@ static PyObject *__pyx_pw_9adios_mpi_79set_max_buffer_size(PyObject *__pyx_self,
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("set_max_buffer_size (wrapper)", 0);
   assert(__pyx_arg_max_buffer_size_MB); {
-    __pyx_v_max_buffer_size_MB = __Pyx_PyInt_As_int64_t(__pyx_arg_max_buffer_size_MB); if (unlikely((__pyx_v_max_buffer_size_MB == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 730, __pyx_L3_error)
+    __pyx_v_max_buffer_size_MB = __Pyx_PyInt_As_int64_t(__pyx_arg_max_buffer_size_MB); if (unlikely((__pyx_v_max_buffer_size_MB == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 738, __pyx_L3_error)
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L3_error:;
@@ -11080,7 +11332,7 @@ static PyObject *__pyx_pf_9adios_mpi_78set_max_buffer_size(CYTHON_UNUSED PyObjec
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("set_max_buffer_size", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_void_to_None(__pyx_f_9adios_mpi_set_max_buffer_size(__pyx_v_max_buffer_size_MB, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 730, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_void_to_None(__pyx_f_9adios_mpi_set_max_buffer_size(__pyx_v_max_buffer_size_MB, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 738, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -11097,7 +11349,7 @@ static PyObject *__pyx_pf_9adios_mpi_78set_max_buffer_size(CYTHON_UNUSED PyObjec
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":733
+/* "adios_mpi.pyx":741
  *     adios_set_max_buffer_size (max_buffer_size_MB)
  * 
  * cpdef int set_time_aggregation (int64_t groupid,             # <<<<<<<<<<<<<<
@@ -11111,7 +11363,7 @@ static int __pyx_f_9adios_mpi_set_time_aggregation(int64_t __pyx_v_groupid, uint
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("set_time_aggregation", 0);
 
-  /* "adios_mpi.pyx":736
+  /* "adios_mpi.pyx":744
  *                                       uint64_t buffersize,
  *                                       int64_t syncgroupid):
  *     return adios_set_time_aggregation (groupid,             # <<<<<<<<<<<<<<
@@ -11121,7 +11373,7 @@ static int __pyx_f_9adios_mpi_set_time_aggregation(int64_t __pyx_v_groupid, uint
   __pyx_r = adios_set_time_aggregation(__pyx_v_groupid, __pyx_v_buffersize, __pyx_v_syncgroupid);
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":733
+  /* "adios_mpi.pyx":741
  *     adios_set_max_buffer_size (max_buffer_size_MB)
  * 
  * cpdef int set_time_aggregation (int64_t groupid,             # <<<<<<<<<<<<<<
@@ -11166,16 +11418,16 @@ static PyObject *__pyx_pw_9adios_mpi_81set_time_aggregation(PyObject *__pyx_self
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_buffersize)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("set_time_aggregation", 1, 3, 3, 1); __PYX_ERR(0, 733, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("set_time_aggregation", 1, 3, 3, 1); __PYX_ERR(0, 741, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_syncgroupid)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("set_time_aggregation", 1, 3, 3, 2); __PYX_ERR(0, 733, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("set_time_aggregation", 1, 3, 3, 2); __PYX_ERR(0, 741, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_time_aggregation") < 0)) __PYX_ERR(0, 733, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_time_aggregation") < 0)) __PYX_ERR(0, 741, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -11184,13 +11436,13 @@ static PyObject *__pyx_pw_9adios_mpi_81set_time_aggregation(PyObject *__pyx_self
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
     }
-    __pyx_v_groupid = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_groupid == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 733, __pyx_L3_error)
-    __pyx_v_buffersize = __Pyx_PyInt_As_uint64_t(values[1]); if (unlikely((__pyx_v_buffersize == (uint64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 734, __pyx_L3_error)
-    __pyx_v_syncgroupid = __Pyx_PyInt_As_int64_t(values[2]); if (unlikely((__pyx_v_syncgroupid == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 735, __pyx_L3_error)
+    __pyx_v_groupid = __Pyx_PyInt_As_int64_t(values[0]); if (unlikely((__pyx_v_groupid == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 741, __pyx_L3_error)
+    __pyx_v_buffersize = __Pyx_PyInt_As_uint64_t(values[1]); if (unlikely((__pyx_v_buffersize == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 742, __pyx_L3_error)
+    __pyx_v_syncgroupid = __Pyx_PyInt_As_int64_t(values[2]); if (unlikely((__pyx_v_syncgroupid == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 743, __pyx_L3_error)
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("set_time_aggregation", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 733, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("set_time_aggregation", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 741, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.set_time_aggregation", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -11209,7 +11461,7 @@ static PyObject *__pyx_pf_9adios_mpi_80set_time_aggregation(CYTHON_UNUSED PyObje
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("set_time_aggregation", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_set_time_aggregation(__pyx_v_groupid, __pyx_v_buffersize, __pyx_v_syncgroupid, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 733, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_f_9adios_mpi_set_time_aggregation(__pyx_v_groupid, __pyx_v_buffersize, __pyx_v_syncgroupid, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 741, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -11226,7 +11478,7 @@ static PyObject *__pyx_pf_9adios_mpi_80set_time_aggregation(CYTHON_UNUSED PyObje
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":745
+/* "adios_mpi.pyx":753
  * ## ====================
  * 
  * cpdef np.dtype adios2npdtype(ADIOS_DATATYPES t, int strlen = 1):             # <<<<<<<<<<<<<<
@@ -11250,7 +11502,7 @@ static PyArray_Descr *__pyx_f_9adios_mpi_adios2npdtype(ADIOS_DATATYPES __pyx_v_t
     }
   }
 
-  /* "adios_mpi.pyx":747
+  /* "adios_mpi.pyx":755
  * cpdef np.dtype adios2npdtype(ADIOS_DATATYPES t, int strlen = 1):
  *     """ strlen apply only to string type """
  *     cdef np.dtype ntype = None             # <<<<<<<<<<<<<<
@@ -11260,7 +11512,7 @@ static PyArray_Descr *__pyx_f_9adios_mpi_adios2npdtype(ADIOS_DATATYPES __pyx_v_t
   __Pyx_INCREF(Py_None);
   __pyx_v_ntype = ((PyArray_Descr *)Py_None);
 
-  /* "adios_mpi.pyx":748
+  /* "adios_mpi.pyx":756
  *     """ strlen apply only to string type """
  *     cdef np.dtype ntype = None
  *     if t == adios_byte:             # <<<<<<<<<<<<<<
@@ -11270,30 +11522,30 @@ static PyArray_Descr *__pyx_f_9adios_mpi_adios2npdtype(ADIOS_DATATYPES __pyx_v_t
   switch (__pyx_v_t) {
     case adios_byte:
 
-    /* "adios_mpi.pyx":749
+    /* "adios_mpi.pyx":757
  *     cdef np.dtype ntype = None
  *     if t == adios_byte:
  *         ntype = np.dtype(np.int8)             # <<<<<<<<<<<<<<
  *     elif t == adios_short:
  *         ntype = np.dtype(np.int16)
  */
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 749, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 757, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_int8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 749, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_int8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 757, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 749, __pyx_L1_error)
+    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 757, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_GIVEREF(__pyx_t_2);
     PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
     __pyx_t_2 = 0;
-    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 749, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 757, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF_SET(__pyx_v_ntype, ((PyArray_Descr *)__pyx_t_2));
     __pyx_t_2 = 0;
 
-    /* "adios_mpi.pyx":748
+    /* "adios_mpi.pyx":756
  *     """ strlen apply only to string type """
  *     cdef np.dtype ntype = None
  *     if t == adios_byte:             # <<<<<<<<<<<<<<
@@ -11302,7 +11554,7 @@ static PyArray_Descr *__pyx_f_9adios_mpi_adios2npdtype(ADIOS_DATATYPES __pyx_v_t
  */
     break;
 
-    /* "adios_mpi.pyx":750
+    /* "adios_mpi.pyx":758
  *     if t == adios_byte:
  *         ntype = np.dtype(np.int8)
  *     elif t == adios_short:             # <<<<<<<<<<<<<<
@@ -11311,30 +11563,30 @@ static PyArray_Descr *__pyx_f_9adios_mpi_adios2npdtype(ADIOS_DATATYPES __pyx_v_t
  */
     case adios_short:
 
-    /* "adios_mpi.pyx":751
+    /* "adios_mpi.pyx":759
  *         ntype = np.dtype(np.int8)
  *     elif t == adios_short:
  *         ntype = np.dtype(np.int16)             # <<<<<<<<<<<<<<
  *     elif t == adios_integer:
  *         ntype = np.dtype(np.int32)
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 751, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 759, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_int16); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 751, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_int16); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 759, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 751, __pyx_L1_error)
+    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 759, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_GIVEREF(__pyx_t_1);
     PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
     __pyx_t_1 = 0;
-    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 751, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 759, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF_SET(__pyx_v_ntype, ((PyArray_Descr *)__pyx_t_1));
     __pyx_t_1 = 0;
 
-    /* "adios_mpi.pyx":750
+    /* "adios_mpi.pyx":758
  *     if t == adios_byte:
  *         ntype = np.dtype(np.int8)
  *     elif t == adios_short:             # <<<<<<<<<<<<<<
@@ -11343,7 +11595,7 @@ static PyArray_Descr *__pyx_f_9adios_mpi_adios2npdtype(ADIOS_DATATYPES __pyx_v_t
  */
     break;
 
-    /* "adios_mpi.pyx":752
+    /* "adios_mpi.pyx":760
  *     elif t == adios_short:
  *         ntype = np.dtype(np.int16)
  *     elif t == adios_integer:             # <<<<<<<<<<<<<<
@@ -11352,30 +11604,30 @@ static PyArray_Descr *__pyx_f_9adios_mpi_adios2npdtype(ADIOS_DATATYPES __pyx_v_t
  */
     case adios_integer:
 
-    /* "adios_mpi.pyx":753
+    /* "adios_mpi.pyx":761
  *         ntype = np.dtype(np.int16)
  *     elif t == adios_integer:
  *         ntype = np.dtype(np.int32)             # <<<<<<<<<<<<<<
  *     elif t == adios_long:
  *         ntype = np.dtype(np.int64)
  */
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 753, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 761, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_int32); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 753, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_int32); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 761, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 753, __pyx_L1_error)
+    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 761, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_GIVEREF(__pyx_t_2);
     PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
     __pyx_t_2 = 0;
-    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 753, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 761, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF_SET(__pyx_v_ntype, ((PyArray_Descr *)__pyx_t_2));
     __pyx_t_2 = 0;
 
-    /* "adios_mpi.pyx":752
+    /* "adios_mpi.pyx":760
  *     elif t == adios_short:
  *         ntype = np.dtype(np.int16)
  *     elif t == adios_integer:             # <<<<<<<<<<<<<<
@@ -11384,7 +11636,7 @@ static PyArray_Descr *__pyx_f_9adios_mpi_adios2npdtype(ADIOS_DATATYPES __pyx_v_t
  */
     break;
 
-    /* "adios_mpi.pyx":754
+    /* "adios_mpi.pyx":762
  *     elif t == adios_integer:
  *         ntype = np.dtype(np.int32)
  *     elif t == adios_long:             # <<<<<<<<<<<<<<
@@ -11393,30 +11645,30 @@ static PyArray_Descr *__pyx_f_9adios_mpi_adios2npdtype(ADIOS_DATATYPES __pyx_v_t
  */
     case adios_long:
 
-    /* "adios_mpi.pyx":755
+    /* "adios_mpi.pyx":763
  *         ntype = np.dtype(np.int32)
  *     elif t == adios_long:
  *         ntype = np.dtype(np.int64)             # <<<<<<<<<<<<<<
  *     elif t == adios_unsigned_byte:
  *         ntype = np.dtype(np.uint8)
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 755, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 763, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_int64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 755, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_int64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 763, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 755, __pyx_L1_error)
+    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 763, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_GIVEREF(__pyx_t_1);
     PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
     __pyx_t_1 = 0;
-    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 755, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 763, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF_SET(__pyx_v_ntype, ((PyArray_Descr *)__pyx_t_1));
     __pyx_t_1 = 0;
 
-    /* "adios_mpi.pyx":754
+    /* "adios_mpi.pyx":762
  *     elif t == adios_integer:
  *         ntype = np.dtype(np.int32)
  *     elif t == adios_long:             # <<<<<<<<<<<<<<
@@ -11425,7 +11677,7 @@ static PyArray_Descr *__pyx_f_9adios_mpi_adios2npdtype(ADIOS_DATATYPES __pyx_v_t
  */
     break;
 
-    /* "adios_mpi.pyx":756
+    /* "adios_mpi.pyx":764
  *     elif t == adios_long:
  *         ntype = np.dtype(np.int64)
  *     elif t == adios_unsigned_byte:             # <<<<<<<<<<<<<<
@@ -11434,30 +11686,30 @@ static PyArray_Descr *__pyx_f_9adios_mpi_adios2npdtype(ADIOS_DATATYPES __pyx_v_t
  */
     case adios_unsigned_byte:
 
-    /* "adios_mpi.pyx":757
+    /* "adios_mpi.pyx":765
  *         ntype = np.dtype(np.int64)
  *     elif t == adios_unsigned_byte:
  *         ntype = np.dtype(np.uint8)             # <<<<<<<<<<<<<<
  *     elif t == adios_unsigned_short:
  *         ntype = np.dtype(np.uint16)
  */
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 757, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 765, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_uint8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 757, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_uint8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 765, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 757, __pyx_L1_error)
+    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 765, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_GIVEREF(__pyx_t_2);
     PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
     __pyx_t_2 = 0;
-    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 757, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 765, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF_SET(__pyx_v_ntype, ((PyArray_Descr *)__pyx_t_2));
     __pyx_t_2 = 0;
 
-    /* "adios_mpi.pyx":756
+    /* "adios_mpi.pyx":764
  *     elif t == adios_long:
  *         ntype = np.dtype(np.int64)
  *     elif t == adios_unsigned_byte:             # <<<<<<<<<<<<<<
@@ -11466,7 +11718,7 @@ static PyArray_Descr *__pyx_f_9adios_mpi_adios2npdtype(ADIOS_DATATYPES __pyx_v_t
  */
     break;
 
-    /* "adios_mpi.pyx":758
+    /* "adios_mpi.pyx":766
  *     elif t == adios_unsigned_byte:
  *         ntype = np.dtype(np.uint8)
  *     elif t == adios_unsigned_short:             # <<<<<<<<<<<<<<
@@ -11475,30 +11727,30 @@ static PyArray_Descr *__pyx_f_9adios_mpi_adios2npdtype(ADIOS_DATATYPES __pyx_v_t
  */
     case adios_unsigned_short:
 
-    /* "adios_mpi.pyx":759
+    /* "adios_mpi.pyx":767
  *         ntype = np.dtype(np.uint8)
  *     elif t == adios_unsigned_short:
  *         ntype = np.dtype(np.uint16)             # <<<<<<<<<<<<<<
  *     elif t == adios_unsigned_integer:
  *         ntype = np.dtype(np.uint32)
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 759, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 767, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_uint16); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 759, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_uint16); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 767, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 759, __pyx_L1_error)
+    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 767, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_GIVEREF(__pyx_t_1);
     PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
     __pyx_t_1 = 0;
-    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 759, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 767, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF_SET(__pyx_v_ntype, ((PyArray_Descr *)__pyx_t_1));
     __pyx_t_1 = 0;
 
-    /* "adios_mpi.pyx":758
+    /* "adios_mpi.pyx":766
  *     elif t == adios_unsigned_byte:
  *         ntype = np.dtype(np.uint8)
  *     elif t == adios_unsigned_short:             # <<<<<<<<<<<<<<
@@ -11507,7 +11759,7 @@ static PyArray_Descr *__pyx_f_9adios_mpi_adios2npdtype(ADIOS_DATATYPES __pyx_v_t
  */
     break;
 
-    /* "adios_mpi.pyx":760
+    /* "adios_mpi.pyx":768
  *     elif t == adios_unsigned_short:
  *         ntype = np.dtype(np.uint16)
  *     elif t == adios_unsigned_integer:             # <<<<<<<<<<<<<<
@@ -11516,30 +11768,30 @@ static PyArray_Descr *__pyx_f_9adios_mpi_adios2npdtype(ADIOS_DATATYPES __pyx_v_t
  */
     case adios_unsigned_integer:
 
-    /* "adios_mpi.pyx":761
+    /* "adios_mpi.pyx":769
  *         ntype = np.dtype(np.uint16)
  *     elif t == adios_unsigned_integer:
  *         ntype = np.dtype(np.uint32)             # <<<<<<<<<<<<<<
  *     elif t == adios_unsigned_long:
  *         ntype = np.dtype(np.uint64)
  */
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 761, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 769, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_uint32); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 761, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_uint32); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 769, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 761, __pyx_L1_error)
+    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 769, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_GIVEREF(__pyx_t_2);
     PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
     __pyx_t_2 = 0;
-    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 761, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 769, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF_SET(__pyx_v_ntype, ((PyArray_Descr *)__pyx_t_2));
     __pyx_t_2 = 0;
 
-    /* "adios_mpi.pyx":760
+    /* "adios_mpi.pyx":768
  *     elif t == adios_unsigned_short:
  *         ntype = np.dtype(np.uint16)
  *     elif t == adios_unsigned_integer:             # <<<<<<<<<<<<<<
@@ -11548,7 +11800,7 @@ static PyArray_Descr *__pyx_f_9adios_mpi_adios2npdtype(ADIOS_DATATYPES __pyx_v_t
  */
     break;
 
-    /* "adios_mpi.pyx":762
+    /* "adios_mpi.pyx":770
  *     elif t == adios_unsigned_integer:
  *         ntype = np.dtype(np.uint32)
  *     elif t == adios_unsigned_long:             # <<<<<<<<<<<<<<
@@ -11557,30 +11809,30 @@ static PyArray_Descr *__pyx_f_9adios_mpi_adios2npdtype(ADIOS_DATATYPES __pyx_v_t
  */
     case adios_unsigned_long:
 
-    /* "adios_mpi.pyx":763
+    /* "adios_mpi.pyx":771
  *         ntype = np.dtype(np.uint32)
  *     elif t == adios_unsigned_long:
  *         ntype = np.dtype(np.uint64)             # <<<<<<<<<<<<<<
  *     elif t == adios_real:
  *         ntype = np.dtype(np.float32)
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 763, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 771, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_uint64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 763, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_uint64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 771, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 763, __pyx_L1_error)
+    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 771, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_GIVEREF(__pyx_t_1);
     PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
     __pyx_t_1 = 0;
-    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 763, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 771, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF_SET(__pyx_v_ntype, ((PyArray_Descr *)__pyx_t_1));
     __pyx_t_1 = 0;
 
-    /* "adios_mpi.pyx":762
+    /* "adios_mpi.pyx":770
  *     elif t == adios_unsigned_integer:
  *         ntype = np.dtype(np.uint32)
  *     elif t == adios_unsigned_long:             # <<<<<<<<<<<<<<
@@ -11589,7 +11841,7 @@ static PyArray_Descr *__pyx_f_9adios_mpi_adios2npdtype(ADIOS_DATATYPES __pyx_v_t
  */
     break;
 
-    /* "adios_mpi.pyx":764
+    /* "adios_mpi.pyx":772
  *     elif t == adios_unsigned_long:
  *         ntype = np.dtype(np.uint64)
  *     elif t == adios_real:             # <<<<<<<<<<<<<<
@@ -11598,30 +11850,30 @@ static PyArray_Descr *__pyx_f_9adios_mpi_adios2npdtype(ADIOS_DATATYPES __pyx_v_t
  */
     case adios_real:
 
-    /* "adios_mpi.pyx":765
+    /* "adios_mpi.pyx":773
  *         ntype = np.dtype(np.uint64)
  *     elif t == adios_real:
  *         ntype = np.dtype(np.float32)             # <<<<<<<<<<<<<<
  *     elif t == adios_double:
  *         ntype = np.dtype(np.float64)
  */
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 765, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 773, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 765, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 773, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 765, __pyx_L1_error)
+    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 773, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_GIVEREF(__pyx_t_2);
     PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
     __pyx_t_2 = 0;
-    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 765, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 773, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF_SET(__pyx_v_ntype, ((PyArray_Descr *)__pyx_t_2));
     __pyx_t_2 = 0;
 
-    /* "adios_mpi.pyx":764
+    /* "adios_mpi.pyx":772
  *     elif t == adios_unsigned_long:
  *         ntype = np.dtype(np.uint64)
  *     elif t == adios_real:             # <<<<<<<<<<<<<<
@@ -11630,7 +11882,7 @@ static PyArray_Descr *__pyx_f_9adios_mpi_adios2npdtype(ADIOS_DATATYPES __pyx_v_t
  */
     break;
 
-    /* "adios_mpi.pyx":766
+    /* "adios_mpi.pyx":774
  *     elif t == adios_real:
  *         ntype = np.dtype(np.float32)
  *     elif t == adios_double:             # <<<<<<<<<<<<<<
@@ -11639,30 +11891,30 @@ static PyArray_Descr *__pyx_f_9adios_mpi_adios2npdtype(ADIOS_DATATYPES __pyx_v_t
  */
     case adios_double:
 
-    /* "adios_mpi.pyx":767
+    /* "adios_mpi.pyx":775
  *         ntype = np.dtype(np.float32)
  *     elif t == adios_double:
  *         ntype = np.dtype(np.float64)             # <<<<<<<<<<<<<<
  *     elif t == adios_long_double:
  *         ntype = np.dtype(np.float128)
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 767, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 775, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_float64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 767, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_float64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 775, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 767, __pyx_L1_error)
+    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 775, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_GIVEREF(__pyx_t_1);
     PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
     __pyx_t_1 = 0;
-    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 767, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 775, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF_SET(__pyx_v_ntype, ((PyArray_Descr *)__pyx_t_1));
     __pyx_t_1 = 0;
 
-    /* "adios_mpi.pyx":766
+    /* "adios_mpi.pyx":774
  *     elif t == adios_real:
  *         ntype = np.dtype(np.float32)
  *     elif t == adios_double:             # <<<<<<<<<<<<<<
@@ -11671,7 +11923,7 @@ static PyArray_Descr *__pyx_f_9adios_mpi_adios2npdtype(ADIOS_DATATYPES __pyx_v_t
  */
     break;
 
-    /* "adios_mpi.pyx":768
+    /* "adios_mpi.pyx":776
  *     elif t == adios_double:
  *         ntype = np.dtype(np.float64)
  *     elif t == adios_long_double:             # <<<<<<<<<<<<<<
@@ -11680,30 +11932,30 @@ static PyArray_Descr *__pyx_f_9adios_mpi_adios2npdtype(ADIOS_DATATYPES __pyx_v_t
  */
     case adios_long_double:
 
-    /* "adios_mpi.pyx":769
+    /* "adios_mpi.pyx":777
  *         ntype = np.dtype(np.float64)
  *     elif t == adios_long_double:
  *         ntype = np.dtype(np.float128)             # <<<<<<<<<<<<<<
  *     elif t == adios_complex:
  *         ntype = np.dtype(np.complex64)
  */
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 769, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 777, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float128); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 769, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float128); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 777, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 769, __pyx_L1_error)
+    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 777, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_GIVEREF(__pyx_t_2);
     PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
     __pyx_t_2 = 0;
-    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 769, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 777, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF_SET(__pyx_v_ntype, ((PyArray_Descr *)__pyx_t_2));
     __pyx_t_2 = 0;
 
-    /* "adios_mpi.pyx":768
+    /* "adios_mpi.pyx":776
  *     elif t == adios_double:
  *         ntype = np.dtype(np.float64)
  *     elif t == adios_long_double:             # <<<<<<<<<<<<<<
@@ -11712,7 +11964,7 @@ static PyArray_Descr *__pyx_f_9adios_mpi_adios2npdtype(ADIOS_DATATYPES __pyx_v_t
  */
     break;
 
-    /* "adios_mpi.pyx":770
+    /* "adios_mpi.pyx":778
  *     elif t == adios_long_double:
  *         ntype = np.dtype(np.float128)
  *     elif t == adios_complex:             # <<<<<<<<<<<<<<
@@ -11721,30 +11973,30 @@ static PyArray_Descr *__pyx_f_9adios_mpi_adios2npdtype(ADIOS_DATATYPES __pyx_v_t
  */
     case adios_complex:
 
-    /* "adios_mpi.pyx":771
+    /* "adios_mpi.pyx":779
  *         ntype = np.dtype(np.float128)
  *     elif t == adios_complex:
  *         ntype = np.dtype(np.complex64)             # <<<<<<<<<<<<<<
  *     elif t == adios_double_complex:
  *         ntype = np.dtype(np.complex128)
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 771, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 779, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_complex64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 771, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_complex64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 779, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 771, __pyx_L1_error)
+    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 779, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_GIVEREF(__pyx_t_1);
     PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
     __pyx_t_1 = 0;
-    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 771, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 779, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF_SET(__pyx_v_ntype, ((PyArray_Descr *)__pyx_t_1));
     __pyx_t_1 = 0;
 
-    /* "adios_mpi.pyx":770
+    /* "adios_mpi.pyx":778
  *     elif t == adios_long_double:
  *         ntype = np.dtype(np.float128)
  *     elif t == adios_complex:             # <<<<<<<<<<<<<<
@@ -11753,7 +12005,7 @@ static PyArray_Descr *__pyx_f_9adios_mpi_adios2npdtype(ADIOS_DATATYPES __pyx_v_t
  */
     break;
 
-    /* "adios_mpi.pyx":772
+    /* "adios_mpi.pyx":780
  *     elif t == adios_complex:
  *         ntype = np.dtype(np.complex64)
  *     elif t == adios_double_complex:             # <<<<<<<<<<<<<<
@@ -11762,30 +12014,30 @@ static PyArray_Descr *__pyx_f_9adios_mpi_adios2npdtype(ADIOS_DATATYPES __pyx_v_t
  */
     case adios_double_complex:
 
-    /* "adios_mpi.pyx":773
+    /* "adios_mpi.pyx":781
  *         ntype = np.dtype(np.complex64)
  *     elif t == adios_double_complex:
  *         ntype = np.dtype(np.complex128)             # <<<<<<<<<<<<<<
  *     elif t == adios_string:
  *         ## Use string_ instead of str_ for py3
  */
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 773, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 781, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_complex128); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 773, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_complex128); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 781, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 773, __pyx_L1_error)
+    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 781, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_GIVEREF(__pyx_t_2);
     PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
     __pyx_t_2 = 0;
-    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 773, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 781, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF_SET(__pyx_v_ntype, ((PyArray_Descr *)__pyx_t_2));
     __pyx_t_2 = 0;
 
-    /* "adios_mpi.pyx":772
+    /* "adios_mpi.pyx":780
  *     elif t == adios_complex:
  *         ntype = np.dtype(np.complex64)
  *     elif t == adios_double_complex:             # <<<<<<<<<<<<<<
@@ -11794,7 +12046,7 @@ static PyArray_Descr *__pyx_f_9adios_mpi_adios2npdtype(ADIOS_DATATYPES __pyx_v_t
  */
     break;
 
-    /* "adios_mpi.pyx":774
+    /* "adios_mpi.pyx":782
  *     elif t == adios_double_complex:
  *         ntype = np.dtype(np.complex128)
  *     elif t == adios_string:             # <<<<<<<<<<<<<<
@@ -11803,21 +12055,21 @@ static PyArray_Descr *__pyx_f_9adios_mpi_adios2npdtype(ADIOS_DATATYPES __pyx_v_t
  */
     case adios_string:
 
-    /* "adios_mpi.pyx":776
+    /* "adios_mpi.pyx":784
  *     elif t == adios_string:
  *         ## Use string_ instead of str_ for py3
  *         ntype = np.dtype((np.string_, strlen))             # <<<<<<<<<<<<<<
  *     else:
  *         ntype = None
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 776, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 784, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_string_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 776, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_string_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 784, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_strlen); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 776, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_strlen); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 784, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 776, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 784, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_GIVEREF(__pyx_t_1);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
@@ -11825,18 +12077,18 @@ static PyArray_Descr *__pyx_f_9adios_mpi_adios2npdtype(ADIOS_DATATYPES __pyx_v_t
     PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2);
     __pyx_t_1 = 0;
     __pyx_t_2 = 0;
-    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 776, __pyx_L1_error)
+    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 784, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_GIVEREF(__pyx_t_3);
     PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
     __pyx_t_3 = 0;
-    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 776, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_dtype), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 784, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF_SET(__pyx_v_ntype, ((PyArray_Descr *)__pyx_t_3));
     __pyx_t_3 = 0;
 
-    /* "adios_mpi.pyx":774
+    /* "adios_mpi.pyx":782
  *     elif t == adios_double_complex:
  *         ntype = np.dtype(np.complex128)
  *     elif t == adios_string:             # <<<<<<<<<<<<<<
@@ -11846,7 +12098,7 @@ static PyArray_Descr *__pyx_f_9adios_mpi_adios2npdtype(ADIOS_DATATYPES __pyx_v_t
     break;
     default:
 
-    /* "adios_mpi.pyx":778
+    /* "adios_mpi.pyx":786
  *         ntype = np.dtype((np.string_, strlen))
  *     else:
  *         ntype = None             # <<<<<<<<<<<<<<
@@ -11858,7 +12110,7 @@ static PyArray_Descr *__pyx_f_9adios_mpi_adios2npdtype(ADIOS_DATATYPES __pyx_v_t
     break;
   }
 
-  /* "adios_mpi.pyx":780
+  /* "adios_mpi.pyx":788
  *         ntype = None
  * 
  *     return ntype             # <<<<<<<<<<<<<<
@@ -11870,7 +12122,7 @@ static PyArray_Descr *__pyx_f_9adios_mpi_adios2npdtype(ADIOS_DATATYPES __pyx_v_t
   __pyx_r = __pyx_v_ntype;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":745
+  /* "adios_mpi.pyx":753
  * ## ====================
  * 
  * cpdef np.dtype adios2npdtype(ADIOS_DATATYPES t, int strlen = 1):             # <<<<<<<<<<<<<<
@@ -11925,7 +12177,7 @@ static PyObject *__pyx_pw_9adios_mpi_83adios2npdtype(PyObject *__pyx_self, PyObj
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "adios2npdtype") < 0)) __PYX_ERR(0, 745, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "adios2npdtype") < 0)) __PYX_ERR(0, 753, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -11935,16 +12187,16 @@ static PyObject *__pyx_pw_9adios_mpi_83adios2npdtype(PyObject *__pyx_self, PyObj
         default: goto __pyx_L5_argtuple_error;
       }
     }
-    __pyx_v_t = ((ADIOS_DATATYPES)__Pyx_PyInt_As_ADIOS_DATATYPES(values[0])); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 745, __pyx_L3_error)
+    __pyx_v_t = ((ADIOS_DATATYPES)__Pyx_PyInt_As_ADIOS_DATATYPES(values[0])); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 753, __pyx_L3_error)
     if (values[1]) {
-      __pyx_v_strlen = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_strlen == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 745, __pyx_L3_error)
+      __pyx_v_strlen = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_strlen == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 753, __pyx_L3_error)
     } else {
       __pyx_v_strlen = ((int)1);
     }
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("adios2npdtype", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 745, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("adios2npdtype", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 753, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.adios2npdtype", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -11966,7 +12218,7 @@ static PyObject *__pyx_pf_9adios_mpi_82adios2npdtype(CYTHON_UNUSED PyObject *__p
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_2.__pyx_n = 1;
   __pyx_t_2.strlen = __pyx_v_strlen;
-  __pyx_t_1 = ((PyObject *)__pyx_f_9adios_mpi_adios2npdtype(__pyx_v_t, 0, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 745, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_9adios_mpi_adios2npdtype(__pyx_v_t, 0, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 753, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -11983,7 +12235,7 @@ static PyObject *__pyx_pf_9adios_mpi_82adios2npdtype(CYTHON_UNUSED PyObject *__p
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":782
+/* "adios_mpi.pyx":790
  *     return ntype
  * 
  * cdef printfile(ADIOS_FILE * f):             # <<<<<<<<<<<<<<
@@ -12001,16 +12253,16 @@ static PyObject *__pyx_f_9adios_mpi_printfile(ADIOS_FILE *__pyx_v_f) {
   int __pyx_t_4;
   __Pyx_RefNannySetupContext("printfile", 0);
 
-  /* "adios_mpi.pyx":783
+  /* "adios_mpi.pyx":791
  * 
  * cdef printfile(ADIOS_FILE * f):
  *     print ('%15s : %lu' % ('fh', f.fh))             # <<<<<<<<<<<<<<
  *     print ('%15s : %d' % ('nvars', f.nvars))
  *     print ('%15s : %s' % ('var_namelist', [f.var_namelist[i] for i in range(f.nvars)]))
  */
-  __pyx_t_1 = __Pyx_PyInt_From_uint64_t(__pyx_v_f->fh); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 783, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_uint64_t(__pyx_v_f->fh); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 791, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 783, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 791, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_fh);
   __Pyx_GIVEREF(__pyx_n_s_fh);
@@ -12018,29 +12270,29 @@ static PyObject *__pyx_f_9adios_mpi_printfile(ADIOS_FILE *__pyx_v_f) {
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_lu, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 783, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_lu, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 791, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 783, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 791, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 783, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 791, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":784
+  /* "adios_mpi.pyx":792
  * cdef printfile(ADIOS_FILE * f):
  *     print ('%15s : %lu' % ('fh', f.fh))
  *     print ('%15s : %d' % ('nvars', f.nvars))             # <<<<<<<<<<<<<<
  *     print ('%15s : %s' % ('var_namelist', [f.var_namelist[i] for i in range(f.nvars)]))
  *     print ('%15s : %d' % ('nattrs', f.nattrs))
  */
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->nvars); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 784, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->nvars); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 792, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 784, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 792, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_nvars);
   __Pyx_GIVEREF(__pyx_n_s_nvars);
@@ -12048,37 +12300,37 @@ static PyObject *__pyx_f_9adios_mpi_printfile(ADIOS_FILE *__pyx_v_f) {
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 784, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 792, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 784, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 792, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 784, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 792, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":785
+  /* "adios_mpi.pyx":793
  *     print ('%15s : %lu' % ('fh', f.fh))
  *     print ('%15s : %d' % ('nvars', f.nvars))
  *     print ('%15s : %s' % ('var_namelist', [f.var_namelist[i] for i in range(f.nvars)]))             # <<<<<<<<<<<<<<
  *     print ('%15s : %d' % ('nattrs', f.nattrs))
  *     print ('%15s : %s' % ('attr_namelist', [f.attr_namelist[i] for i in range(f.nattrs)]))
  */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 785, __pyx_L1_error)
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 793, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_3 = __pyx_v_f->nvars;
   for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
     __pyx_v_i = __pyx_t_4;
-    __pyx_t_2 = __Pyx_PyBytes_FromString((__pyx_v_f->var_namelist[__pyx_v_i])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 785, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyBytes_FromString((__pyx_v_f->var_namelist[__pyx_v_i])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 793, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_2))) __PYX_ERR(0, 785, __pyx_L1_error)
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_2))) __PYX_ERR(0, 793, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   }
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 785, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 793, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_var_namelist);
   __Pyx_GIVEREF(__pyx_n_s_var_namelist);
@@ -12086,29 +12338,29 @@ static PyObject *__pyx_f_9adios_mpi_printfile(ADIOS_FILE *__pyx_v_f) {
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_s, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 785, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_s, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 793, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 785, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 793, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 785, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 793, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":786
+  /* "adios_mpi.pyx":794
  *     print ('%15s : %d' % ('nvars', f.nvars))
  *     print ('%15s : %s' % ('var_namelist', [f.var_namelist[i] for i in range(f.nvars)]))
  *     print ('%15s : %d' % ('nattrs', f.nattrs))             # <<<<<<<<<<<<<<
  *     print ('%15s : %s' % ('attr_namelist', [f.attr_namelist[i] for i in range(f.nattrs)]))
  *     print ('%15s : %d' % ('current_step', f.current_step))
  */
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->nattrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 786, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->nattrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 794, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 786, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 794, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_nattrs);
   __Pyx_GIVEREF(__pyx_n_s_nattrs);
@@ -12116,37 +12368,37 @@ static PyObject *__pyx_f_9adios_mpi_printfile(ADIOS_FILE *__pyx_v_f) {
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 786, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 794, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 786, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 794, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 786, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 794, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":787
+  /* "adios_mpi.pyx":795
  *     print ('%15s : %s' % ('var_namelist', [f.var_namelist[i] for i in range(f.nvars)]))
  *     print ('%15s : %d' % ('nattrs', f.nattrs))
  *     print ('%15s : %s' % ('attr_namelist', [f.attr_namelist[i] for i in range(f.nattrs)]))             # <<<<<<<<<<<<<<
  *     print ('%15s : %d' % ('current_step', f.current_step))
  *     print ('%15s : %d' % ('last_step', f.last_step))
  */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 787, __pyx_L1_error)
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 795, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_3 = __pyx_v_f->nattrs;
   for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
     __pyx_v_i = __pyx_t_4;
-    __pyx_t_2 = __Pyx_PyBytes_FromString((__pyx_v_f->attr_namelist[__pyx_v_i])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 787, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyBytes_FromString((__pyx_v_f->attr_namelist[__pyx_v_i])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 795, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_2))) __PYX_ERR(0, 787, __pyx_L1_error)
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_2))) __PYX_ERR(0, 795, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   }
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 787, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 795, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_attr_namelist);
   __Pyx_GIVEREF(__pyx_n_s_attr_namelist);
@@ -12154,29 +12406,29 @@ static PyObject *__pyx_f_9adios_mpi_printfile(ADIOS_FILE *__pyx_v_f) {
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_s, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 787, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_s, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 795, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 787, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 795, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 787, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 795, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":788
+  /* "adios_mpi.pyx":796
  *     print ('%15s : %d' % ('nattrs', f.nattrs))
  *     print ('%15s : %s' % ('attr_namelist', [f.attr_namelist[i] for i in range(f.nattrs)]))
  *     print ('%15s : %d' % ('current_step', f.current_step))             # <<<<<<<<<<<<<<
  *     print ('%15s : %d' % ('last_step', f.last_step))
  *     print ('%15s : %s' % ('path', f.path))
  */
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->current_step); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 788, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->current_step); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 796, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 788, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 796, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_current_step);
   __Pyx_GIVEREF(__pyx_n_s_current_step);
@@ -12184,29 +12436,29 @@ static PyObject *__pyx_f_9adios_mpi_printfile(ADIOS_FILE *__pyx_v_f) {
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 788, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 796, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 788, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 796, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 788, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 796, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":789
+  /* "adios_mpi.pyx":797
  *     print ('%15s : %s' % ('attr_namelist', [f.attr_namelist[i] for i in range(f.nattrs)]))
  *     print ('%15s : %d' % ('current_step', f.current_step))
  *     print ('%15s : %d' % ('last_step', f.last_step))             # <<<<<<<<<<<<<<
  *     print ('%15s : %s' % ('path', f.path))
  *     print ('%15s : %d' % ('endianness', f.endianness))
  */
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->last_step); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 789, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->last_step); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 797, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 789, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 797, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_last_step);
   __Pyx_GIVEREF(__pyx_n_s_last_step);
@@ -12214,29 +12466,29 @@ static PyObject *__pyx_f_9adios_mpi_printfile(ADIOS_FILE *__pyx_v_f) {
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 789, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 797, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 789, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 797, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 789, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 797, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":790
+  /* "adios_mpi.pyx":798
  *     print ('%15s : %d' % ('current_step', f.current_step))
  *     print ('%15s : %d' % ('last_step', f.last_step))
  *     print ('%15s : %s' % ('path', f.path))             # <<<<<<<<<<<<<<
  *     print ('%15s : %d' % ('endianness', f.endianness))
  *     print ('%15s : %d' % ('version', f.version))
  */
-  __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_f->path); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 790, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_f->path); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 798, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 790, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 798, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_path);
   __Pyx_GIVEREF(__pyx_n_s_path);
@@ -12244,29 +12496,29 @@ static PyObject *__pyx_f_9adios_mpi_printfile(ADIOS_FILE *__pyx_v_f) {
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_s, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 790, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_s, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 798, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 790, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 798, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 790, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 798, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":791
+  /* "adios_mpi.pyx":799
  *     print ('%15s : %d' % ('last_step', f.last_step))
  *     print ('%15s : %s' % ('path', f.path))
  *     print ('%15s : %d' % ('endianness', f.endianness))             # <<<<<<<<<<<<<<
  *     print ('%15s : %d' % ('version', f.version))
  *     print ('%15s : %lu' % ('file_size', f.file_size))
  */
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->endianness); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 791, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->endianness); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 799, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 791, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 799, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_endianness);
   __Pyx_GIVEREF(__pyx_n_s_endianness);
@@ -12274,29 +12526,29 @@ static PyObject *__pyx_f_9adios_mpi_printfile(ADIOS_FILE *__pyx_v_f) {
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 791, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 799, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 791, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 799, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 791, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 799, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":792
+  /* "adios_mpi.pyx":800
  *     print ('%15s : %s' % ('path', f.path))
  *     print ('%15s : %d' % ('endianness', f.endianness))
  *     print ('%15s : %d' % ('version', f.version))             # <<<<<<<<<<<<<<
  *     print ('%15s : %lu' % ('file_size', f.file_size))
  * 
  */
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->version); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 792, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->version); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 800, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 792, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 800, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_version);
   __Pyx_GIVEREF(__pyx_n_s_version);
@@ -12304,29 +12556,29 @@ static PyObject *__pyx_f_9adios_mpi_printfile(ADIOS_FILE *__pyx_v_f) {
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 792, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 800, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 792, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 800, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 792, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 800, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":793
+  /* "adios_mpi.pyx":801
  *     print ('%15s : %d' % ('endianness', f.endianness))
  *     print ('%15s : %d' % ('version', f.version))
  *     print ('%15s : %lu' % ('file_size', f.file_size))             # <<<<<<<<<<<<<<
  * 
  * cdef printvar(ADIOS_VARINFO * v):
  */
-  __pyx_t_1 = __Pyx_PyInt_From_uint64_t(__pyx_v_f->file_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 793, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_uint64_t(__pyx_v_f->file_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 801, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 793, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 801, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_file_size);
   __Pyx_GIVEREF(__pyx_n_s_file_size);
@@ -12334,20 +12586,20 @@ static PyObject *__pyx_f_9adios_mpi_printfile(ADIOS_FILE *__pyx_v_f) {
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_lu, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 793, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_lu, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 801, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 793, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 801, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 793, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 801, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":782
+  /* "adios_mpi.pyx":790
  *     return ntype
  * 
  * cdef printfile(ADIOS_FILE * f):             # <<<<<<<<<<<<<<
@@ -12369,7 +12621,7 @@ static PyObject *__pyx_f_9adios_mpi_printfile(ADIOS_FILE *__pyx_v_f) {
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":795
+/* "adios_mpi.pyx":803
  *     print ('%15s : %lu' % ('file_size', f.file_size))
  * 
  * cdef printvar(ADIOS_VARINFO * v):             # <<<<<<<<<<<<<<
@@ -12387,16 +12639,16 @@ static PyObject *__pyx_f_9adios_mpi_printvar(ADIOS_VARINFO *__pyx_v_v) {
   int __pyx_t_4;
   __Pyx_RefNannySetupContext("printvar", 0);
 
-  /* "adios_mpi.pyx":796
+  /* "adios_mpi.pyx":804
  * 
  * cdef printvar(ADIOS_VARINFO * v):
  *     print ('%15s : %d' % ('varid', v.varid))             # <<<<<<<<<<<<<<
  *     print ('%15s : %s' % ('type', adios2npdtype(v.type)))
  *     print ('%15s : %d' % ('ndim', v.ndim))
  */
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_v->varid); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 796, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_v->varid); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 804, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 796, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 804, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_varid);
   __Pyx_GIVEREF(__pyx_n_s_varid);
@@ -12404,29 +12656,29 @@ static PyObject *__pyx_f_9adios_mpi_printvar(ADIOS_VARINFO *__pyx_v_v) {
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 796, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 804, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 796, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 804, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 796, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 804, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":797
+  /* "adios_mpi.pyx":805
  * cdef printvar(ADIOS_VARINFO * v):
  *     print ('%15s : %d' % ('varid', v.varid))
  *     print ('%15s : %s' % ('type', adios2npdtype(v.type)))             # <<<<<<<<<<<<<<
  *     print ('%15s : %d' % ('ndim', v.ndim))
  *     print ('%15s : %s' % ('dims', [v.dims[i] for i in range(v.ndim)]))
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_9adios_mpi_adios2npdtype(__pyx_v_v->type, 0, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 797, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_9adios_mpi_adios2npdtype(__pyx_v_v->type, 0, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 805, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 797, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 805, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_type);
   __Pyx_GIVEREF(__pyx_n_s_type);
@@ -12434,29 +12686,29 @@ static PyObject *__pyx_f_9adios_mpi_printvar(ADIOS_VARINFO *__pyx_v_v) {
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_s, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 797, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_s, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 805, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 797, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 805, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 797, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 805, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":798
+  /* "adios_mpi.pyx":806
  *     print ('%15s : %d' % ('varid', v.varid))
  *     print ('%15s : %s' % ('type', adios2npdtype(v.type)))
  *     print ('%15s : %d' % ('ndim', v.ndim))             # <<<<<<<<<<<<<<
  *     print ('%15s : %s' % ('dims', [v.dims[i] for i in range(v.ndim)]))
  *     print ('%15s : %d' % ('nsteps', v.nsteps))
  */
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_v->ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 798, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_v->ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 806, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 798, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 806, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_ndim);
   __Pyx_GIVEREF(__pyx_n_s_ndim);
@@ -12464,37 +12716,37 @@ static PyObject *__pyx_f_9adios_mpi_printvar(ADIOS_VARINFO *__pyx_v_v) {
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 798, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 806, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 798, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 806, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 798, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 806, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":799
+  /* "adios_mpi.pyx":807
  *     print ('%15s : %s' % ('type', adios2npdtype(v.type)))
  *     print ('%15s : %d' % ('ndim', v.ndim))
  *     print ('%15s : %s' % ('dims', [v.dims[i] for i in range(v.ndim)]))             # <<<<<<<<<<<<<<
  *     print ('%15s : %d' % ('nsteps', v.nsteps))
  * 
  */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 799, __pyx_L1_error)
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 807, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_3 = __pyx_v_v->ndim;
   for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
     __pyx_v_i = __pyx_t_4;
-    __pyx_t_2 = __Pyx_PyInt_From_uint64_t((__pyx_v_v->dims[__pyx_v_i])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 799, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyInt_From_uint64_t((__pyx_v_v->dims[__pyx_v_i])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 807, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_2))) __PYX_ERR(0, 799, __pyx_L1_error)
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_2))) __PYX_ERR(0, 807, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   }
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 799, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 807, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_dims);
   __Pyx_GIVEREF(__pyx_n_s_dims);
@@ -12502,29 +12754,29 @@ static PyObject *__pyx_f_9adios_mpi_printvar(ADIOS_VARINFO *__pyx_v_v) {
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_s, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 799, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_s, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 807, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 799, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 807, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 799, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 807, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":800
+  /* "adios_mpi.pyx":808
  *     print ('%15s : %d' % ('ndim', v.ndim))
  *     print ('%15s : %s' % ('dims', [v.dims[i] for i in range(v.ndim)]))
  *     print ('%15s : %d' % ('nsteps', v.nsteps))             # <<<<<<<<<<<<<<
  * 
  * cdef ADIOS_READ_METHOD str2adiosreadmethod(name):
  */
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_v->nsteps); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 800, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_v->nsteps); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 808, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 800, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 808, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_nsteps);
   __Pyx_GIVEREF(__pyx_n_s_nsteps);
@@ -12532,20 +12784,20 @@ static PyObject *__pyx_f_9adios_mpi_printvar(ADIOS_VARINFO *__pyx_v_v) {
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 800, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_d, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 808, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 800, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 808, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 800, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 808, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":795
+  /* "adios_mpi.pyx":803
  *     print ('%15s : %lu' % ('file_size', f.file_size))
  * 
  * cdef printvar(ADIOS_VARINFO * v):             # <<<<<<<<<<<<<<
@@ -12567,7 +12819,7 @@ static PyObject *__pyx_f_9adios_mpi_printvar(ADIOS_VARINFO *__pyx_v_v) {
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":802
+/* "adios_mpi.pyx":810
  *     print ('%15s : %d' % ('nsteps', v.nsteps))
  * 
  * cdef ADIOS_READ_METHOD str2adiosreadmethod(name):             # <<<<<<<<<<<<<<
@@ -12585,32 +12837,32 @@ static ADIOS_READ_METHOD __pyx_f_9adios_mpi_str2adiosreadmethod(PyObject *__pyx_
   ADIOS_READ_METHOD __pyx_t_4;
   __Pyx_RefNannySetupContext("str2adiosreadmethod", 0);
 
-  /* "adios_mpi.pyx":803
+  /* "adios_mpi.pyx":811
  * 
  * cdef ADIOS_READ_METHOD str2adiosreadmethod(name):
  *     if (name == "BP"):             # <<<<<<<<<<<<<<
  *         method = READ_METHOD.BP
  *     elif (name == "BP_AGGREGATE"):
  */
-  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_name, __pyx_n_s_BP, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 803, __pyx_L1_error)
+  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_name, __pyx_n_s_BP, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 811, __pyx_L1_error)
   if (__pyx_t_1) {
 
-    /* "adios_mpi.pyx":804
+    /* "adios_mpi.pyx":812
  * cdef ADIOS_READ_METHOD str2adiosreadmethod(name):
  *     if (name == "BP"):
  *         method = READ_METHOD.BP             # <<<<<<<<<<<<<<
  *     elif (name == "BP_AGGREGATE"):
  *         method = READ_METHOD.BP_AGGREGATE
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_READ_METHOD); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 804, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_READ_METHOD); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 812, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_BP); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 804, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_BP); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 812, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __pyx_v_method = __pyx_t_3;
     __pyx_t_3 = 0;
 
-    /* "adios_mpi.pyx":803
+    /* "adios_mpi.pyx":811
  * 
  * cdef ADIOS_READ_METHOD str2adiosreadmethod(name):
  *     if (name == "BP"):             # <<<<<<<<<<<<<<
@@ -12620,32 +12872,32 @@ static ADIOS_READ_METHOD __pyx_f_9adios_mpi_str2adiosreadmethod(PyObject *__pyx_
     goto __pyx_L3;
   }
 
-  /* "adios_mpi.pyx":805
+  /* "adios_mpi.pyx":813
  *     if (name == "BP"):
  *         method = READ_METHOD.BP
  *     elif (name == "BP_AGGREGATE"):             # <<<<<<<<<<<<<<
  *         method = READ_METHOD.BP_AGGREGATE
  *     elif (name == "DATASPACES"):
  */
-  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_name, __pyx_n_s_BP_AGGREGATE, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 805, __pyx_L1_error)
+  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_name, __pyx_n_s_BP_AGGREGATE, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 813, __pyx_L1_error)
   if (__pyx_t_1) {
 
-    /* "adios_mpi.pyx":806
+    /* "adios_mpi.pyx":814
  *         method = READ_METHOD.BP
  *     elif (name == "BP_AGGREGATE"):
  *         method = READ_METHOD.BP_AGGREGATE             # <<<<<<<<<<<<<<
  *     elif (name == "DATASPACES"):
  *         method = READ_METHOD.DATASPACES
  */
-    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_READ_METHOD); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 806, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_READ_METHOD); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 814, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_BP_AGGREGATE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 806, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_BP_AGGREGATE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 814, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __pyx_v_method = __pyx_t_2;
     __pyx_t_2 = 0;
 
-    /* "adios_mpi.pyx":805
+    /* "adios_mpi.pyx":813
  *     if (name == "BP"):
  *         method = READ_METHOD.BP
  *     elif (name == "BP_AGGREGATE"):             # <<<<<<<<<<<<<<
@@ -12655,32 +12907,32 @@ static ADIOS_READ_METHOD __pyx_f_9adios_mpi_str2adiosreadmethod(PyObject *__pyx_
     goto __pyx_L3;
   }
 
-  /* "adios_mpi.pyx":807
+  /* "adios_mpi.pyx":815
  *     elif (name == "BP_AGGREGATE"):
  *         method = READ_METHOD.BP_AGGREGATE
  *     elif (name == "DATASPACES"):             # <<<<<<<<<<<<<<
  *         method = READ_METHOD.DATASPACES
  *     elif (name == "DIMES"):
  */
-  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_name, __pyx_n_s_DATASPACES, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 807, __pyx_L1_error)
+  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_name, __pyx_n_s_DATASPACES, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 815, __pyx_L1_error)
   if (__pyx_t_1) {
 
-    /* "adios_mpi.pyx":808
+    /* "adios_mpi.pyx":816
  *         method = READ_METHOD.BP_AGGREGATE
  *     elif (name == "DATASPACES"):
  *         method = READ_METHOD.DATASPACES             # <<<<<<<<<<<<<<
  *     elif (name == "DIMES"):
  *         method = READ_METHOD.DIMES
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_READ_METHOD); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 808, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_READ_METHOD); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 816, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_DATASPACES); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 808, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_DATASPACES); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 816, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __pyx_v_method = __pyx_t_3;
     __pyx_t_3 = 0;
 
-    /* "adios_mpi.pyx":807
+    /* "adios_mpi.pyx":815
  *     elif (name == "BP_AGGREGATE"):
  *         method = READ_METHOD.BP_AGGREGATE
  *     elif (name == "DATASPACES"):             # <<<<<<<<<<<<<<
@@ -12690,32 +12942,32 @@ static ADIOS_READ_METHOD __pyx_f_9adios_mpi_str2adiosreadmethod(PyObject *__pyx_
     goto __pyx_L3;
   }
 
-  /* "adios_mpi.pyx":809
+  /* "adios_mpi.pyx":817
  *     elif (name == "DATASPACES"):
  *         method = READ_METHOD.DATASPACES
  *     elif (name == "DIMES"):             # <<<<<<<<<<<<<<
  *         method = READ_METHOD.DIMES
  *     elif (name == "FLEXPATH"):
  */
-  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_name, __pyx_n_s_DIMES, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 809, __pyx_L1_error)
+  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_name, __pyx_n_s_DIMES, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 817, __pyx_L1_error)
   if (__pyx_t_1) {
 
-    /* "adios_mpi.pyx":810
+    /* "adios_mpi.pyx":818
  *         method = READ_METHOD.DATASPACES
  *     elif (name == "DIMES"):
  *         method = READ_METHOD.DIMES             # <<<<<<<<<<<<<<
  *     elif (name == "FLEXPATH"):
  *         method = READ_METHOD.FLEXPATH
  */
-    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_READ_METHOD); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 810, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_READ_METHOD); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 818, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_DIMES); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 810, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_DIMES); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 818, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __pyx_v_method = __pyx_t_2;
     __pyx_t_2 = 0;
 
-    /* "adios_mpi.pyx":809
+    /* "adios_mpi.pyx":817
  *     elif (name == "DATASPACES"):
  *         method = READ_METHOD.DATASPACES
  *     elif (name == "DIMES"):             # <<<<<<<<<<<<<<
@@ -12725,32 +12977,32 @@ static ADIOS_READ_METHOD __pyx_f_9adios_mpi_str2adiosreadmethod(PyObject *__pyx_
     goto __pyx_L3;
   }
 
-  /* "adios_mpi.pyx":811
+  /* "adios_mpi.pyx":819
  *     elif (name == "DIMES"):
  *         method = READ_METHOD.DIMES
  *     elif (name == "FLEXPATH"):             # <<<<<<<<<<<<<<
  *         method = READ_METHOD.FLEXPATH
  *     elif (name == "ICEE"):
  */
-  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_name, __pyx_n_s_FLEXPATH, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 811, __pyx_L1_error)
+  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_name, __pyx_n_s_FLEXPATH, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 819, __pyx_L1_error)
   if (__pyx_t_1) {
 
-    /* "adios_mpi.pyx":812
+    /* "adios_mpi.pyx":820
  *         method = READ_METHOD.DIMES
  *     elif (name == "FLEXPATH"):
  *         method = READ_METHOD.FLEXPATH             # <<<<<<<<<<<<<<
  *     elif (name == "ICEE"):
  *         method = READ_METHOD.ICEE
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_READ_METHOD); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 812, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_READ_METHOD); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 820, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_FLEXPATH); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 812, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_FLEXPATH); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 820, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __pyx_v_method = __pyx_t_3;
     __pyx_t_3 = 0;
 
-    /* "adios_mpi.pyx":811
+    /* "adios_mpi.pyx":819
  *     elif (name == "DIMES"):
  *         method = READ_METHOD.DIMES
  *     elif (name == "FLEXPATH"):             # <<<<<<<<<<<<<<
@@ -12760,32 +13012,32 @@ static ADIOS_READ_METHOD __pyx_f_9adios_mpi_str2adiosreadmethod(PyObject *__pyx_
     goto __pyx_L3;
   }
 
-  /* "adios_mpi.pyx":813
+  /* "adios_mpi.pyx":821
  *     elif (name == "FLEXPATH"):
  *         method = READ_METHOD.FLEXPATH
  *     elif (name == "ICEE"):             # <<<<<<<<<<<<<<
  *         method = READ_METHOD.ICEE
  *     else:
  */
-  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_name, __pyx_n_s_ICEE, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 813, __pyx_L1_error)
+  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_name, __pyx_n_s_ICEE, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 821, __pyx_L1_error)
   if (__pyx_t_1) {
 
-    /* "adios_mpi.pyx":814
+    /* "adios_mpi.pyx":822
  *         method = READ_METHOD.FLEXPATH
  *     elif (name == "ICEE"):
  *         method = READ_METHOD.ICEE             # <<<<<<<<<<<<<<
  *     else:
  *         print ('[WARN] Invalid read method name:', name, '. Use default BP method')
  */
-    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_READ_METHOD); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 814, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_READ_METHOD); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 822, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_ICEE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 814, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_ICEE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 822, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __pyx_v_method = __pyx_t_2;
     __pyx_t_2 = 0;
 
-    /* "adios_mpi.pyx":813
+    /* "adios_mpi.pyx":821
  *     elif (name == "FLEXPATH"):
  *         method = READ_METHOD.FLEXPATH
  *     elif (name == "ICEE"):             # <<<<<<<<<<<<<<
@@ -12795,7 +13047,7 @@ static ADIOS_READ_METHOD __pyx_f_9adios_mpi_str2adiosreadmethod(PyObject *__pyx_
     goto __pyx_L3;
   }
 
-  /* "adios_mpi.pyx":816
+  /* "adios_mpi.pyx":824
  *         method = READ_METHOD.ICEE
  *     else:
  *         print ('[WARN] Invalid read method name:', name, '. Use default BP method')             # <<<<<<<<<<<<<<
@@ -12803,7 +13055,7 @@ static ADIOS_READ_METHOD __pyx_f_9adios_mpi_str2adiosreadmethod(PyObject *__pyx_
  * 
  */
   /*else*/ {
-    __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 816, __pyx_L1_error)
+    __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 824, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_INCREF(__pyx_kp_s_WARN_Invalid_read_method_name);
     __Pyx_GIVEREF(__pyx_kp_s_WARN_Invalid_read_method_name);
@@ -12814,21 +13066,21 @@ static ADIOS_READ_METHOD __pyx_f_9adios_mpi_str2adiosreadmethod(PyObject *__pyx_
     __Pyx_INCREF(__pyx_kp_s_Use_default_BP_method);
     __Pyx_GIVEREF(__pyx_kp_s_Use_default_BP_method);
     PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_s_Use_default_BP_method);
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 816, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 824, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "adios_mpi.pyx":817
+    /* "adios_mpi.pyx":825
  *     else:
  *         print ('[WARN] Invalid read method name:', name, '. Use default BP method')
  *         method = READ_METHOD.BP             # <<<<<<<<<<<<<<
  * 
  *     return method
  */
-    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_READ_METHOD); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 817, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_READ_METHOD); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 825, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_BP); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 817, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_BP); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 825, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __pyx_v_method = __pyx_t_2;
@@ -12836,18 +13088,18 @@ static ADIOS_READ_METHOD __pyx_f_9adios_mpi_str2adiosreadmethod(PyObject *__pyx_
   }
   __pyx_L3:;
 
-  /* "adios_mpi.pyx":819
+  /* "adios_mpi.pyx":827
  *         method = READ_METHOD.BP
  * 
  *     return method             # <<<<<<<<<<<<<<
  * 
  * cpdef np2adiostype(np.dtype nptype):
  */
-  __pyx_t_4 = ((ADIOS_READ_METHOD)__Pyx_PyInt_As_ADIOS_READ_METHOD(__pyx_v_method)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 819, __pyx_L1_error)
+  __pyx_t_4 = ((ADIOS_READ_METHOD)__Pyx_PyInt_As_ADIOS_READ_METHOD(__pyx_v_method)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 827, __pyx_L1_error)
   __pyx_r = __pyx_t_4;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":802
+  /* "adios_mpi.pyx":810
  *     print ('%15s : %d' % ('nsteps', v.nsteps))
  * 
  * cdef ADIOS_READ_METHOD str2adiosreadmethod(name):             # <<<<<<<<<<<<<<
@@ -12867,7 +13119,7 @@ static ADIOS_READ_METHOD __pyx_f_9adios_mpi_str2adiosreadmethod(PyObject *__pyx_
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":821
+/* "adios_mpi.pyx":829
  *     return method
  * 
  * cpdef np2adiostype(np.dtype nptype):             # <<<<<<<<<<<<<<
@@ -12886,55 +13138,55 @@ static PyObject *__pyx_f_9adios_mpi_np2adiostype(PyArray_Descr *__pyx_v_nptype,
   int __pyx_t_4;
   __Pyx_RefNannySetupContext("np2adiostype", 0);
 
-  /* "adios_mpi.pyx":825
+  /* "adios_mpi.pyx":833
  *     """
  * 
  *     cdef atype = DATATYPE.unknown             # <<<<<<<<<<<<<<
  * 
  *     if (nptype == np.bool_):
  */
-  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 825, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 833, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_unknown); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 825, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_unknown); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 833, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_atype = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "adios_mpi.pyx":827
+  /* "adios_mpi.pyx":835
  *     cdef atype = DATATYPE.unknown
  * 
  *     if (nptype == np.bool_):             # <<<<<<<<<<<<<<
  *         atype = DATATYPE.byte
  *     elif (nptype == np.int8):
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 827, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 835, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_bool); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 827, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_bool); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 835, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 827, __pyx_L1_error)
+  __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 835, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 827, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 835, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   if (__pyx_t_3) {
 
-    /* "adios_mpi.pyx":828
+    /* "adios_mpi.pyx":836
  * 
  *     if (nptype == np.bool_):
  *         atype = DATATYPE.byte             # <<<<<<<<<<<<<<
  *     elif (nptype == np.int8):
  *         atype = DATATYPE.byte
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 828, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 836, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_byte); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 828, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_byte); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 836, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "adios_mpi.pyx":827
+    /* "adios_mpi.pyx":835
  *     cdef atype = DATATYPE.unknown
  * 
  *     if (nptype == np.bool_):             # <<<<<<<<<<<<<<
@@ -12944,40 +13196,40 @@ static PyObject *__pyx_f_9adios_mpi_np2adiostype(PyArray_Descr *__pyx_v_nptype,
     goto __pyx_L3;
   }
 
-  /* "adios_mpi.pyx":829
+  /* "adios_mpi.pyx":837
  *     if (nptype == np.bool_):
  *         atype = DATATYPE.byte
  *     elif (nptype == np.int8):             # <<<<<<<<<<<<<<
  *         atype = DATATYPE.byte
  *     elif (nptype == np.int16):
  */
-  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 829, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 837, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_int8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 829, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_int8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 837, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 829, __pyx_L1_error)
+  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 837, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 829, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 837, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   if (__pyx_t_3) {
 
-    /* "adios_mpi.pyx":830
+    /* "adios_mpi.pyx":838
  *         atype = DATATYPE.byte
  *     elif (nptype == np.int8):
  *         atype = DATATYPE.byte             # <<<<<<<<<<<<<<
  *     elif (nptype == np.int16):
  *         atype = DATATYPE.short
  */
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 830, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 838, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_byte); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 830, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_byte); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 838, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_2);
     __pyx_t_2 = 0;
 
-    /* "adios_mpi.pyx":829
+    /* "adios_mpi.pyx":837
  *     if (nptype == np.bool_):
  *         atype = DATATYPE.byte
  *     elif (nptype == np.int8):             # <<<<<<<<<<<<<<
@@ -12987,40 +13239,40 @@ static PyObject *__pyx_f_9adios_mpi_np2adiostype(PyArray_Descr *__pyx_v_nptype,
     goto __pyx_L3;
   }
 
-  /* "adios_mpi.pyx":831
+  /* "adios_mpi.pyx":839
  *     elif (nptype == np.int8):
  *         atype = DATATYPE.byte
  *     elif (nptype == np.int16):             # <<<<<<<<<<<<<<
  *         atype = DATATYPE.short
  *     elif (nptype == np.int32):
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 831, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 839, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_int16); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 831, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_int16); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 839, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 831, __pyx_L1_error)
+  __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 839, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 831, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 839, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   if (__pyx_t_3) {
 
-    /* "adios_mpi.pyx":832
+    /* "adios_mpi.pyx":840
  *         atype = DATATYPE.byte
  *     elif (nptype == np.int16):
  *         atype = DATATYPE.short             # <<<<<<<<<<<<<<
  *     elif (nptype == np.int32):
  *         atype = DATATYPE.integer
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 832, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 840, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_short); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 832, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_short); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 840, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "adios_mpi.pyx":831
+    /* "adios_mpi.pyx":839
  *     elif (nptype == np.int8):
  *         atype = DATATYPE.byte
  *     elif (nptype == np.int16):             # <<<<<<<<<<<<<<
@@ -13030,40 +13282,40 @@ static PyObject *__pyx_f_9adios_mpi_np2adiostype(PyArray_Descr *__pyx_v_nptype,
     goto __pyx_L3;
   }
 
-  /* "adios_mpi.pyx":833
+  /* "adios_mpi.pyx":841
  *     elif (nptype == np.int16):
  *         atype = DATATYPE.short
  *     elif (nptype == np.int32):             # <<<<<<<<<<<<<<
  *         atype = DATATYPE.integer
  *     elif (nptype == np.int64):
  */
-  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 833, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 841, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_int32); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 833, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_int32); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 841, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 833, __pyx_L1_error)
+  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 841, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 833, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 841, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   if (__pyx_t_3) {
 
-    /* "adios_mpi.pyx":834
+    /* "adios_mpi.pyx":842
  *         atype = DATATYPE.short
  *     elif (nptype == np.int32):
  *         atype = DATATYPE.integer             # <<<<<<<<<<<<<<
  *     elif (nptype == np.int64):
  *         atype = DATATYPE.long
  */
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 834, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 842, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_integer); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 834, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_integer); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 842, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_2);
     __pyx_t_2 = 0;
 
-    /* "adios_mpi.pyx":833
+    /* "adios_mpi.pyx":841
  *     elif (nptype == np.int16):
  *         atype = DATATYPE.short
  *     elif (nptype == np.int32):             # <<<<<<<<<<<<<<
@@ -13073,40 +13325,40 @@ static PyObject *__pyx_f_9adios_mpi_np2adiostype(PyArray_Descr *__pyx_v_nptype,
     goto __pyx_L3;
   }
 
-  /* "adios_mpi.pyx":835
+  /* "adios_mpi.pyx":843
  *     elif (nptype == np.int32):
  *         atype = DATATYPE.integer
  *     elif (nptype == np.int64):             # <<<<<<<<<<<<<<
  *         atype = DATATYPE.long
  *     elif (nptype == np.uint8):
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 835, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 843, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_int64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 835, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_int64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 843, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 835, __pyx_L1_error)
+  __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 843, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 835, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 843, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   if (__pyx_t_3) {
 
-    /* "adios_mpi.pyx":836
+    /* "adios_mpi.pyx":844
  *         atype = DATATYPE.integer
  *     elif (nptype == np.int64):
  *         atype = DATATYPE.long             # <<<<<<<<<<<<<<
  *     elif (nptype == np.uint8):
  *         atype = DATATYPE.unsigned_byte
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 836, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 844, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_long); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 836, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_long); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 844, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "adios_mpi.pyx":835
+    /* "adios_mpi.pyx":843
  *     elif (nptype == np.int32):
  *         atype = DATATYPE.integer
  *     elif (nptype == np.int64):             # <<<<<<<<<<<<<<
@@ -13116,40 +13368,40 @@ static PyObject *__pyx_f_9adios_mpi_np2adiostype(PyArray_Descr *__pyx_v_nptype,
     goto __pyx_L3;
   }
 
-  /* "adios_mpi.pyx":837
+  /* "adios_mpi.pyx":845
  *     elif (nptype == np.int64):
  *         atype = DATATYPE.long
  *     elif (nptype == np.uint8):             # <<<<<<<<<<<<<<
  *         atype = DATATYPE.unsigned_byte
  *     elif (nptype == np.uint16):
  */
-  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 837, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 845, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_uint8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 837, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_uint8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 845, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 837, __pyx_L1_error)
+  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 845, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 837, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 845, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   if (__pyx_t_3) {
 
-    /* "adios_mpi.pyx":838
+    /* "adios_mpi.pyx":846
  *         atype = DATATYPE.long
  *     elif (nptype == np.uint8):
  *         atype = DATATYPE.unsigned_byte             # <<<<<<<<<<<<<<
  *     elif (nptype == np.uint16):
  *         atype = DATATYPE.unsigned_short
  */
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 838, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 846, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_unsigned_byte); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 838, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_unsigned_byte); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 846, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_2);
     __pyx_t_2 = 0;
 
-    /* "adios_mpi.pyx":837
+    /* "adios_mpi.pyx":845
  *     elif (nptype == np.int64):
  *         atype = DATATYPE.long
  *     elif (nptype == np.uint8):             # <<<<<<<<<<<<<<
@@ -13159,40 +13411,40 @@ static PyObject *__pyx_f_9adios_mpi_np2adiostype(PyArray_Descr *__pyx_v_nptype,
     goto __pyx_L3;
   }
 
-  /* "adios_mpi.pyx":839
+  /* "adios_mpi.pyx":847
  *     elif (nptype == np.uint8):
  *         atype = DATATYPE.unsigned_byte
  *     elif (nptype == np.uint16):             # <<<<<<<<<<<<<<
  *         atype = DATATYPE.unsigned_short
  *     elif (nptype == np.uint32):
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 839, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 847, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_uint16); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 839, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_uint16); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 847, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 839, __pyx_L1_error)
+  __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 847, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 839, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 847, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   if (__pyx_t_3) {
 
-    /* "adios_mpi.pyx":840
+    /* "adios_mpi.pyx":848
  *         atype = DATATYPE.unsigned_byte
  *     elif (nptype == np.uint16):
  *         atype = DATATYPE.unsigned_short             # <<<<<<<<<<<<<<
  *     elif (nptype == np.uint32):
  *         atype = DATATYPE.unsigned_integer
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 840, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 848, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_unsigned_short); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 840, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_unsigned_short); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 848, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "adios_mpi.pyx":839
+    /* "adios_mpi.pyx":847
  *     elif (nptype == np.uint8):
  *         atype = DATATYPE.unsigned_byte
  *     elif (nptype == np.uint16):             # <<<<<<<<<<<<<<
@@ -13202,40 +13454,40 @@ static PyObject *__pyx_f_9adios_mpi_np2adiostype(PyArray_Descr *__pyx_v_nptype,
     goto __pyx_L3;
   }
 
-  /* "adios_mpi.pyx":841
+  /* "adios_mpi.pyx":849
  *     elif (nptype == np.uint16):
  *         atype = DATATYPE.unsigned_short
  *     elif (nptype == np.uint32):             # <<<<<<<<<<<<<<
  *         atype = DATATYPE.unsigned_integer
  *     elif (nptype == np.uint64):
  */
-  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 841, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 849, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_uint32); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 841, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_uint32); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 849, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 841, __pyx_L1_error)
+  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 849, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 841, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 849, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   if (__pyx_t_3) {
 
-    /* "adios_mpi.pyx":842
+    /* "adios_mpi.pyx":850
  *         atype = DATATYPE.unsigned_short
  *     elif (nptype == np.uint32):
  *         atype = DATATYPE.unsigned_integer             # <<<<<<<<<<<<<<
  *     elif (nptype == np.uint64):
  *         atype = DATATYPE.unsigned_long
  */
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 842, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 850, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_unsigned_integer); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 842, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_unsigned_integer); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 850, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_2);
     __pyx_t_2 = 0;
 
-    /* "adios_mpi.pyx":841
+    /* "adios_mpi.pyx":849
  *     elif (nptype == np.uint16):
  *         atype = DATATYPE.unsigned_short
  *     elif (nptype == np.uint32):             # <<<<<<<<<<<<<<
@@ -13245,40 +13497,40 @@ static PyObject *__pyx_f_9adios_mpi_np2adiostype(PyArray_Descr *__pyx_v_nptype,
     goto __pyx_L3;
   }
 
-  /* "adios_mpi.pyx":843
+  /* "adios_mpi.pyx":851
  *     elif (nptype == np.uint32):
  *         atype = DATATYPE.unsigned_integer
  *     elif (nptype == np.uint64):             # <<<<<<<<<<<<<<
  *         atype = DATATYPE.unsigned_long
  *     elif (nptype == np.float_):
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 843, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 851, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_uint64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 843, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_uint64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 851, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 843, __pyx_L1_error)
+  __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 851, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 843, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 851, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   if (__pyx_t_3) {
 
-    /* "adios_mpi.pyx":844
+    /* "adios_mpi.pyx":852
  *         atype = DATATYPE.unsigned_integer
  *     elif (nptype == np.uint64):
  *         atype = DATATYPE.unsigned_long             # <<<<<<<<<<<<<<
  *     elif (nptype == np.float_):
  *         atype = DATATYPE.double
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 844, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 852, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_unsigned_long); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 844, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_unsigned_long); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 852, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "adios_mpi.pyx":843
+    /* "adios_mpi.pyx":851
  *     elif (nptype == np.uint32):
  *         atype = DATATYPE.unsigned_integer
  *     elif (nptype == np.uint64):             # <<<<<<<<<<<<<<
@@ -13288,40 +13540,40 @@ static PyObject *__pyx_f_9adios_mpi_np2adiostype(PyArray_Descr *__pyx_v_nptype,
     goto __pyx_L3;
   }
 
-  /* "adios_mpi.pyx":845
+  /* "adios_mpi.pyx":853
  *     elif (nptype == np.uint64):
  *         atype = DATATYPE.unsigned_long
  *     elif (nptype == np.float_):             # <<<<<<<<<<<<<<
  *         atype = DATATYPE.double
  *     elif (nptype == np.float16):
  */
-  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 845, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 853, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 845, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 853, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 845, __pyx_L1_error)
+  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 853, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 845, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 853, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   if (__pyx_t_3) {
 
-    /* "adios_mpi.pyx":846
+    /* "adios_mpi.pyx":854
  *         atype = DATATYPE.unsigned_long
  *     elif (nptype == np.float_):
  *         atype = DATATYPE.double             # <<<<<<<<<<<<<<
  *     elif (nptype == np.float16):
  *         atype = DATATYPE.real
  */
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 846, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 854, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_double); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 846, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_double); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 854, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_2);
     __pyx_t_2 = 0;
 
-    /* "adios_mpi.pyx":845
+    /* "adios_mpi.pyx":853
  *     elif (nptype == np.uint64):
  *         atype = DATATYPE.unsigned_long
  *     elif (nptype == np.float_):             # <<<<<<<<<<<<<<
@@ -13331,40 +13583,40 @@ static PyObject *__pyx_f_9adios_mpi_np2adiostype(PyArray_Descr *__pyx_v_nptype,
     goto __pyx_L3;
   }
 
-  /* "adios_mpi.pyx":847
+  /* "adios_mpi.pyx":855
  *     elif (nptype == np.float_):
  *         atype = DATATYPE.double
  *     elif (nptype == np.float16):             # <<<<<<<<<<<<<<
  *         atype = DATATYPE.real
  *     elif (nptype == np.float32):
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 847, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 855, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_float16); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 847, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_float16); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 855, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 847, __pyx_L1_error)
+  __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 855, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 847, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 855, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   if (__pyx_t_3) {
 
-    /* "adios_mpi.pyx":848
+    /* "adios_mpi.pyx":856
  *         atype = DATATYPE.double
  *     elif (nptype == np.float16):
  *         atype = DATATYPE.real             # <<<<<<<<<<<<<<
  *     elif (nptype == np.float32):
  *         atype = DATATYPE.real
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 848, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 856, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_real); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 848, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_real); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 856, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "adios_mpi.pyx":847
+    /* "adios_mpi.pyx":855
  *     elif (nptype == np.float_):
  *         atype = DATATYPE.double
  *     elif (nptype == np.float16):             # <<<<<<<<<<<<<<
@@ -13374,40 +13626,40 @@ static PyObject *__pyx_f_9adios_mpi_np2adiostype(PyArray_Descr *__pyx_v_nptype,
     goto __pyx_L3;
   }
 
-  /* "adios_mpi.pyx":849
+  /* "adios_mpi.pyx":857
  *     elif (nptype == np.float16):
  *         atype = DATATYPE.real
  *     elif (nptype == np.float32):             # <<<<<<<<<<<<<<
  *         atype = DATATYPE.real
  *     elif (nptype == np.float64):
  */
-  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 849, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 857, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 849, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 857, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 849, __pyx_L1_error)
+  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 857, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 849, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 857, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   if (__pyx_t_3) {
 
-    /* "adios_mpi.pyx":850
+    /* "adios_mpi.pyx":858
  *         atype = DATATYPE.real
  *     elif (nptype == np.float32):
  *         atype = DATATYPE.real             # <<<<<<<<<<<<<<
  *     elif (nptype == np.float64):
  *         atype = DATATYPE.double
  */
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 850, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 858, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_real); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 850, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_real); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 858, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_2);
     __pyx_t_2 = 0;
 
-    /* "adios_mpi.pyx":849
+    /* "adios_mpi.pyx":857
  *     elif (nptype == np.float16):
  *         atype = DATATYPE.real
  *     elif (nptype == np.float32):             # <<<<<<<<<<<<<<
@@ -13417,40 +13669,40 @@ static PyObject *__pyx_f_9adios_mpi_np2adiostype(PyArray_Descr *__pyx_v_nptype,
     goto __pyx_L3;
   }
 
-  /* "adios_mpi.pyx":851
+  /* "adios_mpi.pyx":859
  *     elif (nptype == np.float32):
  *         atype = DATATYPE.real
  *     elif (nptype == np.float64):             # <<<<<<<<<<<<<<
  *         atype = DATATYPE.double
  *     elif (nptype == np.complex_):
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 851, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 859, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_float64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 851, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_float64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 859, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 851, __pyx_L1_error)
+  __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 859, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 851, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 859, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   if (__pyx_t_3) {
 
-    /* "adios_mpi.pyx":852
+    /* "adios_mpi.pyx":860
  *         atype = DATATYPE.real
  *     elif (nptype == np.float64):
  *         atype = DATATYPE.double             # <<<<<<<<<<<<<<
  *     elif (nptype == np.complex_):
  *         atype = DATATYPE.double_complex
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 852, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 860, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_double); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 852, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_double); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 860, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "adios_mpi.pyx":851
+    /* "adios_mpi.pyx":859
  *     elif (nptype == np.float32):
  *         atype = DATATYPE.real
  *     elif (nptype == np.float64):             # <<<<<<<<<<<<<<
@@ -13460,40 +13712,40 @@ static PyObject *__pyx_f_9adios_mpi_np2adiostype(PyArray_Descr *__pyx_v_nptype,
     goto __pyx_L3;
   }
 
-  /* "adios_mpi.pyx":853
+  /* "adios_mpi.pyx":861
  *     elif (nptype == np.float64):
  *         atype = DATATYPE.double
  *     elif (nptype == np.complex_):             # <<<<<<<<<<<<<<
  *         atype = DATATYPE.double_complex
  *     elif (nptype == np.complex64):
  */
-  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 853, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 861, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_complex); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 853, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_complex); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 861, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 853, __pyx_L1_error)
+  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 861, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 853, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 861, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   if (__pyx_t_3) {
 
-    /* "adios_mpi.pyx":854
+    /* "adios_mpi.pyx":862
  *         atype = DATATYPE.double
  *     elif (nptype == np.complex_):
  *         atype = DATATYPE.double_complex             # <<<<<<<<<<<<<<
  *     elif (nptype == np.complex64):
  *         atype = DATATYPE.complex
  */
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 854, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 862, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_double_complex); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 854, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_double_complex); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 862, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_2);
     __pyx_t_2 = 0;
 
-    /* "adios_mpi.pyx":853
+    /* "adios_mpi.pyx":861
  *     elif (nptype == np.float64):
  *         atype = DATATYPE.double
  *     elif (nptype == np.complex_):             # <<<<<<<<<<<<<<
@@ -13503,40 +13755,40 @@ static PyObject *__pyx_f_9adios_mpi_np2adiostype(PyArray_Descr *__pyx_v_nptype,
     goto __pyx_L3;
   }
 
-  /* "adios_mpi.pyx":855
+  /* "adios_mpi.pyx":863
  *     elif (nptype == np.complex_):
  *         atype = DATATYPE.double_complex
  *     elif (nptype == np.complex64):             # <<<<<<<<<<<<<<
  *         atype = DATATYPE.complex
  *     elif (nptype == np.complex128):
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 855, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 863, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_complex64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 855, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_complex64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 863, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 855, __pyx_L1_error)
+  __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 863, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 855, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 863, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   if (__pyx_t_3) {
 
-    /* "adios_mpi.pyx":856
+    /* "adios_mpi.pyx":864
  *         atype = DATATYPE.double_complex
  *     elif (nptype == np.complex64):
  *         atype = DATATYPE.complex             # <<<<<<<<<<<<<<
  *     elif (nptype == np.complex128):
  *         atype = DATATYPE.double_complex
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 856, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 864, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_complex_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 856, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_complex_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 864, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "adios_mpi.pyx":855
+    /* "adios_mpi.pyx":863
  *     elif (nptype == np.complex_):
  *         atype = DATATYPE.double_complex
  *     elif (nptype == np.complex64):             # <<<<<<<<<<<<<<
@@ -13546,40 +13798,40 @@ static PyObject *__pyx_f_9adios_mpi_np2adiostype(PyArray_Descr *__pyx_v_nptype,
     goto __pyx_L3;
   }
 
-  /* "adios_mpi.pyx":857
+  /* "adios_mpi.pyx":865
  *     elif (nptype == np.complex64):
  *         atype = DATATYPE.complex
  *     elif (nptype == np.complex128):             # <<<<<<<<<<<<<<
  *         atype = DATATYPE.double_complex
  *     elif (nptype.char in ('S', 'U')):
  */
-  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 857, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 865, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_complex128); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 857, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_complex128); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 865, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 857, __pyx_L1_error)
+  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_nptype), __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 865, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 857, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 865, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   if (__pyx_t_3) {
 
-    /* "adios_mpi.pyx":858
+    /* "adios_mpi.pyx":866
  *         atype = DATATYPE.complex
  *     elif (nptype == np.complex128):
  *         atype = DATATYPE.double_complex             # <<<<<<<<<<<<<<
  *     elif (nptype.char in ('S', 'U')):
  *         atype = DATATYPE.string
  */
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 858, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 866, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_double_complex); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 858, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_double_complex); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 866, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_2);
     __pyx_t_2 = 0;
 
-    /* "adios_mpi.pyx":857
+    /* "adios_mpi.pyx":865
  *     elif (nptype == np.complex64):
  *         atype = DATATYPE.complex
  *     elif (nptype == np.complex128):             # <<<<<<<<<<<<<<
@@ -13589,44 +13841,44 @@ static PyObject *__pyx_f_9adios_mpi_np2adiostype(PyArray_Descr *__pyx_v_nptype,
     goto __pyx_L3;
   }
 
-  /* "adios_mpi.pyx":859
+  /* "adios_mpi.pyx":867
  *     elif (nptype == np.complex128):
  *         atype = DATATYPE.double_complex
  *     elif (nptype.char in ('S', 'U')):             # <<<<<<<<<<<<<<
  *         atype = DATATYPE.string
  *     else:
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_nptype), __pyx_n_s_char); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 859, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_nptype), __pyx_n_s_char); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 867, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_4 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_n_s_S, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 859, __pyx_L1_error)
+  __pyx_t_4 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_n_s_S, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 867, __pyx_L1_error)
   if (!__pyx_t_4) {
   } else {
     __pyx_t_3 = __pyx_t_4;
     goto __pyx_L4_bool_binop_done;
   }
-  __pyx_t_4 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_n_s_U, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 859, __pyx_L1_error)
+  __pyx_t_4 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_n_s_U, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 867, __pyx_L1_error)
   __pyx_t_3 = __pyx_t_4;
   __pyx_L4_bool_binop_done:;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "adios_mpi.pyx":860
+    /* "adios_mpi.pyx":868
  *         atype = DATATYPE.double_complex
  *     elif (nptype.char in ('S', 'U')):
  *         atype = DATATYPE.string             # <<<<<<<<<<<<<<
  *     else:
  *         atype = DATATYPE.unknown
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 860, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 868, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_string); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 860, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_string); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 868, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "adios_mpi.pyx":859
+    /* "adios_mpi.pyx":867
  *     elif (nptype == np.complex128):
  *         atype = DATATYPE.double_complex
  *     elif (nptype.char in ('S', 'U')):             # <<<<<<<<<<<<<<
@@ -13636,7 +13888,7 @@ static PyObject *__pyx_f_9adios_mpi_np2adiostype(PyArray_Descr *__pyx_v_nptype,
     goto __pyx_L3;
   }
 
-  /* "adios_mpi.pyx":862
+  /* "adios_mpi.pyx":870
  *         atype = DATATYPE.string
  *     else:
  *         atype = DATATYPE.unknown             # <<<<<<<<<<<<<<
@@ -13644,9 +13896,9 @@ static PyObject *__pyx_f_9adios_mpi_np2adiostype(PyArray_Descr *__pyx_v_nptype,
  *     return atype
  */
   /*else*/ {
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 862, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 870, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_unknown); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 862, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_unknown); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 870, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF_SET(__pyx_v_atype, __pyx_t_2);
@@ -13654,7 +13906,7 @@ static PyObject *__pyx_f_9adios_mpi_np2adiostype(PyArray_Descr *__pyx_v_nptype,
   }
   __pyx_L3:;
 
-  /* "adios_mpi.pyx":864
+  /* "adios_mpi.pyx":872
  *         atype = DATATYPE.unknown
  * 
  *     return atype             # <<<<<<<<<<<<<<
@@ -13666,7 +13918,7 @@ static PyObject *__pyx_f_9adios_mpi_np2adiostype(PyArray_Descr *__pyx_v_nptype,
   __pyx_r = __pyx_v_atype;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":821
+  /* "adios_mpi.pyx":829
  *     return method
  * 
  * cpdef np2adiostype(np.dtype nptype):             # <<<<<<<<<<<<<<
@@ -13694,7 +13946,7 @@ static PyObject *__pyx_pw_9adios_mpi_85np2adiostype(PyObject *__pyx_self, PyObje
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("np2adiostype (wrapper)", 0);
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_nptype), __pyx_ptype_5numpy_dtype, 1, "nptype", 0))) __PYX_ERR(0, 821, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_nptype), __pyx_ptype_5numpy_dtype, 1, "nptype", 0))) __PYX_ERR(0, 829, __pyx_L1_error)
   __pyx_r = __pyx_pf_9adios_mpi_84np2adiostype(__pyx_self, ((PyArray_Descr *)__pyx_v_nptype));
 
   /* function exit code */
@@ -13712,7 +13964,7 @@ static PyObject *__pyx_pf_9adios_mpi_84np2adiostype(CYTHON_UNUSED PyObject *__py
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("np2adiostype", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_9adios_mpi_np2adiostype(__pyx_v_nptype, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 821, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_9adios_mpi_np2adiostype(__pyx_v_nptype, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 829, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -13729,7 +13981,7 @@ static PyObject *__pyx_pf_9adios_mpi_84np2adiostype(CYTHON_UNUSED PyObject *__py
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":866
+/* "adios_mpi.pyx":874
  *     return atype
  * 
  * cpdef str adiostype2string (ADIOS_DATATYPES type):             # <<<<<<<<<<<<<<
@@ -13745,7 +13997,7 @@ static PyObject *__pyx_f_9adios_mpi_adiostype2string(ADIOS_DATATYPES __pyx_v_typ
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("adiostype2string", 0);
 
-  /* "adios_mpi.pyx":867
+  /* "adios_mpi.pyx":875
  * 
  * cpdef str adiostype2string (ADIOS_DATATYPES type):
  *     return str(adios_type_to_string(<ADIOS_DATATYPES> type))             # <<<<<<<<<<<<<<
@@ -13753,22 +14005,22 @@ static PyObject *__pyx_f_9adios_mpi_adiostype2string(ADIOS_DATATYPES __pyx_v_typ
  * ## ====================
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyBytes_FromString(adios_type_to_string(((ADIOS_DATATYPES)__pyx_v_type))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 867, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyBytes_FromString(adios_type_to_string(((ADIOS_DATATYPES)__pyx_v_type))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 875, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 867, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 875, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 867, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 875, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (!(likely(PyString_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 867, __pyx_L1_error)
+  if (!(likely(PyString_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 875, __pyx_L1_error)
   __pyx_r = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":866
+  /* "adios_mpi.pyx":874
  *     return atype
  * 
  * cpdef str adiostype2string (ADIOS_DATATYPES type):             # <<<<<<<<<<<<<<
@@ -13797,7 +14049,7 @@ static PyObject *__pyx_pw_9adios_mpi_87adiostype2string(PyObject *__pyx_self, Py
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("adiostype2string (wrapper)", 0);
   assert(__pyx_arg_type); {
-    __pyx_v_type = ((ADIOS_DATATYPES)__Pyx_PyInt_As_ADIOS_DATATYPES(__pyx_arg_type)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 866, __pyx_L3_error)
+    __pyx_v_type = ((ADIOS_DATATYPES)__Pyx_PyInt_As_ADIOS_DATATYPES(__pyx_arg_type)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 874, __pyx_L3_error)
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L3_error:;
@@ -13818,7 +14070,7 @@ static PyObject *__pyx_pf_9adios_mpi_86adiostype2string(CYTHON_UNUSED PyObject *
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("adiostype2string", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_9adios_mpi_adiostype2string(__pyx_v_type, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 866, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_9adios_mpi_adiostype2string(__pyx_v_type, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 874, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -13835,7 +14087,7 @@ static PyObject *__pyx_pf_9adios_mpi_86adiostype2string(CYTHON_UNUSED PyObject *
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":874
+/* "adios_mpi.pyx":882
  * 
  * """ Call adios_read_init_method """
  * cpdef int read_init(str method_name = "BP",             # <<<<<<<<<<<<<<
@@ -13869,17 +14121,17 @@ static int __pyx_f_9adios_mpi_read_init(CYTHON_UNUSED int __pyx_skip_dispatch, s
     }
   }
 
-  /* "adios_mpi.pyx":878
+  /* "adios_mpi.pyx":886
  *                     str parameters = ""):
  *     global read_init_comm
  *     read_init_comm = comm.Clone()             # <<<<<<<<<<<<<<
  *     cdef method = str2adiosreadmethod(method_name)
  *     return adios_read_init_method (method, read_init_comm.ob_mpi, s2b(parameters))
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_comm), __pyx_n_s_Clone); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 878, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_comm), __pyx_n_s_Clone); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 886, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
     __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
     if (likely(__pyx_t_3)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
@@ -13889,47 +14141,47 @@ static int __pyx_f_9adios_mpi_read_init(CYTHON_UNUSED int __pyx_skip_dispatch, s
     }
   }
   if (__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 878, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 886, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   } else {
-    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 878, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 886, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_6mpi4py_3MPI_Comm))))) __PYX_ERR(0, 878, __pyx_L1_error)
+  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_6mpi4py_3MPI_Comm))))) __PYX_ERR(0, 886, __pyx_L1_error)
   __Pyx_XGOTREF(((PyObject *)__pyx_v_9adios_mpi_read_init_comm));
   __Pyx_DECREF_SET(__pyx_v_9adios_mpi_read_init_comm, ((struct PyMPICommObject *)__pyx_t_1));
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":879
+  /* "adios_mpi.pyx":887
  *     global read_init_comm
  *     read_init_comm = comm.Clone()
  *     cdef method = str2adiosreadmethod(method_name)             # <<<<<<<<<<<<<<
  *     return adios_read_init_method (method, read_init_comm.ob_mpi, s2b(parameters))
  * 
  */
-  __pyx_t_1 = __Pyx_PyInt_From_ADIOS_READ_METHOD(__pyx_f_9adios_mpi_str2adiosreadmethod(__pyx_v_method_name)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 879, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_ADIOS_READ_METHOD(__pyx_f_9adios_mpi_str2adiosreadmethod(__pyx_v_method_name)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 887, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_method = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":880
+  /* "adios_mpi.pyx":888
  *     read_init_comm = comm.Clone()
  *     cdef method = str2adiosreadmethod(method_name)
  *     return adios_read_init_method (method, read_init_comm.ob_mpi, s2b(parameters))             # <<<<<<<<<<<<<<
  * 
  * 
  */
-  __pyx_t_4 = ((ADIOS_READ_METHOD)__Pyx_PyInt_As_ADIOS_READ_METHOD(__pyx_v_method)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 880, __pyx_L1_error)
-  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_parameters, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 880, __pyx_L1_error)
+  __pyx_t_4 = ((ADIOS_READ_METHOD)__Pyx_PyInt_As_ADIOS_READ_METHOD(__pyx_v_method)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 888, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_parameters, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 888, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_5 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_5) && PyErr_Occurred())) __PYX_ERR(0, 880, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_5) && PyErr_Occurred())) __PYX_ERR(0, 888, __pyx_L1_error)
   __pyx_r = adios_read_init_method(__pyx_t_4, __pyx_v_9adios_mpi_read_init_comm->ob_mpi, __pyx_t_5);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":874
+  /* "adios_mpi.pyx":882
  * 
  * """ Call adios_read_init_method """
  * cpdef int read_init(str method_name = "BP",             # <<<<<<<<<<<<<<
@@ -13995,7 +14247,7 @@ static PyObject *__pyx_pw_9adios_mpi_89read_init(PyObject *__pyx_self, PyObject
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "read_init") < 0)) __PYX_ERR(0, 874, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "read_init") < 0)) __PYX_ERR(0, 882, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -14012,15 +14264,15 @@ static PyObject *__pyx_pw_9adios_mpi_89read_init(PyObject *__pyx_self, PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("read_init", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 874, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("read_init", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 882, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.read_init", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_method_name), (&PyString_Type), 1, "method_name", 1))) __PYX_ERR(0, 874, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_comm), __pyx_ptype_6mpi4py_3MPI_Comm, 1, "comm", 0))) __PYX_ERR(0, 875, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_parameters), (&PyString_Type), 1, "parameters", 1))) __PYX_ERR(0, 876, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_method_name), (&PyString_Type), 1, "method_name", 1))) __PYX_ERR(0, 882, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_comm), __pyx_ptype_6mpi4py_3MPI_Comm, 1, "comm", 0))) __PYX_ERR(0, 883, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_parameters), (&PyString_Type), 1, "parameters", 1))) __PYX_ERR(0, 884, __pyx_L1_error)
   __pyx_r = __pyx_pf_9adios_mpi_88read_init(__pyx_self, __pyx_v_method_name, __pyx_v_comm, __pyx_v_parameters);
 
   /* function exit code */
@@ -14045,7 +14297,7 @@ static PyObject *__pyx_pf_9adios_mpi_88read_init(CYTHON_UNUSED PyObject *__pyx_s
   __pyx_t_2.comm = __pyx_v_comm;
   __pyx_t_2.parameters = __pyx_v_parameters;
   __pyx_t_1 = __pyx_f_9adios_mpi_read_init(0, &__pyx_t_2); 
-  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 874, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 882, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
@@ -14062,7 +14314,7 @@ static PyObject *__pyx_pf_9adios_mpi_88read_init(CYTHON_UNUSED PyObject *__pyx_s
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":884
+/* "adios_mpi.pyx":892
  * 
  * """ Call adios_read_finalize_method """
  * cpdef int read_finalize(str method_name = "BP"):             # <<<<<<<<<<<<<<
@@ -14085,34 +14337,34 @@ static int __pyx_f_9adios_mpi_read_finalize(CYTHON_UNUSED int __pyx_skip_dispatc
     }
   }
 
-  /* "adios_mpi.pyx":885
+  /* "adios_mpi.pyx":893
  * """ Call adios_read_finalize_method """
  * cpdef int read_finalize(str method_name = "BP"):
  *     cdef method = str2adiosreadmethod(method_name)             # <<<<<<<<<<<<<<
  *     return adios_read_finalize_method (s2b(method))
  * 
  */
-  __pyx_t_1 = __Pyx_PyInt_From_ADIOS_READ_METHOD(__pyx_f_9adios_mpi_str2adiosreadmethod(__pyx_v_method_name)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 885, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_ADIOS_READ_METHOD(__pyx_f_9adios_mpi_str2adiosreadmethod(__pyx_v_method_name)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 893, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_method = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":886
+  /* "adios_mpi.pyx":894
  * cpdef int read_finalize(str method_name = "BP"):
  *     cdef method = str2adiosreadmethod(method_name)
  *     return adios_read_finalize_method (s2b(method))             # <<<<<<<<<<<<<<
  * 
  * ## dict for handling '/' prefix
  */
-  if (!(likely(PyString_CheckExact(__pyx_v_method))||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_v_method)->tp_name), 0))) __PYX_ERR(0, 886, __pyx_L1_error)
-  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(((PyObject*)__pyx_v_method), 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 886, __pyx_L1_error)
+  if (!(likely(PyString_CheckExact(__pyx_v_method))||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_v_method)->tp_name), 0))) __PYX_ERR(0, 894, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(((PyObject*)__pyx_v_method), 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 894, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = ((ADIOS_READ_METHOD)__Pyx_PyInt_As_ADIOS_READ_METHOD(__pyx_t_1)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 886, __pyx_L1_error)
+  __pyx_t_2 = ((ADIOS_READ_METHOD)__Pyx_PyInt_As_ADIOS_READ_METHOD(__pyx_t_1)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 894, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = adios_read_finalize_method(__pyx_t_2);
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":884
+  /* "adios_mpi.pyx":892
  * 
  * """ Call adios_read_finalize_method """
  * cpdef int read_finalize(str method_name = "BP"):             # <<<<<<<<<<<<<<
@@ -14160,7 +14412,7 @@ static PyObject *__pyx_pw_9adios_mpi_91read_finalize(PyObject *__pyx_self, PyObj
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "read_finalize") < 0)) __PYX_ERR(0, 884, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "read_finalize") < 0)) __PYX_ERR(0, 892, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -14173,13 +14425,13 @@ static PyObject *__pyx_pw_9adios_mpi_91read_finalize(PyObject *__pyx_self, PyObj
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("read_finalize", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 884, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("read_finalize", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 892, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.read_finalize", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_method_name), (&PyString_Type), 1, "method_name", 1))) __PYX_ERR(0, 884, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_method_name), (&PyString_Type), 1, "method_name", 1))) __PYX_ERR(0, 892, __pyx_L1_error)
   __pyx_r = __pyx_pf_9adios_mpi_90read_finalize(__pyx_self, __pyx_v_method_name);
 
   /* function exit code */
@@ -14202,7 +14454,7 @@ static PyObject *__pyx_pf_9adios_mpi_90read_finalize(CYTHON_UNUSED PyObject *__p
   __pyx_t_2.__pyx_n = 1;
   __pyx_t_2.method_name = __pyx_v_method_name;
   __pyx_t_1 = __pyx_f_9adios_mpi_read_finalize(0, &__pyx_t_2); 
-  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 884, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 892, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
@@ -14219,7 +14471,7 @@ static PyObject *__pyx_pf_9adios_mpi_90read_finalize(CYTHON_UNUSED PyObject *__p
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":890
+/* "adios_mpi.pyx":898
  * ## dict for handling '/' prefix
  * cdef class softdict(dict):
  *     def __getitem__(self, varname):             # <<<<<<<<<<<<<<
@@ -14254,7 +14506,7 @@ static PyObject *__pyx_pf_9adios_mpi_8softdict___getitem__(struct __pyx_obj_9adi
   __Pyx_RefNannySetupContext("__getitem__", 0);
   __Pyx_INCREF(__pyx_v_varname);
 
-  /* "adios_mpi.pyx":891
+  /* "adios_mpi.pyx":899
  * cdef class softdict(dict):
  *     def __getitem__(self, varname):
  *         if not isinstance(varname, tuple):             # <<<<<<<<<<<<<<
@@ -14265,14 +14517,14 @@ static PyObject *__pyx_pf_9adios_mpi_8softdict___getitem__(struct __pyx_obj_9adi
   __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0);
   if (__pyx_t_2) {
 
-    /* "adios_mpi.pyx":892
+    /* "adios_mpi.pyx":900
  *     def __getitem__(self, varname):
  *         if not isinstance(varname, tuple):
  *             varname = (varname,)             # <<<<<<<<<<<<<<
  * 
  *         if len(varname) > 1:
  */
-    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 892, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 900, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_varname);
     __Pyx_GIVEREF(__pyx_v_varname);
@@ -14280,7 +14532,7 @@ static PyObject *__pyx_pf_9adios_mpi_8softdict___getitem__(struct __pyx_obj_9adi
     __Pyx_DECREF_SET(__pyx_v_varname, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "adios_mpi.pyx":891
+    /* "adios_mpi.pyx":899
  * cdef class softdict(dict):
  *     def __getitem__(self, varname):
  *         if not isinstance(varname, tuple):             # <<<<<<<<<<<<<<
@@ -14289,37 +14541,37 @@ static PyObject *__pyx_pf_9adios_mpi_8softdict___getitem__(struct __pyx_obj_9adi
  */
   }
 
-  /* "adios_mpi.pyx":894
+  /* "adios_mpi.pyx":902
  *             varname = (varname,)
  * 
  *         if len(varname) > 1:             # <<<<<<<<<<<<<<
  *             raise KeyError(varname)
  * 
  */
-  __pyx_t_4 = PyObject_Length(__pyx_v_varname); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 894, __pyx_L1_error)
+  __pyx_t_4 = PyObject_Length(__pyx_v_varname); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 902, __pyx_L1_error)
   __pyx_t_2 = ((__pyx_t_4 > 1) != 0);
   if (__pyx_t_2) {
 
-    /* "adios_mpi.pyx":895
+    /* "adios_mpi.pyx":903
  * 
  *         if len(varname) > 1:
  *             raise KeyError(varname)             # <<<<<<<<<<<<<<
  * 
  *         for key_ in varname:
  */
-    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 895, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 903, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_varname);
     __Pyx_GIVEREF(__pyx_v_varname);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_varname);
-    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_KeyError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 895, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_KeyError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 903, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_Raise(__pyx_t_5, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    __PYX_ERR(0, 895, __pyx_L1_error)
+    __PYX_ERR(0, 903, __pyx_L1_error)
 
-    /* "adios_mpi.pyx":894
+    /* "adios_mpi.pyx":902
  *             varname = (varname,)
  * 
  *         if len(varname) > 1:             # <<<<<<<<<<<<<<
@@ -14328,7 +14580,7 @@ static PyObject *__pyx_pf_9adios_mpi_8softdict___getitem__(struct __pyx_obj_9adi
  */
   }
 
-  /* "adios_mpi.pyx":897
+  /* "adios_mpi.pyx":905
  *             raise KeyError(varname)
  * 
  *         for key_ in varname:             # <<<<<<<<<<<<<<
@@ -14339,26 +14591,26 @@ static PyObject *__pyx_pf_9adios_mpi_8softdict___getitem__(struct __pyx_obj_9adi
     __pyx_t_5 = __pyx_v_varname; __Pyx_INCREF(__pyx_t_5); __pyx_t_4 = 0;
     __pyx_t_6 = NULL;
   } else {
-    __pyx_t_4 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_v_varname); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 897, __pyx_L1_error)
+    __pyx_t_4 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_v_varname); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 905, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 897, __pyx_L1_error)
+    __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 905, __pyx_L1_error)
   }
   for (;;) {
     if (likely(!__pyx_t_6)) {
       if (likely(PyList_CheckExact(__pyx_t_5))) {
         if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_5)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_3 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 897, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_3 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 905, __pyx_L1_error)
         #else
-        __pyx_t_3 = PySequence_ITEM(__pyx_t_5, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 897, __pyx_L1_error)
+        __pyx_t_3 = PySequence_ITEM(__pyx_t_5, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 905, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
         #endif
       } else {
         if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_5)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 897, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 905, __pyx_L1_error)
         #else
-        __pyx_t_3 = PySequence_ITEM(__pyx_t_5, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 897, __pyx_L1_error)
+        __pyx_t_3 = PySequence_ITEM(__pyx_t_5, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 905, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
         #endif
       }
@@ -14368,7 +14620,7 @@ static PyObject *__pyx_pf_9adios_mpi_8softdict___getitem__(struct __pyx_obj_9adi
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
           if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-          else __PYX_ERR(0, 897, __pyx_L1_error)
+          else __PYX_ERR(0, 905, __pyx_L1_error)
         }
         break;
       }
@@ -14377,7 +14629,7 @@ static PyObject *__pyx_pf_9adios_mpi_8softdict___getitem__(struct __pyx_obj_9adi
     __Pyx_XDECREF_SET(__pyx_v_key_, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "adios_mpi.pyx":898
+    /* "adios_mpi.pyx":906
  * 
  *         for key_ in varname:
  *             if not isinstance(key_, str):             # <<<<<<<<<<<<<<
@@ -14388,20 +14640,20 @@ static PyObject *__pyx_pf_9adios_mpi_8softdict___getitem__(struct __pyx_obj_9adi
     __pyx_t_1 = ((!(__pyx_t_2 != 0)) != 0);
     if (__pyx_t_1) {
 
-      /* "adios_mpi.pyx":899
+      /* "adios_mpi.pyx":907
  *         for key_ in varname:
  *             if not isinstance(key_, str):
  *                 raise TypeError("Unhashable type")             # <<<<<<<<<<<<<<
  * 
  *             if key_.startswith('/'):
  */
-      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__13, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 899, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__13, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 907, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_Raise(__pyx_t_3, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      __PYX_ERR(0, 899, __pyx_L1_error)
+      __PYX_ERR(0, 907, __pyx_L1_error)
 
-      /* "adios_mpi.pyx":898
+      /* "adios_mpi.pyx":906
  * 
  *         for key_ in varname:
  *             if not isinstance(key_, str):             # <<<<<<<<<<<<<<
@@ -14410,35 +14662,35 @@ static PyObject *__pyx_pf_9adios_mpi_8softdict___getitem__(struct __pyx_obj_9adi
  */
     }
 
-    /* "adios_mpi.pyx":901
+    /* "adios_mpi.pyx":909
  *                 raise TypeError("Unhashable type")
  * 
  *             if key_.startswith('/'):             # <<<<<<<<<<<<<<
  *                 key_ = key_[1:]
  * 
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_key_, __pyx_n_s_startswith); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 901, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_key_, __pyx_n_s_startswith); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 909, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__14, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 901, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__14, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 909, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 901, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 909, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     if (__pyx_t_1) {
 
-      /* "adios_mpi.pyx":902
+      /* "adios_mpi.pyx":910
  * 
  *             if key_.startswith('/'):
  *                 key_ = key_[1:]             # <<<<<<<<<<<<<<
  * 
  *             if key_ in dict.keys(self):
  */
-      __pyx_t_7 = __Pyx_PyObject_GetSlice(__pyx_v_key_, 1, 0, NULL, NULL, &__pyx_slice__15, 1, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 902, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetSlice(__pyx_v_key_, 1, 0, NULL, NULL, &__pyx_slice__15, 1, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 910, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF_SET(__pyx_v_key_, __pyx_t_7);
       __pyx_t_7 = 0;
 
-      /* "adios_mpi.pyx":901
+      /* "adios_mpi.pyx":909
  *                 raise TypeError("Unhashable type")
  * 
  *             if key_.startswith('/'):             # <<<<<<<<<<<<<<
@@ -14447,7 +14699,7 @@ static PyObject *__pyx_pf_9adios_mpi_8softdict___getitem__(struct __pyx_obj_9adi
  */
     }
 
-    /* "adios_mpi.pyx":904
+    /* "adios_mpi.pyx":912
  *                 key_ = key_[1:]
  * 
  *             if key_ in dict.keys(self):             # <<<<<<<<<<<<<<
@@ -14456,16 +14708,16 @@ static PyObject *__pyx_pf_9adios_mpi_8softdict___getitem__(struct __pyx_obj_9adi
  */
     if (unlikely(((PyObject *)__pyx_v_self) == Py_None)) {
       PyErr_Format(PyExc_TypeError, "descriptor '%s' requires a '%s' object but received a 'NoneType'", "keys", "dict");
-      __PYX_ERR(0, 904, __pyx_L1_error)
+      __PYX_ERR(0, 912, __pyx_L1_error)
     }
-    __pyx_t_7 = __Pyx_PyDict_Keys(((PyObject*)__pyx_v_self)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 904, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyDict_Keys(((PyObject*)__pyx_v_self)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 912, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
-    __pyx_t_1 = (__Pyx_PySequence_ContainsTF(__pyx_v_key_, __pyx_t_7, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 904, __pyx_L1_error)
+    __pyx_t_1 = (__Pyx_PySequence_ContainsTF(__pyx_v_key_, __pyx_t_7, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 912, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
 
-      /* "adios_mpi.pyx":905
+      /* "adios_mpi.pyx":913
  * 
  *             if key_ in dict.keys(self):
  *                 return dict.get(self, key_)             # <<<<<<<<<<<<<<
@@ -14475,16 +14727,16 @@ static PyObject *__pyx_pf_9adios_mpi_8softdict___getitem__(struct __pyx_obj_9adi
       __Pyx_XDECREF(__pyx_r);
       if (unlikely(((PyObject *)__pyx_v_self) == Py_None)) {
         PyErr_Format(PyExc_TypeError, "descriptor '%s' requires a '%s' object but received a 'NoneType'", "get", "dict");
-        __PYX_ERR(0, 905, __pyx_L1_error)
+        __PYX_ERR(0, 913, __pyx_L1_error)
       }
-      __pyx_t_7 = __Pyx_PyDict_GetItemDefault(((PyObject *)__pyx_v_self), __pyx_v_key_, Py_None); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 905, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyDict_GetItemDefault(((PyObject *)__pyx_v_self), __pyx_v_key_, Py_None); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 913, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __pyx_r = __pyx_t_7;
       __pyx_t_7 = 0;
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       goto __pyx_L0;
 
-      /* "adios_mpi.pyx":904
+      /* "adios_mpi.pyx":912
  *                 key_ = key_[1:]
  * 
  *             if key_ in dict.keys(self):             # <<<<<<<<<<<<<<
@@ -14493,28 +14745,28 @@ static PyObject *__pyx_pf_9adios_mpi_8softdict___getitem__(struct __pyx_obj_9adi
  */
     }
 
-    /* "adios_mpi.pyx":907
+    /* "adios_mpi.pyx":915
  *                 return dict.get(self, key_)
  * 
  *             if '/'+key_ in dict.keys(self):             # <<<<<<<<<<<<<<
  *                 return dict.get(self, '/'+key_)
  * 
  */
-    __pyx_t_7 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 907, __pyx_L1_error)
+    __pyx_t_7 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 915, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     if (unlikely(((PyObject *)__pyx_v_self) == Py_None)) {
       PyErr_Format(PyExc_TypeError, "descriptor '%s' requires a '%s' object but received a 'NoneType'", "keys", "dict");
-      __PYX_ERR(0, 907, __pyx_L1_error)
+      __PYX_ERR(0, 915, __pyx_L1_error)
     }
-    __pyx_t_3 = __Pyx_PyDict_Keys(((PyObject*)__pyx_v_self)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 907, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyDict_Keys(((PyObject*)__pyx_v_self)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 915, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_7, __pyx_t_3, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 907, __pyx_L1_error)
+    __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_7, __pyx_t_3, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 915, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __pyx_t_1 = (__pyx_t_2 != 0);
     if (__pyx_t_1) {
 
-      /* "adios_mpi.pyx":908
+      /* "adios_mpi.pyx":916
  * 
  *             if '/'+key_ in dict.keys(self):
  *                 return dict.get(self, '/'+key_)             # <<<<<<<<<<<<<<
@@ -14524,11 +14776,11 @@ static PyObject *__pyx_pf_9adios_mpi_8softdict___getitem__(struct __pyx_obj_9adi
       __Pyx_XDECREF(__pyx_r);
       if (unlikely(((PyObject *)__pyx_v_self) == Py_None)) {
         PyErr_Format(PyExc_TypeError, "descriptor '%s' requires a '%s' object but received a 'NoneType'", "get", "dict");
-        __PYX_ERR(0, 908, __pyx_L1_error)
+        __PYX_ERR(0, 916, __pyx_L1_error)
       }
-      __pyx_t_3 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 908, __pyx_L1_error)
+      __pyx_t_3 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 916, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_7 = __Pyx_PyDict_GetItemDefault(((PyObject *)__pyx_v_self), __pyx_t_3, Py_None); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 908, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyDict_GetItemDefault(((PyObject *)__pyx_v_self), __pyx_t_3, Py_None); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 916, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_r = __pyx_t_7;
@@ -14536,7 +14788,7 @@ static PyObject *__pyx_pf_9adios_mpi_8softdict___getitem__(struct __pyx_obj_9adi
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       goto __pyx_L0;
 
-      /* "adios_mpi.pyx":907
+      /* "adios_mpi.pyx":915
  *                 return dict.get(self, key_)
  * 
  *             if '/'+key_ in dict.keys(self):             # <<<<<<<<<<<<<<
@@ -14545,7 +14797,7 @@ static PyObject *__pyx_pf_9adios_mpi_8softdict___getitem__(struct __pyx_obj_9adi
  */
     }
 
-    /* "adios_mpi.pyx":897
+    /* "adios_mpi.pyx":905
  *             raise KeyError(varname)
  * 
  *         for key_ in varname:             # <<<<<<<<<<<<<<
@@ -14555,27 +14807,27 @@ static PyObject *__pyx_pf_9adios_mpi_8softdict___getitem__(struct __pyx_obj_9adi
   }
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "adios_mpi.pyx":910
+  /* "adios_mpi.pyx":918
  *                 return dict.get(self, '/'+key_)
  * 
  *         raise KeyError(key_)             # <<<<<<<<<<<<<<
  * 
  * ## Python class for ADIOS_FILE structure
  */
-  if (unlikely(!__pyx_v_key_)) { __Pyx_RaiseUnboundLocalError("key_"); __PYX_ERR(0, 910, __pyx_L1_error) }
-  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 910, __pyx_L1_error)
+  if (unlikely(!__pyx_v_key_)) { __Pyx_RaiseUnboundLocalError("key_"); __PYX_ERR(0, 918, __pyx_L1_error) }
+  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 918, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_INCREF(__pyx_v_key_);
   __Pyx_GIVEREF(__pyx_v_key_);
   PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_key_);
-  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_builtin_KeyError, __pyx_t_5, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 910, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_builtin_KeyError, __pyx_t_5, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 918, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_Raise(__pyx_t_7, 0, 0, 0);
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __PYX_ERR(0, 910, __pyx_L1_error)
+  __PYX_ERR(0, 918, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":890
+  /* "adios_mpi.pyx":898
  * ## dict for handling '/' prefix
  * cdef class softdict(dict):
  *     def __getitem__(self, varname):             # <<<<<<<<<<<<<<
@@ -14598,7 +14850,7 @@ static PyObject *__pyx_pf_9adios_mpi_8softdict___getitem__(struct __pyx_obj_9adi
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":951
+/* "adios_mpi.pyx":959
  *     property name:
  *         """ The filename (or stream name) associated with. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -14624,7 +14876,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_4name___get__(struct __pyx_obj_9adios
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios_mpi.pyx":952
+  /* "adios_mpi.pyx":960
  *         """ The filename (or stream name) associated with. """
  *         def __get__(self):
  *             return self.name             # <<<<<<<<<<<<<<
@@ -14636,7 +14888,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_4name___get__(struct __pyx_obj_9adios
   __pyx_r = __pyx_v_self->name;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":951
+  /* "adios_mpi.pyx":959
  *     property name:
  *         """ The filename (or stream name) associated with. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -14651,7 +14903,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_4name___get__(struct __pyx_obj_9adios
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":956
+/* "adios_mpi.pyx":964
  *     property nvars:
  *         """ The number of variables. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -14678,7 +14930,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_5nvars___get__(struct __pyx_obj_9adio
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios_mpi.pyx":957
+  /* "adios_mpi.pyx":965
  *         """ The number of variables. """
  *         def __get__(self):
  *             return self.nvars             # <<<<<<<<<<<<<<
@@ -14686,13 +14938,13 @@ static PyObject *__pyx_pf_9adios_mpi_4file_5nvars___get__(struct __pyx_obj_9adio
  *     property nattrs:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->nvars); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 957, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->nvars); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 965, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":956
+  /* "adios_mpi.pyx":964
  *     property nvars:
  *         """ The number of variables. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -14711,7 +14963,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_5nvars___get__(struct __pyx_obj_9adio
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":961
+/* "adios_mpi.pyx":969
  *     property nattrs:
  *         """ The number of attributes. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -14738,7 +14990,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_6nattrs___get__(struct __pyx_obj_9adi
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios_mpi.pyx":962
+  /* "adios_mpi.pyx":970
  *         """ The number of attributes. """
  *         def __get__(self):
  *             return self.nattrs             # <<<<<<<<<<<<<<
@@ -14746,13 +14998,13 @@ static PyObject *__pyx_pf_9adios_mpi_4file_6nattrs___get__(struct __pyx_obj_9adi
  *     property current_step:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->nattrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 962, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->nattrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 970, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":961
+  /* "adios_mpi.pyx":969
  *     property nattrs:
  *         """ The number of attributes. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -14771,7 +15023,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_6nattrs___get__(struct __pyx_obj_9adi
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":966
+/* "adios_mpi.pyx":974
  *     property current_step:
  *         """ The current timestep index. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -14798,7 +15050,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_12current_step___get__(struct __pyx_o
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios_mpi.pyx":967
+  /* "adios_mpi.pyx":975
  *         """ The current timestep index. """
  *         def __get__(self):
  *             return self.current_step             # <<<<<<<<<<<<<<
@@ -14806,13 +15058,13 @@ static PyObject *__pyx_pf_9adios_mpi_4file_12current_step___get__(struct __pyx_o
  *     property last_step:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->current_step); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 967, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->current_step); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 975, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":966
+  /* "adios_mpi.pyx":974
  *     property current_step:
  *         """ The current timestep index. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -14831,7 +15083,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_12current_step___get__(struct __pyx_o
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":971
+/* "adios_mpi.pyx":979
  *     property last_step:
  *         """ The last timestep index. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -14858,7 +15110,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_9last_step___get__(struct __pyx_obj_9
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios_mpi.pyx":972
+  /* "adios_mpi.pyx":980
  *         """ The last timestep index. """
  *         def __get__(self):
  *             return self.last_step             # <<<<<<<<<<<<<<
@@ -14866,13 +15118,13 @@ static PyObject *__pyx_pf_9adios_mpi_4file_9last_step___get__(struct __pyx_obj_9
  *     property endianness:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->last_step); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 972, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->last_step); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 980, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":971
+  /* "adios_mpi.pyx":979
  *     property last_step:
  *         """ The last timestep index. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -14891,7 +15143,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_9last_step___get__(struct __pyx_obj_9
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":976
+/* "adios_mpi.pyx":984
  *     property endianness:
  *         """ The endianness of the stored data. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -14918,7 +15170,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_10endianness___get__(struct __pyx_obj
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios_mpi.pyx":977
+  /* "adios_mpi.pyx":985
  *         """ The endianness of the stored data. """
  *         def __get__(self):
  *             return self.endianness             # <<<<<<<<<<<<<<
@@ -14926,13 +15178,13 @@ static PyObject *__pyx_pf_9adios_mpi_4file_10endianness___get__(struct __pyx_obj
  *     property version:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->endianness); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 977, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->endianness); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 985, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":976
+  /* "adios_mpi.pyx":984
  *     property endianness:
  *         """ The endianness of the stored data. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -14951,7 +15203,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_10endianness___get__(struct __pyx_obj
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":981
+/* "adios_mpi.pyx":989
  *     property version:
  *         """ The version of Adios. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -14978,7 +15230,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_7version___get__(struct __pyx_obj_9ad
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios_mpi.pyx":982
+  /* "adios_mpi.pyx":990
  *         """ The version of Adios. """
  *         def __get__(self):
  *             return self.version             # <<<<<<<<<<<<<<
@@ -14986,13 +15238,13 @@ static PyObject *__pyx_pf_9adios_mpi_4file_7version___get__(struct __pyx_obj_9ad
  *     property file_size:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->version); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 982, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->version); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 990, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":981
+  /* "adios_mpi.pyx":989
  *     property version:
  *         """ The version of Adios. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -15011,7 +15263,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_7version___get__(struct __pyx_obj_9ad
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":986
+/* "adios_mpi.pyx":994
  *     property file_size:
  *         """ The size of Adios file. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -15038,7 +15290,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_9file_size___get__(struct __pyx_obj_9
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios_mpi.pyx":987
+  /* "adios_mpi.pyx":995
  *         """ The size of Adios file. """
  *         def __get__(self):
  *             return self.file_size             # <<<<<<<<<<<<<<
@@ -15046,13 +15298,13 @@ static PyObject *__pyx_pf_9adios_mpi_4file_9file_size___get__(struct __pyx_obj_9
  *     property is_stream:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->file_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 987, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->file_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 995, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":986
+  /* "adios_mpi.pyx":994
  *     property file_size:
  *         """ The size of Adios file. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -15071,7 +15323,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_9file_size___get__(struct __pyx_obj_9
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":991
+/* "adios_mpi.pyx":999
  *     property is_stream:
  *         """ Indicating reader type; file reader or stream reader """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -15098,7 +15350,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_9is_stream___get__(struct __pyx_obj_9
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios_mpi.pyx":992
+  /* "adios_mpi.pyx":1000
  *         """ Indicating reader type; file reader or stream reader """
  *         def __get__(self):
  *             return self.is_stream             # <<<<<<<<<<<<<<
@@ -15106,13 +15358,13 @@ static PyObject *__pyx_pf_9adios_mpi_4file_9is_stream___get__(struct __pyx_obj_9
  *     def __init__(self, str fname,
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->is_stream); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 992, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->is_stream); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1000, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":991
+  /* "adios_mpi.pyx":999
  *     property is_stream:
  *         """ Indicating reader type; file reader or stream reader """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -15131,7 +15383,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_9is_stream___get__(struct __pyx_obj_9
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":994
+/* "adios_mpi.pyx":1002
  *             return self.is_stream
  * 
  *     def __init__(self, str fname,             # <<<<<<<<<<<<<<
@@ -15157,7 +15409,7 @@ static int __pyx_pw_9adios_mpi_4file_1__init__(PyObject *__pyx_v_self, PyObject
     values[1] = ((PyObject*)__pyx_n_s_BP);
     values[2] = (PyObject *)__pyx_k__16;
 
-    /* "adios_mpi.pyx":997
+    /* "adios_mpi.pyx":1005
  *                  str method_name = "BP",
  *                  MPI.Comm comm = MPI.COMM_WORLD,
  *                  is_stream = False,             # <<<<<<<<<<<<<<
@@ -15210,7 +15462,7 @@ static int __pyx_pw_9adios_mpi_4file_1__init__(PyObject *__pyx_v_self, PyObject
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 994, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 1002, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -15229,30 +15481,30 @@ static int __pyx_pw_9adios_mpi_4file_1__init__(PyObject *__pyx_v_self, PyObject
     __pyx_v_comm = ((struct PyMPICommObject *)values[2]);
     __pyx_v_is_stream = values[3];
     if (values[4]) {
-      __pyx_v_lock_mode = ((ADIOS_LOCKMODE)__Pyx_PyInt_As_ADIOS_LOCKMODE(values[4])); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 998, __pyx_L3_error)
+      __pyx_v_lock_mode = ((ADIOS_LOCKMODE)__Pyx_PyInt_As_ADIOS_LOCKMODE(values[4])); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1006, __pyx_L3_error)
     } else {
       __pyx_v_lock_mode = __pyx_k__17;
     }
     if (values[5]) {
-      __pyx_v_timeout_sec = __pyx_PyFloat_AsFloat(values[5]); if (unlikely((__pyx_v_timeout_sec == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 999, __pyx_L3_error)
+      __pyx_v_timeout_sec = __pyx_PyFloat_AsFloat(values[5]); if (unlikely((__pyx_v_timeout_sec == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 1007, __pyx_L3_error)
     } else {
       __pyx_v_timeout_sec = ((float)0.0);
     }
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 994, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1002, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.file.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_fname), (&PyString_Type), 1, "fname", 1))) __PYX_ERR(0, 994, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_method_name), (&PyString_Type), 1, "method_name", 1))) __PYX_ERR(0, 995, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_comm), __pyx_ptype_6mpi4py_3MPI_Comm, 1, "comm", 0))) __PYX_ERR(0, 996, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_fname), (&PyString_Type), 1, "fname", 1))) __PYX_ERR(0, 1002, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_method_name), (&PyString_Type), 1, "method_name", 1))) __PYX_ERR(0, 1003, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_comm), __pyx_ptype_6mpi4py_3MPI_Comm, 1, "comm", 0))) __PYX_ERR(0, 1004, __pyx_L1_error)
   __pyx_r = __pyx_pf_9adios_mpi_4file___init__(((struct __pyx_obj_9adios_mpi_file *)__pyx_v_self), __pyx_v_fname, __pyx_v_method_name, __pyx_v_comm, __pyx_v_is_stream, __pyx_v_lock_mode, __pyx_v_timeout_sec);
 
-  /* "adios_mpi.pyx":994
+  /* "adios_mpi.pyx":1002
  *             return self.is_stream
  * 
  *     def __init__(self, str fname,             # <<<<<<<<<<<<<<
@@ -15288,7 +15540,7 @@ static int __pyx_pf_9adios_mpi_4file___init__(struct __pyx_obj_9adios_mpi_file *
   PyObject *__pyx_t_11 = NULL;
   __Pyx_RefNannySetupContext("__init__", 0);
 
-  /* "adios_mpi.pyx":1000
+  /* "adios_mpi.pyx":1008
  *                  ADIOS_LOCKMODE lock_mode = ADIOS_LOCKMODE_ALL,
  *                  float timeout_sec = 0.0):
  *         self.fp = NULL             # <<<<<<<<<<<<<<
@@ -15297,14 +15549,14 @@ static int __pyx_pf_9adios_mpi_4file___init__(struct __pyx_obj_9adios_mpi_file *
  */
   __pyx_v_self->fp = NULL;
 
-  /* "adios_mpi.pyx":1001
+  /* "adios_mpi.pyx":1009
  *                  float timeout_sec = 0.0):
  *         self.fp = NULL
  *         self.vars = softdict()             # <<<<<<<<<<<<<<
  *         self.attrs = softdict()
  *         self.is_stream = is_stream
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_9adios_mpi_softdict), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1001, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_9adios_mpi_softdict), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1009, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_self->vars);
@@ -15312,14 +15564,14 @@ static int __pyx_pf_9adios_mpi_4file___init__(struct __pyx_obj_9adios_mpi_file *
   __pyx_v_self->vars = ((struct __pyx_obj_9adios_mpi_softdict *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":1002
+  /* "adios_mpi.pyx":1010
  *         self.fp = NULL
  *         self.vars = softdict()
  *         self.attrs = softdict()             # <<<<<<<<<<<<<<
  *         self.is_stream = is_stream
  *         cdef method = str2adiosreadmethod(method_name)
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_9adios_mpi_softdict), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1002, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_9adios_mpi_softdict), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1010, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_self->attrs);
@@ -15327,51 +15579,51 @@ static int __pyx_pf_9adios_mpi_4file___init__(struct __pyx_obj_9adios_mpi_file *
   __pyx_v_self->attrs = ((struct __pyx_obj_9adios_mpi_softdict *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":1003
+  /* "adios_mpi.pyx":1011
  *         self.vars = softdict()
  *         self.attrs = softdict()
  *         self.is_stream = is_stream             # <<<<<<<<<<<<<<
  *         cdef method = str2adiosreadmethod(method_name)
  * 
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_is_stream); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1003, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_is_stream); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1011, __pyx_L1_error)
   __pyx_v_self->is_stream = __pyx_t_2;
 
-  /* "adios_mpi.pyx":1004
+  /* "adios_mpi.pyx":1012
  *         self.attrs = softdict()
  *         self.is_stream = is_stream
  *         cdef method = str2adiosreadmethod(method_name)             # <<<<<<<<<<<<<<
  * 
  *         if (is_stream):
  */
-  __pyx_t_1 = __Pyx_PyInt_From_ADIOS_READ_METHOD(__pyx_f_9adios_mpi_str2adiosreadmethod(__pyx_v_method_name)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1004, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_ADIOS_READ_METHOD(__pyx_f_9adios_mpi_str2adiosreadmethod(__pyx_v_method_name)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1012, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_method = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":1006
+  /* "adios_mpi.pyx":1014
  *         cdef method = str2adiosreadmethod(method_name)
  * 
  *         if (is_stream):             # <<<<<<<<<<<<<<
  *             self.fp = adios_read_open(s2b(fname), method, comm.ob_mpi,
  *                                       lock_mode, timeout_sec)
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_is_stream); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1006, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_is_stream); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1014, __pyx_L1_error)
   if (__pyx_t_2) {
 
-    /* "adios_mpi.pyx":1007
+    /* "adios_mpi.pyx":1015
  * 
  *         if (is_stream):
  *             self.fp = adios_read_open(s2b(fname), method, comm.ob_mpi,             # <<<<<<<<<<<<<<
  *                                       lock_mode, timeout_sec)
  *         else:
  */
-    __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_fname, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1007, __pyx_L1_error)
+    __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_fname, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1015, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_3 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_3) && PyErr_Occurred())) __PYX_ERR(0, 1007, __pyx_L1_error)
-    __pyx_t_4 = ((ADIOS_READ_METHOD)__Pyx_PyInt_As_ADIOS_READ_METHOD(__pyx_v_method)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1007, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_3) && PyErr_Occurred())) __PYX_ERR(0, 1015, __pyx_L1_error)
+    __pyx_t_4 = ((ADIOS_READ_METHOD)__Pyx_PyInt_As_ADIOS_READ_METHOD(__pyx_v_method)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1015, __pyx_L1_error)
 
-    /* "adios_mpi.pyx":1008
+    /* "adios_mpi.pyx":1016
  *         if (is_stream):
  *             self.fp = adios_read_open(s2b(fname), method, comm.ob_mpi,
  *                                       lock_mode, timeout_sec)             # <<<<<<<<<<<<<<
@@ -15381,7 +15633,7 @@ static int __pyx_pf_9adios_mpi_4file___init__(struct __pyx_obj_9adios_mpi_file *
     __pyx_v_self->fp = adios_read_open(__pyx_t_3, __pyx_t_4, __pyx_v_comm->ob_mpi, __pyx_v_lock_mode, __pyx_v_timeout_sec);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-    /* "adios_mpi.pyx":1006
+    /* "adios_mpi.pyx":1014
  *         cdef method = str2adiosreadmethod(method_name)
  * 
  *         if (is_stream):             # <<<<<<<<<<<<<<
@@ -15391,7 +15643,7 @@ static int __pyx_pf_9adios_mpi_4file___init__(struct __pyx_obj_9adios_mpi_file *
     goto __pyx_L3;
   }
 
-  /* "adios_mpi.pyx":1010
+  /* "adios_mpi.pyx":1018
  *                                       lock_mode, timeout_sec)
  *         else:
  *             self.fp = adios_read_open_file(s2b(fname), method, comm.ob_mpi)             # <<<<<<<<<<<<<<
@@ -15399,16 +15651,16 @@ static int __pyx_pf_9adios_mpi_4file___init__(struct __pyx_obj_9adios_mpi_file *
  *         assert self.fp != NULL, 'Not an open file'
  */
   /*else*/ {
-    __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_fname, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1010, __pyx_L1_error)
+    __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_fname, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1018, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_5) && PyErr_Occurred())) __PYX_ERR(0, 1010, __pyx_L1_error)
-    __pyx_t_4 = ((ADIOS_READ_METHOD)__Pyx_PyInt_As_ADIOS_READ_METHOD(__pyx_v_method)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1010, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_5) && PyErr_Occurred())) __PYX_ERR(0, 1018, __pyx_L1_error)
+    __pyx_t_4 = ((ADIOS_READ_METHOD)__Pyx_PyInt_As_ADIOS_READ_METHOD(__pyx_v_method)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1018, __pyx_L1_error)
     __pyx_v_self->fp = adios_read_open_file(__pyx_t_5, __pyx_t_4, __pyx_v_comm->ob_mpi);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   }
   __pyx_L3:;
 
-  /* "adios_mpi.pyx":1012
+  /* "adios_mpi.pyx":1020
  *             self.fp = adios_read_open_file(s2b(fname), method, comm.ob_mpi)
  * 
  *         assert self.fp != NULL, 'Not an open file'             # <<<<<<<<<<<<<<
@@ -15419,34 +15671,34 @@ static int __pyx_pf_9adios_mpi_4file___init__(struct __pyx_obj_9adios_mpi_file *
   if (unlikely(!Py_OptimizeFlag)) {
     if (unlikely(!((__pyx_v_self->fp != NULL) != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Not_an_open_file);
-      __PYX_ERR(0, 1012, __pyx_L1_error)
+      __PYX_ERR(0, 1020, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "adios_mpi.pyx":1014
+  /* "adios_mpi.pyx":1022
  *         assert self.fp != NULL, 'Not an open file'
  * 
  *         self.name = fname.split('/')[-1]  ## basename             # <<<<<<<<<<<<<<
  *         self.nvars = self.fp.nvars
  *         self.nattrs = self.fp.nattrs
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_fname, __pyx_n_s_split); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1014, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_fname, __pyx_n_s_split); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1022, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1014, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1022, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_6, -1L, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1014, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_6, -1L, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1022, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-  if (!(likely(PyString_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 1014, __pyx_L1_error)
+  if (!(likely(PyString_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 1022, __pyx_L1_error)
   __Pyx_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_self->name);
   __Pyx_DECREF(__pyx_v_self->name);
   __pyx_v_self->name = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":1015
+  /* "adios_mpi.pyx":1023
  * 
  *         self.name = fname.split('/')[-1]  ## basename
  *         self.nvars = self.fp.nvars             # <<<<<<<<<<<<<<
@@ -15456,7 +15708,7 @@ static int __pyx_pf_9adios_mpi_4file___init__(struct __pyx_obj_9adios_mpi_file *
   __pyx_t_7 = __pyx_v_self->fp->nvars;
   __pyx_v_self->nvars = __pyx_t_7;
 
-  /* "adios_mpi.pyx":1016
+  /* "adios_mpi.pyx":1024
  *         self.name = fname.split('/')[-1]  ## basename
  *         self.nvars = self.fp.nvars
  *         self.nattrs = self.fp.nattrs             # <<<<<<<<<<<<<<
@@ -15466,7 +15718,7 @@ static int __pyx_pf_9adios_mpi_4file___init__(struct __pyx_obj_9adios_mpi_file *
   __pyx_t_7 = __pyx_v_self->fp->nattrs;
   __pyx_v_self->nattrs = __pyx_t_7;
 
-  /* "adios_mpi.pyx":1017
+  /* "adios_mpi.pyx":1025
  *         self.nvars = self.fp.nvars
  *         self.nattrs = self.fp.nattrs
  *         self.current_step = self.fp.current_step             # <<<<<<<<<<<<<<
@@ -15476,7 +15728,7 @@ static int __pyx_pf_9adios_mpi_4file___init__(struct __pyx_obj_9adios_mpi_file *
   __pyx_t_7 = __pyx_v_self->fp->current_step;
   __pyx_v_self->current_step = __pyx_t_7;
 
-  /* "adios_mpi.pyx":1018
+  /* "adios_mpi.pyx":1026
  *         self.nattrs = self.fp.nattrs
  *         self.current_step = self.fp.current_step
  *         self.last_step = self.fp.last_step             # <<<<<<<<<<<<<<
@@ -15486,7 +15738,7 @@ static int __pyx_pf_9adios_mpi_4file___init__(struct __pyx_obj_9adios_mpi_file *
   __pyx_t_7 = __pyx_v_self->fp->last_step;
   __pyx_v_self->last_step = __pyx_t_7;
 
-  /* "adios_mpi.pyx":1019
+  /* "adios_mpi.pyx":1027
  *         self.current_step = self.fp.current_step
  *         self.last_step = self.fp.last_step
  *         self.endianness = self.fp.endianness             # <<<<<<<<<<<<<<
@@ -15496,7 +15748,7 @@ static int __pyx_pf_9adios_mpi_4file___init__(struct __pyx_obj_9adios_mpi_file *
   __pyx_t_7 = __pyx_v_self->fp->endianness;
   __pyx_v_self->endianness = __pyx_t_7;
 
-  /* "adios_mpi.pyx":1020
+  /* "adios_mpi.pyx":1028
  *         self.last_step = self.fp.last_step
  *         self.endianness = self.fp.endianness
  *         self.version = self.fp.version             # <<<<<<<<<<<<<<
@@ -15506,7 +15758,7 @@ static int __pyx_pf_9adios_mpi_4file___init__(struct __pyx_obj_9adios_mpi_file *
   __pyx_t_7 = __pyx_v_self->fp->version;
   __pyx_v_self->version = __pyx_t_7;
 
-  /* "adios_mpi.pyx":1021
+  /* "adios_mpi.pyx":1029
  *         self.endianness = self.fp.endianness
  *         self.version = self.fp.version
  *         self.file_size = self.fp.file_size             # <<<<<<<<<<<<<<
@@ -15516,47 +15768,47 @@ static int __pyx_pf_9adios_mpi_4file___init__(struct __pyx_obj_9adios_mpi_file *
   __pyx_t_8 = __pyx_v_self->fp->file_size;
   __pyx_v_self->file_size = __pyx_t_8;
 
-  /* "adios_mpi.pyx":1023
+  /* "adios_mpi.pyx":1031
  *         self.file_size = self.fp.file_size
  * 
  *         for name in [self.fp.attr_namelist[i] for i in range(self.nattrs)]:             # <<<<<<<<<<<<<<
  *             self.attrs[b2s(name)] = attr(self, b2s(name))
  * 
  */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1023, __pyx_L1_error)
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1031, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_7 = __pyx_v_self->nattrs;
   for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_7; __pyx_t_9+=1) {
     __pyx_v_i = __pyx_t_9;
-    __pyx_t_6 = __Pyx_PyBytes_FromString((__pyx_v_self->fp->attr_namelist[__pyx_v_i])); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1023, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_PyBytes_FromString((__pyx_v_self->fp->attr_namelist[__pyx_v_i])); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1031, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_6))) __PYX_ERR(0, 1023, __pyx_L1_error)
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_6))) __PYX_ERR(0, 1031, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   }
   __pyx_t_6 = __pyx_t_1; __Pyx_INCREF(__pyx_t_6); __pyx_t_10 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   for (;;) {
     if (__pyx_t_10 >= PyList_GET_SIZE(__pyx_t_6)) break;
-    #if CYTHON_COMPILING_IN_CPYTHON
-    __pyx_t_1 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_10); __Pyx_INCREF(__pyx_t_1); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 1023, __pyx_L1_error)
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    __pyx_t_1 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_10); __Pyx_INCREF(__pyx_t_1); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 1031, __pyx_L1_error)
     #else
-    __pyx_t_1 = PySequence_ITEM(__pyx_t_6, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1023, __pyx_L1_error)
+    __pyx_t_1 = PySequence_ITEM(__pyx_t_6, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1031, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     #endif
     __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "adios_mpi.pyx":1024
+    /* "adios_mpi.pyx":1032
  * 
  *         for name in [self.fp.attr_namelist[i] for i in range(self.nattrs)]:
  *             self.attrs[b2s(name)] = attr(self, b2s(name))             # <<<<<<<<<<<<<<
  * 
  *         for name in [self.fp.var_namelist[i] for i in range(self.nvars)]:
  */
-    if (!(likely(PyBytes_CheckExact(__pyx_v_name))||((__pyx_v_name) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_name)->tp_name), 0))) __PYX_ERR(0, 1024, __pyx_L1_error)
-    __pyx_t_1 = __pyx_f_9adios_mpi_b2s(((PyObject*)__pyx_v_name), 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1024, __pyx_L1_error)
+    if (!(likely(PyBytes_CheckExact(__pyx_v_name))||((__pyx_v_name) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_name)->tp_name), 0))) __PYX_ERR(0, 1032, __pyx_L1_error)
+    __pyx_t_1 = __pyx_f_9adios_mpi_b2s(((PyObject*)__pyx_v_name), 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1032, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1024, __pyx_L1_error)
+    __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1032, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_11);
     __Pyx_INCREF(((PyObject *)__pyx_v_self));
     __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
@@ -15564,17 +15816,17 @@ static int __pyx_pf_9adios_mpi_4file___init__(struct __pyx_obj_9adios_mpi_file *
     __Pyx_GIVEREF(__pyx_t_1);
     PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_1);
     __pyx_t_1 = 0;
-    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_9adios_mpi_attr), __pyx_t_11, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1024, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_9adios_mpi_attr), __pyx_t_11, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1032, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
-    if (!(likely(PyBytes_CheckExact(__pyx_v_name))||((__pyx_v_name) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_name)->tp_name), 0))) __PYX_ERR(0, 1024, __pyx_L1_error)
-    __pyx_t_11 = __pyx_f_9adios_mpi_b2s(((PyObject*)__pyx_v_name), 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1024, __pyx_L1_error)
+    if (!(likely(PyBytes_CheckExact(__pyx_v_name))||((__pyx_v_name) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_name)->tp_name), 0))) __PYX_ERR(0, 1032, __pyx_L1_error)
+    __pyx_t_11 = __pyx_f_9adios_mpi_b2s(((PyObject*)__pyx_v_name), 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1032, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_11);
-    if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_self->attrs), __pyx_t_11, __pyx_t_1) < 0)) __PYX_ERR(0, 1024, __pyx_L1_error)
+    if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_self->attrs), __pyx_t_11, __pyx_t_1) < 0)) __PYX_ERR(0, 1032, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-    /* "adios_mpi.pyx":1023
+    /* "adios_mpi.pyx":1031
  *         self.file_size = self.fp.file_size
  * 
  *         for name in [self.fp.attr_namelist[i] for i in range(self.nattrs)]:             # <<<<<<<<<<<<<<
@@ -15584,47 +15836,47 @@ static int __pyx_pf_9adios_mpi_4file___init__(struct __pyx_obj_9adios_mpi_file *
   }
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-  /* "adios_mpi.pyx":1026
+  /* "adios_mpi.pyx":1034
  *             self.attrs[b2s(name)] = attr(self, b2s(name))
  * 
  *         for name in [self.fp.var_namelist[i] for i in range(self.nvars)]:             # <<<<<<<<<<<<<<
  *             self.vars[b2s(name)] = var(self, b2s(name))
  * 
  */
-  __pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1026, __pyx_L1_error)
+  __pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1034, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __pyx_t_7 = __pyx_v_self->nvars;
   for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_7; __pyx_t_9+=1) {
     __pyx_v_i = __pyx_t_9;
-    __pyx_t_1 = __Pyx_PyBytes_FromString((__pyx_v_self->fp->var_namelist[__pyx_v_i])); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1026, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyBytes_FromString((__pyx_v_self->fp->var_namelist[__pyx_v_i])); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1034, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    if (unlikely(__Pyx_ListComp_Append(__pyx_t_6, (PyObject*)__pyx_t_1))) __PYX_ERR(0, 1026, __pyx_L1_error)
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_6, (PyObject*)__pyx_t_1))) __PYX_ERR(0, 1034, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   }
   __pyx_t_1 = __pyx_t_6; __Pyx_INCREF(__pyx_t_1); __pyx_t_10 = 0;
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   for (;;) {
     if (__pyx_t_10 >= PyList_GET_SIZE(__pyx_t_1)) break;
-    #if CYTHON_COMPILING_IN_CPYTHON
-    __pyx_t_6 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_10); __Pyx_INCREF(__pyx_t_6); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 1026, __pyx_L1_error)
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    __pyx_t_6 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_10); __Pyx_INCREF(__pyx_t_6); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 1034, __pyx_L1_error)
     #else
-    __pyx_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1026, __pyx_L1_error)
+    __pyx_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1034, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     #endif
     __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_6);
     __pyx_t_6 = 0;
 
-    /* "adios_mpi.pyx":1027
+    /* "adios_mpi.pyx":1035
  * 
  *         for name in [self.fp.var_namelist[i] for i in range(self.nvars)]:
  *             self.vars[b2s(name)] = var(self, b2s(name))             # <<<<<<<<<<<<<<
  * 
  *         self.var = self.vars
  */
-    if (!(likely(PyBytes_CheckExact(__pyx_v_name))||((__pyx_v_name) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_name)->tp_name), 0))) __PYX_ERR(0, 1027, __pyx_L1_error)
-    __pyx_t_6 = __pyx_f_9adios_mpi_b2s(((PyObject*)__pyx_v_name), 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1027, __pyx_L1_error)
+    if (!(likely(PyBytes_CheckExact(__pyx_v_name))||((__pyx_v_name) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_name)->tp_name), 0))) __PYX_ERR(0, 1035, __pyx_L1_error)
+    __pyx_t_6 = __pyx_f_9adios_mpi_b2s(((PyObject*)__pyx_v_name), 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1035, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1027, __pyx_L1_error)
+    __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1035, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_11);
     __Pyx_INCREF(((PyObject *)__pyx_v_self));
     __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
@@ -15632,17 +15884,17 @@ static int __pyx_pf_9adios_mpi_4file___init__(struct __pyx_obj_9adios_mpi_file *
     __Pyx_GIVEREF(__pyx_t_6);
     PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_6);
     __pyx_t_6 = 0;
-    __pyx_t_6 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_9adios_mpi_var), __pyx_t_11, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1027, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_9adios_mpi_var), __pyx_t_11, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1035, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
-    if (!(likely(PyBytes_CheckExact(__pyx_v_name))||((__pyx_v_name) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_name)->tp_name), 0))) __PYX_ERR(0, 1027, __pyx_L1_error)
-    __pyx_t_11 = __pyx_f_9adios_mpi_b2s(((PyObject*)__pyx_v_name), 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1027, __pyx_L1_error)
+    if (!(likely(PyBytes_CheckExact(__pyx_v_name))||((__pyx_v_name) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_name)->tp_name), 0))) __PYX_ERR(0, 1035, __pyx_L1_error)
+    __pyx_t_11 = __pyx_f_9adios_mpi_b2s(((PyObject*)__pyx_v_name), 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1035, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_11);
-    if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_self->vars), __pyx_t_11, __pyx_t_6) < 0)) __PYX_ERR(0, 1027, __pyx_L1_error)
+    if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_self->vars), __pyx_t_11, __pyx_t_6) < 0)) __PYX_ERR(0, 1035, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-    /* "adios_mpi.pyx":1026
+    /* "adios_mpi.pyx":1034
  *             self.attrs[b2s(name)] = attr(self, b2s(name))
  * 
  *         for name in [self.fp.var_namelist[i] for i in range(self.nvars)]:             # <<<<<<<<<<<<<<
@@ -15652,7 +15904,7 @@ static int __pyx_pf_9adios_mpi_4file___init__(struct __pyx_obj_9adios_mpi_file *
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":1029
+  /* "adios_mpi.pyx":1037
  *             self.vars[b2s(name)] = var(self, b2s(name))
  * 
  *         self.var = self.vars             # <<<<<<<<<<<<<<
@@ -15667,7 +15919,7 @@ static int __pyx_pf_9adios_mpi_4file___init__(struct __pyx_obj_9adios_mpi_file *
   __pyx_v_self->var = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":1030
+  /* "adios_mpi.pyx":1038
  * 
  *         self.var = self.vars
  *         self.attr = self.attrs             # <<<<<<<<<<<<<<
@@ -15682,7 +15934,7 @@ static int __pyx_pf_9adios_mpi_4file___init__(struct __pyx_obj_9adios_mpi_file *
   __pyx_v_self->attr = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":994
+  /* "adios_mpi.pyx":1002
  *             return self.is_stream
  * 
  *     def __init__(self, str fname,             # <<<<<<<<<<<<<<
@@ -15706,7 +15958,7 @@ static int __pyx_pf_9adios_mpi_4file___init__(struct __pyx_obj_9adios_mpi_file *
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1032
+/* "adios_mpi.pyx":1040
  *         self.attr = self.attrs
  * 
  *     def __del__(self):             # <<<<<<<<<<<<<<
@@ -15734,18 +15986,18 @@ static PyObject *__pyx_pf_9adios_mpi_4file_2__del__(struct __pyx_obj_9adios_mpi_
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__del__", 0);
 
-  /* "adios_mpi.pyx":1034
+  /* "adios_mpi.pyx":1042
  *     def __del__(self):
  *         """ Close file on destruction. """
  *         self.close()             # <<<<<<<<<<<<<<
  * 
  *     def __enter__(self):
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_9adios_mpi_file *)__pyx_v_self->__pyx_vtab)->close(__pyx_v_self, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1034, __pyx_L1_error)
+  __pyx_t_1 = ((struct __pyx_vtabstruct_9adios_mpi_file *)__pyx_v_self->__pyx_vtab)->close(__pyx_v_self, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1042, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":1032
+  /* "adios_mpi.pyx":1040
  *         self.attr = self.attrs
  * 
  *     def __del__(self):             # <<<<<<<<<<<<<<
@@ -15766,7 +16018,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_2__del__(struct __pyx_obj_9adios_mpi_
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1036
+/* "adios_mpi.pyx":1044
  *         self.close()
  * 
  *     def __enter__(self):             # <<<<<<<<<<<<<<
@@ -15793,7 +16045,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_4__enter__(struct __pyx_obj_9adios_mp
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__enter__", 0);
 
-  /* "adios_mpi.pyx":1038
+  /* "adios_mpi.pyx":1046
  *     def __enter__(self):
  *         """ Enter for with statement """
  *         return self             # <<<<<<<<<<<<<<
@@ -15805,7 +16057,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_4__enter__(struct __pyx_obj_9adios_mp
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":1036
+  /* "adios_mpi.pyx":1044
  *         self.close()
  * 
  *     def __enter__(self):             # <<<<<<<<<<<<<<
@@ -15820,7 +16072,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_4__enter__(struct __pyx_obj_9adios_mp
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1040
+/* "adios_mpi.pyx":1048
  *         return self
  * 
  *     def __exit__(self, exception_type, exception_value, traceback):             # <<<<<<<<<<<<<<
@@ -15859,16 +16111,16 @@ static PyObject *__pyx_pw_9adios_mpi_4file_7__exit__(PyObject *__pyx_v_self, PyO
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_exception_value)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, 1); __PYX_ERR(0, 1040, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, 1); __PYX_ERR(0, 1048, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_traceback)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, 2); __PYX_ERR(0, 1040, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, 2); __PYX_ERR(0, 1048, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__exit__") < 0)) __PYX_ERR(0, 1040, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__exit__") < 0)) __PYX_ERR(0, 1048, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -15883,7 +16135,7 @@ static PyObject *__pyx_pw_9adios_mpi_4file_7__exit__(PyObject *__pyx_v_self, PyO
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1040, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1048, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.file.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -15902,18 +16154,18 @@ static PyObject *__pyx_pf_9adios_mpi_4file_6__exit__(struct __pyx_obj_9adios_mpi
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__exit__", 0);
 
-  /* "adios_mpi.pyx":1042
+  /* "adios_mpi.pyx":1050
  *     def __exit__(self, exception_type, exception_value, traceback):
  *         """ Close file on exit. """
  *         self.close()             # <<<<<<<<<<<<<<
  * 
  *     cpdef close(self):
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_9adios_mpi_file *)__pyx_v_self->__pyx_vtab)->close(__pyx_v_self, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1042, __pyx_L1_error)
+  __pyx_t_1 = ((struct __pyx_vtabstruct_9adios_mpi_file *)__pyx_v_self->__pyx_vtab)->close(__pyx_v_self, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1050, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":1040
+  /* "adios_mpi.pyx":1048
  *         return self
  * 
  *     def __exit__(self, exception_type, exception_value, traceback):             # <<<<<<<<<<<<<<
@@ -15934,7 +16186,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_6__exit__(struct __pyx_obj_9adios_mpi
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1044
+/* "adios_mpi.pyx":1052
  *         self.close()
  * 
  *     cpdef close(self):             # <<<<<<<<<<<<<<
@@ -15955,13 +16207,13 @@ static PyObject *__pyx_f_9adios_mpi_4file_close(struct __pyx_obj_9adios_mpi_file
   if (unlikely(__pyx_skip_dispatch)) ;
   /* Check if overridden in Python */
   else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_close); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1044, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_close); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1052, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_9adios_mpi_4file_9close)) {
       __Pyx_XDECREF(__pyx_r);
       __Pyx_INCREF(__pyx_t_1);
       __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
+      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
         __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
         if (likely(__pyx_t_4)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -15971,10 +16223,10 @@ static PyObject *__pyx_f_9adios_mpi_4file_close(struct __pyx_obj_9adios_mpi_file
         }
       }
       if (__pyx_t_4) {
-        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1044, __pyx_L1_error)
+        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1052, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       } else {
-        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1044, __pyx_L1_error)
+        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1052, __pyx_L1_error)
       }
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -15986,7 +16238,7 @@ static PyObject *__pyx_f_9adios_mpi_4file_close(struct __pyx_obj_9adios_mpi_file
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   }
 
-  /* "adios_mpi.pyx":1046
+  /* "adios_mpi.pyx":1054
  *     cpdef close(self):
  *         """ Close the open file. """
  *         assert self.fp != NULL, 'Not an open file'             # <<<<<<<<<<<<<<
@@ -15997,12 +16249,12 @@ static PyObject *__pyx_f_9adios_mpi_4file_close(struct __pyx_obj_9adios_mpi_file
   if (unlikely(!Py_OptimizeFlag)) {
     if (unlikely(!((__pyx_v_self->fp != NULL) != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Not_an_open_file);
-      __PYX_ERR(0, 1046, __pyx_L1_error)
+      __PYX_ERR(0, 1054, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "adios_mpi.pyx":1047
+  /* "adios_mpi.pyx":1055
  *         """ Close the open file. """
  *         assert self.fp != NULL, 'Not an open file'
  *         adios_read_close(self.fp)             # <<<<<<<<<<<<<<
@@ -16011,7 +16263,7 @@ static PyObject *__pyx_f_9adios_mpi_4file_close(struct __pyx_obj_9adios_mpi_file
  */
   adios_read_close(__pyx_v_self->fp);
 
-  /* "adios_mpi.pyx":1048
+  /* "adios_mpi.pyx":1056
  *         assert self.fp != NULL, 'Not an open file'
  *         adios_read_close(self.fp)
  *         self.fp = NULL             # <<<<<<<<<<<<<<
@@ -16020,7 +16272,7 @@ static PyObject *__pyx_f_9adios_mpi_4file_close(struct __pyx_obj_9adios_mpi_file
  */
   __pyx_v_self->fp = NULL;
 
-  /* "adios_mpi.pyx":1044
+  /* "adios_mpi.pyx":1052
  *         self.close()
  * 
  *     cpdef close(self):             # <<<<<<<<<<<<<<
@@ -16064,7 +16316,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_8close(struct __pyx_obj_9adios_mpi_fi
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("close", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_9adios_mpi_4file_close(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1044, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_9adios_mpi_4file_close(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1052, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -16081,7 +16333,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_8close(struct __pyx_obj_9adios_mpi_fi
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1050
+/* "adios_mpi.pyx":1058
  *         self.fp = NULL
  * 
  *     cpdef printself(self):             # <<<<<<<<<<<<<<
@@ -16102,13 +16354,13 @@ static PyObject *__pyx_f_9adios_mpi_4file_printself(struct __pyx_obj_9adios_mpi_
   if (unlikely(__pyx_skip_dispatch)) ;
   /* Check if overridden in Python */
   else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_printself); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1050, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_printself); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1058, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_9adios_mpi_4file_11printself)) {
       __Pyx_XDECREF(__pyx_r);
       __Pyx_INCREF(__pyx_t_1);
       __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
+      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
         __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
         if (likely(__pyx_t_4)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -16118,10 +16370,10 @@ static PyObject *__pyx_f_9adios_mpi_4file_printself(struct __pyx_obj_9adios_mpi_
         }
       }
       if (__pyx_t_4) {
-        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1050, __pyx_L1_error)
+        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1058, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       } else {
-        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1050, __pyx_L1_error)
+        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1058, __pyx_L1_error)
       }
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -16133,7 +16385,7 @@ static PyObject *__pyx_f_9adios_mpi_4file_printself(struct __pyx_obj_9adios_mpi_
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   }
 
-  /* "adios_mpi.pyx":1052
+  /* "adios_mpi.pyx":1060
  *     cpdef printself(self):
  *         """ Print native ADIOS_FILE structure. """
  *         assert self.fp != NULL, 'Not an open file'             # <<<<<<<<<<<<<<
@@ -16144,32 +16396,32 @@ static PyObject *__pyx_f_9adios_mpi_4file_printself(struct __pyx_obj_9adios_mpi_
   if (unlikely(!Py_OptimizeFlag)) {
     if (unlikely(!((__pyx_v_self->fp != NULL) != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Not_an_open_file);
-      __PYX_ERR(0, 1052, __pyx_L1_error)
+      __PYX_ERR(0, 1060, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "adios_mpi.pyx":1053
+  /* "adios_mpi.pyx":1061
  *         """ Print native ADIOS_FILE structure. """
  *         assert self.fp != NULL, 'Not an open file'
  *         print ('=== AdiosFile ===')             # <<<<<<<<<<<<<<
  *         print ('%15s : %lu' % ('fp', <unsigned long> self.fp))
  *         printfile(self.fp)
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_tuple__19, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1053, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_tuple__19, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1061, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":1054
+  /* "adios_mpi.pyx":1062
  *         assert self.fp != NULL, 'Not an open file'
  *         print ('=== AdiosFile ===')
  *         print ('%15s : %lu' % ('fp', <unsigned long> self.fp))             # <<<<<<<<<<<<<<
  *         printfile(self.fp)
  * 
  */
-  __pyx_t_1 = __Pyx_PyInt_From_unsigned_long(((unsigned long)__pyx_v_self->fp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1054, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_unsigned_long(((unsigned long)__pyx_v_self->fp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1062, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1054, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1062, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_fp);
   __Pyx_GIVEREF(__pyx_n_s_fp);
@@ -16177,31 +16429,31 @@ static PyObject *__pyx_f_9adios_mpi_4file_printself(struct __pyx_obj_9adios_mpi_
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_lu, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1054, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_lu, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1062, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1054, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1062, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1054, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1062, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":1055
+  /* "adios_mpi.pyx":1063
  *         print ('=== AdiosFile ===')
  *         print ('%15s : %lu' % ('fp', <unsigned long> self.fp))
  *         printfile(self.fp)             # <<<<<<<<<<<<<<
  * 
  *     cpdef release_step(self):
  */
-  __pyx_t_1 = __pyx_f_9adios_mpi_printfile(__pyx_v_self->fp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1055, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_9adios_mpi_printfile(__pyx_v_self->fp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1063, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":1050
+  /* "adios_mpi.pyx":1058
  *         self.fp = NULL
  * 
  *     cpdef printself(self):             # <<<<<<<<<<<<<<
@@ -16245,7 +16497,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_10printself(struct __pyx_obj_9adios_m
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("printself", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_9adios_mpi_4file_printself(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1050, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_9adios_mpi_4file_printself(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1058, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -16262,7 +16514,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_10printself(struct __pyx_obj_9adios_m
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1057
+/* "adios_mpi.pyx":1065
  *         printfile(self.fp)
  * 
  *     cpdef release_step(self):             # <<<<<<<<<<<<<<
@@ -16283,13 +16535,13 @@ static PyObject *__pyx_f_9adios_mpi_4file_release_step(struct __pyx_obj_9adios_m
   if (unlikely(__pyx_skip_dispatch)) ;
   /* Check if overridden in Python */
   else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_release_step); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1057, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_release_step); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1065, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_9adios_mpi_4file_13release_step)) {
       __Pyx_XDECREF(__pyx_r);
       __Pyx_INCREF(__pyx_t_1);
       __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
+      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
         __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
         if (likely(__pyx_t_4)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -16299,10 +16551,10 @@ static PyObject *__pyx_f_9adios_mpi_4file_release_step(struct __pyx_obj_9adios_m
         }
       }
       if (__pyx_t_4) {
-        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1057, __pyx_L1_error)
+        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1065, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       } else {
-        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1057, __pyx_L1_error)
+        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1065, __pyx_L1_error)
       }
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -16314,7 +16566,7 @@ static PyObject *__pyx_f_9adios_mpi_4file_release_step(struct __pyx_obj_9adios_m
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   }
 
-  /* "adios_mpi.pyx":1059
+  /* "adios_mpi.pyx":1067
  *     cpdef release_step(self):
  *         """ Release the current step lock and let the writer code to progress """
  *         adios_release_step(self.fp)             # <<<<<<<<<<<<<<
@@ -16323,7 +16575,7 @@ static PyObject *__pyx_f_9adios_mpi_4file_release_step(struct __pyx_obj_9adios_m
  */
   adios_release_step(__pyx_v_self->fp);
 
-  /* "adios_mpi.pyx":1057
+  /* "adios_mpi.pyx":1065
  *         printfile(self.fp)
  * 
  *     cpdef release_step(self):             # <<<<<<<<<<<<<<
@@ -16367,7 +16619,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_12release_step(struct __pyx_obj_9adio
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("release_step", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_9adios_mpi_4file_release_step(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1057, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_9adios_mpi_4file_release_step(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1065, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -16384,7 +16636,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_12release_step(struct __pyx_obj_9adio
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1061
+/* "adios_mpi.pyx":1069
  *         adios_release_step(self.fp)
  * 
  *     cpdef advance(self, int last = 0, float timeout_sec = 0.0):             # <<<<<<<<<<<<<<
@@ -16406,10 +16658,10 @@ static PyObject *__pyx_f_9adios_mpi_4file_advance(struct __pyx_obj_9adios_mpi_fi
   PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
   PyObject *__pyx_t_6 = NULL;
-  Py_ssize_t __pyx_t_7;
+  int __pyx_t_7;
   PyObject *__pyx_t_8 = NULL;
   int __pyx_t_9;
-  int __pyx_t_10;
+  Py_ssize_t __pyx_t_10;
   PyObject *(*__pyx_t_11)(PyObject *);
   __Pyx_RefNannySetupContext("advance", 0);
   if (__pyx_optional_args) {
@@ -16424,18 +16676,18 @@ static PyObject *__pyx_f_9adios_mpi_4file_advance(struct __pyx_obj_9adios_mpi_fi
   if (unlikely(__pyx_skip_dispatch)) ;
   /* Check if overridden in Python */
   else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_advance); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1061, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_advance); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1069, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_9adios_mpi_4file_15advance)) {
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_last); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1061, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_last); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1069, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_4 = PyFloat_FromDouble(__pyx_v_timeout_sec); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1061, __pyx_L1_error)
+      __pyx_t_4 = PyFloat_FromDouble(__pyx_v_timeout_sec); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1069, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_INCREF(__pyx_t_1);
       __pyx_t_5 = __pyx_t_1; __pyx_t_6 = NULL;
       __pyx_t_7 = 0;
-      if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_5))) {
+      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
         __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
         if (likely(__pyx_t_6)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
@@ -16445,20 +16697,42 @@ static PyObject *__pyx_f_9adios_mpi_4file_advance(struct __pyx_obj_9adios_mpi_fi
           __pyx_t_7 = 1;
         }
       }
-      __pyx_t_8 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1061, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_8);
-      if (__pyx_t_6) {
-        __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_6); __pyx_t_6 = NULL;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_5)) {
+        PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_t_3, __pyx_t_4};
+        __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1069, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
+        PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_t_3, __pyx_t_4};
+        __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1069, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      } else
+      #endif
+      {
+        __pyx_t_8 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1069, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_8);
+        if (__pyx_t_6) {
+          __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_6); __pyx_t_6 = NULL;
+        }
+        __Pyx_GIVEREF(__pyx_t_3);
+        PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, __pyx_t_3);
+        __Pyx_GIVEREF(__pyx_t_4);
+        PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, __pyx_t_4);
+        __pyx_t_3 = 0;
+        __pyx_t_4 = 0;
+        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1069, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
       }
-      __Pyx_GIVEREF(__pyx_t_3);
-      PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, __pyx_t_3);
-      __Pyx_GIVEREF(__pyx_t_4);
-      PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, __pyx_t_4);
-      __pyx_t_3 = 0;
-      __pyx_t_4 = 0;
-      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1061, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_2);
-      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       __pyx_r = __pyx_t_2;
       __pyx_t_2 = 0;
@@ -16468,7 +16742,7 @@ static PyObject *__pyx_f_9adios_mpi_4file_advance(struct __pyx_obj_9adios_mpi_fi
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   }
 
-  /* "adios_mpi.pyx":1072
+  /* "adios_mpi.pyx":1080
  *             int: 0 if successful, non-zero otherwise.
  *         """
  *         val = adios_advance_step(self.fp, last, timeout_sec)             # <<<<<<<<<<<<<<
@@ -16477,7 +16751,7 @@ static PyObject *__pyx_f_9adios_mpi_4file_advance(struct __pyx_obj_9adios_mpi_fi
  */
   __pyx_v_val = adios_advance_step(__pyx_v_self->fp, __pyx_v_last, __pyx_v_timeout_sec);
 
-  /* "adios_mpi.pyx":1073
+  /* "adios_mpi.pyx":1081
  *         """
  *         val = adios_advance_step(self.fp, last, timeout_sec)
  *         if (val >= 0):             # <<<<<<<<<<<<<<
@@ -16487,37 +16761,37 @@ static PyObject *__pyx_f_9adios_mpi_4file_advance(struct __pyx_obj_9adios_mpi_fi
   __pyx_t_9 = ((__pyx_v_val >= 0) != 0);
   if (__pyx_t_9) {
 
-    /* "adios_mpi.pyx":1074
+    /* "adios_mpi.pyx":1082
  *         val = adios_advance_step(self.fp, last, timeout_sec)
  *         if (val >= 0):
  *             self.current_step = self.fp.current_step             # <<<<<<<<<<<<<<
  *             self.last_step = self.fp.last_step
  * 
  */
-    __pyx_t_10 = __pyx_v_self->fp->current_step;
-    __pyx_v_self->current_step = __pyx_t_10;
+    __pyx_t_7 = __pyx_v_self->fp->current_step;
+    __pyx_v_self->current_step = __pyx_t_7;
 
-    /* "adios_mpi.pyx":1075
+    /* "adios_mpi.pyx":1083
  *         if (val >= 0):
  *             self.current_step = self.fp.current_step
  *             self.last_step = self.fp.last_step             # <<<<<<<<<<<<<<
  * 
  *             for v in self.vars.values():
  */
-    __pyx_t_10 = __pyx_v_self->fp->last_step;
-    __pyx_v_self->last_step = __pyx_t_10;
+    __pyx_t_7 = __pyx_v_self->fp->last_step;
+    __pyx_v_self->last_step = __pyx_t_7;
 
-    /* "adios_mpi.pyx":1077
+    /* "adios_mpi.pyx":1085
  *             self.last_step = self.fp.last_step
  * 
  *             for v in self.vars.values():             # <<<<<<<<<<<<<<
  *                 v.advance()
  * 
  */
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_values); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1077, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_values); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1085, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_t_5 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
       __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
       if (likely(__pyx_t_5)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
@@ -16527,38 +16801,38 @@ static PyObject *__pyx_f_9adios_mpi_4file_advance(struct __pyx_obj_9adios_mpi_fi
       }
     }
     if (__pyx_t_5) {
-      __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1077, __pyx_L1_error)
+      __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1085, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     } else {
-      __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1077, __pyx_L1_error)
+      __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1085, __pyx_L1_error)
     }
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) {
-      __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __pyx_t_7 = 0;
+      __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __pyx_t_10 = 0;
       __pyx_t_11 = NULL;
     } else {
-      __pyx_t_7 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1077, __pyx_L1_error)
+      __pyx_t_10 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1085, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
-      __pyx_t_11 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1077, __pyx_L1_error)
+      __pyx_t_11 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1085, __pyx_L1_error)
     }
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     for (;;) {
       if (likely(!__pyx_t_11)) {
         if (likely(PyList_CheckExact(__pyx_t_2))) {
-          if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_2)) break;
-          #if CYTHON_COMPILING_IN_CPYTHON
-          __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_7); __Pyx_INCREF(__pyx_t_1); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 1077, __pyx_L1_error)
+          if (__pyx_t_10 >= PyList_GET_SIZE(__pyx_t_2)) break;
+          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+          __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_10); __Pyx_INCREF(__pyx_t_1); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 1085, __pyx_L1_error)
           #else
-          __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1077, __pyx_L1_error)
+          __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1085, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_1);
           #endif
         } else {
-          if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
-          #if CYTHON_COMPILING_IN_CPYTHON
-          __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_7); __Pyx_INCREF(__pyx_t_1); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 1077, __pyx_L1_error)
+          if (__pyx_t_10 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
+          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+          __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_10); __Pyx_INCREF(__pyx_t_1); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 1085, __pyx_L1_error)
           #else
-          __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1077, __pyx_L1_error)
+          __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1085, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_1);
           #endif
         }
@@ -16568,7 +16842,7 @@ static PyObject *__pyx_f_9adios_mpi_4file_advance(struct __pyx_obj_9adios_mpi_fi
           PyObject* exc_type = PyErr_Occurred();
           if (exc_type) {
             if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-            else __PYX_ERR(0, 1077, __pyx_L1_error)
+            else __PYX_ERR(0, 1085, __pyx_L1_error)
           }
           break;
         }
@@ -16577,17 +16851,17 @@ static PyObject *__pyx_f_9adios_mpi_4file_advance(struct __pyx_obj_9adios_mpi_fi
       __Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_1);
       __pyx_t_1 = 0;
 
-      /* "adios_mpi.pyx":1078
+      /* "adios_mpi.pyx":1086
  * 
  *             for v in self.vars.values():
  *                 v.advance()             # <<<<<<<<<<<<<<
  * 
  *         return val
  */
-      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_v, __pyx_n_s_advance); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1078, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_v, __pyx_n_s_advance); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1086, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       __pyx_t_8 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_5))) {
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
         __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_5);
         if (likely(__pyx_t_8)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
@@ -16597,16 +16871,16 @@ static PyObject *__pyx_f_9adios_mpi_4file_advance(struct __pyx_obj_9adios_mpi_fi
         }
       }
       if (__pyx_t_8) {
-        __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1078, __pyx_L1_error)
+        __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1086, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
       } else {
-        __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1078, __pyx_L1_error)
+        __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1086, __pyx_L1_error)
       }
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-      /* "adios_mpi.pyx":1077
+      /* "adios_mpi.pyx":1085
  *             self.last_step = self.fp.last_step
  * 
  *             for v in self.vars.values():             # <<<<<<<<<<<<<<
@@ -16616,7 +16890,7 @@ static PyObject *__pyx_f_9adios_mpi_4file_advance(struct __pyx_obj_9adios_mpi_fi
     }
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-    /* "adios_mpi.pyx":1073
+    /* "adios_mpi.pyx":1081
  *         """
  *         val = adios_advance_step(self.fp, last, timeout_sec)
  *         if (val >= 0):             # <<<<<<<<<<<<<<
@@ -16625,7 +16899,7 @@ static PyObject *__pyx_f_9adios_mpi_4file_advance(struct __pyx_obj_9adios_mpi_fi
  */
   }
 
-  /* "adios_mpi.pyx":1080
+  /* "adios_mpi.pyx":1088
  *                 v.advance()
  * 
  *         return val             # <<<<<<<<<<<<<<
@@ -16633,13 +16907,13 @@ static PyObject *__pyx_f_9adios_mpi_4file_advance(struct __pyx_obj_9adios_mpi_fi
  *     def __getitem__(self, varname):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_val); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1080, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_val); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1088, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":1061
+  /* "adios_mpi.pyx":1069
  *         adios_release_step(self.fp)
  * 
  *     cpdef advance(self, int last = 0, float timeout_sec = 0.0):             # <<<<<<<<<<<<<<
@@ -16700,7 +16974,7 @@ static PyObject *__pyx_pw_9adios_mpi_4file_15advance(PyObject *__pyx_v_self, PyO
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "advance") < 0)) __PYX_ERR(0, 1061, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "advance") < 0)) __PYX_ERR(0, 1069, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -16711,19 +16985,19 @@ static PyObject *__pyx_pw_9adios_mpi_4file_15advance(PyObject *__pyx_v_self, PyO
       }
     }
     if (values[0]) {
-      __pyx_v_last = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_last == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1061, __pyx_L3_error)
+      __pyx_v_last = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_last == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1069, __pyx_L3_error)
     } else {
       __pyx_v_last = ((int)0);
     }
     if (values[1]) {
-      __pyx_v_timeout_sec = __pyx_PyFloat_AsFloat(values[1]); if (unlikely((__pyx_v_timeout_sec == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 1061, __pyx_L3_error)
+      __pyx_v_timeout_sec = __pyx_PyFloat_AsFloat(values[1]); if (unlikely((__pyx_v_timeout_sec == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 1069, __pyx_L3_error)
     } else {
       __pyx_v_timeout_sec = ((float)0.0);
     }
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("advance", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1061, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("advance", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1069, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.file.advance", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -16746,7 +17020,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_14advance(struct __pyx_obj_9adios_mpi
   __pyx_t_2.__pyx_n = 2;
   __pyx_t_2.last = __pyx_v_last;
   __pyx_t_2.timeout_sec = __pyx_v_timeout_sec;
-  __pyx_t_1 = __pyx_vtabptr_9adios_mpi_file->advance(__pyx_v_self, 1, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1061, __pyx_L1_error)
+  __pyx_t_1 = __pyx_vtabptr_9adios_mpi_file->advance(__pyx_v_self, 1, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1069, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -16763,7 +17037,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_14advance(struct __pyx_obj_9adios_mpi
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1082
+/* "adios_mpi.pyx":1090
  *         return val
  * 
  *     def __getitem__(self, varname):             # <<<<<<<<<<<<<<
@@ -16809,7 +17083,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_16__getitem__(struct __pyx_obj_9adios
   __Pyx_RefNannySetupContext("__getitem__", 0);
   __Pyx_INCREF(__pyx_v_varname);
 
-  /* "adios_mpi.pyx":1093
+  /* "adios_mpi.pyx":1101
  * 
  *         """
  *         if not isinstance(varname, tuple):             # <<<<<<<<<<<<<<
@@ -16820,14 +17094,14 @@ static PyObject *__pyx_pf_9adios_mpi_4file_16__getitem__(struct __pyx_obj_9adios
   __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0);
   if (__pyx_t_2) {
 
-    /* "adios_mpi.pyx":1094
+    /* "adios_mpi.pyx":1102
  *         """
  *         if not isinstance(varname, tuple):
  *             varname = (varname,)             # <<<<<<<<<<<<<<
  * 
  *         if len(varname) > 1:
  */
-    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1094, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1102, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_varname);
     __Pyx_GIVEREF(__pyx_v_varname);
@@ -16835,7 +17109,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_16__getitem__(struct __pyx_obj_9adios
     __Pyx_DECREF_SET(__pyx_v_varname, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "adios_mpi.pyx":1093
+    /* "adios_mpi.pyx":1101
  * 
  *         """
  *         if not isinstance(varname, tuple):             # <<<<<<<<<<<<<<
@@ -16844,37 +17118,37 @@ static PyObject *__pyx_pf_9adios_mpi_4file_16__getitem__(struct __pyx_obj_9adios
  */
   }
 
-  /* "adios_mpi.pyx":1096
+  /* "adios_mpi.pyx":1104
  *             varname = (varname,)
  * 
  *         if len(varname) > 1:             # <<<<<<<<<<<<<<
  *             raise KeyError(varname)
  * 
  */
-  __pyx_t_4 = PyObject_Length(__pyx_v_varname); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 1096, __pyx_L1_error)
+  __pyx_t_4 = PyObject_Length(__pyx_v_varname); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 1104, __pyx_L1_error)
   __pyx_t_2 = ((__pyx_t_4 > 1) != 0);
   if (__pyx_t_2) {
 
-    /* "adios_mpi.pyx":1097
+    /* "adios_mpi.pyx":1105
  * 
  *         if len(varname) > 1:
  *             raise KeyError(varname)             # <<<<<<<<<<<<<<
  * 
  *         for key_ in varname:
  */
-    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1097, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1105, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_varname);
     __Pyx_GIVEREF(__pyx_v_varname);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_varname);
-    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_KeyError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1097, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_KeyError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1105, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_Raise(__pyx_t_5, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    __PYX_ERR(0, 1097, __pyx_L1_error)
+    __PYX_ERR(0, 1105, __pyx_L1_error)
 
-    /* "adios_mpi.pyx":1096
+    /* "adios_mpi.pyx":1104
  *             varname = (varname,)
  * 
  *         if len(varname) > 1:             # <<<<<<<<<<<<<<
@@ -16883,7 +17157,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_16__getitem__(struct __pyx_obj_9adios
  */
   }
 
-  /* "adios_mpi.pyx":1099
+  /* "adios_mpi.pyx":1107
  *             raise KeyError(varname)
  * 
  *         for key_ in varname:             # <<<<<<<<<<<<<<
@@ -16894,26 +17168,26 @@ static PyObject *__pyx_pf_9adios_mpi_4file_16__getitem__(struct __pyx_obj_9adios
     __pyx_t_5 = __pyx_v_varname; __Pyx_INCREF(__pyx_t_5); __pyx_t_4 = 0;
     __pyx_t_6 = NULL;
   } else {
-    __pyx_t_4 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_v_varname); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1099, __pyx_L1_error)
+    __pyx_t_4 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_v_varname); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1107, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1099, __pyx_L1_error)
+    __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1107, __pyx_L1_error)
   }
   for (;;) {
     if (likely(!__pyx_t_6)) {
       if (likely(PyList_CheckExact(__pyx_t_5))) {
         if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_5)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_3 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1099, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_3 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1107, __pyx_L1_error)
         #else
-        __pyx_t_3 = PySequence_ITEM(__pyx_t_5, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1099, __pyx_L1_error)
+        __pyx_t_3 = PySequence_ITEM(__pyx_t_5, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1107, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
         #endif
       } else {
         if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_5)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1099, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1107, __pyx_L1_error)
         #else
-        __pyx_t_3 = PySequence_ITEM(__pyx_t_5, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1099, __pyx_L1_error)
+        __pyx_t_3 = PySequence_ITEM(__pyx_t_5, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1107, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
         #endif
       }
@@ -16923,7 +17197,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_16__getitem__(struct __pyx_obj_9adios
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
           if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-          else __PYX_ERR(0, 1099, __pyx_L1_error)
+          else __PYX_ERR(0, 1107, __pyx_L1_error)
         }
         break;
       }
@@ -16932,7 +17206,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_16__getitem__(struct __pyx_obj_9adios
     __Pyx_XDECREF_SET(__pyx_v_key_, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "adios_mpi.pyx":1100
+    /* "adios_mpi.pyx":1108
  * 
  *         for key_ in varname:
  *             if not isinstance(key_, str):             # <<<<<<<<<<<<<<
@@ -16943,20 +17217,20 @@ static PyObject *__pyx_pf_9adios_mpi_4file_16__getitem__(struct __pyx_obj_9adios
     __pyx_t_1 = ((!(__pyx_t_2 != 0)) != 0);
     if (__pyx_t_1) {
 
-      /* "adios_mpi.pyx":1101
+      /* "adios_mpi.pyx":1109
  *         for key_ in varname:
  *             if not isinstance(key_, str):
  *                 raise TypeError("Unhashable type")             # <<<<<<<<<<<<<<
  * 
  *             if key_.startswith('/'):
  */
-      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__20, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1101, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__20, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1109, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_Raise(__pyx_t_3, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      __PYX_ERR(0, 1101, __pyx_L1_error)
+      __PYX_ERR(0, 1109, __pyx_L1_error)
 
-      /* "adios_mpi.pyx":1100
+      /* "adios_mpi.pyx":1108
  * 
  *         for key_ in varname:
  *             if not isinstance(key_, str):             # <<<<<<<<<<<<<<
@@ -16965,35 +17239,35 @@ static PyObject *__pyx_pf_9adios_mpi_4file_16__getitem__(struct __pyx_obj_9adios
  */
     }
 
-    /* "adios_mpi.pyx":1103
+    /* "adios_mpi.pyx":1111
  *                 raise TypeError("Unhashable type")
  * 
  *             if key_.startswith('/'):             # <<<<<<<<<<<<<<
  *                 key_ = key_[1:]
  * 
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_key_, __pyx_n_s_startswith); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1103, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_key_, __pyx_n_s_startswith); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1111, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__21, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1103, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__21, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1111, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1103, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1111, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     if (__pyx_t_1) {
 
-      /* "adios_mpi.pyx":1104
+      /* "adios_mpi.pyx":1112
  * 
  *             if key_.startswith('/'):
  *                 key_ = key_[1:]             # <<<<<<<<<<<<<<
  * 
  *             if key_ in self.vars.keys():
  */
-      __pyx_t_7 = __Pyx_PyObject_GetSlice(__pyx_v_key_, 1, 0, NULL, NULL, &__pyx_slice__22, 1, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1104, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetSlice(__pyx_v_key_, 1, 0, NULL, NULL, &__pyx_slice__22, 1, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1112, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF_SET(__pyx_v_key_, __pyx_t_7);
       __pyx_t_7 = 0;
 
-      /* "adios_mpi.pyx":1103
+      /* "adios_mpi.pyx":1111
  *                 raise TypeError("Unhashable type")
  * 
  *             if key_.startswith('/'):             # <<<<<<<<<<<<<<
@@ -17002,17 +17276,17 @@ static PyObject *__pyx_pf_9adios_mpi_4file_16__getitem__(struct __pyx_obj_9adios
  */
     }
 
-    /* "adios_mpi.pyx":1106
+    /* "adios_mpi.pyx":1114
  *                 key_ = key_[1:]
  * 
  *             if key_ in self.vars.keys():             # <<<<<<<<<<<<<<
  *                 return self.vars.get(key_)
  * 
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1106, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1114, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_8 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
       __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_3);
       if (likely(__pyx_t_8)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -17022,19 +17296,19 @@ static PyObject *__pyx_pf_9adios_mpi_4file_16__getitem__(struct __pyx_obj_9adios
       }
     }
     if (__pyx_t_8) {
-      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1106, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1114, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     } else {
-      __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1106, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1114, __pyx_L1_error)
     }
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_1 = (__Pyx_PySequence_ContainsTF(__pyx_v_key_, __pyx_t_7, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1106, __pyx_L1_error)
+    __pyx_t_1 = (__Pyx_PySequence_ContainsTF(__pyx_v_key_, __pyx_t_7, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1114, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
 
-      /* "adios_mpi.pyx":1107
+      /* "adios_mpi.pyx":1115
  * 
  *             if key_ in self.vars.keys():
  *                 return self.vars.get(key_)             # <<<<<<<<<<<<<<
@@ -17042,10 +17316,10 @@ static PyObject *__pyx_pf_9adios_mpi_4file_16__getitem__(struct __pyx_obj_9adios
  *             if key_ in self.attrs.keys():
  */
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1107, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1115, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __pyx_t_8 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
         __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_3);
         if (likely(__pyx_t_8)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -17055,18 +17329,36 @@ static PyObject *__pyx_pf_9adios_mpi_4file_16__getitem__(struct __pyx_obj_9adios
         }
       }
       if (!__pyx_t_8) {
-        __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_key_); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1107, __pyx_L1_error)
+        __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_key_); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1115, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
       } else {
-        __pyx_t_9 = PyTuple_New(1+1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1107, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_9);
-        __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_8); __pyx_t_8 = NULL;
-        __Pyx_INCREF(__pyx_v_key_);
-        __Pyx_GIVEREF(__pyx_v_key_);
-        PyTuple_SET_ITEM(__pyx_t_9, 0+1, __pyx_v_key_);
-        __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_9, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1107, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_7);
-        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+        #if CYTHON_FAST_PYCALL
+        if (PyFunction_Check(__pyx_t_3)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_v_key_};
+          __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1115, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+          __Pyx_GOTREF(__pyx_t_7);
+        } else
+        #endif
+        #if CYTHON_FAST_PYCCALL
+        if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_v_key_};
+          __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1115, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+          __Pyx_GOTREF(__pyx_t_7);
+        } else
+        #endif
+        {
+          __pyx_t_9 = PyTuple_New(1+1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1115, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_9);
+          __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_8); __pyx_t_8 = NULL;
+          __Pyx_INCREF(__pyx_v_key_);
+          __Pyx_GIVEREF(__pyx_v_key_);
+          PyTuple_SET_ITEM(__pyx_t_9, 0+1, __pyx_v_key_);
+          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_9, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1115, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_7);
+          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+        }
       }
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_r = __pyx_t_7;
@@ -17074,7 +17366,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_16__getitem__(struct __pyx_obj_9adios
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       goto __pyx_L0;
 
-      /* "adios_mpi.pyx":1106
+      /* "adios_mpi.pyx":1114
  *                 key_ = key_[1:]
  * 
  *             if key_ in self.vars.keys():             # <<<<<<<<<<<<<<
@@ -17083,17 +17375,17 @@ static PyObject *__pyx_pf_9adios_mpi_4file_16__getitem__(struct __pyx_obj_9adios
  */
     }
 
-    /* "adios_mpi.pyx":1109
+    /* "adios_mpi.pyx":1117
  *                 return self.vars.get(key_)
  * 
  *             if key_ in self.attrs.keys():             # <<<<<<<<<<<<<<
  *                 return self.attrs.get(key_)
  * 
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1109, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1117, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_9 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
       __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_3);
       if (likely(__pyx_t_9)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -17103,19 +17395,19 @@ static PyObject *__pyx_pf_9adios_mpi_4file_16__getitem__(struct __pyx_obj_9adios
       }
     }
     if (__pyx_t_9) {
-      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1109, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1117, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     } else {
-      __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1109, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1117, __pyx_L1_error)
     }
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_v_key_, __pyx_t_7, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1109, __pyx_L1_error)
+    __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_v_key_, __pyx_t_7, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1117, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __pyx_t_1 = (__pyx_t_2 != 0);
     if (__pyx_t_1) {
 
-      /* "adios_mpi.pyx":1110
+      /* "adios_mpi.pyx":1118
  * 
  *             if key_ in self.attrs.keys():
  *                 return self.attrs.get(key_)             # <<<<<<<<<<<<<<
@@ -17123,10 +17415,10 @@ static PyObject *__pyx_pf_9adios_mpi_4file_16__getitem__(struct __pyx_obj_9adios
  *             if '/'+key_ in self.vars.keys():
  */
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1110, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1118, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __pyx_t_9 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
         __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_3);
         if (likely(__pyx_t_9)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -17136,18 +17428,36 @@ static PyObject *__pyx_pf_9adios_mpi_4file_16__getitem__(struct __pyx_obj_9adios
         }
       }
       if (!__pyx_t_9) {
-        __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_key_); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1110, __pyx_L1_error)
+        __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_key_); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1118, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
       } else {
-        __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1110, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_8);
-        __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_9); __pyx_t_9 = NULL;
-        __Pyx_INCREF(__pyx_v_key_);
-        __Pyx_GIVEREF(__pyx_v_key_);
-        PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_v_key_);
-        __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_8, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1110, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_7);
-        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        #if CYTHON_FAST_PYCALL
+        if (PyFunction_Check(__pyx_t_3)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_9, __pyx_v_key_};
+          __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1118, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+          __Pyx_GOTREF(__pyx_t_7);
+        } else
+        #endif
+        #if CYTHON_FAST_PYCCALL
+        if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_9, __pyx_v_key_};
+          __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1118, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+          __Pyx_GOTREF(__pyx_t_7);
+        } else
+        #endif
+        {
+          __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1118, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_8);
+          __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_9); __pyx_t_9 = NULL;
+          __Pyx_INCREF(__pyx_v_key_);
+          __Pyx_GIVEREF(__pyx_v_key_);
+          PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_v_key_);
+          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_8, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1118, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_7);
+          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        }
       }
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_r = __pyx_t_7;
@@ -17155,7 +17465,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_16__getitem__(struct __pyx_obj_9adios
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       goto __pyx_L0;
 
-      /* "adios_mpi.pyx":1109
+      /* "adios_mpi.pyx":1117
  *                 return self.vars.get(key_)
  * 
  *             if key_ in self.attrs.keys():             # <<<<<<<<<<<<<<
@@ -17164,19 +17474,19 @@ static PyObject *__pyx_pf_9adios_mpi_4file_16__getitem__(struct __pyx_obj_9adios
  */
     }
 
-    /* "adios_mpi.pyx":1112
+    /* "adios_mpi.pyx":1120
  *                 return self.attrs.get(key_)
  * 
  *             if '/'+key_ in self.vars.keys():             # <<<<<<<<<<<<<<
  *                 return self.vars.get('/'+key_)
  * 
  */
-    __pyx_t_7 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1112, __pyx_L1_error)
+    __pyx_t_7 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1120, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
-    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1112, __pyx_L1_error)
+    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1120, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __pyx_t_9 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_8))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) {
       __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_8);
       if (likely(__pyx_t_9)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
@@ -17186,20 +17496,20 @@ static PyObject *__pyx_pf_9adios_mpi_4file_16__getitem__(struct __pyx_obj_9adios
       }
     }
     if (__pyx_t_9) {
-      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1112, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1120, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     } else {
-      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1112, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1120, __pyx_L1_error)
     }
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-    __pyx_t_1 = (__Pyx_PySequence_ContainsTF(__pyx_t_7, __pyx_t_3, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1112, __pyx_L1_error)
+    __pyx_t_1 = (__Pyx_PySequence_ContainsTF(__pyx_t_7, __pyx_t_3, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1120, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
 
-      /* "adios_mpi.pyx":1113
+      /* "adios_mpi.pyx":1121
  * 
  *             if '/'+key_ in self.vars.keys():
  *                 return self.vars.get('/'+key_)             # <<<<<<<<<<<<<<
@@ -17207,12 +17517,12 @@ static PyObject *__pyx_pf_9adios_mpi_4file_16__getitem__(struct __pyx_obj_9adios
  *             if '/'+key_ in self.attrs.keys():
  */
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_get); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1113, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_get); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1121, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      __pyx_t_8 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1113, __pyx_L1_error)
+      __pyx_t_8 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1121, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
       __pyx_t_9 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_7))) {
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
         __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_7);
         if (likely(__pyx_t_9)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
@@ -17222,19 +17532,39 @@ static PyObject *__pyx_pf_9adios_mpi_4file_16__getitem__(struct __pyx_obj_9adios
         }
       }
       if (!__pyx_t_9) {
-        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1113, __pyx_L1_error)
+        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1121, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
         __Pyx_GOTREF(__pyx_t_3);
       } else {
-        __pyx_t_10 = PyTuple_New(1+1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1113, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_10);
-        __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_9); __pyx_t_9 = NULL;
-        __Pyx_GIVEREF(__pyx_t_8);
-        PyTuple_SET_ITEM(__pyx_t_10, 0+1, __pyx_t_8);
-        __pyx_t_8 = 0;
-        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1113, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_3);
-        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+        #if CYTHON_FAST_PYCALL
+        if (PyFunction_Check(__pyx_t_7)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_9, __pyx_t_8};
+          __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1121, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        } else
+        #endif
+        #if CYTHON_FAST_PYCCALL
+        if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_9, __pyx_t_8};
+          __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1121, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        } else
+        #endif
+        {
+          __pyx_t_10 = PyTuple_New(1+1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1121, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_10);
+          __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_9); __pyx_t_9 = NULL;
+          __Pyx_GIVEREF(__pyx_t_8);
+          PyTuple_SET_ITEM(__pyx_t_10, 0+1, __pyx_t_8);
+          __pyx_t_8 = 0;
+          __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1121, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+        }
       }
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       __pyx_r = __pyx_t_3;
@@ -17242,7 +17572,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_16__getitem__(struct __pyx_obj_9adios
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       goto __pyx_L0;
 
-      /* "adios_mpi.pyx":1112
+      /* "adios_mpi.pyx":1120
  *                 return self.attrs.get(key_)
  * 
  *             if '/'+key_ in self.vars.keys():             # <<<<<<<<<<<<<<
@@ -17251,19 +17581,19 @@ static PyObject *__pyx_pf_9adios_mpi_4file_16__getitem__(struct __pyx_obj_9adios
  */
     }
 
-    /* "adios_mpi.pyx":1115
+    /* "adios_mpi.pyx":1123
  *                 return self.vars.get('/'+key_)
  * 
  *             if '/'+key_ in self.attrs.keys():             # <<<<<<<<<<<<<<
  *                 return self.attrs.get('/'+key_)
  * 
  */
-    __pyx_t_3 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1115, __pyx_L1_error)
+    __pyx_t_3 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1123, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1115, __pyx_L1_error)
+    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1123, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_10);
     __pyx_t_8 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_10))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_10))) {
       __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_10);
       if (likely(__pyx_t_8)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
@@ -17273,20 +17603,20 @@ static PyObject *__pyx_pf_9adios_mpi_4file_16__getitem__(struct __pyx_obj_9adios
       }
     }
     if (__pyx_t_8) {
-      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1115, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1123, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     } else {
-      __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_10); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1115, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_10); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1123, __pyx_L1_error)
     }
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
-    __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_3, __pyx_t_7, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1115, __pyx_L1_error)
+    __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_3, __pyx_t_7, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1123, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __pyx_t_1 = (__pyx_t_2 != 0);
     if (__pyx_t_1) {
 
-      /* "adios_mpi.pyx":1116
+      /* "adios_mpi.pyx":1124
  * 
  *             if '/'+key_ in self.attrs.keys():
  *                 return self.attrs.get('/'+key_)             # <<<<<<<<<<<<<<
@@ -17294,12 +17624,12 @@ static PyObject *__pyx_pf_9adios_mpi_4file_16__getitem__(struct __pyx_obj_9adios
  *             for name in self.vars.keys():
  */
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1116, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1124, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_10 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1116, __pyx_L1_error)
+      __pyx_t_10 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1124, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_10);
       __pyx_t_8 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
         __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_3);
         if (likely(__pyx_t_8)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -17309,19 +17639,39 @@ static PyObject *__pyx_pf_9adios_mpi_4file_16__getitem__(struct __pyx_obj_9adios
         }
       }
       if (!__pyx_t_8) {
-        __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_10); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1116, __pyx_L1_error)
+        __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_10); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1124, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
         __Pyx_GOTREF(__pyx_t_7);
       } else {
-        __pyx_t_9 = PyTuple_New(1+1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1116, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_9);
-        __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_8); __pyx_t_8 = NULL;
-        __Pyx_GIVEREF(__pyx_t_10);
-        PyTuple_SET_ITEM(__pyx_t_9, 0+1, __pyx_t_10);
-        __pyx_t_10 = 0;
-        __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_9, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1116, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_7);
-        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+        #if CYTHON_FAST_PYCALL
+        if (PyFunction_Check(__pyx_t_3)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_t_10};
+          __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1124, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+          __Pyx_GOTREF(__pyx_t_7);
+          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+        } else
+        #endif
+        #if CYTHON_FAST_PYCCALL
+        if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_t_10};
+          __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1124, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+          __Pyx_GOTREF(__pyx_t_7);
+          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+        } else
+        #endif
+        {
+          __pyx_t_9 = PyTuple_New(1+1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1124, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_9);
+          __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_8); __pyx_t_8 = NULL;
+          __Pyx_GIVEREF(__pyx_t_10);
+          PyTuple_SET_ITEM(__pyx_t_9, 0+1, __pyx_t_10);
+          __pyx_t_10 = 0;
+          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_9, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1124, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_7);
+          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+        }
       }
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_r = __pyx_t_7;
@@ -17329,7 +17679,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_16__getitem__(struct __pyx_obj_9adios
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       goto __pyx_L0;
 
-      /* "adios_mpi.pyx":1115
+      /* "adios_mpi.pyx":1123
  *                 return self.vars.get('/'+key_)
  * 
  *             if '/'+key_ in self.attrs.keys():             # <<<<<<<<<<<<<<
@@ -17338,17 +17688,17 @@ static PyObject *__pyx_pf_9adios_mpi_4file_16__getitem__(struct __pyx_obj_9adios
  */
     }
 
-    /* "adios_mpi.pyx":1118
+    /* "adios_mpi.pyx":1126
  *                 return self.attrs.get('/'+key_)
  * 
  *             for name in self.vars.keys():             # <<<<<<<<<<<<<<
  *                 #if (key_ == os.path.dirname(name)) or ('/' + key_ == os.path.dirname(name)):
  *                 if name.startswith(key_) or name.startswith('/'+key_):
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1118, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1126, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_9 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
       __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_3);
       if (likely(__pyx_t_9)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -17358,10 +17708,10 @@ static PyObject *__pyx_pf_9adios_mpi_4file_16__getitem__(struct __pyx_obj_9adios
       }
     }
     if (__pyx_t_9) {
-      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1118, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1126, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     } else {
-      __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1118, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1126, __pyx_L1_error)
     }
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -17369,27 +17719,27 @@ static PyObject *__pyx_pf_9adios_mpi_4file_16__getitem__(struct __pyx_obj_9adios
       __pyx_t_3 = __pyx_t_7; __Pyx_INCREF(__pyx_t_3); __pyx_t_11 = 0;
       __pyx_t_12 = NULL;
     } else {
-      __pyx_t_11 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1118, __pyx_L1_error)
+      __pyx_t_11 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1126, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_12 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1118, __pyx_L1_error)
+      __pyx_t_12 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1126, __pyx_L1_error)
     }
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     for (;;) {
       if (likely(!__pyx_t_12)) {
         if (likely(PyList_CheckExact(__pyx_t_3))) {
           if (__pyx_t_11 >= PyList_GET_SIZE(__pyx_t_3)) break;
-          #if CYTHON_COMPILING_IN_CPYTHON
-          __pyx_t_7 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_11); __Pyx_INCREF(__pyx_t_7); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 1118, __pyx_L1_error)
+          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+          __pyx_t_7 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_11); __Pyx_INCREF(__pyx_t_7); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 1126, __pyx_L1_error)
           #else
-          __pyx_t_7 = PySequence_ITEM(__pyx_t_3, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1118, __pyx_L1_error)
+          __pyx_t_7 = PySequence_ITEM(__pyx_t_3, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1126, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_7);
           #endif
         } else {
           if (__pyx_t_11 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
-          #if CYTHON_COMPILING_IN_CPYTHON
-          __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_11); __Pyx_INCREF(__pyx_t_7); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 1118, __pyx_L1_error)
+          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+          __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_11); __Pyx_INCREF(__pyx_t_7); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 1126, __pyx_L1_error)
           #else
-          __pyx_t_7 = PySequence_ITEM(__pyx_t_3, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1118, __pyx_L1_error)
+          __pyx_t_7 = PySequence_ITEM(__pyx_t_3, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1126, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_7);
           #endif
         }
@@ -17399,7 +17749,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_16__getitem__(struct __pyx_obj_9adios
           PyObject* exc_type = PyErr_Occurred();
           if (exc_type) {
             if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-            else __PYX_ERR(0, 1118, __pyx_L1_error)
+            else __PYX_ERR(0, 1126, __pyx_L1_error)
           }
           break;
         }
@@ -17408,17 +17758,17 @@ static PyObject *__pyx_pf_9adios_mpi_4file_16__getitem__(struct __pyx_obj_9adios
       __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_7);
       __pyx_t_7 = 0;
 
-      /* "adios_mpi.pyx":1120
+      /* "adios_mpi.pyx":1128
  *             for name in self.vars.keys():
  *                 #if (key_ == os.path.dirname(name)) or ('/' + key_ == os.path.dirname(name)):
  *                 if name.startswith(key_) or name.startswith('/'+key_):             # <<<<<<<<<<<<<<
  *                     return group(self, key_)
  * 
  */
-      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_startswith); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1120, __pyx_L1_error)
+      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_startswith); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1128, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
       __pyx_t_10 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_9))) {
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
         __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_9);
         if (likely(__pyx_t_10)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
@@ -17428,33 +17778,51 @@ static PyObject *__pyx_pf_9adios_mpi_4file_16__getitem__(struct __pyx_obj_9adios
         }
       }
       if (!__pyx_t_10) {
-        __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_v_key_); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1120, __pyx_L1_error)
+        __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_v_key_); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1128, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
       } else {
-        __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1120, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_8);
-        __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_10); __pyx_t_10 = NULL;
-        __Pyx_INCREF(__pyx_v_key_);
-        __Pyx_GIVEREF(__pyx_v_key_);
-        PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_v_key_);
-        __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_8, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1120, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_7);
-        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        #if CYTHON_FAST_PYCALL
+        if (PyFunction_Check(__pyx_t_9)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_10, __pyx_v_key_};
+          __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_9, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1128, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
+          __Pyx_GOTREF(__pyx_t_7);
+        } else
+        #endif
+        #if CYTHON_FAST_PYCCALL
+        if (__Pyx_PyFastCFunction_Check(__pyx_t_9)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_10, __pyx_v_key_};
+          __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_9, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1128, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
+          __Pyx_GOTREF(__pyx_t_7);
+        } else
+        #endif
+        {
+          __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1128, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_8);
+          __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_10); __pyx_t_10 = NULL;
+          __Pyx_INCREF(__pyx_v_key_);
+          __Pyx_GIVEREF(__pyx_v_key_);
+          PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_v_key_);
+          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_8, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1128, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_7);
+          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        }
       }
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1120, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1128, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       if (!__pyx_t_2) {
       } else {
         __pyx_t_1 = __pyx_t_2;
         goto __pyx_L16_bool_binop_done;
       }
-      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_startswith); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1120, __pyx_L1_error)
+      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_startswith); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1128, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
-      __pyx_t_8 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1120, __pyx_L1_error)
+      __pyx_t_8 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1128, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
       __pyx_t_10 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_9))) {
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
         __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_9);
         if (likely(__pyx_t_10)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
@@ -17464,28 +17832,48 @@ static PyObject *__pyx_pf_9adios_mpi_4file_16__getitem__(struct __pyx_obj_9adios
         }
       }
       if (!__pyx_t_10) {
-        __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1120, __pyx_L1_error)
+        __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1128, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
         __Pyx_GOTREF(__pyx_t_7);
       } else {
-        __pyx_t_13 = PyTuple_New(1+1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1120, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_13);
-        __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_10); __pyx_t_10 = NULL;
-        __Pyx_GIVEREF(__pyx_t_8);
-        PyTuple_SET_ITEM(__pyx_t_13, 0+1, __pyx_t_8);
-        __pyx_t_8 = 0;
-        __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_13, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1120, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_7);
-        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+        #if CYTHON_FAST_PYCALL
+        if (PyFunction_Check(__pyx_t_9)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_10, __pyx_t_8};
+          __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_9, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1128, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
+          __Pyx_GOTREF(__pyx_t_7);
+          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        } else
+        #endif
+        #if CYTHON_FAST_PYCCALL
+        if (__Pyx_PyFastCFunction_Check(__pyx_t_9)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_10, __pyx_t_8};
+          __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_9, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1128, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
+          __Pyx_GOTREF(__pyx_t_7);
+          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        } else
+        #endif
+        {
+          __pyx_t_13 = PyTuple_New(1+1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1128, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_13);
+          __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_10); __pyx_t_10 = NULL;
+          __Pyx_GIVEREF(__pyx_t_8);
+          PyTuple_SET_ITEM(__pyx_t_13, 0+1, __pyx_t_8);
+          __pyx_t_8 = 0;
+          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_13, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1128, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_7);
+          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+        }
       }
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1120, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1128, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       __pyx_t_1 = __pyx_t_2;
       __pyx_L16_bool_binop_done:;
       if (__pyx_t_1) {
 
-        /* "adios_mpi.pyx":1121
+        /* "adios_mpi.pyx":1129
  *                 #if (key_ == os.path.dirname(name)) or ('/' + key_ == os.path.dirname(name)):
  *                 if name.startswith(key_) or name.startswith('/'+key_):
  *                     return group(self, key_)             # <<<<<<<<<<<<<<
@@ -17493,7 +17881,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_16__getitem__(struct __pyx_obj_9adios
  *             for name in self.attrs.keys():
  */
         __Pyx_XDECREF(__pyx_r);
-        __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1121, __pyx_L1_error)
+        __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1129, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
         __Pyx_INCREF(((PyObject *)__pyx_v_self));
         __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
@@ -17501,7 +17889,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_16__getitem__(struct __pyx_obj_9adios
         __Pyx_INCREF(__pyx_v_key_);
         __Pyx_GIVEREF(__pyx_v_key_);
         PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_v_key_);
-        __pyx_t_9 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_9adios_mpi_group), __pyx_t_7, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1121, __pyx_L1_error)
+        __pyx_t_9 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_9adios_mpi_group), __pyx_t_7, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1129, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_9);
         __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
         __pyx_r = __pyx_t_9;
@@ -17510,7 +17898,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_16__getitem__(struct __pyx_obj_9adios
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
         goto __pyx_L0;
 
-        /* "adios_mpi.pyx":1120
+        /* "adios_mpi.pyx":1128
  *             for name in self.vars.keys():
  *                 #if (key_ == os.path.dirname(name)) or ('/' + key_ == os.path.dirname(name)):
  *                 if name.startswith(key_) or name.startswith('/'+key_):             # <<<<<<<<<<<<<<
@@ -17519,7 +17907,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_16__getitem__(struct __pyx_obj_9adios
  */
       }
 
-      /* "adios_mpi.pyx":1118
+      /* "adios_mpi.pyx":1126
  *                 return self.attrs.get('/'+key_)
  * 
  *             for name in self.vars.keys():             # <<<<<<<<<<<<<<
@@ -17529,17 +17917,17 @@ static PyObject *__pyx_pf_9adios_mpi_4file_16__getitem__(struct __pyx_obj_9adios
     }
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "adios_mpi.pyx":1123
+    /* "adios_mpi.pyx":1131
  *                     return group(self, key_)
  * 
  *             for name in self.attrs.keys():             # <<<<<<<<<<<<<<
  *                 #if (key_ == os.path.dirname(name)) or ('/' + key_ == os.path.dirname(name)):
  *                 if name.startswith(key_) or name.startswith('/'+key_):
  */
-    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1123, __pyx_L1_error)
+    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1131, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
     __pyx_t_7 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_9))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
       __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_9);
       if (likely(__pyx_t_7)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
@@ -17549,10 +17937,10 @@ static PyObject *__pyx_pf_9adios_mpi_4file_16__getitem__(struct __pyx_obj_9adios
       }
     }
     if (__pyx_t_7) {
-      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1123, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1131, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     } else {
-      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1123, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1131, __pyx_L1_error)
     }
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
@@ -17560,27 +17948,27 @@ static PyObject *__pyx_pf_9adios_mpi_4file_16__getitem__(struct __pyx_obj_9adios
       __pyx_t_9 = __pyx_t_3; __Pyx_INCREF(__pyx_t_9); __pyx_t_11 = 0;
       __pyx_t_12 = NULL;
     } else {
-      __pyx_t_11 = -1; __pyx_t_9 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1123, __pyx_L1_error)
+      __pyx_t_11 = -1; __pyx_t_9 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1131, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
-      __pyx_t_12 = Py_TYPE(__pyx_t_9)->tp_iternext; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1123, __pyx_L1_error)
+      __pyx_t_12 = Py_TYPE(__pyx_t_9)->tp_iternext; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1131, __pyx_L1_error)
     }
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     for (;;) {
       if (likely(!__pyx_t_12)) {
         if (likely(PyList_CheckExact(__pyx_t_9))) {
           if (__pyx_t_11 >= PyList_GET_SIZE(__pyx_t_9)) break;
-          #if CYTHON_COMPILING_IN_CPYTHON
-          __pyx_t_3 = PyList_GET_ITEM(__pyx_t_9, __pyx_t_11); __Pyx_INCREF(__pyx_t_3); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 1123, __pyx_L1_error)
+          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+          __pyx_t_3 = PyList_GET_ITEM(__pyx_t_9, __pyx_t_11); __Pyx_INCREF(__pyx_t_3); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 1131, __pyx_L1_error)
           #else
-          __pyx_t_3 = PySequence_ITEM(__pyx_t_9, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1123, __pyx_L1_error)
+          __pyx_t_3 = PySequence_ITEM(__pyx_t_9, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1131, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_3);
           #endif
         } else {
           if (__pyx_t_11 >= PyTuple_GET_SIZE(__pyx_t_9)) break;
-          #if CYTHON_COMPILING_IN_CPYTHON
-          __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_9, __pyx_t_11); __Pyx_INCREF(__pyx_t_3); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 1123, __pyx_L1_error)
+          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+          __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_9, __pyx_t_11); __Pyx_INCREF(__pyx_t_3); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 1131, __pyx_L1_error)
           #else
-          __pyx_t_3 = PySequence_ITEM(__pyx_t_9, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1123, __pyx_L1_error)
+          __pyx_t_3 = PySequence_ITEM(__pyx_t_9, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1131, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_3);
           #endif
         }
@@ -17590,7 +17978,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_16__getitem__(struct __pyx_obj_9adios
           PyObject* exc_type = PyErr_Occurred();
           if (exc_type) {
             if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-            else __PYX_ERR(0, 1123, __pyx_L1_error)
+            else __PYX_ERR(0, 1131, __pyx_L1_error)
           }
           break;
         }
@@ -17599,17 +17987,17 @@ static PyObject *__pyx_pf_9adios_mpi_4file_16__getitem__(struct __pyx_obj_9adios
       __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_3);
       __pyx_t_3 = 0;
 
-      /* "adios_mpi.pyx":1125
+      /* "adios_mpi.pyx":1133
  *             for name in self.attrs.keys():
  *                 #if (key_ == os.path.dirname(name)) or ('/' + key_ == os.path.dirname(name)):
  *                 if name.startswith(key_) or name.startswith('/'+key_):             # <<<<<<<<<<<<<<
  *                     return group(self, key_)
  * 
  */
-      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_startswith); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1125, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_startswith); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1133, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __pyx_t_13 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_7))) {
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
         __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_7);
         if (likely(__pyx_t_13)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
@@ -17619,33 +18007,51 @@ static PyObject *__pyx_pf_9adios_mpi_4file_16__getitem__(struct __pyx_obj_9adios
         }
       }
       if (!__pyx_t_13) {
-        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_v_key_); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1125, __pyx_L1_error)
+        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_v_key_); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1133, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
       } else {
-        __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1125, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_8);
-        __Pyx_GIVEREF(__pyx_t_13); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_13); __pyx_t_13 = NULL;
-        __Pyx_INCREF(__pyx_v_key_);
-        __Pyx_GIVEREF(__pyx_v_key_);
-        PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_v_key_);
-        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1125, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_3);
-        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        #if CYTHON_FAST_PYCALL
+        if (PyFunction_Check(__pyx_t_7)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_13, __pyx_v_key_};
+          __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1133, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
+          __Pyx_GOTREF(__pyx_t_3);
+        } else
+        #endif
+        #if CYTHON_FAST_PYCCALL
+        if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_13, __pyx_v_key_};
+          __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1133, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
+          __Pyx_GOTREF(__pyx_t_3);
+        } else
+        #endif
+        {
+          __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1133, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_8);
+          __Pyx_GIVEREF(__pyx_t_13); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_13); __pyx_t_13 = NULL;
+          __Pyx_INCREF(__pyx_v_key_);
+          __Pyx_GIVEREF(__pyx_v_key_);
+          PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_v_key_);
+          __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1133, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        }
       }
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1125, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1133, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       if (!__pyx_t_2) {
       } else {
         __pyx_t_1 = __pyx_t_2;
         goto __pyx_L21_bool_binop_done;
       }
-      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_startswith); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1125, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_startswith); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1133, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      __pyx_t_8 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1125, __pyx_L1_error)
+      __pyx_t_8 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1133, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
       __pyx_t_13 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_7))) {
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
         __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_7);
         if (likely(__pyx_t_13)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
@@ -17655,28 +18061,48 @@ static PyObject *__pyx_pf_9adios_mpi_4file_16__getitem__(struct __pyx_obj_9adios
         }
       }
       if (!__pyx_t_13) {
-        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1125, __pyx_L1_error)
+        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1133, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
         __Pyx_GOTREF(__pyx_t_3);
       } else {
-        __pyx_t_10 = PyTuple_New(1+1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1125, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_10);
-        __Pyx_GIVEREF(__pyx_t_13); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_13); __pyx_t_13 = NULL;
-        __Pyx_GIVEREF(__pyx_t_8);
-        PyTuple_SET_ITEM(__pyx_t_10, 0+1, __pyx_t_8);
-        __pyx_t_8 = 0;
-        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1125, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_3);
-        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+        #if CYTHON_FAST_PYCALL
+        if (PyFunction_Check(__pyx_t_7)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_13, __pyx_t_8};
+          __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1133, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
+          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        } else
+        #endif
+        #if CYTHON_FAST_PYCCALL
+        if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_13, __pyx_t_8};
+          __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1133, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
+          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        } else
+        #endif
+        {
+          __pyx_t_10 = PyTuple_New(1+1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1133, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_10);
+          __Pyx_GIVEREF(__pyx_t_13); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_13); __pyx_t_13 = NULL;
+          __Pyx_GIVEREF(__pyx_t_8);
+          PyTuple_SET_ITEM(__pyx_t_10, 0+1, __pyx_t_8);
+          __pyx_t_8 = 0;
+          __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1133, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+        }
       }
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1125, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1133, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_t_1 = __pyx_t_2;
       __pyx_L21_bool_binop_done:;
       if (__pyx_t_1) {
 
-        /* "adios_mpi.pyx":1126
+        /* "adios_mpi.pyx":1134
  *                 #if (key_ == os.path.dirname(name)) or ('/' + key_ == os.path.dirname(name)):
  *                 if name.startswith(key_) or name.startswith('/'+key_):
  *                     return group(self, key_)             # <<<<<<<<<<<<<<
@@ -17684,7 +18110,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_16__getitem__(struct __pyx_obj_9adios
  *         raise KeyError(key_)
  */
         __Pyx_XDECREF(__pyx_r);
-        __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1126, __pyx_L1_error)
+        __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1134, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
         __Pyx_INCREF(((PyObject *)__pyx_v_self));
         __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
@@ -17692,7 +18118,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_16__getitem__(struct __pyx_obj_9adios
         __Pyx_INCREF(__pyx_v_key_);
         __Pyx_GIVEREF(__pyx_v_key_);
         PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_key_);
-        __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_9adios_mpi_group), __pyx_t_3, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1126, __pyx_L1_error)
+        __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_9adios_mpi_group), __pyx_t_3, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1134, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
         __pyx_r = __pyx_t_7;
@@ -17701,7 +18127,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_16__getitem__(struct __pyx_obj_9adios
         __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
         goto __pyx_L0;
 
-        /* "adios_mpi.pyx":1125
+        /* "adios_mpi.pyx":1133
  *             for name in self.attrs.keys():
  *                 #if (key_ == os.path.dirname(name)) or ('/' + key_ == os.path.dirname(name)):
  *                 if name.startswith(key_) or name.startswith('/'+key_):             # <<<<<<<<<<<<<<
@@ -17710,7 +18136,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_16__getitem__(struct __pyx_obj_9adios
  */
       }
 
-      /* "adios_mpi.pyx":1123
+      /* "adios_mpi.pyx":1131
  *                     return group(self, key_)
  * 
  *             for name in self.attrs.keys():             # <<<<<<<<<<<<<<
@@ -17720,7 +18146,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_16__getitem__(struct __pyx_obj_9adios
     }
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-    /* "adios_mpi.pyx":1099
+    /* "adios_mpi.pyx":1107
  *             raise KeyError(varname)
  * 
  *         for key_ in varname:             # <<<<<<<<<<<<<<
@@ -17730,27 +18156,27 @@ static PyObject *__pyx_pf_9adios_mpi_4file_16__getitem__(struct __pyx_obj_9adios
   }
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "adios_mpi.pyx":1128
+  /* "adios_mpi.pyx":1136
  *                     return group(self, key_)
  * 
  *         raise KeyError(key_)             # <<<<<<<<<<<<<<
  * 
  * 
  */
-  if (unlikely(!__pyx_v_key_)) { __Pyx_RaiseUnboundLocalError("key_"); __PYX_ERR(0, 1128, __pyx_L1_error) }
-  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1128, __pyx_L1_error)
+  if (unlikely(!__pyx_v_key_)) { __Pyx_RaiseUnboundLocalError("key_"); __PYX_ERR(0, 1136, __pyx_L1_error) }
+  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1136, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_INCREF(__pyx_v_key_);
   __Pyx_GIVEREF(__pyx_v_key_);
   PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_key_);
-  __pyx_t_9 = __Pyx_PyObject_Call(__pyx_builtin_KeyError, __pyx_t_5, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1128, __pyx_L1_error)
+  __pyx_t_9 = __Pyx_PyObject_Call(__pyx_builtin_KeyError, __pyx_t_5, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1136, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_Raise(__pyx_t_9, 0, 0, 0);
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-  __PYX_ERR(0, 1128, __pyx_L1_error)
+  __PYX_ERR(0, 1136, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":1082
+  /* "adios_mpi.pyx":1090
  *         return val
  * 
  *     def __getitem__(self, varname):             # <<<<<<<<<<<<<<
@@ -17778,7 +18204,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_16__getitem__(struct __pyx_obj_9adios
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1131
+/* "adios_mpi.pyx":1139
  * 
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -17817,7 +18243,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_18__repr__(struct __pyx_obj_9adios_mp
   PyObject *__pyx_t_9 = NULL;
   __Pyx_RefNannySetupContext("__repr__", 0);
 
-  /* "adios_mpi.pyx":1133
+  /* "adios_mpi.pyx":1141
  *     def __repr__(self):
  *         """ Return string representation. """
  *         return ("AdiosFile (path=%r, nvars=%r, vars=%r, nattrs=%r, attrs=%r, "             # <<<<<<<<<<<<<<
@@ -17826,7 +18252,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_18__repr__(struct __pyx_obj_9adios_mp
  */
   __Pyx_XDECREF(__pyx_r);
 
-  /* "adios_mpi.pyx":1135
+  /* "adios_mpi.pyx":1143
  *         return ("AdiosFile (path=%r, nvars=%r, vars=%r, nattrs=%r, attrs=%r, "
  *                 "current_step=%r, last_step=%r, file_size=%r)") % \
  *                 (self.fp.path if self.fp != NULL else None,             # <<<<<<<<<<<<<<
@@ -17834,7 +18260,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_18__repr__(struct __pyx_obj_9adios_mp
  *                  self.vars.keys(),
  */
   if (((__pyx_v_self->fp != NULL) != 0)) {
-    __pyx_t_2 = __Pyx_PyBytes_FromString(__pyx_v_self->fp->path); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1135, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyBytes_FromString(__pyx_v_self->fp->path); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1143, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_t_1 = __pyx_t_2;
     __pyx_t_2 = 0;
@@ -17843,27 +18269,27 @@ static PyObject *__pyx_pf_9adios_mpi_4file_18__repr__(struct __pyx_obj_9adios_mp
     __pyx_t_1 = Py_None;
   }
 
-  /* "adios_mpi.pyx":1136
+  /* "adios_mpi.pyx":1144
  *                 "current_step=%r, last_step=%r, file_size=%r)") % \
  *                 (self.fp.path if self.fp != NULL else None,
  *                  self.nvars,             # <<<<<<<<<<<<<<
  *                  self.vars.keys(),
  *                  self.nattrs,
  */
-  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_self->nvars); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1136, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_self->nvars); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1144, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
 
-  /* "adios_mpi.pyx":1137
+  /* "adios_mpi.pyx":1145
  *                 (self.fp.path if self.fp != NULL else None,
  *                  self.nvars,
  *                  self.vars.keys(),             # <<<<<<<<<<<<<<
  *                  self.nattrs,
  *                  self.attrs.keys(),
  */
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1137, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1145, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_t_5 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
     __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
     if (likely(__pyx_t_5)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
@@ -17873,35 +18299,35 @@ static PyObject *__pyx_pf_9adios_mpi_4file_18__repr__(struct __pyx_obj_9adios_mp
     }
   }
   if (__pyx_t_5) {
-    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1137, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1145, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   } else {
-    __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1137, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1145, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "adios_mpi.pyx":1138
+  /* "adios_mpi.pyx":1146
  *                  self.nvars,
  *                  self.vars.keys(),
  *                  self.nattrs,             # <<<<<<<<<<<<<<
  *                  self.attrs.keys(),
  *                  self.current_step,
  */
-  __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_self->nattrs); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1138, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_self->nattrs); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1146, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
 
-  /* "adios_mpi.pyx":1139
+  /* "adios_mpi.pyx":1147
  *                  self.vars.keys(),
  *                  self.nattrs,
  *                  self.attrs.keys(),             # <<<<<<<<<<<<<<
  *                  self.current_step,
  *                  self.last_step,
  */
-  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1139, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1147, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __pyx_t_7 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_6))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
     __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
     if (likely(__pyx_t_7)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
@@ -17911,52 +18337,52 @@ static PyObject *__pyx_pf_9adios_mpi_4file_18__repr__(struct __pyx_obj_9adios_mp
     }
   }
   if (__pyx_t_7) {
-    __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1139, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1147, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   } else {
-    __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1139, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1147, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-  /* "adios_mpi.pyx":1140
+  /* "adios_mpi.pyx":1148
  *                  self.nattrs,
  *                  self.attrs.keys(),
  *                  self.current_step,             # <<<<<<<<<<<<<<
  *                  self.last_step,
  *                  self.file_size)
  */
-  __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_self->current_step); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1140, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_self->current_step); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1148, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
 
-  /* "adios_mpi.pyx":1141
+  /* "adios_mpi.pyx":1149
  *                  self.attrs.keys(),
  *                  self.current_step,
  *                  self.last_step,             # <<<<<<<<<<<<<<
  *                  self.file_size)
  * 
  */
-  __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_self->last_step); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1141, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_self->last_step); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1149, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
 
-  /* "adios_mpi.pyx":1142
+  /* "adios_mpi.pyx":1150
  *                  self.current_step,
  *                  self.last_step,
  *                  self.file_size)             # <<<<<<<<<<<<<<
  * 
  *     ## For access var/attr/group as an attribute
  */
-  __pyx_t_8 = __Pyx_PyInt_From_int(__pyx_v_self->file_size); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1142, __pyx_L1_error)
+  __pyx_t_8 = __Pyx_PyInt_From_int(__pyx_v_self->file_size); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1150, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
 
-  /* "adios_mpi.pyx":1135
+  /* "adios_mpi.pyx":1143
  *         return ("AdiosFile (path=%r, nvars=%r, vars=%r, nattrs=%r, attrs=%r, "
  *                 "current_step=%r, last_step=%r, file_size=%r)") % \
  *                 (self.fp.path if self.fp != NULL else None,             # <<<<<<<<<<<<<<
  *                  self.nvars,
  *                  self.vars.keys(),
  */
-  __pyx_t_9 = PyTuple_New(8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1135, __pyx_L1_error)
+  __pyx_t_9 = PyTuple_New(8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1143, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_1);
@@ -17983,21 +18409,21 @@ static PyObject *__pyx_pf_9adios_mpi_4file_18__repr__(struct __pyx_obj_9adios_mp
   __pyx_t_7 = 0;
   __pyx_t_8 = 0;
 
-  /* "adios_mpi.pyx":1134
+  /* "adios_mpi.pyx":1142
  *         """ Return string representation. """
  *         return ("AdiosFile (path=%r, nvars=%r, vars=%r, nattrs=%r, attrs=%r, "
  *                 "current_step=%r, last_step=%r, file_size=%r)") % \             # <<<<<<<<<<<<<<
  *                 (self.fp.path if self.fp != NULL else None,
  *                  self.nvars,
  */
-  __pyx_t_8 = __Pyx_PyString_Format(__pyx_kp_s_AdiosFile_path_r_nvars_r_vars_r, __pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1134, __pyx_L1_error)
+  __pyx_t_8 = __Pyx_PyString_Format(__pyx_kp_s_AdiosFile_path_r_nvars_r_vars_r, __pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1142, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
   __pyx_r = __pyx_t_8;
   __pyx_t_8 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":1131
+  /* "adios_mpi.pyx":1139
  * 
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -18024,7 +18450,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_18__repr__(struct __pyx_obj_9adios_mp
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1145
+/* "adios_mpi.pyx":1153
  * 
  *     ## For access var/attr/group as an attribute
  *     def __getattr__(self, varname):             # <<<<<<<<<<<<<<
@@ -18054,7 +18480,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_20__getattr__(struct __pyx_obj_9adios
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("__getattr__", 0);
 
-  /* "adios_mpi.pyx":1146
+  /* "adios_mpi.pyx":1154
  *     ## For access var/attr/group as an attribute
  *     def __getattr__(self, varname):
  *         return self.__getitem__(varname)             # <<<<<<<<<<<<<<
@@ -18062,10 +18488,10 @@ static PyObject *__pyx_pf_9adios_mpi_4file_20__getattr__(struct __pyx_obj_9adios
  *     ## To support ipython tab completion
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getitem); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1146, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getitem); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1154, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
     __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
     if (likely(__pyx_t_3)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
@@ -18075,25 +18501,43 @@ static PyObject *__pyx_pf_9adios_mpi_4file_20__getattr__(struct __pyx_obj_9adios
     }
   }
   if (!__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_varname); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1146, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_varname); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1154, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1146, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_4);
-    __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
-    __Pyx_INCREF(__pyx_v_varname);
-    __Pyx_GIVEREF(__pyx_v_varname);
-    PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_varname);
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1146, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_varname};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1154, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_varname};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1154, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1154, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+      __Pyx_INCREF(__pyx_v_varname);
+      __Pyx_GIVEREF(__pyx_v_varname);
+      PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_varname);
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1154, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    }
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":1145
+  /* "adios_mpi.pyx":1153
  * 
  *     ## For access var/attr/group as an attribute
  *     def __getattr__(self, varname):             # <<<<<<<<<<<<<<
@@ -18115,7 +18559,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_20__getattr__(struct __pyx_obj_9adios
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1149
+/* "adios_mpi.pyx":1157
  * 
  *     ## To support ipython tab completion
  *     def __dir__(self):             # <<<<<<<<<<<<<<
@@ -18150,31 +18594,31 @@ static PyObject *__pyx_pf_9adios_mpi_4file_22__dir__(struct __pyx_obj_9adios_mpi
   PyObject *__pyx_t_5 = NULL;
   __Pyx_RefNannySetupContext("__dir__", 0);
 
-  /* "adios_mpi.pyx":1150
+  /* "adios_mpi.pyx":1158
  *     ## To support ipython tab completion
  *     def __dir__(self):
  *         k0 = dir(type(self))             # <<<<<<<<<<<<<<
  *         ## Normalize to support var starting with '/'
  *         ## E.g., f['/var1'] == f.var1
  */
-  __pyx_t_1 = PyObject_Dir(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1150, __pyx_L1_error)
+  __pyx_t_1 = PyObject_Dir(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1158, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_k0 = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":1153
+  /* "adios_mpi.pyx":1161
  *         ## Normalize to support var starting with '/'
  *         ## E.g., f['/var1'] == f.var1
  *         k1 = normalize_key(self.vars.keys())             # <<<<<<<<<<<<<<
  *         k2 = normalize_key(self.attrs.keys())
  *         return k0 + k1 + k2
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_normalize_key); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1153, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_normalize_key); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1161, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1153, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1161, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_t_5 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
     __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
     if (likely(__pyx_t_5)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
@@ -18184,15 +18628,15 @@ static PyObject *__pyx_pf_9adios_mpi_4file_22__dir__(struct __pyx_obj_9adios_mpi
     }
   }
   if (__pyx_t_5) {
-    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1153, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1161, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   } else {
-    __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1153, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1161, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_t_4 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
     __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
     if (likely(__pyx_t_4)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
@@ -18202,37 +18646,57 @@ static PyObject *__pyx_pf_9adios_mpi_4file_22__dir__(struct __pyx_obj_9adios_mpi
     }
   }
   if (!__pyx_t_4) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1153, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1161, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1153, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_5);
-    __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); __pyx_t_4 = NULL;
-    __Pyx_GIVEREF(__pyx_t_3);
-    PyTuple_SET_ITEM(__pyx_t_5, 0+1, __pyx_t_3);
-    __pyx_t_3 = 0;
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1153, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_t_3};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1161, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_t_3};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1161, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    } else
+    #endif
+    {
+      __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1161, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_5);
+      __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); __pyx_t_4 = NULL;
+      __Pyx_GIVEREF(__pyx_t_3);
+      PyTuple_SET_ITEM(__pyx_t_5, 0+1, __pyx_t_3);
+      __pyx_t_3 = 0;
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1161, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    }
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_v_k1 = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":1154
+  /* "adios_mpi.pyx":1162
  *         ## E.g., f['/var1'] == f.var1
  *         k1 = normalize_key(self.vars.keys())
  *         k2 = normalize_key(self.attrs.keys())             # <<<<<<<<<<<<<<
  *         return k0 + k1 + k2
  * 
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_normalize_key); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1154, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_normalize_key); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1162, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1154, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1162, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_4 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
     __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
     if (likely(__pyx_t_4)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -18242,15 +18706,15 @@ static PyObject *__pyx_pf_9adios_mpi_4file_22__dir__(struct __pyx_obj_9adios_mpi
     }
   }
   if (__pyx_t_4) {
-    __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1154, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1162, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   } else {
-    __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1154, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1162, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
     __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
     if (likely(__pyx_t_3)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
@@ -18260,25 +18724,45 @@ static PyObject *__pyx_pf_9adios_mpi_4file_22__dir__(struct __pyx_obj_9adios_mpi
     }
   }
   if (!__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1154, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1162, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1154, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_4);
-    __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
-    __Pyx_GIVEREF(__pyx_t_5);
-    PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_t_5);
-    __pyx_t_5 = 0;
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1154, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_t_5};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1162, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_t_5};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1162, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    } else
+    #endif
+    {
+      __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1162, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+      __Pyx_GIVEREF(__pyx_t_5);
+      PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_t_5);
+      __pyx_t_5 = 0;
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1162, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    }
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_v_k2 = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":1155
+  /* "adios_mpi.pyx":1163
  *         k1 = normalize_key(self.vars.keys())
  *         k2 = normalize_key(self.attrs.keys())
  *         return k0 + k1 + k2             # <<<<<<<<<<<<<<
@@ -18286,16 +18770,16 @@ static PyObject *__pyx_pf_9adios_mpi_4file_22__dir__(struct __pyx_obj_9adios_mpi
  *     ## Require for dictionary key completion
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyNumber_Add(__pyx_v_k0, __pyx_v_k1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1155, __pyx_L1_error)
+  __pyx_t_1 = PyNumber_Add(__pyx_v_k0, __pyx_v_k1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1163, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_v_k2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1155, __pyx_L1_error)
+  __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_v_k2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1163, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":1149
+  /* "adios_mpi.pyx":1157
  * 
  *     ## To support ipython tab completion
  *     def __dir__(self):             # <<<<<<<<<<<<<<
@@ -18321,7 +18805,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_22__dir__(struct __pyx_obj_9adios_mpi
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1158
+/* "adios_mpi.pyx":1166
  * 
  *     ## Require for dictionary key completion
  *     def keys(self):             # <<<<<<<<<<<<<<
@@ -18352,7 +18836,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_24keys(struct __pyx_obj_9adios_mpi_fi
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("keys", 0);
 
-  /* "adios_mpi.pyx":1159
+  /* "adios_mpi.pyx":1167
  *     ## Require for dictionary key completion
  *     def keys(self):
  *         return self.vars.keys() + self.attrs.keys()             # <<<<<<<<<<<<<<
@@ -18360,10 +18844,10 @@ static PyObject *__pyx_pf_9adios_mpi_4file_24keys(struct __pyx_obj_9adios_mpi_fi
  *     def is_open(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1159, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1167, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
     __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
     if (likely(__pyx_t_3)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
@@ -18373,17 +18857,17 @@ static PyObject *__pyx_pf_9adios_mpi_4file_24keys(struct __pyx_obj_9adios_mpi_fi
     }
   }
   if (__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1159, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1167, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   } else {
-    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1159, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1167, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1159, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1167, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_4 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
     __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
     if (likely(__pyx_t_4)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -18393,14 +18877,14 @@ static PyObject *__pyx_pf_9adios_mpi_4file_24keys(struct __pyx_obj_9adios_mpi_fi
     }
   }
   if (__pyx_t_4) {
-    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1159, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1167, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   } else {
-    __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1159, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1167, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1159, __pyx_L1_error)
+  __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1167, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -18408,7 +18892,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_24keys(struct __pyx_obj_9adios_mpi_fi
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":1158
+  /* "adios_mpi.pyx":1166
  * 
  *     ## Require for dictionary key completion
  *     def keys(self):             # <<<<<<<<<<<<<<
@@ -18430,7 +18914,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_24keys(struct __pyx_obj_9adios_mpi_fi
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1161
+/* "adios_mpi.pyx":1169
  *         return self.vars.keys() + self.attrs.keys()
  * 
  *     def is_open(self):             # <<<<<<<<<<<<<<
@@ -18458,7 +18942,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_26is_open(struct __pyx_obj_9adios_mpi
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("is_open", 0);
 
-  /* "adios_mpi.pyx":1163
+  /* "adios_mpi.pyx":1171
  *     def is_open(self):
  *         """ Check whether file is open or closed """
  *         return True if self.fp != NULL else False             # <<<<<<<<<<<<<<
@@ -18477,7 +18961,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_26is_open(struct __pyx_obj_9adios_mpi
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":1161
+  /* "adios_mpi.pyx":1169
  *         return self.vars.keys() + self.attrs.keys()
  * 
  *     def is_open(self):             # <<<<<<<<<<<<<<
@@ -18492,7 +18976,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_26is_open(struct __pyx_obj_9adios_mpi
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1166
+/* "adios_mpi.pyx":1174
  * 
  *     ## for py2
  *     def __nonzero__(self):             # <<<<<<<<<<<<<<
@@ -18522,17 +19006,17 @@ static int __pyx_pf_9adios_mpi_4file_28__nonzero__(struct __pyx_obj_9adios_mpi_f
   int __pyx_t_4;
   __Pyx_RefNannySetupContext("__nonzero__", 0);
 
-  /* "adios_mpi.pyx":1167
+  /* "adios_mpi.pyx":1175
  *     ## for py2
  *     def __nonzero__(self):
  *         return self.is_open()             # <<<<<<<<<<<<<<
  * 
  *     ## for py3
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_is_open); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1167, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_is_open); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1175, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
     __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
     if (likely(__pyx_t_3)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
@@ -18542,19 +19026,19 @@ static int __pyx_pf_9adios_mpi_4file_28__nonzero__(struct __pyx_obj_9adios_mpi_f
     }
   }
   if (__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1167, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1175, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   } else {
-    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1167, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1175, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1167, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1175, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_4;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":1166
+  /* "adios_mpi.pyx":1174
  * 
  *     ## for py2
  *     def __nonzero__(self):             # <<<<<<<<<<<<<<
@@ -18574,7 +19058,7 @@ static int __pyx_pf_9adios_mpi_4file_28__nonzero__(struct __pyx_obj_9adios_mpi_f
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1170
+/* "adios_mpi.pyx":1178
  * 
  *     ## for py3
  *     def __bool__(self):             # <<<<<<<<<<<<<<
@@ -18604,17 +19088,17 @@ static int __pyx_pf_9adios_mpi_4file_30__bool__(struct __pyx_obj_9adios_mpi_file
   int __pyx_t_4;
   __Pyx_RefNannySetupContext("__bool__", 0);
 
-  /* "adios_mpi.pyx":1172
+  /* "adios_mpi.pyx":1180
  *     def __bool__(self):
  *         """ Check whether file is open or closed """
  *         return self.is_open()             # <<<<<<<<<<<<<<
  * 
  *     def dirs(self):
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_is_open); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1172, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_is_open); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1180, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
     __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
     if (likely(__pyx_t_3)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
@@ -18624,19 +19108,19 @@ static int __pyx_pf_9adios_mpi_4file_30__bool__(struct __pyx_obj_9adios_mpi_file
     }
   }
   if (__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1172, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1180, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   } else {
-    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1172, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1180, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1172, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1180, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_4;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":1170
+  /* "adios_mpi.pyx":1178
  * 
  *     ## for py3
  *     def __bool__(self):             # <<<<<<<<<<<<<<
@@ -18656,7 +19140,7 @@ static int __pyx_pf_9adios_mpi_4file_30__bool__(struct __pyx_obj_9adios_mpi_file
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1174
+/* "adios_mpi.pyx":1182
  *         return self.is_open()
  * 
  *     def dirs(self):             # <<<<<<<<<<<<<<
@@ -18694,29 +19178,29 @@ static PyObject *__pyx_pf_9adios_mpi_4file_32dirs(struct __pyx_obj_9adios_mpi_fi
   int __pyx_t_9;
   __Pyx_RefNannySetupContext("dirs", 0);
 
-  /* "adios_mpi.pyx":1176
+  /* "adios_mpi.pyx":1184
  *     def dirs(self):
  *         """ Return child dir names """
  *         s = set()             # <<<<<<<<<<<<<<
  *         for k in self.vars.keys():
  *             if k.startswith('/'): k = k[1:]
  */
-  __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1176, __pyx_L1_error)
+  __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1184, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_s = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":1177
+  /* "adios_mpi.pyx":1185
  *         """ Return child dir names """
  *         s = set()
  *         for k in self.vars.keys():             # <<<<<<<<<<<<<<
  *             if k.startswith('/'): k = k[1:]
  *             s.add(os.path.dirname(k).split('/')[0])
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1177, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1185, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
     __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
     if (likely(__pyx_t_3)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
@@ -18726,10 +19210,10 @@ static PyObject *__pyx_pf_9adios_mpi_4file_32dirs(struct __pyx_obj_9adios_mpi_fi
     }
   }
   if (__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1177, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1185, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   } else {
-    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1177, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1185, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -18737,27 +19221,27 @@ static PyObject *__pyx_pf_9adios_mpi_4file_32dirs(struct __pyx_obj_9adios_mpi_fi
     __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __pyx_t_4 = 0;
     __pyx_t_5 = NULL;
   } else {
-    __pyx_t_4 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1177, __pyx_L1_error)
+    __pyx_t_4 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1185, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_5 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1177, __pyx_L1_error)
+    __pyx_t_5 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1185, __pyx_L1_error)
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   for (;;) {
     if (likely(!__pyx_t_5)) {
       if (likely(PyList_CheckExact(__pyx_t_2))) {
         if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_2)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1177, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1185, __pyx_L1_error)
         #else
-        __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1177, __pyx_L1_error)
+        __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1185, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_1);
         #endif
       } else {
         if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1177, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1185, __pyx_L1_error)
         #else
-        __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1177, __pyx_L1_error)
+        __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1185, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_1);
         #endif
       }
@@ -18767,7 +19251,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_32dirs(struct __pyx_obj_9adios_mpi_fi
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
           if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-          else __PYX_ERR(0, 1177, __pyx_L1_error)
+          else __PYX_ERR(0, 1185, __pyx_L1_error)
         }
         break;
       }
@@ -18776,44 +19260,44 @@ static PyObject *__pyx_pf_9adios_mpi_4file_32dirs(struct __pyx_obj_9adios_mpi_fi
     __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "adios_mpi.pyx":1178
+    /* "adios_mpi.pyx":1186
  *         s = set()
  *         for k in self.vars.keys():
  *             if k.startswith('/'): k = k[1:]             # <<<<<<<<<<<<<<
  *             s.add(os.path.dirname(k).split('/')[0])
  *         for k in self.attrs.keys():
  */
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_k, __pyx_n_s_startswith); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1178, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_k, __pyx_n_s_startswith); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1186, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__23, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1178, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__23, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1186, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 1178, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 1186, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     if (__pyx_t_6) {
-      __pyx_t_3 = __Pyx_PyObject_GetSlice(__pyx_v_k, 1, 0, NULL, NULL, &__pyx_slice__24, 1, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1178, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_GetSlice(__pyx_v_k, 1, 0, NULL, NULL, &__pyx_slice__24, 1, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1186, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF_SET(__pyx_v_k, __pyx_t_3);
       __pyx_t_3 = 0;
     }
 
-    /* "adios_mpi.pyx":1179
+    /* "adios_mpi.pyx":1187
  *         for k in self.vars.keys():
  *             if k.startswith('/'): k = k[1:]
  *             s.add(os.path.dirname(k).split('/')[0])             # <<<<<<<<<<<<<<
  *         for k in self.attrs.keys():
  *             if k.startswith('/'): k = k[1:]
  */
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1179, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1187, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_path); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1179, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_path); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1187, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_dirname); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1179, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_dirname); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1187, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __pyx_t_7 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_1))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
       __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1);
       if (likely(__pyx_t_7)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
@@ -18823,33 +19307,51 @@ static PyObject *__pyx_pf_9adios_mpi_4file_32dirs(struct __pyx_obj_9adios_mpi_fi
       }
     }
     if (!__pyx_t_7) {
-      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_k); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1179, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_k); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1187, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
     } else {
-      __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1179, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_8);
-      __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_7); __pyx_t_7 = NULL;
-      __Pyx_INCREF(__pyx_v_k);
-      __Pyx_GIVEREF(__pyx_v_k);
-      PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_v_k);
-      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1179, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_3);
-      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_1)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_7, __pyx_v_k};
+        __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1187, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+        __Pyx_GOTREF(__pyx_t_3);
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_7, __pyx_v_k};
+        __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1187, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+        __Pyx_GOTREF(__pyx_t_3);
+      } else
+      #endif
+      {
+        __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1187, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_8);
+        __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_7); __pyx_t_7 = NULL;
+        __Pyx_INCREF(__pyx_v_k);
+        __Pyx_GIVEREF(__pyx_v_k);
+        PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_v_k);
+        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1187, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_3);
+        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+      }
     }
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_split); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1179, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_split); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1187, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__25, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1179, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__25, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1187, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_3, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1179, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_3, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1187, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_9 = PySet_Add(__pyx_v_s, __pyx_t_1); if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 1179, __pyx_L1_error)
+    __pyx_t_9 = PySet_Add(__pyx_v_s, __pyx_t_1); if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 1187, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-    /* "adios_mpi.pyx":1177
+    /* "adios_mpi.pyx":1185
  *         """ Return child dir names """
  *         s = set()
  *         for k in self.vars.keys():             # <<<<<<<<<<<<<<
@@ -18859,17 +19361,17 @@ static PyObject *__pyx_pf_9adios_mpi_4file_32dirs(struct __pyx_obj_9adios_mpi_fi
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "adios_mpi.pyx":1180
+  /* "adios_mpi.pyx":1188
  *             if k.startswith('/'): k = k[1:]
  *             s.add(os.path.dirname(k).split('/')[0])
  *         for k in self.attrs.keys():             # <<<<<<<<<<<<<<
  *             if k.startswith('/'): k = k[1:]
  *             s.add(os.path.dirname(k).split('/')[0])
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1180, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1188, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_1))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
     __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
     if (likely(__pyx_t_3)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
@@ -18879,10 +19381,10 @@ static PyObject *__pyx_pf_9adios_mpi_4file_32dirs(struct __pyx_obj_9adios_mpi_fi
     }
   }
   if (__pyx_t_3) {
-    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1180, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1188, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   } else {
-    __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1180, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1188, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -18890,27 +19392,27 @@ static PyObject *__pyx_pf_9adios_mpi_4file_32dirs(struct __pyx_obj_9adios_mpi_fi
     __pyx_t_1 = __pyx_t_2; __Pyx_INCREF(__pyx_t_1); __pyx_t_4 = 0;
     __pyx_t_5 = NULL;
   } else {
-    __pyx_t_4 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1180, __pyx_L1_error)
+    __pyx_t_4 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1188, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1180, __pyx_L1_error)
+    __pyx_t_5 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1188, __pyx_L1_error)
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   for (;;) {
     if (likely(!__pyx_t_5)) {
       if (likely(PyList_CheckExact(__pyx_t_1))) {
         if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_1)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1180, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1188, __pyx_L1_error)
         #else
-        __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1180, __pyx_L1_error)
+        __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1188, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_2);
         #endif
       } else {
         if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1180, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1188, __pyx_L1_error)
         #else
-        __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1180, __pyx_L1_error)
+        __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1188, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_2);
         #endif
       }
@@ -18920,7 +19422,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_32dirs(struct __pyx_obj_9adios_mpi_fi
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
           if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-          else __PYX_ERR(0, 1180, __pyx_L1_error)
+          else __PYX_ERR(0, 1188, __pyx_L1_error)
         }
         break;
       }
@@ -18929,44 +19431,44 @@ static PyObject *__pyx_pf_9adios_mpi_4file_32dirs(struct __pyx_obj_9adios_mpi_fi
     __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_2);
     __pyx_t_2 = 0;
 
-    /* "adios_mpi.pyx":1181
+    /* "adios_mpi.pyx":1189
  *             s.add(os.path.dirname(k).split('/')[0])
  *         for k in self.attrs.keys():
  *             if k.startswith('/'): k = k[1:]             # <<<<<<<<<<<<<<
  *             s.add(os.path.dirname(k).split('/')[0])
  *         return list(s-set(['']))
  */
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_k, __pyx_n_s_startswith); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1181, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_k, __pyx_n_s_startswith); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1189, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__26, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1181, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__26, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1189, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 1181, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 1189, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     if (__pyx_t_6) {
-      __pyx_t_3 = __Pyx_PyObject_GetSlice(__pyx_v_k, 1, 0, NULL, NULL, &__pyx_slice__27, 1, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1181, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_GetSlice(__pyx_v_k, 1, 0, NULL, NULL, &__pyx_slice__27, 1, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1189, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF_SET(__pyx_v_k, __pyx_t_3);
       __pyx_t_3 = 0;
     }
 
-    /* "adios_mpi.pyx":1182
+    /* "adios_mpi.pyx":1190
  *         for k in self.attrs.keys():
  *             if k.startswith('/'): k = k[1:]
  *             s.add(os.path.dirname(k).split('/')[0])             # <<<<<<<<<<<<<<
  *         return list(s-set(['']))
  * 
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1182, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1190, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_path); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1182, __pyx_L1_error)
+    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_path); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1190, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_dirname); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1182, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_dirname); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1190, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     __pyx_t_8 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
       __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_2);
       if (likely(__pyx_t_8)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
@@ -18976,33 +19478,51 @@ static PyObject *__pyx_pf_9adios_mpi_4file_32dirs(struct __pyx_obj_9adios_mpi_fi
       }
     }
     if (!__pyx_t_8) {
-      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_k); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1182, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_k); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1190, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
     } else {
-      __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1182, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_7);
-      __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_8); __pyx_t_8 = NULL;
-      __Pyx_INCREF(__pyx_v_k);
-      __Pyx_GIVEREF(__pyx_v_k);
-      PyTuple_SET_ITEM(__pyx_t_7, 0+1, __pyx_v_k);
-      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1182, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_3);
-      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_2)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_v_k};
+        __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1190, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+        __Pyx_GOTREF(__pyx_t_3);
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_v_k};
+        __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1190, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+        __Pyx_GOTREF(__pyx_t_3);
+      } else
+      #endif
+      {
+        __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1190, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_7);
+        __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_8); __pyx_t_8 = NULL;
+        __Pyx_INCREF(__pyx_v_k);
+        __Pyx_GIVEREF(__pyx_v_k);
+        PyTuple_SET_ITEM(__pyx_t_7, 0+1, __pyx_v_k);
+        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1190, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_3);
+        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+      }
     }
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_split); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1182, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_split); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1190, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__28, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1182, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__28, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1190, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_3, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1182, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_3, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1190, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_9 = PySet_Add(__pyx_v_s, __pyx_t_2); if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 1182, __pyx_L1_error)
+    __pyx_t_9 = PySet_Add(__pyx_v_s, __pyx_t_2); if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 1190, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-    /* "adios_mpi.pyx":1180
+    /* "adios_mpi.pyx":1188
  *             if k.startswith('/'): k = k[1:]
  *             s.add(os.path.dirname(k).split('/')[0])
  *         for k in self.attrs.keys():             # <<<<<<<<<<<<<<
@@ -19012,7 +19532,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_32dirs(struct __pyx_obj_9adios_mpi_fi
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":1183
+  /* "adios_mpi.pyx":1191
  *             if k.startswith('/'): k = k[1:]
  *             s.add(os.path.dirname(k).split('/')[0])
  *         return list(s-set(['']))             # <<<<<<<<<<<<<<
@@ -19020,20 +19540,20 @@ static PyObject *__pyx_pf_9adios_mpi_4file_32dirs(struct __pyx_obj_9adios_mpi_fi
  * cdef class blockinfo(object):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1183, __pyx_L1_error)
+  __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1191, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PySet_Add(__pyx_t_1, __pyx_kp_s__10) < 0) __PYX_ERR(0, 1183, __pyx_L1_error)
-  __pyx_t_2 = PyNumber_Subtract(__pyx_v_s, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1183, __pyx_L1_error)
+  if (PySet_Add(__pyx_t_1, __pyx_kp_s__10) < 0) __PYX_ERR(0, 1191, __pyx_L1_error)
+  __pyx_t_2 = PyNumber_Subtract(__pyx_v_s, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1191, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PySequence_List(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1183, __pyx_L1_error)
+  __pyx_t_1 = PySequence_List(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1191, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":1174
+  /* "adios_mpi.pyx":1182
  *         return self.is_open()
  * 
  *     def dirs(self):             # <<<<<<<<<<<<<<
@@ -19058,7 +19578,7 @@ static PyObject *__pyx_pf_9adios_mpi_4file_32dirs(struct __pyx_obj_9adios_mpi_fi
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":944
+/* "adios_mpi.pyx":952
  * 
  *     ## Public Memeber
  *     cpdef public softdict vars             # <<<<<<<<<<<<<<
@@ -19113,7 +19633,7 @@ static int __pyx_pf_9adios_mpi_4file_4vars_2__set__(struct __pyx_obj_9adios_mpi_
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__set__", 0);
-  if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_ptype_9adios_mpi_softdict))))) __PYX_ERR(0, 944, __pyx_L1_error)
+  if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_ptype_9adios_mpi_softdict))))) __PYX_ERR(0, 952, __pyx_L1_error)
   __pyx_t_1 = __pyx_v_value;
   __Pyx_INCREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
@@ -19163,7 +19683,7 @@ static int __pyx_pf_9adios_mpi_4file_4vars_4__del__(struct __pyx_obj_9adios_mpi_
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":945
+/* "adios_mpi.pyx":953
  *     ## Public Memeber
  *     cpdef public softdict vars
  *     cpdef public softdict attrs             # <<<<<<<<<<<<<<
@@ -19218,7 +19738,7 @@ static int __pyx_pf_9adios_mpi_4file_5attrs_2__set__(struct __pyx_obj_9adios_mpi
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__set__", 0);
-  if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_ptype_9adios_mpi_softdict))))) __PYX_ERR(0, 945, __pyx_L1_error)
+  if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_ptype_9adios_mpi_softdict))))) __PYX_ERR(0, 953, __pyx_L1_error)
   __pyx_t_1 = __pyx_v_value;
   __Pyx_INCREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
@@ -19268,7 +19788,7 @@ static int __pyx_pf_9adios_mpi_4file_5attrs_4__del__(struct __pyx_obj_9adios_mpi
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":946
+/* "adios_mpi.pyx":954
  *     cpdef public softdict vars
  *     cpdef public softdict attrs
  *     cpdef public var             # <<<<<<<<<<<<<<
@@ -19363,7 +19883,7 @@ static int __pyx_pf_9adios_mpi_4file_3var_4__del__(struct __pyx_obj_9adios_mpi_f
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":947
+/* "adios_mpi.pyx":955
  *     cpdef public softdict attrs
  *     cpdef public var
  *     cpdef public attr             # <<<<<<<<<<<<<<
@@ -19458,7 +19978,7 @@ static int __pyx_pf_9adios_mpi_4file_4attr_4__del__(struct __pyx_obj_9adios_mpi_
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1192
+/* "adios_mpi.pyx":1200
  * 
  *     property start:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -19484,7 +20004,7 @@ static PyObject *__pyx_pf_9adios_mpi_9blockinfo_5start___get__(struct __pyx_obj_
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios_mpi.pyx":1193
+  /* "adios_mpi.pyx":1201
  *     property start:
  *         def __get__(self):
  *             return self.start             # <<<<<<<<<<<<<<
@@ -19496,7 +20016,7 @@ static PyObject *__pyx_pf_9adios_mpi_9blockinfo_5start___get__(struct __pyx_obj_
   __pyx_r = __pyx_v_self->start;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":1192
+  /* "adios_mpi.pyx":1200
  * 
  *     property start:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -19511,7 +20031,7 @@ static PyObject *__pyx_pf_9adios_mpi_9blockinfo_5start___get__(struct __pyx_obj_
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1196
+/* "adios_mpi.pyx":1204
  * 
  *     property count:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -19537,7 +20057,7 @@ static PyObject *__pyx_pf_9adios_mpi_9blockinfo_5count___get__(struct __pyx_obj_
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios_mpi.pyx":1197
+  /* "adios_mpi.pyx":1205
  *     property count:
  *         def __get__(self):
  *             return self.count             # <<<<<<<<<<<<<<
@@ -19549,7 +20069,7 @@ static PyObject *__pyx_pf_9adios_mpi_9blockinfo_5count___get__(struct __pyx_obj_
   __pyx_r = __pyx_v_self->count;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":1196
+  /* "adios_mpi.pyx":1204
  * 
  *     property count:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -19564,7 +20084,7 @@ static PyObject *__pyx_pf_9adios_mpi_9blockinfo_5count___get__(struct __pyx_obj_
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1200
+/* "adios_mpi.pyx":1208
  * 
  *     property process_id:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -19591,7 +20111,7 @@ static PyObject *__pyx_pf_9adios_mpi_9blockinfo_10process_id___get__(struct __py
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios_mpi.pyx":1201
+  /* "adios_mpi.pyx":1209
  *     property process_id:
  *         def __get__(self):
  *             return self.process_id             # <<<<<<<<<<<<<<
@@ -19599,13 +20119,13 @@ static PyObject *__pyx_pf_9adios_mpi_9blockinfo_10process_id___get__(struct __py
  *     property time_index:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->process_id); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1201, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->process_id); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1209, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":1200
+  /* "adios_mpi.pyx":1208
  * 
  *     property process_id:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -19624,7 +20144,7 @@ static PyObject *__pyx_pf_9adios_mpi_9blockinfo_10process_id___get__(struct __py
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1204
+/* "adios_mpi.pyx":1212
  * 
  *     property time_index:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -19651,7 +20171,7 @@ static PyObject *__pyx_pf_9adios_mpi_9blockinfo_10time_index___get__(struct __py
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios_mpi.pyx":1205
+  /* "adios_mpi.pyx":1213
  *     property time_index:
  *         def __get__(self):
  *             return self.time_index             # <<<<<<<<<<<<<<
@@ -19659,13 +20179,13 @@ static PyObject *__pyx_pf_9adios_mpi_9blockinfo_10time_index___get__(struct __py
  *     def __init__(self, tuple start, tuple count, int process_id, int time_index):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->time_index); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1205, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->time_index); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1213, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":1204
+  /* "adios_mpi.pyx":1212
  * 
  *     property time_index:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -19684,7 +20204,7 @@ static PyObject *__pyx_pf_9adios_mpi_9blockinfo_10time_index___get__(struct __py
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1207
+/* "adios_mpi.pyx":1215
  *             return self.time_index
  * 
  *     def __init__(self, tuple start, tuple count, int process_id, int time_index):             # <<<<<<<<<<<<<<
@@ -19724,21 +20244,21 @@ static int __pyx_pw_9adios_mpi_9blockinfo_1__init__(PyObject *__pyx_v_self, PyOb
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_count)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__init__", 1, 4, 4, 1); __PYX_ERR(0, 1207, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__init__", 1, 4, 4, 1); __PYX_ERR(0, 1215, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_process_id)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__init__", 1, 4, 4, 2); __PYX_ERR(0, 1207, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__init__", 1, 4, 4, 2); __PYX_ERR(0, 1215, __pyx_L3_error)
         }
         case  3:
         if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_time_index)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__init__", 1, 4, 4, 3); __PYX_ERR(0, 1207, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__init__", 1, 4, 4, 3); __PYX_ERR(0, 1215, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 1207, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 1215, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
       goto __pyx_L5_argtuple_error;
@@ -19750,19 +20270,19 @@ static int __pyx_pw_9adios_mpi_9blockinfo_1__init__(PyObject *__pyx_v_self, PyOb
     }
     __pyx_v_start = ((PyObject*)values[0]);
     __pyx_v_count = ((PyObject*)values[1]);
-    __pyx_v_process_id = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_process_id == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1207, __pyx_L3_error)
-    __pyx_v_time_index = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_time_index == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1207, __pyx_L3_error)
+    __pyx_v_process_id = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_process_id == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1215, __pyx_L3_error)
+    __pyx_v_time_index = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_time_index == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1215, __pyx_L3_error)
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__init__", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1207, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__init__", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1215, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.blockinfo.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_start), (&PyTuple_Type), 1, "start", 1))) __PYX_ERR(0, 1207, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_count), (&PyTuple_Type), 1, "count", 1))) __PYX_ERR(0, 1207, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_start), (&PyTuple_Type), 1, "start", 1))) __PYX_ERR(0, 1215, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_count), (&PyTuple_Type), 1, "count", 1))) __PYX_ERR(0, 1215, __pyx_L1_error)
   __pyx_r = __pyx_pf_9adios_mpi_9blockinfo___init__(((struct __pyx_obj_9adios_mpi_blockinfo *)__pyx_v_self), __pyx_v_start, __pyx_v_count, __pyx_v_process_id, __pyx_v_time_index);
 
   /* function exit code */
@@ -19779,7 +20299,7 @@ static int __pyx_pf_9adios_mpi_9blockinfo___init__(struct __pyx_obj_9adios_mpi_b
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__init__", 0);
 
-  /* "adios_mpi.pyx":1208
+  /* "adios_mpi.pyx":1216
  * 
  *     def __init__(self, tuple start, tuple count, int process_id, int time_index):
  *         self.start = start             # <<<<<<<<<<<<<<
@@ -19792,7 +20312,7 @@ static int __pyx_pf_9adios_mpi_9blockinfo___init__(struct __pyx_obj_9adios_mpi_b
   __Pyx_DECREF(__pyx_v_self->start);
   __pyx_v_self->start = __pyx_v_start;
 
-  /* "adios_mpi.pyx":1209
+  /* "adios_mpi.pyx":1217
  *     def __init__(self, tuple start, tuple count, int process_id, int time_index):
  *         self.start = start
  *         self.count = count             # <<<<<<<<<<<<<<
@@ -19805,7 +20325,7 @@ static int __pyx_pf_9adios_mpi_9blockinfo___init__(struct __pyx_obj_9adios_mpi_b
   __Pyx_DECREF(__pyx_v_self->count);
   __pyx_v_self->count = __pyx_v_count;
 
-  /* "adios_mpi.pyx":1210
+  /* "adios_mpi.pyx":1218
  *         self.start = start
  *         self.count = count
  *         self.process_id = process_id             # <<<<<<<<<<<<<<
@@ -19814,7 +20334,7 @@ static int __pyx_pf_9adios_mpi_9blockinfo___init__(struct __pyx_obj_9adios_mpi_b
  */
   __pyx_v_self->process_id = __pyx_v_process_id;
 
-  /* "adios_mpi.pyx":1211
+  /* "adios_mpi.pyx":1219
  *         self.count = count
  *         self.process_id = process_id
  *         self.time_index = time_index             # <<<<<<<<<<<<<<
@@ -19823,7 +20343,7 @@ static int __pyx_pf_9adios_mpi_9blockinfo___init__(struct __pyx_obj_9adios_mpi_b
  */
   __pyx_v_self->time_index = __pyx_v_time_index;
 
-  /* "adios_mpi.pyx":1207
+  /* "adios_mpi.pyx":1215
  *             return self.time_index
  * 
  *     def __init__(self, tuple start, tuple count, int process_id, int time_index):             # <<<<<<<<<<<<<<
@@ -19837,7 +20357,7 @@ static int __pyx_pf_9adios_mpi_9blockinfo___init__(struct __pyx_obj_9adios_mpi_b
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1213
+/* "adios_mpi.pyx":1221
  *         self.time_index = time_index
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -19866,7 +20386,7 @@ static PyObject *__pyx_pf_9adios_mpi_9blockinfo_2__repr__(struct __pyx_obj_9adio
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__repr__", 0);
 
-  /* "adios_mpi.pyx":1214
+  /* "adios_mpi.pyx":1222
  * 
  *     def __repr__(self):
  *         return "AdiosBlockinfo (process_id=%r, time_index=%r, start=%r, count=%r)" % \             # <<<<<<<<<<<<<<
@@ -19875,34 +20395,34 @@ static PyObject *__pyx_pf_9adios_mpi_9blockinfo_2__repr__(struct __pyx_obj_9adio
  */
   __Pyx_XDECREF(__pyx_r);
 
-  /* "adios_mpi.pyx":1215
+  /* "adios_mpi.pyx":1223
  *     def __repr__(self):
  *         return "AdiosBlockinfo (process_id=%r, time_index=%r, start=%r, count=%r)" % \
  *                (self.process_id,             # <<<<<<<<<<<<<<
  *                 self.time_index,
  *                 self.start,
  */
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->process_id); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1215, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->process_id); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1223, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
 
-  /* "adios_mpi.pyx":1216
+  /* "adios_mpi.pyx":1224
  *         return "AdiosBlockinfo (process_id=%r, time_index=%r, start=%r, count=%r)" % \
  *                (self.process_id,
  *                 self.time_index,             # <<<<<<<<<<<<<<
  *                 self.start,
  *                 self.count)
  */
-  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_self->time_index); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1216, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_self->time_index); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1224, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
 
-  /* "adios_mpi.pyx":1215
+  /* "adios_mpi.pyx":1223
  *     def __repr__(self):
  *         return "AdiosBlockinfo (process_id=%r, time_index=%r, start=%r, count=%r)" % \
  *                (self.process_id,             # <<<<<<<<<<<<<<
  *                 self.time_index,
  *                 self.start,
  */
-  __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1215, __pyx_L1_error)
+  __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1223, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
@@ -19917,21 +20437,21 @@ static PyObject *__pyx_pf_9adios_mpi_9blockinfo_2__repr__(struct __pyx_obj_9adio
   __pyx_t_1 = 0;
   __pyx_t_2 = 0;
 
-  /* "adios_mpi.pyx":1214
+  /* "adios_mpi.pyx":1222
  * 
  *     def __repr__(self):
  *         return "AdiosBlockinfo (process_id=%r, time_index=%r, start=%r, count=%r)" % \             # <<<<<<<<<<<<<<
  *                (self.process_id,
  *                 self.time_index,
  */
-  __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_AdiosBlockinfo_process_id_r_time, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1214, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_AdiosBlockinfo_process_id_r_time, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1222, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":1213
+  /* "adios_mpi.pyx":1221
  *         self.time_index = time_index
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -19952,7 +20472,7 @@ static PyObject *__pyx_pf_9adios_mpi_9blockinfo_2__repr__(struct __pyx_obj_9adio
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1250
+/* "adios_mpi.pyx":1258
  *     property name:
  *         """ The variable name. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -19978,7 +20498,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_4name___get__(struct __pyx_obj_9adios_
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios_mpi.pyx":1251
+  /* "adios_mpi.pyx":1259
  *         """ The variable name. """
  *         def __get__(self):
  *             return self.name             # <<<<<<<<<<<<<<
@@ -19990,7 +20510,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_4name___get__(struct __pyx_obj_9adios_
   __pyx_r = __pyx_v_self->name;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":1250
+  /* "adios_mpi.pyx":1258
  *     property name:
  *         """ The variable name. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -20005,7 +20525,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_4name___get__(struct __pyx_obj_9adios_
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1255
+/* "adios_mpi.pyx":1263
  *     property varid:
  *         """ Internal variable id. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -20032,7 +20552,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_5varid___get__(struct __pyx_obj_9adios
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios_mpi.pyx":1256
+  /* "adios_mpi.pyx":1264
  *         """ Internal variable id. """
  *         def __get__(self):
  *             return self.varid             # <<<<<<<<<<<<<<
@@ -20040,13 +20560,13 @@ static PyObject *__pyx_pf_9adios_mpi_3var_5varid___get__(struct __pyx_obj_9adios
  *     property dtype:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->varid); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1256, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->varid); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1264, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":1255
+  /* "adios_mpi.pyx":1263
  *     property varid:
  *         """ Internal variable id. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -20065,7 +20585,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_5varid___get__(struct __pyx_obj_9adios
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1260
+/* "adios_mpi.pyx":1268
  *     property dtype:
  *         """ Variable type as in numpy.dtype. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -20091,7 +20611,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_5dtype___get__(struct __pyx_obj_9adios
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios_mpi.pyx":1261
+  /* "adios_mpi.pyx":1269
  *         """ Variable type as in numpy.dtype. """
  *         def __get__(self):
  *             return self.dtype             # <<<<<<<<<<<<<<
@@ -20103,7 +20623,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_5dtype___get__(struct __pyx_obj_9adios
   __pyx_r = ((PyObject *)__pyx_v_self->dtype);
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":1260
+  /* "adios_mpi.pyx":1268
  *     property dtype:
  *         """ Variable type as in numpy.dtype. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -20118,7 +20638,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_5dtype___get__(struct __pyx_obj_9adios
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1265
+/* "adios_mpi.pyx":1273
  *     property ndim:
  *         """ The number of dimensions of the variable. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -20145,7 +20665,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_4ndim___get__(struct __pyx_obj_9adios_
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios_mpi.pyx":1266
+  /* "adios_mpi.pyx":1274
  *         """ The number of dimensions of the variable. """
  *         def __get__(self):
  *             return self.ndim             # <<<<<<<<<<<<<<
@@ -20153,13 +20673,13 @@ static PyObject *__pyx_pf_9adios_mpi_3var_4ndim___get__(struct __pyx_obj_9adios_
  *     property dims:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1266, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1274, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":1265
+  /* "adios_mpi.pyx":1273
  *     property ndim:
  *         """ The number of dimensions of the variable. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -20178,7 +20698,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_4ndim___get__(struct __pyx_obj_9adios_
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1270
+/* "adios_mpi.pyx":1278
  *     property dims:
  *         """ The shape of the variable. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -20204,7 +20724,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_4dims___get__(struct __pyx_obj_9adios_
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios_mpi.pyx":1271
+  /* "adios_mpi.pyx":1279
  *         """ The shape of the variable. """
  *         def __get__(self):
  *             return self.dims             # <<<<<<<<<<<<<<
@@ -20216,7 +20736,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_4dims___get__(struct __pyx_obj_9adios_
   __pyx_r = __pyx_v_self->dims;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":1270
+  /* "adios_mpi.pyx":1278
  *     property dims:
  *         """ The shape of the variable. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -20231,7 +20751,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_4dims___get__(struct __pyx_obj_9adios_
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1275
+/* "adios_mpi.pyx":1283
  *     property shape:
  *         """ The shape of the variable. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -20257,7 +20777,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_5shape___get__(struct __pyx_obj_9adios
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios_mpi.pyx":1276
+  /* "adios_mpi.pyx":1284
  *         """ The shape of the variable. """
  *         def __get__(self):
  *             return self.dims             # <<<<<<<<<<<<<<
@@ -20269,7 +20789,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_5shape___get__(struct __pyx_obj_9adios
   __pyx_r = __pyx_v_self->dims;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":1275
+  /* "adios_mpi.pyx":1283
  *     property shape:
  *         """ The shape of the variable. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -20284,7 +20804,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_5shape___get__(struct __pyx_obj_9adios
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1280
+/* "adios_mpi.pyx":1288
  *     property size:
  *         """ The number of elements in the array. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -20314,7 +20834,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_4size___get__(struct __pyx_obj_9adios_
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios_mpi.pyx":1281
+  /* "adios_mpi.pyx":1289
  *         """ The number of elements in the array. """
  *         def __get__(self):
  *             return np.prod(self.dims)             # <<<<<<<<<<<<<<
@@ -20322,13 +20842,13 @@ static PyObject *__pyx_pf_9adios_mpi_3var_4size___get__(struct __pyx_obj_9adios_
  *     property nsteps:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1281, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1289, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_prod); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1281, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_prod); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1289, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_t_2 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
+  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
     __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
     if (likely(__pyx_t_2)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -20338,25 +20858,43 @@ static PyObject *__pyx_pf_9adios_mpi_3var_4size___get__(struct __pyx_obj_9adios_
     }
   }
   if (!__pyx_t_2) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_self->dims); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1281, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_self->dims); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1289, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1281, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_4);
-    __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2); __pyx_t_2 = NULL;
-    __Pyx_INCREF(__pyx_v_self->dims);
-    __Pyx_GIVEREF(__pyx_v_self->dims);
-    PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_self->dims);
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1281, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_3)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_2, __pyx_v_self->dims};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1289, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_2, __pyx_v_self->dims};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1289, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1289, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2); __pyx_t_2 = NULL;
+      __Pyx_INCREF(__pyx_v_self->dims);
+      __Pyx_GIVEREF(__pyx_v_self->dims);
+      PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_self->dims);
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1289, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    }
   }
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":1280
+  /* "adios_mpi.pyx":1288
  *     property size:
  *         """ The number of elements in the array. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -20378,7 +20916,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_4size___get__(struct __pyx_obj_9adios_
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1285
+/* "adios_mpi.pyx":1293
  *     property nsteps:
  *         """ The number of time steps of the variable. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -20405,7 +20943,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_6nsteps___get__(struct __pyx_obj_9adio
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios_mpi.pyx":1286
+  /* "adios_mpi.pyx":1294
  *         """ The number of time steps of the variable. """
  *         def __get__(self):
  *             return self.nsteps             # <<<<<<<<<<<<<<
@@ -20413,13 +20951,13 @@ static PyObject *__pyx_pf_9adios_mpi_3var_6nsteps___get__(struct __pyx_obj_9adio
  *     property attrs:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->nsteps); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1286, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->nsteps); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1294, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":1285
+  /* "adios_mpi.pyx":1293
  *     property nsteps:
  *         """ The number of time steps of the variable. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -20438,7 +20976,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_6nsteps___get__(struct __pyx_obj_9adio
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1290
+/* "adios_mpi.pyx":1298
  *     property attrs:
  *         """ Attributes associated with the variable. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -20464,7 +21002,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_5attrs___get__(struct __pyx_obj_9adios
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios_mpi.pyx":1291
+  /* "adios_mpi.pyx":1299
  *         """ Attributes associated with the variable. """
  *         def __get__(self):
  *             return self.attrs             # <<<<<<<<<<<<<<
@@ -20476,7 +21014,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_5attrs___get__(struct __pyx_obj_9adios
   __pyx_r = ((PyObject *)__pyx_v_self->attrs);
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":1290
+  /* "adios_mpi.pyx":1298
  *     property attrs:
  *         """ Attributes associated with the variable. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -20491,7 +21029,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_5attrs___get__(struct __pyx_obj_9adios
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1295
+/* "adios_mpi.pyx":1303
  *     property blockinfo:
  *         """ Block information. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -20540,7 +21078,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_9blockinfo___get__(struct __pyx_obj_9a
   PyObject *__pyx_t_12 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios_mpi.pyx":1296
+  /* "adios_mpi.pyx":1304
  *         """ Block information. """
  *         def __get__(self):
  *             if self.blockinfo is None:             # <<<<<<<<<<<<<<
@@ -20551,19 +21089,19 @@ static PyObject *__pyx_pf_9adios_mpi_3var_9blockinfo___get__(struct __pyx_obj_9a
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "adios_mpi.pyx":1297
+    /* "adios_mpi.pyx":1305
  *         def __get__(self):
  *             if self.blockinfo is None:
  *                 ll = list()             # <<<<<<<<<<<<<<
  *                 k = 0
  *                 for t in range(self.vp.nsteps):
  */
-    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1297, __pyx_L1_error)
+    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1305, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_v_ll = ((PyObject*)__pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "adios_mpi.pyx":1298
+    /* "adios_mpi.pyx":1306
  *             if self.blockinfo is None:
  *                 ll = list()
  *                 k = 0             # <<<<<<<<<<<<<<
@@ -20573,7 +21111,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_9blockinfo___get__(struct __pyx_obj_9a
     __Pyx_INCREF(__pyx_int_0);
     __pyx_v_k = __pyx_int_0;
 
-    /* "adios_mpi.pyx":1299
+    /* "adios_mpi.pyx":1307
  *                 ll = list()
  *                 k = 0
  *                 for t in range(self.vp.nsteps):             # <<<<<<<<<<<<<<
@@ -20584,19 +21122,19 @@ static PyObject *__pyx_pf_9adios_mpi_3var_9blockinfo___get__(struct __pyx_obj_9a
     for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
       __pyx_v_t = __pyx_t_5;
 
-      /* "adios_mpi.pyx":1300
+      /* "adios_mpi.pyx":1308
  *                 k = 0
  *                 for t in range(self.vp.nsteps):
  *                     l = list()             # <<<<<<<<<<<<<<
  *                     if self.vp.nblocks[t] == 0:
  *                         l.append(None)
  */
-      __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1300, __pyx_L1_error)
+      __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1308, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_XDECREF_SET(__pyx_v_l, ((PyObject*)__pyx_t_3));
       __pyx_t_3 = 0;
 
-      /* "adios_mpi.pyx":1301
+      /* "adios_mpi.pyx":1309
  *                 for t in range(self.vp.nsteps):
  *                     l = list()
  *                     if self.vp.nblocks[t] == 0:             # <<<<<<<<<<<<<<
@@ -20606,16 +21144,16 @@ static PyObject *__pyx_pf_9adios_mpi_3var_9blockinfo___get__(struct __pyx_obj_9a
       __pyx_t_2 = (((__pyx_v_self->vp->nblocks[__pyx_v_t]) == 0) != 0);
       if (__pyx_t_2) {
 
-        /* "adios_mpi.pyx":1302
+        /* "adios_mpi.pyx":1310
  *                     l = list()
  *                     if self.vp.nblocks[t] == 0:
  *                         l.append(None)             # <<<<<<<<<<<<<<
  *                     for i in range(self.vp.nblocks[t]):
  *                         start = tuple([self.vp.blockinfo[k].start[d] for d in range(self.vp.ndim)])
  */
-        __pyx_t_6 = __Pyx_PyList_Append(__pyx_v_l, Py_None); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 1302, __pyx_L1_error)
+        __pyx_t_6 = __Pyx_PyList_Append(__pyx_v_l, Py_None); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 1310, __pyx_L1_error)
 
-        /* "adios_mpi.pyx":1301
+        /* "adios_mpi.pyx":1309
  *                 for t in range(self.vp.nsteps):
  *                     l = list()
  *                     if self.vp.nblocks[t] == 0:             # <<<<<<<<<<<<<<
@@ -20624,7 +21162,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_9blockinfo___get__(struct __pyx_obj_9a
  */
       }
 
-      /* "adios_mpi.pyx":1303
+      /* "adios_mpi.pyx":1311
  *                     if self.vp.nblocks[t] == 0:
  *                         l.append(None)
  *                     for i in range(self.vp.nblocks[t]):             # <<<<<<<<<<<<<<
@@ -20635,88 +21173,88 @@ static PyObject *__pyx_pf_9adios_mpi_3var_9blockinfo___get__(struct __pyx_obj_9a
       for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) {
         __pyx_v_i = __pyx_t_8;
 
-        /* "adios_mpi.pyx":1304
+        /* "adios_mpi.pyx":1312
  *                         l.append(None)
  *                     for i in range(self.vp.nblocks[t]):
  *                         start = tuple([self.vp.blockinfo[k].start[d] for d in range(self.vp.ndim)])             # <<<<<<<<<<<<<<
  *                         count = tuple([self.vp.blockinfo[k].count[d] for d in range(self.vp.ndim)])
  *                         process_id = self.vp.blockinfo[k].process_id
  */
-        __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1304, __pyx_L1_error)
+        __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1312, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
         __pyx_t_9 = __pyx_v_self->vp->ndim;
         for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {
           __pyx_v_d = __pyx_t_10;
-          __pyx_t_11 = __Pyx_PyIndex_AsSsize_t(__pyx_v_k); if (unlikely((__pyx_t_11 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1304, __pyx_L1_error)
-          __pyx_t_12 = __Pyx_PyInt_From_uint64_t(((__pyx_v_self->vp->blockinfo[__pyx_t_11]).start[__pyx_v_d])); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1304, __pyx_L1_error)
+          __pyx_t_11 = __Pyx_PyIndex_AsSsize_t(__pyx_v_k); if (unlikely((__pyx_t_11 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1312, __pyx_L1_error)
+          __pyx_t_12 = __Pyx_PyInt_From_uint64_t(((__pyx_v_self->vp->blockinfo[__pyx_t_11]).start[__pyx_v_d])); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1312, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_12);
-          if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_12))) __PYX_ERR(0, 1304, __pyx_L1_error)
+          if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_12))) __PYX_ERR(0, 1312, __pyx_L1_error)
           __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
         }
-        __pyx_t_12 = PyList_AsTuple(((PyObject*)__pyx_t_3)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1304, __pyx_L1_error)
+        __pyx_t_12 = PyList_AsTuple(((PyObject*)__pyx_t_3)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1312, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_12);
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
         __Pyx_XDECREF_SET(__pyx_v_start, ((PyObject*)__pyx_t_12));
         __pyx_t_12 = 0;
 
-        /* "adios_mpi.pyx":1305
+        /* "adios_mpi.pyx":1313
  *                     for i in range(self.vp.nblocks[t]):
  *                         start = tuple([self.vp.blockinfo[k].start[d] for d in range(self.vp.ndim)])
  *                         count = tuple([self.vp.blockinfo[k].count[d] for d in range(self.vp.ndim)])             # <<<<<<<<<<<<<<
  *                         process_id = self.vp.blockinfo[k].process_id
  *                         time_index = self.vp.blockinfo[k].time_index
  */
-        __pyx_t_12 = PyList_New(0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1305, __pyx_L1_error)
+        __pyx_t_12 = PyList_New(0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1313, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_12);
         __pyx_t_9 = __pyx_v_self->vp->ndim;
         for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {
           __pyx_v_d = __pyx_t_10;
-          __pyx_t_11 = __Pyx_PyIndex_AsSsize_t(__pyx_v_k); if (unlikely((__pyx_t_11 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1305, __pyx_L1_error)
-          __pyx_t_3 = __Pyx_PyInt_From_uint64_t(((__pyx_v_self->vp->blockinfo[__pyx_t_11]).count[__pyx_v_d])); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1305, __pyx_L1_error)
+          __pyx_t_11 = __Pyx_PyIndex_AsSsize_t(__pyx_v_k); if (unlikely((__pyx_t_11 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1313, __pyx_L1_error)
+          __pyx_t_3 = __Pyx_PyInt_From_uint64_t(((__pyx_v_self->vp->blockinfo[__pyx_t_11]).count[__pyx_v_d])); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1313, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_3);
-          if (unlikely(__Pyx_ListComp_Append(__pyx_t_12, (PyObject*)__pyx_t_3))) __PYX_ERR(0, 1305, __pyx_L1_error)
+          if (unlikely(__Pyx_ListComp_Append(__pyx_t_12, (PyObject*)__pyx_t_3))) __PYX_ERR(0, 1313, __pyx_L1_error)
           __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
         }
-        __pyx_t_3 = PyList_AsTuple(((PyObject*)__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1305, __pyx_L1_error)
+        __pyx_t_3 = PyList_AsTuple(((PyObject*)__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1313, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
         __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
         __Pyx_XDECREF_SET(__pyx_v_count, ((PyObject*)__pyx_t_3));
         __pyx_t_3 = 0;
 
-        /* "adios_mpi.pyx":1306
+        /* "adios_mpi.pyx":1314
  *                         start = tuple([self.vp.blockinfo[k].start[d] for d in range(self.vp.ndim)])
  *                         count = tuple([self.vp.blockinfo[k].count[d] for d in range(self.vp.ndim)])
  *                         process_id = self.vp.blockinfo[k].process_id             # <<<<<<<<<<<<<<
  *                         time_index = self.vp.blockinfo[k].time_index
  *                         binfo = blockinfo(start, count, process_id, time_index)
  */
-        __pyx_t_11 = __Pyx_PyIndex_AsSsize_t(__pyx_v_k); if (unlikely((__pyx_t_11 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1306, __pyx_L1_error)
-        __pyx_t_3 = __Pyx_PyInt_From_uint32_t((__pyx_v_self->vp->blockinfo[__pyx_t_11]).process_id); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1306, __pyx_L1_error)
+        __pyx_t_11 = __Pyx_PyIndex_AsSsize_t(__pyx_v_k); if (unlikely((__pyx_t_11 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1314, __pyx_L1_error)
+        __pyx_t_3 = __Pyx_PyInt_From_uint32_t((__pyx_v_self->vp->blockinfo[__pyx_t_11]).process_id); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1314, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
         __Pyx_XDECREF_SET(__pyx_v_process_id, __pyx_t_3);
         __pyx_t_3 = 0;
 
-        /* "adios_mpi.pyx":1307
+        /* "adios_mpi.pyx":1315
  *                         count = tuple([self.vp.blockinfo[k].count[d] for d in range(self.vp.ndim)])
  *                         process_id = self.vp.blockinfo[k].process_id
  *                         time_index = self.vp.blockinfo[k].time_index             # <<<<<<<<<<<<<<
  *                         binfo = blockinfo(start, count, process_id, time_index)
  *                         l.append(binfo)
  */
-        __pyx_t_11 = __Pyx_PyIndex_AsSsize_t(__pyx_v_k); if (unlikely((__pyx_t_11 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1307, __pyx_L1_error)
-        __pyx_t_3 = __Pyx_PyInt_From_uint32_t((__pyx_v_self->vp->blockinfo[__pyx_t_11]).time_index); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1307, __pyx_L1_error)
+        __pyx_t_11 = __Pyx_PyIndex_AsSsize_t(__pyx_v_k); if (unlikely((__pyx_t_11 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1315, __pyx_L1_error)
+        __pyx_t_3 = __Pyx_PyInt_From_uint32_t((__pyx_v_self->vp->blockinfo[__pyx_t_11]).time_index); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1315, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
         __Pyx_XDECREF_SET(__pyx_v_time_index, __pyx_t_3);
         __pyx_t_3 = 0;
 
-        /* "adios_mpi.pyx":1308
+        /* "adios_mpi.pyx":1316
  *                         process_id = self.vp.blockinfo[k].process_id
  *                         time_index = self.vp.blockinfo[k].time_index
  *                         binfo = blockinfo(start, count, process_id, time_index)             # <<<<<<<<<<<<<<
  *                         l.append(binfo)
  *                         k += 1
  */
-        __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1308, __pyx_L1_error)
+        __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1316, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
         __Pyx_INCREF(__pyx_v_start);
         __Pyx_GIVEREF(__pyx_v_start);
@@ -20730,45 +21268,45 @@ static PyObject *__pyx_pf_9adios_mpi_3var_9blockinfo___get__(struct __pyx_obj_9a
         __Pyx_INCREF(__pyx_v_time_index);
         __Pyx_GIVEREF(__pyx_v_time_index);
         PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_v_time_index);
-        __pyx_t_12 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_9adios_mpi_blockinfo), __pyx_t_3, NULL); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1308, __pyx_L1_error)
+        __pyx_t_12 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_9adios_mpi_blockinfo), __pyx_t_3, NULL); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1316, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_12);
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
         __Pyx_XDECREF_SET(__pyx_v_binfo, ((struct __pyx_obj_9adios_mpi_blockinfo *)__pyx_t_12));
         __pyx_t_12 = 0;
 
-        /* "adios_mpi.pyx":1309
+        /* "adios_mpi.pyx":1317
  *                         time_index = self.vp.blockinfo[k].time_index
  *                         binfo = blockinfo(start, count, process_id, time_index)
  *                         l.append(binfo)             # <<<<<<<<<<<<<<
  *                         k += 1
  *                     ll.append(l)
  */
-        __pyx_t_6 = __Pyx_PyList_Append(__pyx_v_l, ((PyObject *)__pyx_v_binfo)); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 1309, __pyx_L1_error)
+        __pyx_t_6 = __Pyx_PyList_Append(__pyx_v_l, ((PyObject *)__pyx_v_binfo)); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 1317, __pyx_L1_error)
 
-        /* "adios_mpi.pyx":1310
+        /* "adios_mpi.pyx":1318
  *                         binfo = blockinfo(start, count, process_id, time_index)
  *                         l.append(binfo)
  *                         k += 1             # <<<<<<<<<<<<<<
  *                     ll.append(l)
  *                 self.blockinfo = ll
  */
-        __pyx_t_12 = __Pyx_PyInt_AddObjC(__pyx_v_k, __pyx_int_1, 1, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1310, __pyx_L1_error)
+        __pyx_t_12 = __Pyx_PyInt_AddObjC(__pyx_v_k, __pyx_int_1, 1, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1318, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_12);
         __Pyx_DECREF_SET(__pyx_v_k, __pyx_t_12);
         __pyx_t_12 = 0;
       }
 
-      /* "adios_mpi.pyx":1311
+      /* "adios_mpi.pyx":1319
  *                         l.append(binfo)
  *                         k += 1
  *                     ll.append(l)             # <<<<<<<<<<<<<<
  *                 self.blockinfo = ll
  *             return (self.blockinfo)
  */
-      __pyx_t_6 = __Pyx_PyList_Append(__pyx_v_ll, __pyx_v_l); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 1311, __pyx_L1_error)
+      __pyx_t_6 = __Pyx_PyList_Append(__pyx_v_ll, __pyx_v_l); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 1319, __pyx_L1_error)
     }
 
-    /* "adios_mpi.pyx":1312
+    /* "adios_mpi.pyx":1320
  *                         k += 1
  *                     ll.append(l)
  *                 self.blockinfo = ll             # <<<<<<<<<<<<<<
@@ -20781,7 +21319,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_9blockinfo___get__(struct __pyx_obj_9a
     __Pyx_DECREF(__pyx_v_self->blockinfo);
     __pyx_v_self->blockinfo = __pyx_v_ll;
 
-    /* "adios_mpi.pyx":1296
+    /* "adios_mpi.pyx":1304
  *         """ Block information. """
  *         def __get__(self):
  *             if self.blockinfo is None:             # <<<<<<<<<<<<<<
@@ -20790,7 +21328,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_9blockinfo___get__(struct __pyx_obj_9a
  */
   }
 
-  /* "adios_mpi.pyx":1313
+  /* "adios_mpi.pyx":1321
  *                     ll.append(l)
  *                 self.blockinfo = ll
  *             return (self.blockinfo)             # <<<<<<<<<<<<<<
@@ -20802,7 +21340,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_9blockinfo___get__(struct __pyx_obj_9a
   __pyx_r = __pyx_v_self->blockinfo;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":1295
+  /* "adios_mpi.pyx":1303
  *     property blockinfo:
  *         """ Block information. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -20830,7 +21368,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_9blockinfo___get__(struct __pyx_obj_9a
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1315
+/* "adios_mpi.pyx":1323
  *             return (self.blockinfo)
  * 
  *     def __init__(self, file file, str name):             # <<<<<<<<<<<<<<
@@ -20866,11 +21404,11 @@ static int __pyx_pw_9adios_mpi_3var_1__init__(PyObject *__pyx_v_self, PyObject *
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, 1); __PYX_ERR(0, 1315, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, 1); __PYX_ERR(0, 1323, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 1315, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 1323, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -20883,14 +21421,14 @@ static int __pyx_pw_9adios_mpi_3var_1__init__(PyObject *__pyx_v_self, PyObject *
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1315, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1323, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.var.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_file), __pyx_ptype_9adios_mpi_file, 1, "file", 0))) __PYX_ERR(0, 1315, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 1315, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_file), __pyx_ptype_9adios_mpi_file, 1, "file", 0))) __PYX_ERR(0, 1323, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 1323, __pyx_L1_error)
   __pyx_r = __pyx_pf_9adios_mpi_3var___init__(((struct __pyx_obj_9adios_mpi_var *)__pyx_v_self), __pyx_v_file, __pyx_v_name);
 
   /* function exit code */
@@ -20920,12 +21458,11 @@ static int __pyx_pf_9adios_mpi_3var___init__(struct __pyx_obj_9adios_mpi_var *__
   PyObject *__pyx_t_12 = NULL;
   PyObject *__pyx_t_13 = NULL;
   PyObject *__pyx_t_14 = NULL;
-  Py_ssize_t __pyx_t_15;
-  PyObject *__pyx_t_16 = NULL;
+  PyObject *__pyx_t_15 = NULL;
   __Pyx_RefNannySetupContext("__init__", 0);
   __Pyx_INCREF(__pyx_v_name);
 
-  /* "adios_mpi.pyx":1316
+  /* "adios_mpi.pyx":1324
  * 
  *     def __init__(self, file file, str name):
  *         self.file = file             # <<<<<<<<<<<<<<
@@ -20938,7 +21475,7 @@ static int __pyx_pf_9adios_mpi_3var___init__(struct __pyx_obj_9adios_mpi_var *__
   __Pyx_DECREF(((PyObject *)__pyx_v_self->file));
   __pyx_v_self->file = __pyx_v_file;
 
-  /* "adios_mpi.pyx":1317
+  /* "adios_mpi.pyx":1325
  *     def __init__(self, file file, str name):
  *         self.file = file
  *         self.vp = NULL             # <<<<<<<<<<<<<<
@@ -20947,7 +21484,7 @@ static int __pyx_pf_9adios_mpi_3var___init__(struct __pyx_obj_9adios_mpi_var *__
  */
   __pyx_v_self->vp = NULL;
 
-  /* "adios_mpi.pyx":1319
+  /* "adios_mpi.pyx":1327
  *         self.vp = NULL
  * 
  *         assert self.file.fp != NULL, 'Not an open file'             # <<<<<<<<<<<<<<
@@ -20958,25 +21495,25 @@ static int __pyx_pf_9adios_mpi_3var___init__(struct __pyx_obj_9adios_mpi_var *__
   if (unlikely(!Py_OptimizeFlag)) {
     if (unlikely(!((__pyx_v_self->file->fp != NULL) != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Not_an_open_file);
-      __PYX_ERR(0, 1319, __pyx_L1_error)
+      __PYX_ERR(0, 1327, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "adios_mpi.pyx":1320
+  /* "adios_mpi.pyx":1328
  * 
  *         assert self.file.fp != NULL, 'Not an open file'
  *         self.vp = adios_inq_var(self.file.fp, s2b(name))             # <<<<<<<<<<<<<<
  *         assert self.vp != NULL, 'Not a valid var'
  * 
  */
-  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1320, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_9adios_mpi_s2b(__pyx_v_name, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1328, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 1320, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 1328, __pyx_L1_error)
   __pyx_v_self->vp = adios_inq_var(__pyx_v_self->file->fp, __pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":1321
+  /* "adios_mpi.pyx":1329
  *         assert self.file.fp != NULL, 'Not an open file'
  *         self.vp = adios_inq_var(self.file.fp, s2b(name))
  *         assert self.vp != NULL, 'Not a valid var'             # <<<<<<<<<<<<<<
@@ -20987,12 +21524,12 @@ static int __pyx_pf_9adios_mpi_3var___init__(struct __pyx_obj_9adios_mpi_var *__
   if (unlikely(!Py_OptimizeFlag)) {
     if (unlikely(!((__pyx_v_self->vp != NULL) != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Not_a_valid_var);
-      __PYX_ERR(0, 1321, __pyx_L1_error)
+      __PYX_ERR(0, 1329, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "adios_mpi.pyx":1324
+  /* "adios_mpi.pyx":1332
  * 
  *         ## Further populate vp.blockinfo
  *         adios_inq_var_blockinfo(self.file.fp, self.vp)             # <<<<<<<<<<<<<<
@@ -21001,7 +21538,7 @@ static int __pyx_pf_9adios_mpi_3var___init__(struct __pyx_obj_9adios_mpi_var *__
  */
   adios_inq_var_blockinfo(__pyx_v_self->file->fp, __pyx_v_self->vp);
 
-  /* "adios_mpi.pyx":1326
+  /* "adios_mpi.pyx":1334
  *         adios_inq_var_blockinfo(self.file.fp, self.vp)
  * 
  *         self.name = name             # <<<<<<<<<<<<<<
@@ -21014,7 +21551,7 @@ static int __pyx_pf_9adios_mpi_3var___init__(struct __pyx_obj_9adios_mpi_var *__
   __Pyx_DECREF(__pyx_v_self->name);
   __pyx_v_self->name = __pyx_v_name;
 
-  /* "adios_mpi.pyx":1327
+  /* "adios_mpi.pyx":1335
  * 
  *         self.name = name
  *         self.varid = self.vp.varid             # <<<<<<<<<<<<<<
@@ -21024,7 +21561,7 @@ static int __pyx_pf_9adios_mpi_3var___init__(struct __pyx_obj_9adios_mpi_var *__
   __pyx_t_3 = __pyx_v_self->vp->varid;
   __pyx_v_self->varid = __pyx_t_3;
 
-  /* "adios_mpi.pyx":1328
+  /* "adios_mpi.pyx":1336
  *         self.name = name
  *         self.varid = self.vp.varid
  *         self.ndim = self.vp.ndim             # <<<<<<<<<<<<<<
@@ -21034,24 +21571,24 @@ static int __pyx_pf_9adios_mpi_3var___init__(struct __pyx_obj_9adios_mpi_var *__
   __pyx_t_3 = __pyx_v_self->vp->ndim;
   __pyx_v_self->ndim = __pyx_t_3;
 
-  /* "adios_mpi.pyx":1329
+  /* "adios_mpi.pyx":1337
  *         self.varid = self.vp.varid
  *         self.ndim = self.vp.ndim
  *         self.dims = tuple([self.vp.dims[i] for i in range(self.vp.ndim)])             # <<<<<<<<<<<<<<
  *         self.nsteps = self.vp.nsteps
  * 
  */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1329, __pyx_L1_error)
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1337, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_3 = __pyx_v_self->vp->ndim;
   for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
     __pyx_v_i = __pyx_t_4;
-    __pyx_t_5 = __Pyx_PyInt_From_uint64_t((__pyx_v_self->vp->dims[__pyx_v_i])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1329, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyInt_From_uint64_t((__pyx_v_self->vp->dims[__pyx_v_i])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1337, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_5))) __PYX_ERR(0, 1329, __pyx_L1_error)
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_5))) __PYX_ERR(0, 1337, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   }
-  __pyx_t_5 = PyList_AsTuple(((PyObject*)__pyx_t_1)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1329, __pyx_L1_error)
+  __pyx_t_5 = PyList_AsTuple(((PyObject*)__pyx_t_1)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1337, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_GIVEREF(__pyx_t_5);
@@ -21060,7 +21597,7 @@ static int __pyx_pf_9adios_mpi_3var___init__(struct __pyx_obj_9adios_mpi_var *__
   __pyx_v_self->dims = ((PyObject*)__pyx_t_5);
   __pyx_t_5 = 0;
 
-  /* "adios_mpi.pyx":1330
+  /* "adios_mpi.pyx":1338
  *         self.ndim = self.vp.ndim
  *         self.dims = tuple([self.vp.dims[i] for i in range(self.vp.ndim)])
  *         self.nsteps = self.vp.nsteps             # <<<<<<<<<<<<<<
@@ -21070,28 +21607,28 @@ static int __pyx_pf_9adios_mpi_3var___init__(struct __pyx_obj_9adios_mpi_var *__
   __pyx_t_3 = __pyx_v_self->vp->nsteps;
   __pyx_v_self->nsteps = __pyx_t_3;
 
-  /* "adios_mpi.pyx":1332
+  /* "adios_mpi.pyx":1340
  *         self.nsteps = self.vp.nsteps
  * 
  *         if self.vp.type == DATATYPE.string:             # <<<<<<<<<<<<<<
  *             self.dtype = adios2npdtype(self.vp.type, len(<char*> self.vp.value))
  *         else:
  */
-  __pyx_t_5 = __Pyx_PyInt_From_ADIOS_DATATYPES(__pyx_v_self->vp->type); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1332, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyInt_From_ADIOS_DATATYPES(__pyx_v_self->vp->type); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1340, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1332, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1340, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_string); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1332, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_string); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1340, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_RichCompare(__pyx_t_5, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1332, __pyx_L1_error)
+  __pyx_t_1 = PyObject_RichCompare(__pyx_t_5, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1340, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 1332, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 1340, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   if (__pyx_t_7) {
 
-    /* "adios_mpi.pyx":1333
+    /* "adios_mpi.pyx":1341
  * 
  *         if self.vp.type == DATATYPE.string:
  *             self.dtype = adios2npdtype(self.vp.type, len(<char*> self.vp.value))             # <<<<<<<<<<<<<<
@@ -21101,7 +21638,7 @@ static int __pyx_pf_9adios_mpi_3var___init__(struct __pyx_obj_9adios_mpi_var *__
     __pyx_t_8 = strlen(((char *)__pyx_v_self->vp->value)); 
     __pyx_t_9.__pyx_n = 1;
     __pyx_t_9.strlen = __pyx_t_8;
-    __pyx_t_1 = ((PyObject *)__pyx_f_9adios_mpi_adios2npdtype(__pyx_v_self->vp->type, 0, &__pyx_t_9)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1333, __pyx_L1_error)
+    __pyx_t_1 = ((PyObject *)__pyx_f_9adios_mpi_adios2npdtype(__pyx_v_self->vp->type, 0, &__pyx_t_9)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1341, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_GIVEREF(__pyx_t_1);
     __Pyx_GOTREF(__pyx_v_self->dtype);
@@ -21109,7 +21646,7 @@ static int __pyx_pf_9adios_mpi_3var___init__(struct __pyx_obj_9adios_mpi_var *__
     __pyx_v_self->dtype = ((PyArray_Descr *)__pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "adios_mpi.pyx":1332
+    /* "adios_mpi.pyx":1340
  *         self.nsteps = self.vp.nsteps
  * 
  *         if self.vp.type == DATATYPE.string:             # <<<<<<<<<<<<<<
@@ -21119,7 +21656,7 @@ static int __pyx_pf_9adios_mpi_3var___init__(struct __pyx_obj_9adios_mpi_var *__
     goto __pyx_L5;
   }
 
-  /* "adios_mpi.pyx":1335
+  /* "adios_mpi.pyx":1343
  *             self.dtype = adios2npdtype(self.vp.type, len(<char*> self.vp.value))
  *         else:
  *             self.dtype = adios2npdtype(self.vp.type)             # <<<<<<<<<<<<<<
@@ -21127,7 +21664,7 @@ static int __pyx_pf_9adios_mpi_3var___init__(struct __pyx_obj_9adios_mpi_var *__
  *         self.attrs = softdict()
  */
   /*else*/ {
-    __pyx_t_1 = ((PyObject *)__pyx_f_9adios_mpi_adios2npdtype(__pyx_v_self->vp->type, 0, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1335, __pyx_L1_error)
+    __pyx_t_1 = ((PyObject *)__pyx_f_9adios_mpi_adios2npdtype(__pyx_v_self->vp->type, 0, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1343, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_GIVEREF(__pyx_t_1);
     __Pyx_GOTREF(__pyx_v_self->dtype);
@@ -21137,14 +21674,14 @@ static int __pyx_pf_9adios_mpi_3var___init__(struct __pyx_obj_9adios_mpi_var *__
   }
   __pyx_L5:;
 
-  /* "adios_mpi.pyx":1337
+  /* "adios_mpi.pyx":1345
  *             self.dtype = adios2npdtype(self.vp.type)
  * 
  *         self.attrs = softdict()             # <<<<<<<<<<<<<<
  *         for name in self.file.attrs.keys():
  *             if name.startswith(self.name + '/'):
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_9adios_mpi_softdict), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1337, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_9adios_mpi_softdict), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1345, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_self->attrs);
@@ -21152,17 +21689,17 @@ static int __pyx_pf_9adios_mpi_3var___init__(struct __pyx_obj_9adios_mpi_var *__
   __pyx_v_self->attrs = ((struct __pyx_obj_9adios_mpi_softdict *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":1338
+  /* "adios_mpi.pyx":1346
  * 
  *         self.attrs = softdict()
  *         for name in self.file.attrs.keys():             # <<<<<<<<<<<<<<
  *             if name.startswith(self.name + '/'):
  *                 self.attrs[name.replace(self.name + '/', '')] = self.file.attrs[name]
  */
-  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->file->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1338, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->file->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1346, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __pyx_t_5 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_6))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
     __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6);
     if (likely(__pyx_t_5)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
@@ -21172,10 +21709,10 @@ static int __pyx_pf_9adios_mpi_3var___init__(struct __pyx_obj_9adios_mpi_var *__
     }
   }
   if (__pyx_t_5) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1338, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1346, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   } else {
-    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1338, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1346, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
@@ -21183,27 +21720,27 @@ static int __pyx_pf_9adios_mpi_3var___init__(struct __pyx_obj_9adios_mpi_var *__
     __pyx_t_6 = __pyx_t_1; __Pyx_INCREF(__pyx_t_6); __pyx_t_10 = 0;
     __pyx_t_11 = NULL;
   } else {
-    __pyx_t_10 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1338, __pyx_L1_error)
+    __pyx_t_10 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1346, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_11 = Py_TYPE(__pyx_t_6)->tp_iternext; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1338, __pyx_L1_error)
+    __pyx_t_11 = Py_TYPE(__pyx_t_6)->tp_iternext; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1346, __pyx_L1_error)
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   for (;;) {
     if (likely(!__pyx_t_11)) {
       if (likely(PyList_CheckExact(__pyx_t_6))) {
         if (__pyx_t_10 >= PyList_GET_SIZE(__pyx_t_6)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_1 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_10); __Pyx_INCREF(__pyx_t_1); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 1338, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_1 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_10); __Pyx_INCREF(__pyx_t_1); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 1346, __pyx_L1_error)
         #else
-        __pyx_t_1 = PySequence_ITEM(__pyx_t_6, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1338, __pyx_L1_error)
+        __pyx_t_1 = PySequence_ITEM(__pyx_t_6, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1346, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_1);
         #endif
       } else {
         if (__pyx_t_10 >= PyTuple_GET_SIZE(__pyx_t_6)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_10); __Pyx_INCREF(__pyx_t_1); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 1338, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_10); __Pyx_INCREF(__pyx_t_1); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 1346, __pyx_L1_error)
         #else
-        __pyx_t_1 = PySequence_ITEM(__pyx_t_6, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1338, __pyx_L1_error)
+        __pyx_t_1 = PySequence_ITEM(__pyx_t_6, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1346, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_1);
         #endif
       }
@@ -21213,17 +21750,17 @@ static int __pyx_pf_9adios_mpi_3var___init__(struct __pyx_obj_9adios_mpi_var *__
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
           if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-          else __PYX_ERR(0, 1338, __pyx_L1_error)
+          else __PYX_ERR(0, 1346, __pyx_L1_error)
         }
         break;
       }
       __Pyx_GOTREF(__pyx_t_1);
     }
-    if (!(likely(PyString_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 1338, __pyx_L1_error)
+    if (!(likely(PyString_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 1346, __pyx_L1_error)
     __Pyx_DECREF_SET(__pyx_v_name, ((PyObject*)__pyx_t_1));
     __pyx_t_1 = 0;
 
-    /* "adios_mpi.pyx":1339
+    /* "adios_mpi.pyx":1347
  *         self.attrs = softdict()
  *         for name in self.file.attrs.keys():
  *             if name.startswith(self.name + '/'):             # <<<<<<<<<<<<<<
@@ -21232,59 +21769,79 @@ static int __pyx_pf_9adios_mpi_3var___init__(struct __pyx_obj_9adios_mpi_var *__
  */
     if (unlikely(__pyx_v_name == Py_None)) {
       PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "startswith");
-      __PYX_ERR(0, 1339, __pyx_L1_error)
+      __PYX_ERR(0, 1347, __pyx_L1_error)
     }
-    __pyx_t_1 = PyNumber_Add(__pyx_v_self->name, __pyx_kp_s_); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1339, __pyx_L1_error)
+    __pyx_t_1 = PyNumber_Add(__pyx_v_self->name, __pyx_kp_s_); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1347, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_7 = __Pyx_PyStr_Tailmatch(__pyx_v_name, __pyx_t_1, 0, PY_SSIZE_T_MAX, -1); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 1339, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyStr_Tailmatch(__pyx_v_name, __pyx_t_1, 0, PY_SSIZE_T_MAX, -1); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 1347, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     if ((__pyx_t_7 != 0)) {
 
-      /* "adios_mpi.pyx":1340
+      /* "adios_mpi.pyx":1348
  *         for name in self.file.attrs.keys():
  *             if name.startswith(self.name + '/'):
  *                 self.attrs[name.replace(self.name + '/', '')] = self.file.attrs[name]             # <<<<<<<<<<<<<<
  *             if name.startswith('/' + self.name + '/'):
  *                 self.attrs[name.replace('/' + self.name + '/', '')] = self.file.attrs[name]
  */
-      __pyx_t_1 = PyObject_GetItem(((PyObject *)__pyx_v_self->file->attrs), __pyx_v_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1340, __pyx_L1_error)
+      __pyx_t_1 = PyObject_GetItem(((PyObject *)__pyx_v_self->file->attrs), __pyx_v_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1348, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
-      __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_replace); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1340, __pyx_L1_error)
+      __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_replace); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1348, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_12);
-      __pyx_t_13 = PyNumber_Add(__pyx_v_self->name, __pyx_kp_s_); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1340, __pyx_L1_error)
+      __pyx_t_13 = PyNumber_Add(__pyx_v_self->name, __pyx_kp_s_); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1348, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_13);
       __pyx_t_14 = NULL;
-      __pyx_t_15 = 0;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_12))) {
+      __pyx_t_3 = 0;
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_12))) {
         __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_12);
         if (likely(__pyx_t_14)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12);
           __Pyx_INCREF(__pyx_t_14);
           __Pyx_INCREF(function);
           __Pyx_DECREF_SET(__pyx_t_12, function);
-          __pyx_t_15 = 1;
+          __pyx_t_3 = 1;
         }
       }
-      __pyx_t_16 = PyTuple_New(2+__pyx_t_15); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1340, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_16);
-      if (__pyx_t_14) {
-        __Pyx_GIVEREF(__pyx_t_14); PyTuple_SET_ITEM(__pyx_t_16, 0, __pyx_t_14); __pyx_t_14 = NULL;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_12)) {
+        PyObject *__pyx_temp[3] = {__pyx_t_14, __pyx_t_13, __pyx_kp_s__10};
+        __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_12, __pyx_temp+1-__pyx_t_3, 2+__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1348, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
+        __Pyx_GOTREF(__pyx_t_5);
+        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_12)) {
+        PyObject *__pyx_temp[3] = {__pyx_t_14, __pyx_t_13, __pyx_kp_s__10};
+        __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_12, __pyx_temp+1-__pyx_t_3, 2+__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1348, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
+        __Pyx_GOTREF(__pyx_t_5);
+        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+      } else
+      #endif
+      {
+        __pyx_t_15 = PyTuple_New(2+__pyx_t_3); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1348, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_15);
+        if (__pyx_t_14) {
+          __Pyx_GIVEREF(__pyx_t_14); PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_14); __pyx_t_14 = NULL;
+        }
+        __Pyx_GIVEREF(__pyx_t_13);
+        PyTuple_SET_ITEM(__pyx_t_15, 0+__pyx_t_3, __pyx_t_13);
+        __Pyx_INCREF(__pyx_kp_s__10);
+        __Pyx_GIVEREF(__pyx_kp_s__10);
+        PyTuple_SET_ITEM(__pyx_t_15, 1+__pyx_t_3, __pyx_kp_s__10);
+        __pyx_t_13 = 0;
+        __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_t_15, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1348, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_5);
+        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
       }
-      __Pyx_GIVEREF(__pyx_t_13);
-      PyTuple_SET_ITEM(__pyx_t_16, 0+__pyx_t_15, __pyx_t_13);
-      __Pyx_INCREF(__pyx_kp_s__10);
-      __Pyx_GIVEREF(__pyx_kp_s__10);
-      PyTuple_SET_ITEM(__pyx_t_16, 1+__pyx_t_15, __pyx_kp_s__10);
-      __pyx_t_13 = 0;
-      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_t_16, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1340, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_5);
-      __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
       __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
-      if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_self->attrs), __pyx_t_5, __pyx_t_1) < 0)) __PYX_ERR(0, 1340, __pyx_L1_error)
+      if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_self->attrs), __pyx_t_5, __pyx_t_1) < 0)) __PYX_ERR(0, 1348, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-      /* "adios_mpi.pyx":1339
+      /* "adios_mpi.pyx":1347
  *         self.attrs = softdict()
  *         for name in self.file.attrs.keys():
  *             if name.startswith(self.name + '/'):             # <<<<<<<<<<<<<<
@@ -21293,7 +21850,7 @@ static int __pyx_pf_9adios_mpi_3var___init__(struct __pyx_obj_9adios_mpi_var *__
  */
     }
 
-    /* "adios_mpi.pyx":1341
+    /* "adios_mpi.pyx":1349
  *             if name.startswith(self.name + '/'):
  *                 self.attrs[name.replace(self.name + '/', '')] = self.file.attrs[name]
  *             if name.startswith('/' + self.name + '/'):             # <<<<<<<<<<<<<<
@@ -21302,65 +21859,85 @@ static int __pyx_pf_9adios_mpi_3var___init__(struct __pyx_obj_9adios_mpi_var *__
  */
     if (unlikely(__pyx_v_name == Py_None)) {
       PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "startswith");
-      __PYX_ERR(0, 1341, __pyx_L1_error)
+      __PYX_ERR(0, 1349, __pyx_L1_error)
     }
-    __pyx_t_1 = PyNumber_Add(__pyx_kp_s_, __pyx_v_self->name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1341, __pyx_L1_error)
+    __pyx_t_1 = PyNumber_Add(__pyx_kp_s_, __pyx_v_self->name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1349, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = PyNumber_Add(__pyx_t_1, __pyx_kp_s_); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1341, __pyx_L1_error)
+    __pyx_t_5 = PyNumber_Add(__pyx_t_1, __pyx_kp_s_); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1349, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_7 = __Pyx_PyStr_Tailmatch(__pyx_v_name, __pyx_t_5, 0, PY_SSIZE_T_MAX, -1); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 1341, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyStr_Tailmatch(__pyx_v_name, __pyx_t_5, 0, PY_SSIZE_T_MAX, -1); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 1349, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     if ((__pyx_t_7 != 0)) {
 
-      /* "adios_mpi.pyx":1342
+      /* "adios_mpi.pyx":1350
  *                 self.attrs[name.replace(self.name + '/', '')] = self.file.attrs[name]
  *             if name.startswith('/' + self.name + '/'):
  *                 self.attrs[name.replace('/' + self.name + '/', '')] = self.file.attrs[name]             # <<<<<<<<<<<<<<
  * 
  *     def __del__(self):
  */
-      __pyx_t_5 = PyObject_GetItem(((PyObject *)__pyx_v_self->file->attrs), __pyx_v_name); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1342, __pyx_L1_error)
+      __pyx_t_5 = PyObject_GetItem(((PyObject *)__pyx_v_self->file->attrs), __pyx_v_name); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1350, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_replace); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1342, __pyx_L1_error)
+      __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_replace); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1350, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_12);
-      __pyx_t_16 = PyNumber_Add(__pyx_kp_s_, __pyx_v_self->name); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1342, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_16);
-      __pyx_t_13 = PyNumber_Add(__pyx_t_16, __pyx_kp_s_); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1342, __pyx_L1_error)
+      __pyx_t_15 = PyNumber_Add(__pyx_kp_s_, __pyx_v_self->name); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1350, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_15);
+      __pyx_t_13 = PyNumber_Add(__pyx_t_15, __pyx_kp_s_); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1350, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_13);
-      __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
-      __pyx_t_16 = NULL;
-      __pyx_t_15 = 0;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_12))) {
-        __pyx_t_16 = PyMethod_GET_SELF(__pyx_t_12);
-        if (likely(__pyx_t_16)) {
+      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
+      __pyx_t_15 = NULL;
+      __pyx_t_3 = 0;
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_12))) {
+        __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_12);
+        if (likely(__pyx_t_15)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12);
-          __Pyx_INCREF(__pyx_t_16);
+          __Pyx_INCREF(__pyx_t_15);
           __Pyx_INCREF(function);
           __Pyx_DECREF_SET(__pyx_t_12, function);
-          __pyx_t_15 = 1;
+          __pyx_t_3 = 1;
         }
       }
-      __pyx_t_14 = PyTuple_New(2+__pyx_t_15); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1342, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_14);
-      if (__pyx_t_16) {
-        __Pyx_GIVEREF(__pyx_t_16); PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_16); __pyx_t_16 = NULL;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_12)) {
+        PyObject *__pyx_temp[3] = {__pyx_t_15, __pyx_t_13, __pyx_kp_s__10};
+        __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_12, __pyx_temp+1-__pyx_t_3, 2+__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1350, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
+        __Pyx_GOTREF(__pyx_t_1);
+        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_12)) {
+        PyObject *__pyx_temp[3] = {__pyx_t_15, __pyx_t_13, __pyx_kp_s__10};
+        __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_12, __pyx_temp+1-__pyx_t_3, 2+__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1350, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
+        __Pyx_GOTREF(__pyx_t_1);
+        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+      } else
+      #endif
+      {
+        __pyx_t_14 = PyTuple_New(2+__pyx_t_3); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1350, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_14);
+        if (__pyx_t_15) {
+          __Pyx_GIVEREF(__pyx_t_15); PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_15); __pyx_t_15 = NULL;
+        }
+        __Pyx_GIVEREF(__pyx_t_13);
+        PyTuple_SET_ITEM(__pyx_t_14, 0+__pyx_t_3, __pyx_t_13);
+        __Pyx_INCREF(__pyx_kp_s__10);
+        __Pyx_GIVEREF(__pyx_kp_s__10);
+        PyTuple_SET_ITEM(__pyx_t_14, 1+__pyx_t_3, __pyx_kp_s__10);
+        __pyx_t_13 = 0;
+        __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_t_14, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1350, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_1);
+        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
       }
-      __Pyx_GIVEREF(__pyx_t_13);
-      PyTuple_SET_ITEM(__pyx_t_14, 0+__pyx_t_15, __pyx_t_13);
-      __Pyx_INCREF(__pyx_kp_s__10);
-      __Pyx_GIVEREF(__pyx_kp_s__10);
-      PyTuple_SET_ITEM(__pyx_t_14, 1+__pyx_t_15, __pyx_kp_s__10);
-      __pyx_t_13 = 0;
-      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_t_14, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1342, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_1);
-      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
       __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
-      if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_self->attrs), __pyx_t_1, __pyx_t_5) < 0)) __PYX_ERR(0, 1342, __pyx_L1_error)
+      if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_self->attrs), __pyx_t_1, __pyx_t_5) < 0)) __PYX_ERR(0, 1350, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-      /* "adios_mpi.pyx":1341
+      /* "adios_mpi.pyx":1349
  *             if name.startswith(self.name + '/'):
  *                 self.attrs[name.replace(self.name + '/', '')] = self.file.attrs[name]
  *             if name.startswith('/' + self.name + '/'):             # <<<<<<<<<<<<<<
@@ -21369,7 +21946,7 @@ static int __pyx_pf_9adios_mpi_3var___init__(struct __pyx_obj_9adios_mpi_var *__
  */
     }
 
-    /* "adios_mpi.pyx":1338
+    /* "adios_mpi.pyx":1346
  * 
  *         self.attrs = softdict()
  *         for name in self.file.attrs.keys():             # <<<<<<<<<<<<<<
@@ -21379,7 +21956,7 @@ static int __pyx_pf_9adios_mpi_3var___init__(struct __pyx_obj_9adios_mpi_var *__
   }
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-  /* "adios_mpi.pyx":1315
+  /* "adios_mpi.pyx":1323
  *             return (self.blockinfo)
  * 
  *     def __init__(self, file file, str name):             # <<<<<<<<<<<<<<
@@ -21397,7 +21974,7 @@ static int __pyx_pf_9adios_mpi_3var___init__(struct __pyx_obj_9adios_mpi_var *__
   __Pyx_XDECREF(__pyx_t_12);
   __Pyx_XDECREF(__pyx_t_13);
   __Pyx_XDECREF(__pyx_t_14);
-  __Pyx_XDECREF(__pyx_t_16);
+  __Pyx_XDECREF(__pyx_t_15);
   __Pyx_AddTraceback("adios_mpi.var.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = -1;
   __pyx_L0:;
@@ -21406,7 +21983,7 @@ static int __pyx_pf_9adios_mpi_3var___init__(struct __pyx_obj_9adios_mpi_var *__
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1344
+/* "adios_mpi.pyx":1352
  *                 self.attrs[name.replace('/' + self.name + '/', '')] = self.file.attrs[name]
  * 
  *     def __del__(self):             # <<<<<<<<<<<<<<
@@ -21434,18 +22011,18 @@ static PyObject *__pyx_pf_9adios_mpi_3var_2__del__(struct __pyx_obj_9adios_mpi_v
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__del__", 0);
 
-  /* "adios_mpi.pyx":1345
+  /* "adios_mpi.pyx":1353
  * 
  *     def __del__(self):
  *         self.close()             # <<<<<<<<<<<<<<
  * 
  *     cpdef close(self):
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_9adios_mpi_var *)__pyx_v_self->__pyx_vtab)->close(__pyx_v_self, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1345, __pyx_L1_error)
+  __pyx_t_1 = ((struct __pyx_vtabstruct_9adios_mpi_var *)__pyx_v_self->__pyx_vtab)->close(__pyx_v_self, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1353, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":1344
+  /* "adios_mpi.pyx":1352
  *                 self.attrs[name.replace('/' + self.name + '/', '')] = self.file.attrs[name]
  * 
  *     def __del__(self):             # <<<<<<<<<<<<<<
@@ -21466,7 +22043,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_2__del__(struct __pyx_obj_9adios_mpi_v
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1347
+/* "adios_mpi.pyx":1355
  *         self.close()
  * 
  *     cpdef close(self):             # <<<<<<<<<<<<<<
@@ -21487,13 +22064,13 @@ static PyObject *__pyx_f_9adios_mpi_3var_close(struct __pyx_obj_9adios_mpi_var *
   if (unlikely(__pyx_skip_dispatch)) ;
   /* Check if overridden in Python */
   else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_close); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1347, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_close); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1355, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_9adios_mpi_3var_5close)) {
       __Pyx_XDECREF(__pyx_r);
       __Pyx_INCREF(__pyx_t_1);
       __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
+      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
         __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
         if (likely(__pyx_t_4)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -21503,10 +22080,10 @@ static PyObject *__pyx_f_9adios_mpi_3var_close(struct __pyx_obj_9adios_mpi_var *
         }
       }
       if (__pyx_t_4) {
-        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1347, __pyx_L1_error)
+        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1355, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       } else {
-        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1347, __pyx_L1_error)
+        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1355, __pyx_L1_error)
       }
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -21518,7 +22095,7 @@ static PyObject *__pyx_f_9adios_mpi_3var_close(struct __pyx_obj_9adios_mpi_var *
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   }
 
-  /* "adios_mpi.pyx":1349
+  /* "adios_mpi.pyx":1357
  *     cpdef close(self):
  *         """ Close and free variable information """
  *         assert self.vp != NULL, 'Not an open var'             # <<<<<<<<<<<<<<
@@ -21529,12 +22106,12 @@ static PyObject *__pyx_f_9adios_mpi_3var_close(struct __pyx_obj_9adios_mpi_var *
   if (unlikely(!Py_OptimizeFlag)) {
     if (unlikely(!((__pyx_v_self->vp != NULL) != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Not_an_open_var);
-      __PYX_ERR(0, 1349, __pyx_L1_error)
+      __PYX_ERR(0, 1357, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "adios_mpi.pyx":1350
+  /* "adios_mpi.pyx":1358
  *         """ Close and free variable information """
  *         assert self.vp != NULL, 'Not an open var'
  *         adios_free_varinfo(self.vp)             # <<<<<<<<<<<<<<
@@ -21543,7 +22120,7 @@ static PyObject *__pyx_f_9adios_mpi_3var_close(struct __pyx_obj_9adios_mpi_var *
  */
   adios_free_varinfo(__pyx_v_self->vp);
 
-  /* "adios_mpi.pyx":1351
+  /* "adios_mpi.pyx":1359
  *         assert self.vp != NULL, 'Not an open var'
  *         adios_free_varinfo(self.vp)
  *         self.vp = NULL             # <<<<<<<<<<<<<<
@@ -21552,7 +22129,7 @@ static PyObject *__pyx_f_9adios_mpi_3var_close(struct __pyx_obj_9adios_mpi_var *
  */
   __pyx_v_self->vp = NULL;
 
-  /* "adios_mpi.pyx":1347
+  /* "adios_mpi.pyx":1355
  *         self.close()
  * 
  *     cpdef close(self):             # <<<<<<<<<<<<<<
@@ -21596,7 +22173,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_4close(struct __pyx_obj_9adios_mpi_var
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("close", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_9adios_mpi_3var_close(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1347, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_9adios_mpi_3var_close(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1355, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -21613,7 +22190,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_4close(struct __pyx_obj_9adios_mpi_var
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1353
+/* "adios_mpi.pyx":1361
  *         self.vp = NULL
  * 
  *     cpdef advance(self):             # <<<<<<<<<<<<<<
@@ -21636,13 +22213,13 @@ static PyObject *__pyx_f_9adios_mpi_3var_advance(struct __pyx_obj_9adios_mpi_var
   if (unlikely(__pyx_skip_dispatch)) ;
   /* Check if overridden in Python */
   else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_advance); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1353, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_advance); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1361, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_9adios_mpi_3var_7advance)) {
       __Pyx_XDECREF(__pyx_r);
       __Pyx_INCREF(__pyx_t_1);
       __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
+      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
         __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
         if (likely(__pyx_t_4)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -21652,10 +22229,10 @@ static PyObject *__pyx_f_9adios_mpi_3var_advance(struct __pyx_obj_9adios_mpi_var
         }
       }
       if (__pyx_t_4) {
-        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1353, __pyx_L1_error)
+        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1361, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       } else {
-        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1353, __pyx_L1_error)
+        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1361, __pyx_L1_error)
       }
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -21667,17 +22244,17 @@ static PyObject *__pyx_f_9adios_mpi_3var_advance(struct __pyx_obj_9adios_mpi_var
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   }
 
-  /* "adios_mpi.pyx":1355
+  /* "adios_mpi.pyx":1363
  *     cpdef advance(self):
  *         """ Update variable information after the stream advanced """
  *         self.vp = adios_inq_var(self.file.fp, self.name)             # <<<<<<<<<<<<<<
  *         assert self.vp != NULL, 'Not a valid var'
  *         self.nsteps = self.vp.nsteps
  */
-  __pyx_t_5 = __Pyx_PyObject_AsString(__pyx_v_self->name); if (unlikely((!__pyx_t_5) && PyErr_Occurred())) __PYX_ERR(0, 1355, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_AsString(__pyx_v_self->name); if (unlikely((!__pyx_t_5) && PyErr_Occurred())) __PYX_ERR(0, 1363, __pyx_L1_error)
   __pyx_v_self->vp = adios_inq_var(__pyx_v_self->file->fp, __pyx_t_5);
 
-  /* "adios_mpi.pyx":1356
+  /* "adios_mpi.pyx":1364
  *         """ Update variable information after the stream advanced """
  *         self.vp = adios_inq_var(self.file.fp, self.name)
  *         assert self.vp != NULL, 'Not a valid var'             # <<<<<<<<<<<<<<
@@ -21688,12 +22265,12 @@ static PyObject *__pyx_f_9adios_mpi_3var_advance(struct __pyx_obj_9adios_mpi_var
   if (unlikely(!Py_OptimizeFlag)) {
     if (unlikely(!((__pyx_v_self->vp != NULL) != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Not_a_valid_var);
-      __PYX_ERR(0, 1356, __pyx_L1_error)
+      __PYX_ERR(0, 1364, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "adios_mpi.pyx":1357
+  /* "adios_mpi.pyx":1365
  *         self.vp = adios_inq_var(self.file.fp, self.name)
  *         assert self.vp != NULL, 'Not a valid var'
  *         self.nsteps = self.vp.nsteps             # <<<<<<<<<<<<<<
@@ -21703,7 +22280,7 @@ static PyObject *__pyx_f_9adios_mpi_3var_advance(struct __pyx_obj_9adios_mpi_var
   __pyx_t_6 = __pyx_v_self->vp->nsteps;
   __pyx_v_self->nsteps = __pyx_t_6;
 
-  /* "adios_mpi.pyx":1353
+  /* "adios_mpi.pyx":1361
  *         self.vp = NULL
  * 
  *     cpdef advance(self):             # <<<<<<<<<<<<<<
@@ -21747,7 +22324,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_6advance(struct __pyx_obj_9adios_mpi_v
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("advance", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_9adios_mpi_3var_advance(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1353, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_9adios_mpi_3var_advance(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1361, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -21764,7 +22341,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_6advance(struct __pyx_obj_9adios_mpi_v
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1359
+/* "adios_mpi.pyx":1367
  *         self.nsteps = self.vp.nsteps
  * 
  *     cpdef read_points(self, tuple points = (), from_steps = None, nsteps = None):             # <<<<<<<<<<<<<<
@@ -21790,12 +22367,12 @@ static PyObject *__pyx_f_9adios_mpi_3var_read_points(struct __pyx_obj_9adios_mpi
   PyObject *__pyx_t_2 = NULL;
   PyObject *__pyx_t_3 = NULL;
   PyObject *__pyx_t_4 = NULL;
-  Py_ssize_t __pyx_t_5;
+  int __pyx_t_5;
   PyObject *__pyx_t_6 = NULL;
   int __pyx_t_7;
   int __pyx_t_8;
   Py_ssize_t __pyx_t_9;
-  int __pyx_t_10;
+  Py_ssize_t __pyx_t_10;
   int __pyx_t_11;
   __Pyx_RefNannySetupContext("read_points", 0);
   if (__pyx_optional_args) {
@@ -21816,14 +22393,14 @@ static PyObject *__pyx_f_9adios_mpi_3var_read_points(struct __pyx_obj_9adios_mpi
   if (unlikely(__pyx_skip_dispatch)) ;
   /* Check if overridden in Python */
   else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_read_points); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1359, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_read_points); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1367, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_9adios_mpi_3var_9read_points)) {
       __Pyx_XDECREF(__pyx_r);
       __Pyx_INCREF(__pyx_t_1);
       __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
       __pyx_t_5 = 0;
-      if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
+      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
         __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
         if (likely(__pyx_t_4)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -21833,23 +22410,41 @@ static PyObject *__pyx_f_9adios_mpi_3var_read_points(struct __pyx_obj_9adios_mpi
           __pyx_t_5 = 1;
         }
       }
-      __pyx_t_6 = PyTuple_New(3+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1359, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_6);
-      if (__pyx_t_4) {
-        __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_3)) {
+        PyObject *__pyx_temp[4] = {__pyx_t_4, __pyx_v_points, __pyx_v_from_steps, __pyx_v_nsteps};
+        __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 3+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1367, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
+        PyObject *__pyx_temp[4] = {__pyx_t_4, __pyx_v_points, __pyx_v_from_steps, __pyx_v_nsteps};
+        __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 3+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1367, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+      } else
+      #endif
+      {
+        __pyx_t_6 = PyTuple_New(3+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1367, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_6);
+        if (__pyx_t_4) {
+          __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL;
+        }
+        __Pyx_INCREF(__pyx_v_points);
+        __Pyx_GIVEREF(__pyx_v_points);
+        PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, __pyx_v_points);
+        __Pyx_INCREF(__pyx_v_from_steps);
+        __Pyx_GIVEREF(__pyx_v_from_steps);
+        PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, __pyx_v_from_steps);
+        __Pyx_INCREF(__pyx_v_nsteps);
+        __Pyx_GIVEREF(__pyx_v_nsteps);
+        PyTuple_SET_ITEM(__pyx_t_6, 2+__pyx_t_5, __pyx_v_nsteps);
+        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1367, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       }
-      __Pyx_INCREF(__pyx_v_points);
-      __Pyx_GIVEREF(__pyx_v_points);
-      PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, __pyx_v_points);
-      __Pyx_INCREF(__pyx_v_from_steps);
-      __Pyx_GIVEREF(__pyx_v_from_steps);
-      PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, __pyx_v_from_steps);
-      __Pyx_INCREF(__pyx_v_nsteps);
-      __Pyx_GIVEREF(__pyx_v_nsteps);
-      PyTuple_SET_ITEM(__pyx_t_6, 2+__pyx_t_5, __pyx_v_nsteps);
-      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1359, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_2);
-      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_r = __pyx_t_2;
       __pyx_t_2 = 0;
@@ -21859,7 +22454,7 @@ static PyObject *__pyx_f_9adios_mpi_3var_read_points(struct __pyx_obj_9adios_mpi
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   }
 
-  /* "adios_mpi.pyx":1375
+  /* "adios_mpi.pyx":1383
  *             IndexError: If dimension is mismatched or out of the boundary.
  *         """
  *         if from_steps is None:             # <<<<<<<<<<<<<<
@@ -21870,7 +22465,7 @@ static PyObject *__pyx_f_9adios_mpi_3var_read_points(struct __pyx_obj_9adios_mpi
   __pyx_t_8 = (__pyx_t_7 != 0);
   if (__pyx_t_8) {
 
-    /* "adios_mpi.pyx":1376
+    /* "adios_mpi.pyx":1384
  *         """
  *         if from_steps is None:
  *             from_steps = 0 ##self.file.current_step             # <<<<<<<<<<<<<<
@@ -21880,7 +22475,7 @@ static PyObject *__pyx_f_9adios_mpi_3var_read_points(struct __pyx_obj_9adios_mpi
     __Pyx_INCREF(__pyx_int_0);
     __Pyx_DECREF_SET(__pyx_v_from_steps, __pyx_int_0);
 
-    /* "adios_mpi.pyx":1375
+    /* "adios_mpi.pyx":1383
  *             IndexError: If dimension is mismatched or out of the boundary.
  *         """
  *         if from_steps is None:             # <<<<<<<<<<<<<<
@@ -21889,7 +22484,7 @@ static PyObject *__pyx_f_9adios_mpi_3var_read_points(struct __pyx_obj_9adios_mpi
  */
   }
 
-  /* "adios_mpi.pyx":1378
+  /* "adios_mpi.pyx":1386
  *             from_steps = 0 ##self.file.current_step
  * 
  *         if nsteps is None:             # <<<<<<<<<<<<<<
@@ -21900,25 +22495,25 @@ static PyObject *__pyx_f_9adios_mpi_3var_read_points(struct __pyx_obj_9adios_mpi
   __pyx_t_7 = (__pyx_t_8 != 0);
   if (__pyx_t_7) {
 
-    /* "adios_mpi.pyx":1379
+    /* "adios_mpi.pyx":1387
  * 
  *         if nsteps is None:
  *             nsteps = self.file.last_step - from_steps + 1             # <<<<<<<<<<<<<<
  * 
  *         assert self.dtype is not None, 'Data type is not supported yet'
  */
-    __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->file->last_step); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1379, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->file->last_step); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1387, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = PyNumber_Subtract(__pyx_t_1, __pyx_v_from_steps); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1379, __pyx_L1_error)
+    __pyx_t_2 = PyNumber_Subtract(__pyx_t_1, __pyx_v_from_steps); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1387, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = __Pyx_PyInt_AddObjC(__pyx_t_2, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1379, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyInt_AddObjC(__pyx_t_2, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1387, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF_SET(__pyx_v_nsteps, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "adios_mpi.pyx":1378
+    /* "adios_mpi.pyx":1386
  *             from_steps = 0 ##self.file.current_step
  * 
  *         if nsteps is None:             # <<<<<<<<<<<<<<
@@ -21927,7 +22522,7 @@ static PyObject *__pyx_f_9adios_mpi_3var_read_points(struct __pyx_obj_9adios_mpi
  */
   }
 
-  /* "adios_mpi.pyx":1381
+  /* "adios_mpi.pyx":1389
  *             nsteps = self.file.last_step - from_steps + 1
  * 
  *         assert self.dtype is not None, 'Data type is not supported yet'             # <<<<<<<<<<<<<<
@@ -21939,12 +22534,12 @@ static PyObject *__pyx_f_9adios_mpi_3var_read_points(struct __pyx_obj_9adios_mpi
     __pyx_t_7 = (((PyObject *)__pyx_v_self->dtype) != Py_None);
     if (unlikely(!(__pyx_t_7 != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Data_type_is_not_supported_yet);
-      __PYX_ERR(0, 1381, __pyx_L1_error)
+      __PYX_ERR(0, 1389, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "adios_mpi.pyx":1383
+  /* "adios_mpi.pyx":1391
  *         assert self.dtype is not None, 'Data type is not supported yet'
  * 
  *         if (self.nsteps > 0) and (from_steps + nsteps > self.nsteps):             # <<<<<<<<<<<<<<
@@ -21957,27 +22552,27 @@ static PyObject *__pyx_f_9adios_mpi_3var_read_points(struct __pyx_obj_9adios_mpi
     __pyx_t_7 = __pyx_t_8;
     goto __pyx_L6_bool_binop_done;
   }
-  __pyx_t_1 = PyNumber_Add(__pyx_v_from_steps, __pyx_v_nsteps); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1383, __pyx_L1_error)
+  __pyx_t_1 = PyNumber_Add(__pyx_v_from_steps, __pyx_v_nsteps); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1391, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_self->nsteps); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1383, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_self->nsteps); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1391, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_2, Py_GT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1383, __pyx_L1_error)
+  __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_2, Py_GT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1391, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 1383, __pyx_L1_error)
+  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 1391, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_t_7 = __pyx_t_8;
   __pyx_L6_bool_binop_done:;
   if (__pyx_t_7) {
 
-    /* "adios_mpi.pyx":1384
+    /* "adios_mpi.pyx":1392
  * 
  *         if (self.nsteps > 0) and (from_steps + nsteps > self.nsteps):
  *             raise IndexError('Step index is out of range: from_steps=%r, nsteps=%r' % (from_steps, nsteps))             # <<<<<<<<<<<<<<
  * 
  *         if not isinstance(points, tuple):
  */
-    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1384, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1392, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_from_steps);
     __Pyx_GIVEREF(__pyx_v_from_steps);
@@ -21985,22 +22580,22 @@ static PyObject *__pyx_f_9adios_mpi_3var_read_points(struct __pyx_obj_9adios_mpi
     __Pyx_INCREF(__pyx_v_nsteps);
     __Pyx_GIVEREF(__pyx_v_nsteps);
     PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_nsteps);
-    __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_Step_index_is_out_of_range_from, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1384, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_Step_index_is_out_of_range_from, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1392, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1384, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1392, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_GIVEREF(__pyx_t_2);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
     __pyx_t_2 = 0;
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1384, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1392, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __PYX_ERR(0, 1384, __pyx_L1_error)
+    __PYX_ERR(0, 1392, __pyx_L1_error)
 
-    /* "adios_mpi.pyx":1383
+    /* "adios_mpi.pyx":1391
  *         assert self.dtype is not None, 'Data type is not supported yet'
  * 
  *         if (self.nsteps > 0) and (from_steps + nsteps > self.nsteps):             # <<<<<<<<<<<<<<
@@ -22009,7 +22604,7 @@ static PyObject *__pyx_f_9adios_mpi_3var_read_points(struct __pyx_obj_9adios_mpi
  */
   }
 
-  /* "adios_mpi.pyx":1386
+  /* "adios_mpi.pyx":1394
  *             raise IndexError('Step index is out of range: from_steps=%r, nsteps=%r' % (from_steps, nsteps))
  * 
  *         if not isinstance(points, tuple):             # <<<<<<<<<<<<<<
@@ -22020,14 +22615,14 @@ static PyObject *__pyx_f_9adios_mpi_3var_read_points(struct __pyx_obj_9adios_mpi
   __pyx_t_8 = ((!(__pyx_t_7 != 0)) != 0);
   if (__pyx_t_8) {
 
-    /* "adios_mpi.pyx":1387
+    /* "adios_mpi.pyx":1395
  * 
  *         if not isinstance(points, tuple):
  *             points = (points,)             # <<<<<<<<<<<<<<
  * 
  *         if len(points) > 1:
  */
-    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1387, __pyx_L1_error)
+    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1395, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_INCREF(__pyx_v_points);
     __Pyx_GIVEREF(__pyx_v_points);
@@ -22035,7 +22630,7 @@ static PyObject *__pyx_f_9adios_mpi_3var_read_points(struct __pyx_obj_9adios_mpi
     __Pyx_DECREF_SET(__pyx_v_points, ((PyObject*)__pyx_t_2));
     __pyx_t_2 = 0;
 
-    /* "adios_mpi.pyx":1386
+    /* "adios_mpi.pyx":1394
  *             raise IndexError('Step index is out of range: from_steps=%r, nsteps=%r' % (from_steps, nsteps))
  * 
  *         if not isinstance(points, tuple):             # <<<<<<<<<<<<<<
@@ -22044,7 +22639,7 @@ static PyObject *__pyx_f_9adios_mpi_3var_read_points(struct __pyx_obj_9adios_mpi
  */
   }
 
-  /* "adios_mpi.pyx":1389
+  /* "adios_mpi.pyx":1397
  *             points = (points,)
  * 
  *         if len(points) > 1:             # <<<<<<<<<<<<<<
@@ -22053,13 +22648,13 @@ static PyObject *__pyx_f_9adios_mpi_3var_read_points(struct __pyx_obj_9adios_mpi
  */
   if (unlikely(__pyx_v_points == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
-    __PYX_ERR(0, 1389, __pyx_L1_error)
+    __PYX_ERR(0, 1397, __pyx_L1_error)
   }
-  __pyx_t_5 = PyTuple_GET_SIZE(__pyx_v_points); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 1389, __pyx_L1_error)
-  __pyx_t_8 = ((__pyx_t_5 > 1) != 0);
+  __pyx_t_9 = PyTuple_GET_SIZE(__pyx_v_points); if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 1397, __pyx_L1_error)
+  __pyx_t_8 = ((__pyx_t_9 > 1) != 0);
   if (__pyx_t_8) {
 
-    /* "adios_mpi.pyx":1390
+    /* "adios_mpi.pyx":1398
  * 
  *         if len(points) > 1:
  *             plen = len(points[0])             # <<<<<<<<<<<<<<
@@ -22068,86 +22663,86 @@ static PyObject *__pyx_f_9adios_mpi_3var_read_points(struct __pyx_obj_9adios_mpi
  */
     if (unlikely(__pyx_v_points == Py_None)) {
       PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-      __PYX_ERR(0, 1390, __pyx_L1_error)
+      __PYX_ERR(0, 1398, __pyx_L1_error)
     }
-    __pyx_t_2 = __Pyx_GetItemInt_Tuple(__pyx_v_points, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1390, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_GetItemInt_Tuple(__pyx_v_points, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1398, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_5 = PyObject_Length(__pyx_t_2); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 1390, __pyx_L1_error)
+    __pyx_t_9 = PyObject_Length(__pyx_t_2); if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 1398, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_v_plen = __pyx_t_5;
+    __pyx_v_plen = __pyx_t_9;
 
-    /* "adios_mpi.pyx":1391
+    /* "adios_mpi.pyx":1399
  *         if len(points) > 1:
  *             plen = len(points[0])
  *             if not all([len(x) == plen for x in points]):             # <<<<<<<<<<<<<<
  *                 raise IndexError('All points must have the same length %r' % (points,))
  * 
  */
-    __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1391, __pyx_L1_error)
+    __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1399, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     if (unlikely(__pyx_v_points == Py_None)) {
       PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
-      __PYX_ERR(0, 1391, __pyx_L1_error)
+      __PYX_ERR(0, 1399, __pyx_L1_error)
     }
-    __pyx_t_3 = __pyx_v_points; __Pyx_INCREF(__pyx_t_3); __pyx_t_5 = 0;
+    __pyx_t_3 = __pyx_v_points; __Pyx_INCREF(__pyx_t_3); __pyx_t_9 = 0;
     for (;;) {
-      if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
-      #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 1391, __pyx_L1_error)
+      if (__pyx_t_9 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
+      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+      __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_9); __Pyx_INCREF(__pyx_t_1); __pyx_t_9++; if (unlikely(0 < 0)) __PYX_ERR(0, 1399, __pyx_L1_error)
       #else
-      __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1391, __pyx_L1_error)
+      __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1399, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       #endif
       __Pyx_XDECREF_SET(__pyx_v_x, __pyx_t_1);
       __pyx_t_1 = 0;
-      __pyx_t_9 = PyObject_Length(__pyx_v_x); if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 1391, __pyx_L1_error)
-      __pyx_t_1 = __Pyx_PyBool_FromLong((__pyx_t_9 == __pyx_v_plen)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1391, __pyx_L1_error)
+      __pyx_t_10 = PyObject_Length(__pyx_v_x); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 1399, __pyx_L1_error)
+      __pyx_t_1 = __Pyx_PyBool_FromLong((__pyx_t_10 == __pyx_v_plen)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1399, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
-      if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_1))) __PYX_ERR(0, 1391, __pyx_L1_error)
+      if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_1))) __PYX_ERR(0, 1399, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     }
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1391, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1399, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_GIVEREF(__pyx_t_2);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
     __pyx_t_2 = 0;
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_all, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1391, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_all, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1399, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 1391, __pyx_L1_error)
+    __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 1399, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __pyx_t_7 = ((!__pyx_t_8) != 0);
     if (__pyx_t_7) {
 
-      /* "adios_mpi.pyx":1392
+      /* "adios_mpi.pyx":1400
  *             plen = len(points[0])
  *             if not all([len(x) == plen for x in points]):
  *                 raise IndexError('All points must have the same length %r' % (points,))             # <<<<<<<<<<<<<<
  * 
  *         cpdef uint64_t ndim = self.ndim
  */
-      __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1392, __pyx_L1_error)
+      __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1400, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_INCREF(__pyx_v_points);
       __Pyx_GIVEREF(__pyx_v_points);
       PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_points);
-      __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_All_points_must_have_the_same_le, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1392, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_All_points_must_have_the_same_le, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1400, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-      __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1392, __pyx_L1_error)
+      __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1400, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_GIVEREF(__pyx_t_3);
       PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
       __pyx_t_3 = 0;
-      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1392, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1400, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       __Pyx_Raise(__pyx_t_3, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      __PYX_ERR(0, 1392, __pyx_L1_error)
+      __PYX_ERR(0, 1400, __pyx_L1_error)
 
-      /* "adios_mpi.pyx":1391
+      /* "adios_mpi.pyx":1399
  *         if len(points) > 1:
  *             plen = len(points[0])
  *             if not all([len(x) == plen for x in points]):             # <<<<<<<<<<<<<<
@@ -22156,7 +22751,7 @@ static PyObject *__pyx_f_9adios_mpi_3var_read_points(struct __pyx_obj_9adios_mpi
  */
     }
 
-    /* "adios_mpi.pyx":1389
+    /* "adios_mpi.pyx":1397
  *             points = (points,)
  * 
  *         if len(points) > 1:             # <<<<<<<<<<<<<<
@@ -22165,17 +22760,17 @@ static PyObject *__pyx_f_9adios_mpi_3var_read_points(struct __pyx_obj_9adios_mpi
  */
   }
 
-  /* "adios_mpi.pyx":1394
+  /* "adios_mpi.pyx":1402
  *                 raise IndexError('All points must have the same length %r' % (points,))
  * 
  *         cpdef uint64_t ndim = self.ndim             # <<<<<<<<<<<<<<
  *         cpdef uint64_t npoints = len(points)
  *         ##print 'ndim, npoints = %r, %r' % (ndim, npoints)
  */
-  __pyx_t_10 = __pyx_v_self->ndim;
-  __pyx_v_ndim = __pyx_t_10;
+  __pyx_t_5 = __pyx_v_self->ndim;
+  __pyx_v_ndim = __pyx_t_5;
 
-  /* "adios_mpi.pyx":1395
+  /* "adios_mpi.pyx":1403
  * 
  *         cpdef uint64_t ndim = self.ndim
  *         cpdef uint64_t npoints = len(points)             # <<<<<<<<<<<<<<
@@ -22184,87 +22779,87 @@ static PyObject *__pyx_f_9adios_mpi_3var_read_points(struct __pyx_obj_9adios_mpi
  */
   if (unlikely(__pyx_v_points == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
-    __PYX_ERR(0, 1395, __pyx_L1_error)
+    __PYX_ERR(0, 1403, __pyx_L1_error)
   }
-  __pyx_t_5 = PyTuple_GET_SIZE(__pyx_v_points); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 1395, __pyx_L1_error)
-  __pyx_v_npoints = __pyx_t_5;
+  __pyx_t_9 = PyTuple_GET_SIZE(__pyx_v_points); if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 1403, __pyx_L1_error)
+  __pyx_v_npoints = __pyx_t_9;
 
-  /* "adios_mpi.pyx":1398
+  /* "adios_mpi.pyx":1406
  *         ##print 'ndim, npoints = %r, %r' % (ndim, npoints)
  * 
  *         cdef np.ndarray nppoints = np.array(points, dtype=np.int64, order='C')             # <<<<<<<<<<<<<<
  *         ##print 'nppoints.ndim = %r' % (nppoints.ndim)
  *         ##print 'nppoints.shape = (%r, %r)' % (nppoints.shape[0], nppoints.shape[1])
  */
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1398, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1406, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_array); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1398, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_array); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1406, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1398, __pyx_L1_error)
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1406, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_v_points);
   __Pyx_GIVEREF(__pyx_v_points);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_points);
-  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1398, __pyx_L1_error)
+  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1406, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1398, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1406, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_int64); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1398, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_int64); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1406, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 1398, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 1406, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_order, __pyx_n_s_C) < 0) __PYX_ERR(0, 1398, __pyx_L1_error)
-  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1398, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_order, __pyx_n_s_C) < 0) __PYX_ERR(0, 1406, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1406, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1398, __pyx_L1_error)
+  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1406, __pyx_L1_error)
   __pyx_v_nppoints = ((PyArrayObject *)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "adios_mpi.pyx":1402
+  /* "adios_mpi.pyx":1410
  *         ##print 'nppoints.shape = (%r, %r)' % (nppoints.shape[0], nppoints.shape[1])
  * 
  *         cdef np.ndarray var = np.zeros((npoints * nsteps,), dtype=self.dtype)             # <<<<<<<<<<<<<<
  *         ##print 'nppoints.ndim = %r' % (nppoints.ndim)
  *         ##print 'nppoints.shape = (%r, %r)' % (nppoints.shape[0], nppoints.shape[1])
  */
-  __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1402, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1410, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_zeros); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1402, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_zeros); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1410, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_4 = __Pyx_PyInt_From_uint64_t(__pyx_v_npoints); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1402, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyInt_From_uint64_t(__pyx_v_npoints); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1410, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_3 = PyNumber_Multiply(__pyx_t_4, __pyx_v_nsteps); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1402, __pyx_L1_error)
+  __pyx_t_3 = PyNumber_Multiply(__pyx_t_4, __pyx_v_nsteps); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1410, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1402, __pyx_L1_error)
+  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1410, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
   __pyx_t_3 = 0;
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1402, __pyx_L1_error)
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1410, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_GIVEREF(__pyx_t_4);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);
   __pyx_t_4 = 0;
-  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1402, __pyx_L1_error)
+  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1410, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, ((PyObject *)__pyx_v_self->dtype)) < 0) __PYX_ERR(0, 1402, __pyx_L1_error)
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1402, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, ((PyObject *)__pyx_v_self->dtype)) < 0) __PYX_ERR(0, 1410, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1410, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1402, __pyx_L1_error)
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1410, __pyx_L1_error)
   __pyx_v_var = ((PyArrayObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "adios_mpi.pyx":1407
+  /* "adios_mpi.pyx":1415
  * 
  *         cdef ADIOS_SELECTION * sel
  *         sel = adios_selection_points (ndim, npoints, <uint64_t *> nppoints.data)             # <<<<<<<<<<<<<<
@@ -22273,18 +22868,18 @@ static PyObject *__pyx_f_9adios_mpi_3var_read_points(struct __pyx_obj_9adios_mpi
  */
   __pyx_v_sel = adios_selection_points(__pyx_v_ndim, __pyx_v_npoints, ((uint64_t *)__pyx_v_nppoints->data));
 
-  /* "adios_mpi.pyx":1409
+  /* "adios_mpi.pyx":1417
  *         sel = adios_selection_points (ndim, npoints, <uint64_t *> nppoints.data)
  * 
  *         adios_schedule_read_byid (self.file.fp, sel, self.vp.varid, from_steps, nsteps, <void *> var.data)             # <<<<<<<<<<<<<<
  *         adios_perform_reads(self.file.fp, 1)
  *         adios_selection_delete(sel)
  */
-  __pyx_t_10 = __Pyx_PyInt_As_int(__pyx_v_from_steps); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1409, __pyx_L1_error)
-  __pyx_t_11 = __Pyx_PyInt_As_int(__pyx_v_nsteps); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1409, __pyx_L1_error)
-  adios_schedule_read_byid(__pyx_v_self->file->fp, __pyx_v_sel, __pyx_v_self->vp->varid, __pyx_t_10, __pyx_t_11, ((void *)__pyx_v_var->data));
+  __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_v_from_steps); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1417, __pyx_L1_error)
+  __pyx_t_11 = __Pyx_PyInt_As_int(__pyx_v_nsteps); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1417, __pyx_L1_error)
+  adios_schedule_read_byid(__pyx_v_self->file->fp, __pyx_v_sel, __pyx_v_self->vp->varid, __pyx_t_5, __pyx_t_11, ((void *)__pyx_v_var->data));
 
-  /* "adios_mpi.pyx":1410
+  /* "adios_mpi.pyx":1418
  * 
  *         adios_schedule_read_byid (self.file.fp, sel, self.vp.varid, from_steps, nsteps, <void *> var.data)
  *         adios_perform_reads(self.file.fp, 1)             # <<<<<<<<<<<<<<
@@ -22293,7 +22888,7 @@ static PyObject *__pyx_f_9adios_mpi_3var_read_points(struct __pyx_obj_9adios_mpi
  */
   adios_perform_reads(__pyx_v_self->file->fp, 1);
 
-  /* "adios_mpi.pyx":1411
+  /* "adios_mpi.pyx":1419
  *         adios_schedule_read_byid (self.file.fp, sel, self.vp.varid, from_steps, nsteps, <void *> var.data)
  *         adios_perform_reads(self.file.fp, 1)
  *         adios_selection_delete(sel)             # <<<<<<<<<<<<<<
@@ -22302,7 +22897,7 @@ static PyObject *__pyx_f_9adios_mpi_3var_read_points(struct __pyx_obj_9adios_mpi
  */
   adios_selection_delete(__pyx_v_sel);
 
-  /* "adios_mpi.pyx":1413
+  /* "adios_mpi.pyx":1421
  *         adios_selection_delete(sel)
  * 
  *         return var             # <<<<<<<<<<<<<<
@@ -22314,7 +22909,7 @@ static PyObject *__pyx_f_9adios_mpi_3var_read_points(struct __pyx_obj_9adios_mpi
   __pyx_r = ((PyObject *)__pyx_v_var);
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":1359
+  /* "adios_mpi.pyx":1367
  *         self.nsteps = self.vp.nsteps
  * 
  *     cpdef read_points(self, tuple points = (), from_steps = None, nsteps = None):             # <<<<<<<<<<<<<<
@@ -22388,7 +22983,7 @@ static PyObject *__pyx_pw_9adios_mpi_3var_9read_points(PyObject *__pyx_v_self, P
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "read_points") < 0)) __PYX_ERR(0, 1359, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "read_points") < 0)) __PYX_ERR(0, 1367, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -22405,13 +23000,13 @@ static PyObject *__pyx_pw_9adios_mpi_3var_9read_points(PyObject *__pyx_v_self, P
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("read_points", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1359, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("read_points", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1367, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.var.read_points", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_points), (&PyTuple_Type), 1, "points", 1))) __PYX_ERR(0, 1359, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_points), (&PyTuple_Type), 1, "points", 1))) __PYX_ERR(0, 1367, __pyx_L1_error)
   __pyx_r = __pyx_pf_9adios_mpi_3var_8read_points(((struct __pyx_obj_9adios_mpi_var *)__pyx_v_self), __pyx_v_points, __pyx_v_from_steps, __pyx_v_nsteps);
 
   /* function exit code */
@@ -22434,7 +23029,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_8read_points(struct __pyx_obj_9adios_m
   __pyx_t_2.points = __pyx_v_points;
   __pyx_t_2.from_steps = __pyx_v_from_steps;
   __pyx_t_2.nsteps = __pyx_v_nsteps;
-  __pyx_t_1 = __pyx_vtabptr_9adios_mpi_var->read_points(__pyx_v_self, 1, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1359, __pyx_L1_error)
+  __pyx_t_1 = __pyx_vtabptr_9adios_mpi_var->read_points(__pyx_v_self, 1, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1367, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -22451,7 +23046,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_8read_points(struct __pyx_obj_9adios_m
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1415
+/* "adios_mpi.pyx":1423
  *         return var
  * 
  *     cpdef read_writeblock(self, int rank, from_steps = None, nsteps = None):             # <<<<<<<<<<<<<<
@@ -22474,13 +23069,12 @@ static PyObject *__pyx_f_9adios_mpi_3var_read_writeblock(struct __pyx_obj_9adios
   PyObject *__pyx_t_3 = NULL;
   PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
-  Py_ssize_t __pyx_t_6;
+  int __pyx_t_6;
   PyObject *__pyx_t_7 = NULL;
   int __pyx_t_8;
   int __pyx_t_9;
   int __pyx_t_10;
   int __pyx_t_11;
-  int __pyx_t_12;
   __Pyx_RefNannySetupContext("read_writeblock", 0);
   if (__pyx_optional_args) {
     if (__pyx_optional_args->__pyx_n > 0) {
@@ -22496,16 +23090,16 @@ static PyObject *__pyx_f_9adios_mpi_3var_read_writeblock(struct __pyx_obj_9adios
   if (unlikely(__pyx_skip_dispatch)) ;
   /* Check if overridden in Python */
   else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_read_writeblock); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1415, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_read_writeblock); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1423, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_9adios_mpi_3var_11read_writeblock)) {
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_rank); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1415, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_rank); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1423, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_INCREF(__pyx_t_1);
       __pyx_t_4 = __pyx_t_1; __pyx_t_5 = NULL;
       __pyx_t_6 = 0;
-      if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_4))) {
+      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
         __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
         if (likely(__pyx_t_5)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
@@ -22515,23 +23109,43 @@ static PyObject *__pyx_f_9adios_mpi_3var_read_writeblock(struct __pyx_obj_9adios
           __pyx_t_6 = 1;
         }
       }
-      __pyx_t_7 = PyTuple_New(3+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1415, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_7);
-      if (__pyx_t_5) {
-        __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5); __pyx_t_5 = NULL;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_4)) {
+        PyObject *__pyx_temp[4] = {__pyx_t_5, __pyx_t_3, __pyx_v_from_steps, __pyx_v_nsteps};
+        __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1423, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
+        PyObject *__pyx_temp[4] = {__pyx_t_5, __pyx_t_3, __pyx_v_from_steps, __pyx_v_nsteps};
+        __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1423, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      } else
+      #endif
+      {
+        __pyx_t_7 = PyTuple_New(3+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1423, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_7);
+        if (__pyx_t_5) {
+          __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5); __pyx_t_5 = NULL;
+        }
+        __Pyx_GIVEREF(__pyx_t_3);
+        PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, __pyx_t_3);
+        __Pyx_INCREF(__pyx_v_from_steps);
+        __Pyx_GIVEREF(__pyx_v_from_steps);
+        PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_v_from_steps);
+        __Pyx_INCREF(__pyx_v_nsteps);
+        __Pyx_GIVEREF(__pyx_v_nsteps);
+        PyTuple_SET_ITEM(__pyx_t_7, 2+__pyx_t_6, __pyx_v_nsteps);
+        __pyx_t_3 = 0;
+        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1423, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       }
-      __Pyx_GIVEREF(__pyx_t_3);
-      PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, __pyx_t_3);
-      __Pyx_INCREF(__pyx_v_from_steps);
-      __Pyx_GIVEREF(__pyx_v_from_steps);
-      PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_v_from_steps);
-      __Pyx_INCREF(__pyx_v_nsteps);
-      __Pyx_GIVEREF(__pyx_v_nsteps);
-      PyTuple_SET_ITEM(__pyx_t_7, 2+__pyx_t_6, __pyx_v_nsteps);
-      __pyx_t_3 = 0;
-      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1415, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_2);
-      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __pyx_r = __pyx_t_2;
       __pyx_t_2 = 0;
@@ -22541,7 +23155,7 @@ static PyObject *__pyx_f_9adios_mpi_3var_read_writeblock(struct __pyx_obj_9adios
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   }
 
-  /* "adios_mpi.pyx":1431
+  /* "adios_mpi.pyx":1439
  *             IndexError: If dimension is mismatched or out of the boundary.
  *         """
  *         if from_steps is None:             # <<<<<<<<<<<<<<
@@ -22552,7 +23166,7 @@ static PyObject *__pyx_f_9adios_mpi_3var_read_writeblock(struct __pyx_obj_9adios
   __pyx_t_9 = (__pyx_t_8 != 0);
   if (__pyx_t_9) {
 
-    /* "adios_mpi.pyx":1432
+    /* "adios_mpi.pyx":1440
  *         """
  *         if from_steps is None:
  *             from_steps = 0 ##self.file.current_step             # <<<<<<<<<<<<<<
@@ -22562,7 +23176,7 @@ static PyObject *__pyx_f_9adios_mpi_3var_read_writeblock(struct __pyx_obj_9adios
     __Pyx_INCREF(__pyx_int_0);
     __Pyx_DECREF_SET(__pyx_v_from_steps, __pyx_int_0);
 
-    /* "adios_mpi.pyx":1431
+    /* "adios_mpi.pyx":1439
  *             IndexError: If dimension is mismatched or out of the boundary.
  *         """
  *         if from_steps is None:             # <<<<<<<<<<<<<<
@@ -22571,7 +23185,7 @@ static PyObject *__pyx_f_9adios_mpi_3var_read_writeblock(struct __pyx_obj_9adios
  */
   }
 
-  /* "adios_mpi.pyx":1434
+  /* "adios_mpi.pyx":1442
  *             from_steps = 0 ##self.file.current_step
  * 
  *         if nsteps is None:             # <<<<<<<<<<<<<<
@@ -22582,25 +23196,25 @@ static PyObject *__pyx_f_9adios_mpi_3var_read_writeblock(struct __pyx_obj_9adios
   __pyx_t_8 = (__pyx_t_9 != 0);
   if (__pyx_t_8) {
 
-    /* "adios_mpi.pyx":1435
+    /* "adios_mpi.pyx":1443
  * 
  *         if nsteps is None:
  *             nsteps = self.file.last_step - from_steps + 1             # <<<<<<<<<<<<<<
  * 
  *         assert self.dtype is not None, 'Data type is not supported yet'
  */
-    __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->file->last_step); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1435, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->file->last_step); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1443, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = PyNumber_Subtract(__pyx_t_1, __pyx_v_from_steps); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1435, __pyx_L1_error)
+    __pyx_t_2 = PyNumber_Subtract(__pyx_t_1, __pyx_v_from_steps); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1443, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = __Pyx_PyInt_AddObjC(__pyx_t_2, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1435, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyInt_AddObjC(__pyx_t_2, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1443, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF_SET(__pyx_v_nsteps, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "adios_mpi.pyx":1434
+    /* "adios_mpi.pyx":1442
  *             from_steps = 0 ##self.file.current_step
  * 
  *         if nsteps is None:             # <<<<<<<<<<<<<<
@@ -22609,7 +23223,7 @@ static PyObject *__pyx_f_9adios_mpi_3var_read_writeblock(struct __pyx_obj_9adios
  */
   }
 
-  /* "adios_mpi.pyx":1437
+  /* "adios_mpi.pyx":1445
  *             nsteps = self.file.last_step - from_steps + 1
  * 
  *         assert self.dtype is not None, 'Data type is not supported yet'             # <<<<<<<<<<<<<<
@@ -22621,12 +23235,12 @@ static PyObject *__pyx_f_9adios_mpi_3var_read_writeblock(struct __pyx_obj_9adios
     __pyx_t_8 = (((PyObject *)__pyx_v_self->dtype) != Py_None);
     if (unlikely(!(__pyx_t_8 != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Data_type_is_not_supported_yet);
-      __PYX_ERR(0, 1437, __pyx_L1_error)
+      __PYX_ERR(0, 1445, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "adios_mpi.pyx":1438
+  /* "adios_mpi.pyx":1446
  * 
  *         assert self.dtype is not None, 'Data type is not supported yet'
  *         assert rank < self.vp.sum_nblocks, 'Rank is out of range (nblock=%r)' % (self.vp.sum_nblocks)             # <<<<<<<<<<<<<<
@@ -22636,19 +23250,19 @@ static PyObject *__pyx_f_9adios_mpi_3var_read_writeblock(struct __pyx_obj_9adios
   #ifndef CYTHON_WITHOUT_ASSERTIONS
   if (unlikely(!Py_OptimizeFlag)) {
     if (unlikely(!((__pyx_v_rank < __pyx_v_self->vp->sum_nblocks) != 0))) {
-      __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->vp->sum_nblocks); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1438, __pyx_L1_error)
+      __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->vp->sum_nblocks); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1446, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
-      __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_Rank_is_out_of_range_nblock_r, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1438, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_Rank_is_out_of_range_nblock_r, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1446, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-      __PYX_ERR(0, 1438, __pyx_L1_error)
+      __PYX_ERR(0, 1446, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "adios_mpi.pyx":1440
+  /* "adios_mpi.pyx":1448
  *         assert rank < self.vp.sum_nblocks, 'Rank is out of range (nblock=%r)' % (self.vp.sum_nblocks)
  * 
  *         if (self.nsteps > 0) and (from_steps + nsteps > self.nsteps):             # <<<<<<<<<<<<<<
@@ -22661,27 +23275,27 @@ static PyObject *__pyx_f_9adios_mpi_3var_read_writeblock(struct __pyx_obj_9adios
     __pyx_t_8 = __pyx_t_9;
     goto __pyx_L6_bool_binop_done;
   }
-  __pyx_t_2 = PyNumber_Add(__pyx_v_from_steps, __pyx_v_nsteps); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1440, __pyx_L1_error)
+  __pyx_t_2 = PyNumber_Add(__pyx_v_from_steps, __pyx_v_nsteps); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1448, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->nsteps); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1440, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->nsteps); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1448, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_t_1, Py_GT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1440, __pyx_L1_error)
+  __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_t_1, Py_GT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1448, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 1440, __pyx_L1_error)
+  __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 1448, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_t_8 = __pyx_t_9;
   __pyx_L6_bool_binop_done:;
   if (__pyx_t_8) {
 
-    /* "adios_mpi.pyx":1441
+    /* "adios_mpi.pyx":1449
  * 
  *         if (self.nsteps > 0) and (from_steps + nsteps > self.nsteps):
  *             raise IndexError('Step index is out of range: from_steps=%r, nsteps=%r' % (from_steps, nsteps))             # <<<<<<<<<<<<<<
  * 
  *         shape = [self.vp.blockinfo[rank].count[i] for i in range(self.vp.ndim)]
  */
-    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1441, __pyx_L1_error)
+    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1449, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_INCREF(__pyx_v_from_steps);
     __Pyx_GIVEREF(__pyx_v_from_steps);
@@ -22689,22 +23303,22 @@ static PyObject *__pyx_f_9adios_mpi_3var_read_writeblock(struct __pyx_obj_9adios
     __Pyx_INCREF(__pyx_v_nsteps);
     __Pyx_GIVEREF(__pyx_v_nsteps);
     PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_nsteps);
-    __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Step_index_is_out_of_range_from, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1441, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Step_index_is_out_of_range_from, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1449, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1441, __pyx_L1_error)
+    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1449, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_GIVEREF(__pyx_t_1);
     PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
     __pyx_t_1 = 0;
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1441, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1449, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_Raise(__pyx_t_1, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __PYX_ERR(0, 1441, __pyx_L1_error)
+    __PYX_ERR(0, 1449, __pyx_L1_error)
 
-    /* "adios_mpi.pyx":1440
+    /* "adios_mpi.pyx":1448
  *         assert rank < self.vp.sum_nblocks, 'Rank is out of range (nblock=%r)' % (self.vp.sum_nblocks)
  * 
  *         if (self.nsteps > 0) and (from_steps + nsteps > self.nsteps):             # <<<<<<<<<<<<<<
@@ -22713,48 +23327,48 @@ static PyObject *__pyx_f_9adios_mpi_3var_read_writeblock(struct __pyx_obj_9adios
  */
   }
 
-  /* "adios_mpi.pyx":1443
+  /* "adios_mpi.pyx":1451
  *             raise IndexError('Step index is out of range: from_steps=%r, nsteps=%r' % (from_steps, nsteps))
  * 
  *         shape = [self.vp.blockinfo[rank].count[i] for i in range(self.vp.ndim)]             # <<<<<<<<<<<<<<
  *         if (nsteps>1):
  *             shape.insert(0, nsteps)
  */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1443, __pyx_L1_error)
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1451, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_10 = __pyx_v_self->vp->ndim;
-  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
-    __pyx_v_i = __pyx_t_11;
-    __pyx_t_4 = __Pyx_PyInt_From_uint64_t(((__pyx_v_self->vp->blockinfo[__pyx_v_rank]).count[__pyx_v_i])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1443, __pyx_L1_error)
+  __pyx_t_6 = __pyx_v_self->vp->ndim;
+  for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_6; __pyx_t_10+=1) {
+    __pyx_v_i = __pyx_t_10;
+    __pyx_t_4 = __Pyx_PyInt_From_uint64_t(((__pyx_v_self->vp->blockinfo[__pyx_v_rank]).count[__pyx_v_i])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1451, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_4))) __PYX_ERR(0, 1443, __pyx_L1_error)
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_4))) __PYX_ERR(0, 1451, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   }
   __pyx_v_shape = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":1444
+  /* "adios_mpi.pyx":1452
  * 
  *         shape = [self.vp.blockinfo[rank].count[i] for i in range(self.vp.ndim)]
  *         if (nsteps>1):             # <<<<<<<<<<<<<<
  *             shape.insert(0, nsteps)
  *         cdef np.ndarray var = np.zeros(shape, dtype=self.dtype)
  */
-  __pyx_t_1 = PyObject_RichCompare(__pyx_v_nsteps, __pyx_int_1, Py_GT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1444, __pyx_L1_error)
-  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 1444, __pyx_L1_error)
+  __pyx_t_1 = PyObject_RichCompare(__pyx_v_nsteps, __pyx_int_1, Py_GT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1452, __pyx_L1_error)
+  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 1452, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   if (__pyx_t_8) {
 
-    /* "adios_mpi.pyx":1445
+    /* "adios_mpi.pyx":1453
  *         shape = [self.vp.blockinfo[rank].count[i] for i in range(self.vp.ndim)]
  *         if (nsteps>1):
  *             shape.insert(0, nsteps)             # <<<<<<<<<<<<<<
  *         cdef np.ndarray var = np.zeros(shape, dtype=self.dtype)
  * 
  */
-    __pyx_t_12 = PyList_Insert(__pyx_v_shape, 0, __pyx_v_nsteps); if (unlikely(__pyx_t_12 == -1)) __PYX_ERR(0, 1445, __pyx_L1_error)
+    __pyx_t_11 = PyList_Insert(__pyx_v_shape, 0, __pyx_v_nsteps); if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 1453, __pyx_L1_error)
 
-    /* "adios_mpi.pyx":1444
+    /* "adios_mpi.pyx":1452
  * 
  *         shape = [self.vp.blockinfo[rank].count[i] for i in range(self.vp.ndim)]
  *         if (nsteps>1):             # <<<<<<<<<<<<<<
@@ -22763,36 +23377,36 @@ static PyObject *__pyx_f_9adios_mpi_3var_read_writeblock(struct __pyx_obj_9adios
  */
   }
 
-  /* "adios_mpi.pyx":1446
+  /* "adios_mpi.pyx":1454
  *         if (nsteps>1):
  *             shape.insert(0, nsteps)
  *         cdef np.ndarray var = np.zeros(shape, dtype=self.dtype)             # <<<<<<<<<<<<<<
  * 
  *         cdef ADIOS_SELECTION * sel
  */
-  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1446, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1454, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1446, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1454, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1446, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1454, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_v_shape);
   __Pyx_GIVEREF(__pyx_v_shape);
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_shape);
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1446, __pyx_L1_error)
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1454, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, ((PyObject *)__pyx_v_self->dtype)) < 0) __PYX_ERR(0, 1446, __pyx_L1_error)
-  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1446, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, ((PyObject *)__pyx_v_self->dtype)) < 0) __PYX_ERR(0, 1454, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1454, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1446, __pyx_L1_error)
+  if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1454, __pyx_L1_error)
   __pyx_v_var = ((PyArrayObject *)__pyx_t_7);
   __pyx_t_7 = 0;
 
-  /* "adios_mpi.pyx":1449
+  /* "adios_mpi.pyx":1457
  * 
  *         cdef ADIOS_SELECTION * sel
  *         sel = adios_selection_writeblock (rank)             # <<<<<<<<<<<<<<
@@ -22801,18 +23415,18 @@ static PyObject *__pyx_f_9adios_mpi_3var_read_writeblock(struct __pyx_obj_9adios
  */
   __pyx_v_sel = adios_selection_writeblock(__pyx_v_rank);
 
-  /* "adios_mpi.pyx":1451
+  /* "adios_mpi.pyx":1459
  *         sel = adios_selection_writeblock (rank)
  * 
  *         adios_schedule_read_byid (self.file.fp, sel, self.vp.varid, from_steps, nsteps, <void *> var.data)             # <<<<<<<<<<<<<<
  *         adios_perform_reads(self.file.fp, 1)
  *         adios_selection_delete(sel)
  */
-  __pyx_t_10 = __Pyx_PyInt_As_int(__pyx_v_from_steps); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1451, __pyx_L1_error)
-  __pyx_t_11 = __Pyx_PyInt_As_int(__pyx_v_nsteps); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1451, __pyx_L1_error)
-  adios_schedule_read_byid(__pyx_v_self->file->fp, __pyx_v_sel, __pyx_v_self->vp->varid, __pyx_t_10, __pyx_t_11, ((void *)__pyx_v_var->data));
+  __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_v_from_steps); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1459, __pyx_L1_error)
+  __pyx_t_10 = __Pyx_PyInt_As_int(__pyx_v_nsteps); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1459, __pyx_L1_error)
+  adios_schedule_read_byid(__pyx_v_self->file->fp, __pyx_v_sel, __pyx_v_self->vp->varid, __pyx_t_6, __pyx_t_10, ((void *)__pyx_v_var->data));
 
-  /* "adios_mpi.pyx":1452
+  /* "adios_mpi.pyx":1460
  * 
  *         adios_schedule_read_byid (self.file.fp, sel, self.vp.varid, from_steps, nsteps, <void *> var.data)
  *         adios_perform_reads(self.file.fp, 1)             # <<<<<<<<<<<<<<
@@ -22821,7 +23435,7 @@ static PyObject *__pyx_f_9adios_mpi_3var_read_writeblock(struct __pyx_obj_9adios
  */
   adios_perform_reads(__pyx_v_self->file->fp, 1);
 
-  /* "adios_mpi.pyx":1453
+  /* "adios_mpi.pyx":1461
  *         adios_schedule_read_byid (self.file.fp, sel, self.vp.varid, from_steps, nsteps, <void *> var.data)
  *         adios_perform_reads(self.file.fp, 1)
  *         adios_selection_delete(sel)             # <<<<<<<<<<<<<<
@@ -22830,7 +23444,7 @@ static PyObject *__pyx_f_9adios_mpi_3var_read_writeblock(struct __pyx_obj_9adios
  */
   adios_selection_delete(__pyx_v_sel);
 
-  /* "adios_mpi.pyx":1454
+  /* "adios_mpi.pyx":1462
  *         adios_perform_reads(self.file.fp, 1)
  *         adios_selection_delete(sel)
  *         return var             # <<<<<<<<<<<<<<
@@ -22842,7 +23456,7 @@ static PyObject *__pyx_f_9adios_mpi_3var_read_writeblock(struct __pyx_obj_9adios
   __pyx_r = ((PyObject *)__pyx_v_var);
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":1415
+  /* "adios_mpi.pyx":1423
  *         return var
  * 
  *     cpdef read_writeblock(self, int rank, from_steps = None, nsteps = None):             # <<<<<<<<<<<<<<
@@ -22912,7 +23526,7 @@ static PyObject *__pyx_pw_9adios_mpi_3var_11read_writeblock(PyObject *__pyx_v_se
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "read_writeblock") < 0)) __PYX_ERR(0, 1415, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "read_writeblock") < 0)) __PYX_ERR(0, 1423, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -22923,13 +23537,13 @@ static PyObject *__pyx_pw_9adios_mpi_3var_11read_writeblock(PyObject *__pyx_v_se
         default: goto __pyx_L5_argtuple_error;
       }
     }
-    __pyx_v_rank = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_rank == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1415, __pyx_L3_error)
+    __pyx_v_rank = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_rank == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1423, __pyx_L3_error)
     __pyx_v_from_steps = values[1];
     __pyx_v_nsteps = values[2];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("read_writeblock", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1415, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("read_writeblock", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1423, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.var.read_writeblock", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -22952,7 +23566,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_10read_writeblock(struct __pyx_obj_9ad
   __pyx_t_2.__pyx_n = 2;
   __pyx_t_2.from_steps = __pyx_v_from_steps;
   __pyx_t_2.nsteps = __pyx_v_nsteps;
-  __pyx_t_1 = __pyx_vtabptr_9adios_mpi_var->read_writeblock(__pyx_v_self, __pyx_v_rank, 1, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1415, __pyx_L1_error)
+  __pyx_t_1 = __pyx_vtabptr_9adios_mpi_var->read_writeblock(__pyx_v_self, __pyx_v_rank, 1, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1423, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -22969,7 +23583,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_10read_writeblock(struct __pyx_obj_9ad
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1456
+/* "adios_mpi.pyx":1464
  *         return var
  * 
  *     cpdef read(self, tuple offset = (), tuple count = (), tuple scalar = (),             # <<<<<<<<<<<<<<
@@ -22983,7 +23597,7 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
   PyObject *__pyx_v_count = ((PyObject*)__pyx_empty_tuple);
   PyObject *__pyx_v_scalar = ((PyObject*)__pyx_empty_tuple);
 
-  /* "adios_mpi.pyx":1457
+  /* "adios_mpi.pyx":1465
  * 
  *     cpdef read(self, tuple offset = (), tuple count = (), tuple scalar = (),
  *                from_steps = None, nsteps = None, fill = 0, step_scalar = True):             # <<<<<<<<<<<<<<
@@ -23010,12 +23624,12 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
   PyObject *__pyx_t_2 = NULL;
   PyObject *__pyx_t_3 = NULL;
   PyObject *__pyx_t_4 = NULL;
-  Py_ssize_t __pyx_t_5;
+  int __pyx_t_5;
   PyObject *__pyx_t_6 = NULL;
   int __pyx_t_7;
   int __pyx_t_8;
   int __pyx_t_9;
-  int __pyx_t_10;
+  Py_ssize_t __pyx_t_10;
   Py_ssize_t __pyx_t_11;
   PyObject *(*__pyx_t_12)(PyObject *);
   PyObject *__pyx_t_13 = NULL;
@@ -23050,7 +23664,7 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
   __Pyx_INCREF(__pyx_v_from_steps);
   __Pyx_INCREF(__pyx_v_nsteps);
 
-  /* "adios_mpi.pyx":1456
+  /* "adios_mpi.pyx":1464
  *         return var
  * 
  *     cpdef read(self, tuple offset = (), tuple count = (), tuple scalar = (),             # <<<<<<<<<<<<<<
@@ -23061,14 +23675,14 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
   if (unlikely(__pyx_skip_dispatch)) ;
   /* Check if overridden in Python */
   else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_read); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1456, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_read); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1464, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_9adios_mpi_3var_13read)) {
       __Pyx_XDECREF(__pyx_r);
       __Pyx_INCREF(__pyx_t_1);
       __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
       __pyx_t_5 = 0;
-      if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
+      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
         __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
         if (likely(__pyx_t_4)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -23078,35 +23692,53 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
           __pyx_t_5 = 1;
         }
       }
-      __pyx_t_6 = PyTuple_New(7+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1456, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_6);
-      if (__pyx_t_4) {
-        __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_3)) {
+        PyObject *__pyx_temp[8] = {__pyx_t_4, __pyx_v_offset, __pyx_v_count, __pyx_v_scalar, __pyx_v_from_steps, __pyx_v_nsteps, __pyx_v_fill, __pyx_v_step_scalar};
+        __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 7+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1464, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
+        PyObject *__pyx_temp[8] = {__pyx_t_4, __pyx_v_offset, __pyx_v_count, __pyx_v_scalar, __pyx_v_from_steps, __pyx_v_nsteps, __pyx_v_fill, __pyx_v_step_scalar};
+        __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 7+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1464, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+      } else
+      #endif
+      {
+        __pyx_t_6 = PyTuple_New(7+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1464, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_6);
+        if (__pyx_t_4) {
+          __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL;
+        }
+        __Pyx_INCREF(__pyx_v_offset);
+        __Pyx_GIVEREF(__pyx_v_offset);
+        PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, __pyx_v_offset);
+        __Pyx_INCREF(__pyx_v_count);
+        __Pyx_GIVEREF(__pyx_v_count);
+        PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, __pyx_v_count);
+        __Pyx_INCREF(__pyx_v_scalar);
+        __Pyx_GIVEREF(__pyx_v_scalar);
+        PyTuple_SET_ITEM(__pyx_t_6, 2+__pyx_t_5, __pyx_v_scalar);
+        __Pyx_INCREF(__pyx_v_from_steps);
+        __Pyx_GIVEREF(__pyx_v_from_steps);
+        PyTuple_SET_ITEM(__pyx_t_6, 3+__pyx_t_5, __pyx_v_from_steps);
+        __Pyx_INCREF(__pyx_v_nsteps);
+        __Pyx_GIVEREF(__pyx_v_nsteps);
+        PyTuple_SET_ITEM(__pyx_t_6, 4+__pyx_t_5, __pyx_v_nsteps);
+        __Pyx_INCREF(__pyx_v_fill);
+        __Pyx_GIVEREF(__pyx_v_fill);
+        PyTuple_SET_ITEM(__pyx_t_6, 5+__pyx_t_5, __pyx_v_fill);
+        __Pyx_INCREF(__pyx_v_step_scalar);
+        __Pyx_GIVEREF(__pyx_v_step_scalar);
+        PyTuple_SET_ITEM(__pyx_t_6, 6+__pyx_t_5, __pyx_v_step_scalar);
+        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1464, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       }
-      __Pyx_INCREF(__pyx_v_offset);
-      __Pyx_GIVEREF(__pyx_v_offset);
-      PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, __pyx_v_offset);
-      __Pyx_INCREF(__pyx_v_count);
-      __Pyx_GIVEREF(__pyx_v_count);
-      PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, __pyx_v_count);
-      __Pyx_INCREF(__pyx_v_scalar);
-      __Pyx_GIVEREF(__pyx_v_scalar);
-      PyTuple_SET_ITEM(__pyx_t_6, 2+__pyx_t_5, __pyx_v_scalar);
-      __Pyx_INCREF(__pyx_v_from_steps);
-      __Pyx_GIVEREF(__pyx_v_from_steps);
-      PyTuple_SET_ITEM(__pyx_t_6, 3+__pyx_t_5, __pyx_v_from_steps);
-      __Pyx_INCREF(__pyx_v_nsteps);
-      __Pyx_GIVEREF(__pyx_v_nsteps);
-      PyTuple_SET_ITEM(__pyx_t_6, 4+__pyx_t_5, __pyx_v_nsteps);
-      __Pyx_INCREF(__pyx_v_fill);
-      __Pyx_GIVEREF(__pyx_v_fill);
-      PyTuple_SET_ITEM(__pyx_t_6, 5+__pyx_t_5, __pyx_v_fill);
-      __Pyx_INCREF(__pyx_v_step_scalar);
-      __Pyx_GIVEREF(__pyx_v_step_scalar);
-      PyTuple_SET_ITEM(__pyx_t_6, 6+__pyx_t_5, __pyx_v_step_scalar);
-      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1456, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_2);
-      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_r = __pyx_t_2;
       __pyx_t_2 = 0;
@@ -23116,7 +23748,7 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   }
 
-  /* "adios_mpi.pyx":1506
+  /* "adios_mpi.pyx":1514
  * 
  *         """
  *         if from_steps is None:             # <<<<<<<<<<<<<<
@@ -23127,7 +23759,7 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
   __pyx_t_8 = (__pyx_t_7 != 0);
   if (__pyx_t_8) {
 
-    /* "adios_mpi.pyx":1507
+    /* "adios_mpi.pyx":1515
  *         """
  *         if from_steps is None:
  *             from_steps = 0 ##self.file.current_step             # <<<<<<<<<<<<<<
@@ -23137,7 +23769,7 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
     __Pyx_INCREF(__pyx_int_0);
     __Pyx_DECREF_SET(__pyx_v_from_steps, __pyx_int_0);
 
-    /* "adios_mpi.pyx":1506
+    /* "adios_mpi.pyx":1514
  * 
  *         """
  *         if from_steps is None:             # <<<<<<<<<<<<<<
@@ -23146,7 +23778,7 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
  */
   }
 
-  /* "adios_mpi.pyx":1509
+  /* "adios_mpi.pyx":1517
  *             from_steps = 0 ##self.file.current_step
  * 
  *         if nsteps is None:             # <<<<<<<<<<<<<<
@@ -23157,25 +23789,25 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
   __pyx_t_7 = (__pyx_t_8 != 0);
   if (__pyx_t_7) {
 
-    /* "adios_mpi.pyx":1510
+    /* "adios_mpi.pyx":1518
  * 
  *         if nsteps is None:
  *             nsteps = self.file.last_step - from_steps + 1             # <<<<<<<<<<<<<<
  * 
  *         assert self.dtype is not None, 'Data type is not supported yet'
  */
-    __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->file->last_step); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1510, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->file->last_step); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1518, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = PyNumber_Subtract(__pyx_t_1, __pyx_v_from_steps); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1510, __pyx_L1_error)
+    __pyx_t_2 = PyNumber_Subtract(__pyx_t_1, __pyx_v_from_steps); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1518, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = __Pyx_PyInt_AddObjC(__pyx_t_2, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1510, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyInt_AddObjC(__pyx_t_2, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1518, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF_SET(__pyx_v_nsteps, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "adios_mpi.pyx":1509
+    /* "adios_mpi.pyx":1517
  *             from_steps = 0 ##self.file.current_step
  * 
  *         if nsteps is None:             # <<<<<<<<<<<<<<
@@ -23184,7 +23816,7 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
  */
   }
 
-  /* "adios_mpi.pyx":1512
+  /* "adios_mpi.pyx":1520
  *             nsteps = self.file.last_step - from_steps + 1
  * 
  *         assert self.dtype is not None, 'Data type is not supported yet'             # <<<<<<<<<<<<<<
@@ -23196,12 +23828,12 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
     __pyx_t_7 = (((PyObject *)__pyx_v_self->dtype) != Py_None);
     if (unlikely(!(__pyx_t_7 != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Data_type_is_not_supported_yet);
-      __PYX_ERR(0, 1512, __pyx_L1_error)
+      __PYX_ERR(0, 1520, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "adios_mpi.pyx":1514
+  /* "adios_mpi.pyx":1522
  *         assert self.dtype is not None, 'Data type is not supported yet'
  * 
  *         if (self.nsteps > 0) and (from_steps + nsteps > self.nsteps):             # <<<<<<<<<<<<<<
@@ -23214,27 +23846,27 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
     __pyx_t_7 = __pyx_t_8;
     goto __pyx_L6_bool_binop_done;
   }
-  __pyx_t_1 = PyNumber_Add(__pyx_v_from_steps, __pyx_v_nsteps); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1514, __pyx_L1_error)
+  __pyx_t_1 = PyNumber_Add(__pyx_v_from_steps, __pyx_v_nsteps); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1522, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_self->nsteps); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1514, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_self->nsteps); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1522, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_2, Py_GT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1514, __pyx_L1_error)
+  __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_2, Py_GT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1522, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 1514, __pyx_L1_error)
+  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 1522, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_t_7 = __pyx_t_8;
   __pyx_L6_bool_binop_done:;
   if (__pyx_t_7) {
 
-    /* "adios_mpi.pyx":1515
+    /* "adios_mpi.pyx":1523
  * 
  *         if (self.nsteps > 0) and (from_steps + nsteps > self.nsteps):
  *             raise IndexError('Step index is out of range: from_steps=%r, nsteps=%r' % (from_steps, nsteps))             # <<<<<<<<<<<<<<
  * 
  *         cdef list lshape = [self.vp.dims[i] for i in range(self.vp.ndim)]
  */
-    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1515, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1523, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_from_steps);
     __Pyx_GIVEREF(__pyx_v_from_steps);
@@ -23242,22 +23874,22 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
     __Pyx_INCREF(__pyx_v_nsteps);
     __Pyx_GIVEREF(__pyx_v_nsteps);
     PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_nsteps);
-    __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_Step_index_is_out_of_range_from, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1515, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_Step_index_is_out_of_range_from, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1523, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1515, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1523, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_GIVEREF(__pyx_t_2);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
     __pyx_t_2 = 0;
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1515, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1523, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __PYX_ERR(0, 1515, __pyx_L1_error)
+    __PYX_ERR(0, 1523, __pyx_L1_error)
 
-    /* "adios_mpi.pyx":1514
+    /* "adios_mpi.pyx":1522
  *         assert self.dtype is not None, 'Data type is not supported yet'
  * 
  *         if (self.nsteps > 0) and (from_steps + nsteps > self.nsteps):             # <<<<<<<<<<<<<<
@@ -23266,62 +23898,62 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
  */
   }
 
-  /* "adios_mpi.pyx":1517
+  /* "adios_mpi.pyx":1525
  *             raise IndexError('Step index is out of range: from_steps=%r, nsteps=%r' % (from_steps, nsteps))
  * 
  *         cdef list lshape = [self.vp.dims[i] for i in range(self.vp.ndim)]             # <<<<<<<<<<<<<<
  *         cdef np.ndarray npshape = np.array(lshape, dtype=np.int64)
  * 
  */
-  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1517, __pyx_L1_error)
+  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1525, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_9 = __pyx_v_self->vp->ndim;
-  for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {
-    __pyx_v_i = __pyx_t_10;
-    __pyx_t_3 = __Pyx_PyInt_From_uint64_t((__pyx_v_self->vp->dims[__pyx_v_i])); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1517, __pyx_L1_error)
+  __pyx_t_5 = __pyx_v_self->vp->ndim;
+  for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_5; __pyx_t_9+=1) {
+    __pyx_v_i = __pyx_t_9;
+    __pyx_t_3 = __Pyx_PyInt_From_uint64_t((__pyx_v_self->vp->dims[__pyx_v_i])); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1525, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_3))) __PYX_ERR(0, 1517, __pyx_L1_error)
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_3))) __PYX_ERR(0, 1525, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   }
   __pyx_v_lshape = ((PyObject*)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "adios_mpi.pyx":1518
+  /* "adios_mpi.pyx":1526
  * 
  *         cdef list lshape = [self.vp.dims[i] for i in range(self.vp.ndim)]
  *         cdef np.ndarray npshape = np.array(lshape, dtype=np.int64)             # <<<<<<<<<<<<<<
  * 
  *         cdef np.ndarray npoffset
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1518, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1526, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_array); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1518, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_array); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1526, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1518, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1526, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_v_lshape);
   __Pyx_GIVEREF(__pyx_v_lshape);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_lshape);
-  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1518, __pyx_L1_error)
+  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1526, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1518, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1526, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_int64); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1518, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_int64); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1526, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 1518, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 1526, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1518, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1526, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1518, __pyx_L1_error)
+  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1526, __pyx_L1_error)
   __pyx_v_npshape = ((PyArrayObject *)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "adios_mpi.pyx":1521
+  /* "adios_mpi.pyx":1529
  * 
  *         cdef np.ndarray npoffset
  *         if len(offset) == 0:             # <<<<<<<<<<<<<<
@@ -23330,23 +23962,23 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
  */
   if (unlikely(__pyx_v_offset == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
-    __PYX_ERR(0, 1521, __pyx_L1_error)
+    __PYX_ERR(0, 1529, __pyx_L1_error)
   }
-  __pyx_t_5 = PyTuple_GET_SIZE(__pyx_v_offset); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 1521, __pyx_L1_error)
-  __pyx_t_7 = ((__pyx_t_5 == 0) != 0);
+  __pyx_t_10 = PyTuple_GET_SIZE(__pyx_v_offset); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 1529, __pyx_L1_error)
+  __pyx_t_7 = ((__pyx_t_10 == 0) != 0);
   if (__pyx_t_7) {
 
-    /* "adios_mpi.pyx":1522
+    /* "adios_mpi.pyx":1530
  *         cdef np.ndarray npoffset
  *         if len(offset) == 0:
  *             npoffset = npshape.copy()             # <<<<<<<<<<<<<<
  *             npoffset.fill(0)
  *         else:
  */
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_npshape), __pyx_n_s_copy); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1522, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_npshape), __pyx_n_s_copy); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1530, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_t_2 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_1))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
       __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
       if (likely(__pyx_t_2)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
@@ -23356,32 +23988,32 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
       }
     }
     if (__pyx_t_2) {
-      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1522, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1530, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     } else {
-      __pyx_t_4 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1522, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1530, __pyx_L1_error)
     }
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1522, __pyx_L1_error)
+    if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1530, __pyx_L1_error)
     __pyx_v_npoffset = ((PyArrayObject *)__pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "adios_mpi.pyx":1523
+    /* "adios_mpi.pyx":1531
  *         if len(offset) == 0:
  *             npoffset = npshape.copy()
  *             npoffset.fill(0)             # <<<<<<<<<<<<<<
  *         else:
  *             npoffset = np.array(offset, dtype=np.int64)
  */
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_npoffset), __pyx_n_s_fill); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1523, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_npoffset), __pyx_n_s_fill); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1531, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__29, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1523, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__29, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1531, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-    /* "adios_mpi.pyx":1521
+    /* "adios_mpi.pyx":1529
  * 
  *         cdef np.ndarray npoffset
  *         if len(offset) == 0:             # <<<<<<<<<<<<<<
@@ -23391,7 +24023,7 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
     goto __pyx_L10;
   }
 
-  /* "adios_mpi.pyx":1525
+  /* "adios_mpi.pyx":1533
  *             npoffset.fill(0)
  *         else:
  *             npoffset = np.array(offset, dtype=np.int64)             # <<<<<<<<<<<<<<
@@ -23399,37 +24031,37 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
  *         cdef np.ndarray npcount
  */
   /*else*/ {
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1525, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1533, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_array); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1525, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_array); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1533, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1525, __pyx_L1_error)
+    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1533, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_INCREF(__pyx_v_offset);
     __Pyx_GIVEREF(__pyx_v_offset);
     PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_offset);
-    __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1525, __pyx_L1_error)
+    __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1533, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1525, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1533, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_int64); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1525, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_int64); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1533, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_6) < 0) __PYX_ERR(0, 1525, __pyx_L1_error)
+    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_6) < 0) __PYX_ERR(0, 1533, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1525, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1533, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1525, __pyx_L1_error)
+    if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1533, __pyx_L1_error)
     __pyx_v_npoffset = ((PyArrayObject *)__pyx_t_6);
     __pyx_t_6 = 0;
   }
   __pyx_L10:;
 
-  /* "adios_mpi.pyx":1528
+  /* "adios_mpi.pyx":1536
  * 
  *         cdef np.ndarray npcount
  *         if len(count) == 0:             # <<<<<<<<<<<<<<
@@ -23438,26 +24070,26 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
  */
   if (unlikely(__pyx_v_count == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
-    __PYX_ERR(0, 1528, __pyx_L1_error)
+    __PYX_ERR(0, 1536, __pyx_L1_error)
   }
-  __pyx_t_5 = PyTuple_GET_SIZE(__pyx_v_count); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 1528, __pyx_L1_error)
-  __pyx_t_7 = ((__pyx_t_5 == 0) != 0);
+  __pyx_t_10 = PyTuple_GET_SIZE(__pyx_v_count); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 1536, __pyx_L1_error)
+  __pyx_t_7 = ((__pyx_t_10 == 0) != 0);
   if (__pyx_t_7) {
 
-    /* "adios_mpi.pyx":1529
+    /* "adios_mpi.pyx":1537
  *         cdef np.ndarray npcount
  *         if len(count) == 0:
  *             npcount = npshape - npoffset             # <<<<<<<<<<<<<<
  *         else:
  *             npcount = np.array(count, dtype=np.int64)
  */
-    __pyx_t_6 = PyNumber_Subtract(((PyObject *)__pyx_v_npshape), ((PyObject *)__pyx_v_npoffset)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1529, __pyx_L1_error)
+    __pyx_t_6 = PyNumber_Subtract(((PyObject *)__pyx_v_npshape), ((PyObject *)__pyx_v_npoffset)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1537, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1529, __pyx_L1_error)
+    if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1537, __pyx_L1_error)
     __pyx_v_npcount = ((PyArrayObject *)__pyx_t_6);
     __pyx_t_6 = 0;
 
-    /* "adios_mpi.pyx":1528
+    /* "adios_mpi.pyx":1536
  * 
  *         cdef np.ndarray npcount
  *         if len(count) == 0:             # <<<<<<<<<<<<<<
@@ -23467,7 +24099,7 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
     goto __pyx_L11;
   }
 
-  /* "adios_mpi.pyx":1531
+  /* "adios_mpi.pyx":1539
  *             npcount = npshape - npoffset
  *         else:
  *             npcount = np.array(count, dtype=np.int64)             # <<<<<<<<<<<<<<
@@ -23475,37 +24107,37 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
  *         if len(scalar) == 0:
  */
   /*else*/ {
-    __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1531, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1539, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_array); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1531, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_array); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1539, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-    __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1531, __pyx_L1_error)
+    __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1539, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_INCREF(__pyx_v_count);
     __Pyx_GIVEREF(__pyx_v_count);
     PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_count);
-    __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1531, __pyx_L1_error)
+    __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1539, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1531, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1539, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_int64); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1531, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_int64); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1539, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_3) < 0) __PYX_ERR(0, 1531, __pyx_L1_error)
+    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_3) < 0) __PYX_ERR(0, 1539, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1531, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1539, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1531, __pyx_L1_error)
+    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1539, __pyx_L1_error)
     __pyx_v_npcount = ((PyArrayObject *)__pyx_t_3);
     __pyx_t_3 = 0;
   }
   __pyx_L11:;
 
-  /* "adios_mpi.pyx":1533
+  /* "adios_mpi.pyx":1541
  *             npcount = np.array(count, dtype=np.int64)
  * 
  *         if len(scalar) == 0:             # <<<<<<<<<<<<<<
@@ -23514,29 +24146,29 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
  */
   if (unlikely(__pyx_v_scalar == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
-    __PYX_ERR(0, 1533, __pyx_L1_error)
+    __PYX_ERR(0, 1541, __pyx_L1_error)
   }
-  __pyx_t_5 = PyTuple_GET_SIZE(__pyx_v_scalar); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 1533, __pyx_L1_error)
-  __pyx_t_7 = ((__pyx_t_5 == 0) != 0);
+  __pyx_t_10 = PyTuple_GET_SIZE(__pyx_v_scalar); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 1541, __pyx_L1_error)
+  __pyx_t_7 = ((__pyx_t_10 == 0) != 0);
   if (__pyx_t_7) {
 
-    /* "adios_mpi.pyx":1534
+    /* "adios_mpi.pyx":1542
  * 
  *         if len(scalar) == 0:
  *             scalar = tuple((False,) * len(npshape))             # <<<<<<<<<<<<<<
  * 
  *         if len(npshape) != len(npoffset):
  */
-    __pyx_t_5 = PyObject_Length(((PyObject *)__pyx_v_npshape)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 1534, __pyx_L1_error)
-    __pyx_t_3 = PyInt_FromSsize_t(__pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1534, __pyx_L1_error)
+    __pyx_t_10 = PyObject_Length(((PyObject *)__pyx_v_npshape)); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 1542, __pyx_L1_error)
+    __pyx_t_3 = PyInt_FromSsize_t(__pyx_t_10); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1542, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_1 = PyNumber_Multiply(__pyx_tuple__30, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1534, __pyx_L1_error)
+    __pyx_t_1 = PyNumber_Multiply(__pyx_tuple__30, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1542, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF_SET(__pyx_v_scalar, ((PyObject*)__pyx_t_1));
     __pyx_t_1 = 0;
 
-    /* "adios_mpi.pyx":1533
+    /* "adios_mpi.pyx":1541
  *             npcount = np.array(count, dtype=np.int64)
  * 
  *         if len(scalar) == 0:             # <<<<<<<<<<<<<<
@@ -23545,44 +24177,44 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
  */
   }
 
-  /* "adios_mpi.pyx":1536
+  /* "adios_mpi.pyx":1544
  *             scalar = tuple((False,) * len(npshape))
  * 
  *         if len(npshape) != len(npoffset):             # <<<<<<<<<<<<<<
  *             raise IndexError('Offset dimension mismatch (offset dim: %r)' % len(npoffset))
  * 
  */
-  __pyx_t_5 = PyObject_Length(((PyObject *)__pyx_v_npshape)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 1536, __pyx_L1_error)
-  __pyx_t_11 = PyObject_Length(((PyObject *)__pyx_v_npoffset)); if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 1536, __pyx_L1_error)
-  __pyx_t_7 = ((__pyx_t_5 != __pyx_t_11) != 0);
+  __pyx_t_10 = PyObject_Length(((PyObject *)__pyx_v_npshape)); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 1544, __pyx_L1_error)
+  __pyx_t_11 = PyObject_Length(((PyObject *)__pyx_v_npoffset)); if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 1544, __pyx_L1_error)
+  __pyx_t_7 = ((__pyx_t_10 != __pyx_t_11) != 0);
   if (__pyx_t_7) {
 
-    /* "adios_mpi.pyx":1537
+    /* "adios_mpi.pyx":1545
  * 
  *         if len(npshape) != len(npoffset):
  *             raise IndexError('Offset dimension mismatch (offset dim: %r)' % len(npoffset))             # <<<<<<<<<<<<<<
  * 
  *         if len(npshape) != len(npcount):
  */
-    __pyx_t_11 = PyObject_Length(((PyObject *)__pyx_v_npoffset)); if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 1537, __pyx_L1_error)
-    __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1537, __pyx_L1_error)
+    __pyx_t_11 = PyObject_Length(((PyObject *)__pyx_v_npoffset)); if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 1545, __pyx_L1_error)
+    __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1545, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_Offset_dimension_mismatch_offset, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1537, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_Offset_dimension_mismatch_offset, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1545, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1537, __pyx_L1_error)
+    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1545, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_GIVEREF(__pyx_t_3);
     PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3);
     __pyx_t_3 = 0;
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1537, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1545, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __PYX_ERR(0, 1537, __pyx_L1_error)
+    __PYX_ERR(0, 1545, __pyx_L1_error)
 
-    /* "adios_mpi.pyx":1536
+    /* "adios_mpi.pyx":1544
  *             scalar = tuple((False,) * len(npshape))
  * 
  *         if len(npshape) != len(npoffset):             # <<<<<<<<<<<<<<
@@ -23591,44 +24223,44 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
  */
   }
 
-  /* "adios_mpi.pyx":1539
+  /* "adios_mpi.pyx":1547
  *             raise IndexError('Offset dimension mismatch (offset dim: %r)' % len(npoffset))
  * 
  *         if len(npshape) != len(npcount):             # <<<<<<<<<<<<<<
  *             raise IndexError('Count dimension mismatch (count dim: %r)' % len(npcount))
  * 
  */
-  __pyx_t_11 = PyObject_Length(((PyObject *)__pyx_v_npshape)); if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 1539, __pyx_L1_error)
-  __pyx_t_5 = PyObject_Length(((PyObject *)__pyx_v_npcount)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 1539, __pyx_L1_error)
-  __pyx_t_7 = ((__pyx_t_11 != __pyx_t_5) != 0);
+  __pyx_t_11 = PyObject_Length(((PyObject *)__pyx_v_npshape)); if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 1547, __pyx_L1_error)
+  __pyx_t_10 = PyObject_Length(((PyObject *)__pyx_v_npcount)); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 1547, __pyx_L1_error)
+  __pyx_t_7 = ((__pyx_t_11 != __pyx_t_10) != 0);
   if (__pyx_t_7) {
 
-    /* "adios_mpi.pyx":1540
+    /* "adios_mpi.pyx":1548
  * 
  *         if len(npshape) != len(npcount):
  *             raise IndexError('Count dimension mismatch (count dim: %r)' % len(npcount))             # <<<<<<<<<<<<<<
  * 
  *         if len(npshape) != len(scalar):
  */
-    __pyx_t_5 = PyObject_Length(((PyObject *)__pyx_v_npcount)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 1540, __pyx_L1_error)
-    __pyx_t_3 = PyInt_FromSsize_t(__pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1540, __pyx_L1_error)
+    __pyx_t_10 = PyObject_Length(((PyObject *)__pyx_v_npcount)); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 1548, __pyx_L1_error)
+    __pyx_t_3 = PyInt_FromSsize_t(__pyx_t_10); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1548, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Count_dimension_mismatch_count_d, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1540, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Count_dimension_mismatch_count_d, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1548, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1540, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1548, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_GIVEREF(__pyx_t_1);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
     __pyx_t_1 = 0;
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1540, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1548, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_Raise(__pyx_t_1, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __PYX_ERR(0, 1540, __pyx_L1_error)
+    __PYX_ERR(0, 1548, __pyx_L1_error)
 
-    /* "adios_mpi.pyx":1539
+    /* "adios_mpi.pyx":1547
  *             raise IndexError('Offset dimension mismatch (offset dim: %r)' % len(npoffset))
  * 
  *         if len(npshape) != len(npcount):             # <<<<<<<<<<<<<<
@@ -23637,23 +24269,23 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
  */
   }
 
-  /* "adios_mpi.pyx":1542
+  /* "adios_mpi.pyx":1550
  *             raise IndexError('Count dimension mismatch (count dim: %r)' % len(npcount))
  * 
  *         if len(npshape) != len(scalar):             # <<<<<<<<<<<<<<
  *             raise IndexError('Scalar dimension mismatch (scalar dim: %r)' % len(scalar))
  * 
  */
-  __pyx_t_5 = PyObject_Length(((PyObject *)__pyx_v_npshape)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 1542, __pyx_L1_error)
+  __pyx_t_10 = PyObject_Length(((PyObject *)__pyx_v_npshape)); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 1550, __pyx_L1_error)
   if (unlikely(__pyx_v_scalar == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
-    __PYX_ERR(0, 1542, __pyx_L1_error)
+    __PYX_ERR(0, 1550, __pyx_L1_error)
   }
-  __pyx_t_11 = PyTuple_GET_SIZE(__pyx_v_scalar); if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 1542, __pyx_L1_error)
-  __pyx_t_7 = ((__pyx_t_5 != __pyx_t_11) != 0);
+  __pyx_t_11 = PyTuple_GET_SIZE(__pyx_v_scalar); if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 1550, __pyx_L1_error)
+  __pyx_t_7 = ((__pyx_t_10 != __pyx_t_11) != 0);
   if (__pyx_t_7) {
 
-    /* "adios_mpi.pyx":1543
+    /* "adios_mpi.pyx":1551
  * 
  *         if len(npshape) != len(scalar):
  *             raise IndexError('Scalar dimension mismatch (scalar dim: %r)' % len(scalar))             # <<<<<<<<<<<<<<
@@ -23662,27 +24294,27 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
  */
     if (unlikely(__pyx_v_scalar == Py_None)) {
       PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
-      __PYX_ERR(0, 1543, __pyx_L1_error)
+      __PYX_ERR(0, 1551, __pyx_L1_error)
     }
-    __pyx_t_11 = PyTuple_GET_SIZE(__pyx_v_scalar); if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 1543, __pyx_L1_error)
-    __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1543, __pyx_L1_error)
+    __pyx_t_11 = PyTuple_GET_SIZE(__pyx_v_scalar); if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 1551, __pyx_L1_error)
+    __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1551, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_Scalar_dimension_mismatch_scalar, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1543, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_Scalar_dimension_mismatch_scalar, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1551, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1543, __pyx_L1_error)
+    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1551, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_GIVEREF(__pyx_t_3);
     PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3);
     __pyx_t_3 = 0;
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1543, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1551, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __PYX_ERR(0, 1543, __pyx_L1_error)
+    __PYX_ERR(0, 1551, __pyx_L1_error)
 
-    /* "adios_mpi.pyx":1542
+    /* "adios_mpi.pyx":1550
  *             raise IndexError('Count dimension mismatch (count dim: %r)' % len(npcount))
  * 
  *         if len(npshape) != len(scalar):             # <<<<<<<<<<<<<<
@@ -23691,22 +24323,22 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
  */
   }
 
-  /* "adios_mpi.pyx":1545
+  /* "adios_mpi.pyx":1553
  *             raise IndexError('Scalar dimension mismatch (scalar dim: %r)' % len(scalar))
  * 
  *         if (npshape < npcount + npoffset).any():             # <<<<<<<<<<<<<<
  *             raise IndexError('Requested is larger than the shape.')
  * 
  */
-  __pyx_t_1 = PyNumber_Add(((PyObject *)__pyx_v_npcount), ((PyObject *)__pyx_v_npoffset)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1545, __pyx_L1_error)
+  __pyx_t_1 = PyNumber_Add(((PyObject *)__pyx_v_npcount), ((PyObject *)__pyx_v_npoffset)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1553, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_6 = PyObject_RichCompare(((PyObject *)__pyx_v_npshape), __pyx_t_1, Py_LT); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1545, __pyx_L1_error)
+  __pyx_t_6 = PyObject_RichCompare(((PyObject *)__pyx_v_npshape), __pyx_t_1, Py_LT); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1553, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_any); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1545, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_any); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1553, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __pyx_t_6 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_1))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
     __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1);
     if (likely(__pyx_t_6)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
@@ -23716,31 +24348,31 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
     }
   }
   if (__pyx_t_6) {
-    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1545, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1553, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   } else {
-    __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1545, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1553, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 1545, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 1553, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   if (__pyx_t_7) {
 
-    /* "adios_mpi.pyx":1546
+    /* "adios_mpi.pyx":1554
  * 
  *         if (npshape < npcount + npoffset).any():
  *             raise IndexError('Requested is larger than the shape.')             # <<<<<<<<<<<<<<
  * 
  *         shape = [x for x, y in zip(npcount, scalar) if not y]
  */
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_tuple__31, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1546, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_tuple__31, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1554, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __PYX_ERR(0, 1546, __pyx_L1_error)
+    __PYX_ERR(0, 1554, __pyx_L1_error)
 
-    /* "adios_mpi.pyx":1545
+    /* "adios_mpi.pyx":1553
  *             raise IndexError('Scalar dimension mismatch (scalar dim: %r)' % len(scalar))
  * 
  *         if (npshape < npcount + npoffset).any():             # <<<<<<<<<<<<<<
@@ -23749,16 +24381,16 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
  */
   }
 
-  /* "adios_mpi.pyx":1548
+  /* "adios_mpi.pyx":1556
  *             raise IndexError('Requested is larger than the shape.')
  * 
  *         shape = [x for x, y in zip(npcount, scalar) if not y]             # <<<<<<<<<<<<<<
  *         if (nsteps > 1) or (self.nsteps>1 and not step_scalar):
  *             shape.insert(0, nsteps)
  */
-  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1548, __pyx_L1_error)
+  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1556, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1548, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1556, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_npcount));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_npcount));
@@ -23766,34 +24398,34 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
   __Pyx_INCREF(__pyx_v_scalar);
   __Pyx_GIVEREF(__pyx_v_scalar);
   PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_scalar);
-  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_zip, __pyx_t_1, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1548, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_zip, __pyx_t_1, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1556, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   if (likely(PyList_CheckExact(__pyx_t_6)) || PyTuple_CheckExact(__pyx_t_6)) {
     __pyx_t_1 = __pyx_t_6; __Pyx_INCREF(__pyx_t_1); __pyx_t_11 = 0;
     __pyx_t_12 = NULL;
   } else {
-    __pyx_t_11 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1548, __pyx_L1_error)
+    __pyx_t_11 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1556, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_12 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1548, __pyx_L1_error)
+    __pyx_t_12 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1556, __pyx_L1_error)
   }
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   for (;;) {
     if (likely(!__pyx_t_12)) {
       if (likely(PyList_CheckExact(__pyx_t_1))) {
         if (__pyx_t_11 >= PyList_GET_SIZE(__pyx_t_1)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_6 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_11); __Pyx_INCREF(__pyx_t_6); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 1548, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_6 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_11); __Pyx_INCREF(__pyx_t_6); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 1556, __pyx_L1_error)
         #else
-        __pyx_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1548, __pyx_L1_error)
+        __pyx_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1556, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
         #endif
       } else {
         if (__pyx_t_11 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_11); __Pyx_INCREF(__pyx_t_6); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 1548, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_11); __Pyx_INCREF(__pyx_t_6); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 1556, __pyx_L1_error)
         #else
-        __pyx_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1548, __pyx_L1_error)
+        __pyx_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1556, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
         #endif
       }
@@ -23803,7 +24435,7 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
           if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-          else __PYX_ERR(0, 1548, __pyx_L1_error)
+          else __PYX_ERR(0, 1556, __pyx_L1_error)
         }
         break;
       }
@@ -23811,7 +24443,7 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
     }
     if ((likely(PyTuple_CheckExact(__pyx_t_6))) || (PyList_CheckExact(__pyx_t_6))) {
       PyObject* sequence = __pyx_t_6;
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if !CYTHON_COMPILING_IN_PYPY
       Py_ssize_t size = Py_SIZE(sequence);
       #else
       Py_ssize_t size = PySequence_Size(sequence);
@@ -23819,9 +24451,9 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
       if (unlikely(size != 2)) {
         if (size > 2) __Pyx_RaiseTooManyValuesError(2);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        __PYX_ERR(0, 1548, __pyx_L1_error)
+        __PYX_ERR(0, 1556, __pyx_L1_error)
       }
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
       if (likely(PyTuple_CheckExact(sequence))) {
         __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
         __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
@@ -23832,15 +24464,15 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
       __Pyx_INCREF(__pyx_t_2);
       __Pyx_INCREF(__pyx_t_4);
       #else
-      __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1548, __pyx_L1_error)
+      __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1556, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
-      __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1548, __pyx_L1_error)
+      __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1556, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       #endif
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     } else {
       Py_ssize_t index = -1;
-      __pyx_t_13 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1548, __pyx_L1_error)
+      __pyx_t_13 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1556, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_13);
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __pyx_t_14 = Py_TYPE(__pyx_t_13)->tp_iternext;
@@ -23848,7 +24480,7 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
       __Pyx_GOTREF(__pyx_t_2);
       index = 1; __pyx_t_4 = __pyx_t_14(__pyx_t_13); if (unlikely(!__pyx_t_4)) goto __pyx_L19_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_4);
-      if (__Pyx_IternextUnpackEndCheck(__pyx_t_14(__pyx_t_13), 2) < 0) __PYX_ERR(0, 1548, __pyx_L1_error)
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_14(__pyx_t_13), 2) < 0) __PYX_ERR(0, 1556, __pyx_L1_error)
       __pyx_t_14 = NULL;
       __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
       goto __pyx_L20_unpacking_done;
@@ -23856,32 +24488,32 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
       __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
       __pyx_t_14 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      __PYX_ERR(0, 1548, __pyx_L1_error)
+      __PYX_ERR(0, 1556, __pyx_L1_error)
       __pyx_L20_unpacking_done:;
     }
     __Pyx_XDECREF_SET(__pyx_v_x, __pyx_t_2);
     __pyx_t_2 = 0;
     __Pyx_XDECREF_SET(__pyx_v_y, __pyx_t_4);
     __pyx_t_4 = 0;
-    __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_y); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 1548, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_y); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 1556, __pyx_L1_error)
     __pyx_t_8 = ((!__pyx_t_7) != 0);
     if (__pyx_t_8) {
-      if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_v_x))) __PYX_ERR(0, 1548, __pyx_L1_error)
+      if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_v_x))) __PYX_ERR(0, 1556, __pyx_L1_error)
     }
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_shape = ((PyObject*)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "adios_mpi.pyx":1549
+  /* "adios_mpi.pyx":1557
  * 
  *         shape = [x for x, y in zip(npcount, scalar) if not y]
  *         if (nsteps > 1) or (self.nsteps>1 and not step_scalar):             # <<<<<<<<<<<<<<
  *             shape.insert(0, nsteps)
  *         cdef np.ndarray var = np.zeros(shape, dtype=self.dtype)
  */
-  __pyx_t_3 = PyObject_RichCompare(__pyx_v_nsteps, __pyx_int_1, Py_GT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1549, __pyx_L1_error)
-  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 1549, __pyx_L1_error)
+  __pyx_t_3 = PyObject_RichCompare(__pyx_v_nsteps, __pyx_int_1, Py_GT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1557, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 1557, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   if (!__pyx_t_7) {
   } else {
@@ -23894,22 +24526,22 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
     __pyx_t_8 = __pyx_t_7;
     goto __pyx_L23_bool_binop_done;
   }
-  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_step_scalar); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 1549, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_step_scalar); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 1557, __pyx_L1_error)
   __pyx_t_15 = ((!__pyx_t_7) != 0);
   __pyx_t_8 = __pyx_t_15;
   __pyx_L23_bool_binop_done:;
   if (__pyx_t_8) {
 
-    /* "adios_mpi.pyx":1550
+    /* "adios_mpi.pyx":1558
  *         shape = [x for x, y in zip(npcount, scalar) if not y]
  *         if (nsteps > 1) or (self.nsteps>1 and not step_scalar):
  *             shape.insert(0, nsteps)             # <<<<<<<<<<<<<<
  *         cdef np.ndarray var = np.zeros(shape, dtype=self.dtype)
  * 
  */
-    __pyx_t_16 = PyList_Insert(__pyx_v_shape, 0, __pyx_v_nsteps); if (unlikely(__pyx_t_16 == -1)) __PYX_ERR(0, 1550, __pyx_L1_error)
+    __pyx_t_16 = PyList_Insert(__pyx_v_shape, 0, __pyx_v_nsteps); if (unlikely(__pyx_t_16 == -1)) __PYX_ERR(0, 1558, __pyx_L1_error)
 
-    /* "adios_mpi.pyx":1549
+    /* "adios_mpi.pyx":1557
  * 
  *         shape = [x for x, y in zip(npcount, scalar) if not y]
  *         if (nsteps > 1) or (self.nsteps>1 and not step_scalar):             # <<<<<<<<<<<<<<
@@ -23918,56 +24550,56 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
  */
   }
 
-  /* "adios_mpi.pyx":1551
+  /* "adios_mpi.pyx":1559
  *         if (nsteps > 1) or (self.nsteps>1 and not step_scalar):
  *             shape.insert(0, nsteps)
  *         cdef np.ndarray var = np.zeros(shape, dtype=self.dtype)             # <<<<<<<<<<<<<<
  * 
  *         if len(shape) > 0:
  */
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1551, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1559, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_zeros); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1551, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_zeros); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1559, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1551, __pyx_L1_error)
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1559, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_v_shape);
   __Pyx_GIVEREF(__pyx_v_shape);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_shape);
-  __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1551, __pyx_L1_error)
+  __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1559, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_dtype, ((PyObject *)__pyx_v_self->dtype)) < 0) __PYX_ERR(0, 1551, __pyx_L1_error)
-  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1551, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_dtype, ((PyObject *)__pyx_v_self->dtype)) < 0) __PYX_ERR(0, 1559, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1559, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1551, __pyx_L1_error)
+  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1559, __pyx_L1_error)
   __pyx_v_var = ((PyArrayObject *)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "adios_mpi.pyx":1553
+  /* "adios_mpi.pyx":1561
  *         cdef np.ndarray var = np.zeros(shape, dtype=self.dtype)
  * 
  *         if len(shape) > 0:             # <<<<<<<<<<<<<<
  *             var[:] = fill
  * 
  */
-  __pyx_t_11 = PyList_GET_SIZE(__pyx_v_shape); if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 1553, __pyx_L1_error)
+  __pyx_t_11 = PyList_GET_SIZE(__pyx_v_shape); if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 1561, __pyx_L1_error)
   __pyx_t_8 = ((__pyx_t_11 > 0) != 0);
   if (__pyx_t_8) {
 
-    /* "adios_mpi.pyx":1554
+    /* "adios_mpi.pyx":1562
  * 
  *         if len(shape) > 0:
  *             var[:] = fill             # <<<<<<<<<<<<<<
  * 
  *         cdef ADIOS_SELECTION * sel
  */
-    if (__Pyx_PyObject_SetSlice(((PyObject *)__pyx_v_var), __pyx_v_fill, 0, 0, NULL, NULL, &__pyx_slice__32, 0, 0, 1) < 0) __PYX_ERR(0, 1554, __pyx_L1_error)
+    if (__Pyx_PyObject_SetSlice(((PyObject *)__pyx_v_var), __pyx_v_fill, 0, 0, NULL, NULL, &__pyx_slice__32, 0, 0, 1) < 0) __PYX_ERR(0, 1562, __pyx_L1_error)
 
-    /* "adios_mpi.pyx":1553
+    /* "adios_mpi.pyx":1561
  *         cdef np.ndarray var = np.zeros(shape, dtype=self.dtype)
  * 
  *         if len(shape) > 0:             # <<<<<<<<<<<<<<
@@ -23976,7 +24608,7 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
  */
   }
 
-  /* "adios_mpi.pyx":1557
+  /* "adios_mpi.pyx":1565
  * 
  *         cdef ADIOS_SELECTION * sel
  *         sel = adios_selection_boundingbox (self.vp.ndim, <uint64_t *> npoffset.data, <uint64_t *> npcount.data)             # <<<<<<<<<<<<<<
@@ -23985,18 +24617,18 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
  */
   __pyx_v_sel = adios_selection_boundingbox(__pyx_v_self->vp->ndim, ((uint64_t *)__pyx_v_npoffset->data), ((uint64_t *)__pyx_v_npcount->data));
 
-  /* "adios_mpi.pyx":1562
+  /* "adios_mpi.pyx":1570
  *         ##print 'npcount', npcount
  * 
  *         adios_schedule_read_byid (self.file.fp, sel, self.vp.varid, from_steps, nsteps, <void *> var.data)             # <<<<<<<<<<<<<<
  *         adios_perform_reads(self.file.fp, 1)
  *         adios_selection_delete(sel)
  */
-  __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_v_from_steps); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1562, __pyx_L1_error)
-  __pyx_t_10 = __Pyx_PyInt_As_int(__pyx_v_nsteps); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1562, __pyx_L1_error)
-  adios_schedule_read_byid(__pyx_v_self->file->fp, __pyx_v_sel, __pyx_v_self->vp->varid, __pyx_t_9, __pyx_t_10, ((void *)__pyx_v_var->data));
+  __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_v_from_steps); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1570, __pyx_L1_error)
+  __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_v_nsteps); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1570, __pyx_L1_error)
+  adios_schedule_read_byid(__pyx_v_self->file->fp, __pyx_v_sel, __pyx_v_self->vp->varid, __pyx_t_5, __pyx_t_9, ((void *)__pyx_v_var->data));
 
-  /* "adios_mpi.pyx":1563
+  /* "adios_mpi.pyx":1571
  * 
  *         adios_schedule_read_byid (self.file.fp, sel, self.vp.varid, from_steps, nsteps, <void *> var.data)
  *         adios_perform_reads(self.file.fp, 1)             # <<<<<<<<<<<<<<
@@ -24005,7 +24637,7 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
  */
   adios_perform_reads(__pyx_v_self->file->fp, 1);
 
-  /* "adios_mpi.pyx":1564
+  /* "adios_mpi.pyx":1572
  *         adios_schedule_read_byid (self.file.fp, sel, self.vp.varid, from_steps, nsteps, <void *> var.data)
  *         adios_perform_reads(self.file.fp, 1)
  *         adios_selection_delete(sel)             # <<<<<<<<<<<<<<
@@ -24014,7 +24646,7 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
  */
   adios_selection_delete(__pyx_v_sel);
 
-  /* "adios_mpi.pyx":1566
+  /* "adios_mpi.pyx":1574
  *         adios_selection_delete(sel)
  * 
  *         if (var.ndim == 0):             # <<<<<<<<<<<<<<
@@ -24024,7 +24656,7 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
   __pyx_t_8 = ((__pyx_v_var->nd == 0) != 0);
   if (__pyx_t_8) {
 
-    /* "adios_mpi.pyx":1567
+    /* "adios_mpi.pyx":1575
  * 
  *         if (var.ndim == 0):
  *             return np.asscalar(var)             # <<<<<<<<<<<<<<
@@ -24032,13 +24664,13 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
  *             return var
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1567, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1575, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_asscalar); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1567, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_asscalar); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1575, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __pyx_t_6 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
+    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
       __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_3);
       if (likely(__pyx_t_6)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -24048,25 +24680,43 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
       }
     }
     if (!__pyx_t_6) {
-      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_3, ((PyObject *)__pyx_v_var)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1567, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_3, ((PyObject *)__pyx_v_var)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1575, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
     } else {
-      __pyx_t_1 = PyTuple_New(1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1567, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_1);
-      __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_6); __pyx_t_6 = NULL;
-      __Pyx_INCREF(((PyObject *)__pyx_v_var));
-      __Pyx_GIVEREF(((PyObject *)__pyx_v_var));
-      PyTuple_SET_ITEM(__pyx_t_1, 0+1, ((PyObject *)__pyx_v_var));
-      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1567, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_4);
-      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_3)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_6, ((PyObject *)__pyx_v_var)};
+        __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1575, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+        __Pyx_GOTREF(__pyx_t_4);
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_6, ((PyObject *)__pyx_v_var)};
+        __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1575, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+        __Pyx_GOTREF(__pyx_t_4);
+      } else
+      #endif
+      {
+        __pyx_t_1 = PyTuple_New(1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1575, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_1);
+        __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_6); __pyx_t_6 = NULL;
+        __Pyx_INCREF(((PyObject *)__pyx_v_var));
+        __Pyx_GIVEREF(((PyObject *)__pyx_v_var));
+        PyTuple_SET_ITEM(__pyx_t_1, 0+1, ((PyObject *)__pyx_v_var));
+        __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1575, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_4);
+        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      }
     }
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __pyx_r = __pyx_t_4;
     __pyx_t_4 = 0;
     goto __pyx_L0;
 
-    /* "adios_mpi.pyx":1566
+    /* "adios_mpi.pyx":1574
  *         adios_selection_delete(sel)
  * 
  *         if (var.ndim == 0):             # <<<<<<<<<<<<<<
@@ -24075,7 +24725,7 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
  */
   }
 
-  /* "adios_mpi.pyx":1569
+  /* "adios_mpi.pyx":1577
  *             return np.asscalar(var)
  *         else:
  *             return var             # <<<<<<<<<<<<<<
@@ -24089,7 +24739,7 @@ static PyObject *__pyx_f_9adios_mpi_3var_read(struct __pyx_obj_9adios_mpi_var *_
     goto __pyx_L0;
   }
 
-  /* "adios_mpi.pyx":1456
+  /* "adios_mpi.pyx":1464
  *         return var
  * 
  *     cpdef read(self, tuple offset = (), tuple count = (), tuple scalar = (),             # <<<<<<<<<<<<<<
@@ -24145,7 +24795,7 @@ static PyObject *__pyx_pw_9adios_mpi_3var_13read(PyObject *__pyx_v_self, PyObjec
     values[1] = ((PyObject*)__pyx_empty_tuple);
     values[2] = ((PyObject*)__pyx_empty_tuple);
 
-    /* "adios_mpi.pyx":1457
+    /* "adios_mpi.pyx":1465
  * 
  *     cpdef read(self, tuple offset = (), tuple count = (), tuple scalar = (),
  *                from_steps = None, nsteps = None, fill = 0, step_scalar = True):             # <<<<<<<<<<<<<<
@@ -24209,7 +24859,7 @@ static PyObject *__pyx_pw_9adios_mpi_3var_13read(PyObject *__pyx_v_self, PyObjec
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "read") < 0)) __PYX_ERR(0, 1456, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "read") < 0)) __PYX_ERR(0, 1464, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -24234,18 +24884,18 @@ static PyObject *__pyx_pw_9adios_mpi_3var_13read(PyObject *__pyx_v_self, PyObjec
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("read", 0, 0, 7, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1456, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("read", 0, 0, 7, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1464, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.var.read", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_offset), (&PyTuple_Type), 1, "offset", 1))) __PYX_ERR(0, 1456, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_count), (&PyTuple_Type), 1, "count", 1))) __PYX_ERR(0, 1456, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_scalar), (&PyTuple_Type), 1, "scalar", 1))) __PYX_ERR(0, 1456, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_offset), (&PyTuple_Type), 1, "offset", 1))) __PYX_ERR(0, 1464, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_count), (&PyTuple_Type), 1, "count", 1))) __PYX_ERR(0, 1464, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_scalar), (&PyTuple_Type), 1, "scalar", 1))) __PYX_ERR(0, 1464, __pyx_L1_error)
   __pyx_r = __pyx_pf_9adios_mpi_3var_12read(((struct __pyx_obj_9adios_mpi_var *)__pyx_v_self), __pyx_v_offset, __pyx_v_count, __pyx_v_scalar, __pyx_v_from_steps, __pyx_v_nsteps, __pyx_v_fill, __pyx_v_step_scalar);
 
-  /* "adios_mpi.pyx":1456
+  /* "adios_mpi.pyx":1464
  *         return var
  * 
  *     cpdef read(self, tuple offset = (), tuple count = (), tuple scalar = (),             # <<<<<<<<<<<<<<
@@ -24277,7 +24927,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_12read(struct __pyx_obj_9adios_mpi_var
   __pyx_t_2.nsteps = __pyx_v_nsteps;
   __pyx_t_2.fill = __pyx_v_fill;
   __pyx_t_2.step_scalar = __pyx_v_step_scalar;
-  __pyx_t_1 = __pyx_vtabptr_9adios_mpi_var->read(__pyx_v_self, 1, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1456, __pyx_L1_error)
+  __pyx_t_1 = __pyx_vtabptr_9adios_mpi_var->read(__pyx_v_self, 1, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1464, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -24294,7 +24944,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_12read(struct __pyx_obj_9adios_mpi_var
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1571
+/* "adios_mpi.pyx":1579
  *             return var
  * 
  *     cpdef printself(self):             # <<<<<<<<<<<<<<
@@ -24315,13 +24965,13 @@ static PyObject *__pyx_f_9adios_mpi_3var_printself(struct __pyx_obj_9adios_mpi_v
   if (unlikely(__pyx_skip_dispatch)) ;
   /* Check if overridden in Python */
   else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_printself); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1571, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_printself); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1579, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_9adios_mpi_3var_15printself)) {
       __Pyx_XDECREF(__pyx_r);
       __Pyx_INCREF(__pyx_t_1);
       __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
+      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
         __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
         if (likely(__pyx_t_4)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -24331,10 +24981,10 @@ static PyObject *__pyx_f_9adios_mpi_3var_printself(struct __pyx_obj_9adios_mpi_v
         }
       }
       if (__pyx_t_4) {
-        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1571, __pyx_L1_error)
+        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1579, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       } else {
-        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1571, __pyx_L1_error)
+        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1579, __pyx_L1_error)
       }
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -24346,7 +24996,7 @@ static PyObject *__pyx_f_9adios_mpi_3var_printself(struct __pyx_obj_9adios_mpi_v
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   }
 
-  /* "adios_mpi.pyx":1573
+  /* "adios_mpi.pyx":1581
  *     cpdef printself(self):
  *         """ Print native ADIOS_VARINFO structure. """
  *         assert self.vp != NULL, 'Not an open variable'             # <<<<<<<<<<<<<<
@@ -24357,32 +25007,32 @@ static PyObject *__pyx_f_9adios_mpi_3var_printself(struct __pyx_obj_9adios_mpi_v
   if (unlikely(!Py_OptimizeFlag)) {
     if (unlikely(!((__pyx_v_self->vp != NULL) != 0))) {
       PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Not_an_open_variable);
-      __PYX_ERR(0, 1573, __pyx_L1_error)
+      __PYX_ERR(0, 1581, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "adios_mpi.pyx":1574
+  /* "adios_mpi.pyx":1582
  *         """ Print native ADIOS_VARINFO structure. """
  *         assert self.vp != NULL, 'Not an open variable'
  *         print ('=== AdiosVariable ===')             # <<<<<<<<<<<<<<
  *         print ('%15s : %lu' % ('vp', <unsigned long> self.vp))
  *         print ('%15s : %lu' % ('fp', <unsigned long> self.file.fp))
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_tuple__33, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1574, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_tuple__33, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1582, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":1575
+  /* "adios_mpi.pyx":1583
  *         assert self.vp != NULL, 'Not an open variable'
  *         print ('=== AdiosVariable ===')
  *         print ('%15s : %lu' % ('vp', <unsigned long> self.vp))             # <<<<<<<<<<<<<<
  *         print ('%15s : %lu' % ('fp', <unsigned long> self.file.fp))
  *         printvar(self.vp)
  */
-  __pyx_t_1 = __Pyx_PyInt_From_unsigned_long(((unsigned long)__pyx_v_self->vp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1575, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_unsigned_long(((unsigned long)__pyx_v_self->vp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1583, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1575, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1583, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_vp);
   __Pyx_GIVEREF(__pyx_n_s_vp);
@@ -24390,29 +25040,29 @@ static PyObject *__pyx_f_9adios_mpi_3var_printself(struct __pyx_obj_9adios_mpi_v
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_lu, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1575, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_lu, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1583, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1575, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1583, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1575, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1583, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":1576
+  /* "adios_mpi.pyx":1584
  *         print ('=== AdiosVariable ===')
  *         print ('%15s : %lu' % ('vp', <unsigned long> self.vp))
  *         print ('%15s : %lu' % ('fp', <unsigned long> self.file.fp))             # <<<<<<<<<<<<<<
  *         printvar(self.vp)
  * 
  */
-  __pyx_t_1 = __Pyx_PyInt_From_unsigned_long(((unsigned long)__pyx_v_self->file->fp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1576, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_unsigned_long(((unsigned long)__pyx_v_self->file->fp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1584, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1576, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1584, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_fp);
   __Pyx_GIVEREF(__pyx_n_s_fp);
@@ -24420,31 +25070,31 @@ static PyObject *__pyx_f_9adios_mpi_3var_printself(struct __pyx_obj_9adios_mpi_v
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_lu, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1576, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_15s_lu, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1584, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1576, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1584, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1576, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1584, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":1577
+  /* "adios_mpi.pyx":1585
  *         print ('%15s : %lu' % ('vp', <unsigned long> self.vp))
  *         print ('%15s : %lu' % ('fp', <unsigned long> self.file.fp))
  *         printvar(self.vp)             # <<<<<<<<<<<<<<
  * 
  *     def __repr__(self):
  */
-  __pyx_t_1 = __pyx_f_9adios_mpi_printvar(__pyx_v_self->vp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1577, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_9adios_mpi_printvar(__pyx_v_self->vp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1585, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":1571
+  /* "adios_mpi.pyx":1579
  *             return var
  * 
  *     cpdef printself(self):             # <<<<<<<<<<<<<<
@@ -24488,7 +25138,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_14printself(struct __pyx_obj_9adios_mp
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("printself", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_9adios_mpi_3var_printself(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1571, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_9adios_mpi_3var_printself(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1579, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -24505,7 +25155,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_14printself(struct __pyx_obj_9adios_mp
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1579
+/* "adios_mpi.pyx":1587
  *         printvar(self.vp)
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -24537,7 +25187,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_16__repr__(struct __pyx_obj_9adios_mpi
   PyObject *__pyx_t_6 = NULL;
   __Pyx_RefNannySetupContext("__repr__", 0);
 
-  /* "adios_mpi.pyx":1580
+  /* "adios_mpi.pyx":1588
  * 
  *     def __repr__(self):
  *         return "AdiosVar (varid=%r, name=%r, dtype=%r, ndim=%r, dims=%r, nsteps=%r, attrs=%r)" % \             # <<<<<<<<<<<<<<
@@ -24546,47 +25196,47 @@ static PyObject *__pyx_pf_9adios_mpi_3var_16__repr__(struct __pyx_obj_9adios_mpi
  */
   __Pyx_XDECREF(__pyx_r);
 
-  /* "adios_mpi.pyx":1581
+  /* "adios_mpi.pyx":1589
  *     def __repr__(self):
  *         return "AdiosVar (varid=%r, name=%r, dtype=%r, ndim=%r, dims=%r, nsteps=%r, attrs=%r)" % \
  *                (self.varid,             # <<<<<<<<<<<<<<
  *                 self.name,
  *                 self.dtype,
  */
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->varid); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1581, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->varid); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1589, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
 
-  /* "adios_mpi.pyx":1584
+  /* "adios_mpi.pyx":1592
  *                 self.name,
  *                 self.dtype,
  *                 self.ndim,             # <<<<<<<<<<<<<<
  *                 self.dims,
  *                 self.nsteps,
  */
-  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_self->ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1584, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_self->ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1592, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
 
-  /* "adios_mpi.pyx":1586
+  /* "adios_mpi.pyx":1594
  *                 self.ndim,
  *                 self.dims,
  *                 self.nsteps,             # <<<<<<<<<<<<<<
  *                 self.attrs.keys())
  * 
  */
-  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_self->nsteps); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1586, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_self->nsteps); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1594, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
 
-  /* "adios_mpi.pyx":1587
+  /* "adios_mpi.pyx":1595
  *                 self.dims,
  *                 self.nsteps,
  *                 self.attrs.keys())             # <<<<<<<<<<<<<<
  * 
  *     def _readattr(self, varname):
  */
-  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1587, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1595, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __pyx_t_6 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_5))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
     __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
     if (likely(__pyx_t_6)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
@@ -24596,22 +25246,22 @@ static PyObject *__pyx_pf_9adios_mpi_3var_16__repr__(struct __pyx_obj_9adios_mpi
     }
   }
   if (__pyx_t_6) {
-    __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1587, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1595, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   } else {
-    __pyx_t_4 = __Pyx_PyObject_CallNoArg(__pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1587, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_CallNoArg(__pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1595, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "adios_mpi.pyx":1581
+  /* "adios_mpi.pyx":1589
  *     def __repr__(self):
  *         return "AdiosVar (varid=%r, name=%r, dtype=%r, ndim=%r, dims=%r, nsteps=%r, attrs=%r)" % \
  *                (self.varid,             # <<<<<<<<<<<<<<
  *                 self.name,
  *                 self.dtype,
  */
-  __pyx_t_5 = PyTuple_New(7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1581, __pyx_L1_error)
+  __pyx_t_5 = PyTuple_New(7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1589, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1);
@@ -24635,21 +25285,21 @@ static PyObject *__pyx_pf_9adios_mpi_3var_16__repr__(struct __pyx_obj_9adios_mpi
   __pyx_t_3 = 0;
   __pyx_t_4 = 0;
 
-  /* "adios_mpi.pyx":1580
+  /* "adios_mpi.pyx":1588
  * 
  *     def __repr__(self):
  *         return "AdiosVar (varid=%r, name=%r, dtype=%r, ndim=%r, dims=%r, nsteps=%r, attrs=%r)" % \             # <<<<<<<<<<<<<<
  *                (self.varid,
  *                 self.name,
  */
-  __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_AdiosVar_varid_r_name_r_dtype_r, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1580, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_AdiosVar_varid_r_name_r_dtype_r, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1588, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __pyx_r = __pyx_t_4;
   __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":1579
+  /* "adios_mpi.pyx":1587
  *         printvar(self.vp)
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -24673,7 +25323,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_16__repr__(struct __pyx_obj_9adios_mpi
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1589
+/* "adios_mpi.pyx":1597
  *                 self.attrs.keys())
  * 
  *     def _readattr(self, varname):             # <<<<<<<<<<<<<<
@@ -24716,7 +25366,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_18_readattr(struct __pyx_obj_9adios_mp
   __Pyx_RefNannySetupContext("_readattr", 0);
   __Pyx_INCREF(__pyx_v_varname);
 
-  /* "adios_mpi.pyx":1590
+  /* "adios_mpi.pyx":1598
  * 
  *     def _readattr(self, varname):
  *         if not isinstance(varname, tuple):             # <<<<<<<<<<<<<<
@@ -24727,14 +25377,14 @@ static PyObject *__pyx_pf_9adios_mpi_3var_18_readattr(struct __pyx_obj_9adios_mp
   __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0);
   if (__pyx_t_2) {
 
-    /* "adios_mpi.pyx":1591
+    /* "adios_mpi.pyx":1599
  *     def _readattr(self, varname):
  *         if not isinstance(varname, tuple):
  *             varname = (varname,)             # <<<<<<<<<<<<<<
  * 
  *         if len(varname) > 1:
  */
-    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1591, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1599, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_varname);
     __Pyx_GIVEREF(__pyx_v_varname);
@@ -24742,7 +25392,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_18_readattr(struct __pyx_obj_9adios_mp
     __Pyx_DECREF_SET(__pyx_v_varname, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "adios_mpi.pyx":1590
+    /* "adios_mpi.pyx":1598
  * 
  *     def _readattr(self, varname):
  *         if not isinstance(varname, tuple):             # <<<<<<<<<<<<<<
@@ -24751,37 +25401,37 @@ static PyObject *__pyx_pf_9adios_mpi_3var_18_readattr(struct __pyx_obj_9adios_mp
  */
   }
 
-  /* "adios_mpi.pyx":1593
+  /* "adios_mpi.pyx":1601
  *             varname = (varname,)
  * 
  *         if len(varname) > 1:             # <<<<<<<<<<<<<<
  *             raise KeyError(varname)
  * 
  */
-  __pyx_t_4 = PyObject_Length(__pyx_v_varname); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 1593, __pyx_L1_error)
+  __pyx_t_4 = PyObject_Length(__pyx_v_varname); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 1601, __pyx_L1_error)
   __pyx_t_2 = ((__pyx_t_4 > 1) != 0);
   if (__pyx_t_2) {
 
-    /* "adios_mpi.pyx":1594
+    /* "adios_mpi.pyx":1602
  * 
  *         if len(varname) > 1:
  *             raise KeyError(varname)             # <<<<<<<<<<<<<<
  * 
  *         for key_ in varname:
  */
-    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1594, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1602, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_varname);
     __Pyx_GIVEREF(__pyx_v_varname);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_varname);
-    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_KeyError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1594, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_KeyError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1602, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_Raise(__pyx_t_5, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    __PYX_ERR(0, 1594, __pyx_L1_error)
+    __PYX_ERR(0, 1602, __pyx_L1_error)
 
-    /* "adios_mpi.pyx":1593
+    /* "adios_mpi.pyx":1601
  *             varname = (varname,)
  * 
  *         if len(varname) > 1:             # <<<<<<<<<<<<<<
@@ -24790,7 +25440,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_18_readattr(struct __pyx_obj_9adios_mp
  */
   }
 
-  /* "adios_mpi.pyx":1596
+  /* "adios_mpi.pyx":1604
  *             raise KeyError(varname)
  * 
  *         for key_ in varname:             # <<<<<<<<<<<<<<
@@ -24801,26 +25451,26 @@ static PyObject *__pyx_pf_9adios_mpi_3var_18_readattr(struct __pyx_obj_9adios_mp
     __pyx_t_5 = __pyx_v_varname; __Pyx_INCREF(__pyx_t_5); __pyx_t_4 = 0;
     __pyx_t_6 = NULL;
   } else {
-    __pyx_t_4 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_v_varname); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1596, __pyx_L1_error)
+    __pyx_t_4 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_v_varname); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1604, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1596, __pyx_L1_error)
+    __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1604, __pyx_L1_error)
   }
   for (;;) {
     if (likely(!__pyx_t_6)) {
       if (likely(PyList_CheckExact(__pyx_t_5))) {
         if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_5)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_3 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1596, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_3 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1604, __pyx_L1_error)
         #else
-        __pyx_t_3 = PySequence_ITEM(__pyx_t_5, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1596, __pyx_L1_error)
+        __pyx_t_3 = PySequence_ITEM(__pyx_t_5, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1604, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
         #endif
       } else {
         if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_5)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1596, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1604, __pyx_L1_error)
         #else
-        __pyx_t_3 = PySequence_ITEM(__pyx_t_5, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1596, __pyx_L1_error)
+        __pyx_t_3 = PySequence_ITEM(__pyx_t_5, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1604, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
         #endif
       }
@@ -24830,7 +25480,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_18_readattr(struct __pyx_obj_9adios_mp
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
           if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-          else __PYX_ERR(0, 1596, __pyx_L1_error)
+          else __PYX_ERR(0, 1604, __pyx_L1_error)
         }
         break;
       }
@@ -24839,7 +25489,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_18_readattr(struct __pyx_obj_9adios_mp
     __Pyx_XDECREF_SET(__pyx_v_key_, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "adios_mpi.pyx":1597
+    /* "adios_mpi.pyx":1605
  * 
  *         for key_ in varname:
  *             if not isinstance(key_, str):             # <<<<<<<<<<<<<<
@@ -24850,20 +25500,20 @@ static PyObject *__pyx_pf_9adios_mpi_3var_18_readattr(struct __pyx_obj_9adios_mp
     __pyx_t_1 = ((!(__pyx_t_2 != 0)) != 0);
     if (__pyx_t_1) {
 
-      /* "adios_mpi.pyx":1598
+      /* "adios_mpi.pyx":1606
  *         for key_ in varname:
  *             if not isinstance(key_, str):
  *                 raise TypeError("Unhashable type")             # <<<<<<<<<<<<<<
  * 
  *             if key_.startswith('/'):
  */
-      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__34, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1598, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__34, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1606, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_Raise(__pyx_t_3, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      __PYX_ERR(0, 1598, __pyx_L1_error)
+      __PYX_ERR(0, 1606, __pyx_L1_error)
 
-      /* "adios_mpi.pyx":1597
+      /* "adios_mpi.pyx":1605
  * 
  *         for key_ in varname:
  *             if not isinstance(key_, str):             # <<<<<<<<<<<<<<
@@ -24872,35 +25522,35 @@ static PyObject *__pyx_pf_9adios_mpi_3var_18_readattr(struct __pyx_obj_9adios_mp
  */
     }
 
-    /* "adios_mpi.pyx":1600
+    /* "adios_mpi.pyx":1608
  *                 raise TypeError("Unhashable type")
  * 
  *             if key_.startswith('/'):             # <<<<<<<<<<<<<<
  *                 key_ = key_[1:]
  * 
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_key_, __pyx_n_s_startswith); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1600, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_key_, __pyx_n_s_startswith); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1608, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__35, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1600, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__35, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1608, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1600, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1608, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     if (__pyx_t_1) {
 
-      /* "adios_mpi.pyx":1601
+      /* "adios_mpi.pyx":1609
  * 
  *             if key_.startswith('/'):
  *                 key_ = key_[1:]             # <<<<<<<<<<<<<<
  * 
  *             if key_ in self.attrs.keys():
  */
-      __pyx_t_7 = __Pyx_PyObject_GetSlice(__pyx_v_key_, 1, 0, NULL, NULL, &__pyx_slice__36, 1, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1601, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetSlice(__pyx_v_key_, 1, 0, NULL, NULL, &__pyx_slice__36, 1, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1609, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF_SET(__pyx_v_key_, __pyx_t_7);
       __pyx_t_7 = 0;
 
-      /* "adios_mpi.pyx":1600
+      /* "adios_mpi.pyx":1608
  *                 raise TypeError("Unhashable type")
  * 
  *             if key_.startswith('/'):             # <<<<<<<<<<<<<<
@@ -24909,17 +25559,17 @@ static PyObject *__pyx_pf_9adios_mpi_3var_18_readattr(struct __pyx_obj_9adios_mp
  */
     }
 
-    /* "adios_mpi.pyx":1603
+    /* "adios_mpi.pyx":1611
  *                 key_ = key_[1:]
  * 
  *             if key_ in self.attrs.keys():             # <<<<<<<<<<<<<<
  *                 return self.attrs.get(key_)
  * 
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1603, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1611, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_8 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
       __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_3);
       if (likely(__pyx_t_8)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -24929,19 +25579,19 @@ static PyObject *__pyx_pf_9adios_mpi_3var_18_readattr(struct __pyx_obj_9adios_mp
       }
     }
     if (__pyx_t_8) {
-      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1603, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1611, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     } else {
-      __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1603, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1611, __pyx_L1_error)
     }
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_1 = (__Pyx_PySequence_ContainsTF(__pyx_v_key_, __pyx_t_7, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1603, __pyx_L1_error)
+    __pyx_t_1 = (__Pyx_PySequence_ContainsTF(__pyx_v_key_, __pyx_t_7, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1611, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
 
-      /* "adios_mpi.pyx":1604
+      /* "adios_mpi.pyx":1612
  * 
  *             if key_ in self.attrs.keys():
  *                 return self.attrs.get(key_)             # <<<<<<<<<<<<<<
@@ -24949,10 +25599,10 @@ static PyObject *__pyx_pf_9adios_mpi_3var_18_readattr(struct __pyx_obj_9adios_mp
  *             if '/'+key_ in self.attrs.keys():
  */
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1604, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1612, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __pyx_t_8 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
         __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_3);
         if (likely(__pyx_t_8)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -24962,18 +25612,36 @@ static PyObject *__pyx_pf_9adios_mpi_3var_18_readattr(struct __pyx_obj_9adios_mp
         }
       }
       if (!__pyx_t_8) {
-        __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_key_); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1604, __pyx_L1_error)
+        __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_key_); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1612, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
       } else {
-        __pyx_t_9 = PyTuple_New(1+1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1604, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_9);
-        __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_8); __pyx_t_8 = NULL;
-        __Pyx_INCREF(__pyx_v_key_);
-        __Pyx_GIVEREF(__pyx_v_key_);
-        PyTuple_SET_ITEM(__pyx_t_9, 0+1, __pyx_v_key_);
-        __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_9, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1604, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_7);
-        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+        #if CYTHON_FAST_PYCALL
+        if (PyFunction_Check(__pyx_t_3)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_v_key_};
+          __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1612, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+          __Pyx_GOTREF(__pyx_t_7);
+        } else
+        #endif
+        #if CYTHON_FAST_PYCCALL
+        if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_v_key_};
+          __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1612, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+          __Pyx_GOTREF(__pyx_t_7);
+        } else
+        #endif
+        {
+          __pyx_t_9 = PyTuple_New(1+1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1612, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_9);
+          __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_8); __pyx_t_8 = NULL;
+          __Pyx_INCREF(__pyx_v_key_);
+          __Pyx_GIVEREF(__pyx_v_key_);
+          PyTuple_SET_ITEM(__pyx_t_9, 0+1, __pyx_v_key_);
+          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_9, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1612, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_7);
+          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+        }
       }
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_r = __pyx_t_7;
@@ -24981,7 +25649,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_18_readattr(struct __pyx_obj_9adios_mp
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       goto __pyx_L0;
 
-      /* "adios_mpi.pyx":1603
+      /* "adios_mpi.pyx":1611
  *                 key_ = key_[1:]
  * 
  *             if key_ in self.attrs.keys():             # <<<<<<<<<<<<<<
@@ -24990,19 +25658,19 @@ static PyObject *__pyx_pf_9adios_mpi_3var_18_readattr(struct __pyx_obj_9adios_mp
  */
     }
 
-    /* "adios_mpi.pyx":1606
+    /* "adios_mpi.pyx":1614
  *                 return self.attrs.get(key_)
  * 
  *             if '/'+key_ in self.attrs.keys():             # <<<<<<<<<<<<<<
  *                 return self.attrs.get('/'+key_)
  * 
  */
-    __pyx_t_7 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1606, __pyx_L1_error)
+    __pyx_t_7 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1614, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
-    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1606, __pyx_L1_error)
+    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1614, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
     __pyx_t_8 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_9))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
       __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_9);
       if (likely(__pyx_t_8)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
@@ -25012,20 +25680,20 @@ static PyObject *__pyx_pf_9adios_mpi_3var_18_readattr(struct __pyx_obj_9adios_mp
       }
     }
     if (__pyx_t_8) {
-      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1606, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1614, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     } else {
-      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1606, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1614, __pyx_L1_error)
     }
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-    __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_7, __pyx_t_3, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1606, __pyx_L1_error)
+    __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_7, __pyx_t_3, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1614, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __pyx_t_1 = (__pyx_t_2 != 0);
     if (__pyx_t_1) {
 
-      /* "adios_mpi.pyx":1607
+      /* "adios_mpi.pyx":1615
  * 
  *             if '/'+key_ in self.attrs.keys():
  *                 return self.attrs.get('/'+key_)             # <<<<<<<<<<<<<<
@@ -25033,12 +25701,12 @@ static PyObject *__pyx_pf_9adios_mpi_3var_18_readattr(struct __pyx_obj_9adios_mp
  *             for name in self.attrs.keys():
  */
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_get); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1607, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_get); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1615, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      __pyx_t_9 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1607, __pyx_L1_error)
+      __pyx_t_9 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1615, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
       __pyx_t_8 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_7))) {
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
         __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
         if (likely(__pyx_t_8)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
@@ -25048,19 +25716,39 @@ static PyObject *__pyx_pf_9adios_mpi_3var_18_readattr(struct __pyx_obj_9adios_mp
         }
       }
       if (!__pyx_t_8) {
-        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1607, __pyx_L1_error)
+        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1615, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
         __Pyx_GOTREF(__pyx_t_3);
       } else {
-        __pyx_t_10 = PyTuple_New(1+1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1607, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_10);
-        __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_8); __pyx_t_8 = NULL;
-        __Pyx_GIVEREF(__pyx_t_9);
-        PyTuple_SET_ITEM(__pyx_t_10, 0+1, __pyx_t_9);
-        __pyx_t_9 = 0;
-        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1607, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_3);
-        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+        #if CYTHON_FAST_PYCALL
+        if (PyFunction_Check(__pyx_t_7)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_t_9};
+          __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1615, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+        } else
+        #endif
+        #if CYTHON_FAST_PYCCALL
+        if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_t_9};
+          __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1615, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+        } else
+        #endif
+        {
+          __pyx_t_10 = PyTuple_New(1+1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1615, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_10);
+          __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_8); __pyx_t_8 = NULL;
+          __Pyx_GIVEREF(__pyx_t_9);
+          PyTuple_SET_ITEM(__pyx_t_10, 0+1, __pyx_t_9);
+          __pyx_t_9 = 0;
+          __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1615, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+        }
       }
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       __pyx_r = __pyx_t_3;
@@ -25068,7 +25756,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_18_readattr(struct __pyx_obj_9adios_mp
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       goto __pyx_L0;
 
-      /* "adios_mpi.pyx":1606
+      /* "adios_mpi.pyx":1614
  *                 return self.attrs.get(key_)
  * 
  *             if '/'+key_ in self.attrs.keys():             # <<<<<<<<<<<<<<
@@ -25077,17 +25765,17 @@ static PyObject *__pyx_pf_9adios_mpi_3var_18_readattr(struct __pyx_obj_9adios_mp
  */
     }
 
-    /* "adios_mpi.pyx":1609
+    /* "adios_mpi.pyx":1617
  *                 return self.attrs.get('/'+key_)
  * 
  *             for name in self.attrs.keys():             # <<<<<<<<<<<<<<
  *                 #if (key_ == os.path.dirname(name)) or ('/' + key_ == os.path.dirname(name)):
  *                 if name.startswith(key_) or name.startswith('/'+key_):
  */
-    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1609, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1617, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __pyx_t_10 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_7))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
       __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_7);
       if (likely(__pyx_t_10)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
@@ -25097,10 +25785,10 @@ static PyObject *__pyx_pf_9adios_mpi_3var_18_readattr(struct __pyx_obj_9adios_mp
       }
     }
     if (__pyx_t_10) {
-      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_10); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1609, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_10); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1617, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
     } else {
-      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1609, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1617, __pyx_L1_error)
     }
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
@@ -25108,27 +25796,27 @@ static PyObject *__pyx_pf_9adios_mpi_3var_18_readattr(struct __pyx_obj_9adios_mp
       __pyx_t_7 = __pyx_t_3; __Pyx_INCREF(__pyx_t_7); __pyx_t_11 = 0;
       __pyx_t_12 = NULL;
     } else {
-      __pyx_t_11 = -1; __pyx_t_7 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1609, __pyx_L1_error)
+      __pyx_t_11 = -1; __pyx_t_7 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1617, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      __pyx_t_12 = Py_TYPE(__pyx_t_7)->tp_iternext; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1609, __pyx_L1_error)
+      __pyx_t_12 = Py_TYPE(__pyx_t_7)->tp_iternext; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1617, __pyx_L1_error)
     }
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     for (;;) {
       if (likely(!__pyx_t_12)) {
         if (likely(PyList_CheckExact(__pyx_t_7))) {
           if (__pyx_t_11 >= PyList_GET_SIZE(__pyx_t_7)) break;
-          #if CYTHON_COMPILING_IN_CPYTHON
-          __pyx_t_3 = PyList_GET_ITEM(__pyx_t_7, __pyx_t_11); __Pyx_INCREF(__pyx_t_3); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 1609, __pyx_L1_error)
+          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+          __pyx_t_3 = PyList_GET_ITEM(__pyx_t_7, __pyx_t_11); __Pyx_INCREF(__pyx_t_3); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 1617, __pyx_L1_error)
           #else
-          __pyx_t_3 = PySequence_ITEM(__pyx_t_7, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1609, __pyx_L1_error)
+          __pyx_t_3 = PySequence_ITEM(__pyx_t_7, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1617, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_3);
           #endif
         } else {
           if (__pyx_t_11 >= PyTuple_GET_SIZE(__pyx_t_7)) break;
-          #if CYTHON_COMPILING_IN_CPYTHON
-          __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_7, __pyx_t_11); __Pyx_INCREF(__pyx_t_3); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 1609, __pyx_L1_error)
+          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+          __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_7, __pyx_t_11); __Pyx_INCREF(__pyx_t_3); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 1617, __pyx_L1_error)
           #else
-          __pyx_t_3 = PySequence_ITEM(__pyx_t_7, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1609, __pyx_L1_error)
+          __pyx_t_3 = PySequence_ITEM(__pyx_t_7, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1617, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_3);
           #endif
         }
@@ -25138,7 +25826,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_18_readattr(struct __pyx_obj_9adios_mp
           PyObject* exc_type = PyErr_Occurred();
           if (exc_type) {
             if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-            else __PYX_ERR(0, 1609, __pyx_L1_error)
+            else __PYX_ERR(0, 1617, __pyx_L1_error)
           }
           break;
         }
@@ -25147,17 +25835,17 @@ static PyObject *__pyx_pf_9adios_mpi_3var_18_readattr(struct __pyx_obj_9adios_mp
       __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_3);
       __pyx_t_3 = 0;
 
-      /* "adios_mpi.pyx":1611
+      /* "adios_mpi.pyx":1619
  *             for name in self.attrs.keys():
  *                 #if (key_ == os.path.dirname(name)) or ('/' + key_ == os.path.dirname(name)):
  *                 if name.startswith(key_) or name.startswith('/'+key_):             # <<<<<<<<<<<<<<
  *                     return group(self.file, self.name + '/' + key_)
  * 
  */
-      __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_startswith); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1611, __pyx_L1_error)
+      __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_startswith); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1619, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_10);
       __pyx_t_9 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_10))) {
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_10))) {
         __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_10);
         if (likely(__pyx_t_9)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
@@ -25167,33 +25855,51 @@ static PyObject *__pyx_pf_9adios_mpi_3var_18_readattr(struct __pyx_obj_9adios_mp
         }
       }
       if (!__pyx_t_9) {
-        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_v_key_); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1611, __pyx_L1_error)
+        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_v_key_); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1619, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
       } else {
-        __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1611, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_8);
-        __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_9); __pyx_t_9 = NULL;
-        __Pyx_INCREF(__pyx_v_key_);
-        __Pyx_GIVEREF(__pyx_v_key_);
-        PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_v_key_);
-        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1611, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_3);
-        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        #if CYTHON_FAST_PYCALL
+        if (PyFunction_Check(__pyx_t_10)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_9, __pyx_v_key_};
+          __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_10, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1619, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+          __Pyx_GOTREF(__pyx_t_3);
+        } else
+        #endif
+        #if CYTHON_FAST_PYCCALL
+        if (__Pyx_PyFastCFunction_Check(__pyx_t_10)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_9, __pyx_v_key_};
+          __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_10, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1619, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+          __Pyx_GOTREF(__pyx_t_3);
+        } else
+        #endif
+        {
+          __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1619, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_8);
+          __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_9); __pyx_t_9 = NULL;
+          __Pyx_INCREF(__pyx_v_key_);
+          __Pyx_GIVEREF(__pyx_v_key_);
+          PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_v_key_);
+          __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1619, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        }
       }
       __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
-      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1611, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1619, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       if (!__pyx_t_2) {
       } else {
         __pyx_t_1 = __pyx_t_2;
         goto __pyx_L14_bool_binop_done;
       }
-      __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_startswith); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1611, __pyx_L1_error)
+      __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_startswith); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1619, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_10);
-      __pyx_t_8 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1611, __pyx_L1_error)
+      __pyx_t_8 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1619, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
       __pyx_t_9 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_10))) {
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_10))) {
         __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_10);
         if (likely(__pyx_t_9)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
@@ -25203,28 +25909,48 @@ static PyObject *__pyx_pf_9adios_mpi_3var_18_readattr(struct __pyx_obj_9adios_mp
         }
       }
       if (!__pyx_t_9) {
-        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1611, __pyx_L1_error)
+        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1619, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
         __Pyx_GOTREF(__pyx_t_3);
       } else {
-        __pyx_t_13 = PyTuple_New(1+1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1611, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_13);
-        __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_9); __pyx_t_9 = NULL;
-        __Pyx_GIVEREF(__pyx_t_8);
-        PyTuple_SET_ITEM(__pyx_t_13, 0+1, __pyx_t_8);
-        __pyx_t_8 = 0;
-        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_13, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1611, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_3);
-        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+        #if CYTHON_FAST_PYCALL
+        if (PyFunction_Check(__pyx_t_10)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_9, __pyx_t_8};
+          __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_10, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1619, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        } else
+        #endif
+        #if CYTHON_FAST_PYCCALL
+        if (__Pyx_PyFastCFunction_Check(__pyx_t_10)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_9, __pyx_t_8};
+          __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_10, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1619, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        } else
+        #endif
+        {
+          __pyx_t_13 = PyTuple_New(1+1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1619, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_13);
+          __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_9); __pyx_t_9 = NULL;
+          __Pyx_GIVEREF(__pyx_t_8);
+          PyTuple_SET_ITEM(__pyx_t_13, 0+1, __pyx_t_8);
+          __pyx_t_8 = 0;
+          __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_13, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1619, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+        }
       }
       __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
-      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1611, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1619, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_t_1 = __pyx_t_2;
       __pyx_L14_bool_binop_done:;
       if (__pyx_t_1) {
 
-        /* "adios_mpi.pyx":1612
+        /* "adios_mpi.pyx":1620
  *                 #if (key_ == os.path.dirname(name)) or ('/' + key_ == os.path.dirname(name)):
  *                 if name.startswith(key_) or name.startswith('/'+key_):
  *                     return group(self.file, self.name + '/' + key_)             # <<<<<<<<<<<<<<
@@ -25232,12 +25958,12 @@ static PyObject *__pyx_pf_9adios_mpi_3var_18_readattr(struct __pyx_obj_9adios_mp
  *     def _readvar(self, args):
  */
         __Pyx_XDECREF(__pyx_r);
-        __pyx_t_3 = PyNumber_Add(__pyx_v_self->name, __pyx_kp_s_); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1612, __pyx_L1_error)
+        __pyx_t_3 = PyNumber_Add(__pyx_v_self->name, __pyx_kp_s_); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1620, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
-        __pyx_t_10 = PyNumber_Add(__pyx_t_3, __pyx_v_key_); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1612, __pyx_L1_error)
+        __pyx_t_10 = PyNumber_Add(__pyx_t_3, __pyx_v_key_); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1620, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_10);
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-        __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1612, __pyx_L1_error)
+        __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1620, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
         __Pyx_INCREF(((PyObject *)__pyx_v_self->file));
         __Pyx_GIVEREF(((PyObject *)__pyx_v_self->file));
@@ -25245,7 +25971,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_18_readattr(struct __pyx_obj_9adios_mp
         __Pyx_GIVEREF(__pyx_t_10);
         PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_10);
         __pyx_t_10 = 0;
-        __pyx_t_10 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_9adios_mpi_group), __pyx_t_3, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1612, __pyx_L1_error)
+        __pyx_t_10 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_9adios_mpi_group), __pyx_t_3, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1620, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_10);
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
         __pyx_r = __pyx_t_10;
@@ -25254,7 +25980,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_18_readattr(struct __pyx_obj_9adios_mp
         __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
         goto __pyx_L0;
 
-        /* "adios_mpi.pyx":1611
+        /* "adios_mpi.pyx":1619
  *             for name in self.attrs.keys():
  *                 #if (key_ == os.path.dirname(name)) or ('/' + key_ == os.path.dirname(name)):
  *                 if name.startswith(key_) or name.startswith('/'+key_):             # <<<<<<<<<<<<<<
@@ -25263,7 +25989,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_18_readattr(struct __pyx_obj_9adios_mp
  */
       }
 
-      /* "adios_mpi.pyx":1609
+      /* "adios_mpi.pyx":1617
  *                 return self.attrs.get('/'+key_)
  * 
  *             for name in self.attrs.keys():             # <<<<<<<<<<<<<<
@@ -25273,7 +25999,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_18_readattr(struct __pyx_obj_9adios_mp
     }
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-    /* "adios_mpi.pyx":1596
+    /* "adios_mpi.pyx":1604
  *             raise KeyError(varname)
  * 
  *         for key_ in varname:             # <<<<<<<<<<<<<<
@@ -25283,7 +26009,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_18_readattr(struct __pyx_obj_9adios_mp
   }
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "adios_mpi.pyx":1589
+  /* "adios_mpi.pyx":1597
  *                 self.attrs.keys())
  * 
  *     def _readattr(self, varname):             # <<<<<<<<<<<<<<
@@ -25313,7 +26039,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_18_readattr(struct __pyx_obj_9adios_mp
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1614
+/* "adios_mpi.pyx":1622
  *                     return group(self.file, self.name + '/' + key_)
  * 
  *     def _readvar(self, args):             # <<<<<<<<<<<<<<
@@ -25349,29 +26075,30 @@ static PyObject *__pyx_pf_9adios_mpi_3var_20_readvar(struct __pyx_obj_9adios_mpi
   int __pyx_t_3;
   PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
-  Py_ssize_t __pyx_t_6;
+  int __pyx_t_6;
   PyObject *__pyx_t_7 = NULL;
   int __pyx_t_8;
   struct __pyx_opt_args_9adios_mpi_3var_read __pyx_t_9;
-  PyObject *(*__pyx_t_10)(PyObject *);
-  PyObject *__pyx_t_11 = NULL;
+  Py_ssize_t __pyx_t_10;
+  PyObject *(*__pyx_t_11)(PyObject *);
   PyObject *__pyx_t_12 = NULL;
   PyObject *__pyx_t_13 = NULL;
+  PyObject *__pyx_t_14 = NULL;
   __Pyx_RefNannySetupContext("_readvar", 0);
 
-  /* "adios_mpi.pyx":1615
+  /* "adios_mpi.pyx":1623
  * 
  *     def _readvar(self, args):
  *         shape = list(self.dims)             # <<<<<<<<<<<<<<
  *         if self.nsteps > 1:
  *             shape.insert(0, self.nsteps)
  */
-  __pyx_t_1 = PySequence_List(__pyx_v_self->dims); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1615, __pyx_L1_error)
+  __pyx_t_1 = PySequence_List(__pyx_v_self->dims); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1623, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_shape = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":1616
+  /* "adios_mpi.pyx":1624
  *     def _readvar(self, args):
  *         shape = list(self.dims)
  *         if self.nsteps > 1:             # <<<<<<<<<<<<<<
@@ -25381,19 +26108,19 @@ static PyObject *__pyx_pf_9adios_mpi_3var_20_readvar(struct __pyx_obj_9adios_mpi
   __pyx_t_2 = ((__pyx_v_self->nsteps > 1) != 0);
   if (__pyx_t_2) {
 
-    /* "adios_mpi.pyx":1617
+    /* "adios_mpi.pyx":1625
  *         shape = list(self.dims)
  *         if self.nsteps > 1:
  *             shape.insert(0, self.nsteps)             # <<<<<<<<<<<<<<
  *         asel = sel.select(shape, args)
  * 
  */
-    __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->nsteps); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1617, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->nsteps); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1625, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_3 = PyList_Insert(__pyx_v_shape, 0, __pyx_t_1); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(0, 1617, __pyx_L1_error)
+    __pyx_t_3 = PyList_Insert(__pyx_v_shape, 0, __pyx_t_1); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(0, 1625, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-    /* "adios_mpi.pyx":1616
+    /* "adios_mpi.pyx":1624
  *     def _readvar(self, args):
  *         shape = list(self.dims)
  *         if self.nsteps > 1:             # <<<<<<<<<<<<<<
@@ -25402,21 +26129,21 @@ static PyObject *__pyx_pf_9adios_mpi_3var_20_readvar(struct __pyx_obj_9adios_mpi
  */
   }
 
-  /* "adios_mpi.pyx":1618
+  /* "adios_mpi.pyx":1626
  *         if self.nsteps > 1:
  *             shape.insert(0, self.nsteps)
  *         asel = sel.select(shape, args)             # <<<<<<<<<<<<<<
  * 
  *         if isinstance(asel, sel.SimpleSelection):
  */
-  __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_sel); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1618, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_sel); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1626, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_select); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1618, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_select); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1626, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_t_4 = NULL;
   __pyx_t_6 = 0;
-  if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_5))) {
+  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
     __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
     if (likely(__pyx_t_4)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
@@ -25426,42 +26153,60 @@ static PyObject *__pyx_pf_9adios_mpi_3var_20_readvar(struct __pyx_obj_9adios_mpi
       __pyx_t_6 = 1;
     }
   }
-  __pyx_t_7 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1618, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_7);
-  if (__pyx_t_4) {
-    __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_4); __pyx_t_4 = NULL;
+  #if CYTHON_FAST_PYCALL
+  if (PyFunction_Check(__pyx_t_5)) {
+    PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_shape, __pyx_v_args};
+    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1626, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __Pyx_GOTREF(__pyx_t_1);
+  } else
+  #endif
+  #if CYTHON_FAST_PYCCALL
+  if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
+    PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_shape, __pyx_v_args};
+    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1626, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __Pyx_GOTREF(__pyx_t_1);
+  } else
+  #endif
+  {
+    __pyx_t_7 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1626, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_7);
+    if (__pyx_t_4) {
+      __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_4); __pyx_t_4 = NULL;
+    }
+    __Pyx_INCREF(__pyx_v_shape);
+    __Pyx_GIVEREF(__pyx_v_shape);
+    PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, __pyx_v_shape);
+    __Pyx_INCREF(__pyx_v_args);
+    __Pyx_GIVEREF(__pyx_v_args);
+    PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_v_args);
+    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1626, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   }
-  __Pyx_INCREF(__pyx_v_shape);
-  __Pyx_GIVEREF(__pyx_v_shape);
-  PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, __pyx_v_shape);
-  __Pyx_INCREF(__pyx_v_args);
-  __Pyx_GIVEREF(__pyx_v_args);
-  PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_v_args);
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1618, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __pyx_v_asel = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":1620
+  /* "adios_mpi.pyx":1628
  *         asel = sel.select(shape, args)
  * 
  *         if isinstance(asel, sel.SimpleSelection):             # <<<<<<<<<<<<<<
  *             if (self.nsteps) > 1:
  *                 return self.read(offset=asel.sel[0][1:],
  */
-  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_sel); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1620, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_sel); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1628, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_SimpleSelection); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1620, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_SimpleSelection); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1628, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_2 = PyObject_IsInstance(__pyx_v_asel, __pyx_t_5); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 1620, __pyx_L1_error)
+  __pyx_t_2 = PyObject_IsInstance(__pyx_v_asel, __pyx_t_5); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 1628, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __pyx_t_8 = (__pyx_t_2 != 0);
   if (__pyx_t_8) {
 
-    /* "adios_mpi.pyx":1621
+    /* "adios_mpi.pyx":1629
  * 
  *         if isinstance(asel, sel.SimpleSelection):
  *             if (self.nsteps) > 1:             # <<<<<<<<<<<<<<
@@ -25471,7 +26216,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_20_readvar(struct __pyx_obj_9adios_mpi
     __pyx_t_8 = ((__pyx_v_self->nsteps > 1) != 0);
     if (__pyx_t_8) {
 
-      /* "adios_mpi.pyx":1622
+      /* "adios_mpi.pyx":1630
  *         if isinstance(asel, sel.SimpleSelection):
  *             if (self.nsteps) > 1:
  *                 return self.read(offset=asel.sel[0][1:],             # <<<<<<<<<<<<<<
@@ -25479,119 +26224,119 @@ static PyObject *__pyx_pf_9adios_mpi_3var_20_readvar(struct __pyx_obj_9adios_mpi
  *                                  scalar=asel.sel[3][1:],
  */
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_read); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1622, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_read); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1630, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1622, __pyx_L1_error)
+      __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1630, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
-      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_sel); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1622, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_sel); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1630, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_7, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1622, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_7, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1630, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-      __pyx_t_7 = __Pyx_PyObject_GetSlice(__pyx_t_4, 1, 0, NULL, NULL, &__pyx_slice__37, 1, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1622, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetSlice(__pyx_t_4, 1, 0, NULL, NULL, &__pyx_slice__37, 1, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1630, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-      if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_offset, __pyx_t_7) < 0) __PYX_ERR(0, 1622, __pyx_L1_error)
+      if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_offset, __pyx_t_7) < 0) __PYX_ERR(0, 1630, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-      /* "adios_mpi.pyx":1623
+      /* "adios_mpi.pyx":1631
  *             if (self.nsteps) > 1:
  *                 return self.read(offset=asel.sel[0][1:],
  *                                  count=asel.sel[1][1:],             # <<<<<<<<<<<<<<
  *                                  scalar=asel.sel[3][1:],
  *                                  from_steps=asel.sel[0][0],
  */
-      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_sel); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1623, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_sel); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1631, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_7, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1623, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_7, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1631, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-      __pyx_t_7 = __Pyx_PyObject_GetSlice(__pyx_t_4, 1, 0, NULL, NULL, &__pyx_slice__38, 1, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1623, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetSlice(__pyx_t_4, 1, 0, NULL, NULL, &__pyx_slice__38, 1, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1631, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-      if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_count, __pyx_t_7) < 0) __PYX_ERR(0, 1622, __pyx_L1_error)
+      if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_count, __pyx_t_7) < 0) __PYX_ERR(0, 1630, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-      /* "adios_mpi.pyx":1624
+      /* "adios_mpi.pyx":1632
  *                 return self.read(offset=asel.sel[0][1:],
  *                                  count=asel.sel[1][1:],
  *                                  scalar=asel.sel[3][1:],             # <<<<<<<<<<<<<<
  *                                  from_steps=asel.sel[0][0],
  *                                  nsteps=asel.sel[1][0],
  */
-      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_sel); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1624, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_sel); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1632, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_7, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1624, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_7, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1632, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-      __pyx_t_7 = __Pyx_PyObject_GetSlice(__pyx_t_4, 1, 0, NULL, NULL, &__pyx_slice__39, 1, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1624, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetSlice(__pyx_t_4, 1, 0, NULL, NULL, &__pyx_slice__39, 1, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1632, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-      if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_scalar, __pyx_t_7) < 0) __PYX_ERR(0, 1622, __pyx_L1_error)
+      if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_scalar, __pyx_t_7) < 0) __PYX_ERR(0, 1630, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-      /* "adios_mpi.pyx":1625
+      /* "adios_mpi.pyx":1633
  *                                  count=asel.sel[1][1:],
  *                                  scalar=asel.sel[3][1:],
  *                                  from_steps=asel.sel[0][0],             # <<<<<<<<<<<<<<
  *                                  nsteps=asel.sel[1][0],
  *                                  step_scalar=asel.sel[3][0])
  */
-      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_sel); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1625, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_sel); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1633, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_7, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1625, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_7, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1633, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-      __pyx_t_7 = __Pyx_GetItemInt(__pyx_t_4, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1625, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_GetItemInt(__pyx_t_4, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1633, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-      if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_from_steps, __pyx_t_7) < 0) __PYX_ERR(0, 1622, __pyx_L1_error)
+      if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_from_steps, __pyx_t_7) < 0) __PYX_ERR(0, 1630, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-      /* "adios_mpi.pyx":1626
+      /* "adios_mpi.pyx":1634
  *                                  scalar=asel.sel[3][1:],
  *                                  from_steps=asel.sel[0][0],
  *                                  nsteps=asel.sel[1][0],             # <<<<<<<<<<<<<<
  *                                  step_scalar=asel.sel[3][0])
  *             else:
  */
-      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_sel); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1626, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_sel); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1634, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_7, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1626, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_7, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1634, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-      __pyx_t_7 = __Pyx_GetItemInt(__pyx_t_4, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1626, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_GetItemInt(__pyx_t_4, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1634, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-      if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_nsteps, __pyx_t_7) < 0) __PYX_ERR(0, 1622, __pyx_L1_error)
+      if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_nsteps, __pyx_t_7) < 0) __PYX_ERR(0, 1630, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-      /* "adios_mpi.pyx":1627
+      /* "adios_mpi.pyx":1635
  *                                  from_steps=asel.sel[0][0],
  *                                  nsteps=asel.sel[1][0],
  *                                  step_scalar=asel.sel[3][0])             # <<<<<<<<<<<<<<
  *             else:
  *                 return self.read(offset=asel.sel[0],
  */
-      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_sel); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1627, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_sel); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1635, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_7, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1627, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_7, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1635, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-      __pyx_t_7 = __Pyx_GetItemInt(__pyx_t_4, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1627, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_GetItemInt(__pyx_t_4, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1635, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-      if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_step_scalar, __pyx_t_7) < 0) __PYX_ERR(0, 1622, __pyx_L1_error)
+      if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_step_scalar, __pyx_t_7) < 0) __PYX_ERR(0, 1630, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-      /* "adios_mpi.pyx":1622
+      /* "adios_mpi.pyx":1630
  *         if isinstance(asel, sel.SimpleSelection):
  *             if (self.nsteps) > 1:
  *                 return self.read(offset=asel.sel[0][1:],             # <<<<<<<<<<<<<<
  *                                  count=asel.sel[1][1:],
  *                                  scalar=asel.sel[3][1:],
  */
-      __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1622, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1630, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -25599,7 +26344,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_20_readvar(struct __pyx_obj_9adios_mpi
       __pyx_t_7 = 0;
       goto __pyx_L0;
 
-      /* "adios_mpi.pyx":1621
+      /* "adios_mpi.pyx":1629
  * 
  *         if isinstance(asel, sel.SimpleSelection):
  *             if (self.nsteps) > 1:             # <<<<<<<<<<<<<<
@@ -25608,7 +26353,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_20_readvar(struct __pyx_obj_9adios_mpi
  */
     }
 
-    /* "adios_mpi.pyx":1629
+    /* "adios_mpi.pyx":1637
  *                                  step_scalar=asel.sel[3][0])
  *             else:
  *                 return self.read(offset=asel.sel[0],             # <<<<<<<<<<<<<<
@@ -25617,42 +26362,42 @@ static PyObject *__pyx_pf_9adios_mpi_3var_20_readvar(struct __pyx_obj_9adios_mpi
  */
     /*else*/ {
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_sel); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1629, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_sel); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1637, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_7, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1629, __pyx_L1_error)
+      __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_7, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1637, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-      if (!(likely(PyTuple_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 1629, __pyx_L1_error)
+      if (!(likely(PyTuple_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 1637, __pyx_L1_error)
 
-      /* "adios_mpi.pyx":1630
+      /* "adios_mpi.pyx":1638
  *             else:
  *                 return self.read(offset=asel.sel[0],
  *                                  count=asel.sel[1],             # <<<<<<<<<<<<<<
  *                                  scalar=asel.sel[3],
  *                                  from_steps=0,
  */
-      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_sel); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1630, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_sel); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1638, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      __pyx_t_5 = __Pyx_GetItemInt(__pyx_t_7, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1630, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_GetItemInt(__pyx_t_7, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1638, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-      if (!(likely(PyTuple_CheckExact(__pyx_t_5))||((__pyx_t_5) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_5)->tp_name), 0))) __PYX_ERR(0, 1630, __pyx_L1_error)
+      if (!(likely(PyTuple_CheckExact(__pyx_t_5))||((__pyx_t_5) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_5)->tp_name), 0))) __PYX_ERR(0, 1638, __pyx_L1_error)
 
-      /* "adios_mpi.pyx":1631
+      /* "adios_mpi.pyx":1639
  *                 return self.read(offset=asel.sel[0],
  *                                  count=asel.sel[1],
  *                                  scalar=asel.sel[3],             # <<<<<<<<<<<<<<
  *                                  from_steps=0,
  *                                  nsteps=1)
  */
-      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_sel); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1631, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_sel); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1639, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_7, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1631, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_7, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1639, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-      if (!(likely(PyTuple_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(0, 1631, __pyx_L1_error)
+      if (!(likely(PyTuple_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(0, 1639, __pyx_L1_error)
 
-      /* "adios_mpi.pyx":1629
+      /* "adios_mpi.pyx":1637
  *                                  step_scalar=asel.sel[3][0])
  *             else:
  *                 return self.read(offset=asel.sel[0],             # <<<<<<<<<<<<<<
@@ -25665,7 +26410,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_20_readvar(struct __pyx_obj_9adios_mpi
       __pyx_t_9.scalar = ((PyObject*)__pyx_t_4);
       __pyx_t_9.from_steps = __pyx_int_0;
       __pyx_t_9.nsteps = __pyx_int_1;
-      __pyx_t_7 = ((struct __pyx_vtabstruct_9adios_mpi_var *)__pyx_v_self->__pyx_vtab)->read(__pyx_v_self, 0, &__pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1629, __pyx_L1_error)
+      __pyx_t_7 = ((struct __pyx_vtabstruct_9adios_mpi_var *)__pyx_v_self->__pyx_vtab)->read(__pyx_v_self, 0, &__pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1637, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
@@ -25675,7 +26420,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_20_readvar(struct __pyx_obj_9adios_mpi
       goto __pyx_L0;
     }
 
-    /* "adios_mpi.pyx":1620
+    /* "adios_mpi.pyx":1628
  *         asel = sel.select(shape, args)
  * 
  *         if isinstance(asel, sel.SimpleSelection):             # <<<<<<<<<<<<<<
@@ -25684,82 +26429,82 @@ static PyObject *__pyx_pf_9adios_mpi_3var_20_readvar(struct __pyx_obj_9adios_mpi
  */
   }
 
-  /* "adios_mpi.pyx":1635
+  /* "adios_mpi.pyx":1643
  *                                  nsteps=1)
  * 
  *         elif isinstance(asel, sel.FancySelection):             # <<<<<<<<<<<<<<
  *             shape = list(asel.sel[0][1])
  *             shape[asel.morder[0]] = 0
  */
-  __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_sel); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1635, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_sel); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1643, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_FancySelection); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1635, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_FancySelection); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1643, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __pyx_t_8 = PyObject_IsInstance(__pyx_v_asel, __pyx_t_4); if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(0, 1635, __pyx_L1_error)
+  __pyx_t_8 = PyObject_IsInstance(__pyx_v_asel, __pyx_t_4); if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(0, 1643, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_t_2 = (__pyx_t_8 != 0);
   if (__pyx_t_2) {
 
-    /* "adios_mpi.pyx":1636
+    /* "adios_mpi.pyx":1644
  * 
  *         elif isinstance(asel, sel.FancySelection):
  *             shape = list(asel.sel[0][1])             # <<<<<<<<<<<<<<
  *             shape[asel.morder[0]] = 0
  *             var = np.ndarray(shape, dtype=self.dtype)
  */
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_sel); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1636, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_sel); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1644, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_7 = __Pyx_GetItemInt(__pyx_t_4, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1636, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_GetItemInt(__pyx_t_4, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1644, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_7, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1636, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_7, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1644, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-    __pyx_t_7 = PySequence_List(__pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1636, __pyx_L1_error)
+    __pyx_t_7 = PySequence_List(__pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1644, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF_SET(__pyx_v_shape, ((PyObject*)__pyx_t_7));
     __pyx_t_7 = 0;
 
-    /* "adios_mpi.pyx":1637
+    /* "adios_mpi.pyx":1645
  *         elif isinstance(asel, sel.FancySelection):
  *             shape = list(asel.sel[0][1])
  *             shape[asel.morder[0]] = 0             # <<<<<<<<<<<<<<
  *             var = np.ndarray(shape, dtype=self.dtype)
  *             for idx, obj in enumerate(asel.sel):
  */
-    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_morder); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1637, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_morder); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1645, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
-    __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_7, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1637, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_7, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1645, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-    if (unlikely(PyObject_SetItem(__pyx_v_shape, __pyx_t_4, __pyx_int_0) < 0)) __PYX_ERR(0, 1637, __pyx_L1_error)
+    if (unlikely(PyObject_SetItem(__pyx_v_shape, __pyx_t_4, __pyx_int_0) < 0)) __PYX_ERR(0, 1645, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-    /* "adios_mpi.pyx":1638
+    /* "adios_mpi.pyx":1646
  *             shape = list(asel.sel[0][1])
  *             shape[asel.morder[0]] = 0
  *             var = np.ndarray(shape, dtype=self.dtype)             # <<<<<<<<<<<<<<
  *             for idx, obj in enumerate(asel.sel):
  *                 if (self.nsteps) > 1:
  */
-    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1638, __pyx_L1_error)
+    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1646, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_INCREF(__pyx_v_shape);
     __Pyx_GIVEREF(__pyx_v_shape);
     PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_shape);
-    __pyx_t_7 = PyDict_New(); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1638, __pyx_L1_error)
+    __pyx_t_7 = PyDict_New(); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1646, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
-    if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, ((PyObject *)__pyx_v_self->dtype)) < 0) __PYX_ERR(0, 1638, __pyx_L1_error)
-    __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_ndarray), __pyx_t_4, __pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1638, __pyx_L1_error)
+    if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, ((PyObject *)__pyx_v_self->dtype)) < 0) __PYX_ERR(0, 1646, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5numpy_ndarray), __pyx_t_4, __pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1646, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __pyx_v_var = __pyx_t_5;
     __pyx_t_5 = 0;
 
-    /* "adios_mpi.pyx":1639
+    /* "adios_mpi.pyx":1647
  *             shape[asel.morder[0]] = 0
  *             var = np.ndarray(shape, dtype=self.dtype)
  *             for idx, obj in enumerate(asel.sel):             # <<<<<<<<<<<<<<
@@ -25768,43 +26513,43 @@ static PyObject *__pyx_pf_9adios_mpi_3var_20_readvar(struct __pyx_obj_9adios_mpi
  */
     __Pyx_INCREF(__pyx_int_0);
     __pyx_t_5 = __pyx_int_0;
-    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_sel); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1639, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_sel); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1647, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     if (likely(PyList_CheckExact(__pyx_t_7)) || PyTuple_CheckExact(__pyx_t_7)) {
-      __pyx_t_4 = __pyx_t_7; __Pyx_INCREF(__pyx_t_4); __pyx_t_6 = 0;
-      __pyx_t_10 = NULL;
+      __pyx_t_4 = __pyx_t_7; __Pyx_INCREF(__pyx_t_4); __pyx_t_10 = 0;
+      __pyx_t_11 = NULL;
     } else {
-      __pyx_t_6 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1639, __pyx_L1_error)
+      __pyx_t_10 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1647, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_10 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1639, __pyx_L1_error)
+      __pyx_t_11 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1647, __pyx_L1_error)
     }
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     for (;;) {
-      if (likely(!__pyx_t_10)) {
+      if (likely(!__pyx_t_11)) {
         if (likely(PyList_CheckExact(__pyx_t_4))) {
-          if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_4)) break;
-          #if CYTHON_COMPILING_IN_CPYTHON
-          __pyx_t_7 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_6); __Pyx_INCREF(__pyx_t_7); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 1639, __pyx_L1_error)
+          if (__pyx_t_10 >= PyList_GET_SIZE(__pyx_t_4)) break;
+          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+          __pyx_t_7 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_10); __Pyx_INCREF(__pyx_t_7); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 1647, __pyx_L1_error)
           #else
-          __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1639, __pyx_L1_error)
+          __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1647, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_7);
           #endif
         } else {
-          if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
-          #if CYTHON_COMPILING_IN_CPYTHON
-          __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_6); __Pyx_INCREF(__pyx_t_7); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 1639, __pyx_L1_error)
+          if (__pyx_t_10 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
+          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+          __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_10); __Pyx_INCREF(__pyx_t_7); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 1647, __pyx_L1_error)
           #else
-          __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1639, __pyx_L1_error)
+          __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1647, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_7);
           #endif
         }
       } else {
-        __pyx_t_7 = __pyx_t_10(__pyx_t_4);
+        __pyx_t_7 = __pyx_t_11(__pyx_t_4);
         if (unlikely(!__pyx_t_7)) {
           PyObject* exc_type = PyErr_Occurred();
           if (exc_type) {
             if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-            else __PYX_ERR(0, 1639, __pyx_L1_error)
+            else __PYX_ERR(0, 1647, __pyx_L1_error)
           }
           break;
         }
@@ -25814,13 +26559,13 @@ static PyObject *__pyx_pf_9adios_mpi_3var_20_readvar(struct __pyx_obj_9adios_mpi
       __pyx_t_7 = 0;
       __Pyx_INCREF(__pyx_t_5);
       __Pyx_XDECREF_SET(__pyx_v_idx, __pyx_t_5);
-      __pyx_t_7 = __Pyx_PyInt_AddObjC(__pyx_t_5, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1639, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyInt_AddObjC(__pyx_t_5, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1647, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_5);
       __pyx_t_5 = __pyx_t_7;
       __pyx_t_7 = 0;
 
-      /* "adios_mpi.pyx":1640
+      /* "adios_mpi.pyx":1648
  *             var = np.ndarray(shape, dtype=self.dtype)
  *             for idx, obj in enumerate(asel.sel):
  *                 if (self.nsteps) > 1:             # <<<<<<<<<<<<<<
@@ -25830,115 +26575,115 @@ static PyObject *__pyx_pf_9adios_mpi_3var_20_readvar(struct __pyx_obj_9adios_mpi
       __pyx_t_2 = ((__pyx_v_self->nsteps > 1) != 0);
       if (__pyx_t_2) {
 
-        /* "adios_mpi.pyx":1641
+        /* "adios_mpi.pyx":1649
  *             for idx, obj in enumerate(asel.sel):
  *                 if (self.nsteps) > 1:
  *                     v = self.read(offset=obj[0][1:],             # <<<<<<<<<<<<<<
  *                                   count=obj[1][1:],
  *                                   scalar=obj[3][1:],
  */
-        __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_read); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1641, __pyx_L1_error)
+        __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_read); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1649, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
-        __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1641, __pyx_L1_error)
+        __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1649, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_1);
-        __pyx_t_11 = __Pyx_GetItemInt(__pyx_v_obj, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1641, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_11);
-        __pyx_t_12 = __Pyx_PyObject_GetSlice(__pyx_t_11, 1, 0, NULL, NULL, &__pyx_slice__40, 1, 0, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1641, __pyx_L1_error)
+        __pyx_t_12 = __Pyx_GetItemInt(__pyx_v_obj, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1649, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_12);
-        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
-        if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_offset, __pyx_t_12) < 0) __PYX_ERR(0, 1641, __pyx_L1_error)
+        __pyx_t_13 = __Pyx_PyObject_GetSlice(__pyx_t_12, 1, 0, NULL, NULL, &__pyx_slice__40, 1, 0, 1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1649, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_13);
         __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+        if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_offset, __pyx_t_13) < 0) __PYX_ERR(0, 1649, __pyx_L1_error)
+        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
 
-        /* "adios_mpi.pyx":1642
+        /* "adios_mpi.pyx":1650
  *                 if (self.nsteps) > 1:
  *                     v = self.read(offset=obj[0][1:],
  *                                   count=obj[1][1:],             # <<<<<<<<<<<<<<
  *                                   scalar=obj[3][1:],
  *                                   from_steps=obj[0][0],
  */
-        __pyx_t_12 = __Pyx_GetItemInt(__pyx_v_obj, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1642, __pyx_L1_error)
+        __pyx_t_13 = __Pyx_GetItemInt(__pyx_v_obj, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1650, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_13);
+        __pyx_t_12 = __Pyx_PyObject_GetSlice(__pyx_t_13, 1, 0, NULL, NULL, &__pyx_slice__41, 1, 0, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1650, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_12);
-        __pyx_t_11 = __Pyx_PyObject_GetSlice(__pyx_t_12, 1, 0, NULL, NULL, &__pyx_slice__41, 1, 0, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1642, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_11);
+        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+        if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_count, __pyx_t_12) < 0) __PYX_ERR(0, 1649, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
-        if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_count, __pyx_t_11) < 0) __PYX_ERR(0, 1641, __pyx_L1_error)
-        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
 
-        /* "adios_mpi.pyx":1643
+        /* "adios_mpi.pyx":1651
  *                     v = self.read(offset=obj[0][1:],
  *                                   count=obj[1][1:],
  *                                   scalar=obj[3][1:],             # <<<<<<<<<<<<<<
  *                                   from_steps=obj[0][0],
  *                                   nsteps=obj[1][0],
  */
-        __pyx_t_11 = __Pyx_GetItemInt(__pyx_v_obj, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1643, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_11);
-        __pyx_t_12 = __Pyx_PyObject_GetSlice(__pyx_t_11, 1, 0, NULL, NULL, &__pyx_slice__42, 1, 0, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1643, __pyx_L1_error)
+        __pyx_t_12 = __Pyx_GetItemInt(__pyx_v_obj, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1651, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_12);
-        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
-        if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_scalar, __pyx_t_12) < 0) __PYX_ERR(0, 1641, __pyx_L1_error)
+        __pyx_t_13 = __Pyx_PyObject_GetSlice(__pyx_t_12, 1, 0, NULL, NULL, &__pyx_slice__42, 1, 0, 1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1651, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_13);
         __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+        if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_scalar, __pyx_t_13) < 0) __PYX_ERR(0, 1649, __pyx_L1_error)
+        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
 
-        /* "adios_mpi.pyx":1644
+        /* "adios_mpi.pyx":1652
  *                                   count=obj[1][1:],
  *                                   scalar=obj[3][1:],
  *                                   from_steps=obj[0][0],             # <<<<<<<<<<<<<<
  *                                   nsteps=obj[1][0],
  *                                   step_scalar=obj[3][0])
  */
-        __pyx_t_12 = __Pyx_GetItemInt(__pyx_v_obj, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1644, __pyx_L1_error)
+        __pyx_t_13 = __Pyx_GetItemInt(__pyx_v_obj, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1652, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_13);
+        __pyx_t_12 = __Pyx_GetItemInt(__pyx_t_13, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1652, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_12);
-        __pyx_t_11 = __Pyx_GetItemInt(__pyx_t_12, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1644, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_11);
+        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+        if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_from_steps, __pyx_t_12) < 0) __PYX_ERR(0, 1649, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
-        if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_from_steps, __pyx_t_11) < 0) __PYX_ERR(0, 1641, __pyx_L1_error)
-        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
 
-        /* "adios_mpi.pyx":1645
+        /* "adios_mpi.pyx":1653
  *                                   scalar=obj[3][1:],
  *                                   from_steps=obj[0][0],
  *                                   nsteps=obj[1][0],             # <<<<<<<<<<<<<<
  *                                   step_scalar=obj[3][0])
  *                 else:
  */
-        __pyx_t_11 = __Pyx_GetItemInt(__pyx_v_obj, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1645, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_11);
-        __pyx_t_12 = __Pyx_GetItemInt(__pyx_t_11, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1645, __pyx_L1_error)
+        __pyx_t_12 = __Pyx_GetItemInt(__pyx_v_obj, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1653, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_12);
-        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
-        if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_nsteps, __pyx_t_12) < 0) __PYX_ERR(0, 1641, __pyx_L1_error)
+        __pyx_t_13 = __Pyx_GetItemInt(__pyx_t_12, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1653, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_13);
         __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+        if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_nsteps, __pyx_t_13) < 0) __PYX_ERR(0, 1649, __pyx_L1_error)
+        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
 
-        /* "adios_mpi.pyx":1646
+        /* "adios_mpi.pyx":1654
  *                                   from_steps=obj[0][0],
  *                                   nsteps=obj[1][0],
  *                                   step_scalar=obj[3][0])             # <<<<<<<<<<<<<<
  *                 else:
  *                     v = self.read(offset=obj[0],
  */
-        __pyx_t_12 = __Pyx_GetItemInt(__pyx_v_obj, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1646, __pyx_L1_error)
+        __pyx_t_13 = __Pyx_GetItemInt(__pyx_v_obj, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1654, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_13);
+        __pyx_t_12 = __Pyx_GetItemInt(__pyx_t_13, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1654, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_12);
-        __pyx_t_11 = __Pyx_GetItemInt(__pyx_t_12, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1646, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_11);
+        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+        if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_step_scalar, __pyx_t_12) < 0) __PYX_ERR(0, 1649, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
-        if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_step_scalar, __pyx_t_11) < 0) __PYX_ERR(0, 1641, __pyx_L1_error)
-        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
 
-        /* "adios_mpi.pyx":1641
+        /* "adios_mpi.pyx":1649
  *             for idx, obj in enumerate(asel.sel):
  *                 if (self.nsteps) > 1:
  *                     v = self.read(offset=obj[0][1:],             # <<<<<<<<<<<<<<
  *                                   count=obj[1][1:],
  *                                   scalar=obj[3][1:],
  */
-        __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1641, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_11);
+        __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1649, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_12);
         __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
         __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-        __Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_11);
-        __pyx_t_11 = 0;
+        __Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_12);
+        __pyx_t_12 = 0;
 
-        /* "adios_mpi.pyx":1640
+        /* "adios_mpi.pyx":1648
  *             var = np.ndarray(shape, dtype=self.dtype)
  *             for idx, obj in enumerate(asel.sel):
  *                 if (self.nsteps) > 1:             # <<<<<<<<<<<<<<
@@ -25948,7 +26693,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_20_readvar(struct __pyx_obj_9adios_mpi
         goto __pyx_L8;
       }
 
-      /* "adios_mpi.pyx":1648
+      /* "adios_mpi.pyx":1656
  *                                   step_scalar=obj[3][0])
  *                 else:
  *                     v = self.read(offset=obj[0],             # <<<<<<<<<<<<<<
@@ -25956,33 +26701,33 @@ static PyObject *__pyx_pf_9adios_mpi_3var_20_readvar(struct __pyx_obj_9adios_mpi
  *                                   scalar=obj[3],
  */
       /*else*/ {
-        __pyx_t_11 = __Pyx_GetItemInt(__pyx_v_obj, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1648, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_11);
-        if (!(likely(PyTuple_CheckExact(__pyx_t_11))||((__pyx_t_11) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_11)->tp_name), 0))) __PYX_ERR(0, 1648, __pyx_L1_error)
+        __pyx_t_12 = __Pyx_GetItemInt(__pyx_v_obj, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1656, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_12);
+        if (!(likely(PyTuple_CheckExact(__pyx_t_12))||((__pyx_t_12) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_12)->tp_name), 0))) __PYX_ERR(0, 1656, __pyx_L1_error)
 
-        /* "adios_mpi.pyx":1649
+        /* "adios_mpi.pyx":1657
  *                 else:
  *                     v = self.read(offset=obj[0],
  *                                   count=obj[1],             # <<<<<<<<<<<<<<
  *                                   scalar=obj[3],
  *                                   from_steps=0,
  */
-        __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_obj, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1649, __pyx_L1_error)
+        __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_obj, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1657, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_1);
-        if (!(likely(PyTuple_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 1649, __pyx_L1_error)
+        if (!(likely(PyTuple_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 1657, __pyx_L1_error)
 
-        /* "adios_mpi.pyx":1650
+        /* "adios_mpi.pyx":1658
  *                     v = self.read(offset=obj[0],
  *                                   count=obj[1],
  *                                   scalar=obj[3],             # <<<<<<<<<<<<<<
  *                                   from_steps=0,
  *                                   nsteps=1)
  */
-        __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_obj, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1650, __pyx_L1_error)
+        __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_obj, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1658, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
-        if (!(likely(PyTuple_CheckExact(__pyx_t_7))||((__pyx_t_7) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_7)->tp_name), 0))) __PYX_ERR(0, 1650, __pyx_L1_error)
+        if (!(likely(PyTuple_CheckExact(__pyx_t_7))||((__pyx_t_7) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_7)->tp_name), 0))) __PYX_ERR(0, 1658, __pyx_L1_error)
 
-        /* "adios_mpi.pyx":1648
+        /* "adios_mpi.pyx":1656
  *                                   step_scalar=obj[3][0])
  *                 else:
  *                     v = self.read(offset=obj[0],             # <<<<<<<<<<<<<<
@@ -25990,64 +26735,64 @@ static PyObject *__pyx_pf_9adios_mpi_3var_20_readvar(struct __pyx_obj_9adios_mpi
  *                                   scalar=obj[3],
  */
         __pyx_t_9.__pyx_n = 5;
-        __pyx_t_9.offset = ((PyObject*)__pyx_t_11);
+        __pyx_t_9.offset = ((PyObject*)__pyx_t_12);
         __pyx_t_9.count = ((PyObject*)__pyx_t_1);
         __pyx_t_9.scalar = ((PyObject*)__pyx_t_7);
         __pyx_t_9.from_steps = __pyx_int_0;
         __pyx_t_9.nsteps = __pyx_int_1;
-        __pyx_t_12 = ((struct __pyx_vtabstruct_9adios_mpi_var *)__pyx_v_self->__pyx_vtab)->read(__pyx_v_self, 0, &__pyx_t_9); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1648, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_12);
-        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+        __pyx_t_13 = ((struct __pyx_vtabstruct_9adios_mpi_var *)__pyx_v_self->__pyx_vtab)->read(__pyx_v_self, 0, &__pyx_t_9); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1656, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_13);
+        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
         __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
         __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-        __Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_12);
-        __pyx_t_12 = 0;
+        __Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_13);
+        __pyx_t_13 = 0;
       }
       __pyx_L8:;
 
-      /* "adios_mpi.pyx":1654
+      /* "adios_mpi.pyx":1662
  *                                   nsteps=1)
  * 
  *                 var = np.concatenate((var, v), axis=asel.morder[idx])             # <<<<<<<<<<<<<<
  * 
  *             var = np.reshape(var, asel.mshape)
  */
-      __pyx_t_12 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1654, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_12);
-      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_concatenate); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1654, __pyx_L1_error)
+      __pyx_t_13 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1662, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_13);
+      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_concatenate); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1662, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
-      __pyx_t_12 = PyTuple_New(2); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1654, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_12);
+      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+      __pyx_t_13 = PyTuple_New(2); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1662, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_13);
       __Pyx_INCREF(__pyx_v_var);
       __Pyx_GIVEREF(__pyx_v_var);
-      PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_v_var);
+      PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_v_var);
       __Pyx_INCREF(__pyx_v_v);
       __Pyx_GIVEREF(__pyx_v_v);
-      PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_v_v);
-      __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1654, __pyx_L1_error)
+      PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_v_v);
+      __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1662, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
-      __Pyx_GIVEREF(__pyx_t_12);
-      PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_12);
-      __pyx_t_12 = 0;
-      __pyx_t_12 = PyDict_New(); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1654, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_12);
-      __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_morder); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1654, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_11);
-      __pyx_t_13 = PyObject_GetItem(__pyx_t_11, __pyx_v_idx); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1654, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_13);
-      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
-      if (PyDict_SetItem(__pyx_t_12, __pyx_n_s_axis, __pyx_t_13) < 0) __PYX_ERR(0, 1654, __pyx_L1_error)
-      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
-      __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_1, __pyx_t_12); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1654, __pyx_L1_error)
+      __Pyx_GIVEREF(__pyx_t_13);
+      PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_13);
+      __pyx_t_13 = 0;
+      __pyx_t_13 = PyDict_New(); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1662, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_13);
+      __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_morder); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1662, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_12);
+      __pyx_t_14 = PyObject_GetItem(__pyx_t_12, __pyx_v_idx); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1662, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_14);
+      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+      if (PyDict_SetItem(__pyx_t_13, __pyx_n_s_axis, __pyx_t_14) < 0) __PYX_ERR(0, 1662, __pyx_L1_error)
+      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+      __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_1, __pyx_t_13); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1662, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_14);
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
-      __Pyx_DECREF_SET(__pyx_v_var, __pyx_t_13);
-      __pyx_t_13 = 0;
+      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+      __Pyx_DECREF_SET(__pyx_v_var, __pyx_t_14);
+      __pyx_t_14 = 0;
 
-      /* "adios_mpi.pyx":1639
+      /* "adios_mpi.pyx":1647
  *             shape[asel.morder[0]] = 0
  *             var = np.ndarray(shape, dtype=self.dtype)
  *             for idx, obj in enumerate(asel.sel):             # <<<<<<<<<<<<<<
@@ -26058,51 +26803,71 @@ static PyObject *__pyx_pf_9adios_mpi_3var_20_readvar(struct __pyx_obj_9adios_mpi
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-    /* "adios_mpi.pyx":1656
+    /* "adios_mpi.pyx":1664
  *                 var = np.concatenate((var, v), axis=asel.morder[idx])
  * 
  *             var = np.reshape(var, asel.mshape)             # <<<<<<<<<<<<<<
  * 
  *             return var
  */
-    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1656, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1664, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_reshape); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1656, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_13);
+    __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_reshape); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1664, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_14);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_mshape); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1656, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_asel, __pyx_n_s_mshape); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1664, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_12 = NULL;
+    __pyx_t_13 = NULL;
     __pyx_t_6 = 0;
-    if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_13))) {
-      __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_13);
-      if (likely(__pyx_t_12)) {
-        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
-        __Pyx_INCREF(__pyx_t_12);
+    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_14))) {
+      __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_14);
+      if (likely(__pyx_t_13)) {
+        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14);
+        __Pyx_INCREF(__pyx_t_13);
         __Pyx_INCREF(function);
-        __Pyx_DECREF_SET(__pyx_t_13, function);
+        __Pyx_DECREF_SET(__pyx_t_14, function);
         __pyx_t_6 = 1;
       }
     }
-    __pyx_t_1 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1656, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    if (__pyx_t_12) {
-      __Pyx_GIVEREF(__pyx_t_12); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_12); __pyx_t_12 = NULL;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_14)) {
+      PyObject *__pyx_temp[3] = {__pyx_t_13, __pyx_v_var, __pyx_t_4};
+      __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_14, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1664, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
+      __Pyx_GOTREF(__pyx_t_5);
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_14)) {
+      PyObject *__pyx_temp[3] = {__pyx_t_13, __pyx_v_var, __pyx_t_4};
+      __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_14, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1664, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
+      __Pyx_GOTREF(__pyx_t_5);
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    } else
+    #endif
+    {
+      __pyx_t_1 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1664, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_1);
+      if (__pyx_t_13) {
+        __Pyx_GIVEREF(__pyx_t_13); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_13); __pyx_t_13 = NULL;
+      }
+      __Pyx_INCREF(__pyx_v_var);
+      __Pyx_GIVEREF(__pyx_v_var);
+      PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_6, __pyx_v_var);
+      __Pyx_GIVEREF(__pyx_t_4);
+      PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_6, __pyx_t_4);
+      __pyx_t_4 = 0;
+      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_t_1, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1664, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_5);
+      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     }
-    __Pyx_INCREF(__pyx_v_var);
-    __Pyx_GIVEREF(__pyx_v_var);
-    PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_6, __pyx_v_var);
-    __Pyx_GIVEREF(__pyx_t_4);
-    PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_6, __pyx_t_4);
-    __pyx_t_4 = 0;
-    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_13, __pyx_t_1, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1656, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_5);
-    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
     __Pyx_DECREF_SET(__pyx_v_var, __pyx_t_5);
     __pyx_t_5 = 0;
 
-    /* "adios_mpi.pyx":1658
+    /* "adios_mpi.pyx":1666
  *             var = np.reshape(var, asel.mshape)
  * 
  *             return var             # <<<<<<<<<<<<<<
@@ -26114,7 +26879,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_20_readvar(struct __pyx_obj_9adios_mpi
     __pyx_r = __pyx_v_var;
     goto __pyx_L0;
 
-    /* "adios_mpi.pyx":1635
+    /* "adios_mpi.pyx":1643
  *                                  nsteps=1)
  * 
  *         elif isinstance(asel, sel.FancySelection):             # <<<<<<<<<<<<<<
@@ -26123,7 +26888,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_20_readvar(struct __pyx_obj_9adios_mpi
  */
   }
 
-  /* "adios_mpi.pyx":1661
+  /* "adios_mpi.pyx":1669
  * 
  *         else:
  *             raise NotImplementedError("Not implemented yet")             # <<<<<<<<<<<<<<
@@ -26131,14 +26896,14 @@ static PyObject *__pyx_pf_9adios_mpi_3var_20_readvar(struct __pyx_obj_9adios_mpi
  *     def __getitem__(self, args):
  */
   /*else*/ {
-    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_NotImplementedError, __pyx_tuple__43, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1661, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_NotImplementedError, __pyx_tuple__43, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1669, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_Raise(__pyx_t_5, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    __PYX_ERR(0, 1661, __pyx_L1_error)
+    __PYX_ERR(0, 1669, __pyx_L1_error)
   }
 
-  /* "adios_mpi.pyx":1614
+  /* "adios_mpi.pyx":1622
  *                     return group(self.file, self.name + '/' + key_)
  * 
  *     def _readvar(self, args):             # <<<<<<<<<<<<<<
@@ -26152,9 +26917,9 @@ static PyObject *__pyx_pf_9adios_mpi_3var_20_readvar(struct __pyx_obj_9adios_mpi
   __Pyx_XDECREF(__pyx_t_4);
   __Pyx_XDECREF(__pyx_t_5);
   __Pyx_XDECREF(__pyx_t_7);
-  __Pyx_XDECREF(__pyx_t_11);
   __Pyx_XDECREF(__pyx_t_12);
   __Pyx_XDECREF(__pyx_t_13);
+  __Pyx_XDECREF(__pyx_t_14);
   __Pyx_AddTraceback("adios_mpi.var._readvar", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
@@ -26169,7 +26934,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_20_readvar(struct __pyx_obj_9adios_mpi
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1663
+/* "adios_mpi.pyx":1671
  *             raise NotImplementedError("Not implemented yet")
  * 
  *     def __getitem__(self, args):             # <<<<<<<<<<<<<<
@@ -26201,7 +26966,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_22__getitem__(struct __pyx_obj_9adios_
   PyObject *__pyx_t_6 = NULL;
   __Pyx_RefNannySetupContext("__getitem__", 0);
 
-  /* "adios_mpi.pyx":1664
+  /* "adios_mpi.pyx":1672
  * 
  *     def __getitem__(self, args):
  *         if isinstance(args, str):             # <<<<<<<<<<<<<<
@@ -26212,7 +26977,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_22__getitem__(struct __pyx_obj_9adios_
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "adios_mpi.pyx":1665
+    /* "adios_mpi.pyx":1673
  *     def __getitem__(self, args):
  *         if isinstance(args, str):
  *             return self._readattr(args)             # <<<<<<<<<<<<<<
@@ -26220,10 +26985,10 @@ static PyObject *__pyx_pf_9adios_mpi_3var_22__getitem__(struct __pyx_obj_9adios_
  *             return self._readvar(args)
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_readattr); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1665, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_readattr); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1673, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_5 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
       __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
       if (likely(__pyx_t_5)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
@@ -26233,25 +26998,43 @@ static PyObject *__pyx_pf_9adios_mpi_3var_22__getitem__(struct __pyx_obj_9adios_
       }
     }
     if (!__pyx_t_5) {
-      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_args); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1665, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_args); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1673, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
     } else {
-      __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1665, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_6);
-      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5); __pyx_t_5 = NULL;
-      __Pyx_INCREF(__pyx_v_args);
-      __Pyx_GIVEREF(__pyx_v_args);
-      PyTuple_SET_ITEM(__pyx_t_6, 0+1, __pyx_v_args);
-      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1665, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_3);
-      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_4)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_5, __pyx_v_args};
+        __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1673, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+        __Pyx_GOTREF(__pyx_t_3);
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_5, __pyx_v_args};
+        __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1673, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+        __Pyx_GOTREF(__pyx_t_3);
+      } else
+      #endif
+      {
+        __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1673, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_6);
+        __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5); __pyx_t_5 = NULL;
+        __Pyx_INCREF(__pyx_v_args);
+        __Pyx_GIVEREF(__pyx_v_args);
+        PyTuple_SET_ITEM(__pyx_t_6, 0+1, __pyx_v_args);
+        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1673, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_3);
+        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+      }
     }
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_r = __pyx_t_3;
     __pyx_t_3 = 0;
     goto __pyx_L0;
 
-    /* "adios_mpi.pyx":1664
+    /* "adios_mpi.pyx":1672
  * 
  *     def __getitem__(self, args):
  *         if isinstance(args, str):             # <<<<<<<<<<<<<<
@@ -26260,7 +27043,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_22__getitem__(struct __pyx_obj_9adios_
  */
   }
 
-  /* "adios_mpi.pyx":1667
+  /* "adios_mpi.pyx":1675
  *             return self._readattr(args)
  *         else:
  *             return self._readvar(args)             # <<<<<<<<<<<<<<
@@ -26269,10 +27052,10 @@ static PyObject *__pyx_pf_9adios_mpi_3var_22__getitem__(struct __pyx_obj_9adios_
  */
   /*else*/ {
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_readvar); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1667, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_readvar); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1675, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_6 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
       __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4);
       if (likely(__pyx_t_6)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
@@ -26282,18 +27065,36 @@ static PyObject *__pyx_pf_9adios_mpi_3var_22__getitem__(struct __pyx_obj_9adios_
       }
     }
     if (!__pyx_t_6) {
-      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_args); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1667, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_args); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1675, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
     } else {
-      __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1667, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_5);
-      __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_6); __pyx_t_6 = NULL;
-      __Pyx_INCREF(__pyx_v_args);
-      __Pyx_GIVEREF(__pyx_v_args);
-      PyTuple_SET_ITEM(__pyx_t_5, 0+1, __pyx_v_args);
-      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1667, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_3);
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_4)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_6, __pyx_v_args};
+        __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1675, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+        __Pyx_GOTREF(__pyx_t_3);
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_6, __pyx_v_args};
+        __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1675, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+        __Pyx_GOTREF(__pyx_t_3);
+      } else
+      #endif
+      {
+        __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1675, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_5);
+        __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_6); __pyx_t_6 = NULL;
+        __Pyx_INCREF(__pyx_v_args);
+        __Pyx_GIVEREF(__pyx_v_args);
+        PyTuple_SET_ITEM(__pyx_t_5, 0+1, __pyx_v_args);
+        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1675, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_3);
+        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+      }
     }
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_r = __pyx_t_3;
@@ -26301,7 +27102,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_22__getitem__(struct __pyx_obj_9adios_
     goto __pyx_L0;
   }
 
-  /* "adios_mpi.pyx":1663
+  /* "adios_mpi.pyx":1671
  *             raise NotImplementedError("Not implemented yet")
  * 
  *     def __getitem__(self, args):             # <<<<<<<<<<<<<<
@@ -26323,7 +27124,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_22__getitem__(struct __pyx_obj_9adios_
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1670
+/* "adios_mpi.pyx":1678
  * 
  *     ## For access var/attr/group as an attribute
  *     def __getattr__(self, varname):             # <<<<<<<<<<<<<<
@@ -26353,7 +27154,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_24__getattr__(struct __pyx_obj_9adios_
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("__getattr__", 0);
 
-  /* "adios_mpi.pyx":1671
+  /* "adios_mpi.pyx":1679
  *     ## For access var/attr/group as an attribute
  *     def __getattr__(self, varname):
  *         return self.__getitem__(varname)             # <<<<<<<<<<<<<<
@@ -26361,10 +27162,10 @@ static PyObject *__pyx_pf_9adios_mpi_3var_24__getattr__(struct __pyx_obj_9adios_
  *     ## To support ipython tab completion
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getitem); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1671, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getitem); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1679, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
     __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
     if (likely(__pyx_t_3)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
@@ -26374,25 +27175,43 @@ static PyObject *__pyx_pf_9adios_mpi_3var_24__getattr__(struct __pyx_obj_9adios_
     }
   }
   if (!__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_varname); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1671, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_varname); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1679, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1671, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_4);
-    __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
-    __Pyx_INCREF(__pyx_v_varname);
-    __Pyx_GIVEREF(__pyx_v_varname);
-    PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_varname);
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1671, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_varname};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1679, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_varname};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1679, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1679, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+      __Pyx_INCREF(__pyx_v_varname);
+      __Pyx_GIVEREF(__pyx_v_varname);
+      PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_varname);
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1679, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    }
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":1670
+  /* "adios_mpi.pyx":1678
  * 
  *     ## For access var/attr/group as an attribute
  *     def __getattr__(self, varname):             # <<<<<<<<<<<<<<
@@ -26414,7 +27233,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_24__getattr__(struct __pyx_obj_9adios_
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1674
+/* "adios_mpi.pyx":1682
  * 
  *     ## To support ipython tab completion
  *     def __dir__(self):             # <<<<<<<<<<<<<<
@@ -26448,31 +27267,31 @@ static PyObject *__pyx_pf_9adios_mpi_3var_26__dir__(struct __pyx_obj_9adios_mpi_
   PyObject *__pyx_t_5 = NULL;
   __Pyx_RefNannySetupContext("__dir__", 0);
 
-  /* "adios_mpi.pyx":1675
+  /* "adios_mpi.pyx":1683
  *     ## To support ipython tab completion
  *     def __dir__(self):
  *         k0 = dir(type(self))             # <<<<<<<<<<<<<<
  *         ## Normalize to support var starting with '/'
  *         ## E.g., f['/attr1'] == f.attr1
  */
-  __pyx_t_1 = PyObject_Dir(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1675, __pyx_L1_error)
+  __pyx_t_1 = PyObject_Dir(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1683, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_k0 = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":1678
+  /* "adios_mpi.pyx":1686
  *         ## Normalize to support var starting with '/'
  *         ## E.g., f['/attr1'] == f.attr1
  *         k2 = normalize_key(self.attrs.keys())             # <<<<<<<<<<<<<<
  *         return k0 + k2
  * 
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_normalize_key); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1678, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_normalize_key); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1686, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1678, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1686, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_t_5 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
     __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
     if (likely(__pyx_t_5)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
@@ -26482,15 +27301,15 @@ static PyObject *__pyx_pf_9adios_mpi_3var_26__dir__(struct __pyx_obj_9adios_mpi_
     }
   }
   if (__pyx_t_5) {
-    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1678, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1686, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   } else {
-    __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1678, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1686, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_t_4 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
     __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
     if (likely(__pyx_t_4)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
@@ -26500,25 +27319,45 @@ static PyObject *__pyx_pf_9adios_mpi_3var_26__dir__(struct __pyx_obj_9adios_mpi_
     }
   }
   if (!__pyx_t_4) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1678, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1686, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1678, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_5);
-    __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); __pyx_t_4 = NULL;
-    __Pyx_GIVEREF(__pyx_t_3);
-    PyTuple_SET_ITEM(__pyx_t_5, 0+1, __pyx_t_3);
-    __pyx_t_3 = 0;
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1678, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_t_3};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1686, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_t_3};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1686, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    } else
+    #endif
+    {
+      __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1686, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_5);
+      __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); __pyx_t_4 = NULL;
+      __Pyx_GIVEREF(__pyx_t_3);
+      PyTuple_SET_ITEM(__pyx_t_5, 0+1, __pyx_t_3);
+      __pyx_t_3 = 0;
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1686, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    }
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_v_k2 = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":1679
+  /* "adios_mpi.pyx":1687
  *         ## E.g., f['/attr1'] == f.attr1
  *         k2 = normalize_key(self.attrs.keys())
  *         return k0 + k2             # <<<<<<<<<<<<<<
@@ -26526,13 +27365,13 @@ static PyObject *__pyx_pf_9adios_mpi_3var_26__dir__(struct __pyx_obj_9adios_mpi_
  *     ## Require for dictionary key completion
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyNumber_Add(__pyx_v_k0, __pyx_v_k2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1679, __pyx_L1_error)
+  __pyx_t_1 = PyNumber_Add(__pyx_v_k0, __pyx_v_k2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1687, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":1674
+  /* "adios_mpi.pyx":1682
  * 
  *     ## To support ipython tab completion
  *     def __dir__(self):             # <<<<<<<<<<<<<<
@@ -26557,7 +27396,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_26__dir__(struct __pyx_obj_9adios_mpi_
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1682
+/* "adios_mpi.pyx":1690
  * 
  *     ## Require for dictionary key completion
  *     def keys(self):             # <<<<<<<<<<<<<<
@@ -26587,7 +27426,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_28keys(struct __pyx_obj_9adios_mpi_var
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("keys", 0);
 
-  /* "adios_mpi.pyx":1683
+  /* "adios_mpi.pyx":1691
  *     ## Require for dictionary key completion
  *     def keys(self):
  *         return self.attrs.keys()             # <<<<<<<<<<<<<<
@@ -26595,10 +27434,10 @@ static PyObject *__pyx_pf_9adios_mpi_3var_28keys(struct __pyx_obj_9adios_mpi_var
  * cdef class attr(object):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1683, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1691, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
     __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
     if (likely(__pyx_t_3)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
@@ -26608,10 +27447,10 @@ static PyObject *__pyx_pf_9adios_mpi_3var_28keys(struct __pyx_obj_9adios_mpi_var
     }
   }
   if (__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1683, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1691, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   } else {
-    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1683, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1691, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -26619,7 +27458,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_28keys(struct __pyx_obj_9adios_mpi_var
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":1682
+  /* "adios_mpi.pyx":1690
  * 
  *     ## Require for dictionary key completion
  *     def keys(self):             # <<<<<<<<<<<<<<
@@ -26640,7 +27479,7 @@ static PyObject *__pyx_pf_9adios_mpi_3var_28keys(struct __pyx_obj_9adios_mpi_var
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1707
+/* "adios_mpi.pyx":1715
  *     property name:
  *         """ The attribute name """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -26666,7 +27505,7 @@ static PyObject *__pyx_pf_9adios_mpi_4attr_4name___get__(struct __pyx_obj_9adios
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios_mpi.pyx":1708
+  /* "adios_mpi.pyx":1716
  *         """ The attribute name """
  *         def __get__(self):
  *             return self.name             # <<<<<<<<<<<<<<
@@ -26678,7 +27517,7 @@ static PyObject *__pyx_pf_9adios_mpi_4attr_4name___get__(struct __pyx_obj_9adios
   __pyx_r = __pyx_v_self->name;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":1707
+  /* "adios_mpi.pyx":1715
  *     property name:
  *         """ The attribute name """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -26693,7 +27532,7 @@ static PyObject *__pyx_pf_9adios_mpi_4attr_4name___get__(struct __pyx_obj_9adios
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1712
+/* "adios_mpi.pyx":1720
  *     property dtype:
  *         """ The attribute type as in numpy.dtype """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -26719,7 +27558,7 @@ static PyObject *__pyx_pf_9adios_mpi_4attr_5dtype___get__(struct __pyx_obj_9adio
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios_mpi.pyx":1713
+  /* "adios_mpi.pyx":1721
  *         """ The attribute type as in numpy.dtype """
  *         def __get__(self):
  *             return self.dtype             # <<<<<<<<<<<<<<
@@ -26731,7 +27570,7 @@ static PyObject *__pyx_pf_9adios_mpi_4attr_5dtype___get__(struct __pyx_obj_9adio
   __pyx_r = ((PyObject *)__pyx_v_self->dtype);
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":1712
+  /* "adios_mpi.pyx":1720
  *     property dtype:
  *         """ The attribute type as in numpy.dtype """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -26746,7 +27585,7 @@ static PyObject *__pyx_pf_9adios_mpi_4attr_5dtype___get__(struct __pyx_obj_9adio
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1717
+/* "adios_mpi.pyx":1725
  *     property value:
  *         """ The attribute's value """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -26777,7 +27616,7 @@ static PyObject *__pyx_pf_9adios_mpi_4attr_5value___get__(struct __pyx_obj_9adio
   PyObject *__pyx_t_5 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios_mpi.pyx":1718
+  /* "adios_mpi.pyx":1726
  *         """ The attribute's value """
  *         def __get__(self):
  *             if (self.value.ndim == 0):             # <<<<<<<<<<<<<<
@@ -26787,7 +27626,7 @@ static PyObject *__pyx_pf_9adios_mpi_4attr_5value___get__(struct __pyx_obj_9adio
   __pyx_t_1 = ((__pyx_v_self->value->nd == 0) != 0);
   if (__pyx_t_1) {
 
-    /* "adios_mpi.pyx":1719
+    /* "adios_mpi.pyx":1727
  *         def __get__(self):
  *             if (self.value.ndim == 0):
  *                 return np.asscalar(self.value)             # <<<<<<<<<<<<<<
@@ -26795,13 +27634,13 @@ static PyObject *__pyx_pf_9adios_mpi_4attr_5value___get__(struct __pyx_obj_9adio
  *                 return self.value
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1719, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1727, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_asscalar); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1719, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_asscalar); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1727, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __pyx_t_3 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_4))) {
+    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
       __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
       if (likely(__pyx_t_3)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
@@ -26811,25 +27650,43 @@ static PyObject *__pyx_pf_9adios_mpi_4attr_5value___get__(struct __pyx_obj_9adio
       }
     }
     if (!__pyx_t_3) {
-      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_4, ((PyObject *)__pyx_v_self->value)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1719, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_4, ((PyObject *)__pyx_v_self->value)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1727, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
     } else {
-      __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1719, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_5);
-      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
-      __Pyx_INCREF(((PyObject *)__pyx_v_self->value));
-      __Pyx_GIVEREF(((PyObject *)__pyx_v_self->value));
-      PyTuple_SET_ITEM(__pyx_t_5, 0+1, ((PyObject *)__pyx_v_self->value));
-      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1719, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_2);
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_4)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_3, ((PyObject *)__pyx_v_self->value)};
+        __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1727, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_3, ((PyObject *)__pyx_v_self->value)};
+        __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1727, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+      } else
+      #endif
+      {
+        __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1727, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_5);
+        __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
+        __Pyx_INCREF(((PyObject *)__pyx_v_self->value));
+        __Pyx_GIVEREF(((PyObject *)__pyx_v_self->value));
+        PyTuple_SET_ITEM(__pyx_t_5, 0+1, ((PyObject *)__pyx_v_self->value));
+        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1727, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+      }
     }
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_r = __pyx_t_2;
     __pyx_t_2 = 0;
     goto __pyx_L0;
 
-    /* "adios_mpi.pyx":1718
+    /* "adios_mpi.pyx":1726
  *         """ The attribute's value """
  *         def __get__(self):
  *             if (self.value.ndim == 0):             # <<<<<<<<<<<<<<
@@ -26838,7 +27695,7 @@ static PyObject *__pyx_pf_9adios_mpi_4attr_5value___get__(struct __pyx_obj_9adio
  */
   }
 
-  /* "adios_mpi.pyx":1721
+  /* "adios_mpi.pyx":1729
  *                 return np.asscalar(self.value)
  *             else:
  *                 return self.value             # <<<<<<<<<<<<<<
@@ -26852,7 +27709,7 @@ static PyObject *__pyx_pf_9adios_mpi_4attr_5value___get__(struct __pyx_obj_9adio
     goto __pyx_L0;
   }
 
-  /* "adios_mpi.pyx":1717
+  /* "adios_mpi.pyx":1725
  *     property value:
  *         """ The attribute's value """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -26874,7 +27731,7 @@ static PyObject *__pyx_pf_9adios_mpi_4attr_5value___get__(struct __pyx_obj_9adio
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1723
+/* "adios_mpi.pyx":1731
  *                 return self.value
  * 
  *     def __init__(self, file file, str name):             # <<<<<<<<<<<<<<
@@ -26910,11 +27767,11 @@ static int __pyx_pw_9adios_mpi_4attr_1__init__(PyObject *__pyx_v_self, PyObject
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, 1); __PYX_ERR(0, 1723, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, 1); __PYX_ERR(0, 1731, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 1723, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 1731, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -26927,14 +27784,14 @@ static int __pyx_pw_9adios_mpi_4attr_1__init__(PyObject *__pyx_v_self, PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1723, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1731, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.attr.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_file), __pyx_ptype_9adios_mpi_file, 1, "file", 0))) __PYX_ERR(0, 1723, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 1723, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_file), __pyx_ptype_9adios_mpi_file, 1, "file", 0))) __PYX_ERR(0, 1731, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 1731, __pyx_L1_error)
   __pyx_r = __pyx_pf_9adios_mpi_4attr___init__(((struct __pyx_obj_9adios_mpi_attr *)__pyx_v_self), __pyx_v_file, __pyx_v_name);
 
   /* function exit code */
@@ -26970,7 +27827,7 @@ static int __pyx_pf_9adios_mpi_4attr___init__(struct __pyx_obj_9adios_mpi_attr *
   int __pyx_t_12;
   __Pyx_RefNannySetupContext("__init__", 0);
 
-  /* "adios_mpi.pyx":1724
+  /* "adios_mpi.pyx":1732
  * 
  *     def __init__(self, file file, str name):
  *         self.file = file             # <<<<<<<<<<<<<<
@@ -26983,7 +27840,7 @@ static int __pyx_pf_9adios_mpi_4attr___init__(struct __pyx_obj_9adios_mpi_attr *
   __Pyx_DECREF(((PyObject *)__pyx_v_self->file));
   __pyx_v_self->file = __pyx_v_file;
 
-  /* "adios_mpi.pyx":1725
+  /* "adios_mpi.pyx":1733
  *     def __init__(self, file file, str name):
  *         self.file = file
  *         self.name = name             # <<<<<<<<<<<<<<
@@ -26996,7 +27853,7 @@ static int __pyx_pf_9adios_mpi_4attr___init__(struct __pyx_obj_9adios_mpi_attr *
   __Pyx_DECREF(__pyx_v_self->name);
   __pyx_v_self->name = __pyx_v_name;
 
-  /* "adios_mpi.pyx":1733
+  /* "adios_mpi.pyx":1741
  *         cdef int len
  * 
  *         err = adios_get_attr(self.file.fp, s2b(self.name), &atype, &bytes, <void **> &p)             # <<<<<<<<<<<<<<
@@ -27005,14 +27862,14 @@ static int __pyx_pf_9adios_mpi_4attr___init__(struct __pyx_obj_9adios_mpi_attr *
  */
   __pyx_t_1 = __pyx_v_self->name;
   __Pyx_INCREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_9adios_mpi_s2b(((PyObject*)__pyx_t_1), 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1733, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_9adios_mpi_s2b(((PyObject*)__pyx_t_1), 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1741, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_3 = __Pyx_PyObject_AsString(__pyx_t_2); if (unlikely((!__pyx_t_3) && PyErr_Occurred())) __PYX_ERR(0, 1733, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_AsString(__pyx_t_2); if (unlikely((!__pyx_t_3) && PyErr_Occurred())) __PYX_ERR(0, 1741, __pyx_L1_error)
   __pyx_v_err = adios_get_attr(__pyx_v_self->file->fp, __pyx_t_3, (&__pyx_v_atype), (&__pyx_v_bytes), ((void **)(&__pyx_v_p)));
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "adios_mpi.pyx":1735
+  /* "adios_mpi.pyx":1743
  *         err = adios_get_attr(self.file.fp, s2b(self.name), &atype, &bytes, <void **> &p)
  * 
  *         if err == 0:             # <<<<<<<<<<<<<<
@@ -27022,28 +27879,28 @@ static int __pyx_pf_9adios_mpi_4attr___init__(struct __pyx_obj_9adios_mpi_attr *
   __pyx_t_4 = ((__pyx_v_err == 0) != 0);
   if (__pyx_t_4) {
 
-    /* "adios_mpi.pyx":1736
+    /* "adios_mpi.pyx":1744
  * 
  *         if err == 0:
  *             if atype == DATATYPE.string:             # <<<<<<<<<<<<<<
  *                 bytes = bytes - 1 ## Remove the NULL terminal
  *             self.dtype = adios2npdtype(atype, bytes)
  */
-    __pyx_t_2 = __Pyx_PyInt_From_ADIOS_DATATYPES(__pyx_v_atype); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1736, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyInt_From_ADIOS_DATATYPES(__pyx_v_atype); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1744, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1736, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1744, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_string); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1736, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_string); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1744, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1736, __pyx_L1_error)
+    __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1744, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 1736, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 1744, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     if (__pyx_t_4) {
 
-      /* "adios_mpi.pyx":1737
+      /* "adios_mpi.pyx":1745
  *         if err == 0:
  *             if atype == DATATYPE.string:
  *                 bytes = bytes - 1 ## Remove the NULL terminal             # <<<<<<<<<<<<<<
@@ -27052,7 +27909,7 @@ static int __pyx_pf_9adios_mpi_4attr___init__(struct __pyx_obj_9adios_mpi_attr *
  */
       __pyx_v_bytes = (__pyx_v_bytes - 1);
 
-      /* "adios_mpi.pyx":1736
+      /* "adios_mpi.pyx":1744
  * 
  *         if err == 0:
  *             if atype == DATATYPE.string:             # <<<<<<<<<<<<<<
@@ -27061,7 +27918,7 @@ static int __pyx_pf_9adios_mpi_4attr___init__(struct __pyx_obj_9adios_mpi_attr *
  */
     }
 
-    /* "adios_mpi.pyx":1738
+    /* "adios_mpi.pyx":1746
  *             if atype == DATATYPE.string:
  *                 bytes = bytes - 1 ## Remove the NULL terminal
  *             self.dtype = adios2npdtype(atype, bytes)             # <<<<<<<<<<<<<<
@@ -27070,7 +27927,7 @@ static int __pyx_pf_9adios_mpi_4attr___init__(struct __pyx_obj_9adios_mpi_attr *
  */
     __pyx_t_6.__pyx_n = 1;
     __pyx_t_6.strlen = __pyx_v_bytes;
-    __pyx_t_1 = ((PyObject *)__pyx_f_9adios_mpi_adios2npdtype(__pyx_v_atype, 0, &__pyx_t_6)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1738, __pyx_L1_error)
+    __pyx_t_1 = ((PyObject *)__pyx_f_9adios_mpi_adios2npdtype(__pyx_v_atype, 0, &__pyx_t_6)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1746, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_GIVEREF(__pyx_t_1);
     __Pyx_GOTREF(__pyx_v_self->dtype);
@@ -27078,40 +27935,40 @@ static int __pyx_pf_9adios_mpi_4attr___init__(struct __pyx_obj_9adios_mpi_attr *
     __pyx_v_self->dtype = ((PyArray_Descr *)__pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "adios_mpi.pyx":1739
+    /* "adios_mpi.pyx":1747
  *                 bytes = bytes - 1 ## Remove the NULL terminal
  *             self.dtype = adios2npdtype(atype, bytes)
  *             if atype == DATATYPE.string_array:             # <<<<<<<<<<<<<<
  *                 strlist = list()
  *                 len = <int>(bytes/sizeof(p))
  */
-    __pyx_t_1 = __Pyx_PyInt_From_ADIOS_DATATYPES(__pyx_v_atype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1739, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyInt_From_ADIOS_DATATYPES(__pyx_v_atype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1747, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1739, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_DATATYPE); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1747, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_string_array); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1739, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_string_array); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1747, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    __pyx_t_5 = PyObject_RichCompare(__pyx_t_1, __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1739, __pyx_L1_error)
+    __pyx_t_5 = PyObject_RichCompare(__pyx_t_1, __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1747, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 1739, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 1747, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     if (__pyx_t_4) {
 
-      /* "adios_mpi.pyx":1740
+      /* "adios_mpi.pyx":1748
  *             self.dtype = adios2npdtype(atype, bytes)
  *             if atype == DATATYPE.string_array:
  *                 strlist = list()             # <<<<<<<<<<<<<<
  *                 len = <int>(bytes/sizeof(p))
  *                 for i in range(len):
  */
-      __pyx_t_5 = PyList_New(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1740, __pyx_L1_error)
+      __pyx_t_5 = PyList_New(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1748, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       __pyx_v_strlist = ((PyObject*)__pyx_t_5);
       __pyx_t_5 = 0;
 
-      /* "adios_mpi.pyx":1741
+      /* "adios_mpi.pyx":1749
  *             if atype == DATATYPE.string_array:
  *                 strlist = list()
  *                 len = <int>(bytes/sizeof(p))             # <<<<<<<<<<<<<<
@@ -27121,11 +27978,11 @@ static int __pyx_pf_9adios_mpi_4attr___init__(struct __pyx_obj_9adios_mpi_attr *
       __pyx_t_7 = (sizeof(__pyx_v_p));
       if (unlikely(__pyx_t_7 == 0)) {
         PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
-        __PYX_ERR(0, 1741, __pyx_L1_error)
+        __PYX_ERR(0, 1749, __pyx_L1_error)
       }
       __pyx_v_len = ((int)(__pyx_v_bytes / __pyx_t_7));
 
-      /* "adios_mpi.pyx":1742
+      /* "adios_mpi.pyx":1750
  *                 strlist = list()
  *                 len = <int>(bytes/sizeof(p))
  *                 for i in range(len):             # <<<<<<<<<<<<<<
@@ -27136,33 +27993,33 @@ static int __pyx_pf_9adios_mpi_4attr___init__(struct __pyx_obj_9adios_mpi_attr *
       for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
         __pyx_v_i = __pyx_t_9;
 
-        /* "adios_mpi.pyx":1743
+        /* "adios_mpi.pyx":1751
  *                 len = <int>(bytes/sizeof(p))
  *                 for i in range(len):
  *                     strlist.append((<char **>p)[i])             # <<<<<<<<<<<<<<
  *                 self.value = np.array(strlist)
  *                 self.dtype = self.value.dtype
  */
-        __pyx_t_5 = __Pyx_PyBytes_FromString((((char **)__pyx_v_p)[__pyx_v_i])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1743, __pyx_L1_error)
+        __pyx_t_5 = __Pyx_PyBytes_FromString((((char **)__pyx_v_p)[__pyx_v_i])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1751, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_5);
-        __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_strlist, __pyx_t_5); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 1743, __pyx_L1_error)
+        __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_strlist, __pyx_t_5); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 1751, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       }
 
-      /* "adios_mpi.pyx":1744
+      /* "adios_mpi.pyx":1752
  *                 for i in range(len):
  *                     strlist.append((<char **>p)[i])
  *                 self.value = np.array(strlist)             # <<<<<<<<<<<<<<
  *                 self.dtype = self.value.dtype
  * 
  */
-      __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1744, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1752, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
-      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_array); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1744, __pyx_L1_error)
+      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_array); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1752, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       __pyx_t_2 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_1))) {
+      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
         __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
         if (likely(__pyx_t_2)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
@@ -27172,44 +28029,62 @@ static int __pyx_pf_9adios_mpi_4attr___init__(struct __pyx_obj_9adios_mpi_attr *
         }
       }
       if (!__pyx_t_2) {
-        __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_strlist); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1744, __pyx_L1_error)
+        __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_strlist); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1752, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_5);
       } else {
-        __pyx_t_11 = PyTuple_New(1+1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1744, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_11);
-        __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_2); __pyx_t_2 = NULL;
-        __Pyx_INCREF(__pyx_v_strlist);
-        __Pyx_GIVEREF(__pyx_v_strlist);
-        PyTuple_SET_ITEM(__pyx_t_11, 0+1, __pyx_v_strlist);
-        __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_11, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1744, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_5);
-        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+        #if CYTHON_FAST_PYCALL
+        if (PyFunction_Check(__pyx_t_1)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_2, __pyx_v_strlist};
+          __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1752, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
+          __Pyx_GOTREF(__pyx_t_5);
+        } else
+        #endif
+        #if CYTHON_FAST_PYCCALL
+        if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_2, __pyx_v_strlist};
+          __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1752, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
+          __Pyx_GOTREF(__pyx_t_5);
+        } else
+        #endif
+        {
+          __pyx_t_11 = PyTuple_New(1+1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1752, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_11);
+          __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_2); __pyx_t_2 = NULL;
+          __Pyx_INCREF(__pyx_v_strlist);
+          __Pyx_GIVEREF(__pyx_v_strlist);
+          PyTuple_SET_ITEM(__pyx_t_11, 0+1, __pyx_v_strlist);
+          __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_11, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1752, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_5);
+          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+        }
       }
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-      if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1744, __pyx_L1_error)
+      if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1752, __pyx_L1_error)
       __Pyx_GIVEREF(__pyx_t_5);
       __Pyx_GOTREF(__pyx_v_self->value);
       __Pyx_DECREF(((PyObject *)__pyx_v_self->value));
       __pyx_v_self->value = ((PyArrayObject *)__pyx_t_5);
       __pyx_t_5 = 0;
 
-      /* "adios_mpi.pyx":1745
+      /* "adios_mpi.pyx":1753
  *                     strlist.append((<char **>p)[i])
  *                 self.value = np.array(strlist)
  *                 self.dtype = self.value.dtype             # <<<<<<<<<<<<<<
  * 
  *             elif self.dtype is None:
  */
-      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->value), __pyx_n_s_dtype); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1745, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->value), __pyx_n_s_dtype); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1753, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
-      if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_dtype))))) __PYX_ERR(0, 1745, __pyx_L1_error)
+      if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_dtype))))) __PYX_ERR(0, 1753, __pyx_L1_error)
       __Pyx_GIVEREF(__pyx_t_5);
       __Pyx_GOTREF(__pyx_v_self->dtype);
       __Pyx_DECREF(((PyObject *)__pyx_v_self->dtype));
       __pyx_v_self->dtype = ((PyArray_Descr *)__pyx_t_5);
       __pyx_t_5 = 0;
 
-      /* "adios_mpi.pyx":1739
+      /* "adios_mpi.pyx":1747
  *                 bytes = bytes - 1 ## Remove the NULL terminal
  *             self.dtype = adios2npdtype(atype, bytes)
  *             if atype == DATATYPE.string_array:             # <<<<<<<<<<<<<<
@@ -27219,7 +28094,7 @@ static int __pyx_pf_9adios_mpi_4attr___init__(struct __pyx_obj_9adios_mpi_attr *
       goto __pyx_L5;
     }
 
-    /* "adios_mpi.pyx":1747
+    /* "adios_mpi.pyx":1755
  *                 self.dtype = self.value.dtype
  * 
  *             elif self.dtype is None:             # <<<<<<<<<<<<<<
@@ -27230,18 +28105,18 @@ static int __pyx_pf_9adios_mpi_4attr___init__(struct __pyx_obj_9adios_mpi_attr *
     __pyx_t_12 = (__pyx_t_4 != 0);
     if (__pyx_t_12) {
 
-      /* "adios_mpi.pyx":1749
+      /* "adios_mpi.pyx":1757
  *             elif self.dtype is None:
  *                 print ('Warning: No support yet: %s (type=%d, bytes=%d)' % \
  *                       (self.name, atype, bytes))             # <<<<<<<<<<<<<<
  *             else:
  *                 len = <int>(bytes/self.dtype.itemsize)
  */
-      __pyx_t_5 = __Pyx_PyInt_From_ADIOS_DATATYPES(__pyx_v_atype); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1749, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_PyInt_From_ADIOS_DATATYPES(__pyx_v_atype); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1757, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_bytes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1749, __pyx_L1_error)
+      __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_bytes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1757, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
-      __pyx_t_11 = PyTuple_New(3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1749, __pyx_L1_error)
+      __pyx_t_11 = PyTuple_New(3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1757, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_11);
       __Pyx_INCREF(__pyx_v_self->name);
       __Pyx_GIVEREF(__pyx_v_self->name);
@@ -27253,27 +28128,27 @@ static int __pyx_pf_9adios_mpi_4attr___init__(struct __pyx_obj_9adios_mpi_attr *
       __pyx_t_5 = 0;
       __pyx_t_1 = 0;
 
-      /* "adios_mpi.pyx":1748
+      /* "adios_mpi.pyx":1756
  * 
  *             elif self.dtype is None:
  *                 print ('Warning: No support yet: %s (type=%d, bytes=%d)' % \             # <<<<<<<<<<<<<<
  *                       (self.name, atype, bytes))
  *             else:
  */
-      __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Warning_No_support_yet_s_type_d, __pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1748, __pyx_L1_error)
+      __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Warning_No_support_yet_s_type_d, __pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1756, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
-      __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1748, __pyx_L1_error)
+      __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1756, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_11);
       __Pyx_GIVEREF(__pyx_t_1);
       PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_1);
       __pyx_t_1 = 0;
-      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_11, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1748, __pyx_L1_error)
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_11, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1756, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-      /* "adios_mpi.pyx":1747
+      /* "adios_mpi.pyx":1755
  *                 self.dtype = self.value.dtype
  * 
  *             elif self.dtype is None:             # <<<<<<<<<<<<<<
@@ -27283,7 +28158,7 @@ static int __pyx_pf_9adios_mpi_4attr___init__(struct __pyx_obj_9adios_mpi_attr *
       goto __pyx_L5;
     }
 
-    /* "adios_mpi.pyx":1751
+    /* "adios_mpi.pyx":1759
  *                       (self.name, atype, bytes))
  *             else:
  *                 len = <int>(bytes/self.dtype.itemsize)             # <<<<<<<<<<<<<<
@@ -27293,15 +28168,15 @@ static int __pyx_pf_9adios_mpi_4attr___init__(struct __pyx_obj_9adios_mpi_attr *
     /*else*/ {
       if (unlikely(__pyx_v_self->dtype->elsize == 0)) {
         PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
-        __PYX_ERR(0, 1751, __pyx_L1_error)
+        __PYX_ERR(0, 1759, __pyx_L1_error)
       }
       else if (sizeof(int) == sizeof(long) && (!(((int)-1) > 0)) && unlikely(__pyx_v_self->dtype->elsize == (int)-1)  && unlikely(UNARY_NEG_WOULD_OVERFLOW(__pyx_v_bytes))) {
         PyErr_SetString(PyExc_OverflowError, "value too large to perform division");
-        __PYX_ERR(0, 1751, __pyx_L1_error)
+        __PYX_ERR(0, 1759, __pyx_L1_error)
       }
       __pyx_v_len = ((int)__Pyx_div_int(__pyx_v_bytes, __pyx_v_self->dtype->elsize));
 
-      /* "adios_mpi.pyx":1752
+      /* "adios_mpi.pyx":1760
  *             else:
  *                 len = <int>(bytes/self.dtype.itemsize)
  *                 if len == 1:             # <<<<<<<<<<<<<<
@@ -27311,41 +28186,41 @@ static int __pyx_pf_9adios_mpi_4attr___init__(struct __pyx_obj_9adios_mpi_attr *
       __pyx_t_12 = ((__pyx_v_len == 1) != 0);
       if (__pyx_t_12) {
 
-        /* "adios_mpi.pyx":1753
+        /* "adios_mpi.pyx":1761
  *                 len = <int>(bytes/self.dtype.itemsize)
  *                 if len == 1:
  *                     self.value = np.array(len, dtype=self.dtype)             # <<<<<<<<<<<<<<
  *                 else:
  *                     self.value = np.zeros(len, dtype=self.dtype)
  */
-        __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1753, __pyx_L1_error)
+        __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1761, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_1);
-        __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_array); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1753, __pyx_L1_error)
+        __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_array); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1761, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_11);
         __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-        __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_len); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1753, __pyx_L1_error)
+        __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_len); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1761, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_1);
-        __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1753, __pyx_L1_error)
+        __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1761, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_5);
         __Pyx_GIVEREF(__pyx_t_1);
         PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1);
         __pyx_t_1 = 0;
-        __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1753, __pyx_L1_error)
+        __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1761, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_1);
-        if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, ((PyObject *)__pyx_v_self->dtype)) < 0) __PYX_ERR(0, 1753, __pyx_L1_error)
-        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1753, __pyx_L1_error)
+        if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, ((PyObject *)__pyx_v_self->dtype)) < 0) __PYX_ERR(0, 1761, __pyx_L1_error)
+        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1761, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_2);
         __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
         __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-        if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1753, __pyx_L1_error)
+        if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1761, __pyx_L1_error)
         __Pyx_GIVEREF(__pyx_t_2);
         __Pyx_GOTREF(__pyx_v_self->value);
         __Pyx_DECREF(((PyObject *)__pyx_v_self->value));
         __pyx_v_self->value = ((PyArrayObject *)__pyx_t_2);
         __pyx_t_2 = 0;
 
-        /* "adios_mpi.pyx":1752
+        /* "adios_mpi.pyx":1760
  *             else:
  *                 len = <int>(bytes/self.dtype.itemsize)
  *                 if len == 1:             # <<<<<<<<<<<<<<
@@ -27355,7 +28230,7 @@ static int __pyx_pf_9adios_mpi_4attr___init__(struct __pyx_obj_9adios_mpi_attr *
         goto __pyx_L8;
       }
 
-      /* "adios_mpi.pyx":1755
+      /* "adios_mpi.pyx":1763
  *                     self.value = np.array(len, dtype=self.dtype)
  *                 else:
  *                     self.value = np.zeros(len, dtype=self.dtype)             # <<<<<<<<<<<<<<
@@ -27363,27 +28238,27 @@ static int __pyx_pf_9adios_mpi_4attr___init__(struct __pyx_obj_9adios_mpi_attr *
  *         else:
  */
       /*else*/ {
-        __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1755, __pyx_L1_error)
+        __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1763, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_2);
-        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_zeros); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1755, __pyx_L1_error)
+        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_zeros); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1763, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_1);
         __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-        __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_len); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1755, __pyx_L1_error)
+        __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_len); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1763, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_2);
-        __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1755, __pyx_L1_error)
+        __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1763, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_5);
         __Pyx_GIVEREF(__pyx_t_2);
         PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
         __pyx_t_2 = 0;
-        __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1755, __pyx_L1_error)
+        __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1763, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_2);
-        if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, ((PyObject *)__pyx_v_self->dtype)) < 0) __PYX_ERR(0, 1755, __pyx_L1_error)
-        __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_5, __pyx_t_2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1755, __pyx_L1_error)
+        if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, ((PyObject *)__pyx_v_self->dtype)) < 0) __PYX_ERR(0, 1763, __pyx_L1_error)
+        __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_5, __pyx_t_2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1763, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_11);
         __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
         __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-        if (!(likely(((__pyx_t_11) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_11, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1755, __pyx_L1_error)
+        if (!(likely(((__pyx_t_11) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_11, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1763, __pyx_L1_error)
         __Pyx_GIVEREF(__pyx_t_11);
         __Pyx_GOTREF(__pyx_v_self->value);
         __Pyx_DECREF(((PyObject *)__pyx_v_self->value));
@@ -27392,7 +28267,7 @@ static int __pyx_pf_9adios_mpi_4attr___init__(struct __pyx_obj_9adios_mpi_attr *
       }
       __pyx_L8:;
 
-      /* "adios_mpi.pyx":1756
+      /* "adios_mpi.pyx":1764
  *                 else:
  *                     self.value = np.zeros(len, dtype=self.dtype)
  *                 self.value.data = <char *> p             # <<<<<<<<<<<<<<
@@ -27403,7 +28278,7 @@ static int __pyx_pf_9adios_mpi_4attr___init__(struct __pyx_obj_9adios_mpi_attr *
     }
     __pyx_L5:;
 
-    /* "adios_mpi.pyx":1735
+    /* "adios_mpi.pyx":1743
  *         err = adios_get_attr(self.file.fp, s2b(self.name), &atype, &bytes, <void **> &p)
  * 
  *         if err == 0:             # <<<<<<<<<<<<<<
@@ -27413,7 +28288,7 @@ static int __pyx_pf_9adios_mpi_4attr___init__(struct __pyx_obj_9adios_mpi_attr *
     goto __pyx_L3;
   }
 
-  /* "adios_mpi.pyx":1758
+  /* "adios_mpi.pyx":1766
  *                 self.value.data = <char *> p
  *         else:
  *             raise KeyError(name)             # <<<<<<<<<<<<<<
@@ -27421,21 +28296,21 @@ static int __pyx_pf_9adios_mpi_4attr___init__(struct __pyx_obj_9adios_mpi_attr *
  *     def __getitem__(self, args):
  */
   /*else*/ {
-    __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1758, __pyx_L1_error)
+    __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1766, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_11);
     __Pyx_INCREF(__pyx_v_name);
     __Pyx_GIVEREF(__pyx_v_name);
     PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_v_name);
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_KeyError, __pyx_t_11, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1758, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_KeyError, __pyx_t_11, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1766, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __PYX_ERR(0, 1758, __pyx_L1_error)
+    __PYX_ERR(0, 1766, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "adios_mpi.pyx":1723
+  /* "adios_mpi.pyx":1731
  *                 return self.value
  * 
  *     def __init__(self, file file, str name):             # <<<<<<<<<<<<<<
@@ -27459,7 +28334,7 @@ static int __pyx_pf_9adios_mpi_4attr___init__(struct __pyx_obj_9adios_mpi_attr *
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1760
+/* "adios_mpi.pyx":1768
  *             raise KeyError(name)
  * 
  *     def __getitem__(self, args):             # <<<<<<<<<<<<<<
@@ -27491,35 +28366,35 @@ static PyObject *__pyx_pf_9adios_mpi_4attr_2__getitem__(struct __pyx_obj_9adios_
   PyObject *__pyx_t_5 = NULL;
   __Pyx_RefNannySetupContext("__getitem__", 0);
 
-  /* "adios_mpi.pyx":1761
+  /* "adios_mpi.pyx":1769
  * 
  *     def __getitem__(self, args):
  *         val = self.value[args]             # <<<<<<<<<<<<<<
  *         if (val.ndim == 0):
  *             return np.asscalar(val)
  */
-  __pyx_t_1 = PyObject_GetItem(((PyObject *)__pyx_v_self->value), __pyx_v_args); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1761, __pyx_L1_error)
+  __pyx_t_1 = PyObject_GetItem(((PyObject *)__pyx_v_self->value), __pyx_v_args); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1769, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_val = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":1762
+  /* "adios_mpi.pyx":1770
  *     def __getitem__(self, args):
  *         val = self.value[args]
  *         if (val.ndim == 0):             # <<<<<<<<<<<<<<
  *             return np.asscalar(val)
  *         else:
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_val, __pyx_n_s_ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1762, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_val, __pyx_n_s_ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1770, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyInt_EqObjC(__pyx_t_1, __pyx_int_0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1762, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyInt_EqObjC(__pyx_t_1, __pyx_int_0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1770, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 1762, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 1770, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   if (__pyx_t_3) {
 
-    /* "adios_mpi.pyx":1763
+    /* "adios_mpi.pyx":1771
  *         val = self.value[args]
  *         if (val.ndim == 0):
  *             return np.asscalar(val)             # <<<<<<<<<<<<<<
@@ -27527,13 +28402,13 @@ static PyObject *__pyx_pf_9adios_mpi_4attr_2__getitem__(struct __pyx_obj_9adios_
  *             return val
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1763, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1771, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_asscalar); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1763, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_asscalar); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1771, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __pyx_t_1 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_4))) {
+    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
       __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4);
       if (likely(__pyx_t_1)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
@@ -27543,25 +28418,43 @@ static PyObject *__pyx_pf_9adios_mpi_4attr_2__getitem__(struct __pyx_obj_9adios_
       }
     }
     if (!__pyx_t_1) {
-      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_val); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1763, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_val); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1771, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
     } else {
-      __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1763, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_5);
-      __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1); __pyx_t_1 = NULL;
-      __Pyx_INCREF(__pyx_v_val);
-      __Pyx_GIVEREF(__pyx_v_val);
-      PyTuple_SET_ITEM(__pyx_t_5, 0+1, __pyx_v_val);
-      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1763, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_2);
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_4)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_1, __pyx_v_val};
+        __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1771, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_1, __pyx_v_val};
+        __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1771, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+      } else
+      #endif
+      {
+        __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1771, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_5);
+        __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1); __pyx_t_1 = NULL;
+        __Pyx_INCREF(__pyx_v_val);
+        __Pyx_GIVEREF(__pyx_v_val);
+        PyTuple_SET_ITEM(__pyx_t_5, 0+1, __pyx_v_val);
+        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1771, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+      }
     }
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_r = __pyx_t_2;
     __pyx_t_2 = 0;
     goto __pyx_L0;
 
-    /* "adios_mpi.pyx":1762
+    /* "adios_mpi.pyx":1770
  *     def __getitem__(self, args):
  *         val = self.value[args]
  *         if (val.ndim == 0):             # <<<<<<<<<<<<<<
@@ -27570,7 +28463,7 @@ static PyObject *__pyx_pf_9adios_mpi_4attr_2__getitem__(struct __pyx_obj_9adios_
  */
   }
 
-  /* "adios_mpi.pyx":1765
+  /* "adios_mpi.pyx":1773
  *             return np.asscalar(val)
  *         else:
  *             return val             # <<<<<<<<<<<<<<
@@ -27584,7 +28477,7 @@ static PyObject *__pyx_pf_9adios_mpi_4attr_2__getitem__(struct __pyx_obj_9adios_
     goto __pyx_L0;
   }
 
-  /* "adios_mpi.pyx":1760
+  /* "adios_mpi.pyx":1768
  *             raise KeyError(name)
  * 
  *     def __getitem__(self, args):             # <<<<<<<<<<<<<<
@@ -27607,7 +28500,7 @@ static PyObject *__pyx_pf_9adios_mpi_4attr_2__getitem__(struct __pyx_obj_9adios_
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1767
+/* "adios_mpi.pyx":1775
  *             return val
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -27635,7 +28528,7 @@ static PyObject *__pyx_pf_9adios_mpi_4attr_4__repr__(struct __pyx_obj_9adios_mpi
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("__repr__", 0);
 
-  /* "adios_mpi.pyx":1768
+  /* "adios_mpi.pyx":1776
  * 
  *     def __repr__(self):
  *         return "AdiosAttr (name=%r, dtype=%r, value=%r)" % \             # <<<<<<<<<<<<<<
@@ -27644,14 +28537,14 @@ static PyObject *__pyx_pf_9adios_mpi_4attr_4__repr__(struct __pyx_obj_9adios_mpi
  */
   __Pyx_XDECREF(__pyx_r);
 
-  /* "adios_mpi.pyx":1769
+  /* "adios_mpi.pyx":1777
  *     def __repr__(self):
  *         return "AdiosAttr (name=%r, dtype=%r, value=%r)" % \
  *                (self.name, self.dtype, self.value)             # <<<<<<<<<<<<<<
  * 
  * cdef class group(dict):
  */
-  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1769, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1777, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_v_self->name);
   __Pyx_GIVEREF(__pyx_v_self->name);
@@ -27663,21 +28556,21 @@ static PyObject *__pyx_pf_9adios_mpi_4attr_4__repr__(struct __pyx_obj_9adios_mpi
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self->value));
   PyTuple_SET_ITEM(__pyx_t_1, 2, ((PyObject *)__pyx_v_self->value));
 
-  /* "adios_mpi.pyx":1768
+  /* "adios_mpi.pyx":1776
  * 
  *     def __repr__(self):
  *         return "AdiosAttr (name=%r, dtype=%r, value=%r)" % \             # <<<<<<<<<<<<<<
  *                (self.name, self.dtype, self.value)
  * 
  */
-  __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_AdiosAttr_name_r_dtype_r_value_r, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1768, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_AdiosAttr_name_r_dtype_r_value_r, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1776, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":1767
+  /* "adios_mpi.pyx":1775
  *             return val
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -27697,7 +28590,7 @@ static PyObject *__pyx_pf_9adios_mpi_4attr_4__repr__(struct __pyx_obj_9adios_mpi
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1785
+/* "adios_mpi.pyx":1793
  *     cpdef public softdict attrs
  * 
  *     def __init__(self, file file, str name):             # <<<<<<<<<<<<<<
@@ -27733,11 +28626,11 @@ static int __pyx_pw_9adios_mpi_5group_1__init__(PyObject *__pyx_v_self, PyObject
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, 1); __PYX_ERR(0, 1785, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, 1); __PYX_ERR(0, 1793, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 1785, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 1793, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -27750,14 +28643,14 @@ static int __pyx_pw_9adios_mpi_5group_1__init__(PyObject *__pyx_v_self, PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1785, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1793, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.group.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_file), __pyx_ptype_9adios_mpi_file, 1, "file", 0))) __PYX_ERR(0, 1785, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 1785, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_file), __pyx_ptype_9adios_mpi_file, 1, "file", 0))) __PYX_ERR(0, 1793, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 1793, __pyx_L1_error)
   __pyx_r = __pyx_pf_9adios_mpi_5group___init__(((struct __pyx_obj_9adios_mpi_group *)__pyx_v_self), __pyx_v_file, __pyx_v_name);
 
   /* function exit code */
@@ -27781,12 +28674,12 @@ static int __pyx_pf_9adios_mpi_5group___init__(struct __pyx_obj_9adios_mpi_group
   PyObject *__pyx_t_7 = NULL;
   PyObject *__pyx_t_8 = NULL;
   PyObject *__pyx_t_9 = NULL;
-  Py_ssize_t __pyx_t_10;
+  int __pyx_t_10;
   PyObject *__pyx_t_11 = NULL;
   __Pyx_RefNannySetupContext("__init__", 0);
   __Pyx_INCREF(__pyx_v_name);
 
-  /* "adios_mpi.pyx":1786
+  /* "adios_mpi.pyx":1794
  * 
  *     def __init__(self, file file, str name):
  *         self.file = file             # <<<<<<<<<<<<<<
@@ -27799,33 +28692,33 @@ static int __pyx_pf_9adios_mpi_5group___init__(struct __pyx_obj_9adios_mpi_group
   __Pyx_DECREF(((PyObject *)__pyx_v_self->file));
   __pyx_v_self->file = __pyx_v_file;
 
-  /* "adios_mpi.pyx":1787
+  /* "adios_mpi.pyx":1795
  *     def __init__(self, file file, str name):
  *         self.file = file
  *         self.name = name.rstrip('/')             # <<<<<<<<<<<<<<
  * 
  *         self.vars = softdict()
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1787, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1795, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__44, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1787, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__44, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1795, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (!(likely(PyString_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_2)->tp_name), 0))) __PYX_ERR(0, 1787, __pyx_L1_error)
+  if (!(likely(PyString_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_2)->tp_name), 0))) __PYX_ERR(0, 1795, __pyx_L1_error)
   __Pyx_GIVEREF(__pyx_t_2);
   __Pyx_GOTREF(__pyx_v_self->name);
   __Pyx_DECREF(__pyx_v_self->name);
   __pyx_v_self->name = ((PyObject*)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "adios_mpi.pyx":1789
+  /* "adios_mpi.pyx":1797
  *         self.name = name.rstrip('/')
  * 
  *         self.vars = softdict()             # <<<<<<<<<<<<<<
  *         for name in self.file.vars.keys():
  *             if name.startswith(self.name + '/'):
  */
-  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_9adios_mpi_softdict), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1789, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_9adios_mpi_softdict), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1797, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_2);
   __Pyx_GOTREF(__pyx_v_self->vars);
@@ -27833,17 +28726,17 @@ static int __pyx_pf_9adios_mpi_5group___init__(struct __pyx_obj_9adios_mpi_group
   __pyx_v_self->vars = ((struct __pyx_obj_9adios_mpi_softdict *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "adios_mpi.pyx":1790
+  /* "adios_mpi.pyx":1798
  * 
  *         self.vars = softdict()
  *         for name in self.file.vars.keys():             # <<<<<<<<<<<<<<
  *             if name.startswith(self.name + '/'):
  *                 self.vars[name.replace(self.name + '/', '', 1)] = self.file.vars[name]
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->file->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1790, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->file->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1798, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_1))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
     __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
     if (likely(__pyx_t_3)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
@@ -27853,10 +28746,10 @@ static int __pyx_pf_9adios_mpi_5group___init__(struct __pyx_obj_9adios_mpi_group
     }
   }
   if (__pyx_t_3) {
-    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1790, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1798, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   } else {
-    __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1790, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1798, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -27864,27 +28757,27 @@ static int __pyx_pf_9adios_mpi_5group___init__(struct __pyx_obj_9adios_mpi_group
     __pyx_t_1 = __pyx_t_2; __Pyx_INCREF(__pyx_t_1); __pyx_t_4 = 0;
     __pyx_t_5 = NULL;
   } else {
-    __pyx_t_4 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1790, __pyx_L1_error)
+    __pyx_t_4 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1798, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1790, __pyx_L1_error)
+    __pyx_t_5 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1798, __pyx_L1_error)
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   for (;;) {
     if (likely(!__pyx_t_5)) {
       if (likely(PyList_CheckExact(__pyx_t_1))) {
         if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_1)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1790, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1798, __pyx_L1_error)
         #else
-        __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1790, __pyx_L1_error)
+        __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1798, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_2);
         #endif
       } else {
         if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1790, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1798, __pyx_L1_error)
         #else
-        __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1790, __pyx_L1_error)
+        __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1798, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_2);
         #endif
       }
@@ -27894,17 +28787,17 @@ static int __pyx_pf_9adios_mpi_5group___init__(struct __pyx_obj_9adios_mpi_group
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
           if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-          else __PYX_ERR(0, 1790, __pyx_L1_error)
+          else __PYX_ERR(0, 1798, __pyx_L1_error)
         }
         break;
       }
       __Pyx_GOTREF(__pyx_t_2);
     }
-    if (!(likely(PyString_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_2)->tp_name), 0))) __PYX_ERR(0, 1790, __pyx_L1_error)
+    if (!(likely(PyString_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_2)->tp_name), 0))) __PYX_ERR(0, 1798, __pyx_L1_error)
     __Pyx_DECREF_SET(__pyx_v_name, ((PyObject*)__pyx_t_2));
     __pyx_t_2 = 0;
 
-    /* "adios_mpi.pyx":1791
+    /* "adios_mpi.pyx":1799
  *         self.vars = softdict()
  *         for name in self.file.vars.keys():
  *             if name.startswith(self.name + '/'):             # <<<<<<<<<<<<<<
@@ -27913,30 +28806,30 @@ static int __pyx_pf_9adios_mpi_5group___init__(struct __pyx_obj_9adios_mpi_group
  */
     if (unlikely(__pyx_v_name == Py_None)) {
       PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "startswith");
-      __PYX_ERR(0, 1791, __pyx_L1_error)
+      __PYX_ERR(0, 1799, __pyx_L1_error)
     }
-    __pyx_t_2 = PyNumber_Add(__pyx_v_self->name, __pyx_kp_s_); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1791, __pyx_L1_error)
+    __pyx_t_2 = PyNumber_Add(__pyx_v_self->name, __pyx_kp_s_); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1799, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_6 = __Pyx_PyStr_Tailmatch(__pyx_v_name, __pyx_t_2, 0, PY_SSIZE_T_MAX, -1); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 1791, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_PyStr_Tailmatch(__pyx_v_name, __pyx_t_2, 0, PY_SSIZE_T_MAX, -1); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 1799, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     if ((__pyx_t_6 != 0)) {
 
-      /* "adios_mpi.pyx":1792
+      /* "adios_mpi.pyx":1800
  *         for name in self.file.vars.keys():
  *             if name.startswith(self.name + '/'):
  *                 self.vars[name.replace(self.name + '/', '', 1)] = self.file.vars[name]             # <<<<<<<<<<<<<<
  *             if name.startswith('/' + self.name + '/'):
  *                 self.vars[name.replace('/' + self.name + '/', '', 1)] = self.file.vars[name]
  */
-      __pyx_t_2 = PyObject_GetItem(((PyObject *)__pyx_v_self->file->vars), __pyx_v_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1792, __pyx_L1_error)
+      __pyx_t_2 = PyObject_GetItem(((PyObject *)__pyx_v_self->file->vars), __pyx_v_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1800, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
-      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_replace); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1792, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_replace); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1800, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      __pyx_t_8 = PyNumber_Add(__pyx_v_self->name, __pyx_kp_s_); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1792, __pyx_L1_error)
+      __pyx_t_8 = PyNumber_Add(__pyx_v_self->name, __pyx_kp_s_); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1800, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
       __pyx_t_9 = NULL;
       __pyx_t_10 = 0;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_7))) {
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
         __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_7);
         if (likely(__pyx_t_9)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
@@ -27946,29 +28839,49 @@ static int __pyx_pf_9adios_mpi_5group___init__(struct __pyx_obj_9adios_mpi_group
           __pyx_t_10 = 1;
         }
       }
-      __pyx_t_11 = PyTuple_New(3+__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1792, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_11);
-      if (__pyx_t_9) {
-        __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_9); __pyx_t_9 = NULL;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_7)) {
+        PyObject *__pyx_temp[4] = {__pyx_t_9, __pyx_t_8, __pyx_kp_s__10, __pyx_int_1};
+        __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_10, 3+__pyx_t_10); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1800, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+        __Pyx_GOTREF(__pyx_t_3);
+        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
+        PyObject *__pyx_temp[4] = {__pyx_t_9, __pyx_t_8, __pyx_kp_s__10, __pyx_int_1};
+        __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_10, 3+__pyx_t_10); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1800, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+        __Pyx_GOTREF(__pyx_t_3);
+        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+      } else
+      #endif
+      {
+        __pyx_t_11 = PyTuple_New(3+__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1800, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_11);
+        if (__pyx_t_9) {
+          __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_9); __pyx_t_9 = NULL;
+        }
+        __Pyx_GIVEREF(__pyx_t_8);
+        PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_10, __pyx_t_8);
+        __Pyx_INCREF(__pyx_kp_s__10);
+        __Pyx_GIVEREF(__pyx_kp_s__10);
+        PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_10, __pyx_kp_s__10);
+        __Pyx_INCREF(__pyx_int_1);
+        __Pyx_GIVEREF(__pyx_int_1);
+        PyTuple_SET_ITEM(__pyx_t_11, 2+__pyx_t_10, __pyx_int_1);
+        __pyx_t_8 = 0;
+        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_11, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1800, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_3);
+        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
       }
-      __Pyx_GIVEREF(__pyx_t_8);
-      PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_10, __pyx_t_8);
-      __Pyx_INCREF(__pyx_kp_s__10);
-      __Pyx_GIVEREF(__pyx_kp_s__10);
-      PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_10, __pyx_kp_s__10);
-      __Pyx_INCREF(__pyx_int_1);
-      __Pyx_GIVEREF(__pyx_int_1);
-      PyTuple_SET_ITEM(__pyx_t_11, 2+__pyx_t_10, __pyx_int_1);
-      __pyx_t_8 = 0;
-      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_11, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1792, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_3);
-      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-      if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_self->vars), __pyx_t_3, __pyx_t_2) < 0)) __PYX_ERR(0, 1792, __pyx_L1_error)
+      if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_self->vars), __pyx_t_3, __pyx_t_2) < 0)) __PYX_ERR(0, 1800, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-      /* "adios_mpi.pyx":1791
+      /* "adios_mpi.pyx":1799
  *         self.vars = softdict()
  *         for name in self.file.vars.keys():
  *             if name.startswith(self.name + '/'):             # <<<<<<<<<<<<<<
@@ -27977,7 +28890,7 @@ static int __pyx_pf_9adios_mpi_5group___init__(struct __pyx_obj_9adios_mpi_group
  */
     }
 
-    /* "adios_mpi.pyx":1793
+    /* "adios_mpi.pyx":1801
  *             if name.startswith(self.name + '/'):
  *                 self.vars[name.replace(self.name + '/', '', 1)] = self.file.vars[name]
  *             if name.startswith('/' + self.name + '/'):             # <<<<<<<<<<<<<<
@@ -27986,36 +28899,36 @@ static int __pyx_pf_9adios_mpi_5group___init__(struct __pyx_obj_9adios_mpi_group
  */
     if (unlikely(__pyx_v_name == Py_None)) {
       PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "startswith");
-      __PYX_ERR(0, 1793, __pyx_L1_error)
+      __PYX_ERR(0, 1801, __pyx_L1_error)
     }
-    __pyx_t_2 = PyNumber_Add(__pyx_kp_s_, __pyx_v_self->name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1793, __pyx_L1_error)
+    __pyx_t_2 = PyNumber_Add(__pyx_kp_s_, __pyx_v_self->name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1801, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_kp_s_); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1793, __pyx_L1_error)
+    __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_kp_s_); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1801, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_6 = __Pyx_PyStr_Tailmatch(__pyx_v_name, __pyx_t_3, 0, PY_SSIZE_T_MAX, -1); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 1793, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_PyStr_Tailmatch(__pyx_v_name, __pyx_t_3, 0, PY_SSIZE_T_MAX, -1); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 1801, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     if ((__pyx_t_6 != 0)) {
 
-      /* "adios_mpi.pyx":1794
+      /* "adios_mpi.pyx":1802
  *                 self.vars[name.replace(self.name + '/', '', 1)] = self.file.vars[name]
  *             if name.startswith('/' + self.name + '/'):
  *                 self.vars[name.replace('/' + self.name + '/', '', 1)] = self.file.vars[name]             # <<<<<<<<<<<<<<
  * 
  *         self.attrs = softdict()
  */
-      __pyx_t_3 = PyObject_GetItem(((PyObject *)__pyx_v_self->file->vars), __pyx_v_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1794, __pyx_L1_error)
+      __pyx_t_3 = PyObject_GetItem(((PyObject *)__pyx_v_self->file->vars), __pyx_v_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1802, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_replace); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1794, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_replace); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1802, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      __pyx_t_11 = PyNumber_Add(__pyx_kp_s_, __pyx_v_self->name); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1794, __pyx_L1_error)
+      __pyx_t_11 = PyNumber_Add(__pyx_kp_s_, __pyx_v_self->name); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1802, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_11);
-      __pyx_t_8 = PyNumber_Add(__pyx_t_11, __pyx_kp_s_); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1794, __pyx_L1_error)
+      __pyx_t_8 = PyNumber_Add(__pyx_t_11, __pyx_kp_s_); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1802, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
       __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
       __pyx_t_11 = NULL;
       __pyx_t_10 = 0;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_7))) {
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
         __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_7);
         if (likely(__pyx_t_11)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
@@ -28025,29 +28938,49 @@ static int __pyx_pf_9adios_mpi_5group___init__(struct __pyx_obj_9adios_mpi_group
           __pyx_t_10 = 1;
         }
       }
-      __pyx_t_9 = PyTuple_New(3+__pyx_t_10); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1794, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_9);
-      if (__pyx_t_11) {
-        __Pyx_GIVEREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_11); __pyx_t_11 = NULL;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_7)) {
+        PyObject *__pyx_temp[4] = {__pyx_t_11, __pyx_t_8, __pyx_kp_s__10, __pyx_int_1};
+        __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_10, 3+__pyx_t_10); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1802, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
+        PyObject *__pyx_temp[4] = {__pyx_t_11, __pyx_t_8, __pyx_kp_s__10, __pyx_int_1};
+        __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_10, 3+__pyx_t_10); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1802, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+      } else
+      #endif
+      {
+        __pyx_t_9 = PyTuple_New(3+__pyx_t_10); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1802, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_9);
+        if (__pyx_t_11) {
+          __Pyx_GIVEREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_11); __pyx_t_11 = NULL;
+        }
+        __Pyx_GIVEREF(__pyx_t_8);
+        PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_10, __pyx_t_8);
+        __Pyx_INCREF(__pyx_kp_s__10);
+        __Pyx_GIVEREF(__pyx_kp_s__10);
+        PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_10, __pyx_kp_s__10);
+        __Pyx_INCREF(__pyx_int_1);
+        __Pyx_GIVEREF(__pyx_int_1);
+        PyTuple_SET_ITEM(__pyx_t_9, 2+__pyx_t_10, __pyx_int_1);
+        __pyx_t_8 = 0;
+        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_9, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1802, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
       }
-      __Pyx_GIVEREF(__pyx_t_8);
-      PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_10, __pyx_t_8);
-      __Pyx_INCREF(__pyx_kp_s__10);
-      __Pyx_GIVEREF(__pyx_kp_s__10);
-      PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_10, __pyx_kp_s__10);
-      __Pyx_INCREF(__pyx_int_1);
-      __Pyx_GIVEREF(__pyx_int_1);
-      PyTuple_SET_ITEM(__pyx_t_9, 2+__pyx_t_10, __pyx_int_1);
-      __pyx_t_8 = 0;
-      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_9, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1794, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_2);
-      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-      if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_self->vars), __pyx_t_2, __pyx_t_3) < 0)) __PYX_ERR(0, 1794, __pyx_L1_error)
+      if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_self->vars), __pyx_t_2, __pyx_t_3) < 0)) __PYX_ERR(0, 1802, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-      /* "adios_mpi.pyx":1793
+      /* "adios_mpi.pyx":1801
  *             if name.startswith(self.name + '/'):
  *                 self.vars[name.replace(self.name + '/', '', 1)] = self.file.vars[name]
  *             if name.startswith('/' + self.name + '/'):             # <<<<<<<<<<<<<<
@@ -28056,7 +28989,7 @@ static int __pyx_pf_9adios_mpi_5group___init__(struct __pyx_obj_9adios_mpi_group
  */
     }
 
-    /* "adios_mpi.pyx":1790
+    /* "adios_mpi.pyx":1798
  * 
  *         self.vars = softdict()
  *         for name in self.file.vars.keys():             # <<<<<<<<<<<<<<
@@ -28066,14 +28999,14 @@ static int __pyx_pf_9adios_mpi_5group___init__(struct __pyx_obj_9adios_mpi_group
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":1796
+  /* "adios_mpi.pyx":1804
  *                 self.vars[name.replace('/' + self.name + '/', '', 1)] = self.file.vars[name]
  * 
  *         self.attrs = softdict()             # <<<<<<<<<<<<<<
  *         for name in self.file.attrs.keys():
  *             if name.startswith(self.name + '/'):
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_9adios_mpi_softdict), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1796, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_9adios_mpi_softdict), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1804, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_self->attrs);
@@ -28081,17 +29014,17 @@ static int __pyx_pf_9adios_mpi_5group___init__(struct __pyx_obj_9adios_mpi_group
   __pyx_v_self->attrs = ((struct __pyx_obj_9adios_mpi_softdict *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":1797
+  /* "adios_mpi.pyx":1805
  * 
  *         self.attrs = softdict()
  *         for name in self.file.attrs.keys():             # <<<<<<<<<<<<<<
  *             if name.startswith(self.name + '/'):
  *                 self.attrs[name.replace(self.name + '/', '', 1)] = self.file.attrs[name]
  */
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->file->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1797, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->file->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1805, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_2 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
     __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
     if (likely(__pyx_t_2)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -28101,10 +29034,10 @@ static int __pyx_pf_9adios_mpi_5group___init__(struct __pyx_obj_9adios_mpi_group
     }
   }
   if (__pyx_t_2) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1797, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1805, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   } else {
-    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1797, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1805, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -28112,27 +29045,27 @@ static int __pyx_pf_9adios_mpi_5group___init__(struct __pyx_obj_9adios_mpi_group
     __pyx_t_3 = __pyx_t_1; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0;
     __pyx_t_5 = NULL;
   } else {
-    __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1797, __pyx_L1_error)
+    __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1805, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_5 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1797, __pyx_L1_error)
+    __pyx_t_5 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1805, __pyx_L1_error)
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   for (;;) {
     if (likely(!__pyx_t_5)) {
       if (likely(PyList_CheckExact(__pyx_t_3))) {
         if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_1 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1797, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_1 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1805, __pyx_L1_error)
         #else
-        __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1797, __pyx_L1_error)
+        __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1805, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_1);
         #endif
       } else {
         if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1797, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1805, __pyx_L1_error)
         #else
-        __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1797, __pyx_L1_error)
+        __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1805, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_1);
         #endif
       }
@@ -28142,17 +29075,17 @@ static int __pyx_pf_9adios_mpi_5group___init__(struct __pyx_obj_9adios_mpi_group
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
           if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-          else __PYX_ERR(0, 1797, __pyx_L1_error)
+          else __PYX_ERR(0, 1805, __pyx_L1_error)
         }
         break;
       }
       __Pyx_GOTREF(__pyx_t_1);
     }
-    if (!(likely(PyString_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 1797, __pyx_L1_error)
+    if (!(likely(PyString_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 1805, __pyx_L1_error)
     __Pyx_DECREF_SET(__pyx_v_name, ((PyObject*)__pyx_t_1));
     __pyx_t_1 = 0;
 
-    /* "adios_mpi.pyx":1798
+    /* "adios_mpi.pyx":1806
  *         self.attrs = softdict()
  *         for name in self.file.attrs.keys():
  *             if name.startswith(self.name + '/'):             # <<<<<<<<<<<<<<
@@ -28161,30 +29094,30 @@ static int __pyx_pf_9adios_mpi_5group___init__(struct __pyx_obj_9adios_mpi_group
  */
     if (unlikely(__pyx_v_name == Py_None)) {
       PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "startswith");
-      __PYX_ERR(0, 1798, __pyx_L1_error)
+      __PYX_ERR(0, 1806, __pyx_L1_error)
     }
-    __pyx_t_1 = PyNumber_Add(__pyx_v_self->name, __pyx_kp_s_); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1798, __pyx_L1_error)
+    __pyx_t_1 = PyNumber_Add(__pyx_v_self->name, __pyx_kp_s_); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1806, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_6 = __Pyx_PyStr_Tailmatch(__pyx_v_name, __pyx_t_1, 0, PY_SSIZE_T_MAX, -1); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 1798, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_PyStr_Tailmatch(__pyx_v_name, __pyx_t_1, 0, PY_SSIZE_T_MAX, -1); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 1806, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     if ((__pyx_t_6 != 0)) {
 
-      /* "adios_mpi.pyx":1799
+      /* "adios_mpi.pyx":1807
  *         for name in self.file.attrs.keys():
  *             if name.startswith(self.name + '/'):
  *                 self.attrs[name.replace(self.name + '/', '', 1)] = self.file.attrs[name]             # <<<<<<<<<<<<<<
  *             if name.startswith('/' + self.name + '/'):
  *                 self.attrs[name.replace('/' + self.name + '/', '', 1)] = self.file.attrs[name]
  */
-      __pyx_t_1 = PyObject_GetItem(((PyObject *)__pyx_v_self->file->attrs), __pyx_v_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1799, __pyx_L1_error)
+      __pyx_t_1 = PyObject_GetItem(((PyObject *)__pyx_v_self->file->attrs), __pyx_v_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1807, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
-      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_replace); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1799, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_replace); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1807, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      __pyx_t_9 = PyNumber_Add(__pyx_v_self->name, __pyx_kp_s_); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1799, __pyx_L1_error)
+      __pyx_t_9 = PyNumber_Add(__pyx_v_self->name, __pyx_kp_s_); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1807, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
       __pyx_t_8 = NULL;
       __pyx_t_10 = 0;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_7))) {
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
         __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
         if (likely(__pyx_t_8)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
@@ -28194,29 +29127,49 @@ static int __pyx_pf_9adios_mpi_5group___init__(struct __pyx_obj_9adios_mpi_group
           __pyx_t_10 = 1;
         }
       }
-      __pyx_t_11 = PyTuple_New(3+__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1799, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_11);
-      if (__pyx_t_8) {
-        __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_8); __pyx_t_8 = NULL;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_7)) {
+        PyObject *__pyx_temp[4] = {__pyx_t_8, __pyx_t_9, __pyx_kp_s__10, __pyx_int_1};
+        __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_10, 3+__pyx_t_10); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1807, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
+        PyObject *__pyx_temp[4] = {__pyx_t_8, __pyx_t_9, __pyx_kp_s__10, __pyx_int_1};
+        __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_10, 3+__pyx_t_10); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1807, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+      } else
+      #endif
+      {
+        __pyx_t_11 = PyTuple_New(3+__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1807, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_11);
+        if (__pyx_t_8) {
+          __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_8); __pyx_t_8 = NULL;
+        }
+        __Pyx_GIVEREF(__pyx_t_9);
+        PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_10, __pyx_t_9);
+        __Pyx_INCREF(__pyx_kp_s__10);
+        __Pyx_GIVEREF(__pyx_kp_s__10);
+        PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_10, __pyx_kp_s__10);
+        __Pyx_INCREF(__pyx_int_1);
+        __Pyx_GIVEREF(__pyx_int_1);
+        PyTuple_SET_ITEM(__pyx_t_11, 2+__pyx_t_10, __pyx_int_1);
+        __pyx_t_9 = 0;
+        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_11, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1807, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
       }
-      __Pyx_GIVEREF(__pyx_t_9);
-      PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_10, __pyx_t_9);
-      __Pyx_INCREF(__pyx_kp_s__10);
-      __Pyx_GIVEREF(__pyx_kp_s__10);
-      PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_10, __pyx_kp_s__10);
-      __Pyx_INCREF(__pyx_int_1);
-      __Pyx_GIVEREF(__pyx_int_1);
-      PyTuple_SET_ITEM(__pyx_t_11, 2+__pyx_t_10, __pyx_int_1);
-      __pyx_t_9 = 0;
-      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_11, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1799, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_2);
-      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-      if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_self->attrs), __pyx_t_2, __pyx_t_1) < 0)) __PYX_ERR(0, 1799, __pyx_L1_error)
+      if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_self->attrs), __pyx_t_2, __pyx_t_1) < 0)) __PYX_ERR(0, 1807, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-      /* "adios_mpi.pyx":1798
+      /* "adios_mpi.pyx":1806
  *         self.attrs = softdict()
  *         for name in self.file.attrs.keys():
  *             if name.startswith(self.name + '/'):             # <<<<<<<<<<<<<<
@@ -28225,7 +29178,7 @@ static int __pyx_pf_9adios_mpi_5group___init__(struct __pyx_obj_9adios_mpi_group
  */
     }
 
-    /* "adios_mpi.pyx":1800
+    /* "adios_mpi.pyx":1808
  *             if name.startswith(self.name + '/'):
  *                 self.attrs[name.replace(self.name + '/', '', 1)] = self.file.attrs[name]
  *             if name.startswith('/' + self.name + '/'):             # <<<<<<<<<<<<<<
@@ -28234,36 +29187,36 @@ static int __pyx_pf_9adios_mpi_5group___init__(struct __pyx_obj_9adios_mpi_group
  */
     if (unlikely(__pyx_v_name == Py_None)) {
       PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "startswith");
-      __PYX_ERR(0, 1800, __pyx_L1_error)
+      __PYX_ERR(0, 1808, __pyx_L1_error)
     }
-    __pyx_t_1 = PyNumber_Add(__pyx_kp_s_, __pyx_v_self->name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1800, __pyx_L1_error)
+    __pyx_t_1 = PyNumber_Add(__pyx_kp_s_, __pyx_v_self->name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1808, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_kp_s_); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1800, __pyx_L1_error)
+    __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_kp_s_); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1808, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_6 = __Pyx_PyStr_Tailmatch(__pyx_v_name, __pyx_t_2, 0, PY_SSIZE_T_MAX, -1); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 1800, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_PyStr_Tailmatch(__pyx_v_name, __pyx_t_2, 0, PY_SSIZE_T_MAX, -1); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 1808, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     if ((__pyx_t_6 != 0)) {
 
-      /* "adios_mpi.pyx":1801
+      /* "adios_mpi.pyx":1809
  *                 self.attrs[name.replace(self.name + '/', '', 1)] = self.file.attrs[name]
  *             if name.startswith('/' + self.name + '/'):
  *                 self.attrs[name.replace('/' + self.name + '/', '', 1)] = self.file.attrs[name]             # <<<<<<<<<<<<<<
  * 
  *     def __getitem__(self, varname):
  */
-      __pyx_t_2 = PyObject_GetItem(((PyObject *)__pyx_v_self->file->attrs), __pyx_v_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1801, __pyx_L1_error)
+      __pyx_t_2 = PyObject_GetItem(((PyObject *)__pyx_v_self->file->attrs), __pyx_v_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1809, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
-      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_replace); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1801, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_replace); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1809, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      __pyx_t_11 = PyNumber_Add(__pyx_kp_s_, __pyx_v_self->name); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1801, __pyx_L1_error)
+      __pyx_t_11 = PyNumber_Add(__pyx_kp_s_, __pyx_v_self->name); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1809, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_11);
-      __pyx_t_9 = PyNumber_Add(__pyx_t_11, __pyx_kp_s_); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1801, __pyx_L1_error)
+      __pyx_t_9 = PyNumber_Add(__pyx_t_11, __pyx_kp_s_); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1809, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
       __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
       __pyx_t_11 = NULL;
       __pyx_t_10 = 0;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_7))) {
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
         __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_7);
         if (likely(__pyx_t_11)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
@@ -28273,29 +29226,49 @@ static int __pyx_pf_9adios_mpi_5group___init__(struct __pyx_obj_9adios_mpi_group
           __pyx_t_10 = 1;
         }
       }
-      __pyx_t_8 = PyTuple_New(3+__pyx_t_10); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1801, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_8);
-      if (__pyx_t_11) {
-        __Pyx_GIVEREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_11); __pyx_t_11 = NULL;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_7)) {
+        PyObject *__pyx_temp[4] = {__pyx_t_11, __pyx_t_9, __pyx_kp_s__10, __pyx_int_1};
+        __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_10, 3+__pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1809, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
+        __Pyx_GOTREF(__pyx_t_1);
+        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
+        PyObject *__pyx_temp[4] = {__pyx_t_11, __pyx_t_9, __pyx_kp_s__10, __pyx_int_1};
+        __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_10, 3+__pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1809, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
+        __Pyx_GOTREF(__pyx_t_1);
+        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+      } else
+      #endif
+      {
+        __pyx_t_8 = PyTuple_New(3+__pyx_t_10); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1809, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_8);
+        if (__pyx_t_11) {
+          __Pyx_GIVEREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_11); __pyx_t_11 = NULL;
+        }
+        __Pyx_GIVEREF(__pyx_t_9);
+        PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_10, __pyx_t_9);
+        __Pyx_INCREF(__pyx_kp_s__10);
+        __Pyx_GIVEREF(__pyx_kp_s__10);
+        PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_10, __pyx_kp_s__10);
+        __Pyx_INCREF(__pyx_int_1);
+        __Pyx_GIVEREF(__pyx_int_1);
+        PyTuple_SET_ITEM(__pyx_t_8, 2+__pyx_t_10, __pyx_int_1);
+        __pyx_t_9 = 0;
+        __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_8, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1809, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_1);
+        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
       }
-      __Pyx_GIVEREF(__pyx_t_9);
-      PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_10, __pyx_t_9);
-      __Pyx_INCREF(__pyx_kp_s__10);
-      __Pyx_GIVEREF(__pyx_kp_s__10);
-      PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_10, __pyx_kp_s__10);
-      __Pyx_INCREF(__pyx_int_1);
-      __Pyx_GIVEREF(__pyx_int_1);
-      PyTuple_SET_ITEM(__pyx_t_8, 2+__pyx_t_10, __pyx_int_1);
-      __pyx_t_9 = 0;
-      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_8, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1801, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_1);
-      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-      if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_self->attrs), __pyx_t_1, __pyx_t_2) < 0)) __PYX_ERR(0, 1801, __pyx_L1_error)
+      if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_self->attrs), __pyx_t_1, __pyx_t_2) < 0)) __PYX_ERR(0, 1809, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-      /* "adios_mpi.pyx":1800
+      /* "adios_mpi.pyx":1808
  *             if name.startswith(self.name + '/'):
  *                 self.attrs[name.replace(self.name + '/', '', 1)] = self.file.attrs[name]
  *             if name.startswith('/' + self.name + '/'):             # <<<<<<<<<<<<<<
@@ -28304,7 +29277,7 @@ static int __pyx_pf_9adios_mpi_5group___init__(struct __pyx_obj_9adios_mpi_group
  */
     }
 
-    /* "adios_mpi.pyx":1797
+    /* "adios_mpi.pyx":1805
  * 
  *         self.attrs = softdict()
  *         for name in self.file.attrs.keys():             # <<<<<<<<<<<<<<
@@ -28314,7 +29287,7 @@ static int __pyx_pf_9adios_mpi_5group___init__(struct __pyx_obj_9adios_mpi_group
   }
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "adios_mpi.pyx":1785
+  /* "adios_mpi.pyx":1793
  *     cpdef public softdict attrs
  * 
  *     def __init__(self, file file, str name):             # <<<<<<<<<<<<<<
@@ -28341,7 +29314,7 @@ static int __pyx_pf_9adios_mpi_5group___init__(struct __pyx_obj_9adios_mpi_group
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1803
+/* "adios_mpi.pyx":1811
  *                 self.attrs[name.replace('/' + self.name + '/', '', 1)] = self.file.attrs[name]
  * 
  *     def __getitem__(self, varname):             # <<<<<<<<<<<<<<
@@ -28387,7 +29360,7 @@ static PyObject *__pyx_pf_9adios_mpi_5group_2__getitem__(struct __pyx_obj_9adios
   __Pyx_RefNannySetupContext("__getitem__", 0);
   __Pyx_INCREF(__pyx_v_varname);
 
-  /* "adios_mpi.pyx":1814
+  /* "adios_mpi.pyx":1822
  * 
  *         """
  *         if not isinstance(varname, tuple):             # <<<<<<<<<<<<<<
@@ -28398,14 +29371,14 @@ static PyObject *__pyx_pf_9adios_mpi_5group_2__getitem__(struct __pyx_obj_9adios
   __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0);
   if (__pyx_t_2) {
 
-    /* "adios_mpi.pyx":1815
+    /* "adios_mpi.pyx":1823
  *         """
  *         if not isinstance(varname, tuple):
  *             varname = (varname,)             # <<<<<<<<<<<<<<
  * 
  *         if len(varname) > 1:
  */
-    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1815, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1823, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_varname);
     __Pyx_GIVEREF(__pyx_v_varname);
@@ -28413,7 +29386,7 @@ static PyObject *__pyx_pf_9adios_mpi_5group_2__getitem__(struct __pyx_obj_9adios
     __Pyx_DECREF_SET(__pyx_v_varname, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "adios_mpi.pyx":1814
+    /* "adios_mpi.pyx":1822
  * 
  *         """
  *         if not isinstance(varname, tuple):             # <<<<<<<<<<<<<<
@@ -28422,37 +29395,37 @@ static PyObject *__pyx_pf_9adios_mpi_5group_2__getitem__(struct __pyx_obj_9adios
  */
   }
 
-  /* "adios_mpi.pyx":1817
+  /* "adios_mpi.pyx":1825
  *             varname = (varname,)
  * 
  *         if len(varname) > 1:             # <<<<<<<<<<<<<<
  *             raise KeyError(varname)
  * 
  */
-  __pyx_t_4 = PyObject_Length(__pyx_v_varname); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 1817, __pyx_L1_error)
+  __pyx_t_4 = PyObject_Length(__pyx_v_varname); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 1825, __pyx_L1_error)
   __pyx_t_2 = ((__pyx_t_4 > 1) != 0);
   if (__pyx_t_2) {
 
-    /* "adios_mpi.pyx":1818
+    /* "adios_mpi.pyx":1826
  * 
  *         if len(varname) > 1:
  *             raise KeyError(varname)             # <<<<<<<<<<<<<<
  * 
  *         for key_ in varname:
  */
-    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1818, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1826, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_varname);
     __Pyx_GIVEREF(__pyx_v_varname);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_varname);
-    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_KeyError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1818, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_KeyError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1826, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_Raise(__pyx_t_5, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    __PYX_ERR(0, 1818, __pyx_L1_error)
+    __PYX_ERR(0, 1826, __pyx_L1_error)
 
-    /* "adios_mpi.pyx":1817
+    /* "adios_mpi.pyx":1825
  *             varname = (varname,)
  * 
  *         if len(varname) > 1:             # <<<<<<<<<<<<<<
@@ -28461,7 +29434,7 @@ static PyObject *__pyx_pf_9adios_mpi_5group_2__getitem__(struct __pyx_obj_9adios
  */
   }
 
-  /* "adios_mpi.pyx":1820
+  /* "adios_mpi.pyx":1828
  *             raise KeyError(varname)
  * 
  *         for key_ in varname:             # <<<<<<<<<<<<<<
@@ -28472,26 +29445,26 @@ static PyObject *__pyx_pf_9adios_mpi_5group_2__getitem__(struct __pyx_obj_9adios
     __pyx_t_5 = __pyx_v_varname; __Pyx_INCREF(__pyx_t_5); __pyx_t_4 = 0;
     __pyx_t_6 = NULL;
   } else {
-    __pyx_t_4 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_v_varname); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1820, __pyx_L1_error)
+    __pyx_t_4 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_v_varname); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1828, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1820, __pyx_L1_error)
+    __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1828, __pyx_L1_error)
   }
   for (;;) {
     if (likely(!__pyx_t_6)) {
       if (likely(PyList_CheckExact(__pyx_t_5))) {
         if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_5)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_3 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1820, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_3 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1828, __pyx_L1_error)
         #else
-        __pyx_t_3 = PySequence_ITEM(__pyx_t_5, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1820, __pyx_L1_error)
+        __pyx_t_3 = PySequence_ITEM(__pyx_t_5, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1828, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
         #endif
       } else {
         if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_5)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1820, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1828, __pyx_L1_error)
         #else
-        __pyx_t_3 = PySequence_ITEM(__pyx_t_5, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1820, __pyx_L1_error)
+        __pyx_t_3 = PySequence_ITEM(__pyx_t_5, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1828, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
         #endif
       }
@@ -28501,7 +29474,7 @@ static PyObject *__pyx_pf_9adios_mpi_5group_2__getitem__(struct __pyx_obj_9adios
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
           if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-          else __PYX_ERR(0, 1820, __pyx_L1_error)
+          else __PYX_ERR(0, 1828, __pyx_L1_error)
         }
         break;
       }
@@ -28510,7 +29483,7 @@ static PyObject *__pyx_pf_9adios_mpi_5group_2__getitem__(struct __pyx_obj_9adios
     __Pyx_XDECREF_SET(__pyx_v_key_, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "adios_mpi.pyx":1821
+    /* "adios_mpi.pyx":1829
  * 
  *         for key_ in varname:
  *             if not isinstance(key_, str):             # <<<<<<<<<<<<<<
@@ -28521,20 +29494,20 @@ static PyObject *__pyx_pf_9adios_mpi_5group_2__getitem__(struct __pyx_obj_9adios
     __pyx_t_1 = ((!(__pyx_t_2 != 0)) != 0);
     if (__pyx_t_1) {
 
-      /* "adios_mpi.pyx":1822
+      /* "adios_mpi.pyx":1830
  *         for key_ in varname:
  *             if not isinstance(key_, str):
  *                 raise TypeError("Unhashable type")             # <<<<<<<<<<<<<<
  * 
  *             if key_.startswith('/'):
  */
-      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__45, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1822, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__45, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1830, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_Raise(__pyx_t_3, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      __PYX_ERR(0, 1822, __pyx_L1_error)
+      __PYX_ERR(0, 1830, __pyx_L1_error)
 
-      /* "adios_mpi.pyx":1821
+      /* "adios_mpi.pyx":1829
  * 
  *         for key_ in varname:
  *             if not isinstance(key_, str):             # <<<<<<<<<<<<<<
@@ -28543,35 +29516,35 @@ static PyObject *__pyx_pf_9adios_mpi_5group_2__getitem__(struct __pyx_obj_9adios
  */
     }
 
-    /* "adios_mpi.pyx":1824
+    /* "adios_mpi.pyx":1832
  *                 raise TypeError("Unhashable type")
  * 
  *             if key_.startswith('/'):             # <<<<<<<<<<<<<<
  *                 key_ = key_[1:]
  * 
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_key_, __pyx_n_s_startswith); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1824, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_key_, __pyx_n_s_startswith); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1832, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__46, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1824, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__46, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1832, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1824, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1832, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     if (__pyx_t_1) {
 
-      /* "adios_mpi.pyx":1825
+      /* "adios_mpi.pyx":1833
  * 
  *             if key_.startswith('/'):
  *                 key_ = key_[1:]             # <<<<<<<<<<<<<<
  * 
  *             if key_ in self.vars.keys():
  */
-      __pyx_t_7 = __Pyx_PyObject_GetSlice(__pyx_v_key_, 1, 0, NULL, NULL, &__pyx_slice__47, 1, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1825, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetSlice(__pyx_v_key_, 1, 0, NULL, NULL, &__pyx_slice__47, 1, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1833, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF_SET(__pyx_v_key_, __pyx_t_7);
       __pyx_t_7 = 0;
 
-      /* "adios_mpi.pyx":1824
+      /* "adios_mpi.pyx":1832
  *                 raise TypeError("Unhashable type")
  * 
  *             if key_.startswith('/'):             # <<<<<<<<<<<<<<
@@ -28580,17 +29553,17 @@ static PyObject *__pyx_pf_9adios_mpi_5group_2__getitem__(struct __pyx_obj_9adios
  */
     }
 
-    /* "adios_mpi.pyx":1827
+    /* "adios_mpi.pyx":1835
  *                 key_ = key_[1:]
  * 
  *             if key_ in self.vars.keys():             # <<<<<<<<<<<<<<
  *                 return self.vars.get(key_)
  * 
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1827, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1835, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_8 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
       __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_3);
       if (likely(__pyx_t_8)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -28600,19 +29573,19 @@ static PyObject *__pyx_pf_9adios_mpi_5group_2__getitem__(struct __pyx_obj_9adios
       }
     }
     if (__pyx_t_8) {
-      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1827, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1835, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     } else {
-      __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1827, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1835, __pyx_L1_error)
     }
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_1 = (__Pyx_PySequence_ContainsTF(__pyx_v_key_, __pyx_t_7, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1827, __pyx_L1_error)
+    __pyx_t_1 = (__Pyx_PySequence_ContainsTF(__pyx_v_key_, __pyx_t_7, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1835, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
 
-      /* "adios_mpi.pyx":1828
+      /* "adios_mpi.pyx":1836
  * 
  *             if key_ in self.vars.keys():
  *                 return self.vars.get(key_)             # <<<<<<<<<<<<<<
@@ -28620,10 +29593,10 @@ static PyObject *__pyx_pf_9adios_mpi_5group_2__getitem__(struct __pyx_obj_9adios
  *             if key_ in self.attrs.keys():
  */
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1828, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1836, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __pyx_t_8 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
         __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_3);
         if (likely(__pyx_t_8)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -28633,18 +29606,36 @@ static PyObject *__pyx_pf_9adios_mpi_5group_2__getitem__(struct __pyx_obj_9adios
         }
       }
       if (!__pyx_t_8) {
-        __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_key_); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1828, __pyx_L1_error)
+        __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_key_); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1836, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
       } else {
-        __pyx_t_9 = PyTuple_New(1+1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1828, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_9);
-        __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_8); __pyx_t_8 = NULL;
-        __Pyx_INCREF(__pyx_v_key_);
-        __Pyx_GIVEREF(__pyx_v_key_);
-        PyTuple_SET_ITEM(__pyx_t_9, 0+1, __pyx_v_key_);
-        __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_9, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1828, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_7);
-        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+        #if CYTHON_FAST_PYCALL
+        if (PyFunction_Check(__pyx_t_3)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_v_key_};
+          __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1836, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+          __Pyx_GOTREF(__pyx_t_7);
+        } else
+        #endif
+        #if CYTHON_FAST_PYCCALL
+        if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_v_key_};
+          __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1836, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+          __Pyx_GOTREF(__pyx_t_7);
+        } else
+        #endif
+        {
+          __pyx_t_9 = PyTuple_New(1+1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1836, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_9);
+          __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_8); __pyx_t_8 = NULL;
+          __Pyx_INCREF(__pyx_v_key_);
+          __Pyx_GIVEREF(__pyx_v_key_);
+          PyTuple_SET_ITEM(__pyx_t_9, 0+1, __pyx_v_key_);
+          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_9, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1836, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_7);
+          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+        }
       }
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_r = __pyx_t_7;
@@ -28652,7 +29643,7 @@ static PyObject *__pyx_pf_9adios_mpi_5group_2__getitem__(struct __pyx_obj_9adios
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       goto __pyx_L0;
 
-      /* "adios_mpi.pyx":1827
+      /* "adios_mpi.pyx":1835
  *                 key_ = key_[1:]
  * 
  *             if key_ in self.vars.keys():             # <<<<<<<<<<<<<<
@@ -28661,17 +29652,17 @@ static PyObject *__pyx_pf_9adios_mpi_5group_2__getitem__(struct __pyx_obj_9adios
  */
     }
 
-    /* "adios_mpi.pyx":1830
+    /* "adios_mpi.pyx":1838
  *                 return self.vars.get(key_)
  * 
  *             if key_ in self.attrs.keys():             # <<<<<<<<<<<<<<
  *                 return self.attrs.get(key_)
  * 
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1830, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1838, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_9 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
       __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_3);
       if (likely(__pyx_t_9)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -28681,19 +29672,19 @@ static PyObject *__pyx_pf_9adios_mpi_5group_2__getitem__(struct __pyx_obj_9adios
       }
     }
     if (__pyx_t_9) {
-      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1830, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1838, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     } else {
-      __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1830, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1838, __pyx_L1_error)
     }
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_v_key_, __pyx_t_7, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1830, __pyx_L1_error)
+    __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_v_key_, __pyx_t_7, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1838, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __pyx_t_1 = (__pyx_t_2 != 0);
     if (__pyx_t_1) {
 
-      /* "adios_mpi.pyx":1831
+      /* "adios_mpi.pyx":1839
  * 
  *             if key_ in self.attrs.keys():
  *                 return self.attrs.get(key_)             # <<<<<<<<<<<<<<
@@ -28701,10 +29692,10 @@ static PyObject *__pyx_pf_9adios_mpi_5group_2__getitem__(struct __pyx_obj_9adios
  *             if '/'+key_ in self.vars.keys():
  */
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1831, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1839, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __pyx_t_9 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
         __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_3);
         if (likely(__pyx_t_9)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -28714,18 +29705,36 @@ static PyObject *__pyx_pf_9adios_mpi_5group_2__getitem__(struct __pyx_obj_9adios
         }
       }
       if (!__pyx_t_9) {
-        __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_key_); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1831, __pyx_L1_error)
+        __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_key_); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1839, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
       } else {
-        __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1831, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_8);
-        __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_9); __pyx_t_9 = NULL;
-        __Pyx_INCREF(__pyx_v_key_);
-        __Pyx_GIVEREF(__pyx_v_key_);
-        PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_v_key_);
-        __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_8, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1831, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_7);
-        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        #if CYTHON_FAST_PYCALL
+        if (PyFunction_Check(__pyx_t_3)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_9, __pyx_v_key_};
+          __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1839, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+          __Pyx_GOTREF(__pyx_t_7);
+        } else
+        #endif
+        #if CYTHON_FAST_PYCCALL
+        if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_9, __pyx_v_key_};
+          __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1839, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+          __Pyx_GOTREF(__pyx_t_7);
+        } else
+        #endif
+        {
+          __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1839, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_8);
+          __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_9); __pyx_t_9 = NULL;
+          __Pyx_INCREF(__pyx_v_key_);
+          __Pyx_GIVEREF(__pyx_v_key_);
+          PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_v_key_);
+          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_8, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1839, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_7);
+          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        }
       }
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_r = __pyx_t_7;
@@ -28733,7 +29742,7 @@ static PyObject *__pyx_pf_9adios_mpi_5group_2__getitem__(struct __pyx_obj_9adios
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       goto __pyx_L0;
 
-      /* "adios_mpi.pyx":1830
+      /* "adios_mpi.pyx":1838
  *                 return self.vars.get(key_)
  * 
  *             if key_ in self.attrs.keys():             # <<<<<<<<<<<<<<
@@ -28742,19 +29751,19 @@ static PyObject *__pyx_pf_9adios_mpi_5group_2__getitem__(struct __pyx_obj_9adios
  */
     }
 
-    /* "adios_mpi.pyx":1833
+    /* "adios_mpi.pyx":1841
  *                 return self.attrs.get(key_)
  * 
  *             if '/'+key_ in self.vars.keys():             # <<<<<<<<<<<<<<
  *                 return self.vars.get('/'+key_)
  * 
  */
-    __pyx_t_7 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1833, __pyx_L1_error)
+    __pyx_t_7 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1841, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
-    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1833, __pyx_L1_error)
+    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1841, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __pyx_t_9 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_8))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) {
       __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_8);
       if (likely(__pyx_t_9)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
@@ -28764,20 +29773,20 @@ static PyObject *__pyx_pf_9adios_mpi_5group_2__getitem__(struct __pyx_obj_9adios
       }
     }
     if (__pyx_t_9) {
-      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1833, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1841, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     } else {
-      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1833, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1841, __pyx_L1_error)
     }
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-    __pyx_t_1 = (__Pyx_PySequence_ContainsTF(__pyx_t_7, __pyx_t_3, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1833, __pyx_L1_error)
+    __pyx_t_1 = (__Pyx_PySequence_ContainsTF(__pyx_t_7, __pyx_t_3, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1841, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
 
-      /* "adios_mpi.pyx":1834
+      /* "adios_mpi.pyx":1842
  * 
  *             if '/'+key_ in self.vars.keys():
  *                 return self.vars.get('/'+key_)             # <<<<<<<<<<<<<<
@@ -28785,12 +29794,12 @@ static PyObject *__pyx_pf_9adios_mpi_5group_2__getitem__(struct __pyx_obj_9adios
  *             if '/'+key_ in self.attrs.keys():
  */
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_get); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1834, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_get); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1842, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      __pyx_t_8 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1834, __pyx_L1_error)
+      __pyx_t_8 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1842, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
       __pyx_t_9 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_7))) {
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
         __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_7);
         if (likely(__pyx_t_9)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
@@ -28800,19 +29809,39 @@ static PyObject *__pyx_pf_9adios_mpi_5group_2__getitem__(struct __pyx_obj_9adios
         }
       }
       if (!__pyx_t_9) {
-        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1834, __pyx_L1_error)
+        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1842, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
         __Pyx_GOTREF(__pyx_t_3);
       } else {
-        __pyx_t_10 = PyTuple_New(1+1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1834, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_10);
-        __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_9); __pyx_t_9 = NULL;
-        __Pyx_GIVEREF(__pyx_t_8);
-        PyTuple_SET_ITEM(__pyx_t_10, 0+1, __pyx_t_8);
-        __pyx_t_8 = 0;
-        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1834, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_3);
-        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+        #if CYTHON_FAST_PYCALL
+        if (PyFunction_Check(__pyx_t_7)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_9, __pyx_t_8};
+          __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1842, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        } else
+        #endif
+        #if CYTHON_FAST_PYCCALL
+        if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_9, __pyx_t_8};
+          __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1842, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        } else
+        #endif
+        {
+          __pyx_t_10 = PyTuple_New(1+1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1842, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_10);
+          __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_9); __pyx_t_9 = NULL;
+          __Pyx_GIVEREF(__pyx_t_8);
+          PyTuple_SET_ITEM(__pyx_t_10, 0+1, __pyx_t_8);
+          __pyx_t_8 = 0;
+          __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1842, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+        }
       }
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       __pyx_r = __pyx_t_3;
@@ -28820,7 +29849,7 @@ static PyObject *__pyx_pf_9adios_mpi_5group_2__getitem__(struct __pyx_obj_9adios
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       goto __pyx_L0;
 
-      /* "adios_mpi.pyx":1833
+      /* "adios_mpi.pyx":1841
  *                 return self.attrs.get(key_)
  * 
  *             if '/'+key_ in self.vars.keys():             # <<<<<<<<<<<<<<
@@ -28829,19 +29858,19 @@ static PyObject *__pyx_pf_9adios_mpi_5group_2__getitem__(struct __pyx_obj_9adios
  */
     }
 
-    /* "adios_mpi.pyx":1836
+    /* "adios_mpi.pyx":1844
  *                 return self.vars.get('/'+key_)
  * 
  *             if '/'+key_ in self.attrs.keys():             # <<<<<<<<<<<<<<
  *                 return self.attrs.get('/'+key_)
  * 
  */
-    __pyx_t_3 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1836, __pyx_L1_error)
+    __pyx_t_3 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1844, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1836, __pyx_L1_error)
+    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1844, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_10);
     __pyx_t_8 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_10))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_10))) {
       __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_10);
       if (likely(__pyx_t_8)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
@@ -28851,20 +29880,20 @@ static PyObject *__pyx_pf_9adios_mpi_5group_2__getitem__(struct __pyx_obj_9adios
       }
     }
     if (__pyx_t_8) {
-      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1836, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1844, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     } else {
-      __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_10); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1836, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_10); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1844, __pyx_L1_error)
     }
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
-    __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_3, __pyx_t_7, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1836, __pyx_L1_error)
+    __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_3, __pyx_t_7, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1844, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __pyx_t_1 = (__pyx_t_2 != 0);
     if (__pyx_t_1) {
 
-      /* "adios_mpi.pyx":1837
+      /* "adios_mpi.pyx":1845
  * 
  *             if '/'+key_ in self.attrs.keys():
  *                 return self.attrs.get('/'+key_)             # <<<<<<<<<<<<<<
@@ -28872,12 +29901,12 @@ static PyObject *__pyx_pf_9adios_mpi_5group_2__getitem__(struct __pyx_obj_9adios
  *             for name in self.vars.keys():
  */
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1837, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1845, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_10 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1837, __pyx_L1_error)
+      __pyx_t_10 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1845, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_10);
       __pyx_t_8 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
         __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_3);
         if (likely(__pyx_t_8)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -28887,19 +29916,39 @@ static PyObject *__pyx_pf_9adios_mpi_5group_2__getitem__(struct __pyx_obj_9adios
         }
       }
       if (!__pyx_t_8) {
-        __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_10); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1837, __pyx_L1_error)
+        __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_10); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1845, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
         __Pyx_GOTREF(__pyx_t_7);
       } else {
-        __pyx_t_9 = PyTuple_New(1+1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1837, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_9);
-        __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_8); __pyx_t_8 = NULL;
-        __Pyx_GIVEREF(__pyx_t_10);
-        PyTuple_SET_ITEM(__pyx_t_9, 0+1, __pyx_t_10);
-        __pyx_t_10 = 0;
-        __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_9, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1837, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_7);
-        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+        #if CYTHON_FAST_PYCALL
+        if (PyFunction_Check(__pyx_t_3)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_t_10};
+          __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1845, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+          __Pyx_GOTREF(__pyx_t_7);
+          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+        } else
+        #endif
+        #if CYTHON_FAST_PYCCALL
+        if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_t_10};
+          __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1845, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+          __Pyx_GOTREF(__pyx_t_7);
+          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+        } else
+        #endif
+        {
+          __pyx_t_9 = PyTuple_New(1+1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1845, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_9);
+          __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_8); __pyx_t_8 = NULL;
+          __Pyx_GIVEREF(__pyx_t_10);
+          PyTuple_SET_ITEM(__pyx_t_9, 0+1, __pyx_t_10);
+          __pyx_t_10 = 0;
+          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_9, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1845, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_7);
+          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+        }
       }
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_r = __pyx_t_7;
@@ -28907,7 +29956,7 @@ static PyObject *__pyx_pf_9adios_mpi_5group_2__getitem__(struct __pyx_obj_9adios
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       goto __pyx_L0;
 
-      /* "adios_mpi.pyx":1836
+      /* "adios_mpi.pyx":1844
  *                 return self.vars.get('/'+key_)
  * 
  *             if '/'+key_ in self.attrs.keys():             # <<<<<<<<<<<<<<
@@ -28916,17 +29965,17 @@ static PyObject *__pyx_pf_9adios_mpi_5group_2__getitem__(struct __pyx_obj_9adios
  */
     }
 
-    /* "adios_mpi.pyx":1839
+    /* "adios_mpi.pyx":1847
  *                 return self.attrs.get('/'+key_)
  * 
  *             for name in self.vars.keys():             # <<<<<<<<<<<<<<
  *                 #if (key_ == os.path.dirname(name)) or ('/' + key_ == os.path.dirname(name)):
  *                 if name.startswith(key_) or name.startswith('/'+key_):
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1839, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1847, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_9 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
       __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_3);
       if (likely(__pyx_t_9)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -28936,10 +29985,10 @@ static PyObject *__pyx_pf_9adios_mpi_5group_2__getitem__(struct __pyx_obj_9adios
       }
     }
     if (__pyx_t_9) {
-      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1839, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1847, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     } else {
-      __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1839, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1847, __pyx_L1_error)
     }
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -28947,27 +29996,27 @@ static PyObject *__pyx_pf_9adios_mpi_5group_2__getitem__(struct __pyx_obj_9adios
       __pyx_t_3 = __pyx_t_7; __Pyx_INCREF(__pyx_t_3); __pyx_t_11 = 0;
       __pyx_t_12 = NULL;
     } else {
-      __pyx_t_11 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1839, __pyx_L1_error)
+      __pyx_t_11 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1847, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_12 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1839, __pyx_L1_error)
+      __pyx_t_12 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1847, __pyx_L1_error)
     }
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     for (;;) {
       if (likely(!__pyx_t_12)) {
         if (likely(PyList_CheckExact(__pyx_t_3))) {
           if (__pyx_t_11 >= PyList_GET_SIZE(__pyx_t_3)) break;
-          #if CYTHON_COMPILING_IN_CPYTHON
-          __pyx_t_7 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_11); __Pyx_INCREF(__pyx_t_7); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 1839, __pyx_L1_error)
+          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+          __pyx_t_7 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_11); __Pyx_INCREF(__pyx_t_7); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 1847, __pyx_L1_error)
           #else
-          __pyx_t_7 = PySequence_ITEM(__pyx_t_3, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1839, __pyx_L1_error)
+          __pyx_t_7 = PySequence_ITEM(__pyx_t_3, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1847, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_7);
           #endif
         } else {
           if (__pyx_t_11 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
-          #if CYTHON_COMPILING_IN_CPYTHON
-          __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_11); __Pyx_INCREF(__pyx_t_7); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 1839, __pyx_L1_error)
+          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+          __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_11); __Pyx_INCREF(__pyx_t_7); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 1847, __pyx_L1_error)
           #else
-          __pyx_t_7 = PySequence_ITEM(__pyx_t_3, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1839, __pyx_L1_error)
+          __pyx_t_7 = PySequence_ITEM(__pyx_t_3, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1847, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_7);
           #endif
         }
@@ -28977,7 +30026,7 @@ static PyObject *__pyx_pf_9adios_mpi_5group_2__getitem__(struct __pyx_obj_9adios
           PyObject* exc_type = PyErr_Occurred();
           if (exc_type) {
             if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-            else __PYX_ERR(0, 1839, __pyx_L1_error)
+            else __PYX_ERR(0, 1847, __pyx_L1_error)
           }
           break;
         }
@@ -28986,17 +30035,17 @@ static PyObject *__pyx_pf_9adios_mpi_5group_2__getitem__(struct __pyx_obj_9adios
       __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_7);
       __pyx_t_7 = 0;
 
-      /* "adios_mpi.pyx":1841
+      /* "adios_mpi.pyx":1849
  *             for name in self.vars.keys():
  *                 #if (key_ == os.path.dirname(name)) or ('/' + key_ == os.path.dirname(name)):
  *                 if name.startswith(key_) or name.startswith('/'+key_):             # <<<<<<<<<<<<<<
  *                     return group(self.file, self.name + '/' + key_)
  * 
  */
-      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_startswith); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1841, __pyx_L1_error)
+      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_startswith); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1849, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
       __pyx_t_10 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_9))) {
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
         __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_9);
         if (likely(__pyx_t_10)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
@@ -29006,33 +30055,51 @@ static PyObject *__pyx_pf_9adios_mpi_5group_2__getitem__(struct __pyx_obj_9adios
         }
       }
       if (!__pyx_t_10) {
-        __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_v_key_); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1841, __pyx_L1_error)
+        __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_v_key_); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1849, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
       } else {
-        __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1841, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_8);
-        __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_10); __pyx_t_10 = NULL;
-        __Pyx_INCREF(__pyx_v_key_);
-        __Pyx_GIVEREF(__pyx_v_key_);
-        PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_v_key_);
-        __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_8, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1841, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_7);
-        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        #if CYTHON_FAST_PYCALL
+        if (PyFunction_Check(__pyx_t_9)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_10, __pyx_v_key_};
+          __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_9, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1849, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
+          __Pyx_GOTREF(__pyx_t_7);
+        } else
+        #endif
+        #if CYTHON_FAST_PYCCALL
+        if (__Pyx_PyFastCFunction_Check(__pyx_t_9)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_10, __pyx_v_key_};
+          __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_9, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1849, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
+          __Pyx_GOTREF(__pyx_t_7);
+        } else
+        #endif
+        {
+          __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1849, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_8);
+          __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_10); __pyx_t_10 = NULL;
+          __Pyx_INCREF(__pyx_v_key_);
+          __Pyx_GIVEREF(__pyx_v_key_);
+          PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_v_key_);
+          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_8, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1849, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_7);
+          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        }
       }
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1841, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1849, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       if (!__pyx_t_2) {
       } else {
         __pyx_t_1 = __pyx_t_2;
         goto __pyx_L16_bool_binop_done;
       }
-      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_startswith); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1841, __pyx_L1_error)
+      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_startswith); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1849, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
-      __pyx_t_8 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1841, __pyx_L1_error)
+      __pyx_t_8 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1849, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
       __pyx_t_10 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_9))) {
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
         __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_9);
         if (likely(__pyx_t_10)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
@@ -29042,28 +30109,48 @@ static PyObject *__pyx_pf_9adios_mpi_5group_2__getitem__(struct __pyx_obj_9adios
         }
       }
       if (!__pyx_t_10) {
-        __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1841, __pyx_L1_error)
+        __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1849, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
         __Pyx_GOTREF(__pyx_t_7);
       } else {
-        __pyx_t_13 = PyTuple_New(1+1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1841, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_13);
-        __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_10); __pyx_t_10 = NULL;
-        __Pyx_GIVEREF(__pyx_t_8);
-        PyTuple_SET_ITEM(__pyx_t_13, 0+1, __pyx_t_8);
-        __pyx_t_8 = 0;
-        __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_13, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1841, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_7);
-        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+        #if CYTHON_FAST_PYCALL
+        if (PyFunction_Check(__pyx_t_9)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_10, __pyx_t_8};
+          __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_9, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1849, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
+          __Pyx_GOTREF(__pyx_t_7);
+          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        } else
+        #endif
+        #if CYTHON_FAST_PYCCALL
+        if (__Pyx_PyFastCFunction_Check(__pyx_t_9)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_10, __pyx_t_8};
+          __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_9, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1849, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
+          __Pyx_GOTREF(__pyx_t_7);
+          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        } else
+        #endif
+        {
+          __pyx_t_13 = PyTuple_New(1+1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1849, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_13);
+          __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_10); __pyx_t_10 = NULL;
+          __Pyx_GIVEREF(__pyx_t_8);
+          PyTuple_SET_ITEM(__pyx_t_13, 0+1, __pyx_t_8);
+          __pyx_t_8 = 0;
+          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_13, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1849, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_7);
+          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+        }
       }
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1841, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1849, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       __pyx_t_1 = __pyx_t_2;
       __pyx_L16_bool_binop_done:;
       if (__pyx_t_1) {
 
-        /* "adios_mpi.pyx":1842
+        /* "adios_mpi.pyx":1850
  *                 #if (key_ == os.path.dirname(name)) or ('/' + key_ == os.path.dirname(name)):
  *                 if name.startswith(key_) or name.startswith('/'+key_):
  *                     return group(self.file, self.name + '/' + key_)             # <<<<<<<<<<<<<<
@@ -29071,12 +30158,12 @@ static PyObject *__pyx_pf_9adios_mpi_5group_2__getitem__(struct __pyx_obj_9adios
  *             for name in self.attrs.keys():
  */
         __Pyx_XDECREF(__pyx_r);
-        __pyx_t_7 = PyNumber_Add(__pyx_v_self->name, __pyx_kp_s_); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1842, __pyx_L1_error)
+        __pyx_t_7 = PyNumber_Add(__pyx_v_self->name, __pyx_kp_s_); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1850, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
-        __pyx_t_9 = PyNumber_Add(__pyx_t_7, __pyx_v_key_); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1842, __pyx_L1_error)
+        __pyx_t_9 = PyNumber_Add(__pyx_t_7, __pyx_v_key_); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1850, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_9);
         __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-        __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1842, __pyx_L1_error)
+        __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1850, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
         __Pyx_INCREF(((PyObject *)__pyx_v_self->file));
         __Pyx_GIVEREF(((PyObject *)__pyx_v_self->file));
@@ -29084,7 +30171,7 @@ static PyObject *__pyx_pf_9adios_mpi_5group_2__getitem__(struct __pyx_obj_9adios
         __Pyx_GIVEREF(__pyx_t_9);
         PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_9);
         __pyx_t_9 = 0;
-        __pyx_t_9 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_9adios_mpi_group), __pyx_t_7, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1842, __pyx_L1_error)
+        __pyx_t_9 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_9adios_mpi_group), __pyx_t_7, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1850, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_9);
         __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
         __pyx_r = __pyx_t_9;
@@ -29093,7 +30180,7 @@ static PyObject *__pyx_pf_9adios_mpi_5group_2__getitem__(struct __pyx_obj_9adios
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
         goto __pyx_L0;
 
-        /* "adios_mpi.pyx":1841
+        /* "adios_mpi.pyx":1849
  *             for name in self.vars.keys():
  *                 #if (key_ == os.path.dirname(name)) or ('/' + key_ == os.path.dirname(name)):
  *                 if name.startswith(key_) or name.startswith('/'+key_):             # <<<<<<<<<<<<<<
@@ -29102,7 +30189,7 @@ static PyObject *__pyx_pf_9adios_mpi_5group_2__getitem__(struct __pyx_obj_9adios
  */
       }
 
-      /* "adios_mpi.pyx":1839
+      /* "adios_mpi.pyx":1847
  *                 return self.attrs.get('/'+key_)
  * 
  *             for name in self.vars.keys():             # <<<<<<<<<<<<<<
@@ -29112,17 +30199,17 @@ static PyObject *__pyx_pf_9adios_mpi_5group_2__getitem__(struct __pyx_obj_9adios
     }
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "adios_mpi.pyx":1844
+    /* "adios_mpi.pyx":1852
  *                     return group(self.file, self.name + '/' + key_)
  * 
  *             for name in self.attrs.keys():             # <<<<<<<<<<<<<<
  *                 #if (key_ == os.path.dirname(name)) or ('/' + key_ == os.path.dirname(name)):
  *                 if name.startswith(key_) or name.startswith('/'+key_):
  */
-    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1844, __pyx_L1_error)
+    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1852, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
     __pyx_t_7 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_9))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
       __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_9);
       if (likely(__pyx_t_7)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
@@ -29132,10 +30219,10 @@ static PyObject *__pyx_pf_9adios_mpi_5group_2__getitem__(struct __pyx_obj_9adios
       }
     }
     if (__pyx_t_7) {
-      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1844, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1852, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     } else {
-      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1844, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1852, __pyx_L1_error)
     }
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
@@ -29143,27 +30230,27 @@ static PyObject *__pyx_pf_9adios_mpi_5group_2__getitem__(struct __pyx_obj_9adios
       __pyx_t_9 = __pyx_t_3; __Pyx_INCREF(__pyx_t_9); __pyx_t_11 = 0;
       __pyx_t_12 = NULL;
     } else {
-      __pyx_t_11 = -1; __pyx_t_9 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1844, __pyx_L1_error)
+      __pyx_t_11 = -1; __pyx_t_9 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1852, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
-      __pyx_t_12 = Py_TYPE(__pyx_t_9)->tp_iternext; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1844, __pyx_L1_error)
+      __pyx_t_12 = Py_TYPE(__pyx_t_9)->tp_iternext; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1852, __pyx_L1_error)
     }
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     for (;;) {
       if (likely(!__pyx_t_12)) {
         if (likely(PyList_CheckExact(__pyx_t_9))) {
           if (__pyx_t_11 >= PyList_GET_SIZE(__pyx_t_9)) break;
-          #if CYTHON_COMPILING_IN_CPYTHON
-          __pyx_t_3 = PyList_GET_ITEM(__pyx_t_9, __pyx_t_11); __Pyx_INCREF(__pyx_t_3); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 1844, __pyx_L1_error)
+          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+          __pyx_t_3 = PyList_GET_ITEM(__pyx_t_9, __pyx_t_11); __Pyx_INCREF(__pyx_t_3); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 1852, __pyx_L1_error)
           #else
-          __pyx_t_3 = PySequence_ITEM(__pyx_t_9, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1844, __pyx_L1_error)
+          __pyx_t_3 = PySequence_ITEM(__pyx_t_9, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1852, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_3);
           #endif
         } else {
           if (__pyx_t_11 >= PyTuple_GET_SIZE(__pyx_t_9)) break;
-          #if CYTHON_COMPILING_IN_CPYTHON
-          __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_9, __pyx_t_11); __Pyx_INCREF(__pyx_t_3); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 1844, __pyx_L1_error)
+          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+          __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_9, __pyx_t_11); __Pyx_INCREF(__pyx_t_3); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 1852, __pyx_L1_error)
           #else
-          __pyx_t_3 = PySequence_ITEM(__pyx_t_9, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1844, __pyx_L1_error)
+          __pyx_t_3 = PySequence_ITEM(__pyx_t_9, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1852, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_3);
           #endif
         }
@@ -29173,7 +30260,7 @@ static PyObject *__pyx_pf_9adios_mpi_5group_2__getitem__(struct __pyx_obj_9adios
           PyObject* exc_type = PyErr_Occurred();
           if (exc_type) {
             if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-            else __PYX_ERR(0, 1844, __pyx_L1_error)
+            else __PYX_ERR(0, 1852, __pyx_L1_error)
           }
           break;
         }
@@ -29182,17 +30269,17 @@ static PyObject *__pyx_pf_9adios_mpi_5group_2__getitem__(struct __pyx_obj_9adios
       __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_3);
       __pyx_t_3 = 0;
 
-      /* "adios_mpi.pyx":1846
+      /* "adios_mpi.pyx":1854
  *             for name in self.attrs.keys():
  *                 #if (key_ == os.path.dirname(name)) or ('/' + key_ == os.path.dirname(name)):
  *                 if name.startswith(key_) or name.startswith('/'+key_):             # <<<<<<<<<<<<<<
  *                     return group(self.file, self.name + '/' + key_)
  * 
  */
-      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_startswith); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1846, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_startswith); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1854, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __pyx_t_13 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_7))) {
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
         __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_7);
         if (likely(__pyx_t_13)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
@@ -29202,33 +30289,51 @@ static PyObject *__pyx_pf_9adios_mpi_5group_2__getitem__(struct __pyx_obj_9adios
         }
       }
       if (!__pyx_t_13) {
-        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_v_key_); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1846, __pyx_L1_error)
+        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_v_key_); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1854, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
       } else {
-        __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1846, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_8);
-        __Pyx_GIVEREF(__pyx_t_13); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_13); __pyx_t_13 = NULL;
-        __Pyx_INCREF(__pyx_v_key_);
-        __Pyx_GIVEREF(__pyx_v_key_);
-        PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_v_key_);
-        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1846, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_3);
-        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        #if CYTHON_FAST_PYCALL
+        if (PyFunction_Check(__pyx_t_7)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_13, __pyx_v_key_};
+          __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1854, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
+          __Pyx_GOTREF(__pyx_t_3);
+        } else
+        #endif
+        #if CYTHON_FAST_PYCCALL
+        if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_13, __pyx_v_key_};
+          __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1854, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
+          __Pyx_GOTREF(__pyx_t_3);
+        } else
+        #endif
+        {
+          __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1854, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_8);
+          __Pyx_GIVEREF(__pyx_t_13); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_13); __pyx_t_13 = NULL;
+          __Pyx_INCREF(__pyx_v_key_);
+          __Pyx_GIVEREF(__pyx_v_key_);
+          PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_v_key_);
+          __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1854, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        }
       }
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1846, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1854, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       if (!__pyx_t_2) {
       } else {
         __pyx_t_1 = __pyx_t_2;
         goto __pyx_L21_bool_binop_done;
       }
-      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_startswith); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1846, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_startswith); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1854, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      __pyx_t_8 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1846, __pyx_L1_error)
+      __pyx_t_8 = PyNumber_Add(__pyx_kp_s_, __pyx_v_key_); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1854, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
       __pyx_t_13 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_7))) {
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
         __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_7);
         if (likely(__pyx_t_13)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
@@ -29238,28 +30343,48 @@ static PyObject *__pyx_pf_9adios_mpi_5group_2__getitem__(struct __pyx_obj_9adios
         }
       }
       if (!__pyx_t_13) {
-        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1846, __pyx_L1_error)
+        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1854, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
         __Pyx_GOTREF(__pyx_t_3);
       } else {
-        __pyx_t_10 = PyTuple_New(1+1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1846, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_10);
-        __Pyx_GIVEREF(__pyx_t_13); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_13); __pyx_t_13 = NULL;
-        __Pyx_GIVEREF(__pyx_t_8);
-        PyTuple_SET_ITEM(__pyx_t_10, 0+1, __pyx_t_8);
-        __pyx_t_8 = 0;
-        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1846, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_3);
-        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+        #if CYTHON_FAST_PYCALL
+        if (PyFunction_Check(__pyx_t_7)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_13, __pyx_t_8};
+          __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1854, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
+          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        } else
+        #endif
+        #if CYTHON_FAST_PYCCALL
+        if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_13, __pyx_t_8};
+          __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1854, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
+          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        } else
+        #endif
+        {
+          __pyx_t_10 = PyTuple_New(1+1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1854, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_10);
+          __Pyx_GIVEREF(__pyx_t_13); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_13); __pyx_t_13 = NULL;
+          __Pyx_GIVEREF(__pyx_t_8);
+          PyTuple_SET_ITEM(__pyx_t_10, 0+1, __pyx_t_8);
+          __pyx_t_8 = 0;
+          __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1854, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+        }
       }
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1846, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1854, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_t_1 = __pyx_t_2;
       __pyx_L21_bool_binop_done:;
       if (__pyx_t_1) {
 
-        /* "adios_mpi.pyx":1847
+        /* "adios_mpi.pyx":1855
  *                 #if (key_ == os.path.dirname(name)) or ('/' + key_ == os.path.dirname(name)):
  *                 if name.startswith(key_) or name.startswith('/'+key_):
  *                     return group(self.file, self.name + '/' + key_)             # <<<<<<<<<<<<<<
@@ -29267,12 +30392,12 @@ static PyObject *__pyx_pf_9adios_mpi_5group_2__getitem__(struct __pyx_obj_9adios
  *         raise KeyError(key_)
  */
         __Pyx_XDECREF(__pyx_r);
-        __pyx_t_3 = PyNumber_Add(__pyx_v_self->name, __pyx_kp_s_); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1847, __pyx_L1_error)
+        __pyx_t_3 = PyNumber_Add(__pyx_v_self->name, __pyx_kp_s_); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1855, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
-        __pyx_t_7 = PyNumber_Add(__pyx_t_3, __pyx_v_key_); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1847, __pyx_L1_error)
+        __pyx_t_7 = PyNumber_Add(__pyx_t_3, __pyx_v_key_); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1855, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-        __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1847, __pyx_L1_error)
+        __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1855, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
         __Pyx_INCREF(((PyObject *)__pyx_v_self->file));
         __Pyx_GIVEREF(((PyObject *)__pyx_v_self->file));
@@ -29280,7 +30405,7 @@ static PyObject *__pyx_pf_9adios_mpi_5group_2__getitem__(struct __pyx_obj_9adios
         __Pyx_GIVEREF(__pyx_t_7);
         PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_7);
         __pyx_t_7 = 0;
-        __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_9adios_mpi_group), __pyx_t_3, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1847, __pyx_L1_error)
+        __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_9adios_mpi_group), __pyx_t_3, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1855, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
         __pyx_r = __pyx_t_7;
@@ -29289,7 +30414,7 @@ static PyObject *__pyx_pf_9adios_mpi_5group_2__getitem__(struct __pyx_obj_9adios
         __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
         goto __pyx_L0;
 
-        /* "adios_mpi.pyx":1846
+        /* "adios_mpi.pyx":1854
  *             for name in self.attrs.keys():
  *                 #if (key_ == os.path.dirname(name)) or ('/' + key_ == os.path.dirname(name)):
  *                 if name.startswith(key_) or name.startswith('/'+key_):             # <<<<<<<<<<<<<<
@@ -29298,7 +30423,7 @@ static PyObject *__pyx_pf_9adios_mpi_5group_2__getitem__(struct __pyx_obj_9adios
  */
       }
 
-      /* "adios_mpi.pyx":1844
+      /* "adios_mpi.pyx":1852
  *                     return group(self.file, self.name + '/' + key_)
  * 
  *             for name in self.attrs.keys():             # <<<<<<<<<<<<<<
@@ -29308,7 +30433,7 @@ static PyObject *__pyx_pf_9adios_mpi_5group_2__getitem__(struct __pyx_obj_9adios
     }
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-    /* "adios_mpi.pyx":1820
+    /* "adios_mpi.pyx":1828
  *             raise KeyError(varname)
  * 
  *         for key_ in varname:             # <<<<<<<<<<<<<<
@@ -29318,27 +30443,27 @@ static PyObject *__pyx_pf_9adios_mpi_5group_2__getitem__(struct __pyx_obj_9adios
   }
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "adios_mpi.pyx":1849
+  /* "adios_mpi.pyx":1857
  *                     return group(self.file, self.name + '/' + key_)
  * 
  *         raise KeyError(key_)             # <<<<<<<<<<<<<<
  * 
  *     def __repr__(self):
  */
-  if (unlikely(!__pyx_v_key_)) { __Pyx_RaiseUnboundLocalError("key_"); __PYX_ERR(0, 1849, __pyx_L1_error) }
-  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1849, __pyx_L1_error)
+  if (unlikely(!__pyx_v_key_)) { __Pyx_RaiseUnboundLocalError("key_"); __PYX_ERR(0, 1857, __pyx_L1_error) }
+  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1857, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_INCREF(__pyx_v_key_);
   __Pyx_GIVEREF(__pyx_v_key_);
   PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_key_);
-  __pyx_t_9 = __Pyx_PyObject_Call(__pyx_builtin_KeyError, __pyx_t_5, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1849, __pyx_L1_error)
+  __pyx_t_9 = __Pyx_PyObject_Call(__pyx_builtin_KeyError, __pyx_t_5, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1857, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_Raise(__pyx_t_9, 0, 0, 0);
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-  __PYX_ERR(0, 1849, __pyx_L1_error)
+  __PYX_ERR(0, 1857, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":1803
+  /* "adios_mpi.pyx":1811
  *                 self.attrs[name.replace('/' + self.name + '/', '', 1)] = self.file.attrs[name]
  * 
  *     def __getitem__(self, varname):             # <<<<<<<<<<<<<<
@@ -29366,7 +30491,7 @@ static PyObject *__pyx_pf_9adios_mpi_5group_2__getitem__(struct __pyx_obj_9adios
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1851
+/* "adios_mpi.pyx":1859
  *         raise KeyError(key_)
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -29400,7 +30525,7 @@ static PyObject *__pyx_pf_9adios_mpi_5group_4__repr__(struct __pyx_obj_9adios_mp
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("__repr__", 0);
 
-  /* "adios_mpi.pyx":1853
+  /* "adios_mpi.pyx":1861
  *     def __repr__(self):
  *         """ Return string representation. """
  *         return ("AdiosGroup (vars=%r, attrs=%r)") % \             # <<<<<<<<<<<<<<
@@ -29409,17 +30534,17 @@ static PyObject *__pyx_pf_9adios_mpi_5group_4__repr__(struct __pyx_obj_9adios_mp
  */
   __Pyx_XDECREF(__pyx_r);
 
-  /* "adios_mpi.pyx":1854
+  /* "adios_mpi.pyx":1862
  *         """ Return string representation. """
  *         return ("AdiosGroup (vars=%r, attrs=%r)") % \
  *                 (self.vars.keys(),             # <<<<<<<<<<<<<<
  *                  self.attrs.keys())
  * 
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1854, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1862, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
     __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
     if (likely(__pyx_t_3)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
@@ -29429,25 +30554,25 @@ static PyObject *__pyx_pf_9adios_mpi_5group_4__repr__(struct __pyx_obj_9adios_mp
     }
   }
   if (__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1854, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1862, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   } else {
-    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1854, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1862, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "adios_mpi.pyx":1855
+  /* "adios_mpi.pyx":1863
  *         return ("AdiosGroup (vars=%r, attrs=%r)") % \
  *                 (self.vars.keys(),
  *                  self.attrs.keys())             # <<<<<<<<<<<<<<
  * 
  *     ## To support ipython tab completion
  */
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1855, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1863, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_4 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
     __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
     if (likely(__pyx_t_4)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -29457,22 +30582,22 @@ static PyObject *__pyx_pf_9adios_mpi_5group_4__repr__(struct __pyx_obj_9adios_mp
     }
   }
   if (__pyx_t_4) {
-    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1855, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1863, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   } else {
-    __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1855, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1863, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "adios_mpi.pyx":1854
+  /* "adios_mpi.pyx":1862
  *         """ Return string representation. """
  *         return ("AdiosGroup (vars=%r, attrs=%r)") % \
  *                 (self.vars.keys(),             # <<<<<<<<<<<<<<
  *                  self.attrs.keys())
  * 
  */
-  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1854, __pyx_L1_error)
+  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1862, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
@@ -29481,21 +30606,21 @@ static PyObject *__pyx_pf_9adios_mpi_5group_4__repr__(struct __pyx_obj_9adios_mp
   __pyx_t_1 = 0;
   __pyx_t_2 = 0;
 
-  /* "adios_mpi.pyx":1853
+  /* "adios_mpi.pyx":1861
  *     def __repr__(self):
  *         """ Return string representation. """
  *         return ("AdiosGroup (vars=%r, attrs=%r)") % \             # <<<<<<<<<<<<<<
  *                 (self.vars.keys(),
  *                  self.attrs.keys())
  */
-  __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_AdiosGroup_vars_r_attrs_r, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1853, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_AdiosGroup_vars_r_attrs_r, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1861, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":1851
+  /* "adios_mpi.pyx":1859
  *         raise KeyError(key_)
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -29517,7 +30642,7 @@ static PyObject *__pyx_pf_9adios_mpi_5group_4__repr__(struct __pyx_obj_9adios_mp
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1858
+/* "adios_mpi.pyx":1866
  * 
  *     ## To support ipython tab completion
  *     def __getattr__(self, varname):             # <<<<<<<<<<<<<<
@@ -29547,7 +30672,7 @@ static PyObject *__pyx_pf_9adios_mpi_5group_6__getattr__(struct __pyx_obj_9adios
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("__getattr__", 0);
 
-  /* "adios_mpi.pyx":1859
+  /* "adios_mpi.pyx":1867
  *     ## To support ipython tab completion
  *     def __getattr__(self, varname):
  *         return self.__getitem__(varname)             # <<<<<<<<<<<<<<
@@ -29555,10 +30680,10 @@ static PyObject *__pyx_pf_9adios_mpi_5group_6__getattr__(struct __pyx_obj_9adios
  *     def __dir__(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getitem); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1859, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getitem); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1867, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
     __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
     if (likely(__pyx_t_3)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
@@ -29568,25 +30693,43 @@ static PyObject *__pyx_pf_9adios_mpi_5group_6__getattr__(struct __pyx_obj_9adios
     }
   }
   if (!__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_varname); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1859, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_varname); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1867, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1859, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_4);
-    __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
-    __Pyx_INCREF(__pyx_v_varname);
-    __Pyx_GIVEREF(__pyx_v_varname);
-    PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_varname);
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1859, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_varname};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1867, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_varname};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1867, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1867, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+      __Pyx_INCREF(__pyx_v_varname);
+      __Pyx_GIVEREF(__pyx_v_varname);
+      PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_varname);
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1867, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    }
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":1858
+  /* "adios_mpi.pyx":1866
  * 
  *     ## To support ipython tab completion
  *     def __getattr__(self, varname):             # <<<<<<<<<<<<<<
@@ -29608,7 +30751,7 @@ static PyObject *__pyx_pf_9adios_mpi_5group_6__getattr__(struct __pyx_obj_9adios
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1861
+/* "adios_mpi.pyx":1869
  *         return self.__getitem__(varname)
  * 
  *     def __dir__(self):             # <<<<<<<<<<<<<<
@@ -29643,31 +30786,31 @@ static PyObject *__pyx_pf_9adios_mpi_5group_8__dir__(struct __pyx_obj_9adios_mpi
   PyObject *__pyx_t_5 = NULL;
   __Pyx_RefNannySetupContext("__dir__", 0);
 
-  /* "adios_mpi.pyx":1862
+  /* "adios_mpi.pyx":1870
  * 
  *     def __dir__(self):
  *         k0 = dir(type(self))             # <<<<<<<<<<<<<<
  *         k1 = normalize_key(self.vars.keys())
  *         k2 = normalize_key(self.attrs.keys())
  */
-  __pyx_t_1 = PyObject_Dir(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1862, __pyx_L1_error)
+  __pyx_t_1 = PyObject_Dir(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1870, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_k0 = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":1863
+  /* "adios_mpi.pyx":1871
  *     def __dir__(self):
  *         k0 = dir(type(self))
  *         k1 = normalize_key(self.vars.keys())             # <<<<<<<<<<<<<<
  *         k2 = normalize_key(self.attrs.keys())
  *         return k0 + k1 + k2
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_normalize_key); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1863, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_normalize_key); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1871, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1863, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1871, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_t_5 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
     __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
     if (likely(__pyx_t_5)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
@@ -29677,15 +30820,15 @@ static PyObject *__pyx_pf_9adios_mpi_5group_8__dir__(struct __pyx_obj_9adios_mpi
     }
   }
   if (__pyx_t_5) {
-    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1863, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1871, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   } else {
-    __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1863, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1871, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_t_4 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
     __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
     if (likely(__pyx_t_4)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
@@ -29695,37 +30838,57 @@ static PyObject *__pyx_pf_9adios_mpi_5group_8__dir__(struct __pyx_obj_9adios_mpi
     }
   }
   if (!__pyx_t_4) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1863, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1871, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1863, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_5);
-    __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); __pyx_t_4 = NULL;
-    __Pyx_GIVEREF(__pyx_t_3);
-    PyTuple_SET_ITEM(__pyx_t_5, 0+1, __pyx_t_3);
-    __pyx_t_3 = 0;
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1863, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_t_3};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1871, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_t_3};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1871, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    } else
+    #endif
+    {
+      __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1871, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_5);
+      __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); __pyx_t_4 = NULL;
+      __Pyx_GIVEREF(__pyx_t_3);
+      PyTuple_SET_ITEM(__pyx_t_5, 0+1, __pyx_t_3);
+      __pyx_t_3 = 0;
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1871, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    }
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_v_k1 = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":1864
+  /* "adios_mpi.pyx":1872
  *         k0 = dir(type(self))
  *         k1 = normalize_key(self.vars.keys())
  *         k2 = normalize_key(self.attrs.keys())             # <<<<<<<<<<<<<<
  *         return k0 + k1 + k2
  * 
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_normalize_key); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1864, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_normalize_key); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1872, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1864, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1872, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_4 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
     __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
     if (likely(__pyx_t_4)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -29735,15 +30898,15 @@ static PyObject *__pyx_pf_9adios_mpi_5group_8__dir__(struct __pyx_obj_9adios_mpi
     }
   }
   if (__pyx_t_4) {
-    __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1864, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1872, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   } else {
-    __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1864, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1872, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
     __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
     if (likely(__pyx_t_3)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
@@ -29753,25 +30916,45 @@ static PyObject *__pyx_pf_9adios_mpi_5group_8__dir__(struct __pyx_obj_9adios_mpi
     }
   }
   if (!__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1864, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1872, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1864, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_4);
-    __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
-    __Pyx_GIVEREF(__pyx_t_5);
-    PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_t_5);
-    __pyx_t_5 = 0;
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1864, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_t_5};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1872, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_t_5};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1872, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    } else
+    #endif
+    {
+      __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1872, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+      __Pyx_GIVEREF(__pyx_t_5);
+      PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_t_5);
+      __pyx_t_5 = 0;
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1872, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    }
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_v_k2 = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":1865
+  /* "adios_mpi.pyx":1873
  *         k1 = normalize_key(self.vars.keys())
  *         k2 = normalize_key(self.attrs.keys())
  *         return k0 + k1 + k2             # <<<<<<<<<<<<<<
@@ -29779,16 +30962,16 @@ static PyObject *__pyx_pf_9adios_mpi_5group_8__dir__(struct __pyx_obj_9adios_mpi
  *     ## Require for dictionary key completion
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyNumber_Add(__pyx_v_k0, __pyx_v_k1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1865, __pyx_L1_error)
+  __pyx_t_1 = PyNumber_Add(__pyx_v_k0, __pyx_v_k1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1873, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_v_k2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1865, __pyx_L1_error)
+  __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_v_k2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1873, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":1861
+  /* "adios_mpi.pyx":1869
  *         return self.__getitem__(varname)
  * 
  *     def __dir__(self):             # <<<<<<<<<<<<<<
@@ -29814,7 +30997,7 @@ static PyObject *__pyx_pf_9adios_mpi_5group_8__dir__(struct __pyx_obj_9adios_mpi
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1868
+/* "adios_mpi.pyx":1876
  * 
  *     ## Require for dictionary key completion
  *     def keys(self):             # <<<<<<<<<<<<<<
@@ -29845,7 +31028,7 @@ static PyObject *__pyx_pf_9adios_mpi_5group_10keys(struct __pyx_obj_9adios_mpi_g
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("keys", 0);
 
-  /* "adios_mpi.pyx":1869
+  /* "adios_mpi.pyx":1877
  *     ## Require for dictionary key completion
  *     def keys(self):
  *         return self.vars.keys() + self.attrs.keys()             # <<<<<<<<<<<<<<
@@ -29853,10 +31036,10 @@ static PyObject *__pyx_pf_9adios_mpi_5group_10keys(struct __pyx_obj_9adios_mpi_g
  *     def dirs(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1869, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1877, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
     __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
     if (likely(__pyx_t_3)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
@@ -29866,17 +31049,17 @@ static PyObject *__pyx_pf_9adios_mpi_5group_10keys(struct __pyx_obj_9adios_mpi_g
     }
   }
   if (__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1869, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1877, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   } else {
-    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1869, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1877, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1869, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1877, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_4 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
     __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
     if (likely(__pyx_t_4)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -29886,14 +31069,14 @@ static PyObject *__pyx_pf_9adios_mpi_5group_10keys(struct __pyx_obj_9adios_mpi_g
     }
   }
   if (__pyx_t_4) {
-    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1869, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1877, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   } else {
-    __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1869, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1877, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1869, __pyx_L1_error)
+  __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1877, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -29901,7 +31084,7 @@ static PyObject *__pyx_pf_9adios_mpi_5group_10keys(struct __pyx_obj_9adios_mpi_g
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":1868
+  /* "adios_mpi.pyx":1876
  * 
  *     ## Require for dictionary key completion
  *     def keys(self):             # <<<<<<<<<<<<<<
@@ -29923,7 +31106,7 @@ static PyObject *__pyx_pf_9adios_mpi_5group_10keys(struct __pyx_obj_9adios_mpi_g
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1871
+/* "adios_mpi.pyx":1879
  *         return self.vars.keys() + self.attrs.keys()
  * 
  *     def dirs(self):             # <<<<<<<<<<<<<<
@@ -29961,29 +31144,29 @@ static PyObject *__pyx_pf_9adios_mpi_5group_12dirs(struct __pyx_obj_9adios_mpi_g
   int __pyx_t_9;
   __Pyx_RefNannySetupContext("dirs", 0);
 
-  /* "adios_mpi.pyx":1873
+  /* "adios_mpi.pyx":1881
  *     def dirs(self):
  *         """ Return child dir names """
  *         s = set()             # <<<<<<<<<<<<<<
  *         for k in self.vars.keys():
  *             if k.startswith('/'): k = k[1:]
  */
-  __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1873, __pyx_L1_error)
+  __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1881, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_s = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":1874
+  /* "adios_mpi.pyx":1882
  *         """ Return child dir names """
  *         s = set()
  *         for k in self.vars.keys():             # <<<<<<<<<<<<<<
  *             if k.startswith('/'): k = k[1:]
  *             s.add(os.path.dirname(k).split('/')[0])
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1874, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->vars), __pyx_n_s_keys); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1882, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
     __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
     if (likely(__pyx_t_3)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
@@ -29993,10 +31176,10 @@ static PyObject *__pyx_pf_9adios_mpi_5group_12dirs(struct __pyx_obj_9adios_mpi_g
     }
   }
   if (__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1874, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1882, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   } else {
-    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1874, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1882, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -30004,27 +31187,27 @@ static PyObject *__pyx_pf_9adios_mpi_5group_12dirs(struct __pyx_obj_9adios_mpi_g
     __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __pyx_t_4 = 0;
     __pyx_t_5 = NULL;
   } else {
-    __pyx_t_4 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1874, __pyx_L1_error)
+    __pyx_t_4 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1882, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_5 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1874, __pyx_L1_error)
+    __pyx_t_5 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1882, __pyx_L1_error)
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   for (;;) {
     if (likely(!__pyx_t_5)) {
       if (likely(PyList_CheckExact(__pyx_t_2))) {
         if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_2)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1874, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1882, __pyx_L1_error)
         #else
-        __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1874, __pyx_L1_error)
+        __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1882, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_1);
         #endif
       } else {
         if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1874, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1882, __pyx_L1_error)
         #else
-        __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1874, __pyx_L1_error)
+        __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1882, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_1);
         #endif
       }
@@ -30034,7 +31217,7 @@ static PyObject *__pyx_pf_9adios_mpi_5group_12dirs(struct __pyx_obj_9adios_mpi_g
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
           if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-          else __PYX_ERR(0, 1874, __pyx_L1_error)
+          else __PYX_ERR(0, 1882, __pyx_L1_error)
         }
         break;
       }
@@ -30043,44 +31226,44 @@ static PyObject *__pyx_pf_9adios_mpi_5group_12dirs(struct __pyx_obj_9adios_mpi_g
     __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "adios_mpi.pyx":1875
+    /* "adios_mpi.pyx":1883
  *         s = set()
  *         for k in self.vars.keys():
  *             if k.startswith('/'): k = k[1:]             # <<<<<<<<<<<<<<
  *             s.add(os.path.dirname(k).split('/')[0])
  *         for k in self.attrs.keys():
  */
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_k, __pyx_n_s_startswith); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1875, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_k, __pyx_n_s_startswith); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1883, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__48, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1875, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__48, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1883, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 1875, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 1883, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     if (__pyx_t_6) {
-      __pyx_t_3 = __Pyx_PyObject_GetSlice(__pyx_v_k, 1, 0, NULL, NULL, &__pyx_slice__49, 1, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1875, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_GetSlice(__pyx_v_k, 1, 0, NULL, NULL, &__pyx_slice__49, 1, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1883, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF_SET(__pyx_v_k, __pyx_t_3);
       __pyx_t_3 = 0;
     }
 
-    /* "adios_mpi.pyx":1876
+    /* "adios_mpi.pyx":1884
  *         for k in self.vars.keys():
  *             if k.startswith('/'): k = k[1:]
  *             s.add(os.path.dirname(k).split('/')[0])             # <<<<<<<<<<<<<<
  *         for k in self.attrs.keys():
  *             if k.startswith('/'): k = k[1:]
  */
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1876, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1884, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_path); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1876, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_path); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1884, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_dirname); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1876, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_dirname); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1884, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __pyx_t_7 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_1))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
       __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1);
       if (likely(__pyx_t_7)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
@@ -30090,33 +31273,51 @@ static PyObject *__pyx_pf_9adios_mpi_5group_12dirs(struct __pyx_obj_9adios_mpi_g
       }
     }
     if (!__pyx_t_7) {
-      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_k); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1876, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_k); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1884, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
     } else {
-      __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1876, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_8);
-      __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_7); __pyx_t_7 = NULL;
-      __Pyx_INCREF(__pyx_v_k);
-      __Pyx_GIVEREF(__pyx_v_k);
-      PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_v_k);
-      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1876, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_3);
-      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_1)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_7, __pyx_v_k};
+        __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1884, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+        __Pyx_GOTREF(__pyx_t_3);
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_7, __pyx_v_k};
+        __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1884, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+        __Pyx_GOTREF(__pyx_t_3);
+      } else
+      #endif
+      {
+        __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1884, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_8);
+        __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_7); __pyx_t_7 = NULL;
+        __Pyx_INCREF(__pyx_v_k);
+        __Pyx_GIVEREF(__pyx_v_k);
+        PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_v_k);
+        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1884, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_3);
+        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+      }
     }
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_split); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1876, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_split); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1884, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__50, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1876, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__50, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1884, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_3, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1876, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_3, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1884, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_9 = PySet_Add(__pyx_v_s, __pyx_t_1); if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 1876, __pyx_L1_error)
+    __pyx_t_9 = PySet_Add(__pyx_v_s, __pyx_t_1); if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 1884, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-    /* "adios_mpi.pyx":1874
+    /* "adios_mpi.pyx":1882
  *         """ Return child dir names """
  *         s = set()
  *         for k in self.vars.keys():             # <<<<<<<<<<<<<<
@@ -30126,17 +31327,17 @@ static PyObject *__pyx_pf_9adios_mpi_5group_12dirs(struct __pyx_obj_9adios_mpi_g
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "adios_mpi.pyx":1877
+  /* "adios_mpi.pyx":1885
  *             if k.startswith('/'): k = k[1:]
  *             s.add(os.path.dirname(k).split('/')[0])
  *         for k in self.attrs.keys():             # <<<<<<<<<<<<<<
  *             if k.startswith('/'): k = k[1:]
  *             s.add(os.path.dirname(k).split('/')[0])
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1877, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->attrs), __pyx_n_s_keys); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1885, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_1))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
     __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
     if (likely(__pyx_t_3)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
@@ -30146,10 +31347,10 @@ static PyObject *__pyx_pf_9adios_mpi_5group_12dirs(struct __pyx_obj_9adios_mpi_g
     }
   }
   if (__pyx_t_3) {
-    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1877, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1885, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   } else {
-    __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1877, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1885, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -30157,27 +31358,27 @@ static PyObject *__pyx_pf_9adios_mpi_5group_12dirs(struct __pyx_obj_9adios_mpi_g
     __pyx_t_1 = __pyx_t_2; __Pyx_INCREF(__pyx_t_1); __pyx_t_4 = 0;
     __pyx_t_5 = NULL;
   } else {
-    __pyx_t_4 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1877, __pyx_L1_error)
+    __pyx_t_4 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1885, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1877, __pyx_L1_error)
+    __pyx_t_5 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1885, __pyx_L1_error)
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   for (;;) {
     if (likely(!__pyx_t_5)) {
       if (likely(PyList_CheckExact(__pyx_t_1))) {
         if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_1)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1877, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1885, __pyx_L1_error)
         #else
-        __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1877, __pyx_L1_error)
+        __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1885, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_2);
         #endif
       } else {
         if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1877, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1885, __pyx_L1_error)
         #else
-        __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1877, __pyx_L1_error)
+        __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1885, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_2);
         #endif
       }
@@ -30187,7 +31388,7 @@ static PyObject *__pyx_pf_9adios_mpi_5group_12dirs(struct __pyx_obj_9adios_mpi_g
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
           if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-          else __PYX_ERR(0, 1877, __pyx_L1_error)
+          else __PYX_ERR(0, 1885, __pyx_L1_error)
         }
         break;
       }
@@ -30196,44 +31397,44 @@ static PyObject *__pyx_pf_9adios_mpi_5group_12dirs(struct __pyx_obj_9adios_mpi_g
     __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_2);
     __pyx_t_2 = 0;
 
-    /* "adios_mpi.pyx":1878
+    /* "adios_mpi.pyx":1886
  *             s.add(os.path.dirname(k).split('/')[0])
  *         for k in self.attrs.keys():
  *             if k.startswith('/'): k = k[1:]             # <<<<<<<<<<<<<<
  *             s.add(os.path.dirname(k).split('/')[0])
  *         return list(s-set(['']))
  */
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_k, __pyx_n_s_startswith); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1878, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_k, __pyx_n_s_startswith); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1886, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__51, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1878, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__51, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1886, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 1878, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 1886, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     if (__pyx_t_6) {
-      __pyx_t_3 = __Pyx_PyObject_GetSlice(__pyx_v_k, 1, 0, NULL, NULL, &__pyx_slice__52, 1, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1878, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_GetSlice(__pyx_v_k, 1, 0, NULL, NULL, &__pyx_slice__52, 1, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1886, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF_SET(__pyx_v_k, __pyx_t_3);
       __pyx_t_3 = 0;
     }
 
-    /* "adios_mpi.pyx":1879
+    /* "adios_mpi.pyx":1887
  *         for k in self.attrs.keys():
  *             if k.startswith('/'): k = k[1:]
  *             s.add(os.path.dirname(k).split('/')[0])             # <<<<<<<<<<<<<<
  *         return list(s-set(['']))
  * 
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1879, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1887, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_path); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1879, __pyx_L1_error)
+    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_path); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1887, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_dirname); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1879, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_dirname); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1887, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     __pyx_t_8 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
       __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_2);
       if (likely(__pyx_t_8)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
@@ -30243,33 +31444,51 @@ static PyObject *__pyx_pf_9adios_mpi_5group_12dirs(struct __pyx_obj_9adios_mpi_g
       }
     }
     if (!__pyx_t_8) {
-      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_k); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1879, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_k); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1887, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
     } else {
-      __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1879, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_7);
-      __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_8); __pyx_t_8 = NULL;
-      __Pyx_INCREF(__pyx_v_k);
-      __Pyx_GIVEREF(__pyx_v_k);
-      PyTuple_SET_ITEM(__pyx_t_7, 0+1, __pyx_v_k);
-      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1879, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_3);
-      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_2)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_v_k};
+        __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1887, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+        __Pyx_GOTREF(__pyx_t_3);
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_v_k};
+        __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1887, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+        __Pyx_GOTREF(__pyx_t_3);
+      } else
+      #endif
+      {
+        __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1887, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_7);
+        __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_8); __pyx_t_8 = NULL;
+        __Pyx_INCREF(__pyx_v_k);
+        __Pyx_GIVEREF(__pyx_v_k);
+        PyTuple_SET_ITEM(__pyx_t_7, 0+1, __pyx_v_k);
+        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1887, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_3);
+        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+      }
     }
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_split); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1879, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_split); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1887, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__53, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1879, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__53, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1887, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_3, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1879, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_3, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1887, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_9 = PySet_Add(__pyx_v_s, __pyx_t_2); if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 1879, __pyx_L1_error)
+    __pyx_t_9 = PySet_Add(__pyx_v_s, __pyx_t_2); if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 1887, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-    /* "adios_mpi.pyx":1877
+    /* "adios_mpi.pyx":1885
  *             if k.startswith('/'): k = k[1:]
  *             s.add(os.path.dirname(k).split('/')[0])
  *         for k in self.attrs.keys():             # <<<<<<<<<<<<<<
@@ -30279,7 +31498,7 @@ static PyObject *__pyx_pf_9adios_mpi_5group_12dirs(struct __pyx_obj_9adios_mpi_g
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":1880
+  /* "adios_mpi.pyx":1888
  *             if k.startswith('/'): k = k[1:]
  *             s.add(os.path.dirname(k).split('/')[0])
  *         return list(s-set(['']))             # <<<<<<<<<<<<<<
@@ -30287,20 +31506,20 @@ static PyObject *__pyx_pf_9adios_mpi_5group_12dirs(struct __pyx_obj_9adios_mpi_g
  * ## Helper dict
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1880, __pyx_L1_error)
+  __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1888, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PySet_Add(__pyx_t_1, __pyx_kp_s__10) < 0) __PYX_ERR(0, 1880, __pyx_L1_error)
-  __pyx_t_2 = PyNumber_Subtract(__pyx_v_s, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1880, __pyx_L1_error)
+  if (PySet_Add(__pyx_t_1, __pyx_kp_s__10) < 0) __PYX_ERR(0, 1888, __pyx_L1_error)
+  __pyx_t_2 = PyNumber_Subtract(__pyx_v_s, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1888, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PySequence_List(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1880, __pyx_L1_error)
+  __pyx_t_1 = PySequence_List(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1888, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":1871
+  /* "adios_mpi.pyx":1879
  *         return self.vars.keys() + self.attrs.keys()
  * 
  *     def dirs(self):             # <<<<<<<<<<<<<<
@@ -30325,7 +31544,7 @@ static PyObject *__pyx_pf_9adios_mpi_5group_12dirs(struct __pyx_obj_9adios_mpi_g
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1782
+/* "adios_mpi.pyx":1790
  * 
  *     ## Public Memeber
  *     cpdef public softdict vars             # <<<<<<<<<<<<<<
@@ -30380,7 +31599,7 @@ static int __pyx_pf_9adios_mpi_5group_4vars_2__set__(struct __pyx_obj_9adios_mpi
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__set__", 0);
-  if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_ptype_9adios_mpi_softdict))))) __PYX_ERR(0, 1782, __pyx_L1_error)
+  if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_ptype_9adios_mpi_softdict))))) __PYX_ERR(0, 1790, __pyx_L1_error)
   __pyx_t_1 = __pyx_v_value;
   __Pyx_INCREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
@@ -30430,7 +31649,7 @@ static int __pyx_pf_9adios_mpi_5group_4vars_4__del__(struct __pyx_obj_9adios_mpi
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1783
+/* "adios_mpi.pyx":1791
  *     ## Public Memeber
  *     cpdef public softdict vars
  *     cpdef public softdict attrs             # <<<<<<<<<<<<<<
@@ -30485,7 +31704,7 @@ static int __pyx_pf_9adios_mpi_5group_5attrs_2__set__(struct __pyx_obj_9adios_mp
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__set__", 0);
-  if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_ptype_9adios_mpi_softdict))))) __PYX_ERR(0, 1783, __pyx_L1_error)
+  if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_ptype_9adios_mpi_softdict))))) __PYX_ERR(0, 1791, __pyx_L1_error)
   __pyx_t_1 = __pyx_v_value;
   __Pyx_INCREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
@@ -30535,7 +31754,7 @@ static int __pyx_pf_9adios_mpi_5group_5attrs_4__del__(struct __pyx_obj_9adios_mp
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1885
+/* "adios_mpi.pyx":1893
  * cdef class smartdict(dict):
  *     cdef factory
  *     def __init__(self, factory):             # <<<<<<<<<<<<<<
@@ -30568,7 +31787,7 @@ static int __pyx_pw_9adios_mpi_9smartdict_1__init__(PyObject *__pyx_v_self, PyOb
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 1885, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 1893, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -30579,7 +31798,7 @@ static int __pyx_pw_9adios_mpi_9smartdict_1__init__(PyObject *__pyx_v_self, PyOb
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1885, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1893, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.smartdict.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -30601,17 +31820,17 @@ static int __pyx_pf_9adios_mpi_9smartdict___init__(struct __pyx_obj_9adios_mpi_s
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("__init__", 0);
 
-  /* "adios_mpi.pyx":1886
+  /* "adios_mpi.pyx":1894
  *     cdef factory
  *     def __init__(self, factory):
  *         dict.__init__(self)             # <<<<<<<<<<<<<<
  *         self.factory = factory
  * 
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)(&PyDict_Type)), __pyx_n_s_init); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1886, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)(&PyDict_Type)), __pyx_n_s_init); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1894, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
     __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
     if (likely(__pyx_t_3)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
@@ -30621,23 +31840,41 @@ static int __pyx_pf_9adios_mpi_9smartdict___init__(struct __pyx_obj_9adios_mpi_s
     }
   }
   if (!__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, ((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1886, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, ((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1894, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1886, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_4);
-    __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
-    __Pyx_INCREF(((PyObject *)__pyx_v_self));
-    __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
-    PyTuple_SET_ITEM(__pyx_t_4, 0+1, ((PyObject *)__pyx_v_self));
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1886, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, ((PyObject *)__pyx_v_self)};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1894, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, ((PyObject *)__pyx_v_self)};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1894, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1894, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+      __Pyx_INCREF(((PyObject *)__pyx_v_self));
+      __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
+      PyTuple_SET_ITEM(__pyx_t_4, 0+1, ((PyObject *)__pyx_v_self));
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1894, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    }
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":1887
+  /* "adios_mpi.pyx":1895
  *     def __init__(self, factory):
  *         dict.__init__(self)
  *         self.factory = factory             # <<<<<<<<<<<<<<
@@ -30650,7 +31887,7 @@ static int __pyx_pf_9adios_mpi_9smartdict___init__(struct __pyx_obj_9adios_mpi_s
   __Pyx_DECREF(__pyx_v_self->factory);
   __pyx_v_self->factory = __pyx_v_factory;
 
-  /* "adios_mpi.pyx":1885
+  /* "adios_mpi.pyx":1893
  * cdef class smartdict(dict):
  *     cdef factory
  *     def __init__(self, factory):             # <<<<<<<<<<<<<<
@@ -30673,7 +31910,7 @@ static int __pyx_pf_9adios_mpi_9smartdict___init__(struct __pyx_obj_9adios_mpi_s
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1889
+/* "adios_mpi.pyx":1897
  *         self.factory = factory
  * 
  *     def __setitem__(self, key, value):             # <<<<<<<<<<<<<<
@@ -30702,11 +31939,11 @@ static int __pyx_pf_9adios_mpi_9smartdict_2__setitem__(struct __pyx_obj_9adios_m
   int __pyx_t_3;
   PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
-  Py_ssize_t __pyx_t_6;
+  int __pyx_t_6;
   PyObject *__pyx_t_7 = NULL;
   __Pyx_RefNannySetupContext("__setitem__", 0);
 
-  /* "adios_mpi.pyx":1890
+  /* "adios_mpi.pyx":1898
  * 
  *     def __setitem__(self, key, value):
  *         if key in dict.keys(self):             # <<<<<<<<<<<<<<
@@ -30715,27 +31952,27 @@ static int __pyx_pf_9adios_mpi_9smartdict_2__setitem__(struct __pyx_obj_9adios_m
  */
   if (unlikely(((PyObject *)__pyx_v_self) == Py_None)) {
     PyErr_Format(PyExc_TypeError, "descriptor '%s' requires a '%s' object but received a 'NoneType'", "keys", "dict");
-    __PYX_ERR(0, 1890, __pyx_L1_error)
+    __PYX_ERR(0, 1898, __pyx_L1_error)
   }
-  __pyx_t_1 = __Pyx_PyDict_Keys(((PyObject*)__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1890, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyDict_Keys(((PyObject*)__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1898, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_v_key, __pyx_t_1, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1890, __pyx_L1_error)
+  __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_v_key, __pyx_t_1, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1898, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "adios_mpi.pyx":1891
+    /* "adios_mpi.pyx":1899
  *     def __setitem__(self, key, value):
  *         if key in dict.keys(self):
  *             dict.__setitem__(self, key, value)             # <<<<<<<<<<<<<<
  *         else:
  *             self.factory(key, value)
  */
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)(&PyDict_Type)), __pyx_n_s_setitem); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1891, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)(&PyDict_Type)), __pyx_n_s_setitem); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1899, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_5 = NULL;
     __pyx_t_6 = 0;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
       __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
       if (likely(__pyx_t_5)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
@@ -30745,27 +31982,45 @@ static int __pyx_pf_9adios_mpi_9smartdict_2__setitem__(struct __pyx_obj_9adios_m
         __pyx_t_6 = 1;
       }
     }
-    __pyx_t_7 = PyTuple_New(3+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1891, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_7);
-    if (__pyx_t_5) {
-      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5); __pyx_t_5 = NULL;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_4)) {
+      PyObject *__pyx_temp[4] = {__pyx_t_5, ((PyObject *)__pyx_v_self), __pyx_v_key, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1899, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
+      PyObject *__pyx_temp[4] = {__pyx_t_5, ((PyObject *)__pyx_v_self), __pyx_v_key, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1899, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __pyx_t_7 = PyTuple_New(3+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1899, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_7);
+      if (__pyx_t_5) {
+        __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5); __pyx_t_5 = NULL;
+      }
+      __Pyx_INCREF(((PyObject *)__pyx_v_self));
+      __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
+      PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, ((PyObject *)__pyx_v_self));
+      __Pyx_INCREF(__pyx_v_key);
+      __Pyx_GIVEREF(__pyx_v_key);
+      PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_v_key);
+      __Pyx_INCREF(__pyx_v_value);
+      __Pyx_GIVEREF(__pyx_v_value);
+      PyTuple_SET_ITEM(__pyx_t_7, 2+__pyx_t_6, __pyx_v_value);
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1899, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     }
-    __Pyx_INCREF(((PyObject *)__pyx_v_self));
-    __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
-    PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, ((PyObject *)__pyx_v_self));
-    __Pyx_INCREF(__pyx_v_key);
-    __Pyx_GIVEREF(__pyx_v_key);
-    PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_v_key);
-    __Pyx_INCREF(__pyx_v_value);
-    __Pyx_GIVEREF(__pyx_v_value);
-    PyTuple_SET_ITEM(__pyx_t_7, 2+__pyx_t_6, __pyx_v_value);
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1891, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-    /* "adios_mpi.pyx":1890
+    /* "adios_mpi.pyx":1898
  * 
  *     def __setitem__(self, key, value):
  *         if key in dict.keys(self):             # <<<<<<<<<<<<<<
@@ -30775,7 +32030,7 @@ static int __pyx_pf_9adios_mpi_9smartdict_2__setitem__(struct __pyx_obj_9adios_m
     goto __pyx_L3;
   }
 
-  /* "adios_mpi.pyx":1893
+  /* "adios_mpi.pyx":1901
  *             dict.__setitem__(self, key, value)
  *         else:
  *             self.factory(key, value)             # <<<<<<<<<<<<<<
@@ -30786,7 +32041,7 @@ static int __pyx_pf_9adios_mpi_9smartdict_2__setitem__(struct __pyx_obj_9adios_m
     __Pyx_INCREF(__pyx_v_self->factory);
     __pyx_t_4 = __pyx_v_self->factory; __pyx_t_7 = NULL;
     __pyx_t_6 = 0;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
       __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_4);
       if (likely(__pyx_t_7)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
@@ -30796,26 +32051,44 @@ static int __pyx_pf_9adios_mpi_9smartdict_2__setitem__(struct __pyx_obj_9adios_m
         __pyx_t_6 = 1;
       }
     }
-    __pyx_t_5 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1893, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_5);
-    if (__pyx_t_7) {
-      __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_7); __pyx_t_7 = NULL;
-    }
-    __Pyx_INCREF(__pyx_v_key);
-    __Pyx_GIVEREF(__pyx_v_key);
-    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_6, __pyx_v_key);
-    __Pyx_INCREF(__pyx_v_value);
-    __Pyx_GIVEREF(__pyx_v_value);
-    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_6, __pyx_v_value);
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1893, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_4)) {
+      PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_v_key, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1901, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
+      PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_v_key, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1901, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __pyx_t_5 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1901, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_5);
+      if (__pyx_t_7) {
+        __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_7); __pyx_t_7 = NULL;
+      }
+      __Pyx_INCREF(__pyx_v_key);
+      __Pyx_GIVEREF(__pyx_v_key);
+      PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_6, __pyx_v_key);
+      __Pyx_INCREF(__pyx_v_value);
+      __Pyx_GIVEREF(__pyx_v_value);
+      PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_6, __pyx_v_value);
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1901, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    }
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   }
   __pyx_L3:;
 
-  /* "adios_mpi.pyx":1889
+  /* "adios_mpi.pyx":1897
  *         self.factory = factory
  * 
  *     def __setitem__(self, key, value):             # <<<<<<<<<<<<<<
@@ -30838,7 +32111,7 @@ static int __pyx_pf_9adios_mpi_9smartdict_2__setitem__(struct __pyx_obj_9adios_m
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1927
+/* "adios_mpi.pyx":1936
  *     property fname:
  *         """ The filename to write. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -30864,7 +32137,7 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_5fname___get__(struct __pyx_obj_9ad
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios_mpi.pyx":1928
+  /* "adios_mpi.pyx":1937
  *         """ The filename to write. """
  *         def __get__(self):
  *             return self.fname             # <<<<<<<<<<<<<<
@@ -30876,7 +32149,7 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_5fname___get__(struct __pyx_obj_9ad
   __pyx_r = __pyx_v_self->fname;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":1927
+  /* "adios_mpi.pyx":1936
  *     property fname:
  *         """ The filename to write. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -30891,7 +32164,7 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_5fname___get__(struct __pyx_obj_9ad
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1932
+/* "adios_mpi.pyx":1941
  *     property gname:
  *         """ The groupname associated with the file. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -30917,7 +32190,7 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_5gname___get__(struct __pyx_obj_9ad
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios_mpi.pyx":1933
+  /* "adios_mpi.pyx":1942
  *         """ The groupname associated with the file. """
  *         def __get__(self):
  *             return self.gname             # <<<<<<<<<<<<<<
@@ -30929,7 +32202,7 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_5gname___get__(struct __pyx_obj_9ad
   __pyx_r = __pyx_v_self->gname;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":1932
+  /* "adios_mpi.pyx":1941
  *     property gname:
  *         """ The groupname associated with the file. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -30944,7 +32217,7 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_5gname___get__(struct __pyx_obj_9ad
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1937
+/* "adios_mpi.pyx":1946
  *     property is_noxml:
  *         """ Boolean to indicate using No-XML or not. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -30971,7 +32244,7 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_8is_noxml___get__(struct __pyx_obj_
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios_mpi.pyx":1938
+  /* "adios_mpi.pyx":1947
  *         """ Boolean to indicate using No-XML or not. """
  *         def __get__(self):
  *             return self.is_noxml             # <<<<<<<<<<<<<<
@@ -30979,13 +32252,13 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_8is_noxml___get__(struct __pyx_obj_
  *     property mode:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->is_noxml); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1938, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->is_noxml); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1947, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":1937
+  /* "adios_mpi.pyx":1946
  *     property is_noxml:
  *         """ Boolean to indicate using No-XML or not. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -31004,7 +32277,7 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_8is_noxml___get__(struct __pyx_obj_
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1942
+/* "adios_mpi.pyx":1951
  *     property mode:
  *         """ Writing mode: overwrite or append. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -31030,7 +32303,7 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_4mode___get__(struct __pyx_obj_9adi
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios_mpi.pyx":1943
+  /* "adios_mpi.pyx":1952
  *         """ Writing mode: overwrite or append. """
  *         def __get__(self):
  *             return self.mode             # <<<<<<<<<<<<<<
@@ -31042,7 +32315,7 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_4mode___get__(struct __pyx_obj_9adi
   __pyx_r = __pyx_v_self->mode;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":1942
+  /* "adios_mpi.pyx":1951
  *     property mode:
  *         """ Writing mode: overwrite or append. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -31057,7 +32330,7 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_4mode___get__(struct __pyx_obj_9adi
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1947
+/* "adios_mpi.pyx":1956
  *     property vars:
  *         """ Dictionary of variables to write. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -31083,7 +32356,7 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_4vars___get__(struct __pyx_obj_9adi
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios_mpi.pyx":1948
+  /* "adios_mpi.pyx":1957
  *         """ Dictionary of variables to write. """
  *         def __get__(self):
  *             return self.vars             # <<<<<<<<<<<<<<
@@ -31095,7 +32368,7 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_4vars___get__(struct __pyx_obj_9adi
   __pyx_r = __pyx_v_self->vars;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":1947
+  /* "adios_mpi.pyx":1956
  *     property vars:
  *         """ Dictionary of variables to write. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -31110,7 +32383,7 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_4vars___get__(struct __pyx_obj_9adi
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1952
+/* "adios_mpi.pyx":1961
  *     property attrs:
  *         """ Dictionary of attributes to write. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -31136,7 +32409,7 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_5attrs___get__(struct __pyx_obj_9ad
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios_mpi.pyx":1953
+  /* "adios_mpi.pyx":1962
  *         """ Dictionary of attributes to write. """
  *         def __get__(self):
  *             return self.attrs             # <<<<<<<<<<<<<<
@@ -31148,7 +32421,7 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_5attrs___get__(struct __pyx_obj_9ad
   __pyx_r = __pyx_v_self->attrs;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":1952
+  /* "adios_mpi.pyx":1961
  *     property attrs:
  *         """ Dictionary of attributes to write. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -31163,7 +32436,7 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_5attrs___get__(struct __pyx_obj_9ad
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1957
+/* "adios_mpi.pyx":1966
  *     property timeaggregation_buffersize:
  *         """ Get time-aggregation buffersize. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -31190,7 +32463,7 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_26timeaggregation_buffersize___get_
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios_mpi.pyx":1958
+  /* "adios_mpi.pyx":1967
  *         """ Get time-aggregation buffersize. """
  *         def __get__(self):
  *             return self.timeaggregation_buffersize             # <<<<<<<<<<<<<<
@@ -31198,13 +32471,13 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_26timeaggregation_buffersize___get_
  *     def __init__(self, str fname,
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_uint64_t(__pyx_v_self->timeaggregation_buffersize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1958, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_uint64_t(__pyx_v_self->timeaggregation_buffersize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1967, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":1957
+  /* "adios_mpi.pyx":1966
  *     property timeaggregation_buffersize:
  *         """ Get time-aggregation buffersize. """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -31223,7 +32496,7 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_26timeaggregation_buffersize___get_
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1960
+/* "adios_mpi.pyx":1969
  *             return self.timeaggregation_buffersize
  * 
  *     def __init__(self, str fname,             # <<<<<<<<<<<<<<
@@ -31237,19 +32510,27 @@ static int __pyx_pw_9adios_mpi_6writer_1__init__(PyObject *__pyx_v_self, PyObjec
   PyObject *__pyx_v_fname = 0;
   int __pyx_v_is_noxml;
   PyObject *__pyx_v_mode = 0;
+  int __pyx_v_stats;
   struct PyMPICommObject *__pyx_v_comm = 0;
+  PyObject *__pyx_v_method = 0;
+  PyObject *__pyx_v_method_params = 0;
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_fname,&__pyx_n_s_is_noxml,&__pyx_n_s_mode,&__pyx_n_s_comm,0};
-    PyObject* values[4] = {0,0,0,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_fname,&__pyx_n_s_is_noxml,&__pyx_n_s_mode,&__pyx_n_s_stats,&__pyx_n_s_comm,&__pyx_n_s_method,&__pyx_n_s_method_params,0};
+    PyObject* values[7] = {0,0,0,0,0,0,0};
     values[2] = ((PyObject*)__pyx_n_s_w);
-    values[3] = (PyObject *)__pyx_k__54;
+    values[4] = (PyObject *)__pyx_k__54;
+    values[5] = ((PyObject*)__pyx_n_s_POSIX1);
+    values[6] = ((PyObject*)__pyx_kp_s__10);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
+        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
+        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
@@ -31274,15 +32555,33 @@ static int __pyx_pw_9adios_mpi_6writer_1__init__(PyObject *__pyx_v_self, PyObjec
         }
         case  3:
         if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_stats);
           if (value) { values[3] = value; kw_args--; }
         }
+        case  4:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
+          if (value) { values[4] = value; kw_args--; }
+        }
+        case  5:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_method);
+          if (value) { values[5] = value; kw_args--; }
+        }
+        case  6:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_method_params);
+          if (value) { values[6] = value; kw_args--; }
+        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 1960, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 1969, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
+        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
@@ -31293,35 +32592,44 @@ static int __pyx_pw_9adios_mpi_6writer_1__init__(PyObject *__pyx_v_self, PyObjec
     }
     __pyx_v_fname = ((PyObject*)values[0]);
     if (values[1]) {
-      __pyx_v_is_noxml = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_is_noxml == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1961, __pyx_L3_error)
+      __pyx_v_is_noxml = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_is_noxml == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1970, __pyx_L3_error)
     } else {
 
-      /* "adios_mpi.pyx":1961
+      /* "adios_mpi.pyx":1970
  * 
  *     def __init__(self, str fname,
  *                  bint is_noxml = True,             # <<<<<<<<<<<<<<
  *                  str mode = "w",
- *                  MPI.Comm comm = MPI.COMM_WORLD):
+ *                  int stats = adios_stat_default,
  */
       __pyx_v_is_noxml = ((int)1);
     }
     __pyx_v_mode = ((PyObject*)values[2]);
-    __pyx_v_comm = ((struct PyMPICommObject *)values[3]);
+    if (values[3]) {
+      __pyx_v_stats = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_stats == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1972, __pyx_L3_error)
+    } else {
+      __pyx_v_stats = __pyx_k__55;
+    }
+    __pyx_v_comm = ((struct PyMPICommObject *)values[4]);
+    __pyx_v_method = ((PyObject*)values[5]);
+    __pyx_v_method_params = ((PyObject*)values[6]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1960, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 7, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1969, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.writer.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_fname), (&PyString_Type), 1, "fname", 1))) __PYX_ERR(0, 1960, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mode), (&PyString_Type), 1, "mode", 1))) __PYX_ERR(0, 1962, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_comm), __pyx_ptype_6mpi4py_3MPI_Comm, 1, "comm", 0))) __PYX_ERR(0, 1963, __pyx_L1_error)
-  __pyx_r = __pyx_pf_9adios_mpi_6writer___init__(((struct __pyx_obj_9adios_mpi_writer *)__pyx_v_self), __pyx_v_fname, __pyx_v_is_noxml, __pyx_v_mode, __pyx_v_comm);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_fname), (&PyString_Type), 1, "fname", 1))) __PYX_ERR(0, 1969, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mode), (&PyString_Type), 1, "mode", 1))) __PYX_ERR(0, 1971, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_comm), __pyx_ptype_6mpi4py_3MPI_Comm, 1, "comm", 0))) __PYX_ERR(0, 1973, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_method), (&PyString_Type), 1, "method", 1))) __PYX_ERR(0, 1974, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_method_params), (&PyString_Type), 1, "method_params", 1))) __PYX_ERR(0, 1975, __pyx_L1_error)
+  __pyx_r = __pyx_pf_9adios_mpi_6writer___init__(((struct __pyx_obj_9adios_mpi_writer *)__pyx_v_self), __pyx_v_fname, __pyx_v_is_noxml, __pyx_v_mode, __pyx_v_stats, __pyx_v_comm, __pyx_v_method, __pyx_v_method_params);
 
-  /* "adios_mpi.pyx":1960
+  /* "adios_mpi.pyx":1969
  *             return self.timeaggregation_buffersize
  * 
  *     def __init__(self, str fname,             # <<<<<<<<<<<<<<
@@ -31338,28 +32646,28 @@ static int __pyx_pw_9adios_mpi_6writer_1__init__(PyObject *__pyx_v_self, PyObjec
   return __pyx_r;
 }
 
-static int __pyx_pf_9adios_mpi_6writer___init__(struct __pyx_obj_9adios_mpi_writer *__pyx_v_self, PyObject *__pyx_v_fname, int __pyx_v_is_noxml, PyObject *__pyx_v_mode, struct PyMPICommObject *__pyx_v_comm) {
+static int __pyx_pf_9adios_mpi_6writer___init__(struct __pyx_obj_9adios_mpi_writer *__pyx_v_self, PyObject *__pyx_v_fname, int __pyx_v_is_noxml, PyObject *__pyx_v_mode, int __pyx_v_stats, struct PyMPICommObject *__pyx_v_comm, PyObject *__pyx_v_method, PyObject *__pyx_v_method_params) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   struct __pyx_opt_args_9adios_mpi_init_noxml __pyx_t_2;
   __Pyx_RefNannySetupContext("__init__", 0);
 
-  /* "adios_mpi.pyx":1964
- *                  str mode = "w",
- *                  MPI.Comm comm = MPI.COMM_WORLD):
+  /* "adios_mpi.pyx":1976
+ *                  str method = "POSIX1",
+ *                  str method_params = ""):
  *         self.gid = 0             # <<<<<<<<<<<<<<
  *         self.fname = fname
- *         self.method = ""
+ *         self.method = method
  */
   __pyx_v_self->gid = 0;
 
-  /* "adios_mpi.pyx":1965
- *                  MPI.Comm comm = MPI.COMM_WORLD):
+  /* "adios_mpi.pyx":1977
+ *                  str method_params = ""):
  *         self.gid = 0
  *         self.fname = fname             # <<<<<<<<<<<<<<
- *         self.method = ""
- *         self.method_params = ""
+ *         self.method = method
+ *         self.method_params = method_params
  */
   __Pyx_INCREF(__pyx_v_fname);
   __Pyx_GIVEREF(__pyx_v_fname);
@@ -31367,43 +32675,43 @@ static int __pyx_pf_9adios_mpi_6writer___init__(struct __pyx_obj_9adios_mpi_writ
   __Pyx_DECREF(__pyx_v_self->fname);
   __pyx_v_self->fname = __pyx_v_fname;
 
-  /* "adios_mpi.pyx":1966
+  /* "adios_mpi.pyx":1978
  *         self.gid = 0
  *         self.fname = fname
- *         self.method = ""             # <<<<<<<<<<<<<<
- *         self.method_params = ""
+ *         self.method = method             # <<<<<<<<<<<<<<
+ *         self.method_params = method_params
  *         self.is_noxml = is_noxml
  */
-  __Pyx_INCREF(__pyx_kp_s__10);
-  __Pyx_GIVEREF(__pyx_kp_s__10);
+  __Pyx_INCREF(__pyx_v_method);
+  __Pyx_GIVEREF(__pyx_v_method);
   __Pyx_GOTREF(__pyx_v_self->method);
   __Pyx_DECREF(__pyx_v_self->method);
-  __pyx_v_self->method = __pyx_kp_s__10;
+  __pyx_v_self->method = __pyx_v_method;
 
-  /* "adios_mpi.pyx":1967
+  /* "adios_mpi.pyx":1979
  *         self.fname = fname
- *         self.method = ""
- *         self.method_params = ""             # <<<<<<<<<<<<<<
+ *         self.method = method
+ *         self.method_params = method_params             # <<<<<<<<<<<<<<
  *         self.is_noxml = is_noxml
  *         self.mode = mode
  */
-  __Pyx_INCREF(__pyx_kp_s__10);
-  __Pyx_GIVEREF(__pyx_kp_s__10);
+  __Pyx_INCREF(__pyx_v_method_params);
+  __Pyx_GIVEREF(__pyx_v_method_params);
   __Pyx_GOTREF(__pyx_v_self->method_params);
   __Pyx_DECREF(__pyx_v_self->method_params);
-  __pyx_v_self->method_params = __pyx_kp_s__10;
+  __pyx_v_self->method_params = __pyx_v_method_params;
 
-  /* "adios_mpi.pyx":1968
- *         self.method = ""
- *         self.method_params = ""
+  /* "adios_mpi.pyx":1980
+ *         self.method = method
+ *         self.method_params = method_params
  *         self.is_noxml = is_noxml             # <<<<<<<<<<<<<<
  *         self.mode = mode
  *         self.comm = comm
  */
   __pyx_v_self->is_noxml = __pyx_v_is_noxml;
 
-  /* "adios_mpi.pyx":1969
- *         self.method_params = ""
+  /* "adios_mpi.pyx":1981
+ *         self.method_params = method_params
  *         self.is_noxml = is_noxml
  *         self.mode = mode             # <<<<<<<<<<<<<<
  *         self.comm = comm
@@ -31415,7 +32723,7 @@ static int __pyx_pf_9adios_mpi_6writer___init__(struct __pyx_obj_9adios_mpi_writ
   __Pyx_DECREF(__pyx_v_self->mode);
   __pyx_v_self->mode = __pyx_v_mode;
 
-  /* "adios_mpi.pyx":1970
+  /* "adios_mpi.pyx":1982
  *         self.is_noxml = is_noxml
  *         self.mode = mode
  *         self.comm = comm             # <<<<<<<<<<<<<<
@@ -31428,14 +32736,14 @@ static int __pyx_pf_9adios_mpi_6writer___init__(struct __pyx_obj_9adios_mpi_writ
   __Pyx_DECREF(((PyObject *)__pyx_v_self->comm));
   __pyx_v_self->comm = __pyx_v_comm;
 
-  /* "adios_mpi.pyx":1971
+  /* "adios_mpi.pyx":1983
  *         self.mode = mode
  *         self.comm = comm
  *         self.vars = dict()             # <<<<<<<<<<<<<<
  *         self.attrs = dict()
  *         self.timeaggregation_buffersize = 0
  */
-  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1971, __pyx_L1_error)
+  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1983, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_self->vars);
@@ -31443,14 +32751,14 @@ static int __pyx_pf_9adios_mpi_6writer___init__(struct __pyx_obj_9adios_mpi_writ
   __pyx_v_self->vars = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":1972
+  /* "adios_mpi.pyx":1984
  *         self.comm = comm
  *         self.vars = dict()
  *         self.attrs = dict()             # <<<<<<<<<<<<<<
  *         self.timeaggregation_buffersize = 0
- * 
+ *         self.stats = stats
  */
-  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1972, __pyx_L1_error)
+  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1984, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_self->attrs);
@@ -31458,17 +32766,26 @@ static int __pyx_pf_9adios_mpi_6writer___init__(struct __pyx_obj_9adios_mpi_writ
   __pyx_v_self->attrs = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":1973
+  /* "adios_mpi.pyx":1985
  *         self.vars = dict()
  *         self.attrs = dict()
  *         self.timeaggregation_buffersize = 0             # <<<<<<<<<<<<<<
+ *         self.stats = stats
  * 
- *         init_noxml(comm)
  */
   __pyx_v_self->timeaggregation_buffersize = 0;
 
-  /* "adios_mpi.pyx":1975
+  /* "adios_mpi.pyx":1986
+ *         self.attrs = dict()
  *         self.timeaggregation_buffersize = 0
+ *         self.stats = stats             # <<<<<<<<<<<<<<
+ * 
+ *         init_noxml(comm)
+ */
+  __pyx_v_self->stats = __pyx_v_stats;
+
+  /* "adios_mpi.pyx":1988
+ *         self.stats = stats
  * 
  *         init_noxml(comm)             # <<<<<<<<<<<<<<
  *     ##def __var_factory__(self, name, value):
@@ -31478,7 +32795,7 @@ static int __pyx_pf_9adios_mpi_6writer___init__(struct __pyx_obj_9adios_mpi_writ
   __pyx_t_2.comm = __pyx_v_comm;
   __pyx_f_9adios_mpi_init_noxml(0, &__pyx_t_2); 
 
-  /* "adios_mpi.pyx":1960
+  /* "adios_mpi.pyx":1969
  *             return self.timeaggregation_buffersize
  * 
  *     def __init__(self, str fname,             # <<<<<<<<<<<<<<
@@ -31498,27 +32815,28 @@ static int __pyx_pf_9adios_mpi_6writer___init__(struct __pyx_obj_9adios_mpi_writ
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":1982
+/* "adios_mpi.pyx":1995
  *     ##    print "attr_factory:", name, value
  * 
  *     def declare_group(self, str gname = None,             # <<<<<<<<<<<<<<
  *                       str method = "POSIX1",
- *                       str method_params = ""):
+ *                       str method_params = "",
  */
 
 /* Python wrapper */
 static PyObject *__pyx_pw_9adios_mpi_6writer_3declare_group(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_9adios_mpi_6writer_2declare_group[] = "writer.declare_group(self, str gname=None, str method='POSIX1', str method_params='')\n\n        Define a group associated with the file.\n\n        Args:\n            gname (str): group name.\n            method (str, optional): Adios write method (default: 'POSIX1')\n            method_params (str, optional): parameters for the write method (default: '')\n\n        Example:\n\n        >>>  fw.declare_group('group', method='MP [...]
+static char __pyx_doc_9adios_mpi_6writer_2declare_group[] = "writer.declare_group(self, str gname=None, str method='POSIX1', str method_params='', int stats=adios_stat_default)\n\n        Define a group associated with the file.\n\n        Args:\n            gname (str): group name.\n            method (str, optional): Adios write method (default: 'POSIX1')\n            method_params (str, optional): parameters for the write method (default: '')\n            stats (int, optional): statis [...]
 static PyObject *__pyx_pw_9adios_mpi_6writer_3declare_group(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_gname = 0;
   PyObject *__pyx_v_method = 0;
   PyObject *__pyx_v_method_params = 0;
+  int __pyx_v_stats;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("declare_group (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gname,&__pyx_n_s_method,&__pyx_n_s_method_params,0};
-    PyObject* values[3] = {0,0,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_gname,&__pyx_n_s_method,&__pyx_n_s_method_params,&__pyx_n_s_stats,0};
+    PyObject* values[4] = {0,0,0,0};
     values[0] = ((PyObject*)Py_None);
     values[1] = ((PyObject*)__pyx_n_s_POSIX1);
     values[2] = ((PyObject*)__pyx_kp_s__10);
@@ -31526,6 +32844,7 @@ static PyObject *__pyx_pw_9adios_mpi_6writer_3declare_group(PyObject *__pyx_v_se
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
@@ -31549,12 +32868,18 @@ static PyObject *__pyx_pw_9adios_mpi_6writer_3declare_group(PyObject *__pyx_v_se
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_method_params);
           if (value) { values[2] = value; kw_args--; }
         }
+        case  3:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_stats);
+          if (value) { values[3] = value; kw_args--; }
+        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "declare_group") < 0)) __PYX_ERR(0, 1982, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "declare_group") < 0)) __PYX_ERR(0, 1995, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
@@ -31565,19 +32890,24 @@ static PyObject *__pyx_pw_9adios_mpi_6writer_3declare_group(PyObject *__pyx_v_se
     __pyx_v_gname = ((PyObject*)values[0]);
     __pyx_v_method = ((PyObject*)values[1]);
     __pyx_v_method_params = ((PyObject*)values[2]);
+    if (values[3]) {
+      __pyx_v_stats = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_stats == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1998, __pyx_L3_error)
+    } else {
+      __pyx_v_stats = __pyx_k__56;
+    }
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("declare_group", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1982, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("declare_group", 0, 0, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1995, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.writer.declare_group", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gname), (&PyString_Type), 1, "gname", 1))) __PYX_ERR(0, 1982, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_method), (&PyString_Type), 1, "method", 1))) __PYX_ERR(0, 1983, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_method_params), (&PyString_Type), 1, "method_params", 1))) __PYX_ERR(0, 1984, __pyx_L1_error)
-  __pyx_r = __pyx_pf_9adios_mpi_6writer_2declare_group(((struct __pyx_obj_9adios_mpi_writer *)__pyx_v_self), __pyx_v_gname, __pyx_v_method, __pyx_v_method_params);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gname), (&PyString_Type), 1, "gname", 1))) __PYX_ERR(0, 1995, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_method), (&PyString_Type), 1, "method", 1))) __PYX_ERR(0, 1996, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_method_params), (&PyString_Type), 1, "method_params", 1))) __PYX_ERR(0, 1997, __pyx_L1_error)
+  __pyx_r = __pyx_pf_9adios_mpi_6writer_2declare_group(((struct __pyx_obj_9adios_mpi_writer *)__pyx_v_self), __pyx_v_gname, __pyx_v_method, __pyx_v_method_params, __pyx_v_stats);
 
   /* function exit code */
   goto __pyx_L0;
@@ -31588,20 +32918,23 @@ static PyObject *__pyx_pw_9adios_mpi_6writer_3declare_group(PyObject *__pyx_v_se
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_9adios_mpi_6writer_2declare_group(struct __pyx_obj_9adios_mpi_writer *__pyx_v_self, PyObject *__pyx_v_gname, PyObject *__pyx_v_method, PyObject *__pyx_v_method_params) {
+static PyObject *__pyx_pf_9adios_mpi_6writer_2declare_group(struct __pyx_obj_9adios_mpi_writer *__pyx_v_self, PyObject *__pyx_v_gname, PyObject *__pyx_v_method, PyObject *__pyx_v_method_params, int __pyx_v_stats) {
+  PyObject *__pyx_v_rank = NULL;
+  PyObject *__pyx_v_ftmp = NULL;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   int __pyx_t_2;
   PyObject *__pyx_t_3 = NULL;
-  int64_t __pyx_t_4;
-  struct __pyx_opt_args_9adios_mpi_declare_group __pyx_t_5;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
   PyObject *__pyx_t_6 = NULL;
-  struct __pyx_opt_args_9adios_mpi_select_method __pyx_t_7;
-  PyObject *__pyx_t_8 = NULL;
+  int64_t __pyx_t_7;
+  struct __pyx_opt_args_9adios_mpi_declare_group __pyx_t_8;
+  struct __pyx_opt_args_9adios_mpi_select_method __pyx_t_9;
   __Pyx_RefNannySetupContext("declare_group", 0);
 
-  /* "adios_mpi.pyx":1998
+  /* "adios_mpi.pyx":2013
  * 
  *         """
  *         if gname is not None:             # <<<<<<<<<<<<<<
@@ -31612,7 +32945,7 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_2declare_group(struct __pyx_obj_9ad
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "adios_mpi.pyx":1999
+    /* "adios_mpi.pyx":2014
  *         """
  *         if gname is not None:
  *             self.gname = gname             # <<<<<<<<<<<<<<
@@ -31625,7 +32958,7 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_2declare_group(struct __pyx_obj_9ad
     __Pyx_DECREF(__pyx_v_self->gname);
     __pyx_v_self->gname = __pyx_v_gname;
 
-    /* "adios_mpi.pyx":1998
+    /* "adios_mpi.pyx":2013
  * 
  *         """
  *         if gname is not None:             # <<<<<<<<<<<<<<
@@ -31634,58 +32967,188 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_2declare_group(struct __pyx_obj_9ad
  */
   }
 
-  /* "adios_mpi.pyx":2001
+  /* "adios_mpi.pyx":2016
  *             self.gname = gname
  * 
  *         if self.gname is None:             # <<<<<<<<<<<<<<
- *             self.gname = "group"
- * 
+ *             rank = self.comm.Get_rank()
+ *             if rank == 0:
  */
   __pyx_t_2 = (__pyx_v_self->gname == ((PyObject*)Py_None));
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "adios_mpi.pyx":2002
+    /* "adios_mpi.pyx":2017
  * 
  *         if self.gname is None:
- *             self.gname = "group"             # <<<<<<<<<<<<<<
+ *             rank = self.comm.Get_rank()             # <<<<<<<<<<<<<<
+ *             if rank == 0:
+ *                 ftmp = tempfile.NamedTemporaryFile().name
+ */
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->comm), __pyx_n_s_Get_rank); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2017, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __pyx_t_5 = NULL;
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
+      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
+      if (likely(__pyx_t_5)) {
+        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
+        __Pyx_INCREF(__pyx_t_5);
+        __Pyx_INCREF(function);
+        __Pyx_DECREF_SET(__pyx_t_4, function);
+      }
+    }
+    if (__pyx_t_5) {
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2017, __pyx_L1_error)
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    } else {
+      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2017, __pyx_L1_error)
+    }
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __pyx_v_rank = __pyx_t_3;
+    __pyx_t_3 = 0;
+
+    /* "adios_mpi.pyx":2018
+ *         if self.gname is None:
+ *             rank = self.comm.Get_rank()
+ *             if rank == 0:             # <<<<<<<<<<<<<<
+ *                 ftmp = tempfile.NamedTemporaryFile().name
+ *             else:
+ */
+    __pyx_t_3 = __Pyx_PyInt_EqObjC(__pyx_v_rank, __pyx_int_0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2018, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 2018, __pyx_L1_error)
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    if (__pyx_t_1) {
+
+      /* "adios_mpi.pyx":2019
+ *             rank = self.comm.Get_rank()
+ *             if rank == 0:
+ *                 ftmp = tempfile.NamedTemporaryFile().name             # <<<<<<<<<<<<<<
+ *             else:
+ *                 ftmp = ""
+ */
+      __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_tempfile); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2019, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_NamedTemporaryFile); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2019, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_5);
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      __pyx_t_4 = NULL;
+      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
+        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
+        if (likely(__pyx_t_4)) {
+          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
+          __Pyx_INCREF(__pyx_t_4);
+          __Pyx_INCREF(function);
+          __Pyx_DECREF_SET(__pyx_t_5, function);
+        }
+      }
+      if (__pyx_t_4) {
+        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2019, __pyx_L1_error)
+        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      } else {
+        __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2019, __pyx_L1_error)
+      }
+      __Pyx_GOTREF(__pyx_t_3);
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_name); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2019, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_5);
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __pyx_v_ftmp = __pyx_t_5;
+      __pyx_t_5 = 0;
+
+      /* "adios_mpi.pyx":2018
+ *         if self.gname is None:
+ *             rank = self.comm.Get_rank()
+ *             if rank == 0:             # <<<<<<<<<<<<<<
+ *                 ftmp = tempfile.NamedTemporaryFile().name
+ *             else:
+ */
+      goto __pyx_L5;
+    }
+
+    /* "adios_mpi.pyx":2021
+ *                 ftmp = tempfile.NamedTemporaryFile().name
+ *             else:
+ *                 ftmp = ""             # <<<<<<<<<<<<<<
+ *             ftmp = self.comm.bcast(ftmp, root=0)
+ *             self.gname = 'group'+ftmp;
+ */
+    /*else*/ {
+      __Pyx_INCREF(__pyx_kp_s__10);
+      __pyx_v_ftmp = __pyx_kp_s__10;
+    }
+    __pyx_L5:;
+
+    /* "adios_mpi.pyx":2022
+ *             else:
+ *                 ftmp = ""
+ *             ftmp = self.comm.bcast(ftmp, root=0)             # <<<<<<<<<<<<<<
+ *             self.gname = 'group'+ftmp;
+ * 
+ */
+    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->comm), __pyx_n_s_bcast); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2022, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2022, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_INCREF(__pyx_v_ftmp);
+    __Pyx_GIVEREF(__pyx_v_ftmp);
+    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_ftmp);
+    __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2022, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_root, __pyx_int_0) < 0) __PYX_ERR(0, 2022, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2022, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __Pyx_DECREF_SET(__pyx_v_ftmp, __pyx_t_6);
+    __pyx_t_6 = 0;
+
+    /* "adios_mpi.pyx":2023
+ *                 ftmp = ""
+ *             ftmp = self.comm.bcast(ftmp, root=0)
+ *             self.gname = 'group'+ftmp;             # <<<<<<<<<<<<<<
  * 
- *         self.gid = declare_group(self.gname, "", adios_stat_default)
+ *         self.gid = declare_group(self.gname, "", stats)
  */
-    __Pyx_INCREF(__pyx_n_s_group);
-    __Pyx_GIVEREF(__pyx_n_s_group);
+    __pyx_t_6 = PyNumber_Add(__pyx_n_s_group, __pyx_v_ftmp); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2023, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
+    if (!(likely(PyString_CheckExact(__pyx_t_6))||((__pyx_t_6) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_6)->tp_name), 0))) __PYX_ERR(0, 2023, __pyx_L1_error)
+    __Pyx_GIVEREF(__pyx_t_6);
     __Pyx_GOTREF(__pyx_v_self->gname);
     __Pyx_DECREF(__pyx_v_self->gname);
-    __pyx_v_self->gname = __pyx_n_s_group;
+    __pyx_v_self->gname = ((PyObject*)__pyx_t_6);
+    __pyx_t_6 = 0;
 
-    /* "adios_mpi.pyx":2001
+    /* "adios_mpi.pyx":2016
  *             self.gname = gname
  * 
  *         if self.gname is None:             # <<<<<<<<<<<<<<
- *             self.gname = "group"
- * 
+ *             rank = self.comm.Get_rank()
+ *             if rank == 0:
  */
   }
 
-  /* "adios_mpi.pyx":2004
- *             self.gname = "group"
+  /* "adios_mpi.pyx":2025
+ *             self.gname = 'group'+ftmp;
  * 
- *         self.gid = declare_group(self.gname, "", adios_stat_default)             # <<<<<<<<<<<<<<
+ *         self.gid = declare_group(self.gname, "", stats)             # <<<<<<<<<<<<<<
  *         self.method = method
  *         self.method_params = method_params
  */
-  __pyx_t_3 = __pyx_v_self->gname;
-  __Pyx_INCREF(__pyx_t_3);
-  __pyx_t_5.__pyx_n = 2;
-  __pyx_t_5.time_index = __pyx_kp_s__10;
-  __pyx_t_5.stats = adios_stat_default;
-  __pyx_t_4 = __pyx_f_9adios_mpi_declare_group(((PyObject*)__pyx_t_3), 0, &__pyx_t_5); 
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_v_self->gid = __pyx_t_4;
+  __pyx_t_6 = __pyx_v_self->gname;
+  __Pyx_INCREF(__pyx_t_6);
+  __pyx_t_8.__pyx_n = 2;
+  __pyx_t_8.time_index = __pyx_kp_s__10;
+  __pyx_t_8.stats = __pyx_v_stats;
+  __pyx_t_7 = __pyx_f_9adios_mpi_declare_group(((PyObject*)__pyx_t_6), 0, &__pyx_t_8); 
+  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+  __pyx_v_self->gid = __pyx_t_7;
 
-  /* "adios_mpi.pyx":2005
+  /* "adios_mpi.pyx":2026
  * 
- *         self.gid = declare_group(self.gname, "", adios_stat_default)
+ *         self.gid = declare_group(self.gname, "", stats)
  *         self.method = method             # <<<<<<<<<<<<<<
  *         self.method_params = method_params
  *         select_method(self.gid, self.method, self.method_params, "")
@@ -31696,8 +33159,8 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_2declare_group(struct __pyx_obj_9ad
   __Pyx_DECREF(__pyx_v_self->method);
   __pyx_v_self->method = __pyx_v_method;
 
-  /* "adios_mpi.pyx":2006
- *         self.gid = declare_group(self.gname, "", adios_stat_default)
+  /* "adios_mpi.pyx":2027
+ *         self.gid = declare_group(self.gname, "", stats)
  *         self.method = method
  *         self.method_params = method_params             # <<<<<<<<<<<<<<
  *         select_method(self.gid, self.method, self.method_params, "")
@@ -31709,59 +33172,59 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_2declare_group(struct __pyx_obj_9ad
   __Pyx_DECREF(__pyx_v_self->method_params);
   __pyx_v_self->method_params = __pyx_v_method_params;
 
-  /* "adios_mpi.pyx":2007
+  /* "adios_mpi.pyx":2028
  *         self.method = method
  *         self.method_params = method_params
  *         select_method(self.gid, self.method, self.method_params, "")             # <<<<<<<<<<<<<<
  *         self.set_time_aggregation()
  * 
  */
-  __pyx_t_3 = __pyx_v_self->method;
-  __Pyx_INCREF(__pyx_t_3);
-  __pyx_t_6 = __pyx_v_self->method_params;
+  __pyx_t_6 = __pyx_v_self->method;
   __Pyx_INCREF(__pyx_t_6);
-  __pyx_t_7.__pyx_n = 2;
-  __pyx_t_7.parameters = ((PyObject*)__pyx_t_6);
-  __pyx_t_7.base_path = __pyx_kp_s__10;
-  __pyx_f_9adios_mpi_select_method(__pyx_v_self->gid, ((PyObject*)__pyx_t_3), 0, &__pyx_t_7); 
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_4 = __pyx_v_self->method_params;
+  __Pyx_INCREF(__pyx_t_4);
+  __pyx_t_9.__pyx_n = 2;
+  __pyx_t_9.parameters = ((PyObject*)__pyx_t_4);
+  __pyx_t_9.base_path = __pyx_kp_s__10;
+  __pyx_f_9adios_mpi_select_method(__pyx_v_self->gid, ((PyObject*)__pyx_t_6), 0, &__pyx_t_9); 
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "adios_mpi.pyx":2008
+  /* "adios_mpi.pyx":2029
  *         self.method_params = method_params
  *         select_method(self.gid, self.method, self.method_params, "")
  *         self.set_time_aggregation()             # <<<<<<<<<<<<<<
  * 
  *     def set_time_aggregation(self, buffer_size = None):
  */
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_set_time_aggregation); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2008, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_8 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
-    __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_3);
-    if (likely(__pyx_t_8)) {
-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
-      __Pyx_INCREF(__pyx_t_8);
+  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_set_time_aggregation); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2029, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_6);
+  __pyx_t_3 = NULL;
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
+    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_6);
+    if (likely(__pyx_t_3)) {
+      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
+      __Pyx_INCREF(__pyx_t_3);
       __Pyx_INCREF(function);
-      __Pyx_DECREF_SET(__pyx_t_3, function);
+      __Pyx_DECREF_SET(__pyx_t_6, function);
     }
   }
-  if (__pyx_t_8) {
-    __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_8); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2008, __pyx_L1_error)
-    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  if (__pyx_t_3) {
+    __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2029, __pyx_L1_error)
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   } else {
-    __pyx_t_6 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2008, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_CallNoArg(__pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2029, __pyx_L1_error)
   }
-  __Pyx_GOTREF(__pyx_t_6);
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "adios_mpi.pyx":1982
+  /* "adios_mpi.pyx":1995
  *     ##    print "attr_factory:", name, value
  * 
  *     def declare_group(self, str gname = None,             # <<<<<<<<<<<<<<
  *                       str method = "POSIX1",
- *                       str method_params = ""):
+ *                       str method_params = "",
  */
 
   /* function exit code */
@@ -31769,17 +33232,20 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_2declare_group(struct __pyx_obj_9ad
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_5);
   __Pyx_XDECREF(__pyx_t_6);
-  __Pyx_XDECREF(__pyx_t_8);
   __Pyx_AddTraceback("adios_mpi.writer.declare_group", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_rank);
+  __Pyx_XDECREF(__pyx_v_ftmp);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":2010
+/* "adios_mpi.pyx":2031
  *         self.set_time_aggregation()
  * 
  *     def set_time_aggregation(self, buffer_size = None):             # <<<<<<<<<<<<<<
@@ -31816,7 +33282,7 @@ static PyObject *__pyx_pw_9adios_mpi_6writer_5set_time_aggregation(PyObject *__p
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_time_aggregation") < 0)) __PYX_ERR(0, 2010, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_time_aggregation") < 0)) __PYX_ERR(0, 2031, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -31829,7 +33295,7 @@ static PyObject *__pyx_pw_9adios_mpi_6writer_5set_time_aggregation(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("set_time_aggregation", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2010, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("set_time_aggregation", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2031, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.writer.set_time_aggregation", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -31850,7 +33316,7 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_4set_time_aggregation(struct __pyx_
   uint64_t __pyx_t_3;
   __Pyx_RefNannySetupContext("set_time_aggregation", 0);
 
-  /* "adios_mpi.pyx":2014
+  /* "adios_mpi.pyx":2035
  *         Set time-aggregation buffersize.
  *         """
  *         if buffer_size is not None:             # <<<<<<<<<<<<<<
@@ -31861,17 +33327,17 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_4set_time_aggregation(struct __pyx_
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "adios_mpi.pyx":2015
+    /* "adios_mpi.pyx":2036
  *         """
  *         if buffer_size is not None:
  *             self.timeaggregation_buffersize = buffer_size             # <<<<<<<<<<<<<<
  *         if self.gid > 0:
  *             set_time_aggregation (self.gid, self.timeaggregation_buffersize, 0);
  */
-    __pyx_t_3 = __Pyx_PyInt_As_uint64_t(__pyx_v_buffer_size); if (unlikely((__pyx_t_3 == (uint64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 2015, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyInt_As_uint64_t(__pyx_v_buffer_size); if (unlikely((__pyx_t_3 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2036, __pyx_L1_error)
     __pyx_v_self->timeaggregation_buffersize = __pyx_t_3;
 
-    /* "adios_mpi.pyx":2014
+    /* "adios_mpi.pyx":2035
  *         Set time-aggregation buffersize.
  *         """
  *         if buffer_size is not None:             # <<<<<<<<<<<<<<
@@ -31880,7 +33346,7 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_4set_time_aggregation(struct __pyx_
  */
   }
 
-  /* "adios_mpi.pyx":2016
+  /* "adios_mpi.pyx":2037
  *         if buffer_size is not None:
  *             self.timeaggregation_buffersize = buffer_size
  *         if self.gid > 0:             # <<<<<<<<<<<<<<
@@ -31890,7 +33356,7 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_4set_time_aggregation(struct __pyx_
   __pyx_t_2 = ((__pyx_v_self->gid > 0) != 0);
   if (__pyx_t_2) {
 
-    /* "adios_mpi.pyx":2017
+    /* "adios_mpi.pyx":2038
  *             self.timeaggregation_buffersize = buffer_size
  *         if self.gid > 0:
  *             set_time_aggregation (self.gid, self.timeaggregation_buffersize, 0);             # <<<<<<<<<<<<<<
@@ -31899,7 +33365,7 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_4set_time_aggregation(struct __pyx_
  */
     __pyx_f_9adios_mpi_set_time_aggregation(__pyx_v_self->gid, __pyx_v_self->timeaggregation_buffersize, 0, 0);
 
-    /* "adios_mpi.pyx":2016
+    /* "adios_mpi.pyx":2037
  *         if buffer_size is not None:
  *             self.timeaggregation_buffersize = buffer_size
  *         if self.gid > 0:             # <<<<<<<<<<<<<<
@@ -31908,7 +33374,7 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_4set_time_aggregation(struct __pyx_
  */
   }
 
-  /* "adios_mpi.pyx":2010
+  /* "adios_mpi.pyx":2031
  *         self.set_time_aggregation()
  * 
  *     def set_time_aggregation(self, buffer_size = None):             # <<<<<<<<<<<<<<
@@ -31928,7 +33394,7 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_4set_time_aggregation(struct __pyx_
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":2019
+/* "adios_mpi.pyx":2040
  *             set_time_aggregation (self.gid, self.timeaggregation_buffersize, 0);
  * 
  *     def define_var(self, str varname,             # <<<<<<<<<<<<<<
@@ -31951,11 +33417,11 @@ static PyObject *__pyx_pw_9adios_mpi_6writer_7define_var(PyObject *__pyx_v_self,
   {
     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_varname,&__pyx_n_s_ldim,&__pyx_n_s_gdim,&__pyx_n_s_offset,&__pyx_n_s_transform,0};
     PyObject* values[5] = {0,0,0,0,0};
-    values[1] = __pyx_k__55;
-    values[2] = __pyx_k__56;
-    values[3] = __pyx_k__57;
+    values[1] = __pyx_k__57;
+    values[2] = __pyx_k__58;
+    values[3] = __pyx_k__59;
 
-    /* "adios_mpi.pyx":2023
+    /* "adios_mpi.pyx":2044
  *                    gdim = tuple(),
  *                    offset = tuple(),
  *                    transform = None):             # <<<<<<<<<<<<<<
@@ -32002,7 +33468,7 @@ static PyObject *__pyx_pw_9adios_mpi_6writer_7define_var(PyObject *__pyx_v_self,
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_var") < 0)) __PYX_ERR(0, 2019, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_var") < 0)) __PYX_ERR(0, 2040, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -32023,16 +33489,16 @@ static PyObject *__pyx_pw_9adios_mpi_6writer_7define_var(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("define_var", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2019, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("define_var", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2040, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.writer.define_var", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_varname), (&PyString_Type), 1, "varname", 1))) __PYX_ERR(0, 2019, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_varname), (&PyString_Type), 1, "varname", 1))) __PYX_ERR(0, 2040, __pyx_L1_error)
   __pyx_r = __pyx_pf_9adios_mpi_6writer_6define_var(((struct __pyx_obj_9adios_mpi_writer *)__pyx_v_self), __pyx_v_varname, __pyx_v_ldim, __pyx_v_gdim, __pyx_v_offset, __pyx_v_transform);
 
-  /* "adios_mpi.pyx":2019
+  /* "adios_mpi.pyx":2040
  *             set_time_aggregation (self.gid, self.timeaggregation_buffersize, 0);
  * 
  *     def define_var(self, str varname,             # <<<<<<<<<<<<<<
@@ -32057,14 +33523,14 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_6define_var(struct __pyx_obj_9adios
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("define_var", 0);
 
-  /* "adios_mpi.pyx":2041
+  /* "adios_mpi.pyx":2062
  * 
  *         """
  *         self.vars[varname] = varinfo(varname, ldim, gdim, offset, transform=transform)             # <<<<<<<<<<<<<<
  * 
  *     def define_attr(self, str attrname):
  */
-  __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2041, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2062, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_v_varname);
   __Pyx_GIVEREF(__pyx_v_varname);
@@ -32078,21 +33544,21 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_6define_var(struct __pyx_obj_9adios
   __Pyx_INCREF(__pyx_v_offset);
   __Pyx_GIVEREF(__pyx_v_offset);
   PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_v_offset);
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2041, __pyx_L1_error)
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2062, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_transform, __pyx_v_transform) < 0) __PYX_ERR(0, 2041, __pyx_L1_error)
-  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_9adios_mpi_varinfo), __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2041, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_transform, __pyx_v_transform) < 0) __PYX_ERR(0, 2062, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_9adios_mpi_varinfo), __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2062, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   if (unlikely(__pyx_v_self->vars == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-    __PYX_ERR(0, 2041, __pyx_L1_error)
+    __PYX_ERR(0, 2062, __pyx_L1_error)
   }
-  if (unlikely(PyDict_SetItem(__pyx_v_self->vars, __pyx_v_varname, __pyx_t_3) < 0)) __PYX_ERR(0, 2041, __pyx_L1_error)
+  if (unlikely(PyDict_SetItem(__pyx_v_self->vars, __pyx_v_varname, __pyx_t_3) < 0)) __PYX_ERR(0, 2062, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "adios_mpi.pyx":2019
+  /* "adios_mpi.pyx":2040
  *             set_time_aggregation (self.gid, self.timeaggregation_buffersize, 0);
  * 
  *     def define_var(self, str varname,             # <<<<<<<<<<<<<<
@@ -32115,7 +33581,7 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_6define_var(struct __pyx_obj_9adios
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":2043
+/* "adios_mpi.pyx":2064
  *         self.vars[varname] = varinfo(varname, ldim, gdim, offset, transform=transform)
  * 
  *     def define_attr(self, str attrname):             # <<<<<<<<<<<<<<
@@ -32130,7 +33596,7 @@ static PyObject *__pyx_pw_9adios_mpi_6writer_9define_attr(PyObject *__pyx_v_self
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("define_attr (wrapper)", 0);
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_attrname), (&PyString_Type), 1, "attrname", 1))) __PYX_ERR(0, 2043, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_attrname), (&PyString_Type), 1, "attrname", 1))) __PYX_ERR(0, 2064, __pyx_L1_error)
   __pyx_r = __pyx_pf_9adios_mpi_6writer_8define_attr(((struct __pyx_obj_9adios_mpi_writer *)__pyx_v_self), ((PyObject*)__pyx_v_attrname));
 
   /* function exit code */
@@ -32150,33 +33616,33 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_8define_attr(struct __pyx_obj_9adio
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("define_attr", 0);
 
-  /* "adios_mpi.pyx":2051
+  /* "adios_mpi.pyx":2072
  *         """
  * 
  *         self.attrs[attrname] = attrinfo(attrname, is_static=True)             # <<<<<<<<<<<<<<
  * 
  *     def define_dynamic_attr(self, str attrname,
  */
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2051, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2072, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_v_attrname);
   __Pyx_GIVEREF(__pyx_v_attrname);
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_attrname);
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2051, __pyx_L1_error)
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2072, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_is_static, Py_True) < 0) __PYX_ERR(0, 2051, __pyx_L1_error)
-  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_9adios_mpi_attrinfo), __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2051, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_is_static, Py_True) < 0) __PYX_ERR(0, 2072, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_9adios_mpi_attrinfo), __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2072, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   if (unlikely(__pyx_v_self->attrs == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-    __PYX_ERR(0, 2051, __pyx_L1_error)
+    __PYX_ERR(0, 2072, __pyx_L1_error)
   }
-  if (unlikely(PyDict_SetItem(__pyx_v_self->attrs, __pyx_v_attrname, __pyx_t_3) < 0)) __PYX_ERR(0, 2051, __pyx_L1_error)
+  if (unlikely(PyDict_SetItem(__pyx_v_self->attrs, __pyx_v_attrname, __pyx_t_3) < 0)) __PYX_ERR(0, 2072, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "adios_mpi.pyx":2043
+  /* "adios_mpi.pyx":2064
  *         self.vars[varname] = varinfo(varname, ldim, gdim, offset, transform=transform)
  * 
  *     def define_attr(self, str attrname):             # <<<<<<<<<<<<<<
@@ -32199,7 +33665,7 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_8define_attr(struct __pyx_obj_9adio
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":2053
+/* "adios_mpi.pyx":2074
  *         self.attrs[attrname] = attrinfo(attrname, is_static=True)
  * 
  *     def define_dynamic_attr(self, str attrname,             # <<<<<<<<<<<<<<
@@ -32238,16 +33704,16 @@ static PyObject *__pyx_pw_9adios_mpi_6writer_11define_dynamic_attr(PyObject *__p
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_varname)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_dynamic_attr", 1, 3, 3, 1); __PYX_ERR(0, 2053, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_dynamic_attr", 1, 3, 3, 1); __PYX_ERR(0, 2074, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_dtype)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("define_dynamic_attr", 1, 3, 3, 2); __PYX_ERR(0, 2053, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("define_dynamic_attr", 1, 3, 3, 2); __PYX_ERR(0, 2074, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_dynamic_attr") < 0)) __PYX_ERR(0, 2053, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_dynamic_attr") < 0)) __PYX_ERR(0, 2074, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -32262,14 +33728,14 @@ static PyObject *__pyx_pw_9adios_mpi_6writer_11define_dynamic_attr(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("define_dynamic_attr", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2053, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("define_dynamic_attr", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2074, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.writer.define_dynamic_attr", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_attrname), (&PyString_Type), 1, "attrname", 1))) __PYX_ERR(0, 2053, __pyx_L1_error)
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_varname), (&PyString_Type), 1, "varname", 1))) __PYX_ERR(0, 2054, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_attrname), (&PyString_Type), 1, "attrname", 1))) __PYX_ERR(0, 2074, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_varname), (&PyString_Type), 1, "varname", 1))) __PYX_ERR(0, 2075, __pyx_L1_error)
   __pyx_r = __pyx_pf_9adios_mpi_6writer_10define_dynamic_attr(((struct __pyx_obj_9adios_mpi_writer *)__pyx_v_self), __pyx_v_attrname, __pyx_v_varname, __pyx_v_dtype);
 
   /* function exit code */
@@ -32289,14 +33755,14 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_10define_dynamic_attr(struct __pyx_
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("define_dynamic_attr", 0);
 
-  /* "adios_mpi.pyx":2056
+  /* "adios_mpi.pyx":2077
  *                             str varname,
  *                             dtype):
  *         self.attrs[attrname] = attrinfo(attrname, varname, dtype, is_static=False)             # <<<<<<<<<<<<<<
  * 
  *     def __setitem__(self, name, val):
  */
-  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2056, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2077, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_v_attrname);
   __Pyx_GIVEREF(__pyx_v_attrname);
@@ -32307,21 +33773,21 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_10define_dynamic_attr(struct __pyx_
   __Pyx_INCREF(__pyx_v_dtype);
   __Pyx_GIVEREF(__pyx_v_dtype);
   PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_dtype);
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2056, __pyx_L1_error)
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2077, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_is_static, Py_False) < 0) __PYX_ERR(0, 2056, __pyx_L1_error)
-  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_9adios_mpi_attrinfo), __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2056, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_is_static, Py_False) < 0) __PYX_ERR(0, 2077, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_9adios_mpi_attrinfo), __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2077, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   if (unlikely(__pyx_v_self->attrs == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-    __PYX_ERR(0, 2056, __pyx_L1_error)
+    __PYX_ERR(0, 2077, __pyx_L1_error)
   }
-  if (unlikely(PyDict_SetItem(__pyx_v_self->attrs, __pyx_v_attrname, __pyx_t_3) < 0)) __PYX_ERR(0, 2056, __pyx_L1_error)
+  if (unlikely(PyDict_SetItem(__pyx_v_self->attrs, __pyx_v_attrname, __pyx_t_3) < 0)) __PYX_ERR(0, 2077, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "adios_mpi.pyx":2053
+  /* "adios_mpi.pyx":2074
  *         self.attrs[attrname] = attrinfo(attrname, is_static=True)
  * 
  *     def define_dynamic_attr(self, str attrname,             # <<<<<<<<<<<<<<
@@ -32344,7 +33810,7 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_10define_dynamic_attr(struct __pyx_
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":2058
+/* "adios_mpi.pyx":2079
  *         self.attrs[attrname] = attrinfo(attrname, varname, dtype, is_static=False)
  * 
  *     def __setitem__(self, name, val):             # <<<<<<<<<<<<<<
@@ -32377,7 +33843,7 @@ static int __pyx_pf_9adios_mpi_6writer_12__setitem__(struct __pyx_obj_9adios_mpi
   PyObject *__pyx_t_6 = NULL;
   __Pyx_RefNannySetupContext("__setitem__", 0);
 
-  /* "adios_mpi.pyx":2059
+  /* "adios_mpi.pyx":2080
  * 
  *     def __setitem__(self, name, val):
  *         if self.vars.has_key(name):             # <<<<<<<<<<<<<<
@@ -32386,13 +33852,13 @@ static int __pyx_pf_9adios_mpi_6writer_12__setitem__(struct __pyx_obj_9adios_mpi
  */
   if (unlikely(__pyx_v_self->vars == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "has_key");
-    __PYX_ERR(0, 2059, __pyx_L1_error)
+    __PYX_ERR(0, 2080, __pyx_L1_error)
   }
-  __pyx_t_1 = PyDict_Contains(__pyx_v_self->vars, __pyx_v_name); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 2059, __pyx_L1_error)
+  __pyx_t_1 = PyDict_Contains(__pyx_v_self->vars, __pyx_v_name); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 2080, __pyx_L1_error)
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "adios_mpi.pyx":2060
+    /* "adios_mpi.pyx":2081
  *     def __setitem__(self, name, val):
  *         if self.vars.has_key(name):
  *             if not isinstance(val, varinfo):             # <<<<<<<<<<<<<<
@@ -32403,7 +33869,7 @@ static int __pyx_pf_9adios_mpi_6writer_12__setitem__(struct __pyx_obj_9adios_mpi
     __pyx_t_1 = ((!(__pyx_t_2 != 0)) != 0);
     if (__pyx_t_1) {
 
-      /* "adios_mpi.pyx":2061
+      /* "adios_mpi.pyx":2082
  *         if self.vars.has_key(name):
  *             if not isinstance(val, varinfo):
  *                 self.vars[name].value = val             # <<<<<<<<<<<<<<
@@ -32412,14 +33878,14 @@ static int __pyx_pf_9adios_mpi_6writer_12__setitem__(struct __pyx_obj_9adios_mpi
  */
       if (unlikely(__pyx_v_self->vars == Py_None)) {
         PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-        __PYX_ERR(0, 2061, __pyx_L1_error)
+        __PYX_ERR(0, 2082, __pyx_L1_error)
       }
-      __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_v_self->vars, __pyx_v_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2061, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_v_self->vars, __pyx_v_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2082, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      if (__Pyx_PyObject_SetAttrStr(__pyx_t_3, __pyx_n_s_value, __pyx_v_val) < 0) __PYX_ERR(0, 2061, __pyx_L1_error)
+      if (__Pyx_PyObject_SetAttrStr(__pyx_t_3, __pyx_n_s_value, __pyx_v_val) < 0) __PYX_ERR(0, 2082, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-      /* "adios_mpi.pyx":2060
+      /* "adios_mpi.pyx":2081
  *     def __setitem__(self, name, val):
  *         if self.vars.has_key(name):
  *             if not isinstance(val, varinfo):             # <<<<<<<<<<<<<<
@@ -32429,7 +33895,7 @@ static int __pyx_pf_9adios_mpi_6writer_12__setitem__(struct __pyx_obj_9adios_mpi
       goto __pyx_L4;
     }
 
-    /* "adios_mpi.pyx":2063
+    /* "adios_mpi.pyx":2084
  *                 self.vars[name].value = val
  *             else:
  *                 self.vars[name] = val             # <<<<<<<<<<<<<<
@@ -32439,13 +33905,13 @@ static int __pyx_pf_9adios_mpi_6writer_12__setitem__(struct __pyx_obj_9adios_mpi
     /*else*/ {
       if (unlikely(__pyx_v_self->vars == Py_None)) {
         PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-        __PYX_ERR(0, 2063, __pyx_L1_error)
+        __PYX_ERR(0, 2084, __pyx_L1_error)
       }
-      if (unlikely(PyDict_SetItem(__pyx_v_self->vars, __pyx_v_name, __pyx_v_val) < 0)) __PYX_ERR(0, 2063, __pyx_L1_error)
+      if (unlikely(PyDict_SetItem(__pyx_v_self->vars, __pyx_v_name, __pyx_v_val) < 0)) __PYX_ERR(0, 2084, __pyx_L1_error)
     }
     __pyx_L4:;
 
-    /* "adios_mpi.pyx":2059
+    /* "adios_mpi.pyx":2080
  * 
  *     def __setitem__(self, name, val):
  *         if self.vars.has_key(name):             # <<<<<<<<<<<<<<
@@ -32455,7 +33921,7 @@ static int __pyx_pf_9adios_mpi_6writer_12__setitem__(struct __pyx_obj_9adios_mpi
     goto __pyx_L3;
   }
 
-  /* "adios_mpi.pyx":2064
+  /* "adios_mpi.pyx":2085
  *             else:
  *                 self.vars[name] = val
  *         elif self.attrs.has_key(name):             # <<<<<<<<<<<<<<
@@ -32464,13 +33930,13 @@ static int __pyx_pf_9adios_mpi_6writer_12__setitem__(struct __pyx_obj_9adios_mpi
  */
   if (unlikely(__pyx_v_self->attrs == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "has_key");
-    __PYX_ERR(0, 2064, __pyx_L1_error)
+    __PYX_ERR(0, 2085, __pyx_L1_error)
   }
-  __pyx_t_1 = PyDict_Contains(__pyx_v_self->attrs, __pyx_v_name); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 2064, __pyx_L1_error)
+  __pyx_t_1 = PyDict_Contains(__pyx_v_self->attrs, __pyx_v_name); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 2085, __pyx_L1_error)
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "adios_mpi.pyx":2065
+    /* "adios_mpi.pyx":2086
  *                 self.vars[name] = val
  *         elif self.attrs.has_key(name):
  *             if not isinstance(val, attrinfo):             # <<<<<<<<<<<<<<
@@ -32481,20 +33947,20 @@ static int __pyx_pf_9adios_mpi_6writer_12__setitem__(struct __pyx_obj_9adios_mpi
     __pyx_t_1 = ((!(__pyx_t_2 != 0)) != 0);
     if (__pyx_t_1) {
 
-      /* "adios_mpi.pyx":2066
+      /* "adios_mpi.pyx":2087
  *         elif self.attrs.has_key(name):
  *             if not isinstance(val, attrinfo):
  *                 self.attrs[name] = attrinfo(name, val, np.array(val).dtype)             # <<<<<<<<<<<<<<
  *             else:
  *                 self.attrs[name].value = val
  */
-      __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2066, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2087, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_array); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2066, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_array); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2087, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __pyx_t_4 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_5))) {
+      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
         __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
         if (likely(__pyx_t_4)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
@@ -32504,24 +33970,42 @@ static int __pyx_pf_9adios_mpi_6writer_12__setitem__(struct __pyx_obj_9adios_mpi
         }
       }
       if (!__pyx_t_4) {
-        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_val); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2066, __pyx_L1_error)
+        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_val); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2087, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
       } else {
-        __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2066, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_6);
-        __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL;
-        __Pyx_INCREF(__pyx_v_val);
-        __Pyx_GIVEREF(__pyx_v_val);
-        PyTuple_SET_ITEM(__pyx_t_6, 0+1, __pyx_v_val);
-        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2066, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_3);
-        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+        #if CYTHON_FAST_PYCALL
+        if (PyFunction_Check(__pyx_t_5)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_v_val};
+          __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2087, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+          __Pyx_GOTREF(__pyx_t_3);
+        } else
+        #endif
+        #if CYTHON_FAST_PYCCALL
+        if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_v_val};
+          __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2087, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+          __Pyx_GOTREF(__pyx_t_3);
+        } else
+        #endif
+        {
+          __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2087, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_6);
+          __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL;
+          __Pyx_INCREF(__pyx_v_val);
+          __Pyx_GIVEREF(__pyx_v_val);
+          PyTuple_SET_ITEM(__pyx_t_6, 0+1, __pyx_v_val);
+          __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2087, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+        }
       }
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_dtype); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2066, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_dtype); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2087, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2066, __pyx_L1_error)
+      __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2087, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_INCREF(__pyx_v_name);
       __Pyx_GIVEREF(__pyx_v_name);
@@ -32532,17 +34016,17 @@ static int __pyx_pf_9adios_mpi_6writer_12__setitem__(struct __pyx_obj_9adios_mpi
       __Pyx_GIVEREF(__pyx_t_5);
       PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_5);
       __pyx_t_5 = 0;
-      __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_9adios_mpi_attrinfo), __pyx_t_3, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2066, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_9adios_mpi_attrinfo), __pyx_t_3, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2087, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       if (unlikely(__pyx_v_self->attrs == Py_None)) {
         PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-        __PYX_ERR(0, 2066, __pyx_L1_error)
+        __PYX_ERR(0, 2087, __pyx_L1_error)
       }
-      if (unlikely(PyDict_SetItem(__pyx_v_self->attrs, __pyx_v_name, __pyx_t_5) < 0)) __PYX_ERR(0, 2066, __pyx_L1_error)
+      if (unlikely(PyDict_SetItem(__pyx_v_self->attrs, __pyx_v_name, __pyx_t_5) < 0)) __PYX_ERR(0, 2087, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-      /* "adios_mpi.pyx":2065
+      /* "adios_mpi.pyx":2086
  *                 self.vars[name] = val
  *         elif self.attrs.has_key(name):
  *             if not isinstance(val, attrinfo):             # <<<<<<<<<<<<<<
@@ -32552,7 +34036,7 @@ static int __pyx_pf_9adios_mpi_6writer_12__setitem__(struct __pyx_obj_9adios_mpi
       goto __pyx_L5;
     }
 
-    /* "adios_mpi.pyx":2068
+    /* "adios_mpi.pyx":2089
  *                 self.attrs[name] = attrinfo(name, val, np.array(val).dtype)
  *             else:
  *                 self.attrs[name].value = val             # <<<<<<<<<<<<<<
@@ -32562,16 +34046,16 @@ static int __pyx_pf_9adios_mpi_6writer_12__setitem__(struct __pyx_obj_9adios_mpi
     /*else*/ {
       if (unlikely(__pyx_v_self->attrs == Py_None)) {
         PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-        __PYX_ERR(0, 2068, __pyx_L1_error)
+        __PYX_ERR(0, 2089, __pyx_L1_error)
       }
-      __pyx_t_5 = __Pyx_PyDict_GetItem(__pyx_v_self->attrs, __pyx_v_name); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2068, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_PyDict_GetItem(__pyx_v_self->attrs, __pyx_v_name); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2089, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
-      if (__Pyx_PyObject_SetAttrStr(__pyx_t_5, __pyx_n_s_value, __pyx_v_val) < 0) __PYX_ERR(0, 2068, __pyx_L1_error)
+      if (__Pyx_PyObject_SetAttrStr(__pyx_t_5, __pyx_n_s_value, __pyx_v_val) < 0) __PYX_ERR(0, 2089, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     }
     __pyx_L5:;
 
-    /* "adios_mpi.pyx":2064
+    /* "adios_mpi.pyx":2085
  *             else:
  *                 self.vars[name] = val
  *         elif self.attrs.has_key(name):             # <<<<<<<<<<<<<<
@@ -32581,7 +34065,7 @@ static int __pyx_pf_9adios_mpi_6writer_12__setitem__(struct __pyx_obj_9adios_mpi
     goto __pyx_L3;
   }
 
-  /* "adios_mpi.pyx":2070
+  /* "adios_mpi.pyx":2091
  *                 self.attrs[name].value = val
  *         else:
  *             n = np.array(val)             # <<<<<<<<<<<<<<
@@ -32589,13 +34073,13 @@ static int __pyx_pf_9adios_mpi_6writer_12__setitem__(struct __pyx_obj_9adios_mpi
  *             self.vars[name].value = val
  */
   /*else*/ {
-    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2070, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2091, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_array); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2070, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_array); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2091, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __pyx_t_3 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_6))) {
+    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
       __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_6);
       if (likely(__pyx_t_3)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
@@ -32605,33 +34089,51 @@ static int __pyx_pf_9adios_mpi_6writer_12__setitem__(struct __pyx_obj_9adios_mpi
       }
     }
     if (!__pyx_t_3) {
-      __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_val); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2070, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_val); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2091, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
     } else {
-      __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2070, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_4);
-      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
-      __Pyx_INCREF(__pyx_v_val);
-      __Pyx_GIVEREF(__pyx_v_val);
-      PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_val);
-      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2070, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_5);
-      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_6)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_val};
+        __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2091, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+        __Pyx_GOTREF(__pyx_t_5);
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_val};
+        __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2091, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+        __Pyx_GOTREF(__pyx_t_5);
+      } else
+      #endif
+      {
+        __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2091, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_4);
+        __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+        __Pyx_INCREF(__pyx_v_val);
+        __Pyx_GIVEREF(__pyx_v_val);
+        PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_val);
+        __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2091, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_5);
+        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      }
     }
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __pyx_v_n = __pyx_t_5;
     __pyx_t_5 = 0;
 
-    /* "adios_mpi.pyx":2071
+    /* "adios_mpi.pyx":2092
  *         else:
  *             n = np.array(val)
  *             self.vars[name] = varinfo(name, n.shape)             # <<<<<<<<<<<<<<
  *             self.vars[name].value = val
  * 
  */
-    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_n, __pyx_n_s_shape); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2071, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_n, __pyx_n_s_shape); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2092, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2071, __pyx_L1_error)
+    __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2092, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_INCREF(__pyx_v_name);
     __Pyx_GIVEREF(__pyx_v_name);
@@ -32639,17 +34141,17 @@ static int __pyx_pf_9adios_mpi_6writer_12__setitem__(struct __pyx_obj_9adios_mpi
     __Pyx_GIVEREF(__pyx_t_5);
     PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_5);
     __pyx_t_5 = 0;
-    __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_9adios_mpi_varinfo), __pyx_t_6, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2071, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_9adios_mpi_varinfo), __pyx_t_6, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2092, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     if (unlikely(__pyx_v_self->vars == Py_None)) {
       PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-      __PYX_ERR(0, 2071, __pyx_L1_error)
+      __PYX_ERR(0, 2092, __pyx_L1_error)
     }
-    if (unlikely(PyDict_SetItem(__pyx_v_self->vars, __pyx_v_name, __pyx_t_5) < 0)) __PYX_ERR(0, 2071, __pyx_L1_error)
+    if (unlikely(PyDict_SetItem(__pyx_v_self->vars, __pyx_v_name, __pyx_t_5) < 0)) __PYX_ERR(0, 2092, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-    /* "adios_mpi.pyx":2072
+    /* "adios_mpi.pyx":2093
  *             n = np.array(val)
  *             self.vars[name] = varinfo(name, n.shape)
  *             self.vars[name].value = val             # <<<<<<<<<<<<<<
@@ -32658,16 +34160,16 @@ static int __pyx_pf_9adios_mpi_6writer_12__setitem__(struct __pyx_obj_9adios_mpi
  */
     if (unlikely(__pyx_v_self->vars == Py_None)) {
       PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-      __PYX_ERR(0, 2072, __pyx_L1_error)
+      __PYX_ERR(0, 2093, __pyx_L1_error)
     }
-    __pyx_t_5 = __Pyx_PyDict_GetItem(__pyx_v_self->vars, __pyx_v_name); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2072, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyDict_GetItem(__pyx_v_self->vars, __pyx_v_name); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2093, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    if (__Pyx_PyObject_SetAttrStr(__pyx_t_5, __pyx_n_s_value, __pyx_v_val) < 0) __PYX_ERR(0, 2072, __pyx_L1_error)
+    if (__Pyx_PyObject_SetAttrStr(__pyx_t_5, __pyx_n_s_value, __pyx_v_val) < 0) __PYX_ERR(0, 2093, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   }
   __pyx_L3:;
 
-  /* "adios_mpi.pyx":2058
+  /* "adios_mpi.pyx":2079
  *         self.attrs[attrname] = attrinfo(attrname, varname, dtype, is_static=False)
  * 
  *     def __setitem__(self, name, val):             # <<<<<<<<<<<<<<
@@ -32691,7 +34193,7 @@ static int __pyx_pf_9adios_mpi_6writer_12__setitem__(struct __pyx_obj_9adios_mpi
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":2074
+/* "adios_mpi.pyx":2095
  *             self.vars[name].value = val
  * 
  *     def __getitem__(self, name):             # <<<<<<<<<<<<<<
@@ -32721,7 +34223,7 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_14__getitem__(struct __pyx_obj_9adi
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("__getitem__", 0);
 
-  /* "adios_mpi.pyx":2075
+  /* "adios_mpi.pyx":2096
  * 
  *     def __getitem__(self, name):
  *         if self.vars.has_key(name):             # <<<<<<<<<<<<<<
@@ -32730,13 +34232,13 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_14__getitem__(struct __pyx_obj_9adi
  */
   if (unlikely(__pyx_v_self->vars == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "has_key");
-    __PYX_ERR(0, 2075, __pyx_L1_error)
+    __PYX_ERR(0, 2096, __pyx_L1_error)
   }
-  __pyx_t_1 = PyDict_Contains(__pyx_v_self->vars, __pyx_v_name); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 2075, __pyx_L1_error)
+  __pyx_t_1 = PyDict_Contains(__pyx_v_self->vars, __pyx_v_name); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 2096, __pyx_L1_error)
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "adios_mpi.pyx":2076
+    /* "adios_mpi.pyx":2097
  *     def __getitem__(self, name):
  *         if self.vars.has_key(name):
  *             return self.vars[name]             # <<<<<<<<<<<<<<
@@ -32746,15 +34248,15 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_14__getitem__(struct __pyx_obj_9adi
     __Pyx_XDECREF(__pyx_r);
     if (unlikely(__pyx_v_self->vars == Py_None)) {
       PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-      __PYX_ERR(0, 2076, __pyx_L1_error)
+      __PYX_ERR(0, 2097, __pyx_L1_error)
     }
-    __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_v_self->vars, __pyx_v_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2076, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_v_self->vars, __pyx_v_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2097, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_r = __pyx_t_3;
     __pyx_t_3 = 0;
     goto __pyx_L0;
 
-    /* "adios_mpi.pyx":2075
+    /* "adios_mpi.pyx":2096
  * 
  *     def __getitem__(self, name):
  *         if self.vars.has_key(name):             # <<<<<<<<<<<<<<
@@ -32763,7 +34265,7 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_14__getitem__(struct __pyx_obj_9adi
  */
   }
 
-  /* "adios_mpi.pyx":2077
+  /* "adios_mpi.pyx":2098
  *         if self.vars.has_key(name):
  *             return self.vars[name]
  *         elif self.attrs.has_key(name):             # <<<<<<<<<<<<<<
@@ -32772,13 +34274,13 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_14__getitem__(struct __pyx_obj_9adi
  */
   if (unlikely(__pyx_v_self->attrs == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "has_key");
-    __PYX_ERR(0, 2077, __pyx_L1_error)
+    __PYX_ERR(0, 2098, __pyx_L1_error)
   }
-  __pyx_t_2 = PyDict_Contains(__pyx_v_self->attrs, __pyx_v_name); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 2077, __pyx_L1_error)
+  __pyx_t_2 = PyDict_Contains(__pyx_v_self->attrs, __pyx_v_name); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 2098, __pyx_L1_error)
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "adios_mpi.pyx":2078
+    /* "adios_mpi.pyx":2099
  *             return self.vars[name]
  *         elif self.attrs.has_key(name):
  *             return self.attrs[name]             # <<<<<<<<<<<<<<
@@ -32788,15 +34290,15 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_14__getitem__(struct __pyx_obj_9adi
     __Pyx_XDECREF(__pyx_r);
     if (unlikely(__pyx_v_self->attrs == Py_None)) {
       PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-      __PYX_ERR(0, 2078, __pyx_L1_error)
+      __PYX_ERR(0, 2099, __pyx_L1_error)
     }
-    __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_v_self->attrs, __pyx_v_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2078, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_v_self->attrs, __pyx_v_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2099, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_r = __pyx_t_3;
     __pyx_t_3 = 0;
     goto __pyx_L0;
 
-    /* "adios_mpi.pyx":2077
+    /* "adios_mpi.pyx":2098
  *         if self.vars.has_key(name):
  *             return self.vars[name]
  *         elif self.attrs.has_key(name):             # <<<<<<<<<<<<<<
@@ -32805,7 +34307,7 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_14__getitem__(struct __pyx_obj_9adi
  */
   }
 
-  /* "adios_mpi.pyx":2080
+  /* "adios_mpi.pyx":2101
  *             return self.attrs[name]
  *         else:
  *             raise KeyError(name)             # <<<<<<<<<<<<<<
@@ -32813,20 +34315,20 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_14__getitem__(struct __pyx_obj_9adi
  *     def close(self):
  */
   /*else*/ {
-    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2080, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2101, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_name);
     __Pyx_GIVEREF(__pyx_v_name);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_name);
-    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_KeyError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2080, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_KeyError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2101, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_Raise(__pyx_t_4, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    __PYX_ERR(0, 2080, __pyx_L1_error)
+    __PYX_ERR(0, 2101, __pyx_L1_error)
   }
 
-  /* "adios_mpi.pyx":2074
+  /* "adios_mpi.pyx":2095
  *             self.vars[name].value = val
  * 
  *     def __getitem__(self, name):             # <<<<<<<<<<<<<<
@@ -32846,7 +34348,7 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_14__getitem__(struct __pyx_obj_9adi
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":2082
+/* "adios_mpi.pyx":2103
  *             raise KeyError(name)
  * 
  *     def close(self):             # <<<<<<<<<<<<<<
@@ -32882,136 +34384,138 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_16close(struct __pyx_obj_9adios_mpi
   PyObject *__pyx_t_2 = NULL;
   PyObject *__pyx_t_3 = NULL;
   PyObject *__pyx_t_4 = NULL;
-  Py_ssize_t __pyx_t_5;
-  Py_ssize_t __pyx_t_6;
-  int __pyx_t_7;
-  int __pyx_t_8;
-  int __pyx_t_9;
-  PyObject *__pyx_t_10 = NULL;
-  PyObject *__pyx_t_11 = NULL;
-  PyObject *__pyx_t_12 = NULL;
-  PyObject *(*__pyx_t_13)(PyObject *);
+  PyObject *__pyx_t_5 = NULL;
+  int64_t __pyx_t_6;
+  struct __pyx_opt_args_9adios_mpi_open __pyx_t_7;
+  Py_ssize_t __pyx_t_8;
+  Py_ssize_t __pyx_t_9;
+  int __pyx_t_10;
+  int __pyx_t_11;
+  int __pyx_t_12;
+  PyObject *__pyx_t_13 = NULL;
+  PyObject *__pyx_t_14 = NULL;
+  PyObject *(*__pyx_t_15)(PyObject *);
   __Pyx_RefNannySetupContext("close", 0);
 
-  /* "adios_mpi.pyx":2086
+  /* "adios_mpi.pyx":2107
  *         Write variables and attributes to a file and close the writer.
  *         """
  *         if self.gid == 0:             # <<<<<<<<<<<<<<
- *             self.declare_group()
+ *             self.declare_group(method=self.method, method_params=self.method_params, stats=self.stats)
  * 
  */
   __pyx_t_1 = ((__pyx_v_self->gid == 0) != 0);
   if (__pyx_t_1) {
 
-    /* "adios_mpi.pyx":2087
+    /* "adios_mpi.pyx":2108
  *         """
  *         if self.gid == 0:
- *             self.declare_group()             # <<<<<<<<<<<<<<
+ *             self.declare_group(method=self.method, method_params=self.method_params, stats=self.stats)             # <<<<<<<<<<<<<<
  * 
- *         fd = open(self.gname, self.fname, self.mode)
+ *         fd = open(self.gname, self.fname, self.mode, comm=self.comm)
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_declare_group); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2087, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
-      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
-      if (likely(__pyx_t_4)) {
-        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
-        __Pyx_INCREF(__pyx_t_4);
-        __Pyx_INCREF(function);
-        __Pyx_DECREF_SET(__pyx_t_3, function);
-      }
-    }
-    if (__pyx_t_4) {
-      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2087, __pyx_L1_error)
-      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    } else {
-      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2087, __pyx_L1_error)
-    }
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_declare_group); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2108, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2108, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_method, __pyx_v_self->method) < 0) __PYX_ERR(0, 2108, __pyx_L1_error)
+    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_method_params, __pyx_v_self->method_params) < 0) __PYX_ERR(0, 2108, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_self->stats); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2108, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_stats, __pyx_t_4) < 0) __PYX_ERR(0, 2108, __pyx_L1_error)
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2108, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-    /* "adios_mpi.pyx":2086
+    /* "adios_mpi.pyx":2107
  *         Write variables and attributes to a file and close the writer.
  *         """
  *         if self.gid == 0:             # <<<<<<<<<<<<<<
- *             self.declare_group()
+ *             self.declare_group(method=self.method, method_params=self.method_params, stats=self.stats)
  * 
  */
   }
 
-  /* "adios_mpi.pyx":2089
- *             self.declare_group()
+  /* "adios_mpi.pyx":2110
+ *             self.declare_group(method=self.method, method_params=self.method_params, stats=self.stats)
  * 
- *         fd = open(self.gname, self.fname, self.mode)             # <<<<<<<<<<<<<<
+ *         fd = open(self.gname, self.fname, self.mode, comm=self.comm)             # <<<<<<<<<<<<<<
  * 
  *         extra_vars = dict()
  */
-  __pyx_t_2 = __pyx_v_self->gname;
-  __Pyx_INCREF(__pyx_t_2);
+  __pyx_t_4 = __pyx_v_self->gname;
+  __Pyx_INCREF(__pyx_t_4);
   __pyx_t_3 = __pyx_v_self->fname;
   __Pyx_INCREF(__pyx_t_3);
-  __pyx_t_4 = __pyx_v_self->mode;
-  __Pyx_INCREF(__pyx_t_4);
-  __pyx_v_fd = __pyx_f_9adios_mpi_open(((PyObject*)__pyx_t_2), ((PyObject*)__pyx_t_3), ((PyObject*)__pyx_t_4), 0, NULL);
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_2 = __pyx_v_self->mode;
+  __Pyx_INCREF(__pyx_t_2);
+  __pyx_t_5 = ((PyObject *)__pyx_v_self->comm);
+  __Pyx_INCREF(__pyx_t_5);
+  __pyx_t_7.__pyx_n = 1;
+  __pyx_t_7.comm = ((struct PyMPICommObject *)__pyx_t_5);
+  __pyx_t_6 = __pyx_f_9adios_mpi_open(((PyObject*)__pyx_t_4), ((PyObject*)__pyx_t_3), ((PyObject*)__pyx_t_2), 0, &__pyx_t_7); 
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_v_fd = __pyx_t_6;
 
-  /* "adios_mpi.pyx":2091
- *         fd = open(self.gname, self.fname, self.mode)
+  /* "adios_mpi.pyx":2112
+ *         fd = open(self.gname, self.fname, self.mode, comm=self.comm)
  * 
  *         extra_vars = dict()             # <<<<<<<<<<<<<<
  *         extra_attrs = dict()
  * 
  */
-  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2091, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_4);
-  __pyx_v_extra_vars = ((PyObject*)__pyx_t_4);
-  __pyx_t_4 = 0;
+  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2112, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __pyx_v_extra_vars = ((PyObject*)__pyx_t_5);
+  __pyx_t_5 = 0;
 
-  /* "adios_mpi.pyx":2092
+  /* "adios_mpi.pyx":2113
  * 
  *         extra_vars = dict()
  *         extra_attrs = dict()             # <<<<<<<<<<<<<<
  * 
  *         for key, val in self.vars.iteritems():
  */
-  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2092, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_4);
-  __pyx_v_extra_attrs = ((PyObject*)__pyx_t_4);
-  __pyx_t_4 = 0;
+  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2113, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __pyx_v_extra_attrs = ((PyObject*)__pyx_t_5);
+  __pyx_t_5 = 0;
 
-  /* "adios_mpi.pyx":2094
+  /* "adios_mpi.pyx":2115
  *         extra_attrs = dict()
  * 
  *         for key, val in self.vars.iteritems():             # <<<<<<<<<<<<<<
  *             if not isinstance(val, varinfo):
  *                 n = np.array(val)
  */
-  __pyx_t_5 = 0;
+  __pyx_t_8 = 0;
   if (unlikely(__pyx_v_self->vars == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "iteritems");
-    __PYX_ERR(0, 2094, __pyx_L1_error)
+    __PYX_ERR(0, 2115, __pyx_L1_error)
   }
-  __pyx_t_3 = __Pyx_dict_iterator(__pyx_v_self->vars, 1, __pyx_n_s_iteritems, (&__pyx_t_6), (&__pyx_t_7)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2094, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_XDECREF(__pyx_t_4);
-  __pyx_t_4 = __pyx_t_3;
-  __pyx_t_3 = 0;
+  __pyx_t_2 = __Pyx_dict_iterator(__pyx_v_self->vars, 1, __pyx_n_s_iteritems, (&__pyx_t_9), (&__pyx_t_10)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2115, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_5);
+  __pyx_t_5 = __pyx_t_2;
+  __pyx_t_2 = 0;
   while (1) {
-    __pyx_t_8 = __Pyx_dict_iter_next(__pyx_t_4, __pyx_t_6, &__pyx_t_5, &__pyx_t_3, &__pyx_t_2, NULL, __pyx_t_7);
-    if (unlikely(__pyx_t_8 == 0)) break;
-    if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(0, 2094, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_3);
+    __pyx_t_11 = __Pyx_dict_iter_next(__pyx_t_5, __pyx_t_9, &__pyx_t_8, &__pyx_t_2, &__pyx_t_3, NULL, __pyx_t_10);
+    if (unlikely(__pyx_t_11 == 0)) break;
+    if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 2115, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_3);
-    __pyx_t_3 = 0;
-    __Pyx_XDECREF_SET(__pyx_v_val, __pyx_t_2);
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_2);
     __pyx_t_2 = 0;
+    __Pyx_XDECREF_SET(__pyx_v_val, __pyx_t_3);
+    __pyx_t_3 = 0;
 
-    /* "adios_mpi.pyx":2095
+    /* "adios_mpi.pyx":2116
  * 
  *         for key, val in self.vars.iteritems():
  *             if not isinstance(val, varinfo):             # <<<<<<<<<<<<<<
@@ -33019,85 +34523,103 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_16close(struct __pyx_obj_9adios_mpi
  *                 extra_vars[key] = varinfo(key, n.shape)
  */
     __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_val, __pyx_ptype_9adios_mpi_varinfo); 
-    __pyx_t_9 = ((!(__pyx_t_1 != 0)) != 0);
-    if (__pyx_t_9) {
+    __pyx_t_12 = ((!(__pyx_t_1 != 0)) != 0);
+    if (__pyx_t_12) {
 
-      /* "adios_mpi.pyx":2096
+      /* "adios_mpi.pyx":2117
  *         for key, val in self.vars.iteritems():
  *             if not isinstance(val, varinfo):
  *                 n = np.array(val)             # <<<<<<<<<<<<<<
  *                 extra_vars[key] = varinfo(key, n.shape)
  *                 extra_vars[key].value = val
  */
-      __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2096, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_array); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2096, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_10);
-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      __pyx_t_3 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_10))) {
-        __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_10);
-        if (likely(__pyx_t_3)) {
-          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
-          __Pyx_INCREF(__pyx_t_3);
+      __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2117, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_2);
+      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_array); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2117, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+      __pyx_t_2 = NULL;
+      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
+        __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
+        if (likely(__pyx_t_2)) {
+          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
+          __Pyx_INCREF(__pyx_t_2);
           __Pyx_INCREF(function);
-          __Pyx_DECREF_SET(__pyx_t_10, function);
+          __Pyx_DECREF_SET(__pyx_t_4, function);
         }
       }
-      if (!__pyx_t_3) {
-        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_v_val); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2096, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_2);
+      if (!__pyx_t_2) {
+        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_val); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2117, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_3);
       } else {
-        __pyx_t_11 = PyTuple_New(1+1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2096, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_11);
-        __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_3); __pyx_t_3 = NULL;
-        __Pyx_INCREF(__pyx_v_val);
-        __Pyx_GIVEREF(__pyx_v_val);
-        PyTuple_SET_ITEM(__pyx_t_11, 0+1, __pyx_v_val);
-        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_11, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2096, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_2);
-        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+        #if CYTHON_FAST_PYCALL
+        if (PyFunction_Check(__pyx_t_4)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_2, __pyx_v_val};
+          __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2117, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
+          __Pyx_GOTREF(__pyx_t_3);
+        } else
+        #endif
+        #if CYTHON_FAST_PYCCALL
+        if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_2, __pyx_v_val};
+          __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2117, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
+          __Pyx_GOTREF(__pyx_t_3);
+        } else
+        #endif
+        {
+          __pyx_t_13 = PyTuple_New(1+1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2117, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_13);
+          __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_2); __pyx_t_2 = NULL;
+          __Pyx_INCREF(__pyx_v_val);
+          __Pyx_GIVEREF(__pyx_v_val);
+          PyTuple_SET_ITEM(__pyx_t_13, 0+1, __pyx_v_val);
+          __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_13, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2117, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+        }
       }
-      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
-      __Pyx_XDECREF_SET(__pyx_v_n, __pyx_t_2);
-      __pyx_t_2 = 0;
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      __Pyx_XDECREF_SET(__pyx_v_n, __pyx_t_3);
+      __pyx_t_3 = 0;
 
-      /* "adios_mpi.pyx":2097
+      /* "adios_mpi.pyx":2118
  *             if not isinstance(val, varinfo):
  *                 n = np.array(val)
  *                 extra_vars[key] = varinfo(key, n.shape)             # <<<<<<<<<<<<<<
  *                 extra_vars[key].value = val
  *             else:
  */
-      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_n, __pyx_n_s_shape); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2097, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_2);
-      __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2097, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_10);
+      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_n, __pyx_n_s_shape); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2118, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_3);
+      __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2118, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
       __Pyx_INCREF(__pyx_v_key);
       __Pyx_GIVEREF(__pyx_v_key);
-      PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_v_key);
-      __Pyx_GIVEREF(__pyx_t_2);
-      PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_2);
-      __pyx_t_2 = 0;
-      __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_9adios_mpi_varinfo), __pyx_t_10, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2097, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_2);
-      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
-      if (unlikely(PyDict_SetItem(__pyx_v_extra_vars, __pyx_v_key, __pyx_t_2) < 0)) __PYX_ERR(0, 2097, __pyx_L1_error)
-      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+      PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_key);
+      __Pyx_GIVEREF(__pyx_t_3);
+      PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
+      __pyx_t_3 = 0;
+      __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_9adios_mpi_varinfo), __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2118, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_3);
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      if (unlikely(PyDict_SetItem(__pyx_v_extra_vars, __pyx_v_key, __pyx_t_3) < 0)) __PYX_ERR(0, 2118, __pyx_L1_error)
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-      /* "adios_mpi.pyx":2098
+      /* "adios_mpi.pyx":2119
  *                 n = np.array(val)
  *                 extra_vars[key] = varinfo(key, n.shape)
  *                 extra_vars[key].value = val             # <<<<<<<<<<<<<<
  *             else:
  *                 if self.is_noxml:
  */
-      __pyx_t_2 = __Pyx_PyDict_GetItem(__pyx_v_extra_vars, __pyx_v_key); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2098, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_2);
-      if (__Pyx_PyObject_SetAttrStr(__pyx_t_2, __pyx_n_s_value, __pyx_v_val) < 0) __PYX_ERR(0, 2098, __pyx_L1_error)
-      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+      __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_v_extra_vars, __pyx_v_key); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2119, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_3);
+      if (__Pyx_PyObject_SetAttrStr(__pyx_t_3, __pyx_n_s_value, __pyx_v_val) < 0) __PYX_ERR(0, 2119, __pyx_L1_error)
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-      /* "adios_mpi.pyx":2095
+      /* "adios_mpi.pyx":2116
  * 
  *         for key, val in self.vars.iteritems():
  *             if not isinstance(val, varinfo):             # <<<<<<<<<<<<<<
@@ -33107,7 +34629,7 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_16close(struct __pyx_obj_9adios_mpi
       goto __pyx_L6;
     }
 
-    /* "adios_mpi.pyx":2100
+    /* "adios_mpi.pyx":2121
  *                 extra_vars[key].value = val
  *             else:
  *                 if self.is_noxml:             # <<<<<<<<<<<<<<
@@ -33115,49 +34637,69 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_16close(struct __pyx_obj_9adios_mpi
  * 
  */
     /*else*/ {
-      __pyx_t_9 = (__pyx_v_self->is_noxml != 0);
-      if (__pyx_t_9) {
+      __pyx_t_12 = (__pyx_v_self->is_noxml != 0);
+      if (__pyx_t_12) {
 
-        /* "adios_mpi.pyx":2101
+        /* "adios_mpi.pyx":2122
  *             else:
  *                 if self.is_noxml:
  *                     val.define(self.gid)             # <<<<<<<<<<<<<<
  * 
  *         for key, val in extra_vars.iteritems():
  */
-        __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_val, __pyx_n_s_define); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2101, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_10);
-        __pyx_t_11 = __Pyx_PyInt_From_int64_t(__pyx_v_self->gid); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2101, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_11);
-        __pyx_t_3 = NULL;
-        if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_10))) {
-          __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_10);
-          if (likely(__pyx_t_3)) {
-            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
-            __Pyx_INCREF(__pyx_t_3);
+        __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_val, __pyx_n_s_define); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2122, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_4);
+        __pyx_t_13 = __Pyx_PyInt_From_int64_t(__pyx_v_self->gid); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2122, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_13);
+        __pyx_t_2 = NULL;
+        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
+          __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
+          if (likely(__pyx_t_2)) {
+            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
+            __Pyx_INCREF(__pyx_t_2);
             __Pyx_INCREF(function);
-            __Pyx_DECREF_SET(__pyx_t_10, function);
+            __Pyx_DECREF_SET(__pyx_t_4, function);
           }
         }
-        if (!__pyx_t_3) {
-          __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_11); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2101, __pyx_L1_error)
-          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
-          __Pyx_GOTREF(__pyx_t_2);
+        if (!__pyx_t_2) {
+          __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_13); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2122, __pyx_L1_error)
+          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+          __Pyx_GOTREF(__pyx_t_3);
         } else {
-          __pyx_t_12 = PyTuple_New(1+1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2101, __pyx_L1_error)
-          __Pyx_GOTREF(__pyx_t_12);
-          __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_3); __pyx_t_3 = NULL;
-          __Pyx_GIVEREF(__pyx_t_11);
-          PyTuple_SET_ITEM(__pyx_t_12, 0+1, __pyx_t_11);
-          __pyx_t_11 = 0;
-          __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_12, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2101, __pyx_L1_error)
-          __Pyx_GOTREF(__pyx_t_2);
-          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+          #if CYTHON_FAST_PYCALL
+          if (PyFunction_Check(__pyx_t_4)) {
+            PyObject *__pyx_temp[2] = {__pyx_t_2, __pyx_t_13};
+            __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2122, __pyx_L1_error)
+            __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
+            __Pyx_GOTREF(__pyx_t_3);
+            __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+          } else
+          #endif
+          #if CYTHON_FAST_PYCCALL
+          if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
+            PyObject *__pyx_temp[2] = {__pyx_t_2, __pyx_t_13};
+            __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2122, __pyx_L1_error)
+            __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
+            __Pyx_GOTREF(__pyx_t_3);
+            __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+          } else
+          #endif
+          {
+            __pyx_t_14 = PyTuple_New(1+1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 2122, __pyx_L1_error)
+            __Pyx_GOTREF(__pyx_t_14);
+            __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_2); __pyx_t_2 = NULL;
+            __Pyx_GIVEREF(__pyx_t_13);
+            PyTuple_SET_ITEM(__pyx_t_14, 0+1, __pyx_t_13);
+            __pyx_t_13 = 0;
+            __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_14, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2122, __pyx_L1_error)
+            __Pyx_GOTREF(__pyx_t_3);
+            __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+          }
         }
-        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
-        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-        /* "adios_mpi.pyx":2100
+        /* "adios_mpi.pyx":2121
  *                 extra_vars[key].value = val
  *             else:
  *                 if self.is_noxml:             # <<<<<<<<<<<<<<
@@ -33168,75 +34710,95 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_16close(struct __pyx_obj_9adios_mpi
     }
     __pyx_L6:;
   }
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "adios_mpi.pyx":2103
+  /* "adios_mpi.pyx":2124
  *                     val.define(self.gid)
  * 
  *         for key, val in extra_vars.iteritems():             # <<<<<<<<<<<<<<
  *             if self.is_noxml: val.define(self.gid)
  *             self.vars[key] = val
  */
-  __pyx_t_6 = 0;
-  __pyx_t_2 = __Pyx_dict_iterator(__pyx_v_extra_vars, 1, __pyx_n_s_iteritems, (&__pyx_t_5), (&__pyx_t_7)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2103, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_4);
-  __pyx_t_4 = __pyx_t_2;
-  __pyx_t_2 = 0;
+  __pyx_t_9 = 0;
+  __pyx_t_3 = __Pyx_dict_iterator(__pyx_v_extra_vars, 1, __pyx_n_s_iteritems, (&__pyx_t_8), (&__pyx_t_10)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2124, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_5);
+  __pyx_t_5 = __pyx_t_3;
+  __pyx_t_3 = 0;
   while (1) {
-    __pyx_t_8 = __Pyx_dict_iter_next(__pyx_t_4, __pyx_t_5, &__pyx_t_6, &__pyx_t_2, &__pyx_t_10, NULL, __pyx_t_7);
-    if (unlikely(__pyx_t_8 == 0)) break;
-    if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(0, 2103, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_2);
-    __Pyx_GOTREF(__pyx_t_10);
-    __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_2);
-    __pyx_t_2 = 0;
-    __Pyx_XDECREF_SET(__pyx_v_val, __pyx_t_10);
-    __pyx_t_10 = 0;
+    __pyx_t_11 = __Pyx_dict_iter_next(__pyx_t_5, __pyx_t_8, &__pyx_t_9, &__pyx_t_3, &__pyx_t_4, NULL, __pyx_t_10);
+    if (unlikely(__pyx_t_11 == 0)) break;
+    if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 2124, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_3);
+    __pyx_t_3 = 0;
+    __Pyx_XDECREF_SET(__pyx_v_val, __pyx_t_4);
+    __pyx_t_4 = 0;
 
-    /* "adios_mpi.pyx":2104
+    /* "adios_mpi.pyx":2125
  * 
  *         for key, val in extra_vars.iteritems():
  *             if self.is_noxml: val.define(self.gid)             # <<<<<<<<<<<<<<
  *             self.vars[key] = val
  * 
  */
-    __pyx_t_9 = (__pyx_v_self->is_noxml != 0);
-    if (__pyx_t_9) {
-      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_val, __pyx_n_s_define); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2104, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_2);
-      __pyx_t_12 = __Pyx_PyInt_From_int64_t(__pyx_v_self->gid); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2104, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_12);
-      __pyx_t_11 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
-        __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_2);
-        if (likely(__pyx_t_11)) {
-          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
-          __Pyx_INCREF(__pyx_t_11);
+    __pyx_t_12 = (__pyx_v_self->is_noxml != 0);
+    if (__pyx_t_12) {
+      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_val, __pyx_n_s_define); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2125, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_3);
+      __pyx_t_14 = __Pyx_PyInt_From_int64_t(__pyx_v_self->gid); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 2125, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_14);
+      __pyx_t_13 = NULL;
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
+        __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_3);
+        if (likely(__pyx_t_13)) {
+          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
+          __Pyx_INCREF(__pyx_t_13);
           __Pyx_INCREF(function);
-          __Pyx_DECREF_SET(__pyx_t_2, function);
+          __Pyx_DECREF_SET(__pyx_t_3, function);
         }
       }
-      if (!__pyx_t_11) {
-        __pyx_t_10 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_12); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2104, __pyx_L1_error)
-        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
-        __Pyx_GOTREF(__pyx_t_10);
+      if (!__pyx_t_13) {
+        __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_14); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2125, __pyx_L1_error)
+        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+        __Pyx_GOTREF(__pyx_t_4);
       } else {
-        __pyx_t_3 = PyTuple_New(1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2104, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_3);
-        __Pyx_GIVEREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_11); __pyx_t_11 = NULL;
-        __Pyx_GIVEREF(__pyx_t_12);
-        PyTuple_SET_ITEM(__pyx_t_3, 0+1, __pyx_t_12);
-        __pyx_t_12 = 0;
-        __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2104, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_10);
-        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+        #if CYTHON_FAST_PYCALL
+        if (PyFunction_Check(__pyx_t_3)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_13, __pyx_t_14};
+          __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2125, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
+          __Pyx_GOTREF(__pyx_t_4);
+          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+        } else
+        #endif
+        #if CYTHON_FAST_PYCCALL
+        if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_13, __pyx_t_14};
+          __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2125, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
+          __Pyx_GOTREF(__pyx_t_4);
+          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+        } else
+        #endif
+        {
+          __pyx_t_2 = PyTuple_New(1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2125, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_2);
+          __Pyx_GIVEREF(__pyx_t_13); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_13); __pyx_t_13 = NULL;
+          __Pyx_GIVEREF(__pyx_t_14);
+          PyTuple_SET_ITEM(__pyx_t_2, 0+1, __pyx_t_14);
+          __pyx_t_14 = 0;
+          __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2125, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_4);
+          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+        }
       }
-      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     }
 
-    /* "adios_mpi.pyx":2105
+    /* "adios_mpi.pyx":2126
  *         for key, val in extra_vars.iteritems():
  *             if self.is_noxml: val.define(self.gid)
  *             self.vars[key] = val             # <<<<<<<<<<<<<<
@@ -33245,109 +34807,127 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_16close(struct __pyx_obj_9adios_mpi
  */
     if (unlikely(__pyx_v_self->vars == Py_None)) {
       PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-      __PYX_ERR(0, 2105, __pyx_L1_error)
+      __PYX_ERR(0, 2126, __pyx_L1_error)
     }
-    if (unlikely(PyDict_SetItem(__pyx_v_self->vars, __pyx_v_key, __pyx_v_val) < 0)) __PYX_ERR(0, 2105, __pyx_L1_error)
+    if (unlikely(PyDict_SetItem(__pyx_v_self->vars, __pyx_v_key, __pyx_v_val) < 0)) __PYX_ERR(0, 2126, __pyx_L1_error)
   }
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "adios_mpi.pyx":2107
+  /* "adios_mpi.pyx":2128
  *             self.vars[key] = val
  * 
  *         for key, val in self.attrs.iteritems():             # <<<<<<<<<<<<<<
  *             if not isinstance(val, attrinfo):
  *                 extra_attrs[key] = attrinfo(key, val, np.array(val).dtype)
  */
-  __pyx_t_5 = 0;
+  __pyx_t_8 = 0;
   if (unlikely(__pyx_v_self->attrs == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "iteritems");
-    __PYX_ERR(0, 2107, __pyx_L1_error)
+    __PYX_ERR(0, 2128, __pyx_L1_error)
   }
-  __pyx_t_10 = __Pyx_dict_iterator(__pyx_v_self->attrs, 1, __pyx_n_s_iteritems, (&__pyx_t_6), (&__pyx_t_7)); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2107, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_10);
-  __Pyx_XDECREF(__pyx_t_4);
-  __pyx_t_4 = __pyx_t_10;
-  __pyx_t_10 = 0;
+  __pyx_t_4 = __Pyx_dict_iterator(__pyx_v_self->attrs, 1, __pyx_n_s_iteritems, (&__pyx_t_9), (&__pyx_t_10)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2128, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_5);
+  __pyx_t_5 = __pyx_t_4;
+  __pyx_t_4 = 0;
   while (1) {
-    __pyx_t_8 = __Pyx_dict_iter_next(__pyx_t_4, __pyx_t_6, &__pyx_t_5, &__pyx_t_10, &__pyx_t_2, NULL, __pyx_t_7);
-    if (unlikely(__pyx_t_8 == 0)) break;
-    if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(0, 2107, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_10);
-    __Pyx_GOTREF(__pyx_t_2);
-    __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_10);
-    __pyx_t_10 = 0;
-    __Pyx_XDECREF_SET(__pyx_v_val, __pyx_t_2);
-    __pyx_t_2 = 0;
+    __pyx_t_11 = __Pyx_dict_iter_next(__pyx_t_5, __pyx_t_9, &__pyx_t_8, &__pyx_t_4, &__pyx_t_3, NULL, __pyx_t_10);
+    if (unlikely(__pyx_t_11 == 0)) break;
+    if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 2128, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_4);
+    __pyx_t_4 = 0;
+    __Pyx_XDECREF_SET(__pyx_v_val, __pyx_t_3);
+    __pyx_t_3 = 0;
 
-    /* "adios_mpi.pyx":2108
+    /* "adios_mpi.pyx":2129
  * 
  *         for key, val in self.attrs.iteritems():
  *             if not isinstance(val, attrinfo):             # <<<<<<<<<<<<<<
  *                 extra_attrs[key] = attrinfo(key, val, np.array(val).dtype)
  *             else:
  */
-    __pyx_t_9 = __Pyx_TypeCheck(__pyx_v_val, __pyx_ptype_9adios_mpi_attrinfo); 
-    __pyx_t_1 = ((!(__pyx_t_9 != 0)) != 0);
+    __pyx_t_12 = __Pyx_TypeCheck(__pyx_v_val, __pyx_ptype_9adios_mpi_attrinfo); 
+    __pyx_t_1 = ((!(__pyx_t_12 != 0)) != 0);
     if (__pyx_t_1) {
 
-      /* "adios_mpi.pyx":2109
+      /* "adios_mpi.pyx":2130
  *         for key, val in self.attrs.iteritems():
  *             if not isinstance(val, attrinfo):
  *                 extra_attrs[key] = attrinfo(key, val, np.array(val).dtype)             # <<<<<<<<<<<<<<
  *             else:
  *                 if self.is_noxml: val.define(self.gid)
  */
-      __pyx_t_10 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2109, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_10);
-      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_array); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2109, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_3);
-      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
-      __pyx_t_10 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
-        __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_3);
-        if (likely(__pyx_t_10)) {
-          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
-          __Pyx_INCREF(__pyx_t_10);
+      __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2130, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_array); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2130, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_2);
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      __pyx_t_4 = NULL;
+      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
+        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
+        if (likely(__pyx_t_4)) {
+          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+          __Pyx_INCREF(__pyx_t_4);
           __Pyx_INCREF(function);
-          __Pyx_DECREF_SET(__pyx_t_3, function);
+          __Pyx_DECREF_SET(__pyx_t_2, function);
         }
       }
-      if (!__pyx_t_10) {
-        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_val); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2109, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_2);
+      if (!__pyx_t_4) {
+        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_val); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2130, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_3);
       } else {
-        __pyx_t_12 = PyTuple_New(1+1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2109, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_12);
-        __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_10); __pyx_t_10 = NULL;
-        __Pyx_INCREF(__pyx_v_val);
-        __Pyx_GIVEREF(__pyx_v_val);
-        PyTuple_SET_ITEM(__pyx_t_12, 0+1, __pyx_v_val);
-        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_12, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2109, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_2);
-        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+        #if CYTHON_FAST_PYCALL
+        if (PyFunction_Check(__pyx_t_2)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_v_val};
+          __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2130, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+          __Pyx_GOTREF(__pyx_t_3);
+        } else
+        #endif
+        #if CYTHON_FAST_PYCCALL
+        if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_v_val};
+          __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2130, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+          __Pyx_GOTREF(__pyx_t_3);
+        } else
+        #endif
+        {
+          __pyx_t_14 = PyTuple_New(1+1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 2130, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_14);
+          __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_4); __pyx_t_4 = NULL;
+          __Pyx_INCREF(__pyx_v_val);
+          __Pyx_GIVEREF(__pyx_v_val);
+          PyTuple_SET_ITEM(__pyx_t_14, 0+1, __pyx_v_val);
+          __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_14, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2130, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+        }
       }
-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_dtype); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2109, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-      __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2109, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_dtype); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2130, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2130, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_3);
       __Pyx_INCREF(__pyx_v_key);
       __Pyx_GIVEREF(__pyx_v_key);
-      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_key);
+      PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_key);
       __Pyx_INCREF(__pyx_v_val);
       __Pyx_GIVEREF(__pyx_v_val);
-      PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_val);
-      __Pyx_GIVEREF(__pyx_t_3);
-      PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_3);
-      __pyx_t_3 = 0;
-      __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_9adios_mpi_attrinfo), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2109, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_3);
-      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-      if (unlikely(PyDict_SetItem(__pyx_v_extra_attrs, __pyx_v_key, __pyx_t_3) < 0)) __PYX_ERR(0, 2109, __pyx_L1_error)
+      PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_val);
+      __Pyx_GIVEREF(__pyx_t_2);
+      PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2);
+      __pyx_t_2 = 0;
+      __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_9adios_mpi_attrinfo), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2130, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      if (unlikely(PyDict_SetItem(__pyx_v_extra_attrs, __pyx_v_key, __pyx_t_2) < 0)) __PYX_ERR(0, 2130, __pyx_L1_error)
+      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-      /* "adios_mpi.pyx":2108
+      /* "adios_mpi.pyx":2129
  * 
  *         for key, val in self.attrs.iteritems():
  *             if not isinstance(val, attrinfo):             # <<<<<<<<<<<<<<
@@ -33357,7 +34937,7 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_16close(struct __pyx_obj_9adios_mpi
       goto __pyx_L13;
     }
 
-    /* "adios_mpi.pyx":2111
+    /* "adios_mpi.pyx":2132
  *                 extra_attrs[key] = attrinfo(key, val, np.array(val).dtype)
  *             else:
  *                 if self.is_noxml: val.define(self.gid)             # <<<<<<<<<<<<<<
@@ -33367,68 +34947,88 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_16close(struct __pyx_obj_9adios_mpi
     /*else*/ {
       __pyx_t_1 = (__pyx_v_self->is_noxml != 0);
       if (__pyx_t_1) {
-        __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_val, __pyx_n_s_define); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2111, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_2);
-        __pyx_t_12 = __Pyx_PyInt_From_int64_t(__pyx_v_self->gid); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2111, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_12);
-        __pyx_t_10 = NULL;
-        if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
-          __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_2);
-          if (likely(__pyx_t_10)) {
-            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
-            __Pyx_INCREF(__pyx_t_10);
+        __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_val, __pyx_n_s_define); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2132, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_3);
+        __pyx_t_14 = __Pyx_PyInt_From_int64_t(__pyx_v_self->gid); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 2132, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_14);
+        __pyx_t_4 = NULL;
+        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
+          __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
+          if (likely(__pyx_t_4)) {
+            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
+            __Pyx_INCREF(__pyx_t_4);
             __Pyx_INCREF(function);
-            __Pyx_DECREF_SET(__pyx_t_2, function);
+            __Pyx_DECREF_SET(__pyx_t_3, function);
           }
         }
-        if (!__pyx_t_10) {
-          __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_12); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2111, __pyx_L1_error)
-          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
-          __Pyx_GOTREF(__pyx_t_3);
+        if (!__pyx_t_4) {
+          __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_14); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2132, __pyx_L1_error)
+          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+          __Pyx_GOTREF(__pyx_t_2);
         } else {
-          __pyx_t_11 = PyTuple_New(1+1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2111, __pyx_L1_error)
-          __Pyx_GOTREF(__pyx_t_11);
-          __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_10); __pyx_t_10 = NULL;
-          __Pyx_GIVEREF(__pyx_t_12);
-          PyTuple_SET_ITEM(__pyx_t_11, 0+1, __pyx_t_12);
-          __pyx_t_12 = 0;
-          __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_11, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2111, __pyx_L1_error)
-          __Pyx_GOTREF(__pyx_t_3);
-          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+          #if CYTHON_FAST_PYCALL
+          if (PyFunction_Check(__pyx_t_3)) {
+            PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_t_14};
+            __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2132, __pyx_L1_error)
+            __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+            __Pyx_GOTREF(__pyx_t_2);
+            __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+          } else
+          #endif
+          #if CYTHON_FAST_PYCCALL
+          if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
+            PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_t_14};
+            __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2132, __pyx_L1_error)
+            __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+            __Pyx_GOTREF(__pyx_t_2);
+            __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+          } else
+          #endif
+          {
+            __pyx_t_13 = PyTuple_New(1+1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2132, __pyx_L1_error)
+            __Pyx_GOTREF(__pyx_t_13);
+            __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_4); __pyx_t_4 = NULL;
+            __Pyx_GIVEREF(__pyx_t_14);
+            PyTuple_SET_ITEM(__pyx_t_13, 0+1, __pyx_t_14);
+            __pyx_t_14 = 0;
+            __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_13, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2132, __pyx_L1_error)
+            __Pyx_GOTREF(__pyx_t_2);
+            __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+          }
         }
-        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       }
     }
     __pyx_L13:;
   }
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "adios_mpi.pyx":2113
+  /* "adios_mpi.pyx":2134
  *                 if self.is_noxml: val.define(self.gid)
  * 
  *         for key, val in extra_attrs.iteritems():             # <<<<<<<<<<<<<<
  *             if self.is_noxml: val.define(self.gid)
  * 
  */
-  __pyx_t_6 = 0;
-  __pyx_t_3 = __Pyx_dict_iterator(__pyx_v_extra_attrs, 1, __pyx_n_s_iteritems, (&__pyx_t_5), (&__pyx_t_7)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2113, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_XDECREF(__pyx_t_4);
-  __pyx_t_4 = __pyx_t_3;
-  __pyx_t_3 = 0;
+  __pyx_t_9 = 0;
+  __pyx_t_2 = __Pyx_dict_iterator(__pyx_v_extra_attrs, 1, __pyx_n_s_iteritems, (&__pyx_t_8), (&__pyx_t_10)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2134, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_5);
+  __pyx_t_5 = __pyx_t_2;
+  __pyx_t_2 = 0;
   while (1) {
-    __pyx_t_8 = __Pyx_dict_iter_next(__pyx_t_4, __pyx_t_5, &__pyx_t_6, &__pyx_t_3, &__pyx_t_2, NULL, __pyx_t_7);
-    if (unlikely(__pyx_t_8 == 0)) break;
-    if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(0, 2113, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_3);
+    __pyx_t_11 = __Pyx_dict_iter_next(__pyx_t_5, __pyx_t_8, &__pyx_t_9, &__pyx_t_2, &__pyx_t_3, NULL, __pyx_t_10);
+    if (unlikely(__pyx_t_11 == 0)) break;
+    if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 2134, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_3);
-    __pyx_t_3 = 0;
-    __Pyx_XDECREF_SET(__pyx_v_val, __pyx_t_2);
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_2);
     __pyx_t_2 = 0;
+    __Pyx_XDECREF_SET(__pyx_v_val, __pyx_t_3);
+    __pyx_t_3 = 0;
 
-    /* "adios_mpi.pyx":2114
+    /* "adios_mpi.pyx":2135
  * 
  *         for key, val in extra_attrs.iteritems():
  *             if self.is_noxml: val.define(self.gid)             # <<<<<<<<<<<<<<
@@ -33437,42 +35037,62 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_16close(struct __pyx_obj_9adios_mpi
  */
     __pyx_t_1 = (__pyx_v_self->is_noxml != 0);
     if (__pyx_t_1) {
-      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_val, __pyx_n_s_define); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2114, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_11 = __Pyx_PyInt_From_int64_t(__pyx_v_self->gid); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2114, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_11);
-      __pyx_t_12 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
-        __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_3);
-        if (likely(__pyx_t_12)) {
-          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
-          __Pyx_INCREF(__pyx_t_12);
+      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_val, __pyx_n_s_define); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2135, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_2);
+      __pyx_t_13 = __Pyx_PyInt_From_int64_t(__pyx_v_self->gid); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2135, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_13);
+      __pyx_t_14 = NULL;
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
+        __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_2);
+        if (likely(__pyx_t_14)) {
+          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+          __Pyx_INCREF(__pyx_t_14);
           __Pyx_INCREF(function);
-          __Pyx_DECREF_SET(__pyx_t_3, function);
+          __Pyx_DECREF_SET(__pyx_t_2, function);
         }
       }
-      if (!__pyx_t_12) {
-        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_11); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2114, __pyx_L1_error)
-        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
-        __Pyx_GOTREF(__pyx_t_2);
+      if (!__pyx_t_14) {
+        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_13); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2135, __pyx_L1_error)
+        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+        __Pyx_GOTREF(__pyx_t_3);
       } else {
-        __pyx_t_10 = PyTuple_New(1+1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2114, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_10);
-        __Pyx_GIVEREF(__pyx_t_12); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_12); __pyx_t_12 = NULL;
-        __Pyx_GIVEREF(__pyx_t_11);
-        PyTuple_SET_ITEM(__pyx_t_10, 0+1, __pyx_t_11);
-        __pyx_t_11 = 0;
-        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_10, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2114, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_2);
-        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+        #if CYTHON_FAST_PYCALL
+        if (PyFunction_Check(__pyx_t_2)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_14, __pyx_t_13};
+          __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2135, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
+          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+        } else
+        #endif
+        #if CYTHON_FAST_PYCCALL
+        if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_14, __pyx_t_13};
+          __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2135, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
+          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+        } else
+        #endif
+        {
+          __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2135, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_4);
+          __Pyx_GIVEREF(__pyx_t_14); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_14); __pyx_t_14 = NULL;
+          __Pyx_GIVEREF(__pyx_t_13);
+          PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_t_13);
+          __pyx_t_13 = 0;
+          __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2135, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+        }
       }
-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     }
   }
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "adios_mpi.pyx":2125
+  /* "adios_mpi.pyx":2146
  *         """
  * 
  *         for var in self.vars.values():             # <<<<<<<<<<<<<<
@@ -33481,93 +35101,113 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_16close(struct __pyx_obj_9adios_mpi
  */
   if (unlikely(__pyx_v_self->vars == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "values");
-    __PYX_ERR(0, 2125, __pyx_L1_error)
+    __PYX_ERR(0, 2146, __pyx_L1_error)
   }
-  __pyx_t_4 = __Pyx_PyDict_Values(__pyx_v_self->vars); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2125, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_4);
-  if (likely(PyList_CheckExact(__pyx_t_4)) || PyTuple_CheckExact(__pyx_t_4)) {
-    __pyx_t_2 = __pyx_t_4; __Pyx_INCREF(__pyx_t_2); __pyx_t_5 = 0;
-    __pyx_t_13 = NULL;
+  __pyx_t_5 = __Pyx_PyDict_Values(__pyx_v_self->vars); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2146, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (likely(PyList_CheckExact(__pyx_t_5)) || PyTuple_CheckExact(__pyx_t_5)) {
+    __pyx_t_3 = __pyx_t_5; __Pyx_INCREF(__pyx_t_3); __pyx_t_8 = 0;
+    __pyx_t_15 = NULL;
   } else {
-    __pyx_t_5 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2125, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_13 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2125, __pyx_L1_error)
+    __pyx_t_8 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2146, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __pyx_t_15 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 2146, __pyx_L1_error)
   }
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   for (;;) {
-    if (likely(!__pyx_t_13)) {
-      if (likely(PyList_CheckExact(__pyx_t_2))) {
-        if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_2)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_4 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_5); __Pyx_INCREF(__pyx_t_4); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 2125, __pyx_L1_error)
+    if (likely(!__pyx_t_15)) {
+      if (likely(PyList_CheckExact(__pyx_t_3))) {
+        if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_3)) break;
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_5 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_8); __Pyx_INCREF(__pyx_t_5); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 2146, __pyx_L1_error)
         #else
-        __pyx_t_4 = PySequence_ITEM(__pyx_t_2, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2125, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_4);
+        __pyx_t_5 = PySequence_ITEM(__pyx_t_3, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2146, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_5);
         #endif
       } else {
-        if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_5); __Pyx_INCREF(__pyx_t_4); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 2125, __pyx_L1_error)
+        if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_8); __Pyx_INCREF(__pyx_t_5); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(0, 2146, __pyx_L1_error)
         #else
-        __pyx_t_4 = PySequence_ITEM(__pyx_t_2, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2125, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_4);
+        __pyx_t_5 = PySequence_ITEM(__pyx_t_3, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2146, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_5);
         #endif
       }
     } else {
-      __pyx_t_4 = __pyx_t_13(__pyx_t_2);
-      if (unlikely(!__pyx_t_4)) {
+      __pyx_t_5 = __pyx_t_15(__pyx_t_3);
+      if (unlikely(!__pyx_t_5)) {
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
           if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-          else __PYX_ERR(0, 2125, __pyx_L1_error)
+          else __PYX_ERR(0, 2146, __pyx_L1_error)
         }
         break;
       }
-      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_GOTREF(__pyx_t_5);
     }
-    __Pyx_XDECREF_SET(__pyx_v_var, __pyx_t_4);
-    __pyx_t_4 = 0;
+    __Pyx_XDECREF_SET(__pyx_v_var, __pyx_t_5);
+    __pyx_t_5 = 0;
 
-    /* "adios_mpi.pyx":2126
+    /* "adios_mpi.pyx":2147
  * 
  *         for var in self.vars.values():
  *             var.write(fd)             # <<<<<<<<<<<<<<
  * 
  *         close(fd)
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_var, __pyx_n_s_write); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2126, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_10 = __Pyx_PyInt_From_int64_t(__pyx_v_fd); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2126, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_10);
-    __pyx_t_11 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
-      __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_3);
-      if (likely(__pyx_t_11)) {
-        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
-        __Pyx_INCREF(__pyx_t_11);
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_var, __pyx_n_s_write); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2147, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_4 = __Pyx_PyInt_From_int64_t(__pyx_v_fd); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2147, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __pyx_t_13 = NULL;
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
+      __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_2);
+      if (likely(__pyx_t_13)) {
+        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+        __Pyx_INCREF(__pyx_t_13);
         __Pyx_INCREF(function);
-        __Pyx_DECREF_SET(__pyx_t_3, function);
+        __Pyx_DECREF_SET(__pyx_t_2, function);
       }
     }
-    if (!__pyx_t_11) {
-      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_10); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2126, __pyx_L1_error)
-      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
-      __Pyx_GOTREF(__pyx_t_4);
+    if (!__pyx_t_13) {
+      __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2147, __pyx_L1_error)
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      __Pyx_GOTREF(__pyx_t_5);
     } else {
-      __pyx_t_12 = PyTuple_New(1+1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2126, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_12);
-      __Pyx_GIVEREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_11); __pyx_t_11 = NULL;
-      __Pyx_GIVEREF(__pyx_t_10);
-      PyTuple_SET_ITEM(__pyx_t_12, 0+1, __pyx_t_10);
-      __pyx_t_10 = 0;
-      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_12, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2126, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_4);
-      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_2)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_13, __pyx_t_4};
+        __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2147, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
+        __Pyx_GOTREF(__pyx_t_5);
+        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_13, __pyx_t_4};
+        __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2147, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
+        __Pyx_GOTREF(__pyx_t_5);
+        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      } else
+      #endif
+      {
+        __pyx_t_14 = PyTuple_New(1+1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 2147, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_14);
+        __Pyx_GIVEREF(__pyx_t_13); PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_13); __pyx_t_13 = NULL;
+        __Pyx_GIVEREF(__pyx_t_4);
+        PyTuple_SET_ITEM(__pyx_t_14, 0+1, __pyx_t_4);
+        __pyx_t_4 = 0;
+        __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_14, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2147, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_5);
+        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+      }
     }
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-    /* "adios_mpi.pyx":2125
+    /* "adios_mpi.pyx":2146
  *         """
  * 
  *         for var in self.vars.values():             # <<<<<<<<<<<<<<
@@ -33575,9 +35215,9 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_16close(struct __pyx_obj_9adios_mpi
  * 
  */
   }
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "adios_mpi.pyx":2128
+  /* "adios_mpi.pyx":2149
  *             var.write(fd)
  * 
  *         close(fd)             # <<<<<<<<<<<<<<
@@ -33586,7 +35226,7 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_16close(struct __pyx_obj_9adios_mpi
  */
   __pyx_f_9adios_mpi_close(__pyx_v_fd, 0);
 
-  /* "adios_mpi.pyx":2082
+  /* "adios_mpi.pyx":2103
  *             raise KeyError(name)
  * 
  *     def close(self):             # <<<<<<<<<<<<<<
@@ -33601,9 +35241,9 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_16close(struct __pyx_obj_9adios_mpi
   __Pyx_XDECREF(__pyx_t_2);
   __Pyx_XDECREF(__pyx_t_3);
   __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_XDECREF(__pyx_t_10);
-  __Pyx_XDECREF(__pyx_t_11);
-  __Pyx_XDECREF(__pyx_t_12);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_XDECREF(__pyx_t_13);
+  __Pyx_XDECREF(__pyx_t_14);
   __Pyx_AddTraceback("adios_mpi.writer.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
@@ -33618,7 +35258,7 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_16close(struct __pyx_obj_9adios_mpi
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":2130
+/* "adios_mpi.pyx":2151
  *         close(fd)
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -33647,7 +35287,7 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_18__repr__(struct __pyx_obj_9adios_
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__repr__", 0);
 
-  /* "adios_mpi.pyx":2131
+  /* "adios_mpi.pyx":2152
  * 
  *     def __repr__(self):
  *         return ("AdiosWriter (fname=%r, gname=%r, "             # <<<<<<<<<<<<<<
@@ -33656,7 +35296,7 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_18__repr__(struct __pyx_obj_9adios_
  */
   __Pyx_XDECREF(__pyx_r);
 
-  /* "adios_mpi.pyx":2137
+  /* "adios_mpi.pyx":2158
  *                  self.method,
  *                  self.method_params,
  *                  self.vars.keys(),             # <<<<<<<<<<<<<<
@@ -33665,12 +35305,12 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_18__repr__(struct __pyx_obj_9adios_
  */
   if (unlikely(__pyx_v_self->vars == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "keys");
-    __PYX_ERR(0, 2137, __pyx_L1_error)
+    __PYX_ERR(0, 2158, __pyx_L1_error)
   }
-  __pyx_t_1 = __Pyx_PyDict_Keys(__pyx_v_self->vars); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2137, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyDict_Keys(__pyx_v_self->vars); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2158, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
 
-  /* "adios_mpi.pyx":2138
+  /* "adios_mpi.pyx":2159
  *                  self.method_params,
  *                  self.vars.keys(),
  *                  self.attrs.keys(),             # <<<<<<<<<<<<<<
@@ -33679,19 +35319,19 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_18__repr__(struct __pyx_obj_9adios_
  */
   if (unlikely(__pyx_v_self->attrs == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "keys");
-    __PYX_ERR(0, 2138, __pyx_L1_error)
+    __PYX_ERR(0, 2159, __pyx_L1_error)
   }
-  __pyx_t_2 = __Pyx_PyDict_Keys(__pyx_v_self->attrs); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2138, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyDict_Keys(__pyx_v_self->attrs); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2159, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
 
-  /* "adios_mpi.pyx":2133
+  /* "adios_mpi.pyx":2154
  *         return ("AdiosWriter (fname=%r, gname=%r, "
  *                 "method=%r, method_params=%r, vars=%r, attrs=%r, mode=%r)") % \
  *                 (self.fname,             # <<<<<<<<<<<<<<
  *                  self.gname,
  *                  self.method,
  */
-  __pyx_t_3 = PyTuple_New(7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2133, __pyx_L1_error)
+  __pyx_t_3 = PyTuple_New(7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2154, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_v_self->fname);
   __Pyx_GIVEREF(__pyx_v_self->fname);
@@ -33715,21 +35355,21 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_18__repr__(struct __pyx_obj_9adios_
   __pyx_t_1 = 0;
   __pyx_t_2 = 0;
 
-  /* "adios_mpi.pyx":2132
+  /* "adios_mpi.pyx":2153
  *     def __repr__(self):
  *         return ("AdiosWriter (fname=%r, gname=%r, "
  *                 "method=%r, method_params=%r, vars=%r, attrs=%r, mode=%r)") % \             # <<<<<<<<<<<<<<
  *                 (self.fname,
  *                  self.gname,
  */
-  __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_AdiosWriter_fname_r_gname_r_meth, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2132, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_AdiosWriter_fname_r_gname_r_meth, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2153, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":2130
+  /* "adios_mpi.pyx":2151
  *         close(fd)
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -33750,7 +35390,7 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_18__repr__(struct __pyx_obj_9adios_
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":2141
+/* "adios_mpi.pyx":2162
  *                  self.mode)
  * 
  *     def __enter__(self):             # <<<<<<<<<<<<<<
@@ -33777,7 +35417,7 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_20__enter__(struct __pyx_obj_9adios
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__enter__", 0);
 
-  /* "adios_mpi.pyx":2143
+  /* "adios_mpi.pyx":2164
  *     def __enter__(self):
  *         """ Enter for with statement """
  *         return self             # <<<<<<<<<<<<<<
@@ -33789,7 +35429,7 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_20__enter__(struct __pyx_obj_9adios
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":2141
+  /* "adios_mpi.pyx":2162
  *                  self.mode)
  * 
  *     def __enter__(self):             # <<<<<<<<<<<<<<
@@ -33804,7 +35444,7 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_20__enter__(struct __pyx_obj_9adios
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":2145
+/* "adios_mpi.pyx":2166
  *         return self
  * 
  *     def __exit__(self, exception_type, exception_value, traceback):             # <<<<<<<<<<<<<<
@@ -33843,16 +35483,16 @@ static PyObject *__pyx_pw_9adios_mpi_6writer_23__exit__(PyObject *__pyx_v_self,
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_exception_value)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, 1); __PYX_ERR(0, 2145, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, 1); __PYX_ERR(0, 2166, __pyx_L3_error)
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_traceback)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, 2); __PYX_ERR(0, 2145, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, 2); __PYX_ERR(0, 2166, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__exit__") < 0)) __PYX_ERR(0, 2145, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__exit__") < 0)) __PYX_ERR(0, 2166, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -33867,7 +35507,7 @@ static PyObject *__pyx_pw_9adios_mpi_6writer_23__exit__(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2145, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2166, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.writer.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -33888,17 +35528,17 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_22__exit__(struct __pyx_obj_9adios_
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__exit__", 0);
 
-  /* "adios_mpi.pyx":2147
+  /* "adios_mpi.pyx":2168
  *     def __exit__(self, exception_type, exception_value, traceback):
  *         """ Close file on exit. """
  *         self.close()             # <<<<<<<<<<<<<<
  * 
  * cdef class attrinfo(object):
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_close); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2147, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_close); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2168, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
     __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
     if (likely(__pyx_t_3)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
@@ -33908,16 +35548,16 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_22__exit__(struct __pyx_obj_9adios_
     }
   }
   if (__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2147, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2168, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   } else {
-    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2147, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2168, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":2145
+  /* "adios_mpi.pyx":2166
  *         return self
  * 
  *     def __exit__(self, exception_type, exception_value, traceback):             # <<<<<<<<<<<<<<
@@ -33940,7 +35580,7 @@ static PyObject *__pyx_pf_9adios_mpi_6writer_22__exit__(struct __pyx_obj_9adios_
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":2156
+/* "adios_mpi.pyx":2177
  * 
  *     property name:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -33966,7 +35606,7 @@ static PyObject *__pyx_pf_9adios_mpi_8attrinfo_4name___get__(struct __pyx_obj_9a
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios_mpi.pyx":2157
+  /* "adios_mpi.pyx":2178
  *     property name:
  *         def __get__(self):
  *             return self.name             # <<<<<<<<<<<<<<
@@ -33978,7 +35618,7 @@ static PyObject *__pyx_pf_9adios_mpi_8attrinfo_4name___get__(struct __pyx_obj_9a
   __pyx_r = __pyx_v_self->name;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":2156
+  /* "adios_mpi.pyx":2177
  * 
  *     property name:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -33993,7 +35633,7 @@ static PyObject *__pyx_pf_9adios_mpi_8attrinfo_4name___get__(struct __pyx_obj_9a
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":2160
+/* "adios_mpi.pyx":2181
  * 
  *     property is_static:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -34020,7 +35660,7 @@ static PyObject *__pyx_pf_9adios_mpi_8attrinfo_9is_static___get__(struct __pyx_o
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios_mpi.pyx":2161
+  /* "adios_mpi.pyx":2182
  *     property is_static:
  *         def __get__(self):
  *             return self.is_static             # <<<<<<<<<<<<<<
@@ -34028,13 +35668,13 @@ static PyObject *__pyx_pf_9adios_mpi_8attrinfo_9is_static___get__(struct __pyx_o
  *     property dtype:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->is_static); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2161, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->is_static); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2182, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":2160
+  /* "adios_mpi.pyx":2181
  * 
  *     property is_static:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -34053,7 +35693,7 @@ static PyObject *__pyx_pf_9adios_mpi_8attrinfo_9is_static___get__(struct __pyx_o
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":2164
+/* "adios_mpi.pyx":2185
  * 
  *     property dtype:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -34079,7 +35719,7 @@ static PyObject *__pyx_pf_9adios_mpi_8attrinfo_5dtype___get__(struct __pyx_obj_9
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios_mpi.pyx":2165
+  /* "adios_mpi.pyx":2186
  *     property dtype:
  *         def __get__(self):
  *             return self.dtype             # <<<<<<<<<<<<<<
@@ -34091,7 +35731,7 @@ static PyObject *__pyx_pf_9adios_mpi_8attrinfo_5dtype___get__(struct __pyx_obj_9
   __pyx_r = __pyx_v_self->dtype;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":2164
+  /* "adios_mpi.pyx":2185
  * 
  *     property dtype:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -34106,7 +35746,7 @@ static PyObject *__pyx_pf_9adios_mpi_8attrinfo_5dtype___get__(struct __pyx_obj_9
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":2168
+/* "adios_mpi.pyx":2189
  * 
  *     property value:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -34132,7 +35772,7 @@ static PyObject *__pyx_pf_9adios_mpi_8attrinfo_5value___get__(struct __pyx_obj_9
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios_mpi.pyx":2169
+  /* "adios_mpi.pyx":2190
  *     property value:
  *         def __get__(self):
  *             return self.value             # <<<<<<<<<<<<<<
@@ -34144,7 +35784,7 @@ static PyObject *__pyx_pf_9adios_mpi_8attrinfo_5value___get__(struct __pyx_obj_9
   __pyx_r = __pyx_v_self->value;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":2168
+  /* "adios_mpi.pyx":2189
  * 
  *     property value:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -34159,7 +35799,7 @@ static PyObject *__pyx_pf_9adios_mpi_8attrinfo_5value___get__(struct __pyx_obj_9
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":2171
+/* "adios_mpi.pyx":2192
  *             return self.value
  * 
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -34185,7 +35825,7 @@ static int __pyx_pf_9adios_mpi_8attrinfo_5value_2__set__(struct __pyx_obj_9adios
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "adios_mpi.pyx":2172
+  /* "adios_mpi.pyx":2193
  * 
  *         def __set__(self, value):
  *             self.value = value             # <<<<<<<<<<<<<<
@@ -34198,7 +35838,7 @@ static int __pyx_pf_9adios_mpi_8attrinfo_5value_2__set__(struct __pyx_obj_9adios
   __Pyx_DECREF(__pyx_v_self->value);
   __pyx_v_self->value = __pyx_v_value;
 
-  /* "adios_mpi.pyx":2171
+  /* "adios_mpi.pyx":2192
  *             return self.value
  * 
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -34212,7 +35852,7 @@ static int __pyx_pf_9adios_mpi_8attrinfo_5value_2__set__(struct __pyx_obj_9adios
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":2174
+/* "adios_mpi.pyx":2195
  *             self.value = value
  * 
  *     def __init__(self, str name,             # <<<<<<<<<<<<<<
@@ -34234,7 +35874,7 @@ static int __pyx_pw_9adios_mpi_8attrinfo_1__init__(PyObject *__pyx_v_self, PyObj
     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,&__pyx_n_s_value,&__pyx_n_s_dtype,&__pyx_n_s_is_static,0};
     PyObject* values[4] = {0,0,0,0};
 
-    /* "adios_mpi.pyx":2175
+    /* "adios_mpi.pyx":2196
  * 
  *     def __init__(self, str name,
  *                  value = None,             # <<<<<<<<<<<<<<
@@ -34243,7 +35883,7 @@ static int __pyx_pw_9adios_mpi_8attrinfo_1__init__(PyObject *__pyx_v_self, PyObj
  */
     values[1] = ((PyObject *)Py_None);
 
-    /* "adios_mpi.pyx":2176
+    /* "adios_mpi.pyx":2197
  *     def __init__(self, str name,
  *                  value = None,
  *                  dtype = None,             # <<<<<<<<<<<<<<
@@ -34284,7 +35924,7 @@ static int __pyx_pw_9adios_mpi_8attrinfo_1__init__(PyObject *__pyx_v_self, PyObj
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 2174, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 2195, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -34300,10 +35940,10 @@ static int __pyx_pw_9adios_mpi_8attrinfo_1__init__(PyObject *__pyx_v_self, PyObj
     __pyx_v_value = values[1];
     __pyx_v_dtype = values[2];
     if (values[3]) {
-      __pyx_v_is_static = __Pyx_PyObject_IsTrue(values[3]); if (unlikely((__pyx_v_is_static == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2177, __pyx_L3_error)
+      __pyx_v_is_static = __Pyx_PyObject_IsTrue(values[3]); if (unlikely((__pyx_v_is_static == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2198, __pyx_L3_error)
     } else {
 
-      /* "adios_mpi.pyx":2177
+      /* "adios_mpi.pyx":2198
  *                  value = None,
  *                  dtype = None,
  *                  bint is_static = True):             # <<<<<<<<<<<<<<
@@ -34315,16 +35955,16 @@ static int __pyx_pw_9adios_mpi_8attrinfo_1__init__(PyObject *__pyx_v_self, PyObj
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2174, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2195, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.attrinfo.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 2174, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 2195, __pyx_L1_error)
   __pyx_r = __pyx_pf_9adios_mpi_8attrinfo___init__(((struct __pyx_obj_9adios_mpi_attrinfo *)__pyx_v_self), __pyx_v_name, __pyx_v_value, __pyx_v_dtype, __pyx_v_is_static);
 
-  /* "adios_mpi.pyx":2174
+  /* "adios_mpi.pyx":2195
  *             self.value = value
  * 
  *     def __init__(self, str name,             # <<<<<<<<<<<<<<
@@ -34346,7 +35986,7 @@ static int __pyx_pf_9adios_mpi_8attrinfo___init__(struct __pyx_obj_9adios_mpi_at
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__init__", 0);
 
-  /* "adios_mpi.pyx":2178
+  /* "adios_mpi.pyx":2199
  *                  dtype = None,
  *                  bint is_static = True):
  *         self.name = name             # <<<<<<<<<<<<<<
@@ -34359,7 +35999,7 @@ static int __pyx_pf_9adios_mpi_8attrinfo___init__(struct __pyx_obj_9adios_mpi_at
   __Pyx_DECREF(__pyx_v_self->name);
   __pyx_v_self->name = __pyx_v_name;
 
-  /* "adios_mpi.pyx":2179
+  /* "adios_mpi.pyx":2200
  *                  bint is_static = True):
  *         self.name = name
  *         self.value = value             # <<<<<<<<<<<<<<
@@ -34372,7 +36012,7 @@ static int __pyx_pf_9adios_mpi_8attrinfo___init__(struct __pyx_obj_9adios_mpi_at
   __Pyx_DECREF(__pyx_v_self->value);
   __pyx_v_self->value = __pyx_v_value;
 
-  /* "adios_mpi.pyx":2180
+  /* "adios_mpi.pyx":2201
  *         self.name = name
  *         self.value = value
  *         self.dtype = dtype             # <<<<<<<<<<<<<<
@@ -34385,7 +36025,7 @@ static int __pyx_pf_9adios_mpi_8attrinfo___init__(struct __pyx_obj_9adios_mpi_at
   __Pyx_DECREF(__pyx_v_self->dtype);
   __pyx_v_self->dtype = __pyx_v_dtype;
 
-  /* "adios_mpi.pyx":2181
+  /* "adios_mpi.pyx":2202
  *         self.value = value
  *         self.dtype = dtype
  *         self.is_static = is_static             # <<<<<<<<<<<<<<
@@ -34394,7 +36034,7 @@ static int __pyx_pf_9adios_mpi_8attrinfo___init__(struct __pyx_obj_9adios_mpi_at
  */
   __pyx_v_self->is_static = __pyx_v_is_static;
 
-  /* "adios_mpi.pyx":2174
+  /* "adios_mpi.pyx":2195
  *             self.value = value
  * 
  *     def __init__(self, str name,             # <<<<<<<<<<<<<<
@@ -34408,7 +36048,7 @@ static int __pyx_pf_9adios_mpi_8attrinfo___init__(struct __pyx_obj_9adios_mpi_at
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":2183
+/* "adios_mpi.pyx":2204
  *         self.is_static = is_static
  * 
  *     def define(self, int64_t gid):             # <<<<<<<<<<<<<<
@@ -34425,7 +36065,7 @@ static PyObject *__pyx_pw_9adios_mpi_8attrinfo_3define(PyObject *__pyx_v_self, P
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("define (wrapper)", 0);
   assert(__pyx_arg_gid); {
-    __pyx_v_gid = __Pyx_PyInt_As_int64_t(__pyx_arg_gid); if (unlikely((__pyx_v_gid == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 2183, __pyx_L3_error)
+    __pyx_v_gid = __Pyx_PyInt_As_int64_t(__pyx_arg_gid); if (unlikely((__pyx_v_gid == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2204, __pyx_L3_error)
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L3_error:;
@@ -34449,7 +36089,7 @@ static PyObject *__pyx_pf_9adios_mpi_8attrinfo_2define(struct __pyx_obj_9adios_m
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("define", 0);
 
-  /* "adios_mpi.pyx":2184
+  /* "adios_mpi.pyx":2205
  * 
  *     def define(self, int64_t gid):
  *         if self.is_static:             # <<<<<<<<<<<<<<
@@ -34459,7 +36099,7 @@ static PyObject *__pyx_pf_9adios_mpi_8attrinfo_2define(struct __pyx_obj_9adios_m
   __pyx_t_1 = (__pyx_v_self->is_static != 0);
   if (__pyx_t_1) {
 
-    /* "adios_mpi.pyx":2185
+    /* "adios_mpi.pyx":2206
  *     def define(self, int64_t gid):
  *         if self.is_static:
  *             if self.value is None:             # <<<<<<<<<<<<<<
@@ -34470,20 +36110,20 @@ static PyObject *__pyx_pf_9adios_mpi_8attrinfo_2define(struct __pyx_obj_9adios_m
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
 
-      /* "adios_mpi.pyx":2186
+      /* "adios_mpi.pyx":2207
  *         if self.is_static:
  *             if self.value is None:
  *                 raise TypeError("Value is none")             # <<<<<<<<<<<<<<
  * 
  *             define_attribute_byvalue(gid, self.name, "", self.value)
  */
-      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__58, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2186, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__60, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2207, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_Raise(__pyx_t_3, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      __PYX_ERR(0, 2186, __pyx_L1_error)
+      __PYX_ERR(0, 2207, __pyx_L1_error)
 
-      /* "adios_mpi.pyx":2185
+      /* "adios_mpi.pyx":2206
  *     def define(self, int64_t gid):
  *         if self.is_static:
  *             if self.value is None:             # <<<<<<<<<<<<<<
@@ -34492,7 +36132,7 @@ static PyObject *__pyx_pf_9adios_mpi_8attrinfo_2define(struct __pyx_obj_9adios_m
  */
     }
 
-    /* "adios_mpi.pyx":2188
+    /* "adios_mpi.pyx":2209
  *                 raise TypeError("Value is none")
  * 
  *             define_attribute_byvalue(gid, self.name, "", self.value)             # <<<<<<<<<<<<<<
@@ -34507,7 +36147,7 @@ static PyObject *__pyx_pf_9adios_mpi_8attrinfo_2define(struct __pyx_obj_9adios_m
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-    /* "adios_mpi.pyx":2184
+    /* "adios_mpi.pyx":2205
  * 
  *     def define(self, int64_t gid):
  *         if self.is_static:             # <<<<<<<<<<<<<<
@@ -34517,7 +36157,7 @@ static PyObject *__pyx_pf_9adios_mpi_8attrinfo_2define(struct __pyx_obj_9adios_m
     goto __pyx_L3;
   }
 
-  /* "adios_mpi.pyx":2193
+  /* "adios_mpi.pyx":2214
  *             ##define_attribute(gid, self.name, "",
  *             ##                 atype, "", str(self.value))
  *             raise NotImplementedError             # <<<<<<<<<<<<<<
@@ -34526,11 +36166,11 @@ static PyObject *__pyx_pf_9adios_mpi_8attrinfo_2define(struct __pyx_obj_9adios_m
  */
   /*else*/ {
     __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0);
-    __PYX_ERR(0, 2193, __pyx_L1_error)
+    __PYX_ERR(0, 2214, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "adios_mpi.pyx":2183
+  /* "adios_mpi.pyx":2204
  *         self.is_static = is_static
  * 
  *     def define(self, int64_t gid):             # <<<<<<<<<<<<<<
@@ -34552,7 +36192,7 @@ static PyObject *__pyx_pf_9adios_mpi_8attrinfo_2define(struct __pyx_obj_9adios_m
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":2195
+/* "adios_mpi.pyx":2216
  *             raise NotImplementedError
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -34580,7 +36220,7 @@ static PyObject *__pyx_pf_9adios_mpi_8attrinfo_4__repr__(struct __pyx_obj_9adios
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("__repr__", 0);
 
-  /* "adios_mpi.pyx":2196
+  /* "adios_mpi.pyx":2217
  * 
  *     def __repr__(self):
  *         return ("AdiosAttrinfo (name=%r, is_static=%r, value=%r, dtype=%r)") % \             # <<<<<<<<<<<<<<
@@ -34589,24 +36229,24 @@ static PyObject *__pyx_pf_9adios_mpi_8attrinfo_4__repr__(struct __pyx_obj_9adios
  */
   __Pyx_XDECREF(__pyx_r);
 
-  /* "adios_mpi.pyx":2198
+  /* "adios_mpi.pyx":2219
  *         return ("AdiosAttrinfo (name=%r, is_static=%r, value=%r, dtype=%r)") % \
  *                 (self.name,
  *                  self.is_static,             # <<<<<<<<<<<<<<
  *                  self.value,
  *                  self.dtype)
  */
-  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->is_static); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2198, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->is_static); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2219, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
 
-  /* "adios_mpi.pyx":2197
+  /* "adios_mpi.pyx":2218
  *     def __repr__(self):
  *         return ("AdiosAttrinfo (name=%r, is_static=%r, value=%r, dtype=%r)") % \
  *                 (self.name,             # <<<<<<<<<<<<<<
  *                  self.is_static,
  *                  self.value,
  */
-  __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2197, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2218, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_v_self->name);
   __Pyx_GIVEREF(__pyx_v_self->name);
@@ -34621,21 +36261,21 @@ static PyObject *__pyx_pf_9adios_mpi_8attrinfo_4__repr__(struct __pyx_obj_9adios
   PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_v_self->dtype);
   __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":2196
+  /* "adios_mpi.pyx":2217
  * 
  *     def __repr__(self):
  *         return ("AdiosAttrinfo (name=%r, is_static=%r, value=%r, dtype=%r)") % \             # <<<<<<<<<<<<<<
  *                 (self.name,
  *                  self.is_static,
  */
-  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_AdiosAttrinfo_name_r_is_static_r, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2196, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_AdiosAttrinfo_name_r_is_static_r, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2217, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":2195
+  /* "adios_mpi.pyx":2216
  *             raise NotImplementedError
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -34655,7 +36295,7 @@ static PyObject *__pyx_pf_9adios_mpi_8attrinfo_4__repr__(struct __pyx_obj_9adios
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":2212
+/* "adios_mpi.pyx":2233
  *     property transform:
  *         """ Transform method """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -34682,7 +36322,7 @@ static PyObject *__pyx_pf_9adios_mpi_7varinfo_9transform___get__(struct __pyx_ob
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "adios_mpi.pyx":2213
+  /* "adios_mpi.pyx":2234
  *         """ Transform method """
  *         def __get__(self):
  *             return self.fname             # <<<<<<<<<<<<<<
@@ -34690,13 +36330,13 @@ static PyObject *__pyx_pf_9adios_mpi_7varinfo_9transform___get__(struct __pyx_ob
  *             self.transform = value
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_fname); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2213, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_fname); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2234, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":2212
+  /* "adios_mpi.pyx":2233
  *     property transform:
  *         """ Transform method """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -34715,7 +36355,7 @@ static PyObject *__pyx_pf_9adios_mpi_7varinfo_9transform___get__(struct __pyx_ob
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":2214
+/* "adios_mpi.pyx":2235
  *         def __get__(self):
  *             return self.fname
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -34742,14 +36382,14 @@ static int __pyx_pf_9adios_mpi_7varinfo_9transform_2__set__(struct __pyx_obj_9ad
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "adios_mpi.pyx":2215
+  /* "adios_mpi.pyx":2236
  *             return self.fname
  *         def __set__(self, value):
  *             self.transform = value             # <<<<<<<<<<<<<<
  * 
  *     def __init__(self, str name,
  */
-  if (!(likely(PyString_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(0, 2215, __pyx_L1_error)
+  if (!(likely(PyString_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(0, 2236, __pyx_L1_error)
   __pyx_t_1 = __pyx_v_value;
   __Pyx_INCREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
@@ -34758,7 +36398,7 @@ static int __pyx_pf_9adios_mpi_7varinfo_9transform_2__set__(struct __pyx_obj_9ad
   __pyx_v_self->transform = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":2214
+  /* "adios_mpi.pyx":2235
  *         def __get__(self):
  *             return self.fname
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -34778,7 +36418,7 @@ static int __pyx_pf_9adios_mpi_7varinfo_9transform_2__set__(struct __pyx_obj_9ad
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":2217
+/* "adios_mpi.pyx":2238
  *             self.transform = value
  * 
  *     def __init__(self, str name,             # <<<<<<<<<<<<<<
@@ -34801,11 +36441,11 @@ static int __pyx_pw_9adios_mpi_7varinfo_1__init__(PyObject *__pyx_v_self, PyObje
   {
     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,&__pyx_n_s_ldim,&__pyx_n_s_gdim,&__pyx_n_s_offset,&__pyx_n_s_value,&__pyx_n_s_transform,0};
     PyObject* values[6] = {0,0,0,0,0,0};
-    values[1] = __pyx_k__59;
-    values[2] = __pyx_k__60;
-    values[3] = __pyx_k__61;
+    values[1] = __pyx_k__61;
+    values[2] = __pyx_k__62;
+    values[3] = __pyx_k__63;
 
-    /* "adios_mpi.pyx":2221
+    /* "adios_mpi.pyx":2242
  *                  gdim = tuple(),
  *                  offset = tuple(),
  *                  value = None,             # <<<<<<<<<<<<<<
@@ -34814,7 +36454,7 @@ static int __pyx_pw_9adios_mpi_7varinfo_1__init__(PyObject *__pyx_v_self, PyObje
  */
     values[4] = ((PyObject *)Py_None);
 
-    /* "adios_mpi.pyx":2222
+    /* "adios_mpi.pyx":2243
  *                  offset = tuple(),
  *                  value = None,
  *                  transform = None):             # <<<<<<<<<<<<<<
@@ -34867,7 +36507,7 @@ static int __pyx_pw_9adios_mpi_7varinfo_1__init__(PyObject *__pyx_v_self, PyObje
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 2217, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 2238, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -34890,16 +36530,16 @@ static int __pyx_pw_9adios_mpi_7varinfo_1__init__(PyObject *__pyx_v_self, PyObje
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2217, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2238, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.varinfo.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 2217, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyString_Type), 1, "name", 1))) __PYX_ERR(0, 2238, __pyx_L1_error)
   __pyx_r = __pyx_pf_9adios_mpi_7varinfo___init__(((struct __pyx_obj_9adios_mpi_varinfo *)__pyx_v_self), __pyx_v_name, __pyx_v_ldim, __pyx_v_gdim, __pyx_v_offset, __pyx_v_value, __pyx_v_transform);
 
-  /* "adios_mpi.pyx":2217
+  /* "adios_mpi.pyx":2238
  *             self.transform = value
  * 
  *     def __init__(self, str name,             # <<<<<<<<<<<<<<
@@ -34922,7 +36562,7 @@ static int __pyx_pf_9adios_mpi_7varinfo___init__(struct __pyx_obj_9adios_mpi_var
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__init__", 0);
 
-  /* "adios_mpi.pyx":2223
+  /* "adios_mpi.pyx":2244
  *                  value = None,
  *                  transform = None):
  *         self.name = name             # <<<<<<<<<<<<<<
@@ -34935,7 +36575,7 @@ static int __pyx_pf_9adios_mpi_7varinfo___init__(struct __pyx_obj_9adios_mpi_var
   __Pyx_DECREF(__pyx_v_self->name);
   __pyx_v_self->name = __pyx_v_name;
 
-  /* "adios_mpi.pyx":2224
+  /* "adios_mpi.pyx":2245
  *                  transform = None):
  *         self.name = name
  *         self.ldim = ldim             # <<<<<<<<<<<<<<
@@ -34948,7 +36588,7 @@ static int __pyx_pf_9adios_mpi_7varinfo___init__(struct __pyx_obj_9adios_mpi_var
   __Pyx_DECREF(__pyx_v_self->ldim);
   __pyx_v_self->ldim = __pyx_v_ldim;
 
-  /* "adios_mpi.pyx":2225
+  /* "adios_mpi.pyx":2246
  *         self.name = name
  *         self.ldim = ldim
  *         self.gdim = gdim             # <<<<<<<<<<<<<<
@@ -34961,7 +36601,7 @@ static int __pyx_pf_9adios_mpi_7varinfo___init__(struct __pyx_obj_9adios_mpi_var
   __Pyx_DECREF(__pyx_v_self->gdim);
   __pyx_v_self->gdim = __pyx_v_gdim;
 
-  /* "adios_mpi.pyx":2226
+  /* "adios_mpi.pyx":2247
  *         self.ldim = ldim
  *         self.gdim = gdim
  *         self.offset = offset             # <<<<<<<<<<<<<<
@@ -34974,7 +36614,7 @@ static int __pyx_pf_9adios_mpi_7varinfo___init__(struct __pyx_obj_9adios_mpi_var
   __Pyx_DECREF(__pyx_v_self->offset);
   __pyx_v_self->offset = __pyx_v_offset;
 
-  /* "adios_mpi.pyx":2227
+  /* "adios_mpi.pyx":2248
  *         self.gdim = gdim
  *         self.offset = offset
  *         self.value = value             # <<<<<<<<<<<<<<
@@ -34987,14 +36627,14 @@ static int __pyx_pf_9adios_mpi_7varinfo___init__(struct __pyx_obj_9adios_mpi_var
   __Pyx_DECREF(__pyx_v_self->value);
   __pyx_v_self->value = __pyx_v_value;
 
-  /* "adios_mpi.pyx":2228
+  /* "adios_mpi.pyx":2249
  *         self.offset = offset
  *         self.value = value
  *         self.transform = transform             # <<<<<<<<<<<<<<
  * 
  *     def define(self, int64_t gid):
  */
-  if (!(likely(PyString_CheckExact(__pyx_v_transform))||((__pyx_v_transform) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_v_transform)->tp_name), 0))) __PYX_ERR(0, 2228, __pyx_L1_error)
+  if (!(likely(PyString_CheckExact(__pyx_v_transform))||((__pyx_v_transform) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_v_transform)->tp_name), 0))) __PYX_ERR(0, 2249, __pyx_L1_error)
   __pyx_t_1 = __pyx_v_transform;
   __Pyx_INCREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
@@ -35003,7 +36643,7 @@ static int __pyx_pf_9adios_mpi_7varinfo___init__(struct __pyx_obj_9adios_mpi_var
   __pyx_v_self->transform = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":2217
+  /* "adios_mpi.pyx":2238
  *             self.transform = value
  * 
  *     def __init__(self, str name,             # <<<<<<<<<<<<<<
@@ -35023,12 +36663,12 @@ static int __pyx_pf_9adios_mpi_7varinfo___init__(struct __pyx_obj_9adios_mpi_var
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":2230
+/* "adios_mpi.pyx":2251
  *         self.transform = transform
  * 
  *     def define(self, int64_t gid):             # <<<<<<<<<<<<<<
  *         if self.value is None:
- *             raise TypeError("Value is none")
+ *             print ("Warning: skipping defining var(%r) with None value" %(self.name))
  */
 
 /* Python wrapper */
@@ -35040,7 +36680,7 @@ static PyObject *__pyx_pw_9adios_mpi_7varinfo_3define(PyObject *__pyx_v_self, Py
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("define (wrapper)", 0);
   assert(__pyx_arg_gid); {
-    __pyx_v_gid = __Pyx_PyInt_As_int64_t(__pyx_arg_gid); if (unlikely((__pyx_v_gid == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 2230, __pyx_L3_error)
+    __pyx_v_gid = __Pyx_PyInt_As_int64_t(__pyx_arg_gid); if (unlikely((__pyx_v_gid == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2251, __pyx_L3_error)
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L3_error:;
@@ -35067,8 +36707,8 @@ static PyObject *__pyx_pf_9adios_mpi_7varinfo_2define(struct __pyx_obj_9adios_mp
   int __pyx_t_1;
   int __pyx_t_2;
   PyObject *__pyx_t_3 = NULL;
-  int __pyx_t_4;
-  PyObject *__pyx_t_5 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  int __pyx_t_5;
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   int __pyx_t_8;
@@ -35077,41 +36717,58 @@ static PyObject *__pyx_pf_9adios_mpi_7varinfo_2define(struct __pyx_obj_9adios_mp
   struct __pyx_opt_args_9adios_mpi_define_var __pyx_t_11;
   __Pyx_RefNannySetupContext("define", 0);
 
-  /* "adios_mpi.pyx":2231
+  /* "adios_mpi.pyx":2252
  * 
  *     def define(self, int64_t gid):
  *         if self.value is None:             # <<<<<<<<<<<<<<
- *             raise TypeError("Value is none")
- * 
+ *             print ("Warning: skipping defining var(%r) with None value" %(self.name))
+ *             return
  */
   __pyx_t_1 = (__pyx_v_self->value == Py_None);
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "adios_mpi.pyx":2232
+    /* "adios_mpi.pyx":2253
  *     def define(self, int64_t gid):
  *         if self.value is None:
- *             raise TypeError("Value is none")             # <<<<<<<<<<<<<<
+ *             print ("Warning: skipping defining var(%r) with None value" %(self.name))             # <<<<<<<<<<<<<<
+ *             return
  * 
- *         ldim_ = self.ldim
  */
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__62, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2232, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_Warning_skipping_defining_var_r, __pyx_v_self->name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2253, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
+    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2253, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_GIVEREF(__pyx_t_3);
+    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
+    __pyx_t_3 = 0;
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2253, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __PYX_ERR(0, 2232, __pyx_L1_error)
 
-    /* "adios_mpi.pyx":2231
+    /* "adios_mpi.pyx":2254
+ *         if self.value is None:
+ *             print ("Warning: skipping defining var(%r) with None value" %(self.name))
+ *             return             # <<<<<<<<<<<<<<
+ * 
+ *         ldim_ = self.ldim
+ */
+    __Pyx_XDECREF(__pyx_r);
+    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+    goto __pyx_L0;
+
+    /* "adios_mpi.pyx":2252
  * 
  *     def define(self, int64_t gid):
  *         if self.value is None:             # <<<<<<<<<<<<<<
- *             raise TypeError("Value is none")
- * 
+ *             print ("Warning: skipping defining var(%r) with None value" %(self.name))
+ *             return
  */
   }
 
-  /* "adios_mpi.pyx":2234
- *             raise TypeError("Value is none")
+  /* "adios_mpi.pyx":2256
+ *             return
  * 
  *         ldim_ = self.ldim             # <<<<<<<<<<<<<<
  *         if isinstance(self.ldim, (tuple, list)):
@@ -35122,7 +36779,7 @@ static PyObject *__pyx_pf_9adios_mpi_7varinfo_2define(struct __pyx_obj_9adios_mp
   __pyx_v_ldim_ = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "adios_mpi.pyx":2235
+  /* "adios_mpi.pyx":2257
  * 
  *         ldim_ = self.ldim
  *         if isinstance(self.ldim, (tuple, list)):             # <<<<<<<<<<<<<<
@@ -35133,35 +36790,35 @@ static PyObject *__pyx_pf_9adios_mpi_7varinfo_2define(struct __pyx_obj_9adios_mp
   __Pyx_INCREF(__pyx_t_3);
   __pyx_t_1 = PyTuple_Check(__pyx_t_3); 
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_4 = (__pyx_t_1 != 0);
-  if (!__pyx_t_4) {
+  __pyx_t_5 = (__pyx_t_1 != 0);
+  if (!__pyx_t_5) {
   } else {
-    __pyx_t_2 = __pyx_t_4;
+    __pyx_t_2 = __pyx_t_5;
     goto __pyx_L5_bool_binop_done;
   }
   __pyx_t_3 = __pyx_v_self->ldim;
   __Pyx_INCREF(__pyx_t_3);
-  __pyx_t_4 = PyList_Check(__pyx_t_3); 
+  __pyx_t_5 = PyList_Check(__pyx_t_3); 
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_1 = (__pyx_t_4 != 0);
+  __pyx_t_1 = (__pyx_t_5 != 0);
   __pyx_t_2 = __pyx_t_1;
   __pyx_L5_bool_binop_done:;
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "adios_mpi.pyx":2236
+    /* "adios_mpi.pyx":2258
  *         ldim_ = self.ldim
  *         if isinstance(self.ldim, (tuple, list)):
  *             ldim_ = tuple(self.ldim)             # <<<<<<<<<<<<<<
  * 
  *         gdim_ = self.gdim
  */
-    __pyx_t_3 = PySequence_Tuple(__pyx_v_self->ldim); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2236, __pyx_L1_error)
+    __pyx_t_3 = PySequence_Tuple(__pyx_v_self->ldim); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2258, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_ldim_, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "adios_mpi.pyx":2235
+    /* "adios_mpi.pyx":2257
  * 
  *         ldim_ = self.ldim
  *         if isinstance(self.ldim, (tuple, list)):             # <<<<<<<<<<<<<<
@@ -35170,7 +36827,7 @@ static PyObject *__pyx_pf_9adios_mpi_7varinfo_2define(struct __pyx_obj_9adios_mp
  */
   }
 
-  /* "adios_mpi.pyx":2238
+  /* "adios_mpi.pyx":2260
  *             ldim_ = tuple(self.ldim)
  * 
  *         gdim_ = self.gdim             # <<<<<<<<<<<<<<
@@ -35182,7 +36839,7 @@ static PyObject *__pyx_pf_9adios_mpi_7varinfo_2define(struct __pyx_obj_9adios_mp
   __pyx_v_gdim_ = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "adios_mpi.pyx":2239
+  /* "adios_mpi.pyx":2261
  * 
  *         gdim_ = self.gdim
  *         if isinstance(self.gdim, (tuple, list)):             # <<<<<<<<<<<<<<
@@ -35193,35 +36850,35 @@ static PyObject *__pyx_pf_9adios_mpi_7varinfo_2define(struct __pyx_obj_9adios_mp
   __Pyx_INCREF(__pyx_t_3);
   __pyx_t_2 = PyTuple_Check(__pyx_t_3); 
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_4 = (__pyx_t_2 != 0);
-  if (!__pyx_t_4) {
+  __pyx_t_5 = (__pyx_t_2 != 0);
+  if (!__pyx_t_5) {
   } else {
-    __pyx_t_1 = __pyx_t_4;
+    __pyx_t_1 = __pyx_t_5;
     goto __pyx_L8_bool_binop_done;
   }
   __pyx_t_3 = __pyx_v_self->gdim;
   __Pyx_INCREF(__pyx_t_3);
-  __pyx_t_4 = PyList_Check(__pyx_t_3); 
+  __pyx_t_5 = PyList_Check(__pyx_t_3); 
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_2 = (__pyx_t_4 != 0);
+  __pyx_t_2 = (__pyx_t_5 != 0);
   __pyx_t_1 = __pyx_t_2;
   __pyx_L8_bool_binop_done:;
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "adios_mpi.pyx":2240
+    /* "adios_mpi.pyx":2262
  *         gdim_ = self.gdim
  *         if isinstance(self.gdim, (tuple, list)):
  *             gdim_ = tuple(self.gdim)             # <<<<<<<<<<<<<<
  * 
  *         offset_ = self.offset
  */
-    __pyx_t_3 = PySequence_Tuple(__pyx_v_self->gdim); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2240, __pyx_L1_error)
+    __pyx_t_3 = PySequence_Tuple(__pyx_v_self->gdim); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2262, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_gdim_, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "adios_mpi.pyx":2239
+    /* "adios_mpi.pyx":2261
  * 
  *         gdim_ = self.gdim
  *         if isinstance(self.gdim, (tuple, list)):             # <<<<<<<<<<<<<<
@@ -35230,7 +36887,7 @@ static PyObject *__pyx_pf_9adios_mpi_7varinfo_2define(struct __pyx_obj_9adios_mp
  */
   }
 
-  /* "adios_mpi.pyx":2242
+  /* "adios_mpi.pyx":2264
  *             gdim_ = tuple(self.gdim)
  * 
  *         offset_ = self.offset             # <<<<<<<<<<<<<<
@@ -35242,7 +36899,7 @@ static PyObject *__pyx_pf_9adios_mpi_7varinfo_2define(struct __pyx_obj_9adios_mp
   __pyx_v_offset_ = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "adios_mpi.pyx":2243
+  /* "adios_mpi.pyx":2265
  * 
  *         offset_ = self.offset
  *         if isinstance(self.offset, (tuple, list)):             # <<<<<<<<<<<<<<
@@ -35253,35 +36910,35 @@ static PyObject *__pyx_pf_9adios_mpi_7varinfo_2define(struct __pyx_obj_9adios_mp
   __Pyx_INCREF(__pyx_t_3);
   __pyx_t_1 = PyTuple_Check(__pyx_t_3); 
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_4 = (__pyx_t_1 != 0);
-  if (!__pyx_t_4) {
+  __pyx_t_5 = (__pyx_t_1 != 0);
+  if (!__pyx_t_5) {
   } else {
-    __pyx_t_2 = __pyx_t_4;
+    __pyx_t_2 = __pyx_t_5;
     goto __pyx_L11_bool_binop_done;
   }
   __pyx_t_3 = __pyx_v_self->offset;
   __Pyx_INCREF(__pyx_t_3);
-  __pyx_t_4 = PyList_Check(__pyx_t_3); 
+  __pyx_t_5 = PyList_Check(__pyx_t_3); 
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_1 = (__pyx_t_4 != 0);
+  __pyx_t_1 = (__pyx_t_5 != 0);
   __pyx_t_2 = __pyx_t_1;
   __pyx_L11_bool_binop_done:;
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "adios_mpi.pyx":2244
+    /* "adios_mpi.pyx":2266
  *         offset_ = self.offset
  *         if isinstance(self.offset, (tuple, list)):
  *             offset_ = tuple(self.offset)             # <<<<<<<<<<<<<<
  * 
  *         val_ = self.value
  */
-    __pyx_t_3 = PySequence_Tuple(__pyx_v_self->offset); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2244, __pyx_L1_error)
+    __pyx_t_3 = PySequence_Tuple(__pyx_v_self->offset); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2266, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_offset_, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "adios_mpi.pyx":2243
+    /* "adios_mpi.pyx":2265
  * 
  *         offset_ = self.offset
  *         if isinstance(self.offset, (tuple, list)):             # <<<<<<<<<<<<<<
@@ -35290,7 +36947,7 @@ static PyObject *__pyx_pf_9adios_mpi_7varinfo_2define(struct __pyx_obj_9adios_mp
  */
   }
 
-  /* "adios_mpi.pyx":2246
+  /* "adios_mpi.pyx":2268
  *             offset_ = tuple(self.offset)
  * 
  *         val_ = self.value             # <<<<<<<<<<<<<<
@@ -35302,7 +36959,7 @@ static PyObject *__pyx_pf_9adios_mpi_7varinfo_2define(struct __pyx_obj_9adios_mp
   __pyx_v_val_ = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "adios_mpi.pyx":2247
+  /* "adios_mpi.pyx":2269
  * 
  *         val_ = self.value
  *         if not isinstance(self.value, (np.ndarray)):             # <<<<<<<<<<<<<<
@@ -35316,47 +36973,65 @@ static PyObject *__pyx_pf_9adios_mpi_7varinfo_2define(struct __pyx_obj_9adios_mp
   __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0);
   if (__pyx_t_2) {
 
-    /* "adios_mpi.pyx":2248
+    /* "adios_mpi.pyx":2270
  *         val_ = self.value
  *         if not isinstance(self.value, (np.ndarray)):
  *             val_ = np.array(self.value)             # <<<<<<<<<<<<<<
  * 
  *         atype = np2adiostype(val_.dtype)
  */
-    __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2248, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_array); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2248, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2270, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_array); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2270, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    __pyx_t_5 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_6))) {
-      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6);
-      if (likely(__pyx_t_5)) {
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __pyx_t_4 = NULL;
+    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
+      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6);
+      if (likely(__pyx_t_4)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
-        __Pyx_INCREF(__pyx_t_5);
+        __Pyx_INCREF(__pyx_t_4);
         __Pyx_INCREF(function);
         __Pyx_DECREF_SET(__pyx_t_6, function);
       }
     }
-    if (!__pyx_t_5) {
-      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_self->value); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2248, __pyx_L1_error)
+    if (!__pyx_t_4) {
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_self->value); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2270, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
     } else {
-      __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2248, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_7);
-      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5); __pyx_t_5 = NULL;
-      __Pyx_INCREF(__pyx_v_self->value);
-      __Pyx_GIVEREF(__pyx_v_self->value);
-      PyTuple_SET_ITEM(__pyx_t_7, 0+1, __pyx_v_self->value);
-      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_7, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2248, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_3);
-      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_6)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_v_self->value};
+        __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2270, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+        __Pyx_GOTREF(__pyx_t_3);
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_v_self->value};
+        __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2270, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+        __Pyx_GOTREF(__pyx_t_3);
+      } else
+      #endif
+      {
+        __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2270, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_7);
+        __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_4); __pyx_t_4 = NULL;
+        __Pyx_INCREF(__pyx_v_self->value);
+        __Pyx_GIVEREF(__pyx_v_self->value);
+        PyTuple_SET_ITEM(__pyx_t_7, 0+1, __pyx_v_self->value);
+        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_7, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2270, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_3);
+        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+      }
     }
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_DECREF_SET(__pyx_v_val_, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "adios_mpi.pyx":2247
+    /* "adios_mpi.pyx":2269
  * 
  *         val_ = self.value
  *         if not isinstance(self.value, (np.ndarray)):             # <<<<<<<<<<<<<<
@@ -35365,23 +37040,23 @@ static PyObject *__pyx_pf_9adios_mpi_7varinfo_2define(struct __pyx_obj_9adios_mp
  */
   }
 
-  /* "adios_mpi.pyx":2250
+  /* "adios_mpi.pyx":2272
  *             val_ = np.array(self.value)
  * 
  *         atype = np2adiostype(val_.dtype)             # <<<<<<<<<<<<<<
  *         ## No space allowed
  *         cdef int64_t varid = 0;
  */
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_val_, __pyx_n_s_dtype); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2250, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_val_, __pyx_n_s_dtype); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2272, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_dtype))))) __PYX_ERR(0, 2250, __pyx_L1_error)
-  __pyx_t_6 = __pyx_f_9adios_mpi_np2adiostype(((PyArray_Descr *)__pyx_t_3), 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2250, __pyx_L1_error)
+  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_dtype))))) __PYX_ERR(0, 2272, __pyx_L1_error)
+  __pyx_t_6 = __pyx_f_9adios_mpi_np2adiostype(((PyArray_Descr *)__pyx_t_3), 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2272, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_v_atype = __pyx_t_6;
   __pyx_t_6 = 0;
 
-  /* "adios_mpi.pyx":2252
+  /* "adios_mpi.pyx":2274
  *         atype = np2adiostype(val_.dtype)
  *         ## No space allowed
  *         cdef int64_t varid = 0;             # <<<<<<<<<<<<<<
@@ -35390,7 +37065,7 @@ static PyObject *__pyx_pf_9adios_mpi_7varinfo_2define(struct __pyx_obj_9adios_mp
  */
   __pyx_v_varid = 0;
 
-  /* "adios_mpi.pyx":2253
+  /* "adios_mpi.pyx":2275
  *         ## No space allowed
  *         cdef int64_t varid = 0;
  *         varid = define_var(gid, self.name, "", atype,             # <<<<<<<<<<<<<<
@@ -35399,96 +37074,96 @@ static PyObject *__pyx_pf_9adios_mpi_7varinfo_2define(struct __pyx_obj_9adios_mp
  */
   __pyx_t_6 = __pyx_v_self->name;
   __Pyx_INCREF(__pyx_t_6);
-  __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_v_atype); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2253, __pyx_L1_error)
+  __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_v_atype); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2275, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":2254
+  /* "adios_mpi.pyx":2276
  *         cdef int64_t varid = 0;
  *         varid = define_var(gid, self.name, "", atype,
  *                    str(ldim_).replace(' ', '').strip('(,)'),             # <<<<<<<<<<<<<<
  *                    str(gdim_).replace(' ', '').strip('(,)'),
  *                    str(offset_).replace(' ', '').strip('(,)'))
  */
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2254, __pyx_L1_error)
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2276, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_v_ldim_);
   __Pyx_GIVEREF(__pyx_v_ldim_);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_ldim_);
-  __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_3, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2254, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_3, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2276, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_replace); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2254, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_replace); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2276, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__64, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2254, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__65, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2276, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_strip); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2254, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_strip); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2276, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__66, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2254, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__67, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2276, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (!(likely(PyString_CheckExact(__pyx_t_7))||((__pyx_t_7) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_7)->tp_name), 0))) __PYX_ERR(0, 2254, __pyx_L1_error)
+  if (!(likely(PyString_CheckExact(__pyx_t_7))||((__pyx_t_7) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_7)->tp_name), 0))) __PYX_ERR(0, 2276, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":2255
+  /* "adios_mpi.pyx":2277
  *         varid = define_var(gid, self.name, "", atype,
  *                    str(ldim_).replace(' ', '').strip('(,)'),
  *                    str(gdim_).replace(' ', '').strip('(,)'),             # <<<<<<<<<<<<<<
  *                    str(offset_).replace(' ', '').strip('(,)'))
  * 
  */
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2255, __pyx_L1_error)
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2277, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_v_gdim_);
   __Pyx_GIVEREF(__pyx_v_gdim_);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_gdim_);
-  __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_3, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2255, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_5);
+  __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2277, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_replace); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2255, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_replace); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2277, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__67, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2255, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_5);
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__68, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2277, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_strip); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2255, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_strip); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2277, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__68, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2255, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_5);
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__69, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2277, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (!(likely(PyString_CheckExact(__pyx_t_5))||((__pyx_t_5) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_5)->tp_name), 0))) __PYX_ERR(0, 2255, __pyx_L1_error)
+  if (!(likely(PyString_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(0, 2277, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":2256
+  /* "adios_mpi.pyx":2278
  *                    str(ldim_).replace(' ', '').strip('(,)'),
  *                    str(gdim_).replace(' ', '').strip('(,)'),
  *                    str(offset_).replace(' ', '').strip('(,)'))             # <<<<<<<<<<<<<<
  * 
  *         if (self.transform is not None):
  */
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2256, __pyx_L1_error)
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2278, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_v_offset_);
   __Pyx_GIVEREF(__pyx_v_offset_);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_offset_);
-  __pyx_t_9 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_3, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2256, __pyx_L1_error)
+  __pyx_t_9 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_3, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2278, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_replace); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2256, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_replace); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2278, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-  __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__69, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2256, __pyx_L1_error)
+  __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__70, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2278, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_strip); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2256, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_strip); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2278, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-  __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__70, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2256, __pyx_L1_error)
+  __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__71, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2278, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (!(likely(PyString_CheckExact(__pyx_t_9))||((__pyx_t_9) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_9)->tp_name), 0))) __PYX_ERR(0, 2256, __pyx_L1_error)
+  if (!(likely(PyString_CheckExact(__pyx_t_9))||((__pyx_t_9) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_9)->tp_name), 0))) __PYX_ERR(0, 2278, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":2253
+  /* "adios_mpi.pyx":2275
  *         ## No space allowed
  *         cdef int64_t varid = 0;
  *         varid = define_var(gid, self.name, "", atype,             # <<<<<<<<<<<<<<
@@ -35497,16 +37172,16 @@ static PyObject *__pyx_pf_9adios_mpi_7varinfo_2define(struct __pyx_obj_9adios_mp
  */
   __pyx_t_11.__pyx_n = 3;
   __pyx_t_11.dimensions = ((PyObject*)__pyx_t_7);
-  __pyx_t_11.global_dimensions = ((PyObject*)__pyx_t_5);
+  __pyx_t_11.global_dimensions = ((PyObject*)__pyx_t_4);
   __pyx_t_11.local_offsets = ((PyObject*)__pyx_t_9);
   __pyx_t_10 = __pyx_f_9adios_mpi_define_var(__pyx_v_gid, ((PyObject*)__pyx_t_6), __pyx_kp_s__10, __pyx_t_8, 0, &__pyx_t_11); 
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
   __pyx_v_varid = __pyx_t_10;
 
-  /* "adios_mpi.pyx":2258
+  /* "adios_mpi.pyx":2280
  *                    str(offset_).replace(' ', '').strip('(,)'))
  * 
  *         if (self.transform is not None):             # <<<<<<<<<<<<<<
@@ -35517,7 +37192,7 @@ static PyObject *__pyx_pf_9adios_mpi_7varinfo_2define(struct __pyx_obj_9adios_mp
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "adios_mpi.pyx":2259
+    /* "adios_mpi.pyx":2281
  * 
  *         if (self.transform is not None):
  *             set_transform(varid, self.transform)             # <<<<<<<<<<<<<<
@@ -35529,7 +37204,7 @@ static PyObject *__pyx_pf_9adios_mpi_7varinfo_2define(struct __pyx_obj_9adios_mp
     __pyx_f_9adios_mpi_set_transform(__pyx_v_varid, ((PyObject*)__pyx_t_9), 0);
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-    /* "adios_mpi.pyx":2258
+    /* "adios_mpi.pyx":2280
  *                    str(offset_).replace(' ', '').strip('(,)'))
  * 
  *         if (self.transform is not None):             # <<<<<<<<<<<<<<
@@ -35538,12 +37213,12 @@ static PyObject *__pyx_pf_9adios_mpi_7varinfo_2define(struct __pyx_obj_9adios_mp
  */
   }
 
-  /* "adios_mpi.pyx":2230
+  /* "adios_mpi.pyx":2251
  *         self.transform = transform
  * 
  *     def define(self, int64_t gid):             # <<<<<<<<<<<<<<
  *         if self.value is None:
- *             raise TypeError("Value is none")
+ *             print ("Warning: skipping defining var(%r) with None value" %(self.name))
  */
 
   /* function exit code */
@@ -35551,7 +37226,7 @@ static PyObject *__pyx_pf_9adios_mpi_7varinfo_2define(struct __pyx_obj_9adios_mp
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_XDECREF(__pyx_t_4);
   __Pyx_XDECREF(__pyx_t_6);
   __Pyx_XDECREF(__pyx_t_7);
   __Pyx_XDECREF(__pyx_t_9);
@@ -35568,7 +37243,7 @@ static PyObject *__pyx_pf_9adios_mpi_7varinfo_2define(struct __pyx_obj_9adios_mp
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":2261
+/* "adios_mpi.pyx":2283
  *             set_transform(varid, self.transform)
  * 
  *     def bytes(self):             # <<<<<<<<<<<<<<
@@ -35602,7 +37277,7 @@ static PyObject *__pyx_pf_9adios_mpi_7varinfo_4bytes(struct __pyx_obj_9adios_mpi
   PyObject *__pyx_t_6 = NULL;
   __Pyx_RefNannySetupContext("bytes", 0);
 
-  /* "adios_mpi.pyx":2262
+  /* "adios_mpi.pyx":2284
  * 
  *     def bytes(self):
  *         val_ = self.value             # <<<<<<<<<<<<<<
@@ -35614,7 +37289,7 @@ static PyObject *__pyx_pf_9adios_mpi_7varinfo_4bytes(struct __pyx_obj_9adios_mpi
   __pyx_v_val_ = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":2263
+  /* "adios_mpi.pyx":2285
  *     def bytes(self):
  *         val_ = self.value
  *         if not isinstance(self.value, (np.ndarray)):             # <<<<<<<<<<<<<<
@@ -35628,20 +37303,20 @@ static PyObject *__pyx_pf_9adios_mpi_7varinfo_4bytes(struct __pyx_obj_9adios_mpi
   __pyx_t_3 = ((!(__pyx_t_2 != 0)) != 0);
   if (__pyx_t_3) {
 
-    /* "adios_mpi.pyx":2264
+    /* "adios_mpi.pyx":2286
  *         val_ = self.value
  *         if not isinstance(self.value, (np.ndarray)):
  *             val_ = np.array(self.value)             # <<<<<<<<<<<<<<
  * 
  *         return val_.size * val_.itemsize
  */
-    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2264, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2286, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_array); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2264, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_array); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2286, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_t_4 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_5))) {
+    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
       __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
       if (likely(__pyx_t_4)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
@@ -35651,24 +37326,42 @@ static PyObject *__pyx_pf_9adios_mpi_7varinfo_4bytes(struct __pyx_obj_9adios_mpi
       }
     }
     if (!__pyx_t_4) {
-      __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_self->value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2264, __pyx_L1_error)
+      __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_self->value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2286, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
     } else {
-      __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2264, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_6);
-      __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL;
-      __Pyx_INCREF(__pyx_v_self->value);
-      __Pyx_GIVEREF(__pyx_v_self->value);
-      PyTuple_SET_ITEM(__pyx_t_6, 0+1, __pyx_v_self->value);
-      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2264, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_1);
-      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_5)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_v_self->value};
+        __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2286, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+        __Pyx_GOTREF(__pyx_t_1);
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_v_self->value};
+        __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2286, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+        __Pyx_GOTREF(__pyx_t_1);
+      } else
+      #endif
+      {
+        __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2286, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_6);
+        __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL;
+        __Pyx_INCREF(__pyx_v_self->value);
+        __Pyx_GIVEREF(__pyx_v_self->value);
+        PyTuple_SET_ITEM(__pyx_t_6, 0+1, __pyx_v_self->value);
+        __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2286, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_1);
+        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+      }
     }
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_DECREF_SET(__pyx_v_val_, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "adios_mpi.pyx":2263
+    /* "adios_mpi.pyx":2285
  *     def bytes(self):
  *         val_ = self.value
  *         if not isinstance(self.value, (np.ndarray)):             # <<<<<<<<<<<<<<
@@ -35677,7 +37370,7 @@ static PyObject *__pyx_pf_9adios_mpi_7varinfo_4bytes(struct __pyx_obj_9adios_mpi
  */
   }
 
-  /* "adios_mpi.pyx":2266
+  /* "adios_mpi.pyx":2288
  *             val_ = np.array(self.value)
  * 
  *         return val_.size * val_.itemsize             # <<<<<<<<<<<<<<
@@ -35685,11 +37378,11 @@ static PyObject *__pyx_pf_9adios_mpi_7varinfo_4bytes(struct __pyx_obj_9adios_mpi
  *     def write(self, int64_t fd):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_val_, __pyx_n_s_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2266, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_val_, __pyx_n_s_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2288, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_val_, __pyx_n_s_itemsize); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2266, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_val_, __pyx_n_s_itemsize); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2288, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = PyNumber_Multiply(__pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2266, __pyx_L1_error)
+  __pyx_t_6 = PyNumber_Multiply(__pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2288, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
@@ -35697,7 +37390,7 @@ static PyObject *__pyx_pf_9adios_mpi_7varinfo_4bytes(struct __pyx_obj_9adios_mpi
   __pyx_t_6 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":2261
+  /* "adios_mpi.pyx":2283
  *             set_transform(varid, self.transform)
  * 
  *     def bytes(self):             # <<<<<<<<<<<<<<
@@ -35720,12 +37413,12 @@ static PyObject *__pyx_pf_9adios_mpi_7varinfo_4bytes(struct __pyx_obj_9adios_mpi
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":2268
+/* "adios_mpi.pyx":2290
  *         return val_.size * val_.itemsize
  * 
  *     def write(self, int64_t fd):             # <<<<<<<<<<<<<<
  *         val_ = self.value
- *         if not isinstance(self.value, (np.ndarray)):
+ * 
  */
 
 /* Python wrapper */
@@ -35737,7 +37430,7 @@ static PyObject *__pyx_pw_9adios_mpi_7varinfo_7write(PyObject *__pyx_v_self, PyO
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("write (wrapper)", 0);
   assert(__pyx_arg_fd); {
-    __pyx_v_fd = __Pyx_PyInt_As_int64_t(__pyx_arg_fd); if (unlikely((__pyx_v_fd == (int64_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 2268, __pyx_L3_error)
+    __pyx_v_fd = __Pyx_PyInt_As_int64_t(__pyx_arg_fd); if (unlikely((__pyx_v_fd == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2290, __pyx_L3_error)
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L3_error:;
@@ -35764,46 +37457,77 @@ static PyObject *__pyx_pf_9adios_mpi_7varinfo_6write(struct __pyx_obj_9adios_mpi
   PyObject *__pyx_t_6 = NULL;
   __Pyx_RefNannySetupContext("write", 0);
 
-  /* "adios_mpi.pyx":2269
+  /* "adios_mpi.pyx":2291
  * 
  *     def write(self, int64_t fd):
  *         val_ = self.value             # <<<<<<<<<<<<<<
- *         if not isinstance(self.value, (np.ndarray)):
- *             val_ = np.array(self.value)
+ * 
+ *         if val_ is None:
  */
   __pyx_t_1 = __pyx_v_self->value;
   __Pyx_INCREF(__pyx_t_1);
   __pyx_v_val_ = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":2270
- *     def write(self, int64_t fd):
+  /* "adios_mpi.pyx":2293
  *         val_ = self.value
+ * 
+ *         if val_ is None:             # <<<<<<<<<<<<<<
+ *             return
+ * 
+ */
+  __pyx_t_2 = (__pyx_v_val_ == Py_None);
+  __pyx_t_3 = (__pyx_t_2 != 0);
+  if (__pyx_t_3) {
+
+    /* "adios_mpi.pyx":2294
+ * 
+ *         if val_ is None:
+ *             return             # <<<<<<<<<<<<<<
+ * 
+ *         if not isinstance(self.value, (np.ndarray)):
+ */
+    __Pyx_XDECREF(__pyx_r);
+    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+    goto __pyx_L0;
+
+    /* "adios_mpi.pyx":2293
+ *         val_ = self.value
+ * 
+ *         if val_ is None:             # <<<<<<<<<<<<<<
+ *             return
+ * 
+ */
+  }
+
+  /* "adios_mpi.pyx":2296
+ *             return
+ * 
  *         if not isinstance(self.value, (np.ndarray)):             # <<<<<<<<<<<<<<
  *             val_ = np.array(self.value)
  * 
  */
   __pyx_t_1 = __pyx_v_self->value;
   __Pyx_INCREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_TypeCheck(__pyx_t_1, __pyx_ptype_5numpy_ndarray); 
+  __pyx_t_3 = __Pyx_TypeCheck(__pyx_t_1, __pyx_ptype_5numpy_ndarray); 
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_3 = ((!(__pyx_t_2 != 0)) != 0);
-  if (__pyx_t_3) {
+  __pyx_t_2 = ((!(__pyx_t_3 != 0)) != 0);
+  if (__pyx_t_2) {
 
-    /* "adios_mpi.pyx":2271
- *         val_ = self.value
+    /* "adios_mpi.pyx":2297
+ * 
  *         if not isinstance(self.value, (np.ndarray)):
  *             val_ = np.array(self.value)             # <<<<<<<<<<<<<<
  * 
  *         write(fd, self.name, val_)
  */
-    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2271, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2297, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_array); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2271, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_array); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2297, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_t_4 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_5))) {
+    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
       __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
       if (likely(__pyx_t_4)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
@@ -35813,33 +37537,51 @@ static PyObject *__pyx_pf_9adios_mpi_7varinfo_6write(struct __pyx_obj_9adios_mpi
       }
     }
     if (!__pyx_t_4) {
-      __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_self->value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2271, __pyx_L1_error)
+      __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_self->value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2297, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
     } else {
-      __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2271, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_6);
-      __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL;
-      __Pyx_INCREF(__pyx_v_self->value);
-      __Pyx_GIVEREF(__pyx_v_self->value);
-      PyTuple_SET_ITEM(__pyx_t_6, 0+1, __pyx_v_self->value);
-      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2271, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_1);
-      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_5)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_v_self->value};
+        __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2297, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+        __Pyx_GOTREF(__pyx_t_1);
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_v_self->value};
+        __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2297, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+        __Pyx_GOTREF(__pyx_t_1);
+      } else
+      #endif
+      {
+        __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2297, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_6);
+        __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL;
+        __Pyx_INCREF(__pyx_v_self->value);
+        __Pyx_GIVEREF(__pyx_v_self->value);
+        PyTuple_SET_ITEM(__pyx_t_6, 0+1, __pyx_v_self->value);
+        __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2297, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_1);
+        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+      }
     }
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_DECREF_SET(__pyx_v_val_, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "adios_mpi.pyx":2270
- *     def write(self, int64_t fd):
- *         val_ = self.value
+    /* "adios_mpi.pyx":2296
+ *             return
+ * 
  *         if not isinstance(self.value, (np.ndarray)):             # <<<<<<<<<<<<<<
  *             val_ = np.array(self.value)
  * 
  */
   }
 
-  /* "adios_mpi.pyx":2273
+  /* "adios_mpi.pyx":2299
  *             val_ = np.array(self.value)
  * 
  *         write(fd, self.name, val_)             # <<<<<<<<<<<<<<
@@ -35851,12 +37593,12 @@ static PyObject *__pyx_pf_9adios_mpi_7varinfo_6write(struct __pyx_obj_9adios_mpi
   __pyx_f_9adios_mpi_write(__pyx_v_fd, ((PyObject*)__pyx_t_1), __pyx_v_val_, 0, NULL);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":2268
+  /* "adios_mpi.pyx":2290
  *         return val_.size * val_.itemsize
  * 
  *     def write(self, int64_t fd):             # <<<<<<<<<<<<<<
  *         val_ = self.value
- *         if not isinstance(self.value, (np.ndarray)):
+ * 
  */
 
   /* function exit code */
@@ -35876,7 +37618,7 @@ static PyObject *__pyx_pf_9adios_mpi_7varinfo_6write(struct __pyx_obj_9adios_mpi
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":2275
+/* "adios_mpi.pyx":2301
  *         write(fd, self.name, val_)
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -35904,7 +37646,7 @@ static PyObject *__pyx_pf_9adios_mpi_7varinfo_8__repr__(struct __pyx_obj_9adios_
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("__repr__", 0);
 
-  /* "adios_mpi.pyx":2276
+  /* "adios_mpi.pyx":2302
  * 
  *     def __repr__(self):
  *         return ("AdiosVarinfo (name=%r, ldim=%r, gdim=%r, offset=%r, transform=%r, value=%r)") % \             # <<<<<<<<<<<<<<
@@ -35913,14 +37655,14 @@ static PyObject *__pyx_pf_9adios_mpi_7varinfo_8__repr__(struct __pyx_obj_9adios_
  */
   __Pyx_XDECREF(__pyx_r);
 
-  /* "adios_mpi.pyx":2277
+  /* "adios_mpi.pyx":2303
  *     def __repr__(self):
  *         return ("AdiosVarinfo (name=%r, ldim=%r, gdim=%r, offset=%r, transform=%r, value=%r)") % \
  *                 (self.name, self.ldim, self.gdim, self.offset, self.transform, self.value)             # <<<<<<<<<<<<<<
  * 
  * ## Aliases
  */
-  __pyx_t_1 = PyTuple_New(6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2277, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2303, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_v_self->name);
   __Pyx_GIVEREF(__pyx_v_self->name);
@@ -35941,21 +37683,21 @@ static PyObject *__pyx_pf_9adios_mpi_7varinfo_8__repr__(struct __pyx_obj_9adios_
   __Pyx_GIVEREF(__pyx_v_self->value);
   PyTuple_SET_ITEM(__pyx_t_1, 5, __pyx_v_self->value);
 
-  /* "adios_mpi.pyx":2276
+  /* "adios_mpi.pyx":2302
  * 
  *     def __repr__(self):
  *         return ("AdiosVarinfo (name=%r, ldim=%r, gdim=%r, offset=%r, transform=%r, value=%r)") % \             # <<<<<<<<<<<<<<
  *                 (self.name, self.ldim, self.gdim, self.offset, self.transform, self.value)
  * 
  */
-  __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_AdiosVarinfo_name_r_ldim_r_gdim, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2276, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_AdiosVarinfo_name_r_ldim_r_gdim, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2302, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":2275
+  /* "adios_mpi.pyx":2301
  *         write(fd, self.name, val_)
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -35975,7 +37717,7 @@ static PyObject *__pyx_pf_9adios_mpi_7varinfo_8__repr__(struct __pyx_obj_9adios_
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":2204
+/* "adios_mpi.pyx":2225
  * cdef class varinfo(object):
  *     cdef str name
  *     cdef public ldim             # <<<<<<<<<<<<<<
@@ -36070,7 +37812,7 @@ static int __pyx_pf_9adios_mpi_7varinfo_4ldim_4__del__(struct __pyx_obj_9adios_m
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":2205
+/* "adios_mpi.pyx":2226
  *     cdef str name
  *     cdef public ldim
  *     cdef public gdim             # <<<<<<<<<<<<<<
@@ -36165,7 +37907,7 @@ static int __pyx_pf_9adios_mpi_7varinfo_4gdim_4__del__(struct __pyx_obj_9adios_m
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":2206
+/* "adios_mpi.pyx":2227
  *     cdef public ldim
  *     cdef public gdim
  *     cdef public offset             # <<<<<<<<<<<<<<
@@ -36260,7 +38002,7 @@ static int __pyx_pf_9adios_mpi_7varinfo_6offset_4__del__(struct __pyx_obj_9adios
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":2207
+/* "adios_mpi.pyx":2228
  *     cdef public gdim
  *     cdef public offset
  *     cdef public value             # <<<<<<<<<<<<<<
@@ -36355,7 +38097,7 @@ static int __pyx_pf_9adios_mpi_7varinfo_5value_4__del__(struct __pyx_obj_9adios_
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":2291
+/* "adios_mpi.pyx":2317
  * ## ====================
  * 
  * def readvar(fname, varname):             # <<<<<<<<<<<<<<
@@ -36393,11 +38135,11 @@ static PyObject *__pyx_pw_9adios_mpi_93readvar(PyObject *__pyx_self, PyObject *_
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_varname)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("readvar", 1, 2, 2, 1); __PYX_ERR(0, 2291, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("readvar", 1, 2, 2, 1); __PYX_ERR(0, 2317, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "readvar") < 0)) __PYX_ERR(0, 2291, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "readvar") < 0)) __PYX_ERR(0, 2317, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -36410,7 +38152,7 @@ static PyObject *__pyx_pw_9adios_mpi_93readvar(PyObject *__pyx_self, PyObject *_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("readvar", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2291, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("readvar", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2317, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("adios_mpi.readvar", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -36434,47 +38176,47 @@ static PyObject *__pyx_pf_9adios_mpi_92readvar(CYTHON_UNUSED PyObject *__pyx_sel
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("readvar", 0);
 
-  /* "adios_mpi.pyx":2301
+  /* "adios_mpi.pyx":2327
  *         NumPy ndarray: variable value
  *     """
  *     f = file(fname, comm=MPI.COMM_SELF)             # <<<<<<<<<<<<<<
  *     v = f[varname]
  *     return v.read(from_steps=0, nsteps=v.nsteps)
  */
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2301, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2327, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_v_fname);
   __Pyx_GIVEREF(__pyx_v_fname);
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_fname);
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2301, __pyx_L1_error)
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2327, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_MPI); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2301, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_MPI); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2327, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_COMM_SELF); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2301, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_COMM_SELF); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2327, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_comm, __pyx_t_4) < 0) __PYX_ERR(0, 2301, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_comm, __pyx_t_4) < 0) __PYX_ERR(0, 2327, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_9adios_mpi_file), __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2301, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_9adios_mpi_file), __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2327, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_v_f = ((struct __pyx_obj_9adios_mpi_file *)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "adios_mpi.pyx":2302
+  /* "adios_mpi.pyx":2328
  *     """
  *     f = file(fname, comm=MPI.COMM_SELF)
  *     v = f[varname]             # <<<<<<<<<<<<<<
  *     return v.read(from_steps=0, nsteps=v.nsteps)
  * 
  */
-  __pyx_t_4 = PyObject_GetItem(((PyObject *)__pyx_v_f), __pyx_v_varname); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2302, __pyx_L1_error)
+  __pyx_t_4 = PyObject_GetItem(((PyObject *)__pyx_v_f), __pyx_v_varname); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2328, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_v_v = __pyx_t_4;
   __pyx_t_4 = 0;
 
-  /* "adios_mpi.pyx":2303
+  /* "adios_mpi.pyx":2329
  *     f = file(fname, comm=MPI.COMM_SELF)
  *     v = f[varname]
  *     return v.read(from_steps=0, nsteps=v.nsteps)             # <<<<<<<<<<<<<<
@@ -36482,16 +38224,16 @@ static PyObject *__pyx_pf_9adios_mpi_92readvar(CYTHON_UNUSED PyObject *__pyx_sel
  * def bpls(fname):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_v, __pyx_n_s_read); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2303, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_v, __pyx_n_s_read); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2329, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2303, __pyx_L1_error)
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2329, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_from_steps, __pyx_int_0) < 0) __PYX_ERR(0, 2303, __pyx_L1_error)
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_v, __pyx_n_s_nsteps); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2303, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_from_steps, __pyx_int_0) < 0) __PYX_ERR(0, 2329, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_v, __pyx_n_s_nsteps); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2329, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_nsteps, __pyx_t_1) < 0) __PYX_ERR(0, 2303, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_nsteps, __pyx_t_1) < 0) __PYX_ERR(0, 2329, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2303, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2329, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -36499,7 +38241,7 @@ static PyObject *__pyx_pf_9adios_mpi_92readvar(CYTHON_UNUSED PyObject *__pyx_sel
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":2291
+  /* "adios_mpi.pyx":2317
  * ## ====================
  * 
  * def readvar(fname, varname):             # <<<<<<<<<<<<<<
@@ -36523,7 +38265,7 @@ static PyObject *__pyx_pf_9adios_mpi_92readvar(CYTHON_UNUSED PyObject *__pyx_sel
   return __pyx_r;
 }
 
-/* "adios_mpi.pyx":2305
+/* "adios_mpi.pyx":2331
  *     return v.read(from_steps=0, nsteps=v.nsteps)
  * 
  * def bpls(fname):             # <<<<<<<<<<<<<<
@@ -36561,35 +38303,35 @@ static PyObject *__pyx_pf_9adios_mpi_94bpls(CYTHON_UNUSED PyObject *__pyx_self,
   int __pyx_t_8;
   __Pyx_RefNannySetupContext("bpls", 0);
 
-  /* "adios_mpi.pyx":2314
+  /* "adios_mpi.pyx":2340
  *         dict: Adios file meta data
  *     """
  *     f = file(fname, comm=MPI.COMM_SELF)             # <<<<<<<<<<<<<<
  *     return {'nvars': f.nvars,
  *             'nattrs': f.nattrs,
  */
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2314, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2340, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_v_fname);
   __Pyx_GIVEREF(__pyx_v_fname);
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_fname);
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2314, __pyx_L1_error)
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2340, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_MPI); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2314, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_MPI); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2340, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_COMM_SELF); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2314, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_COMM_SELF); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2340, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_comm, __pyx_t_4) < 0) __PYX_ERR(0, 2314, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_comm, __pyx_t_4) < 0) __PYX_ERR(0, 2340, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_9adios_mpi_file), __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2314, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_9adios_mpi_file), __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2340, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_v_f = ((struct __pyx_obj_9adios_mpi_file *)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "adios_mpi.pyx":2315
+  /* "adios_mpi.pyx":2341
  *     """
  *     f = file(fname, comm=MPI.COMM_SELF)
  *     return {'nvars': f.nvars,             # <<<<<<<<<<<<<<
@@ -36597,40 +38339,40 @@ static PyObject *__pyx_pf_9adios_mpi_94bpls(CYTHON_UNUSED PyObject *__pyx_self,
  *             'vars': tuple([ k for k in f.vars.iterkeys() ]),
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2315, __pyx_L1_error)
+  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2341, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_f->nvars); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2315, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_f->nvars); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2341, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_nvars, __pyx_t_2) < 0) __PYX_ERR(0, 2315, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_nvars, __pyx_t_2) < 0) __PYX_ERR(0, 2341, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "adios_mpi.pyx":2316
+  /* "adios_mpi.pyx":2342
  *     f = file(fname, comm=MPI.COMM_SELF)
  *     return {'nvars': f.nvars,
  *             'nattrs': f.nattrs,             # <<<<<<<<<<<<<<
  *             'vars': tuple([ k for k in f.vars.iterkeys() ]),
  *             'attrs': tuple([ k for k in f.attrs.iterkeys() ]),
  */
-  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_f->nattrs); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2316, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_f->nattrs); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2342, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_nattrs, __pyx_t_2) < 0) __PYX_ERR(0, 2315, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_nattrs, __pyx_t_2) < 0) __PYX_ERR(0, 2341, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "adios_mpi.pyx":2317
+  /* "adios_mpi.pyx":2343
  *     return {'nvars': f.nvars,
  *             'nattrs': f.nattrs,
  *             'vars': tuple([ k for k in f.vars.iterkeys() ]),             # <<<<<<<<<<<<<<
  *             'attrs': tuple([ k for k in f.attrs.iterkeys() ]),
  *             'time_steps': (f.current_step, f.last_step),
  */
-  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2317, __pyx_L1_error)
+  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2343, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_5 = 0;
   if (unlikely(((PyObject *)__pyx_v_f->vars) == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "iterkeys");
-    __PYX_ERR(0, 2317, __pyx_L1_error)
+    __PYX_ERR(0, 2343, __pyx_L1_error)
   }
-  __pyx_t_3 = __Pyx_dict_iterator(((PyObject *)__pyx_v_f->vars), 0, __pyx_n_s_iterkeys, (&__pyx_t_6), (&__pyx_t_7)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2317, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_dict_iterator(((PyObject *)__pyx_v_f->vars), 0, __pyx_n_s_iterkeys, (&__pyx_t_6), (&__pyx_t_7)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2343, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_XDECREF(__pyx_t_1);
   __pyx_t_1 = __pyx_t_3;
@@ -36638,34 +38380,34 @@ static PyObject *__pyx_pf_9adios_mpi_94bpls(CYTHON_UNUSED PyObject *__pyx_self,
   while (1) {
     __pyx_t_8 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_6, &__pyx_t_5, &__pyx_t_3, NULL, NULL, __pyx_t_7);
     if (unlikely(__pyx_t_8 == 0)) break;
-    if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(0, 2317, __pyx_L1_error)
+    if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(0, 2343, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_3);
     __pyx_t_3 = 0;
-    if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_v_k))) __PYX_ERR(0, 2317, __pyx_L1_error)
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_v_k))) __PYX_ERR(0, 2343, __pyx_L1_error)
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyList_AsTuple(((PyObject*)__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2317, __pyx_L1_error)
+  __pyx_t_1 = PyList_AsTuple(((PyObject*)__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2343, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_vars, __pyx_t_1) < 0) __PYX_ERR(0, 2315, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_vars, __pyx_t_1) < 0) __PYX_ERR(0, 2341, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":2318
+  /* "adios_mpi.pyx":2344
  *             'nattrs': f.nattrs,
  *             'vars': tuple([ k for k in f.vars.iterkeys() ]),
  *             'attrs': tuple([ k for k in f.attrs.iterkeys() ]),             # <<<<<<<<<<<<<<
  *             'time_steps': (f.current_step, f.last_step),
  *             'file_size': f.file_size}
  */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2318, __pyx_L1_error)
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2344, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_6 = 0;
   if (unlikely(((PyObject *)__pyx_v_f->attrs) == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "iterkeys");
-    __PYX_ERR(0, 2318, __pyx_L1_error)
+    __PYX_ERR(0, 2344, __pyx_L1_error)
   }
-  __pyx_t_3 = __Pyx_dict_iterator(((PyObject *)__pyx_v_f->attrs), 0, __pyx_n_s_iterkeys, (&__pyx_t_5), (&__pyx_t_7)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2318, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_dict_iterator(((PyObject *)__pyx_v_f->attrs), 0, __pyx_n_s_iterkeys, (&__pyx_t_5), (&__pyx_t_7)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2344, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_XDECREF(__pyx_t_2);
   __pyx_t_2 = __pyx_t_3;
@@ -36673,30 +38415,30 @@ static PyObject *__pyx_pf_9adios_mpi_94bpls(CYTHON_UNUSED PyObject *__pyx_self,
   while (1) {
     __pyx_t_8 = __Pyx_dict_iter_next(__pyx_t_2, __pyx_t_5, &__pyx_t_6, &__pyx_t_3, NULL, NULL, __pyx_t_7);
     if (unlikely(__pyx_t_8 == 0)) break;
-    if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(0, 2318, __pyx_L1_error)
+    if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(0, 2344, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_3);
     __pyx_t_3 = 0;
-    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_v_k))) __PYX_ERR(0, 2318, __pyx_L1_error)
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_v_k))) __PYX_ERR(0, 2344, __pyx_L1_error)
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyList_AsTuple(((PyObject*)__pyx_t_1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2318, __pyx_L1_error)
+  __pyx_t_2 = PyList_AsTuple(((PyObject*)__pyx_t_1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2344, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_attrs, __pyx_t_2) < 0) __PYX_ERR(0, 2315, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_attrs, __pyx_t_2) < 0) __PYX_ERR(0, 2341, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "adios_mpi.pyx":2319
+  /* "adios_mpi.pyx":2345
  *             'vars': tuple([ k for k in f.vars.iterkeys() ]),
  *             'attrs': tuple([ k for k in f.attrs.iterkeys() ]),
  *             'time_steps': (f.current_step, f.last_step),             # <<<<<<<<<<<<<<
  *             'file_size': f.file_size}
  */
-  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_f->current_step); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2319, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_f->current_step); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2345, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->last_step); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2319, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_f->last_step); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2345, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2319, __pyx_L1_error)
+  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2345, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
@@ -36704,23 +38446,23 @@ static PyObject *__pyx_pf_9adios_mpi_94bpls(CYTHON_UNUSED PyObject *__pyx_self,
   PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1);
   __pyx_t_2 = 0;
   __pyx_t_1 = 0;
-  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_time_steps, __pyx_t_3) < 0) __PYX_ERR(0, 2315, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_time_steps, __pyx_t_3) < 0) __PYX_ERR(0, 2341, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "adios_mpi.pyx":2320
+  /* "adios_mpi.pyx":2346
  *             'attrs': tuple([ k for k in f.attrs.iterkeys() ]),
  *             'time_steps': (f.current_step, f.last_step),
  *             'file_size': f.file_size}             # <<<<<<<<<<<<<<
  */
-  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_f->file_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2320, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_f->file_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2346, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_file_size, __pyx_t_3) < 0) __PYX_ERR(0, 2315, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_file_size, __pyx_t_3) < 0) __PYX_ERR(0, 2341, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_r = __pyx_t_4;
   __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "adios_mpi.pyx":2305
+  /* "adios_mpi.pyx":2331
  *     return v.read(from_steps=0, nsteps=v.nsteps)
  * 
  * def bpls(fname):             # <<<<<<<<<<<<<<
@@ -36913,7 +38655,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  * 
  *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
  */
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__71, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 218, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__72, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 218, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -36969,7 +38711,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  * 
  *             info.buf = PyArray_DATA(self)
  */
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__72, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 222, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__73, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 222, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -37278,7 +39020,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  *                 if   t == NPY_BYTE:        f = "b"
  *                 elif t == NPY_UBYTE:       f = "B"
  */
-      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__73, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 259, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__74, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 259, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_Raise(__pyx_t_3, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -38004,7 +39746,7 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
   __pyx_t_1 = __pyx_v_descr->names; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
   for (;;) {
     if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(1, 794, __pyx_L1_error)
     #else
     __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 794, __pyx_L1_error)
@@ -38039,7 +39781,7 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
  */
     if (likely(__pyx_v_fields != Py_None)) {
       PyObject* sequence = __pyx_v_fields;
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if !CYTHON_COMPILING_IN_PYPY
       Py_ssize_t size = Py_SIZE(sequence);
       #else
       Py_ssize_t size = PySequence_Size(sequence);
@@ -38049,7 +39791,7 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
         __PYX_ERR(1, 796, __pyx_L1_error)
       }
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
       __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
       __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
       __Pyx_INCREF(__pyx_t_3);
@@ -38093,7 +39835,7 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
  * 
  *         if ((child.byteorder == c'>' and little_endian) or
  */
-      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__74, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 799, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__75, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 799, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_Raise(__pyx_t_3, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -38161,7 +39903,7 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
  *             # One could encode it in the format string and have Cython
  *             # complain instead, BUT: < and > in format strings also imply
  */
-      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__75, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 803, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__76, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 803, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_Raise(__pyx_t_3, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -38270,7 +40012,7 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
  * 
  *             # Until ticket #99 is fixed, use integers to avoid warnings
  */
-        __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__76, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 823, __pyx_L1_error)
+        __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__77, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 823, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_4);
         __Pyx_Raise(__pyx_t_4, 0, 0, 0);
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -38843,6 +40585,8 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__py
  *         return None
  *     else:
  *         return <object>arr.base             # <<<<<<<<<<<<<<
+ * 
+ * 
  */
   /*else*/ {
     __Pyx_XDECREF(__pyx_r);
@@ -38866,6 +40610,396 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__py
   return __pyx_r;
 }
 
+/* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":985
+ * # Versions of the import_* functions which are more suitable for
+ * # Cython code.
+ * cdef inline int import_array() except -1:             # <<<<<<<<<<<<<<
+ *     try:
+ *         _import_array()
+ */
+
+static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_t_4;
+  PyObject *__pyx_t_5 = NULL;
+  PyObject *__pyx_t_6 = NULL;
+  PyObject *__pyx_t_7 = NULL;
+  PyObject *__pyx_t_8 = NULL;
+  __Pyx_RefNannySetupContext("import_array", 0);
+
+  /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":986
+ * # Cython code.
+ * cdef inline int import_array() except -1:
+ *     try:             # <<<<<<<<<<<<<<
+ *         _import_array()
+ *     except Exception:
+ */
+  {
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
+    __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3);
+    __Pyx_XGOTREF(__pyx_t_1);
+    __Pyx_XGOTREF(__pyx_t_2);
+    __Pyx_XGOTREF(__pyx_t_3);
+    /*try:*/ {
+
+      /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":987
+ * cdef inline int import_array() except -1:
+ *     try:
+ *         _import_array()             # <<<<<<<<<<<<<<
+ *     except Exception:
+ *         raise ImportError("numpy.core.multiarray failed to import")
+ */
+      __pyx_t_4 = _import_array(); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(1, 987, __pyx_L3_error)
+
+      /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":986
+ * # Cython code.
+ * cdef inline int import_array() except -1:
+ *     try:             # <<<<<<<<<<<<<<
+ *         _import_array()
+ *     except Exception:
+ */
+    }
+    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+    goto __pyx_L10_try_end;
+    __pyx_L3_error:;
+    __Pyx_PyThreadState_assign
+
+    /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":988
+ *     try:
+ *         _import_array()
+ *     except Exception:             # <<<<<<<<<<<<<<
+ *         raise ImportError("numpy.core.multiarray failed to import")
+ * 
+ */
+    __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
+    if (__pyx_t_4) {
+      __Pyx_AddTraceback("numpy.import_array", __pyx_clineno, __pyx_lineno, __pyx_filename);
+      if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(1, 988, __pyx_L5_except_error)
+      __Pyx_GOTREF(__pyx_t_5);
+      __Pyx_GOTREF(__pyx_t_6);
+      __Pyx_GOTREF(__pyx_t_7);
+
+      /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":989
+ *         _import_array()
+ *     except Exception:
+ *         raise ImportError("numpy.core.multiarray failed to import")             # <<<<<<<<<<<<<<
+ * 
+ * cdef inline int import_umath() except -1:
+ */
+      __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__78, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 989, __pyx_L5_except_error)
+      __Pyx_GOTREF(__pyx_t_8);
+      __Pyx_Raise(__pyx_t_8, 0, 0, 0);
+      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+      __PYX_ERR(1, 989, __pyx_L5_except_error)
+    }
+    goto __pyx_L5_except_error;
+    __pyx_L5_except_error:;
+
+    /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":986
+ * # Cython code.
+ * cdef inline int import_array() except -1:
+ *     try:             # <<<<<<<<<<<<<<
+ *         _import_array()
+ *     except Exception:
+ */
+    __Pyx_PyThreadState_assign
+    __Pyx_XGIVEREF(__pyx_t_1);
+    __Pyx_XGIVEREF(__pyx_t_2);
+    __Pyx_XGIVEREF(__pyx_t_3);
+    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
+    goto __pyx_L1_error;
+    __pyx_L10_try_end:;
+  }
+
+  /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":985
+ * # Versions of the import_* functions which are more suitable for
+ * # Cython code.
+ * cdef inline int import_array() except -1:             # <<<<<<<<<<<<<<
+ *     try:
+ *         _import_array()
+ */
+
+  /* function exit code */
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_XDECREF(__pyx_t_6);
+  __Pyx_XDECREF(__pyx_t_7);
+  __Pyx_XDECREF(__pyx_t_8);
+  __Pyx_AddTraceback("numpy.import_array", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":991
+ *         raise ImportError("numpy.core.multiarray failed to import")
+ * 
+ * cdef inline int import_umath() except -1:             # <<<<<<<<<<<<<<
+ *     try:
+ *         _import_umath()
+ */
+
+static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_t_4;
+  PyObject *__pyx_t_5 = NULL;
+  PyObject *__pyx_t_6 = NULL;
+  PyObject *__pyx_t_7 = NULL;
+  PyObject *__pyx_t_8 = NULL;
+  __Pyx_RefNannySetupContext("import_umath", 0);
+
+  /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":992
+ * 
+ * cdef inline int import_umath() except -1:
+ *     try:             # <<<<<<<<<<<<<<
+ *         _import_umath()
+ *     except Exception:
+ */
+  {
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
+    __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3);
+    __Pyx_XGOTREF(__pyx_t_1);
+    __Pyx_XGOTREF(__pyx_t_2);
+    __Pyx_XGOTREF(__pyx_t_3);
+    /*try:*/ {
+
+      /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":993
+ * cdef inline int import_umath() except -1:
+ *     try:
+ *         _import_umath()             # <<<<<<<<<<<<<<
+ *     except Exception:
+ *         raise ImportError("numpy.core.umath failed to import")
+ */
+      __pyx_t_4 = _import_umath(); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(1, 993, __pyx_L3_error)
+
+      /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":992
+ * 
+ * cdef inline int import_umath() except -1:
+ *     try:             # <<<<<<<<<<<<<<
+ *         _import_umath()
+ *     except Exception:
+ */
+    }
+    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+    goto __pyx_L10_try_end;
+    __pyx_L3_error:;
+    __Pyx_PyThreadState_assign
+
+    /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":994
+ *     try:
+ *         _import_umath()
+ *     except Exception:             # <<<<<<<<<<<<<<
+ *         raise ImportError("numpy.core.umath failed to import")
+ * 
+ */
+    __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
+    if (__pyx_t_4) {
+      __Pyx_AddTraceback("numpy.import_umath", __pyx_clineno, __pyx_lineno, __pyx_filename);
+      if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(1, 994, __pyx_L5_except_error)
+      __Pyx_GOTREF(__pyx_t_5);
+      __Pyx_GOTREF(__pyx_t_6);
+      __Pyx_GOTREF(__pyx_t_7);
+
+      /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":995
+ *         _import_umath()
+ *     except Exception:
+ *         raise ImportError("numpy.core.umath failed to import")             # <<<<<<<<<<<<<<
+ * 
+ * cdef inline int import_ufunc() except -1:
+ */
+      __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__79, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 995, __pyx_L5_except_error)
+      __Pyx_GOTREF(__pyx_t_8);
+      __Pyx_Raise(__pyx_t_8, 0, 0, 0);
+      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+      __PYX_ERR(1, 995, __pyx_L5_except_error)
+    }
+    goto __pyx_L5_except_error;
+    __pyx_L5_except_error:;
+
+    /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":992
+ * 
+ * cdef inline int import_umath() except -1:
+ *     try:             # <<<<<<<<<<<<<<
+ *         _import_umath()
+ *     except Exception:
+ */
+    __Pyx_PyThreadState_assign
+    __Pyx_XGIVEREF(__pyx_t_1);
+    __Pyx_XGIVEREF(__pyx_t_2);
+    __Pyx_XGIVEREF(__pyx_t_3);
+    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
+    goto __pyx_L1_error;
+    __pyx_L10_try_end:;
+  }
+
+  /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":991
+ *         raise ImportError("numpy.core.multiarray failed to import")
+ * 
+ * cdef inline int import_umath() except -1:             # <<<<<<<<<<<<<<
+ *     try:
+ *         _import_umath()
+ */
+
+  /* function exit code */
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_XDECREF(__pyx_t_6);
+  __Pyx_XDECREF(__pyx_t_7);
+  __Pyx_XDECREF(__pyx_t_8);
+  __Pyx_AddTraceback("numpy.import_umath", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":997
+ *         raise ImportError("numpy.core.umath failed to import")
+ * 
+ * cdef inline int import_ufunc() except -1:             # <<<<<<<<<<<<<<
+ *     try:
+ *         _import_umath()
+ */
+
+static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_t_4;
+  PyObject *__pyx_t_5 = NULL;
+  PyObject *__pyx_t_6 = NULL;
+  PyObject *__pyx_t_7 = NULL;
+  PyObject *__pyx_t_8 = NULL;
+  __Pyx_RefNannySetupContext("import_ufunc", 0);
+
+  /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":998
+ * 
+ * cdef inline int import_ufunc() except -1:
+ *     try:             # <<<<<<<<<<<<<<
+ *         _import_umath()
+ *     except Exception:
+ */
+  {
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
+    __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3);
+    __Pyx_XGOTREF(__pyx_t_1);
+    __Pyx_XGOTREF(__pyx_t_2);
+    __Pyx_XGOTREF(__pyx_t_3);
+    /*try:*/ {
+
+      /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":999
+ * cdef inline int import_ufunc() except -1:
+ *     try:
+ *         _import_umath()             # <<<<<<<<<<<<<<
+ *     except Exception:
+ *         raise ImportError("numpy.core.umath failed to import")
+ */
+      __pyx_t_4 = _import_umath(); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(1, 999, __pyx_L3_error)
+
+      /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":998
+ * 
+ * cdef inline int import_ufunc() except -1:
+ *     try:             # <<<<<<<<<<<<<<
+ *         _import_umath()
+ *     except Exception:
+ */
+    }
+    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+    goto __pyx_L10_try_end;
+    __pyx_L3_error:;
+    __Pyx_PyThreadState_assign
+
+    /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":1000
+ *     try:
+ *         _import_umath()
+ *     except Exception:             # <<<<<<<<<<<<<<
+ *         raise ImportError("numpy.core.umath failed to import")
+ */
+    __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
+    if (__pyx_t_4) {
+      __Pyx_AddTraceback("numpy.import_ufunc", __pyx_clineno, __pyx_lineno, __pyx_filename);
+      if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(1, 1000, __pyx_L5_except_error)
+      __Pyx_GOTREF(__pyx_t_5);
+      __Pyx_GOTREF(__pyx_t_6);
+      __Pyx_GOTREF(__pyx_t_7);
+
+      /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":1001
+ *         _import_umath()
+ *     except Exception:
+ *         raise ImportError("numpy.core.umath failed to import")             # <<<<<<<<<<<<<<
+ */
+      __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__80, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 1001, __pyx_L5_except_error)
+      __Pyx_GOTREF(__pyx_t_8);
+      __Pyx_Raise(__pyx_t_8, 0, 0, 0);
+      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+      __PYX_ERR(1, 1001, __pyx_L5_except_error)
+    }
+    goto __pyx_L5_except_error;
+    __pyx_L5_except_error:;
+
+    /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":998
+ * 
+ * cdef inline int import_ufunc() except -1:
+ *     try:             # <<<<<<<<<<<<<<
+ *         _import_umath()
+ *     except Exception:
+ */
+    __Pyx_PyThreadState_assign
+    __Pyx_XGIVEREF(__pyx_t_1);
+    __Pyx_XGIVEREF(__pyx_t_2);
+    __Pyx_XGIVEREF(__pyx_t_3);
+    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
+    goto __pyx_L1_error;
+    __pyx_L10_try_end:;
+  }
+
+  /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":997
+ *         raise ImportError("numpy.core.umath failed to import")
+ * 
+ * cdef inline int import_ufunc() except -1:             # <<<<<<<<<<<<<<
+ *     try:
+ *         _import_umath()
+ */
+
+  /* function exit code */
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_XDECREF(__pyx_t_6);
+  __Pyx_XDECREF(__pyx_t_7);
+  __Pyx_XDECREF(__pyx_t_8);
+  __Pyx_AddTraceback("numpy.import_ufunc", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
 static PyObject *__pyx_tp_new_9adios_mpi_softdict(PyTypeObject *t, PyObject *a, PyObject *k) {
   PyObject *o = (&PyDict_Type)->tp_new(t, a, k);
   if (unlikely(!o)) return 0;
@@ -40376,7 +42510,7 @@ static PyTypeObject __pyx_type_9adios_mpi_writer = {
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  "writer(str fname, bool is_noxml=True, str mode='w', Comm comm=MPI.COMM_WORLD)\n\n    writer class for Adios write.\n\n    Args:\n        fname (str): filename.\n        is_noxml (bool, optional): Set True if use noxml APIs (default: True).\n        comm (MPI.Comm, optional): MPI comm for parallel read/write (default: MPI.COMM_WORLD).\n\n    Example:\n\n    >>> import adios as ad\n    >>> f = ad.writer('adiosfile.bp')\n\n    ", /*tp_doc*/
+  "writer(str fname, bool is_noxml=True, str mode='w', int stats=adios_stat_default, Comm comm=MPI.COMM_WORLD, str method='POSIX1', str method_params='')\n\n    writer class for Adios write.\n\n    Args:\n        fname (str): filename.\n        is_noxml (bool, optional): Set True if use noxml APIs (default: True).\n        comm (MPI.Comm, optional): MPI comm for parallel read/write (default: MPI.COMM_WORLD).\n\n    Example:\n\n    >>> import adios as ad\n    >>> f = ad.writer('adiosfile. [...]
   __pyx_tp_traverse_9adios_mpi_writer, /*tp_traverse*/
   __pyx_tp_clear_9adios_mpi_writer, /*tp_clear*/
   0, /*tp_richcompare*/
@@ -40868,6 +43002,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_kp_s_Count_dimension_mismatch_count_d, __pyx_k_Count_dimension_mismatch_count_d, sizeof(__pyx_k_Count_dimension_mismatch_count_d), 0, 0, 1, 0},
   {&__pyx_n_s_DATASPACES, __pyx_k_DATASPACES, sizeof(__pyx_k_DATASPACES), 0, 0, 1, 1},
   {&__pyx_n_s_DATATYPE, __pyx_k_DATATYPE, sizeof(__pyx_k_DATATYPE), 0, 0, 1, 1},
+  {&__pyx_n_s_DEFAULT, __pyx_k_DEFAULT, sizeof(__pyx_k_DEFAULT), 0, 0, 1, 1},
   {&__pyx_n_s_DIMES, __pyx_k_DIMES, sizeof(__pyx_k_DIMES), 0, 0, 1, 1},
   {&__pyx_kp_s_Data_type_is_not_supported_yet, __pyx_k_Data_type_is_not_supported_yet, sizeof(__pyx_k_Data_type_is_not_supported_yet), 0, 0, 1, 0},
   {&__pyx_kp_u_Define_a_group_associated_with, __pyx_k_Define_a_group_associated_with, sizeof(__pyx_k_Define_a_group_associated_with), 0, 1, 0, 0},
@@ -40875,19 +43010,24 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_Ellipsis, __pyx_k_Ellipsis, sizeof(__pyx_k_Ellipsis), 0, 0, 1, 1},
   {&__pyx_n_s_FLAG, __pyx_k_FLAG, sizeof(__pyx_k_FLAG), 0, 0, 1, 1},
   {&__pyx_n_s_FLEXPATH, __pyx_k_FLEXPATH, sizeof(__pyx_k_FLEXPATH), 0, 0, 1, 1},
+  {&__pyx_n_s_FULL, __pyx_k_FULL, sizeof(__pyx_k_FULL), 0, 0, 1, 1},
   {&__pyx_n_s_FancySelection, __pyx_k_FancySelection, sizeof(__pyx_k_FancySelection), 0, 0, 1, 1},
   {&__pyx_n_s_File, __pyx_k_File, sizeof(__pyx_k_File), 0, 0, 1, 1},
   {&__pyx_kp_u_Format_string_allocated_too_shor, __pyx_k_Format_string_allocated_too_shor, sizeof(__pyx_k_Format_string_allocated_too_shor), 0, 1, 0, 0},
   {&__pyx_kp_u_Format_string_allocated_too_shor_2, __pyx_k_Format_string_allocated_too_shor_2, sizeof(__pyx_k_Format_string_allocated_too_shor_2), 0, 1, 0, 0},
+  {&__pyx_n_s_Get_rank, __pyx_k_Get_rank, sizeof(__pyx_k_Get_rank), 0, 0, 1, 1},
   {&__pyx_n_s_ICEE, __pyx_k_ICEE, sizeof(__pyx_k_ICEE), 0, 0, 1, 1},
+  {&__pyx_n_s_ImportError, __pyx_k_ImportError, sizeof(__pyx_k_ImportError), 0, 0, 1, 1},
   {&__pyx_n_s_IndexError, __pyx_k_IndexError, sizeof(__pyx_k_IndexError), 0, 0, 1, 1},
   {&__pyx_n_s_KeyError, __pyx_k_KeyError, sizeof(__pyx_k_KeyError), 0, 0, 1, 1},
   {&__pyx_n_s_LATER, __pyx_k_LATER, sizeof(__pyx_k_LATER), 0, 0, 1, 1},
   {&__pyx_n_s_LOCKMODE, __pyx_k_LOCKMODE, sizeof(__pyx_k_LOCKMODE), 0, 0, 1, 1},
+  {&__pyx_n_s_MINMAX, __pyx_k_MINMAX, sizeof(__pyx_k_MINMAX), 0, 0, 1, 1},
   {&__pyx_n_s_MPI, __pyx_k_MPI, sizeof(__pyx_k_MPI), 0, 0, 1, 1},
   {&__pyx_n_s_NO, __pyx_k_NO, sizeof(__pyx_k_NO), 0, 0, 1, 1},
   {&__pyx_n_s_NONE, __pyx_k_NONE, sizeof(__pyx_k_NONE), 0, 0, 1, 1},
   {&__pyx_n_s_NOW, __pyx_k_NOW, sizeof(__pyx_k_NOW), 0, 0, 1, 1},
+  {&__pyx_n_s_NamedTemporaryFile, __pyx_k_NamedTemporaryFile, sizeof(__pyx_k_NamedTemporaryFile), 0, 0, 1, 1},
   {&__pyx_kp_u_Non_native_byte_order_not_suppor, __pyx_k_Non_native_byte_order_not_suppor, sizeof(__pyx_k_Non_native_byte_order_not_suppor), 0, 1, 0, 0},
   {&__pyx_n_s_NotImplementedError, __pyx_k_NotImplementedError, sizeof(__pyx_k_NotImplementedError), 0, 0, 1, 1},
   {&__pyx_kp_s_Not_a_valid_var, __pyx_k_Not_a_valid_var, sizeof(__pyx_k_Not_a_valid_var), 0, 0, 1, 0},
@@ -40905,6 +43045,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_kp_s_Requested_is_larger_than_the_sha, __pyx_k_Requested_is_larger_than_the_sha, sizeof(__pyx_k_Requested_is_larger_than_the_sha), 0, 0, 1, 0},
   {&__pyx_n_s_RuntimeError, __pyx_k_RuntimeError, sizeof(__pyx_k_RuntimeError), 0, 0, 1, 1},
   {&__pyx_n_s_S, __pyx_k_S, sizeof(__pyx_k_S), 0, 0, 1, 1},
+  {&__pyx_n_s_STATISTICS, __pyx_k_STATISTICS, sizeof(__pyx_k_STATISTICS), 0, 0, 1, 1},
   {&__pyx_kp_s_Scalar_dimension_mismatch_scalar, __pyx_k_Scalar_dimension_mismatch_scalar, sizeof(__pyx_k_Scalar_dimension_mismatch_scalar), 0, 0, 1, 0},
   {&__pyx_n_s_SimpleSelection, __pyx_k_SimpleSelection, sizeof(__pyx_k_SimpleSelection), 0, 0, 1, 1},
   {&__pyx_kp_s_Step_index_is_out_of_range_from, __pyx_k_Step_index_is_out_of_range_from, sizeof(__pyx_k_Step_index_is_out_of_range_from), 0, 0, 1, 0},
@@ -40920,12 +43061,13 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_Varinfo, __pyx_k_Varinfo, sizeof(__pyx_k_Varinfo), 0, 0, 1, 1},
   {&__pyx_kp_s_WARN_Invalid_read_method_name, __pyx_k_WARN_Invalid_read_method_name, sizeof(__pyx_k_WARN_Invalid_read_method_name), 0, 0, 1, 0},
   {&__pyx_kp_s_Warning_No_support_yet_s_type_d, __pyx_k_Warning_No_support_yet_s_type_d, sizeof(__pyx_k_Warning_No_support_yet_s_type_d), 0, 0, 1, 0},
+  {&__pyx_kp_s_Warning_skipping_defining_var_r, __pyx_k_Warning_skipping_defining_var_r, sizeof(__pyx_k_Warning_skipping_defining_var_r), 0, 0, 1, 0},
   {&__pyx_n_s_Writer, __pyx_k_Writer, sizeof(__pyx_k_Writer), 0, 0, 1, 1},
   {&__pyx_n_s_YES, __pyx_k_YES, sizeof(__pyx_k_YES), 0, 0, 1, 1},
   {&__pyx_kp_s__10, __pyx_k__10, sizeof(__pyx_k__10), 0, 0, 1, 0},
-  {&__pyx_kp_s__63, __pyx_k__63, sizeof(__pyx_k__63), 0, 0, 1, 0},
-  {&__pyx_kp_s__65, __pyx_k__65, sizeof(__pyx_k__65), 0, 0, 1, 0},
-  {&__pyx_n_s__77, __pyx_k__77, sizeof(__pyx_k__77), 0, 0, 1, 1},
+  {&__pyx_kp_s__64, __pyx_k__64, sizeof(__pyx_k__64), 0, 0, 1, 0},
+  {&__pyx_kp_s__66, __pyx_k__66, sizeof(__pyx_k__66), 0, 0, 1, 0},
+  {&__pyx_n_s__81, __pyx_k__81, sizeof(__pyx_k__81), 0, 0, 1, 1},
   {&__pyx_n_s_adios_mpi, __pyx_k_adios_mpi, sizeof(__pyx_k_adios_mpi), 0, 0, 1, 1},
   {&__pyx_n_s_advance, __pyx_k_advance, sizeof(__pyx_k_advance), 0, 0, 1, 1},
   {&__pyx_n_s_all, __pyx_k_all, sizeof(__pyx_k_all), 0, 0, 1, 1},
@@ -40938,6 +43080,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_atype, __pyx_k_atype, sizeof(__pyx_k_atype), 0, 0, 1, 1},
   {&__pyx_n_s_axis, __pyx_k_axis, sizeof(__pyx_k_axis), 0, 0, 1, 1},
   {&__pyx_n_s_base_path, __pyx_k_base_path, sizeof(__pyx_k_base_path), 0, 0, 1, 1},
+  {&__pyx_n_s_bcast, __pyx_k_bcast, sizeof(__pyx_k_bcast), 0, 0, 1, 1},
   {&__pyx_n_s_bool, __pyx_k_bool, sizeof(__pyx_k_bool), 0, 0, 1, 1},
   {&__pyx_n_s_bpls, __pyx_k_bpls, sizeof(__pyx_k_bpls), 0, 0, 1, 1},
   {&__pyx_n_s_buffer_size, __pyx_k_buffer_size, sizeof(__pyx_k_buffer_size), 0, 0, 1, 1},
@@ -41053,6 +43196,8 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_nspace, __pyx_k_nspace, sizeof(__pyx_k_nspace), 0, 0, 1, 1},
   {&__pyx_n_s_nsteps, __pyx_k_nsteps, sizeof(__pyx_k_nsteps), 0, 0, 1, 1},
   {&__pyx_n_s_numpy, __pyx_k_numpy, sizeof(__pyx_k_numpy), 0, 0, 1, 1},
+  {&__pyx_kp_s_numpy_core_multiarray_failed_to, __pyx_k_numpy_core_multiarray_failed_to, sizeof(__pyx_k_numpy_core_multiarray_failed_to), 0, 0, 1, 0},
+  {&__pyx_kp_s_numpy_core_umath_failed_to_impor, __pyx_k_numpy_core_umath_failed_to_impor, sizeof(__pyx_k_numpy_core_umath_failed_to_impor), 0, 0, 1, 0},
   {&__pyx_n_s_nvars, __pyx_k_nvars, sizeof(__pyx_k_nvars), 0, 0, 1, 1},
   {&__pyx_n_s_offset, __pyx_k_offset, sizeof(__pyx_k_offset), 0, 0, 1, 1},
   {&__pyx_n_s_order, __pyx_k_order, sizeof(__pyx_k_order), 0, 0, 1, 1},
@@ -41080,6 +43225,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_release_step, __pyx_k_release_step, sizeof(__pyx_k_release_step), 0, 0, 1, 1},
   {&__pyx_n_s_replace, __pyx_k_replace, sizeof(__pyx_k_replace), 0, 0, 1, 1},
   {&__pyx_n_s_reshape, __pyx_k_reshape, sizeof(__pyx_k_reshape), 0, 0, 1, 1},
+  {&__pyx_n_s_root, __pyx_k_root, sizeof(__pyx_k_root), 0, 0, 1, 1},
   {&__pyx_n_s_rstrip, __pyx_k_rstrip, sizeof(__pyx_k_rstrip), 0, 0, 1, 1},
   {&__pyx_n_s_scalar, __pyx_k_scalar, sizeof(__pyx_k_scalar), 0, 0, 1, 1},
   {&__pyx_n_s_schema_version, __pyx_k_schema_version, sizeof(__pyx_k_schema_version), 0, 0, 1, 1},
@@ -41104,6 +43250,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_strlen, __pyx_k_strlen, sizeof(__pyx_k_strlen), 0, 0, 1, 1},
   {&__pyx_n_s_syncgroupid, __pyx_k_syncgroupid, sizeof(__pyx_k_syncgroupid), 0, 0, 1, 1},
   {&__pyx_n_s_t, __pyx_k_t, sizeof(__pyx_k_t), 0, 0, 1, 1},
+  {&__pyx_n_s_tempfile, __pyx_k_tempfile, sizeof(__pyx_k_tempfile), 0, 0, 1, 1},
   {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1},
   {&__pyx_n_s_time_index, __pyx_k_time_index, sizeof(__pyx_k_time_index), 0, 0, 1, 1},
   {&__pyx_n_s_time_steps, __pyx_k_time_steps, sizeof(__pyx_k_time_steps), 0, 0, 1, 1},
@@ -41134,7 +43281,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_var, __pyx_k_var, sizeof(__pyx_k_var), 0, 0, 1, 1},
   {&__pyx_n_s_var_id, __pyx_k_var_id, sizeof(__pyx_k_var_id), 0, 0, 1, 1},
   {&__pyx_n_s_var_namelist, __pyx_k_var_namelist, sizeof(__pyx_k_var_namelist), 0, 0, 1, 1},
-  {&__pyx_kp_u_var_read_line_1456, __pyx_k_var_read_line_1456, sizeof(__pyx_k_var_read_line_1456), 0, 1, 0, 0},
+  {&__pyx_kp_u_var_read_line_1464, __pyx_k_var_read_line_1464, sizeof(__pyx_k_var_read_line_1464), 0, 1, 0, 0},
   {&__pyx_n_s_varid, __pyx_k_varid, sizeof(__pyx_k_varid), 0, 0, 1, 1},
   {&__pyx_n_s_varname, __pyx_k_varname, sizeof(__pyx_k_varname), 0, 0, 1, 1},
   {&__pyx_n_s_vars, __pyx_k_vars, sizeof(__pyx_k_vars), 0, 0, 1, 1},
@@ -41143,31 +43290,32 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_w, __pyx_k_w, sizeof(__pyx_k_w), 0, 0, 1, 1},
   {&__pyx_n_s_when, __pyx_k_when, sizeof(__pyx_k_when), 0, 0, 1, 1},
   {&__pyx_n_s_write, __pyx_k_write, sizeof(__pyx_k_write), 0, 0, 1, 1},
-  {&__pyx_kp_u_writer_declare_group_line_1982, __pyx_k_writer_declare_group_line_1982, sizeof(__pyx_k_writer_declare_group_line_1982), 0, 1, 0, 0},
-  {&__pyx_kp_u_writer_define_var_line_2019, __pyx_k_writer_define_var_line_2019, sizeof(__pyx_k_writer_define_var_line_2019), 0, 1, 0, 0},
+  {&__pyx_kp_u_writer_declare_group_line_1995, __pyx_k_writer_declare_group_line_1995, sizeof(__pyx_k_writer_declare_group_line_1995), 0, 1, 0, 0},
+  {&__pyx_kp_u_writer_define_var_line_2040, __pyx_k_writer_define_var_line_2040, sizeof(__pyx_k_writer_define_var_line_2040), 0, 1, 0, 0},
   {&__pyx_n_s_xrange, __pyx_k_xrange, sizeof(__pyx_k_xrange), 0, 0, 1, 1},
   {&__pyx_n_s_zeros, __pyx_k_zeros, sizeof(__pyx_k_zeros), 0, 0, 1, 1},
   {&__pyx_n_s_zip, __pyx_k_zip, sizeof(__pyx_k_zip), 0, 0, 1, 1},
   {0, 0, 0, 0, 0, 0, 0}
 };
 static int __Pyx_InitCachedBuiltins(void) {
-  __pyx_builtin_print = __Pyx_GetBuiltinName(__pyx_n_s_print); if (!__pyx_builtin_print) __PYX_ERR(0, 35, __pyx_L1_error)
+  __pyx_builtin_print = __Pyx_GetBuiltinName(__pyx_n_s_print); if (!__pyx_builtin_print) __PYX_ERR(0, 37, __pyx_L1_error)
   #if PY_MAJOR_VERSION >= 3
-  __pyx_builtin_xrange = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_xrange) __PYX_ERR(0, 71, __pyx_L1_error)
+  __pyx_builtin_xrange = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_xrange) __PYX_ERR(0, 73, __pyx_L1_error)
   #else
-  __pyx_builtin_xrange = __Pyx_GetBuiltinName(__pyx_n_s_xrange); if (!__pyx_builtin_xrange) __PYX_ERR(0, 71, __pyx_L1_error)
+  __pyx_builtin_xrange = __Pyx_GetBuiltinName(__pyx_n_s_xrange); if (!__pyx_builtin_xrange) __PYX_ERR(0, 73, __pyx_L1_error)
   #endif
-  __pyx_builtin_Ellipsis = __Pyx_GetBuiltinName(__pyx_n_s_Ellipsis); if (!__pyx_builtin_Ellipsis) __PYX_ERR(0, 441, __pyx_L1_error)
-  __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(0, 785, __pyx_L1_error)
-  __pyx_builtin_KeyError = __Pyx_GetBuiltinName(__pyx_n_s_KeyError); if (!__pyx_builtin_KeyError) __PYX_ERR(0, 895, __pyx_L1_error)
-  __pyx_builtin_TypeError = __Pyx_GetBuiltinName(__pyx_n_s_TypeError); if (!__pyx_builtin_TypeError) __PYX_ERR(0, 899, __pyx_L1_error)
-  __pyx_builtin_IndexError = __Pyx_GetBuiltinName(__pyx_n_s_IndexError); if (!__pyx_builtin_IndexError) __PYX_ERR(0, 1384, __pyx_L1_error)
-  __pyx_builtin_all = __Pyx_GetBuiltinName(__pyx_n_s_all); if (!__pyx_builtin_all) __PYX_ERR(0, 1391, __pyx_L1_error)
-  __pyx_builtin_zip = __Pyx_GetBuiltinName(__pyx_n_s_zip); if (!__pyx_builtin_zip) __PYX_ERR(0, 1548, __pyx_L1_error)
-  __pyx_builtin_enumerate = __Pyx_GetBuiltinName(__pyx_n_s_enumerate); if (!__pyx_builtin_enumerate) __PYX_ERR(0, 1639, __pyx_L1_error)
-  __pyx_builtin_NotImplementedError = __Pyx_GetBuiltinName(__pyx_n_s_NotImplementedError); if (!__pyx_builtin_NotImplementedError) __PYX_ERR(0, 1661, __pyx_L1_error)
+  __pyx_builtin_Ellipsis = __Pyx_GetBuiltinName(__pyx_n_s_Ellipsis); if (!__pyx_builtin_Ellipsis) __PYX_ERR(0, 449, __pyx_L1_error)
+  __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(0, 793, __pyx_L1_error)
+  __pyx_builtin_KeyError = __Pyx_GetBuiltinName(__pyx_n_s_KeyError); if (!__pyx_builtin_KeyError) __PYX_ERR(0, 903, __pyx_L1_error)
+  __pyx_builtin_TypeError = __Pyx_GetBuiltinName(__pyx_n_s_TypeError); if (!__pyx_builtin_TypeError) __PYX_ERR(0, 907, __pyx_L1_error)
+  __pyx_builtin_IndexError = __Pyx_GetBuiltinName(__pyx_n_s_IndexError); if (!__pyx_builtin_IndexError) __PYX_ERR(0, 1392, __pyx_L1_error)
+  __pyx_builtin_all = __Pyx_GetBuiltinName(__pyx_n_s_all); if (!__pyx_builtin_all) __PYX_ERR(0, 1399, __pyx_L1_error)
+  __pyx_builtin_zip = __Pyx_GetBuiltinName(__pyx_n_s_zip); if (!__pyx_builtin_zip) __PYX_ERR(0, 1556, __pyx_L1_error)
+  __pyx_builtin_enumerate = __Pyx_GetBuiltinName(__pyx_n_s_enumerate); if (!__pyx_builtin_enumerate) __PYX_ERR(0, 1647, __pyx_L1_error)
+  __pyx_builtin_NotImplementedError = __Pyx_GetBuiltinName(__pyx_n_s_NotImplementedError); if (!__pyx_builtin_NotImplementedError) __PYX_ERR(0, 1669, __pyx_L1_error)
   __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s_ValueError); if (!__pyx_builtin_ValueError) __PYX_ERR(1, 218, __pyx_L1_error)
   __pyx_builtin_RuntimeError = __Pyx_GetBuiltinName(__pyx_n_s_RuntimeError); if (!__pyx_builtin_RuntimeError) __PYX_ERR(1, 799, __pyx_L1_error)
+  __pyx_builtin_ImportError = __Pyx_GetBuiltinName(__pyx_n_s_ImportError); if (!__pyx_builtin_ImportError) __PYX_ERR(1, 989, __pyx_L1_error)
   return 0;
   __pyx_L1_error:;
   return -1;
@@ -41177,519 +43325,508 @@ static int __Pyx_InitCachedConstants(void) {
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0);
 
-  /* "adios_mpi.pyx":63
+  /* "adios_mpi.pyx":65
  *     l = list()
  *     for key in keys:
  *         if key.startswith('/'):             # <<<<<<<<<<<<<<
  *             key = key[1:]
  *         if '/' not in key:
  */
-  __pyx_tuple__2 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__2)) __PYX_ERR(0, 63, __pyx_L1_error)
+  __pyx_tuple__2 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__2)) __PYX_ERR(0, 65, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__2);
   __Pyx_GIVEREF(__pyx_tuple__2);
 
-  /* "adios_mpi.pyx":64
+  /* "adios_mpi.pyx":66
  *     for key in keys:
  *         if key.startswith('/'):
  *             key = key[1:]             # <<<<<<<<<<<<<<
  *         if '/' not in key:
  *             l.append(key)
  */
-  __pyx_slice__3 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__3)) __PYX_ERR(0, 64, __pyx_L1_error)
+  __pyx_slice__3 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__3)) __PYX_ERR(0, 66, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_slice__3);
   __Pyx_GIVEREF(__pyx_slice__3);
 
-  /* "adios_mpi.pyx":442
+  /* "adios_mpi.pyx":450
  *     for slice_ in index:
  *         if slice_ is Ellipsis:
  *             fixed.extend([slice(None)] * (ndim-length-len(fixed)+1))             # <<<<<<<<<<<<<<
  *         elif isinstance(slice_, (int, long)):
  *             fixed.append(slice(slice_, slice_+1, None))
  */
-  __pyx_slice__4 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_slice__4)) __PYX_ERR(0, 442, __pyx_L1_error)
+  __pyx_slice__4 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_slice__4)) __PYX_ERR(0, 450, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_slice__4);
   __Pyx_GIVEREF(__pyx_slice__4);
 
-  /* "adios_mpi.pyx":453
+  /* "adios_mpi.pyx":461
  *     index = tuple(fixed)
  *     if len(index) < ndim:
  *         index += (slice(None),) * (ndim-len(index))             # <<<<<<<<<<<<<<
  * 
  *     return index
  */
-  __pyx_slice__5 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_slice__5)) __PYX_ERR(0, 453, __pyx_L1_error)
+  __pyx_slice__5 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_slice__5)) __PYX_ERR(0, 461, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_slice__5);
   __Pyx_GIVEREF(__pyx_slice__5);
-  __pyx_tuple__6 = PyTuple_New(1); if (unlikely(!__pyx_tuple__6)) __PYX_ERR(0, 453, __pyx_L1_error)
+  __pyx_tuple__6 = PyTuple_New(1); if (unlikely(!__pyx_tuple__6)) __PYX_ERR(0, 461, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__6);
   __Pyx_INCREF(__pyx_slice__5);
   __Pyx_GIVEREF(__pyx_slice__5);
   PyTuple_SET_ITEM(__pyx_tuple__6, 0, __pyx_slice__5);
   __Pyx_GIVEREF(__pyx_tuple__6);
 
-  /* "adios_mpi.pyx":899
+  /* "adios_mpi.pyx":907
  *         for key_ in varname:
  *             if not isinstance(key_, str):
  *                 raise TypeError("Unhashable type")             # <<<<<<<<<<<<<<
  * 
  *             if key_.startswith('/'):
  */
-  __pyx_tuple__13 = PyTuple_Pack(1, __pyx_kp_s_Unhashable_type); if (unlikely(!__pyx_tuple__13)) __PYX_ERR(0, 899, __pyx_L1_error)
+  __pyx_tuple__13 = PyTuple_Pack(1, __pyx_kp_s_Unhashable_type); if (unlikely(!__pyx_tuple__13)) __PYX_ERR(0, 907, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__13);
   __Pyx_GIVEREF(__pyx_tuple__13);
 
-  /* "adios_mpi.pyx":901
+  /* "adios_mpi.pyx":909
  *                 raise TypeError("Unhashable type")
  * 
  *             if key_.startswith('/'):             # <<<<<<<<<<<<<<
  *                 key_ = key_[1:]
  * 
  */
-  __pyx_tuple__14 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__14)) __PYX_ERR(0, 901, __pyx_L1_error)
+  __pyx_tuple__14 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__14)) __PYX_ERR(0, 909, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__14);
   __Pyx_GIVEREF(__pyx_tuple__14);
 
-  /* "adios_mpi.pyx":902
+  /* "adios_mpi.pyx":910
  * 
  *             if key_.startswith('/'):
  *                 key_ = key_[1:]             # <<<<<<<<<<<<<<
  * 
  *             if key_ in dict.keys(self):
  */
-  __pyx_slice__15 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__15)) __PYX_ERR(0, 902, __pyx_L1_error)
+  __pyx_slice__15 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__15)) __PYX_ERR(0, 910, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_slice__15);
   __Pyx_GIVEREF(__pyx_slice__15);
 
-  /* "adios_mpi.pyx":1014
+  /* "adios_mpi.pyx":1022
  *         assert self.fp != NULL, 'Not an open file'
  * 
  *         self.name = fname.split('/')[-1]  ## basename             # <<<<<<<<<<<<<<
  *         self.nvars = self.fp.nvars
  *         self.nattrs = self.fp.nattrs
  */
-  __pyx_tuple__18 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__18)) __PYX_ERR(0, 1014, __pyx_L1_error)
+  __pyx_tuple__18 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__18)) __PYX_ERR(0, 1022, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__18);
   __Pyx_GIVEREF(__pyx_tuple__18);
 
-  /* "adios_mpi.pyx":1053
+  /* "adios_mpi.pyx":1061
  *         """ Print native ADIOS_FILE structure. """
  *         assert self.fp != NULL, 'Not an open file'
  *         print ('=== AdiosFile ===')             # <<<<<<<<<<<<<<
  *         print ('%15s : %lu' % ('fp', <unsigned long> self.fp))
  *         printfile(self.fp)
  */
-  __pyx_tuple__19 = PyTuple_Pack(1, __pyx_kp_s_AdiosFile); if (unlikely(!__pyx_tuple__19)) __PYX_ERR(0, 1053, __pyx_L1_error)
+  __pyx_tuple__19 = PyTuple_Pack(1, __pyx_kp_s_AdiosFile); if (unlikely(!__pyx_tuple__19)) __PYX_ERR(0, 1061, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__19);
   __Pyx_GIVEREF(__pyx_tuple__19);
 
-  /* "adios_mpi.pyx":1101
+  /* "adios_mpi.pyx":1109
  *         for key_ in varname:
  *             if not isinstance(key_, str):
  *                 raise TypeError("Unhashable type")             # <<<<<<<<<<<<<<
  * 
  *             if key_.startswith('/'):
  */
-  __pyx_tuple__20 = PyTuple_Pack(1, __pyx_kp_s_Unhashable_type); if (unlikely(!__pyx_tuple__20)) __PYX_ERR(0, 1101, __pyx_L1_error)
+  __pyx_tuple__20 = PyTuple_Pack(1, __pyx_kp_s_Unhashable_type); if (unlikely(!__pyx_tuple__20)) __PYX_ERR(0, 1109, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__20);
   __Pyx_GIVEREF(__pyx_tuple__20);
 
-  /* "adios_mpi.pyx":1103
+  /* "adios_mpi.pyx":1111
  *                 raise TypeError("Unhashable type")
  * 
  *             if key_.startswith('/'):             # <<<<<<<<<<<<<<
  *                 key_ = key_[1:]
  * 
  */
-  __pyx_tuple__21 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__21)) __PYX_ERR(0, 1103, __pyx_L1_error)
+  __pyx_tuple__21 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__21)) __PYX_ERR(0, 1111, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__21);
   __Pyx_GIVEREF(__pyx_tuple__21);
 
-  /* "adios_mpi.pyx":1104
+  /* "adios_mpi.pyx":1112
  * 
  *             if key_.startswith('/'):
  *                 key_ = key_[1:]             # <<<<<<<<<<<<<<
  * 
  *             if key_ in self.vars.keys():
  */
-  __pyx_slice__22 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__22)) __PYX_ERR(0, 1104, __pyx_L1_error)
+  __pyx_slice__22 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__22)) __PYX_ERR(0, 1112, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_slice__22);
   __Pyx_GIVEREF(__pyx_slice__22);
 
-  /* "adios_mpi.pyx":1178
+  /* "adios_mpi.pyx":1186
  *         s = set()
  *         for k in self.vars.keys():
  *             if k.startswith('/'): k = k[1:]             # <<<<<<<<<<<<<<
  *             s.add(os.path.dirname(k).split('/')[0])
  *         for k in self.attrs.keys():
  */
-  __pyx_tuple__23 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__23)) __PYX_ERR(0, 1178, __pyx_L1_error)
+  __pyx_tuple__23 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__23)) __PYX_ERR(0, 1186, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__23);
   __Pyx_GIVEREF(__pyx_tuple__23);
-  __pyx_slice__24 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__24)) __PYX_ERR(0, 1178, __pyx_L1_error)
+  __pyx_slice__24 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__24)) __PYX_ERR(0, 1186, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_slice__24);
   __Pyx_GIVEREF(__pyx_slice__24);
 
-  /* "adios_mpi.pyx":1179
+  /* "adios_mpi.pyx":1187
  *         for k in self.vars.keys():
  *             if k.startswith('/'): k = k[1:]
  *             s.add(os.path.dirname(k).split('/')[0])             # <<<<<<<<<<<<<<
  *         for k in self.attrs.keys():
  *             if k.startswith('/'): k = k[1:]
  */
-  __pyx_tuple__25 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(0, 1179, __pyx_L1_error)
+  __pyx_tuple__25 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(0, 1187, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__25);
   __Pyx_GIVEREF(__pyx_tuple__25);
 
-  /* "adios_mpi.pyx":1181
+  /* "adios_mpi.pyx":1189
  *             s.add(os.path.dirname(k).split('/')[0])
  *         for k in self.attrs.keys():
  *             if k.startswith('/'): k = k[1:]             # <<<<<<<<<<<<<<
  *             s.add(os.path.dirname(k).split('/')[0])
  *         return list(s-set(['']))
  */
-  __pyx_tuple__26 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__26)) __PYX_ERR(0, 1181, __pyx_L1_error)
+  __pyx_tuple__26 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__26)) __PYX_ERR(0, 1189, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__26);
   __Pyx_GIVEREF(__pyx_tuple__26);
-  __pyx_slice__27 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__27)) __PYX_ERR(0, 1181, __pyx_L1_error)
+  __pyx_slice__27 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__27)) __PYX_ERR(0, 1189, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_slice__27);
   __Pyx_GIVEREF(__pyx_slice__27);
 
-  /* "adios_mpi.pyx":1182
+  /* "adios_mpi.pyx":1190
  *         for k in self.attrs.keys():
  *             if k.startswith('/'): k = k[1:]
  *             s.add(os.path.dirname(k).split('/')[0])             # <<<<<<<<<<<<<<
  *         return list(s-set(['']))
  * 
  */
-  __pyx_tuple__28 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__28)) __PYX_ERR(0, 1182, __pyx_L1_error)
+  __pyx_tuple__28 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__28)) __PYX_ERR(0, 1190, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__28);
   __Pyx_GIVEREF(__pyx_tuple__28);
 
-  /* "adios_mpi.pyx":1523
+  /* "adios_mpi.pyx":1531
  *         if len(offset) == 0:
  *             npoffset = npshape.copy()
  *             npoffset.fill(0)             # <<<<<<<<<<<<<<
  *         else:
  *             npoffset = np.array(offset, dtype=np.int64)
  */
-  __pyx_tuple__29 = PyTuple_Pack(1, __pyx_int_0); if (unlikely(!__pyx_tuple__29)) __PYX_ERR(0, 1523, __pyx_L1_error)
+  __pyx_tuple__29 = PyTuple_Pack(1, __pyx_int_0); if (unlikely(!__pyx_tuple__29)) __PYX_ERR(0, 1531, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__29);
   __Pyx_GIVEREF(__pyx_tuple__29);
 
-  /* "adios_mpi.pyx":1534
+  /* "adios_mpi.pyx":1542
  * 
  *         if len(scalar) == 0:
  *             scalar = tuple((False,) * len(npshape))             # <<<<<<<<<<<<<<
  * 
  *         if len(npshape) != len(npoffset):
  */
-  __pyx_tuple__30 = PyTuple_New(1); if (unlikely(!__pyx_tuple__30)) __PYX_ERR(0, 1534, __pyx_L1_error)
+  __pyx_tuple__30 = PyTuple_New(1); if (unlikely(!__pyx_tuple__30)) __PYX_ERR(0, 1542, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__30);
   __Pyx_INCREF(Py_False);
   __Pyx_GIVEREF(Py_False);
   PyTuple_SET_ITEM(__pyx_tuple__30, 0, Py_False);
   __Pyx_GIVEREF(__pyx_tuple__30);
 
-  /* "adios_mpi.pyx":1546
+  /* "adios_mpi.pyx":1554
  * 
  *         if (npshape < npcount + npoffset).any():
  *             raise IndexError('Requested is larger than the shape.')             # <<<<<<<<<<<<<<
  * 
  *         shape = [x for x, y in zip(npcount, scalar) if not y]
  */
-  __pyx_tuple__31 = PyTuple_Pack(1, __pyx_kp_s_Requested_is_larger_than_the_sha); if (unlikely(!__pyx_tuple__31)) __PYX_ERR(0, 1546, __pyx_L1_error)
+  __pyx_tuple__31 = PyTuple_Pack(1, __pyx_kp_s_Requested_is_larger_than_the_sha); if (unlikely(!__pyx_tuple__31)) __PYX_ERR(0, 1554, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__31);
   __Pyx_GIVEREF(__pyx_tuple__31);
 
-  /* "adios_mpi.pyx":1554
+  /* "adios_mpi.pyx":1562
  * 
  *         if len(shape) > 0:
  *             var[:] = fill             # <<<<<<<<<<<<<<
  * 
  *         cdef ADIOS_SELECTION * sel
  */
-  __pyx_slice__32 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_slice__32)) __PYX_ERR(0, 1554, __pyx_L1_error)
+  __pyx_slice__32 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_slice__32)) __PYX_ERR(0, 1562, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_slice__32);
   __Pyx_GIVEREF(__pyx_slice__32);
 
-  /* "adios_mpi.pyx":1574
+  /* "adios_mpi.pyx":1582
  *         """ Print native ADIOS_VARINFO structure. """
  *         assert self.vp != NULL, 'Not an open variable'
  *         print ('=== AdiosVariable ===')             # <<<<<<<<<<<<<<
  *         print ('%15s : %lu' % ('vp', <unsigned long> self.vp))
  *         print ('%15s : %lu' % ('fp', <unsigned long> self.file.fp))
  */
-  __pyx_tuple__33 = PyTuple_Pack(1, __pyx_kp_s_AdiosVariable); if (unlikely(!__pyx_tuple__33)) __PYX_ERR(0, 1574, __pyx_L1_error)
+  __pyx_tuple__33 = PyTuple_Pack(1, __pyx_kp_s_AdiosVariable); if (unlikely(!__pyx_tuple__33)) __PYX_ERR(0, 1582, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__33);
   __Pyx_GIVEREF(__pyx_tuple__33);
 
-  /* "adios_mpi.pyx":1598
+  /* "adios_mpi.pyx":1606
  *         for key_ in varname:
  *             if not isinstance(key_, str):
  *                 raise TypeError("Unhashable type")             # <<<<<<<<<<<<<<
  * 
  *             if key_.startswith('/'):
  */
-  __pyx_tuple__34 = PyTuple_Pack(1, __pyx_kp_s_Unhashable_type); if (unlikely(!__pyx_tuple__34)) __PYX_ERR(0, 1598, __pyx_L1_error)
+  __pyx_tuple__34 = PyTuple_Pack(1, __pyx_kp_s_Unhashable_type); if (unlikely(!__pyx_tuple__34)) __PYX_ERR(0, 1606, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__34);
   __Pyx_GIVEREF(__pyx_tuple__34);
 
-  /* "adios_mpi.pyx":1600
+  /* "adios_mpi.pyx":1608
  *                 raise TypeError("Unhashable type")
  * 
  *             if key_.startswith('/'):             # <<<<<<<<<<<<<<
  *                 key_ = key_[1:]
  * 
  */
-  __pyx_tuple__35 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__35)) __PYX_ERR(0, 1600, __pyx_L1_error)
+  __pyx_tuple__35 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__35)) __PYX_ERR(0, 1608, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__35);
   __Pyx_GIVEREF(__pyx_tuple__35);
 
-  /* "adios_mpi.pyx":1601
+  /* "adios_mpi.pyx":1609
  * 
  *             if key_.startswith('/'):
  *                 key_ = key_[1:]             # <<<<<<<<<<<<<<
  * 
  *             if key_ in self.attrs.keys():
  */
-  __pyx_slice__36 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__36)) __PYX_ERR(0, 1601, __pyx_L1_error)
+  __pyx_slice__36 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__36)) __PYX_ERR(0, 1609, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_slice__36);
   __Pyx_GIVEREF(__pyx_slice__36);
 
-  /* "adios_mpi.pyx":1622
+  /* "adios_mpi.pyx":1630
  *         if isinstance(asel, sel.SimpleSelection):
  *             if (self.nsteps) > 1:
  *                 return self.read(offset=asel.sel[0][1:],             # <<<<<<<<<<<<<<
  *                                  count=asel.sel[1][1:],
  *                                  scalar=asel.sel[3][1:],
  */
-  __pyx_slice__37 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__37)) __PYX_ERR(0, 1622, __pyx_L1_error)
+  __pyx_slice__37 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__37)) __PYX_ERR(0, 1630, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_slice__37);
   __Pyx_GIVEREF(__pyx_slice__37);
 
-  /* "adios_mpi.pyx":1623
+  /* "adios_mpi.pyx":1631
  *             if (self.nsteps) > 1:
  *                 return self.read(offset=asel.sel[0][1:],
  *                                  count=asel.sel[1][1:],             # <<<<<<<<<<<<<<
  *                                  scalar=asel.sel[3][1:],
  *                                  from_steps=asel.sel[0][0],
  */
-  __pyx_slice__38 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__38)) __PYX_ERR(0, 1623, __pyx_L1_error)
+  __pyx_slice__38 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__38)) __PYX_ERR(0, 1631, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_slice__38);
   __Pyx_GIVEREF(__pyx_slice__38);
 
-  /* "adios_mpi.pyx":1624
+  /* "adios_mpi.pyx":1632
  *                 return self.read(offset=asel.sel[0][1:],
  *                                  count=asel.sel[1][1:],
  *                                  scalar=asel.sel[3][1:],             # <<<<<<<<<<<<<<
  *                                  from_steps=asel.sel[0][0],
  *                                  nsteps=asel.sel[1][0],
  */
-  __pyx_slice__39 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__39)) __PYX_ERR(0, 1624, __pyx_L1_error)
+  __pyx_slice__39 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__39)) __PYX_ERR(0, 1632, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_slice__39);
   __Pyx_GIVEREF(__pyx_slice__39);
 
-  /* "adios_mpi.pyx":1641
+  /* "adios_mpi.pyx":1649
  *             for idx, obj in enumerate(asel.sel):
  *                 if (self.nsteps) > 1:
  *                     v = self.read(offset=obj[0][1:],             # <<<<<<<<<<<<<<
  *                                   count=obj[1][1:],
  *                                   scalar=obj[3][1:],
  */
-  __pyx_slice__40 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__40)) __PYX_ERR(0, 1641, __pyx_L1_error)
+  __pyx_slice__40 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__40)) __PYX_ERR(0, 1649, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_slice__40);
   __Pyx_GIVEREF(__pyx_slice__40);
 
-  /* "adios_mpi.pyx":1642
+  /* "adios_mpi.pyx":1650
  *                 if (self.nsteps) > 1:
  *                     v = self.read(offset=obj[0][1:],
  *                                   count=obj[1][1:],             # <<<<<<<<<<<<<<
  *                                   scalar=obj[3][1:],
  *                                   from_steps=obj[0][0],
  */
-  __pyx_slice__41 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__41)) __PYX_ERR(0, 1642, __pyx_L1_error)
+  __pyx_slice__41 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__41)) __PYX_ERR(0, 1650, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_slice__41);
   __Pyx_GIVEREF(__pyx_slice__41);
 
-  /* "adios_mpi.pyx":1643
+  /* "adios_mpi.pyx":1651
  *                     v = self.read(offset=obj[0][1:],
  *                                   count=obj[1][1:],
  *                                   scalar=obj[3][1:],             # <<<<<<<<<<<<<<
  *                                   from_steps=obj[0][0],
  *                                   nsteps=obj[1][0],
  */
-  __pyx_slice__42 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__42)) __PYX_ERR(0, 1643, __pyx_L1_error)
+  __pyx_slice__42 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__42)) __PYX_ERR(0, 1651, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_slice__42);
   __Pyx_GIVEREF(__pyx_slice__42);
 
-  /* "adios_mpi.pyx":1661
+  /* "adios_mpi.pyx":1669
  * 
  *         else:
  *             raise NotImplementedError("Not implemented yet")             # <<<<<<<<<<<<<<
  * 
  *     def __getitem__(self, args):
  */
-  __pyx_tuple__43 = PyTuple_Pack(1, __pyx_kp_s_Not_implemented_yet); if (unlikely(!__pyx_tuple__43)) __PYX_ERR(0, 1661, __pyx_L1_error)
+  __pyx_tuple__43 = PyTuple_Pack(1, __pyx_kp_s_Not_implemented_yet); if (unlikely(!__pyx_tuple__43)) __PYX_ERR(0, 1669, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__43);
   __Pyx_GIVEREF(__pyx_tuple__43);
 
-  /* "adios_mpi.pyx":1787
+  /* "adios_mpi.pyx":1795
  *     def __init__(self, file file, str name):
  *         self.file = file
  *         self.name = name.rstrip('/')             # <<<<<<<<<<<<<<
  * 
  *         self.vars = softdict()
  */
-  __pyx_tuple__44 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__44)) __PYX_ERR(0, 1787, __pyx_L1_error)
+  __pyx_tuple__44 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__44)) __PYX_ERR(0, 1795, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__44);
   __Pyx_GIVEREF(__pyx_tuple__44);
 
-  /* "adios_mpi.pyx":1822
+  /* "adios_mpi.pyx":1830
  *         for key_ in varname:
  *             if not isinstance(key_, str):
  *                 raise TypeError("Unhashable type")             # <<<<<<<<<<<<<<
  * 
  *             if key_.startswith('/'):
  */
-  __pyx_tuple__45 = PyTuple_Pack(1, __pyx_kp_s_Unhashable_type); if (unlikely(!__pyx_tuple__45)) __PYX_ERR(0, 1822, __pyx_L1_error)
+  __pyx_tuple__45 = PyTuple_Pack(1, __pyx_kp_s_Unhashable_type); if (unlikely(!__pyx_tuple__45)) __PYX_ERR(0, 1830, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__45);
   __Pyx_GIVEREF(__pyx_tuple__45);
 
-  /* "adios_mpi.pyx":1824
+  /* "adios_mpi.pyx":1832
  *                 raise TypeError("Unhashable type")
  * 
  *             if key_.startswith('/'):             # <<<<<<<<<<<<<<
  *                 key_ = key_[1:]
  * 
  */
-  __pyx_tuple__46 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__46)) __PYX_ERR(0, 1824, __pyx_L1_error)
+  __pyx_tuple__46 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__46)) __PYX_ERR(0, 1832, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__46);
   __Pyx_GIVEREF(__pyx_tuple__46);
 
-  /* "adios_mpi.pyx":1825
+  /* "adios_mpi.pyx":1833
  * 
  *             if key_.startswith('/'):
  *                 key_ = key_[1:]             # <<<<<<<<<<<<<<
  * 
  *             if key_ in self.vars.keys():
  */
-  __pyx_slice__47 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__47)) __PYX_ERR(0, 1825, __pyx_L1_error)
+  __pyx_slice__47 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__47)) __PYX_ERR(0, 1833, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_slice__47);
   __Pyx_GIVEREF(__pyx_slice__47);
 
-  /* "adios_mpi.pyx":1875
+  /* "adios_mpi.pyx":1883
  *         s = set()
  *         for k in self.vars.keys():
  *             if k.startswith('/'): k = k[1:]             # <<<<<<<<<<<<<<
  *             s.add(os.path.dirname(k).split('/')[0])
  *         for k in self.attrs.keys():
  */
-  __pyx_tuple__48 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__48)) __PYX_ERR(0, 1875, __pyx_L1_error)
+  __pyx_tuple__48 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__48)) __PYX_ERR(0, 1883, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__48);
   __Pyx_GIVEREF(__pyx_tuple__48);
-  __pyx_slice__49 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__49)) __PYX_ERR(0, 1875, __pyx_L1_error)
+  __pyx_slice__49 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__49)) __PYX_ERR(0, 1883, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_slice__49);
   __Pyx_GIVEREF(__pyx_slice__49);
 
-  /* "adios_mpi.pyx":1876
+  /* "adios_mpi.pyx":1884
  *         for k in self.vars.keys():
  *             if k.startswith('/'): k = k[1:]
  *             s.add(os.path.dirname(k).split('/')[0])             # <<<<<<<<<<<<<<
  *         for k in self.attrs.keys():
  *             if k.startswith('/'): k = k[1:]
  */
-  __pyx_tuple__50 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__50)) __PYX_ERR(0, 1876, __pyx_L1_error)
+  __pyx_tuple__50 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__50)) __PYX_ERR(0, 1884, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__50);
   __Pyx_GIVEREF(__pyx_tuple__50);
 
-  /* "adios_mpi.pyx":1878
+  /* "adios_mpi.pyx":1886
  *             s.add(os.path.dirname(k).split('/')[0])
  *         for k in self.attrs.keys():
  *             if k.startswith('/'): k = k[1:]             # <<<<<<<<<<<<<<
  *             s.add(os.path.dirname(k).split('/')[0])
  *         return list(s-set(['']))
  */
-  __pyx_tuple__51 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__51)) __PYX_ERR(0, 1878, __pyx_L1_error)
+  __pyx_tuple__51 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__51)) __PYX_ERR(0, 1886, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__51);
   __Pyx_GIVEREF(__pyx_tuple__51);
-  __pyx_slice__52 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__52)) __PYX_ERR(0, 1878, __pyx_L1_error)
+  __pyx_slice__52 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__52)) __PYX_ERR(0, 1886, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_slice__52);
   __Pyx_GIVEREF(__pyx_slice__52);
 
-  /* "adios_mpi.pyx":1879
+  /* "adios_mpi.pyx":1887
  *         for k in self.attrs.keys():
  *             if k.startswith('/'): k = k[1:]
  *             s.add(os.path.dirname(k).split('/')[0])             # <<<<<<<<<<<<<<
  *         return list(s-set(['']))
  * 
  */
-  __pyx_tuple__53 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__53)) __PYX_ERR(0, 1879, __pyx_L1_error)
+  __pyx_tuple__53 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__53)) __PYX_ERR(0, 1887, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__53);
   __Pyx_GIVEREF(__pyx_tuple__53);
 
-  /* "adios_mpi.pyx":2186
+  /* "adios_mpi.pyx":2207
  *         if self.is_static:
  *             if self.value is None:
  *                 raise TypeError("Value is none")             # <<<<<<<<<<<<<<
  * 
  *             define_attribute_byvalue(gid, self.name, "", self.value)
  */
-  __pyx_tuple__58 = PyTuple_Pack(1, __pyx_kp_s_Value_is_none); if (unlikely(!__pyx_tuple__58)) __PYX_ERR(0, 2186, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__58);
-  __Pyx_GIVEREF(__pyx_tuple__58);
-
-  /* "adios_mpi.pyx":2232
- *     def define(self, int64_t gid):
- *         if self.value is None:
- *             raise TypeError("Value is none")             # <<<<<<<<<<<<<<
- * 
- *         ldim_ = self.ldim
- */
-  __pyx_tuple__62 = PyTuple_Pack(1, __pyx_kp_s_Value_is_none); if (unlikely(!__pyx_tuple__62)) __PYX_ERR(0, 2232, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__62);
-  __Pyx_GIVEREF(__pyx_tuple__62);
+  __pyx_tuple__60 = PyTuple_Pack(1, __pyx_kp_s_Value_is_none); if (unlikely(!__pyx_tuple__60)) __PYX_ERR(0, 2207, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__60);
+  __Pyx_GIVEREF(__pyx_tuple__60);
 
-  /* "adios_mpi.pyx":2254
+  /* "adios_mpi.pyx":2276
  *         cdef int64_t varid = 0;
  *         varid = define_var(gid, self.name, "", atype,
  *                    str(ldim_).replace(' ', '').strip('(,)'),             # <<<<<<<<<<<<<<
  *                    str(gdim_).replace(' ', '').strip('(,)'),
  *                    str(offset_).replace(' ', '').strip('(,)'))
  */
-  __pyx_tuple__64 = PyTuple_Pack(2, __pyx_kp_s__63, __pyx_kp_s__10); if (unlikely(!__pyx_tuple__64)) __PYX_ERR(0, 2254, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__64);
-  __Pyx_GIVEREF(__pyx_tuple__64);
-  __pyx_tuple__66 = PyTuple_Pack(1, __pyx_kp_s__65); if (unlikely(!__pyx_tuple__66)) __PYX_ERR(0, 2254, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__66);
-  __Pyx_GIVEREF(__pyx_tuple__66);
+  __pyx_tuple__65 = PyTuple_Pack(2, __pyx_kp_s__64, __pyx_kp_s__10); if (unlikely(!__pyx_tuple__65)) __PYX_ERR(0, 2276, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__65);
+  __Pyx_GIVEREF(__pyx_tuple__65);
+  __pyx_tuple__67 = PyTuple_Pack(1, __pyx_kp_s__66); if (unlikely(!__pyx_tuple__67)) __PYX_ERR(0, 2276, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__67);
+  __Pyx_GIVEREF(__pyx_tuple__67);
 
-  /* "adios_mpi.pyx":2255
+  /* "adios_mpi.pyx":2277
  *         varid = define_var(gid, self.name, "", atype,
  *                    str(ldim_).replace(' ', '').strip('(,)'),
  *                    str(gdim_).replace(' ', '').strip('(,)'),             # <<<<<<<<<<<<<<
  *                    str(offset_).replace(' ', '').strip('(,)'))
  * 
  */
-  __pyx_tuple__67 = PyTuple_Pack(2, __pyx_kp_s__63, __pyx_kp_s__10); if (unlikely(!__pyx_tuple__67)) __PYX_ERR(0, 2255, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__67);
-  __Pyx_GIVEREF(__pyx_tuple__67);
-  __pyx_tuple__68 = PyTuple_Pack(1, __pyx_kp_s__65); if (unlikely(!__pyx_tuple__68)) __PYX_ERR(0, 2255, __pyx_L1_error)
+  __pyx_tuple__68 = PyTuple_Pack(2, __pyx_kp_s__64, __pyx_kp_s__10); if (unlikely(!__pyx_tuple__68)) __PYX_ERR(0, 2277, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__68);
   __Pyx_GIVEREF(__pyx_tuple__68);
+  __pyx_tuple__69 = PyTuple_Pack(1, __pyx_kp_s__66); if (unlikely(!__pyx_tuple__69)) __PYX_ERR(0, 2277, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__69);
+  __Pyx_GIVEREF(__pyx_tuple__69);
 
-  /* "adios_mpi.pyx":2256
+  /* "adios_mpi.pyx":2278
  *                    str(ldim_).replace(' ', '').strip('(,)'),
  *                    str(gdim_).replace(' ', '').strip('(,)'),
  *                    str(offset_).replace(' ', '').strip('(,)'))             # <<<<<<<<<<<<<<
  * 
  *         if (self.transform is not None):
  */
-  __pyx_tuple__69 = PyTuple_Pack(2, __pyx_kp_s__63, __pyx_kp_s__10); if (unlikely(!__pyx_tuple__69)) __PYX_ERR(0, 2256, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__69);
-  __Pyx_GIVEREF(__pyx_tuple__69);
-  __pyx_tuple__70 = PyTuple_Pack(1, __pyx_kp_s__65); if (unlikely(!__pyx_tuple__70)) __PYX_ERR(0, 2256, __pyx_L1_error)
+  __pyx_tuple__70 = PyTuple_Pack(2, __pyx_kp_s__64, __pyx_kp_s__10); if (unlikely(!__pyx_tuple__70)) __PYX_ERR(0, 2278, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__70);
   __Pyx_GIVEREF(__pyx_tuple__70);
+  __pyx_tuple__71 = PyTuple_Pack(1, __pyx_kp_s__66); if (unlikely(!__pyx_tuple__71)) __PYX_ERR(0, 2278, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__71);
+  __Pyx_GIVEREF(__pyx_tuple__71);
 
   /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":218
  *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)
@@ -41698,9 +43835,9 @@ static int __Pyx_InitCachedConstants(void) {
  * 
  *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
  */
-  __pyx_tuple__71 = PyTuple_Pack(1, __pyx_kp_u_ndarray_is_not_C_contiguous); if (unlikely(!__pyx_tuple__71)) __PYX_ERR(1, 218, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__71);
-  __Pyx_GIVEREF(__pyx_tuple__71);
+  __pyx_tuple__72 = PyTuple_Pack(1, __pyx_kp_u_ndarray_is_not_C_contiguous); if (unlikely(!__pyx_tuple__72)) __PYX_ERR(1, 218, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__72);
+  __Pyx_GIVEREF(__pyx_tuple__72);
 
   /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":222
  *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
@@ -41709,9 +43846,9 @@ static int __Pyx_InitCachedConstants(void) {
  * 
  *             info.buf = PyArray_DATA(self)
  */
-  __pyx_tuple__72 = PyTuple_Pack(1, __pyx_kp_u_ndarray_is_not_Fortran_contiguou); if (unlikely(!__pyx_tuple__72)) __PYX_ERR(1, 222, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__72);
-  __Pyx_GIVEREF(__pyx_tuple__72);
+  __pyx_tuple__73 = PyTuple_Pack(1, __pyx_kp_u_ndarray_is_not_Fortran_contiguou); if (unlikely(!__pyx_tuple__73)) __PYX_ERR(1, 222, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__73);
+  __Pyx_GIVEREF(__pyx_tuple__73);
 
   /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":259
  *                 if ((descr.byteorder == c'>' and little_endian) or
@@ -41720,9 +43857,9 @@ static int __Pyx_InitCachedConstants(void) {
  *                 if   t == NPY_BYTE:        f = "b"
  *                 elif t == NPY_UBYTE:       f = "B"
  */
-  __pyx_tuple__73 = PyTuple_Pack(1, __pyx_kp_u_Non_native_byte_order_not_suppor); if (unlikely(!__pyx_tuple__73)) __PYX_ERR(1, 259, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__73);
-  __Pyx_GIVEREF(__pyx_tuple__73);
+  __pyx_tuple__74 = PyTuple_Pack(1, __pyx_kp_u_Non_native_byte_order_not_suppor); if (unlikely(!__pyx_tuple__74)) __PYX_ERR(1, 259, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__74);
+  __Pyx_GIVEREF(__pyx_tuple__74);
 
   /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":799
  * 
@@ -41731,9 +43868,9 @@ static int __Pyx_InitCachedConstants(void) {
  * 
  *         if ((child.byteorder == c'>' and little_endian) or
  */
-  __pyx_tuple__74 = PyTuple_Pack(1, __pyx_kp_u_Format_string_allocated_too_shor); if (unlikely(!__pyx_tuple__74)) __PYX_ERR(1, 799, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__74);
-  __Pyx_GIVEREF(__pyx_tuple__74);
+  __pyx_tuple__75 = PyTuple_Pack(1, __pyx_kp_u_Format_string_allocated_too_shor); if (unlikely(!__pyx_tuple__75)) __PYX_ERR(1, 799, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__75);
+  __Pyx_GIVEREF(__pyx_tuple__75);
 
   /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":803
  *         if ((child.byteorder == c'>' and little_endian) or
@@ -41742,9 +43879,9 @@ static int __Pyx_InitCachedConstants(void) {
  *             # One could encode it in the format string and have Cython
  *             # complain instead, BUT: < and > in format strings also imply
  */
-  __pyx_tuple__75 = PyTuple_Pack(1, __pyx_kp_u_Non_native_byte_order_not_suppor); if (unlikely(!__pyx_tuple__75)) __PYX_ERR(1, 803, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__75);
-  __Pyx_GIVEREF(__pyx_tuple__75);
+  __pyx_tuple__76 = PyTuple_Pack(1, __pyx_kp_u_Non_native_byte_order_not_suppor); if (unlikely(!__pyx_tuple__76)) __PYX_ERR(1, 803, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__76);
+  __Pyx_GIVEREF(__pyx_tuple__76);
 
   /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":823
  *             t = child.type_num
@@ -41753,45 +43890,76 @@ static int __Pyx_InitCachedConstants(void) {
  * 
  *             # Until ticket #99 is fixed, use integers to avoid warnings
  */
-  __pyx_tuple__76 = PyTuple_Pack(1, __pyx_kp_u_Format_string_allocated_too_shor_2); if (unlikely(!__pyx_tuple__76)) __PYX_ERR(1, 823, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__76);
-  __Pyx_GIVEREF(__pyx_tuple__76);
+  __pyx_tuple__77 = PyTuple_Pack(1, __pyx_kp_u_Format_string_allocated_too_shor_2); if (unlikely(!__pyx_tuple__77)) __PYX_ERR(1, 823, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__77);
+  __Pyx_GIVEREF(__pyx_tuple__77);
 
-  /* "adios_mpi.pyx":58
+  /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":989
+ *         _import_array()
+ *     except Exception:
+ *         raise ImportError("numpy.core.multiarray failed to import")             # <<<<<<<<<<<<<<
+ * 
+ * cdef inline int import_umath() except -1:
+ */
+  __pyx_tuple__78 = PyTuple_Pack(1, __pyx_kp_s_numpy_core_multiarray_failed_to); if (unlikely(!__pyx_tuple__78)) __PYX_ERR(1, 989, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__78);
+  __Pyx_GIVEREF(__pyx_tuple__78);
+
+  /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":995
+ *         _import_umath()
+ *     except Exception:
+ *         raise ImportError("numpy.core.umath failed to import")             # <<<<<<<<<<<<<<
+ * 
+ * cdef inline int import_ufunc() except -1:
+ */
+  __pyx_tuple__79 = PyTuple_Pack(1, __pyx_kp_s_numpy_core_umath_failed_to_impor); if (unlikely(!__pyx_tuple__79)) __PYX_ERR(1, 995, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__79);
+  __Pyx_GIVEREF(__pyx_tuple__79);
+
+  /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":1001
+ *         _import_umath()
+ *     except Exception:
+ *         raise ImportError("numpy.core.umath failed to import")             # <<<<<<<<<<<<<<
+ */
+  __pyx_tuple__80 = PyTuple_Pack(1, __pyx_kp_s_numpy_core_umath_failed_to_impor); if (unlikely(!__pyx_tuple__80)) __PYX_ERR(1, 1001, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__80);
+  __Pyx_GIVEREF(__pyx_tuple__80);
+
+  /* "adios_mpi.pyx":60
  *         return x.encode()
  * 
  * def normalize_key(keys):             # <<<<<<<<<<<<<<
  *     if not isinstance(keys, list):
  *         keys = [keys,]
  */
-  __pyx_tuple__78 = PyTuple_Pack(3, __pyx_n_s_keys, __pyx_n_s_l, __pyx_n_s_key); if (unlikely(!__pyx_tuple__78)) __PYX_ERR(0, 58, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__78);
-  __Pyx_GIVEREF(__pyx_tuple__78);
-  __pyx_codeobj__79 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__78, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_jyc_project_adios_devel_w, __pyx_n_s_normalize_key, 58, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__79)) __PYX_ERR(0, 58, __pyx_L1_error)
+  __pyx_tuple__82 = PyTuple_Pack(3, __pyx_n_s_keys, __pyx_n_s_l, __pyx_n_s_key); if (unlikely(!__pyx_tuple__82)) __PYX_ERR(0, 60, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__82);
+  __Pyx_GIVEREF(__pyx_tuple__82);
+  __pyx_codeobj__83 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__82, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_jyc_project_adios_devel_w, __pyx_n_s_normalize_key, 60, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__83)) __PYX_ERR(0, 60, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":2291
+  /* "adios_mpi.pyx":2317
  * ## ====================
  * 
  * def readvar(fname, varname):             # <<<<<<<<<<<<<<
  *     """ Retrieve a variable value from an Adios file.
  * 
  */
-  __pyx_tuple__80 = PyTuple_Pack(4, __pyx_n_s_fname, __pyx_n_s_varname, __pyx_n_s_f, __pyx_n_s_v); if (unlikely(!__pyx_tuple__80)) __PYX_ERR(0, 2291, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__80);
-  __Pyx_GIVEREF(__pyx_tuple__80);
-  __pyx_codeobj__81 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__80, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_jyc_project_adios_devel_w, __pyx_n_s_readvar_2, 2291, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__81)) __PYX_ERR(0, 2291, __pyx_L1_error)
+  __pyx_tuple__84 = PyTuple_Pack(4, __pyx_n_s_fname, __pyx_n_s_varname, __pyx_n_s_f, __pyx_n_s_v); if (unlikely(!__pyx_tuple__84)) __PYX_ERR(0, 2317, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__84);
+  __Pyx_GIVEREF(__pyx_tuple__84);
+  __pyx_codeobj__85 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__84, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_jyc_project_adios_devel_w, __pyx_n_s_readvar_2, 2317, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__85)) __PYX_ERR(0, 2317, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":2305
+  /* "adios_mpi.pyx":2331
  *     return v.read(from_steps=0, nsteps=v.nsteps)
  * 
  * def bpls(fname):             # <<<<<<<<<<<<<<
  *     """ Return meta data of an Adios file as a Python dictionary object.
  * 
  */
-  __pyx_tuple__82 = PyTuple_Pack(3, __pyx_n_s_fname, __pyx_n_s_f, __pyx_n_s_k); if (unlikely(!__pyx_tuple__82)) __PYX_ERR(0, 2305, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__82);
-  __Pyx_GIVEREF(__pyx_tuple__82);
-  __pyx_codeobj__83 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__82, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_jyc_project_adios_devel_w, __pyx_n_s_bpls, 2305, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__83)) __PYX_ERR(0, 2305, __pyx_L1_error)
+  __pyx_tuple__86 = PyTuple_Pack(3, __pyx_n_s_fname, __pyx_n_s_f, __pyx_n_s_k); if (unlikely(!__pyx_tuple__86)) __PYX_ERR(0, 2331, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__86);
+  __Pyx_GIVEREF(__pyx_tuple__86);
+  __pyx_codeobj__87 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__86, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_jyc_project_adios_devel_w, __pyx_n_s_bpls, 2331, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__87)) __PYX_ERR(0, 2331, __pyx_L1_error)
   __Pyx_RefNannyFinishContext();
   return 0;
   __pyx_L1_error:;
@@ -41913,9 +44081,9 @@ PyMODINIT_FUNC PyInit_adios_mpi(void)
   /*--- Function export code ---*/
   /*--- Type init code ---*/
   __pyx_type_9adios_mpi_softdict.tp_base = (&PyDict_Type);
-  if (PyType_Ready(&__pyx_type_9adios_mpi_softdict) < 0) __PYX_ERR(0, 889, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_9adios_mpi_softdict) < 0) __PYX_ERR(0, 897, __pyx_L1_error)
   __pyx_type_9adios_mpi_softdict.tp_print = 0;
-  if (PyObject_SetAttrString(__pyx_m, "softdict", (PyObject *)&__pyx_type_9adios_mpi_softdict) < 0) __PYX_ERR(0, 889, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "softdict", (PyObject *)&__pyx_type_9adios_mpi_softdict) < 0) __PYX_ERR(0, 897, __pyx_L1_error)
   __pyx_ptype_9adios_mpi_softdict = &__pyx_type_9adios_mpi_softdict;
   __pyx_vtabptr_9adios_mpi_file = &__pyx_vtable_9adios_mpi_file;
   __pyx_vtable_9adios_mpi_file.close = (PyObject *(*)(struct __pyx_obj_9adios_mpi_file *, int __pyx_skip_dispatch))__pyx_f_9adios_mpi_4file_close;
@@ -41923,11 +44091,11 @@ PyMODINIT_FUNC PyInit_adios_mpi(void)
   __pyx_vtable_9adios_mpi_file.release_step = (PyObject *(*)(struct __pyx_obj_9adios_mpi_file *, int __pyx_skip_dispatch))__pyx_f_9adios_mpi_4file_release_step;
   __pyx_vtable_9adios_mpi_file.advance = (PyObject *(*)(struct __pyx_obj_9adios_mpi_file *, int __pyx_skip_dispatch, struct __pyx_opt_args_9adios_mpi_4file_advance *__pyx_optional_args))__pyx_f_9adios_mpi_4file_advance;
   __pyx_type_9adios_mpi_file.tp_base = (&PyDict_Type);
-  if (PyType_Ready(&__pyx_type_9adios_mpi_file) < 0) __PYX_ERR(0, 913, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_9adios_mpi_file) < 0) __PYX_ERR(0, 921, __pyx_L1_error)
   __pyx_type_9adios_mpi_file.tp_print = 0;
   #if CYTHON_COMPILING_IN_CPYTHON
   {
-    PyObject *wrapper = PyObject_GetAttrString((PyObject *)&__pyx_type_9adios_mpi_file, "__getitem__"); if (unlikely(!wrapper)) __PYX_ERR(0, 913, __pyx_L1_error)
+    PyObject *wrapper = PyObject_GetAttrString((PyObject *)&__pyx_type_9adios_mpi_file, "__getitem__"); if (unlikely(!wrapper)) __PYX_ERR(0, 921, __pyx_L1_error)
     if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
       __pyx_wrapperbase_9adios_mpi_4file_16__getitem__ = *((PyWrapperDescrObject *)wrapper)->d_base;
       __pyx_wrapperbase_9adios_mpi_4file_16__getitem__.doc = __pyx_doc_9adios_mpi_4file_16__getitem__;
@@ -41937,7 +44105,7 @@ PyMODINIT_FUNC PyInit_adios_mpi(void)
   #endif
   #if CYTHON_COMPILING_IN_CPYTHON
   {
-    PyObject *wrapper = PyObject_GetAttrString((PyObject *)&__pyx_type_9adios_mpi_file, "__repr__"); if (unlikely(!wrapper)) __PYX_ERR(0, 913, __pyx_L1_error)
+    PyObject *wrapper = PyObject_GetAttrString((PyObject *)&__pyx_type_9adios_mpi_file, "__repr__"); if (unlikely(!wrapper)) __PYX_ERR(0, 921, __pyx_L1_error)
     if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
       __pyx_wrapperbase_9adios_mpi_4file_18__repr__ = *((PyWrapperDescrObject *)wrapper)->d_base;
       __pyx_wrapperbase_9adios_mpi_4file_18__repr__.doc = __pyx_doc_9adios_mpi_4file_18__repr__;
@@ -41945,12 +44113,12 @@ PyMODINIT_FUNC PyInit_adios_mpi(void)
     }
   }
   #endif
-  if (__Pyx_SetVtable(__pyx_type_9adios_mpi_file.tp_dict, __pyx_vtabptr_9adios_mpi_file) < 0) __PYX_ERR(0, 913, __pyx_L1_error)
-  if (PyObject_SetAttrString(__pyx_m, "file", (PyObject *)&__pyx_type_9adios_mpi_file) < 0) __PYX_ERR(0, 913, __pyx_L1_error)
+  if (__Pyx_SetVtable(__pyx_type_9adios_mpi_file.tp_dict, __pyx_vtabptr_9adios_mpi_file) < 0) __PYX_ERR(0, 921, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "file", (PyObject *)&__pyx_type_9adios_mpi_file) < 0) __PYX_ERR(0, 921, __pyx_L1_error)
   __pyx_ptype_9adios_mpi_file = &__pyx_type_9adios_mpi_file;
-  if (PyType_Ready(&__pyx_type_9adios_mpi_blockinfo) < 0) __PYX_ERR(0, 1185, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_9adios_mpi_blockinfo) < 0) __PYX_ERR(0, 1193, __pyx_L1_error)
   __pyx_type_9adios_mpi_blockinfo.tp_print = 0;
-  if (PyObject_SetAttrString(__pyx_m, "blockinfo", (PyObject *)&__pyx_type_9adios_mpi_blockinfo) < 0) __PYX_ERR(0, 1185, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "blockinfo", (PyObject *)&__pyx_type_9adios_mpi_blockinfo) < 0) __PYX_ERR(0, 1193, __pyx_L1_error)
   __pyx_ptype_9adios_mpi_blockinfo = &__pyx_type_9adios_mpi_blockinfo;
   __pyx_vtabptr_9adios_mpi_var = &__pyx_vtable_9adios_mpi_var;
   __pyx_vtable_9adios_mpi_var.close = (PyObject *(*)(struct __pyx_obj_9adios_mpi_var *, int __pyx_skip_dispatch))__pyx_f_9adios_mpi_3var_close;
@@ -41960,21 +44128,21 @@ PyMODINIT_FUNC PyInit_adios_mpi(void)
   __pyx_vtable_9adios_mpi_var.read = (PyObject *(*)(struct __pyx_obj_9adios_mpi_var *, int __pyx_skip_dispatch, struct __pyx_opt_args_9adios_mpi_3var_read *__pyx_optional_args))__pyx_f_9adios_mpi_3var_read;
   __pyx_vtable_9adios_mpi_var.printself = (PyObject *(*)(struct __pyx_obj_9adios_mpi_var *, int __pyx_skip_dispatch))__pyx_f_9adios_mpi_3var_printself;
   __pyx_type_9adios_mpi_var.tp_base = (&PyDict_Type);
-  if (PyType_Ready(&__pyx_type_9adios_mpi_var) < 0) __PYX_ERR(0, 1220, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_9adios_mpi_var) < 0) __PYX_ERR(0, 1228, __pyx_L1_error)
   __pyx_type_9adios_mpi_var.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_9adios_mpi_var.tp_dict, __pyx_vtabptr_9adios_mpi_var) < 0) __PYX_ERR(0, 1220, __pyx_L1_error)
-  if (PyObject_SetAttrString(__pyx_m, "var", (PyObject *)&__pyx_type_9adios_mpi_var) < 0) __PYX_ERR(0, 1220, __pyx_L1_error)
+  if (__Pyx_SetVtable(__pyx_type_9adios_mpi_var.tp_dict, __pyx_vtabptr_9adios_mpi_var) < 0) __PYX_ERR(0, 1228, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "var", (PyObject *)&__pyx_type_9adios_mpi_var) < 0) __PYX_ERR(0, 1228, __pyx_L1_error)
   __pyx_ptype_9adios_mpi_var = &__pyx_type_9adios_mpi_var;
-  if (PyType_Ready(&__pyx_type_9adios_mpi_attr) < 0) __PYX_ERR(0, 1685, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_9adios_mpi_attr) < 0) __PYX_ERR(0, 1693, __pyx_L1_error)
   __pyx_type_9adios_mpi_attr.tp_print = 0;
-  if (PyObject_SetAttrString(__pyx_m, "attr", (PyObject *)&__pyx_type_9adios_mpi_attr) < 0) __PYX_ERR(0, 1685, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "attr", (PyObject *)&__pyx_type_9adios_mpi_attr) < 0) __PYX_ERR(0, 1693, __pyx_L1_error)
   __pyx_ptype_9adios_mpi_attr = &__pyx_type_9adios_mpi_attr;
   __pyx_type_9adios_mpi_group.tp_base = (&PyDict_Type);
-  if (PyType_Ready(&__pyx_type_9adios_mpi_group) < 0) __PYX_ERR(0, 1771, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_9adios_mpi_group) < 0) __PYX_ERR(0, 1779, __pyx_L1_error)
   __pyx_type_9adios_mpi_group.tp_print = 0;
   #if CYTHON_COMPILING_IN_CPYTHON
   {
-    PyObject *wrapper = PyObject_GetAttrString((PyObject *)&__pyx_type_9adios_mpi_group, "__getitem__"); if (unlikely(!wrapper)) __PYX_ERR(0, 1771, __pyx_L1_error)
+    PyObject *wrapper = PyObject_GetAttrString((PyObject *)&__pyx_type_9adios_mpi_group, "__getitem__"); if (unlikely(!wrapper)) __PYX_ERR(0, 1779, __pyx_L1_error)
     if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
       __pyx_wrapperbase_9adios_mpi_5group_2__getitem__ = *((PyWrapperDescrObject *)wrapper)->d_base;
       __pyx_wrapperbase_9adios_mpi_5group_2__getitem__.doc = __pyx_doc_9adios_mpi_5group_2__getitem__;
@@ -41984,7 +44152,7 @@ PyMODINIT_FUNC PyInit_adios_mpi(void)
   #endif
   #if CYTHON_COMPILING_IN_CPYTHON
   {
-    PyObject *wrapper = PyObject_GetAttrString((PyObject *)&__pyx_type_9adios_mpi_group, "__repr__"); if (unlikely(!wrapper)) __PYX_ERR(0, 1771, __pyx_L1_error)
+    PyObject *wrapper = PyObject_GetAttrString((PyObject *)&__pyx_type_9adios_mpi_group, "__repr__"); if (unlikely(!wrapper)) __PYX_ERR(0, 1779, __pyx_L1_error)
     if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
       __pyx_wrapperbase_9adios_mpi_5group_4__repr__ = *((PyWrapperDescrObject *)wrapper)->d_base;
       __pyx_wrapperbase_9adios_mpi_5group_4__repr__.doc = __pyx_doc_9adios_mpi_5group_4__repr__;
@@ -41992,24 +44160,24 @@ PyMODINIT_FUNC PyInit_adios_mpi(void)
     }
   }
   #endif
-  if (PyObject_SetAttrString(__pyx_m, "group", (PyObject *)&__pyx_type_9adios_mpi_group) < 0) __PYX_ERR(0, 1771, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "group", (PyObject *)&__pyx_type_9adios_mpi_group) < 0) __PYX_ERR(0, 1779, __pyx_L1_error)
   __pyx_ptype_9adios_mpi_group = &__pyx_type_9adios_mpi_group;
   __pyx_type_9adios_mpi_smartdict.tp_base = (&PyDict_Type);
-  if (PyType_Ready(&__pyx_type_9adios_mpi_smartdict) < 0) __PYX_ERR(0, 1883, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_9adios_mpi_smartdict) < 0) __PYX_ERR(0, 1891, __pyx_L1_error)
   __pyx_type_9adios_mpi_smartdict.tp_print = 0;
-  if (PyObject_SetAttrString(__pyx_m, "smartdict", (PyObject *)&__pyx_type_9adios_mpi_smartdict) < 0) __PYX_ERR(0, 1883, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "smartdict", (PyObject *)&__pyx_type_9adios_mpi_smartdict) < 0) __PYX_ERR(0, 1891, __pyx_L1_error)
   __pyx_ptype_9adios_mpi_smartdict = &__pyx_type_9adios_mpi_smartdict;
-  if (PyType_Ready(&__pyx_type_9adios_mpi_writer) < 0) __PYX_ERR(0, 1895, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_9adios_mpi_writer) < 0) __PYX_ERR(0, 1903, __pyx_L1_error)
   __pyx_type_9adios_mpi_writer.tp_print = 0;
-  if (PyObject_SetAttrString(__pyx_m, "writer", (PyObject *)&__pyx_type_9adios_mpi_writer) < 0) __PYX_ERR(0, 1895, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "writer", (PyObject *)&__pyx_type_9adios_mpi_writer) < 0) __PYX_ERR(0, 1903, __pyx_L1_error)
   __pyx_ptype_9adios_mpi_writer = &__pyx_type_9adios_mpi_writer;
-  if (PyType_Ready(&__pyx_type_9adios_mpi_attrinfo) < 0) __PYX_ERR(0, 2149, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_9adios_mpi_attrinfo) < 0) __PYX_ERR(0, 2170, __pyx_L1_error)
   __pyx_type_9adios_mpi_attrinfo.tp_print = 0;
-  if (PyObject_SetAttrString(__pyx_m, "attrinfo", (PyObject *)&__pyx_type_9adios_mpi_attrinfo) < 0) __PYX_ERR(0, 2149, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "attrinfo", (PyObject *)&__pyx_type_9adios_mpi_attrinfo) < 0) __PYX_ERR(0, 2170, __pyx_L1_error)
   __pyx_ptype_9adios_mpi_attrinfo = &__pyx_type_9adios_mpi_attrinfo;
-  if (PyType_Ready(&__pyx_type_9adios_mpi_varinfo) < 0) __PYX_ERR(0, 2202, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_9adios_mpi_varinfo) < 0) __PYX_ERR(0, 2223, __pyx_L1_error)
   __pyx_type_9adios_mpi_varinfo.tp_print = 0;
-  if (PyObject_SetAttrString(__pyx_m, "varinfo", (PyObject *)&__pyx_type_9adios_mpi_varinfo) < 0) __PYX_ERR(0, 2202, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "varinfo", (PyObject *)&__pyx_type_9adios_mpi_varinfo) < 0) __PYX_ERR(0, 2223, __pyx_L1_error)
   __pyx_ptype_9adios_mpi_varinfo = &__pyx_type_9adios_mpi_varinfo;
   /*--- Type import code ---*/
   __pyx_ptype_7cpython_4type_type = __Pyx_ImportType(__Pyx_BUILTIN_MODULE_NAME, "type", 
@@ -42071,549 +44239,632 @@ PyMODINIT_FUNC PyInit_adios_mpi(void)
  */
   __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 16, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_INCREF(__pyx_n_s__77);
-  __Pyx_GIVEREF(__pyx_n_s__77);
-  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s__77);
+  __Pyx_INCREF(__pyx_n_s__81);
+  __Pyx_GIVEREF(__pyx_n_s__81);
+  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s__81);
   __pyx_t_2 = __Pyx_Import(__pyx_n_s_mpi4py_MPI, __pyx_t_1, -1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 16, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   if (PyDict_SetItem(__pyx_d, __pyx_n_s_MPI, __pyx_t_2) < 0) __PYX_ERR(0, 16, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "adios_mpi.pyx":28
+  /* "adios_mpi.pyx":22
+ * cimport cython
+ * 
+ * import tempfile             # <<<<<<<<<<<<<<
+ * 
+ * from libc.stdlib cimport malloc, free
+ */
+  __pyx_t_2 = __Pyx_Import(__pyx_n_s_tempfile, 0, -1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 22, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_tempfile, __pyx_t_2) < 0) __PYX_ERR(0, 22, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "adios_mpi.pyx":30
  * from cpython.ref cimport PyObject
  * 
  * import os             # <<<<<<<<<<<<<<
  * from ._hl import selections as sel
  * 
  */
-  __pyx_t_2 = __Pyx_Import(__pyx_n_s_os, 0, -1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 28, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_Import(__pyx_n_s_os, 0, -1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 30, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_os, __pyx_t_2) < 0) __PYX_ERR(0, 28, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_os, __pyx_t_2) < 0) __PYX_ERR(0, 30, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "adios_mpi.pyx":29
+  /* "adios_mpi.pyx":31
  * 
  * import os
  * from ._hl import selections as sel             # <<<<<<<<<<<<<<
  * 
  * ## To convert a string to bytes: "str".encode()
  */
-  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 29, __pyx_L1_error)
+  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 31, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_selections);
   __Pyx_GIVEREF(__pyx_n_s_selections);
   PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_selections);
-  __pyx_t_1 = __Pyx_Import(__pyx_n_s_hl, __pyx_t_2, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 29, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_Import(__pyx_n_s_hl, __pyx_t_2, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 31, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_selections); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 29, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_selections); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 31, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_sel, __pyx_t_2) < 0) __PYX_ERR(0, 29, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_sel, __pyx_t_2) < 0) __PYX_ERR(0, 31, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":58
+  /* "adios_mpi.pyx":60
  *         return x.encode()
  * 
  * def normalize_key(keys):             # <<<<<<<<<<<<<<
  *     if not isinstance(keys, list):
  *         keys = [keys,]
  */
-  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_9adios_mpi_7normalize_key, NULL, __pyx_n_s_adios_mpi); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 58, __pyx_L1_error)
+  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_9adios_mpi_7normalize_key, NULL, __pyx_n_s_adios_mpi); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 60, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_normalize_key, __pyx_t_1) < 0) __PYX_ERR(0, 58, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_normalize_key, __pyx_t_1) < 0) __PYX_ERR(0, 60, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":391
+  /* "adios_mpi.pyx":393
  * ## ====================
  * 
  * class DATATYPE:             # <<<<<<<<<<<<<<
  *     unknown = -1
  *     byte = 0
  */
-  __pyx_t_1 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_DATATYPE, __pyx_n_s_DATATYPE, (PyObject *) NULL, __pyx_n_s_adios_mpi, (PyObject *) NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 391, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_DATATYPE, __pyx_n_s_DATATYPE, (PyObject *) NULL, __pyx_n_s_adios_mpi, (PyObject *) NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 393, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
 
-  /* "adios_mpi.pyx":392
+  /* "adios_mpi.pyx":394
  * 
  * class DATATYPE:
  *     unknown = -1             # <<<<<<<<<<<<<<
  *     byte = 0
  *     short = 1
  */
-  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_unknown, __pyx_int_neg_1) < 0) __PYX_ERR(0, 392, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_unknown, __pyx_int_neg_1) < 0) __PYX_ERR(0, 394, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":393
+  /* "adios_mpi.pyx":395
  * class DATATYPE:
  *     unknown = -1
  *     byte = 0             # <<<<<<<<<<<<<<
  *     short = 1
  *     integer = 2
  */
-  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_byte, __pyx_int_0) < 0) __PYX_ERR(0, 393, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_byte, __pyx_int_0) < 0) __PYX_ERR(0, 395, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":394
+  /* "adios_mpi.pyx":396
  *     unknown = -1
  *     byte = 0
  *     short = 1             # <<<<<<<<<<<<<<
  *     integer = 2
  *     long = 4
  */
-  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_short, __pyx_int_1) < 0) __PYX_ERR(0, 394, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_short, __pyx_int_1) < 0) __PYX_ERR(0, 396, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":395
+  /* "adios_mpi.pyx":397
  *     byte = 0
  *     short = 1
  *     integer = 2             # <<<<<<<<<<<<<<
  *     long = 4
  *     unsigned_byte = 50
  */
-  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_integer, __pyx_int_2) < 0) __PYX_ERR(0, 395, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_integer, __pyx_int_2) < 0) __PYX_ERR(0, 397, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":396
+  /* "adios_mpi.pyx":398
  *     short = 1
  *     integer = 2
  *     long = 4             # <<<<<<<<<<<<<<
  *     unsigned_byte = 50
  *     unsigned_short = 51
  */
-  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_long, __pyx_int_4) < 0) __PYX_ERR(0, 396, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_long, __pyx_int_4) < 0) __PYX_ERR(0, 398, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":397
+  /* "adios_mpi.pyx":399
  *     integer = 2
  *     long = 4
  *     unsigned_byte = 50             # <<<<<<<<<<<<<<
  *     unsigned_short = 51
  *     unsigned_integer = 52
  */
-  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_unsigned_byte, __pyx_int_50) < 0) __PYX_ERR(0, 397, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_unsigned_byte, __pyx_int_50) < 0) __PYX_ERR(0, 399, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":398
+  /* "adios_mpi.pyx":400
  *     long = 4
  *     unsigned_byte = 50
  *     unsigned_short = 51             # <<<<<<<<<<<<<<
  *     unsigned_integer = 52
  *     unsigned_long = 54
  */
-  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_unsigned_short, __pyx_int_51) < 0) __PYX_ERR(0, 398, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_unsigned_short, __pyx_int_51) < 0) __PYX_ERR(0, 400, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":399
+  /* "adios_mpi.pyx":401
  *     unsigned_byte = 50
  *     unsigned_short = 51
  *     unsigned_integer = 52             # <<<<<<<<<<<<<<
  *     unsigned_long = 54
  *     real = 5
  */
-  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_unsigned_integer, __pyx_int_52) < 0) __PYX_ERR(0, 399, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_unsigned_integer, __pyx_int_52) < 0) __PYX_ERR(0, 401, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":400
+  /* "adios_mpi.pyx":402
  *     unsigned_short = 51
  *     unsigned_integer = 52
  *     unsigned_long = 54             # <<<<<<<<<<<<<<
  *     real = 5
  *     double = 6
  */
-  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_unsigned_long, __pyx_int_54) < 0) __PYX_ERR(0, 400, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_unsigned_long, __pyx_int_54) < 0) __PYX_ERR(0, 402, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":401
+  /* "adios_mpi.pyx":403
  *     unsigned_integer = 52
  *     unsigned_long = 54
  *     real = 5             # <<<<<<<<<<<<<<
  *     double = 6
  *     long_double = 7
  */
-  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_real, __pyx_int_5) < 0) __PYX_ERR(0, 401, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_real, __pyx_int_5) < 0) __PYX_ERR(0, 403, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":402
+  /* "adios_mpi.pyx":404
  *     unsigned_long = 54
  *     real = 5
  *     double = 6             # <<<<<<<<<<<<<<
  *     long_double = 7
  *     string = 9
  */
-  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_double, __pyx_int_6) < 0) __PYX_ERR(0, 402, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_double, __pyx_int_6) < 0) __PYX_ERR(0, 404, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":403
+  /* "adios_mpi.pyx":405
  *     real = 5
  *     double = 6
  *     long_double = 7             # <<<<<<<<<<<<<<
  *     string = 9
  *     complex = 10
  */
-  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_long_double, __pyx_int_7) < 0) __PYX_ERR(0, 403, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_long_double, __pyx_int_7) < 0) __PYX_ERR(0, 405, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":404
+  /* "adios_mpi.pyx":406
  *     double = 6
  *     long_double = 7
  *     string = 9             # <<<<<<<<<<<<<<
  *     complex = 10
  *     double_complex = 11
  */
-  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_string, __pyx_int_9) < 0) __PYX_ERR(0, 404, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_string, __pyx_int_9) < 0) __PYX_ERR(0, 406, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":405
+  /* "adios_mpi.pyx":407
  *     long_double = 7
  *     string = 9
  *     complex = 10             # <<<<<<<<<<<<<<
  *     double_complex = 11
  *     string_array = 12
  */
-  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_complex_2, __pyx_int_10) < 0) __PYX_ERR(0, 405, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_complex_2, __pyx_int_10) < 0) __PYX_ERR(0, 407, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":406
+  /* "adios_mpi.pyx":408
  *     string = 9
  *     complex = 10
  *     double_complex = 11             # <<<<<<<<<<<<<<
  *     string_array = 12
  * 
  */
-  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_double_complex, __pyx_int_11) < 0) __PYX_ERR(0, 406, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_double_complex, __pyx_int_11) < 0) __PYX_ERR(0, 408, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":407
+  /* "adios_mpi.pyx":409
  *     complex = 10
  *     double_complex = 11
  *     string_array = 12             # <<<<<<<<<<<<<<
  * 
  * class FLAG:
  */
-  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_string_array, __pyx_int_12) < 0) __PYX_ERR(0, 407, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_string_array, __pyx_int_12) < 0) __PYX_ERR(0, 409, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":391
+  /* "adios_mpi.pyx":393
  * ## ====================
  * 
  * class DATATYPE:             # <<<<<<<<<<<<<<
  *     unknown = -1
  *     byte = 0
  */
-  __pyx_t_2 = __Pyx_Py3ClassCreate(((PyObject*)&__Pyx_DefaultClassType), __pyx_n_s_DATATYPE, __pyx_empty_tuple, __pyx_t_1, NULL, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 391, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_Py3ClassCreate(((PyObject*)&__Pyx_DefaultClassType), __pyx_n_s_DATATYPE, __pyx_empty_tuple, __pyx_t_1, NULL, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 393, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DATATYPE, __pyx_t_2) < 0) __PYX_ERR(0, 391, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DATATYPE, __pyx_t_2) < 0) __PYX_ERR(0, 393, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":409
+  /* "adios_mpi.pyx":411
  *     string_array = 12
  * 
  * class FLAG:             # <<<<<<<<<<<<<<
  *     UNKNOWN = 0
  *     YES = 1
  */
-  __pyx_t_1 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_FLAG, __pyx_n_s_FLAG, (PyObject *) NULL, __pyx_n_s_adios_mpi, (PyObject *) NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 409, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_FLAG, __pyx_n_s_FLAG, (PyObject *) NULL, __pyx_n_s_adios_mpi, (PyObject *) NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 411, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
 
-  /* "adios_mpi.pyx":410
+  /* "adios_mpi.pyx":412
  * 
  * class FLAG:
  *     UNKNOWN = 0             # <<<<<<<<<<<<<<
  *     YES = 1
  *     NO = 2
  */
-  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_UNKNOWN, __pyx_int_0) < 0) __PYX_ERR(0, 410, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_UNKNOWN, __pyx_int_0) < 0) __PYX_ERR(0, 412, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":411
+  /* "adios_mpi.pyx":413
  * class FLAG:
  *     UNKNOWN = 0
  *     YES = 1             # <<<<<<<<<<<<<<
  *     NO = 2
  * 
  */
-  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_YES, __pyx_int_1) < 0) __PYX_ERR(0, 411, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_YES, __pyx_int_1) < 0) __PYX_ERR(0, 413, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":412
+  /* "adios_mpi.pyx":414
  *     UNKNOWN = 0
  *     YES = 1
  *     NO = 2             # <<<<<<<<<<<<<<
  * 
  * class BUFFER_ALLOC_WHEN:
  */
-  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_NO, __pyx_int_2) < 0) __PYX_ERR(0, 412, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_NO, __pyx_int_2) < 0) __PYX_ERR(0, 414, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":409
+  /* "adios_mpi.pyx":411
  *     string_array = 12
  * 
  * class FLAG:             # <<<<<<<<<<<<<<
  *     UNKNOWN = 0
  *     YES = 1
  */
-  __pyx_t_2 = __Pyx_Py3ClassCreate(((PyObject*)&__Pyx_DefaultClassType), __pyx_n_s_FLAG, __pyx_empty_tuple, __pyx_t_1, NULL, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 409, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_Py3ClassCreate(((PyObject*)&__Pyx_DefaultClassType), __pyx_n_s_FLAG, __pyx_empty_tuple, __pyx_t_1, NULL, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 411, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_FLAG, __pyx_t_2) < 0) __PYX_ERR(0, 409, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_FLAG, __pyx_t_2) < 0) __PYX_ERR(0, 411, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":414
+  /* "adios_mpi.pyx":416
  *     NO = 2
  * 
  * class BUFFER_ALLOC_WHEN:             # <<<<<<<<<<<<<<
  *     UNKNOWN = 0
  *     NOW = 1
  */
-  __pyx_t_1 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_BUFFER_ALLOC_WHEN, __pyx_n_s_BUFFER_ALLOC_WHEN, (PyObject *) NULL, __pyx_n_s_adios_mpi, (PyObject *) NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 414, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_BUFFER_ALLOC_WHEN, __pyx_n_s_BUFFER_ALLOC_WHEN, (PyObject *) NULL, __pyx_n_s_adios_mpi, (PyObject *) NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 416, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
 
-  /* "adios_mpi.pyx":415
+  /* "adios_mpi.pyx":417
  * 
  * class BUFFER_ALLOC_WHEN:
  *     UNKNOWN = 0             # <<<<<<<<<<<<<<
  *     NOW = 1
  *     LATER = 2
  */
-  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_UNKNOWN, __pyx_int_0) < 0) __PYX_ERR(0, 415, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_UNKNOWN, __pyx_int_0) < 0) __PYX_ERR(0, 417, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":416
+  /* "adios_mpi.pyx":418
  * class BUFFER_ALLOC_WHEN:
  *     UNKNOWN = 0
  *     NOW = 1             # <<<<<<<<<<<<<<
  *     LATER = 2
  * 
  */
-  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_NOW, __pyx_int_1) < 0) __PYX_ERR(0, 416, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_NOW, __pyx_int_1) < 0) __PYX_ERR(0, 418, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":417
+  /* "adios_mpi.pyx":419
  *     UNKNOWN = 0
  *     NOW = 1
  *     LATER = 2             # <<<<<<<<<<<<<<
  * 
  * class READ_METHOD:
  */
-  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_LATER, __pyx_int_2) < 0) __PYX_ERR(0, 417, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_LATER, __pyx_int_2) < 0) __PYX_ERR(0, 419, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":414
+  /* "adios_mpi.pyx":416
  *     NO = 2
  * 
  * class BUFFER_ALLOC_WHEN:             # <<<<<<<<<<<<<<
  *     UNKNOWN = 0
  *     NOW = 1
  */
-  __pyx_t_2 = __Pyx_Py3ClassCreate(((PyObject*)&__Pyx_DefaultClassType), __pyx_n_s_BUFFER_ALLOC_WHEN, __pyx_empty_tuple, __pyx_t_1, NULL, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 414, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_Py3ClassCreate(((PyObject*)&__Pyx_DefaultClassType), __pyx_n_s_BUFFER_ALLOC_WHEN, __pyx_empty_tuple, __pyx_t_1, NULL, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 416, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_BUFFER_ALLOC_WHEN, __pyx_t_2) < 0) __PYX_ERR(0, 414, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_BUFFER_ALLOC_WHEN, __pyx_t_2) < 0) __PYX_ERR(0, 416, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":419
+  /* "adios_mpi.pyx":421
  *     LATER = 2
  * 
  * class READ_METHOD:             # <<<<<<<<<<<<<<
  *     BP            = 0
  *     BP_AGGREGATE  = 1
  */
-  __pyx_t_1 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_READ_METHOD, __pyx_n_s_READ_METHOD, (PyObject *) NULL, __pyx_n_s_adios_mpi, (PyObject *) NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 419, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_READ_METHOD, __pyx_n_s_READ_METHOD, (PyObject *) NULL, __pyx_n_s_adios_mpi, (PyObject *) NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 421, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
 
-  /* "adios_mpi.pyx":420
+  /* "adios_mpi.pyx":422
  * 
  * class READ_METHOD:
  *     BP            = 0             # <<<<<<<<<<<<<<
  *     BP_AGGREGATE  = 1
  *     DATASPACES    = 3
  */
-  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_BP, __pyx_int_0) < 0) __PYX_ERR(0, 420, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_BP, __pyx_int_0) < 0) __PYX_ERR(0, 422, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":421
+  /* "adios_mpi.pyx":423
  * class READ_METHOD:
  *     BP            = 0
  *     BP_AGGREGATE  = 1             # <<<<<<<<<<<<<<
  *     DATASPACES    = 3
  *     DIMES         = 4
  */
-  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_BP_AGGREGATE, __pyx_int_1) < 0) __PYX_ERR(0, 421, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_BP_AGGREGATE, __pyx_int_1) < 0) __PYX_ERR(0, 423, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":422
+  /* "adios_mpi.pyx":424
  *     BP            = 0
  *     BP_AGGREGATE  = 1
  *     DATASPACES    = 3             # <<<<<<<<<<<<<<
  *     DIMES         = 4
  *     FLEXPATH      = 5
  */
-  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_DATASPACES, __pyx_int_3) < 0) __PYX_ERR(0, 422, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_DATASPACES, __pyx_int_3) < 0) __PYX_ERR(0, 424, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":423
+  /* "adios_mpi.pyx":425
  *     BP_AGGREGATE  = 1
  *     DATASPACES    = 3
  *     DIMES         = 4             # <<<<<<<<<<<<<<
  *     FLEXPATH      = 5
  *     ICEE          = 6
  */
-  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_DIMES, __pyx_int_4) < 0) __PYX_ERR(0, 423, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_DIMES, __pyx_int_4) < 0) __PYX_ERR(0, 425, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":424
+  /* "adios_mpi.pyx":426
  *     DATASPACES    = 3
  *     DIMES         = 4
  *     FLEXPATH      = 5             # <<<<<<<<<<<<<<
  *     ICEE          = 6
  * 
  */
-  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_FLEXPATH, __pyx_int_5) < 0) __PYX_ERR(0, 424, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_FLEXPATH, __pyx_int_5) < 0) __PYX_ERR(0, 426, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":425
+  /* "adios_mpi.pyx":427
  *     DIMES         = 4
  *     FLEXPATH      = 5
  *     ICEE          = 6             # <<<<<<<<<<<<<<
  * 
  * class LOCKMODE:
  */
-  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_ICEE, __pyx_int_6) < 0) __PYX_ERR(0, 425, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_ICEE, __pyx_int_6) < 0) __PYX_ERR(0, 427, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":419
+  /* "adios_mpi.pyx":421
  *     LATER = 2
  * 
  * class READ_METHOD:             # <<<<<<<<<<<<<<
  *     BP            = 0
  *     BP_AGGREGATE  = 1
  */
-  __pyx_t_2 = __Pyx_Py3ClassCreate(((PyObject*)&__Pyx_DefaultClassType), __pyx_n_s_READ_METHOD, __pyx_empty_tuple, __pyx_t_1, NULL, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 419, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_Py3ClassCreate(((PyObject*)&__Pyx_DefaultClassType), __pyx_n_s_READ_METHOD, __pyx_empty_tuple, __pyx_t_1, NULL, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 421, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_READ_METHOD, __pyx_t_2) < 0) __PYX_ERR(0, 419, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_READ_METHOD, __pyx_t_2) < 0) __PYX_ERR(0, 421, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":427
+  /* "adios_mpi.pyx":429
  *     ICEE          = 6
  * 
  * class LOCKMODE:             # <<<<<<<<<<<<<<
  *     NONE = 0
  *     CURRENT = 1
  */
-  __pyx_t_1 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_LOCKMODE, __pyx_n_s_LOCKMODE, (PyObject *) NULL, __pyx_n_s_adios_mpi, (PyObject *) NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 427, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_LOCKMODE, __pyx_n_s_LOCKMODE, (PyObject *) NULL, __pyx_n_s_adios_mpi, (PyObject *) NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 429, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
 
-  /* "adios_mpi.pyx":428
+  /* "adios_mpi.pyx":430
  * 
  * class LOCKMODE:
  *     NONE = 0             # <<<<<<<<<<<<<<
  *     CURRENT = 1
  *     ALL =2
  */
-  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_NONE, __pyx_int_0) < 0) __PYX_ERR(0, 428, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_NONE, __pyx_int_0) < 0) __PYX_ERR(0, 430, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":429
+  /* "adios_mpi.pyx":431
  * class LOCKMODE:
  *     NONE = 0
  *     CURRENT = 1             # <<<<<<<<<<<<<<
  *     ALL =2
  * 
  */
-  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_CURRENT, __pyx_int_1) < 0) __PYX_ERR(0, 429, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_CURRENT, __pyx_int_1) < 0) __PYX_ERR(0, 431, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":430
+  /* "adios_mpi.pyx":432
  *     NONE = 0
  *     CURRENT = 1
  *     ALL =2             # <<<<<<<<<<<<<<
  * 
- * cpdef __parse_index(index, ndim):
+ * class STATISTICS:
  */
-  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_ALL, __pyx_int_2) < 0) __PYX_ERR(0, 430, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_ALL, __pyx_int_2) < 0) __PYX_ERR(0, 432, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":427
+  /* "adios_mpi.pyx":429
  *     ICEE          = 6
  * 
  * class LOCKMODE:             # <<<<<<<<<<<<<<
  *     NONE = 0
  *     CURRENT = 1
  */
-  __pyx_t_2 = __Pyx_Py3ClassCreate(((PyObject*)&__Pyx_DefaultClassType), __pyx_n_s_LOCKMODE, __pyx_empty_tuple, __pyx_t_1, NULL, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 427, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_Py3ClassCreate(((PyObject*)&__Pyx_DefaultClassType), __pyx_n_s_LOCKMODE, __pyx_empty_tuple, __pyx_t_1, NULL, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 429, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_LOCKMODE, __pyx_t_2) < 0) __PYX_ERR(0, 427, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_LOCKMODE, __pyx_t_2) < 0) __PYX_ERR(0, 429, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":464
+  /* "adios_mpi.pyx":434
+ *     ALL =2
+ * 
+ * class STATISTICS:             # <<<<<<<<<<<<<<
+ *     NONE = adios_stat_no
+ *     MINMAX = adios_stat_minmax
+ */
+  __pyx_t_1 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_STATISTICS, __pyx_n_s_STATISTICS, (PyObject *) NULL, __pyx_n_s_adios_mpi, (PyObject *) NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 434, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+
+  /* "adios_mpi.pyx":435
+ * 
+ * class STATISTICS:
+ *     NONE = adios_stat_no             # <<<<<<<<<<<<<<
+ *     MINMAX = adios_stat_minmax
+ *     FULL = adios_stat_full
+ */
+  __pyx_t_2 = __Pyx_PyInt_From_ADIOS_STATISTICS_FLAG(adios_stat_no); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 435, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_NONE, __pyx_t_2) < 0) __PYX_ERR(0, 435, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "adios_mpi.pyx":436
+ * class STATISTICS:
+ *     NONE = adios_stat_no
+ *     MINMAX = adios_stat_minmax             # <<<<<<<<<<<<<<
+ *     FULL = adios_stat_full
+ *     DEFAULT = adios_stat_default
+ */
+  __pyx_t_2 = __Pyx_PyInt_From_ADIOS_STATISTICS_FLAG(adios_stat_minmax); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 436, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_MINMAX, __pyx_t_2) < 0) __PYX_ERR(0, 436, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "adios_mpi.pyx":437
+ *     NONE = adios_stat_no
+ *     MINMAX = adios_stat_minmax
+ *     FULL = adios_stat_full             # <<<<<<<<<<<<<<
+ *     DEFAULT = adios_stat_default
+ * 
+ */
+  __pyx_t_2 = __Pyx_PyInt_From_ADIOS_STATISTICS_FLAG(adios_stat_full); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 437, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_FULL, __pyx_t_2) < 0) __PYX_ERR(0, 437, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "adios_mpi.pyx":438
+ *     MINMAX = adios_stat_minmax
+ *     FULL = adios_stat_full
+ *     DEFAULT = adios_stat_default             # <<<<<<<<<<<<<<
+ * 
+ * cpdef __parse_index(index, ndim):
+ */
+  __pyx_t_2 = __Pyx_PyInt_From_ADIOS_STATISTICS_FLAG(adios_stat_default); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 438, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_DEFAULT, __pyx_t_2) < 0) __PYX_ERR(0, 438, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "adios_mpi.pyx":434
+ *     ALL =2
+ * 
+ * class STATISTICS:             # <<<<<<<<<<<<<<
+ *     NONE = adios_stat_no
+ *     MINMAX = adios_stat_minmax
+ */
+  __pyx_t_2 = __Pyx_Py3ClassCreate(((PyObject*)&__Pyx_DefaultClassType), __pyx_n_s_STATISTICS, __pyx_empty_tuple, __pyx_t_1, NULL, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 434, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_STATISTICS, __pyx_t_2) < 0) __PYX_ERR(0, 434, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  /* "adios_mpi.pyx":472
  * cdef MPI.Comm read_init_comm
  * 
  * cpdef init(str config, MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
  *     global init_comm
  *     init_comm = comm.Clone()
  */
-  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_MPI); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 464, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_MPI); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 472, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_COMM_WORLD); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 464, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_COMM_WORLD); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 472, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_6mpi4py_3MPI_Comm))))) __PYX_ERR(0, 464, __pyx_L1_error)
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_6mpi4py_3MPI_Comm))))) __PYX_ERR(0, 472, __pyx_L1_error)
   __pyx_k__7 = ((struct PyMPICommObject *)__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_2);
   __pyx_t_2 = 0;
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_MPI); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 464, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_MPI); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 472, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_COMM_WORLD); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 464, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_COMM_WORLD); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 472, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_6mpi4py_3MPI_Comm))))) __PYX_ERR(0, 464, __pyx_L1_error)
+  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_6mpi4py_3MPI_Comm))))) __PYX_ERR(0, 472, __pyx_L1_error)
   __pyx_k__7 = ((struct PyMPICommObject *)__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":472
+  /* "adios_mpi.pyx":480
  *                    str name,
  *                    str mode,
  *                    MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
  *     cdef int64_t fd
  *     cdef int result
  */
-  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_MPI); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 472, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_MPI); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 480, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_COMM_WORLD); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 472, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_COMM_WORLD); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 480, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_6mpi4py_3MPI_Comm))))) __PYX_ERR(0, 472, __pyx_L1_error)
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_6mpi4py_3MPI_Comm))))) __PYX_ERR(0, 480, __pyx_L1_error)
   __pyx_k__8 = ((struct PyMPICommObject *)__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "adios_mpi.pyx":469
+  /* "adios_mpi.pyx":477
  *     return adios_init(s2b(config), init_comm.ob_mpi)
  * 
  * cpdef int64_t open(str group_name,             # <<<<<<<<<<<<<<
  *                    str name,
  *                    str mode,
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_MPI); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 472, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_MPI); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 480, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
 
-  /* "adios_mpi.pyx":472
+  /* "adios_mpi.pyx":480
  *                    str name,
  *                    str mode,
  *                    MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
  *     cdef int64_t fd
  *     cdef int result
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_COMM_WORLD); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 472, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_COMM_WORLD); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 480, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_6mpi4py_3MPI_Comm))))) __PYX_ERR(0, 472, __pyx_L1_error)
+  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_6mpi4py_3MPI_Comm))))) __PYX_ERR(0, 480, __pyx_L1_error)
   __pyx_k__8 = ((struct PyMPICommObject *)__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":531
+  /* "adios_mpi.pyx":539
  * ## ====================
  * 
  * cpdef int init_noxml(MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
  *     global init_comm
  *     init_comm = comm.Clone()
  */
-  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_MPI); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 531, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_MPI); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 539, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_COMM_WORLD); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 531, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_COMM_WORLD); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 539, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_6mpi4py_3MPI_Comm))))) __PYX_ERR(0, 531, __pyx_L1_error)
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_6mpi4py_3MPI_Comm))))) __PYX_ERR(0, 539, __pyx_L1_error)
   __pyx_k__9 = ((struct PyMPICommObject *)__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_2);
   __pyx_t_2 = 0;
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_MPI); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 531, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_MPI); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 539, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_COMM_WORLD); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 531, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_COMM_WORLD); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 539, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_6mpi4py_3MPI_Comm))))) __PYX_ERR(0, 531, __pyx_L1_error)
+  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_6mpi4py_3MPI_Comm))))) __PYX_ERR(0, 539, __pyx_L1_error)
   __pyx_k__9 = ((struct PyMPICommObject *)__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":543
+  /* "adios_mpi.pyx":551
  * cpdef int64_t declare_group(str name,
  *                             str time_index = "",
  *                             int stats = adios_stat_default):             # <<<<<<<<<<<<<<
@@ -42622,7 +44873,7 @@ PyMODINIT_FUNC PyInit_adios_mpi(void)
  */
   __pyx_k__11 = adios_stat_default;
 
-  /* "adios_mpi.pyx":541
+  /* "adios_mpi.pyx":549
  *                                  buffer_size)
  * 
  * cpdef int64_t declare_group(str name,             # <<<<<<<<<<<<<<
@@ -42631,66 +44882,66 @@ PyMODINIT_FUNC PyInit_adios_mpi(void)
  */
   __pyx_k__11 = adios_stat_default;
 
-  /* "adios_mpi.pyx":875
+  /* "adios_mpi.pyx":883
  * """ Call adios_read_init_method """
  * cpdef int read_init(str method_name = "BP",
  *                     MPI.Comm comm = MPI.COMM_WORLD,             # <<<<<<<<<<<<<<
  *                     str parameters = ""):
  *     global read_init_comm
  */
-  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_MPI); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 875, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_MPI); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 883, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_COMM_WORLD); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 875, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_COMM_WORLD); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 883, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_6mpi4py_3MPI_Comm))))) __PYX_ERR(0, 875, __pyx_L1_error)
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_6mpi4py_3MPI_Comm))))) __PYX_ERR(0, 883, __pyx_L1_error)
   __pyx_k__12 = ((struct PyMPICommObject *)__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "adios_mpi.pyx":874
+  /* "adios_mpi.pyx":882
  * 
  * """ Call adios_read_init_method """
  * cpdef int read_init(str method_name = "BP",             # <<<<<<<<<<<<<<
  *                     MPI.Comm comm = MPI.COMM_WORLD,
  *                     str parameters = ""):
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_MPI); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 875, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_MPI); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 883, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
 
-  /* "adios_mpi.pyx":875
+  /* "adios_mpi.pyx":883
  * """ Call adios_read_init_method """
  * cpdef int read_init(str method_name = "BP",
  *                     MPI.Comm comm = MPI.COMM_WORLD,             # <<<<<<<<<<<<<<
  *                     str parameters = ""):
  *     global read_init_comm
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_COMM_WORLD); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 875, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_COMM_WORLD); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 883, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_6mpi4py_3MPI_Comm))))) __PYX_ERR(0, 875, __pyx_L1_error)
+  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_6mpi4py_3MPI_Comm))))) __PYX_ERR(0, 883, __pyx_L1_error)
   __pyx_k__12 = ((struct PyMPICommObject *)__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":996
+  /* "adios_mpi.pyx":1004
  *     def __init__(self, str fname,
  *                  str method_name = "BP",
  *                  MPI.Comm comm = MPI.COMM_WORLD,             # <<<<<<<<<<<<<<
  *                  is_stream = False,
  *                  ADIOS_LOCKMODE lock_mode = ADIOS_LOCKMODE_ALL,
  */
-  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_MPI); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 996, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_MPI); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1004, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_COMM_WORLD); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 996, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_COMM_WORLD); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1004, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_6mpi4py_3MPI_Comm))))) __PYX_ERR(0, 996, __pyx_L1_error)
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_6mpi4py_3MPI_Comm))))) __PYX_ERR(0, 1004, __pyx_L1_error)
   __pyx_k__16 = ((struct PyMPICommObject *)__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "adios_mpi.pyx":998
+  /* "adios_mpi.pyx":1006
  *                  MPI.Comm comm = MPI.COMM_WORLD,
  *                  is_stream = False,
  *                  ADIOS_LOCKMODE lock_mode = ADIOS_LOCKMODE_ALL,             # <<<<<<<<<<<<<<
@@ -42699,177 +44950,195 @@ PyMODINIT_FUNC PyInit_adios_mpi(void)
  */
   __pyx_k__17 = ADIOS_LOCKMODE_ALL;
 
-  /* "adios_mpi.pyx":1963
+  /* "adios_mpi.pyx":1972
  *                  bint is_noxml = True,
  *                  str mode = "w",
- *                  MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
- *         self.gid = 0
- *         self.fname = fname
+ *                  int stats = adios_stat_default,             # <<<<<<<<<<<<<<
+ *                  MPI.Comm comm = MPI.COMM_WORLD,
+ *                  str method = "POSIX1",
+ */
+  __pyx_k__55 = adios_stat_default;
+
+  /* "adios_mpi.pyx":1973
+ *                  str mode = "w",
+ *                  int stats = adios_stat_default,
+ *                  MPI.Comm comm = MPI.COMM_WORLD,             # <<<<<<<<<<<<<<
+ *                  str method = "POSIX1",
+ *                  str method_params = ""):
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_MPI); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1963, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_MPI); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1973, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_COMM_WORLD); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1963, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_COMM_WORLD); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1973, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_6mpi4py_3MPI_Comm))))) __PYX_ERR(0, 1963, __pyx_L1_error)
+  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_6mpi4py_3MPI_Comm))))) __PYX_ERR(0, 1973, __pyx_L1_error)
   __pyx_k__54 = ((struct PyMPICommObject *)__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":2020
+  /* "adios_mpi.pyx":1998
+ *                       str method = "POSIX1",
+ *                       str method_params = "",
+ *                       int stats = adios_stat_default):             # <<<<<<<<<<<<<<
+ *         """
+ *         Define a group associated with the file.
+ */
+  __pyx_k__56 = adios_stat_default;
+
+  /* "adios_mpi.pyx":2041
  * 
  *     def define_var(self, str varname,
  *                    ldim = tuple(),             # <<<<<<<<<<<<<<
  *                    gdim = tuple(),
  *                    offset = tuple(),
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)(&PyTuple_Type)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2020, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)(&PyTuple_Type)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2041, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_k__55 = __pyx_t_1;
+  __pyx_k__57 = __pyx_t_1;
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":2021
+  /* "adios_mpi.pyx":2042
  *     def define_var(self, str varname,
  *                    ldim = tuple(),
  *                    gdim = tuple(),             # <<<<<<<<<<<<<<
  *                    offset = tuple(),
  *                    transform = None):
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)(&PyTuple_Type)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2021, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)(&PyTuple_Type)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2042, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_k__56 = __pyx_t_1;
+  __pyx_k__58 = __pyx_t_1;
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":2022
+  /* "adios_mpi.pyx":2043
  *                    ldim = tuple(),
  *                    gdim = tuple(),
  *                    offset = tuple(),             # <<<<<<<<<<<<<<
  *                    transform = None):
  *         """
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)(&PyTuple_Type)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2022, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)(&PyTuple_Type)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2043, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_k__57 = __pyx_t_1;
+  __pyx_k__59 = __pyx_t_1;
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":2218
+  /* "adios_mpi.pyx":2239
  * 
  *     def __init__(self, str name,
  *                  ldim = tuple(),             # <<<<<<<<<<<<<<
  *                  gdim = tuple(),
  *                  offset = tuple(),
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)(&PyTuple_Type)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2218, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)(&PyTuple_Type)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2239, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_k__59 = __pyx_t_1;
+  __pyx_k__61 = __pyx_t_1;
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":2219
+  /* "adios_mpi.pyx":2240
  *     def __init__(self, str name,
  *                  ldim = tuple(),
  *                  gdim = tuple(),             # <<<<<<<<<<<<<<
  *                  offset = tuple(),
  *                  value = None,
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)(&PyTuple_Type)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2219, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)(&PyTuple_Type)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2240, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_k__60 = __pyx_t_1;
+  __pyx_k__62 = __pyx_t_1;
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":2220
+  /* "adios_mpi.pyx":2241
  *                  ldim = tuple(),
  *                  gdim = tuple(),
  *                  offset = tuple(),             # <<<<<<<<<<<<<<
  *                  value = None,
  *                  transform = None):
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)(&PyTuple_Type)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2220, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)(&PyTuple_Type)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2241, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_k__61 = __pyx_t_1;
+  __pyx_k__63 = __pyx_t_1;
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":2280
+  /* "adios_mpi.pyx":2306
  * 
  * ## Aliases
  * File = file             # <<<<<<<<<<<<<<
  * Var = var
  * Attr = attr
  */
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_File, ((PyObject *)__pyx_ptype_9adios_mpi_file)) < 0) __PYX_ERR(0, 2280, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_File, ((PyObject *)__pyx_ptype_9adios_mpi_file)) < 0) __PYX_ERR(0, 2306, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":2281
+  /* "adios_mpi.pyx":2307
  * ## Aliases
  * File = file
  * Var = var             # <<<<<<<<<<<<<<
  * Attr = attr
  * Writer = writer
  */
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Var, ((PyObject *)__pyx_ptype_9adios_mpi_var)) < 0) __PYX_ERR(0, 2281, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Var, ((PyObject *)__pyx_ptype_9adios_mpi_var)) < 0) __PYX_ERR(0, 2307, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":2282
+  /* "adios_mpi.pyx":2308
  * File = file
  * Var = var
  * Attr = attr             # <<<<<<<<<<<<<<
  * Writer = writer
  * Attrinfo = attrinfo
  */
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Attr, ((PyObject *)__pyx_ptype_9adios_mpi_attr)) < 0) __PYX_ERR(0, 2282, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Attr, ((PyObject *)__pyx_ptype_9adios_mpi_attr)) < 0) __PYX_ERR(0, 2308, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":2283
+  /* "adios_mpi.pyx":2309
  * Var = var
  * Attr = attr
  * Writer = writer             # <<<<<<<<<<<<<<
  * Attrinfo = attrinfo
  * Varinfo = varinfo
  */
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Writer, ((PyObject *)__pyx_ptype_9adios_mpi_writer)) < 0) __PYX_ERR(0, 2283, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Writer, ((PyObject *)__pyx_ptype_9adios_mpi_writer)) < 0) __PYX_ERR(0, 2309, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":2284
+  /* "adios_mpi.pyx":2310
  * Attr = attr
  * Writer = writer
  * Attrinfo = attrinfo             # <<<<<<<<<<<<<<
  * Varinfo = varinfo
  * 
  */
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Attrinfo, ((PyObject *)__pyx_ptype_9adios_mpi_attrinfo)) < 0) __PYX_ERR(0, 2284, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Attrinfo, ((PyObject *)__pyx_ptype_9adios_mpi_attrinfo)) < 0) __PYX_ERR(0, 2310, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":2285
+  /* "adios_mpi.pyx":2311
  * Writer = writer
  * Attrinfo = attrinfo
  * Varinfo = varinfo             # <<<<<<<<<<<<<<
  * 
  * ## ====================
  */
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Varinfo, ((PyObject *)__pyx_ptype_9adios_mpi_varinfo)) < 0) __PYX_ERR(0, 2285, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Varinfo, ((PyObject *)__pyx_ptype_9adios_mpi_varinfo)) < 0) __PYX_ERR(0, 2311, __pyx_L1_error)
 
-  /* "adios_mpi.pyx":2291
+  /* "adios_mpi.pyx":2317
  * ## ====================
  * 
  * def readvar(fname, varname):             # <<<<<<<<<<<<<<
  *     """ Retrieve a variable value from an Adios file.
  * 
  */
-  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_9adios_mpi_93readvar, NULL, __pyx_n_s_adios_mpi); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2291, __pyx_L1_error)
+  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_9adios_mpi_93readvar, NULL, __pyx_n_s_adios_mpi); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2317, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_readvar_2, __pyx_t_1) < 0) __PYX_ERR(0, 2291, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_readvar_2, __pyx_t_1) < 0) __PYX_ERR(0, 2317, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "adios_mpi.pyx":2305
+  /* "adios_mpi.pyx":2331
  *     return v.read(from_steps=0, nsteps=v.nsteps)
  * 
  * def bpls(fname):             # <<<<<<<<<<<<<<
  *     """ Return meta data of an Adios file as a Python dictionary object.
  * 
  */
-  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_9adios_mpi_95bpls, NULL, __pyx_n_s_adios_mpi); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2305, __pyx_L1_error)
+  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_9adios_mpi_95bpls, NULL, __pyx_n_s_adios_mpi); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2331, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_bpls, __pyx_t_1) < 0) __PYX_ERR(0, 2305, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_bpls, __pyx_t_1) < 0) __PYX_ERR(0, 2331, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
   /* "adios_mpi.pyx":1
@@ -42879,18 +45148,18 @@ PyMODINIT_FUNC PyInit_adios_mpi(void)
  */
   __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_var_read_line_1456, __pyx_kp_u_Perform_read_Read_data_from_an) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
-  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_writer_declare_group_line_1982, __pyx_kp_u_Define_a_group_associated_with) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
-  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_writer_define_var_line_2019, __pyx_kp_u_Define_a_variable_associated_wi) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_var_read_line_1464, __pyx_kp_u_Perform_read_Read_data_from_an) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_writer_declare_group_line_1995, __pyx_kp_u_Define_a_group_associated_with) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_writer_define_var_line_2040, __pyx_kp_u_Define_a_variable_associated_wi) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
   if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_1) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":976
- *      arr.base = baseptr
+  /* "../../../../sw/anaconda2/4.1.1/lib/python2.7/site-packages/Cython/Includes/numpy/__init__.pxd":997
+ *         raise ImportError("numpy.core.umath failed to import")
  * 
- * cdef inline object get_array_base(ndarray arr):             # <<<<<<<<<<<<<<
- *     if arr.base is NULL:
- *         return None
+ * cdef inline int import_ufunc() except -1:             # <<<<<<<<<<<<<<
+ *     try:
+ *         _import_umath()
  */
 
   /*--- Wrapped vars code ---*/
@@ -42948,6 +45217,144 @@ static PyObject *__Pyx_GetBuiltinName(PyObject *name) {
     return result;
 }
 
+/* PyCFunctionFastCall */
+#if CYTHON_FAST_PYCCALL
+static CYTHON_INLINE PyObject * __Pyx_PyCFunction_FastCall(PyObject *func_obj, PyObject **args, Py_ssize_t nargs) {
+    PyCFunctionObject *func = (PyCFunctionObject*)func_obj;
+    PyCFunction meth = PyCFunction_GET_FUNCTION(func);
+    PyObject *self = PyCFunction_GET_SELF(func);
+    assert(PyCFunction_Check(func));
+    assert(METH_FASTCALL == (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST)));
+    assert(nargs >= 0);
+    assert(nargs == 0 || args != NULL);
+    /* _PyCFunction_FastCallDict() must not be called with an exception set,
+       because it may clear it (directly or indirectly) and so the
+       caller loses its exception */
+    assert(!PyErr_Occurred());
+    return (*((__Pyx_PyCFunctionFast)meth)) (self, args, nargs, NULL);
+}
+#endif  // CYTHON_FAST_PYCCALL
+
+/* PyFunctionFastCall */
+#if CYTHON_FAST_PYCALL
+#include "frameobject.h"
+static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObject **args, Py_ssize_t na,
+                                               PyObject *globals) {
+    PyFrameObject *f;
+    PyThreadState *tstate = PyThreadState_GET();
+    PyObject **fastlocals;
+    Py_ssize_t i;
+    PyObject *result;
+    assert(globals != NULL);
+    /* XXX Perhaps we should create a specialized
+       PyFrame_New() that doesn't take locals, but does
+       take builtins without sanity checking them.
+       */
+    assert(tstate != NULL);
+    f = PyFrame_New(tstate, co, globals, NULL);
+    if (f == NULL) {
+        return NULL;
+    }
+    fastlocals = f->f_localsplus;
+    for (i = 0; i < na; i++) {
+        Py_INCREF(*args);
+        fastlocals[i] = *args++;
+    }
+    result = PyEval_EvalFrameEx(f,0);
+    ++tstate->recursion_depth;
+    Py_DECREF(f);
+    --tstate->recursion_depth;
+    return result;
+}
+#if 1 || PY_VERSION_HEX < 0x030600B1
+static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, int nargs, PyObject *kwargs) {
+    PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func);
+    PyObject *globals = PyFunction_GET_GLOBALS(func);
+    PyObject *argdefs = PyFunction_GET_DEFAULTS(func);
+    PyObject *closure;
+#if PY_MAJOR_VERSION >= 3
+    PyObject *kwdefs;
+#endif
+    PyObject *kwtuple, **k;
+    PyObject **d;
+    Py_ssize_t nd;
+    Py_ssize_t nk;
+    PyObject *result;
+    assert(kwargs == NULL || PyDict_Check(kwargs));
+    nk = kwargs ? PyDict_Size(kwargs) : 0;
+    if (Py_EnterRecursiveCall((char*)" while calling a Python object")) {
+        return NULL;
+    }
+    if (
+#if PY_MAJOR_VERSION >= 3
+            co->co_kwonlyargcount == 0 &&
+#endif
+            likely(kwargs == NULL || nk == 0) &&
+            co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) {
+        if (argdefs == NULL && co->co_argcount == nargs) {
+            result = __Pyx_PyFunction_FastCallNoKw(co, args, nargs, globals);
+            goto done;
+        }
+        else if (nargs == 0 && argdefs != NULL
+                 && co->co_argcount == Py_SIZE(argdefs)) {
+            /* function called with no arguments, but all parameters have
+               a default value: use default values as arguments .*/
+            args = &PyTuple_GET_ITEM(argdefs, 0);
+            result =__Pyx_PyFunction_FastCallNoKw(co, args, Py_SIZE(argdefs), globals);
+            goto done;
+        }
+    }
+    if (kwargs != NULL) {
+        Py_ssize_t pos, i;
+        kwtuple = PyTuple_New(2 * nk);
+        if (kwtuple == NULL) {
+            result = NULL;
+            goto done;
+        }
+        k = &PyTuple_GET_ITEM(kwtuple, 0);
+        pos = i = 0;
+        while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) {
+            Py_INCREF(k[i]);
+            Py_INCREF(k[i+1]);
+            i += 2;
+        }
+        nk = i / 2;
+    }
+    else {
+        kwtuple = NULL;
+        k = NULL;
+    }
+    closure = PyFunction_GET_CLOSURE(func);
+#if PY_MAJOR_VERSION >= 3
+    kwdefs = PyFunction_GET_KW_DEFAULTS(func);
+#endif
+    if (argdefs != NULL) {
+        d = &PyTuple_GET_ITEM(argdefs, 0);
+        nd = Py_SIZE(argdefs);
+    }
+    else {
+        d = NULL;
+        nd = 0;
+    }
+#if PY_MAJOR_VERSION >= 3
+    result = PyEval_EvalCodeEx((PyObject*)co, globals, (PyObject *)NULL,
+                               args, nargs,
+                               k, (int)nk,
+                               d, (int)nd, kwdefs, closure);
+#else
+    result = PyEval_EvalCodeEx(co, globals, (PyObject *)NULL,
+                               args, nargs,
+                               k, (int)nk,
+                               d, (int)nd, closure);
+#endif
+    Py_XDECREF(kwtuple);
+done:
+    Py_LeaveRecursiveCall();
+    return result;
+}
+#endif  // CPython < 3.6
+#endif  // CYTHON_FAST_PYCALL
+
 /* PyObjectCall */
 #if CYTHON_COMPILING_IN_CPYTHON
 static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) {
@@ -43001,6 +45408,11 @@ static PyObject* __Pyx__PyObject_CallOneArg(PyObject *func, PyObject *arg) {
     return result;
 }
 static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) {
+#if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(func)) {
+        return __Pyx_PyFunction_FastCall(func, &arg, 1);
+    }
+#endif
 #ifdef __Pyx_CyFunction_USED
     if (likely(PyCFunction_Check(func) || PyObject_TypeCheck(func, __pyx_CyFunctionType))) {
 #else
@@ -43008,6 +45420,10 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObjec
 #endif
         if (likely(PyCFunction_GET_FLAGS(func) & METH_O)) {
             return __Pyx_PyObject_CallMethO(func, arg);
+#if CYTHON_FAST_PYCCALL
+        } else if (PyCFunction_GET_FLAGS(func) & METH_FASTCALL) {
+            return __Pyx_PyCFunction_FastCall(func, &arg, 1);
+#endif
         }
     }
     return __Pyx__PyObject_CallOneArg(func, arg);
@@ -43026,6 +45442,11 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObjec
 /* PyObjectCallNoArg */
   #if CYTHON_COMPILING_IN_CPYTHON
 static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) {
+#if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(func)) {
+        return __Pyx_PyFunction_FastCall(func, NULL, 0);
+    }
+#endif
 #ifdef __Pyx_CyFunction_USED
     if (likely(PyCFunction_Check(func) || PyObject_TypeCheck(func, __pyx_CyFunctionType))) {
 #else
@@ -43040,7 +45461,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) {
 #endif
 
 /* PyErrFetchRestore */
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_FAST_THREAD_STATE
 static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) {
     PyObject *tmp_type, *tmp_value, *tmp_tb;
     tmp_type = tstate->curexc_type;
@@ -43164,7 +45585,7 @@ static CYTHON_INLINE int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, in
         Py_ssize_t cstart, Py_ssize_t cstop,
         PyObject** _py_start, PyObject** _py_stop, PyObject** _py_slice,
         int has_cstart, int has_cstop, CYTHON_UNUSED int wraparound) {
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_USE_TYPE_SLOTS
     PyMappingMethods* mp;
 #if PY_MAJOR_VERSION < 3
     PySequenceMethods* ms = Py_TYPE(obj)->tp_as_sequence;
@@ -43240,7 +45661,7 @@ static CYTHON_INLINE int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, in
             Py_XDECREF(owned_stop);
             if (unlikely(!py_slice)) goto bad;
         }
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_USE_TYPE_SLOTS
         result = mp->mp_subscript(obj, py_slice);
 #else
         result = PyObject_GetItem(obj, py_slice);
@@ -43267,7 +45688,7 @@ bad:
 static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i,
                                                               CYTHON_NCP_UNUSED int wraparound,
                                                               CYTHON_NCP_UNUSED int boundscheck) {
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (wraparound & unlikely(i < 0)) i += PyList_GET_SIZE(o);
     if ((!boundscheck) || likely((0 <= i) & (i < PyList_GET_SIZE(o)))) {
         PyObject *r = PyList_GET_ITEM(o, i);
@@ -43282,7 +45703,7 @@ static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_
 static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i,
                                                               CYTHON_NCP_UNUSED int wraparound,
                                                               CYTHON_NCP_UNUSED int boundscheck) {
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (wraparound & unlikely(i < 0)) i += PyTuple_GET_SIZE(o);
     if ((!boundscheck) || likely((0 <= i) & (i < PyTuple_GET_SIZE(o)))) {
         PyObject *r = PyTuple_GET_ITEM(o, i);
@@ -43297,7 +45718,7 @@ static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize
 static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list,
                                                      CYTHON_NCP_UNUSED int wraparound,
                                                      CYTHON_NCP_UNUSED int boundscheck) {
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS
     if (is_list || PyList_CheckExact(o)) {
         Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o);
         if ((!boundscheck) || (likely((n >= 0) & (n < PyList_GET_SIZE(o))))) {
@@ -43338,7 +45759,7 @@ static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i,
 }
 
 /* PyIntBinop */
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if !CYTHON_COMPILING_IN_PYPY
 static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED long intval, CYTHON_UNUSED int inplace) {
     #if PY_MAJOR_VERSION < 3
     if (likely(PyInt_CheckExact(op1))) {
@@ -43351,12 +45772,14 @@ static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED
             return PyLong_Type.tp_as_number->nb_add(op1, op2);
     }
     #endif
-    #if CYTHON_USE_PYLONG_INTERNALS && PY_MAJOR_VERSION >= 3
+    #if CYTHON_USE_PYLONG_INTERNALS
     if (likely(PyLong_CheckExact(op1))) {
         const long b = intval;
         long a, x;
+#ifdef HAVE_LONG_LONG
         const PY_LONG_LONG llb = intval;
         PY_LONG_LONG lla, llx;
+#endif
         const digit* digits = ((PyLongObject*)op1)->ob_digit;
         const Py_ssize_t size = Py_SIZE(op1);
         if (likely(__Pyx_sst_abs(size) <= 1)) {
@@ -43368,58 +45791,74 @@ static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED
                     if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
                         a = -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                         break;
+#ifdef HAVE_LONG_LONG
                     } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) {
                         lla = -(PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                         goto long_long;
+#endif
                     }
                 case 2:
                     if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
                         a = (long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                         break;
+#ifdef HAVE_LONG_LONG
                     } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) {
                         lla = (PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                         goto long_long;
+#endif
                     }
                 case -3:
                     if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
                         a = -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                         break;
+#ifdef HAVE_LONG_LONG
                     } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) {
                         lla = -(PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                         goto long_long;
+#endif
                     }
                 case 3:
                     if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
                         a = (long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                         break;
+#ifdef HAVE_LONG_LONG
                     } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) {
                         lla = (PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                         goto long_long;
+#endif
                     }
                 case -4:
                     if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) {
                         a = -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                         break;
+#ifdef HAVE_LONG_LONG
                     } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) {
                         lla = -(PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                         goto long_long;
+#endif
                     }
                 case 4:
                     if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) {
                         a = (long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                         break;
+#ifdef HAVE_LONG_LONG
                     } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) {
                         lla = (PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                         goto long_long;
+#endif
                     }
                 default: return PyLong_Type.tp_as_number->nb_add(op1, op2);
             }
         }
                 x = a + b;
             return PyLong_FromLong(x);
+#ifdef HAVE_LONG_LONG
         long_long:
                 llx = lla + llb;
             return PyLong_FromLongLong(llx);
+#endif
+        
+        
     }
     #endif
     if (PyFloat_CheckExact(op1)) {
@@ -43436,7 +45875,7 @@ static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED
 #endif
 
 /* PyIntBinop */
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if !CYTHON_COMPILING_IN_PYPY
 static PyObject* __Pyx_PyInt_SubtractObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED long intval, CYTHON_UNUSED int inplace) {
     #if PY_MAJOR_VERSION < 3
     if (likely(PyInt_CheckExact(op1))) {
@@ -43449,12 +45888,14 @@ static PyObject* __Pyx_PyInt_SubtractObjC(PyObject *op1, PyObject *op2, CYTHON_U
             return PyLong_Type.tp_as_number->nb_subtract(op1, op2);
     }
     #endif
-    #if CYTHON_USE_PYLONG_INTERNALS && PY_MAJOR_VERSION >= 3
+    #if CYTHON_USE_PYLONG_INTERNALS
     if (likely(PyLong_CheckExact(op1))) {
         const long b = intval;
         long a, x;
+#ifdef HAVE_LONG_LONG
         const PY_LONG_LONG llb = intval;
         PY_LONG_LONG lla, llx;
+#endif
         const digit* digits = ((PyLongObject*)op1)->ob_digit;
         const Py_ssize_t size = Py_SIZE(op1);
         if (likely(__Pyx_sst_abs(size) <= 1)) {
@@ -43466,58 +45907,74 @@ static PyObject* __Pyx_PyInt_SubtractObjC(PyObject *op1, PyObject *op2, CYTHON_U
                     if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
                         a = -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                         break;
+#ifdef HAVE_LONG_LONG
                     } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) {
                         lla = -(PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                         goto long_long;
+#endif
                     }
                 case 2:
                     if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
                         a = (long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                         break;
+#ifdef HAVE_LONG_LONG
                     } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) {
                         lla = (PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                         goto long_long;
+#endif
                     }
                 case -3:
                     if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
                         a = -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                         break;
+#ifdef HAVE_LONG_LONG
                     } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) {
                         lla = -(PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                         goto long_long;
+#endif
                     }
                 case 3:
                     if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
                         a = (long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                         break;
+#ifdef HAVE_LONG_LONG
                     } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) {
                         lla = (PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                         goto long_long;
+#endif
                     }
                 case -4:
                     if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) {
                         a = -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                         break;
+#ifdef HAVE_LONG_LONG
                     } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) {
                         lla = -(PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                         goto long_long;
+#endif
                     }
                 case 4:
                     if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) {
                         a = (long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                         break;
+#ifdef HAVE_LONG_LONG
                     } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) {
                         lla = (PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                         goto long_long;
+#endif
                     }
                 default: return PyLong_Type.tp_as_number->nb_subtract(op1, op2);
             }
         }
                 x = a - b;
             return PyLong_FromLong(x);
+#ifdef HAVE_LONG_LONG
         long_long:
                 llx = lla - llb;
             return PyLong_FromLongLong(llx);
+#endif
+        
+        
     }
     #endif
     if (PyFloat_CheckExact(op1)) {
@@ -43691,7 +46148,7 @@ bad:
 /* GetModuleGlobalName */
     static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name) {
     PyObject *result;
-#if CYTHON_COMPILING_IN_CPYTHON
+#if !CYTHON_AVOID_BORROWED_REFS
     result = PyDict_GetItem(__pyx_d, name);
     if (likely(result)) {
         Py_INCREF(result);
@@ -43829,7 +46286,7 @@ return_ne:
 }
 
 /* PyIntBinop */
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if !CYTHON_COMPILING_IN_PYPY
 static PyObject* __Pyx_PyInt_EqObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED long intval, CYTHON_UNUSED int inplace) {
     if (op1 == op2) {
         Py_RETURN_TRUE;
@@ -43845,7 +46302,7 @@ static PyObject* __Pyx_PyInt_EqObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED
         }
     }
     #endif
-    #if CYTHON_USE_PYLONG_INTERNALS && PY_MAJOR_VERSION >= 3
+    #if CYTHON_USE_PYLONG_INTERNALS
     if (likely(PyLong_CheckExact(op1))) {
         const long b = intval;
         long a;
@@ -44090,7 +46547,7 @@ bad:
     {
         PyMethodDescrObject *descr = (PyMethodDescrObject*) method;
         target->func = descr->d_method->ml_meth;
-        target->flag = descr->d_method->ml_flags & (METH_VARARGS | METH_KEYWORDS | METH_O | METH_NOARGS);
+        target->flag = descr->d_method->ml_flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST);
     }
 #endif
     return 0;
@@ -44100,7 +46557,7 @@ bad:
         static PyObject* __Pyx__CallUnboundCMethod0(__Pyx_CachedCFunction* cfunc, PyObject* self) {
     PyObject *args, *result = NULL;
     if (unlikely(!cfunc->method) && unlikely(__Pyx_TryUnpackUnboundCMethod(cfunc) < 0)) return NULL;
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_ASSUME_SAFE_MACROS
     args = PyTuple_New(1);
     if (unlikely(!args)) goto bad;
     Py_INCREF(self);
@@ -44209,7 +46666,7 @@ static int __Pyx_PyBytes_Tailmatch(PyObject* self, PyObject* substr,
         Py_ssize_t i, count = PyTuple_GET_SIZE(substr);
         for (i = 0; i < count; i++) {
             int result;
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
             result = __Pyx_PyBytes_SingleTailmatch(self, PyTuple_GET_ITEM(substr, i),
                                                    start, end, direction);
 #else
@@ -44234,7 +46691,7 @@ static int __Pyx_PyBytes_Tailmatch(PyObject* self, PyObject* substr,
         Py_ssize_t i, count = PyTuple_GET_SIZE(substr);
         for (i = 0; i < count; i++) {
             Py_ssize_t result;
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
             result = PyUnicode_Tailmatch(s, PyTuple_GET_ITEM(substr, i),
                                          start, end, direction);
 #else
@@ -44277,7 +46734,7 @@ static int __Pyx_PyBytes_Tailmatch(PyObject* self, PyObject* substr,
 
 /* IterFinish */
         static CYTHON_INLINE int __Pyx_IterFinish(void) {
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_FAST_THREAD_STATE
     PyThreadState *tstate = PyThreadState_GET();
     PyObject* exc_type = tstate->curexc_type;
     if (unlikely(exc_type)) {
@@ -44327,7 +46784,7 @@ static int __Pyx_PyBytes_Tailmatch(PyObject* self, PyObject* substr,
         Py_ssize_t cstart, Py_ssize_t cstop,
         PyObject** _py_start, PyObject** _py_stop, PyObject** _py_slice,
         int has_cstart, int has_cstop, CYTHON_UNUSED int wraparound) {
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_USE_TYPE_SLOTS
     PyMappingMethods* mp;
 #if PY_MAJOR_VERSION < 3
     PySequenceMethods* ms = Py_TYPE(obj)->tp_as_sequence;
@@ -44403,7 +46860,7 @@ static int __Pyx_PyBytes_Tailmatch(PyObject* self, PyObject* substr,
             Py_XDECREF(owned_stop);
             if (unlikely(!py_slice)) goto bad;
         }
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_USE_TYPE_SLOTS
         result = mp->mp_ass_subscript(obj, py_slice, value);
 #else
         result = value ? PyObject_SetItem(obj, py_slice, value) : PyObject_DelItem(obj, py_slice);
@@ -44433,7 +46890,7 @@ bad:
     PyObject *method, *result = NULL;
     method = __Pyx_PyObject_GetAttrStr(obj, method_name);
     if (unlikely(!method)) goto bad;
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_UNPACK_METHODS
     if (likely(PyMethod_Check(method))) {
         PyObject *self = PyMethod_GET_SELF(method);
         if (likely(self)) {
@@ -44617,8 +47074,103 @@ static CYTHON_INLINE int __Pyx_dict_iter_next(
         return PyDict_Values(d);
 }
 
+/* SaveResetException */
+        #if CYTHON_FAST_THREAD_STATE
+static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) {
+    *type = tstate->exc_type;
+    *value = tstate->exc_value;
+    *tb = tstate->exc_traceback;
+    Py_XINCREF(*type);
+    Py_XINCREF(*value);
+    Py_XINCREF(*tb);
+}
+static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) {
+    PyObject *tmp_type, *tmp_value, *tmp_tb;
+    tmp_type = tstate->exc_type;
+    tmp_value = tstate->exc_value;
+    tmp_tb = tstate->exc_traceback;
+    tstate->exc_type = type;
+    tstate->exc_value = value;
+    tstate->exc_traceback = tb;
+    Py_XDECREF(tmp_type);
+    Py_XDECREF(tmp_value);
+    Py_XDECREF(tmp_tb);
+}
+#endif
+
+/* PyErrExceptionMatches */
+        #if CYTHON_FAST_THREAD_STATE
+static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err) {
+    PyObject *exc_type = tstate->curexc_type;
+    if (exc_type == err) return 1;
+    if (unlikely(!exc_type)) return 0;
+    return PyErr_GivenExceptionMatches(exc_type, err);
+}
+#endif
+
+/* GetException */
+        #if CYTHON_FAST_THREAD_STATE
+static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) {
+#else
+static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) {
+#endif
+    PyObject *local_type, *local_value, *local_tb;
+#if CYTHON_FAST_THREAD_STATE
+    PyObject *tmp_type, *tmp_value, *tmp_tb;
+    local_type = tstate->curexc_type;
+    local_value = tstate->curexc_value;
+    local_tb = tstate->curexc_traceback;
+    tstate->curexc_type = 0;
+    tstate->curexc_value = 0;
+    tstate->curexc_traceback = 0;
+#else
+    PyErr_Fetch(&local_type, &local_value, &local_tb);
+#endif
+    PyErr_NormalizeException(&local_type, &local_value, &local_tb);
+#if CYTHON_FAST_THREAD_STATE
+    if (unlikely(tstate->curexc_type))
+#else
+    if (unlikely(PyErr_Occurred()))
+#endif
+        goto bad;
+    #if PY_MAJOR_VERSION >= 3
+    if (local_tb) {
+        if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0))
+            goto bad;
+    }
+    #endif
+    Py_XINCREF(local_tb);
+    Py_XINCREF(local_type);
+    Py_XINCREF(local_value);
+    *type = local_type;
+    *value = local_value;
+    *tb = local_tb;
+#if CYTHON_FAST_THREAD_STATE
+    tmp_type = tstate->exc_type;
+    tmp_value = tstate->exc_value;
+    tmp_tb = tstate->exc_traceback;
+    tstate->exc_type = local_type;
+    tstate->exc_value = local_value;
+    tstate->exc_traceback = local_tb;
+    Py_XDECREF(tmp_type);
+    Py_XDECREF(tmp_value);
+    Py_XDECREF(tmp_tb);
+#else
+    PyErr_SetExcInfo(local_type, local_value, local_tb);
+#endif
+    return 0;
+bad:
+    *type = 0;
+    *value = 0;
+    *tb = 0;
+    Py_XDECREF(local_type);
+    Py_XDECREF(local_value);
+    Py_XDECREF(local_tb);
+    return -1;
+}
+
 /* SetVTable */
-        static int __Pyx_SetVtable(PyObject *dict, void *vtable) {
+          static int __Pyx_SetVtable(PyObject *dict, void *vtable) {
 #if PY_VERSION_HEX >= 0x02070000
     PyObject *ob = PyCapsule_New(vtable, 0, 0);
 #else
@@ -44636,7 +47188,7 @@ bad:
 }
 
 /* Import */
-        static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) {
+          static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) {
     PyObject *empty_list = 0;
     PyObject *module = 0;
     PyObject *global_dict = 0;
@@ -44710,7 +47262,7 @@ bad:
 }
 
 /* ImportFrom */
-        static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) {
+          static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) {
     PyObject* value = __Pyx_PyObject_GetAttrStr(module, name);
     if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) {
         PyErr_Format(PyExc_ImportError,
@@ -44724,7 +47276,7 @@ bad:
 }
 
 /* CalculateMetaclass */
-        static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases) {
+          static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases) {
     Py_ssize_t i, nbases = PyTuple_GET_SIZE(bases);
     for (i=0; i < nbases; i++) {
         PyTypeObject *tmptype;
@@ -44763,7 +47315,7 @@ bad:
 }
 
 /* Py3ClassCreate */
-        static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name,
+          static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name,
                                            PyObject *qualname, PyObject *mkw, PyObject *modname, PyObject *doc) {
     PyObject *ns;
     if (metaclass) {
@@ -44830,7 +47382,7 @@ static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObj
 }
 
 /* CodeObjectCache */
-        static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) {
+          static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) {
     int start = 0, mid = 0, end = count - 1;
     if (end >= 0 && code_line > entries[end].code_line) {
         return count;
@@ -44910,7 +47462,7 @@ static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) {
 }
 
 /* AddTraceback */
-        #include "compile.h"
+          #include "compile.h"
 #include "frameobject.h"
 #include "traceback.h"
 static PyCodeObject* __Pyx_CreateCodeObjectForTraceback(
@@ -44983,15 +47535,46 @@ static void __Pyx_AddTraceback(const char *funcname, int c_line,
         0                    /*PyObject *locals*/
     );
     if (!py_frame) goto bad;
-    py_frame->f_lineno = py_line;
+    __Pyx_PyFrame_SetLineNumber(py_frame, py_line);
     PyTraceBack_Here(py_frame);
 bad:
     Py_XDECREF(py_code);
     Py_XDECREF(py_frame);
 }
 
+/* CIntToPy */
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_ADIOS_STATISTICS_FLAG(ADIOS_STATISTICS_FLAG value) {
+    const ADIOS_STATISTICS_FLAG neg_one = (ADIOS_STATISTICS_FLAG) -1, const_zero = (ADIOS_STATISTICS_FLAG) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(ADIOS_STATISTICS_FLAG) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(ADIOS_STATISTICS_FLAG) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(ADIOS_STATISTICS_FLAG) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
+        }
+    } else {
+        if (sizeof(ADIOS_STATISTICS_FLAG) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(ADIOS_STATISTICS_FLAG) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(ADIOS_STATISTICS_FLAG),
+                                     little, !is_unsigned);
+    }
+}
+
 /* CIntFromPyVerify */
-        #define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\
+          #define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\
     __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 0)
 #define __PYX_VERIFY_RETURN_INT_EXC(target_type, func_type, func_value)\
     __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 1)
@@ -45013,7 +47596,7 @@ bad:
     }
 
 /* CIntToPy */
-        static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) {
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) {
     const int neg_one = (int) -1, const_zero = (int) 0;
     const int is_unsigned = neg_one > const_zero;
     if (is_unsigned) {
@@ -45021,14 +47604,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(int) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(int) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -45040,7 +47627,7 @@ bad:
 }
 
 /* CIntToPy */
-        static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int64_t(int64_t value) {
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int64_t(int64_t value) {
     const int64_t neg_one = (int64_t) -1, const_zero = (int64_t) 0;
     const int is_unsigned = neg_one > const_zero;
     if (is_unsigned) {
@@ -45048,14 +47635,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(int64_t) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(int64_t) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(int64_t) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(int64_t) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -45067,7 +47658,7 @@ bad:
 }
 
 /* CIntToPy */
-        static CYTHON_INLINE PyObject* __Pyx_PyInt_From_uint64_t(uint64_t value) {
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_uint64_t(uint64_t value) {
     const uint64_t neg_one = (uint64_t) -1, const_zero = (uint64_t) 0;
     const int is_unsigned = neg_one > const_zero;
     if (is_unsigned) {
@@ -45075,14 +47666,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(uint64_t) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(uint64_t) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(uint64_t) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(uint64_t) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -45094,7 +47689,7 @@ bad:
 }
 
 /* CIntToPy */
-        static CYTHON_INLINE PyObject* __Pyx_PyInt_From_ADIOS_READ_METHOD(ADIOS_READ_METHOD value) {
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_ADIOS_READ_METHOD(ADIOS_READ_METHOD value) {
     const ADIOS_READ_METHOD neg_one = (ADIOS_READ_METHOD) -1, const_zero = (ADIOS_READ_METHOD) 0;
     const int is_unsigned = neg_one > const_zero;
     if (is_unsigned) {
@@ -45102,14 +47697,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(ADIOS_READ_METHOD) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(ADIOS_READ_METHOD) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(ADIOS_READ_METHOD) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(ADIOS_READ_METHOD) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -45121,7 +47720,7 @@ bad:
 }
 
 /* CIntToPy */
-        static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) {
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) {
     const long neg_one = (long) -1, const_zero = (long) 0;
     const int is_unsigned = neg_one > const_zero;
     if (is_unsigned) {
@@ -45129,14 +47728,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(long) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(long) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -45148,7 +47751,7 @@ bad:
 }
 
 /* CIntToPy */
-        static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_long(unsigned long value) {
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_long(unsigned long value) {
     const unsigned long neg_one = (unsigned long) -1, const_zero = (unsigned long) 0;
     const int is_unsigned = neg_one > const_zero;
     if (is_unsigned) {
@@ -45156,14 +47759,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(unsigned long) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(unsigned long) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(unsigned long) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(unsigned long) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -45175,7 +47782,7 @@ bad:
 }
 
 /* CIntToPy */
-        static CYTHON_INLINE PyObject* __Pyx_PyInt_From_uint32_t(uint32_t value) {
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_uint32_t(uint32_t value) {
     const uint32_t neg_one = (uint32_t) -1, const_zero = (uint32_t) 0;
     const int is_unsigned = neg_one > const_zero;
     if (is_unsigned) {
@@ -45183,14 +47790,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(uint32_t) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(uint32_t) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(uint32_t) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(uint32_t) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -45202,7 +47813,7 @@ bad:
 }
 
 /* CIntToPy */
-        static CYTHON_INLINE PyObject* __Pyx_PyInt_From_ADIOS_DATATYPES(ADIOS_DATATYPES value) {
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_ADIOS_DATATYPES(ADIOS_DATATYPES value) {
     const ADIOS_DATATYPES neg_one = (ADIOS_DATATYPES) -1, const_zero = (ADIOS_DATATYPES) 0;
     const int is_unsigned = neg_one > const_zero;
     if (is_unsigned) {
@@ -45210,14 +47821,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(ADIOS_DATATYPES) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(ADIOS_DATATYPES) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(ADIOS_DATATYPES) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(ADIOS_DATATYPES) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -45228,8 +47843,8 @@ bad:
     }
 }
 
-/* None */
-        #if CYTHON_CCOMPLEX
+/* Declarations */
+          #if CYTHON_CCOMPLEX
   #ifdef __cplusplus
     static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) {
       return ::std::complex< float >(x, y);
@@ -45248,61 +47863,86 @@ bad:
     }
 #endif
 
-/* None */
-        #if CYTHON_CCOMPLEX
+/* Arithmetic */
+          #if CYTHON_CCOMPLEX
 #else
-    static CYTHON_INLINE int __Pyx_c_eqf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
+    static CYTHON_INLINE int __Pyx_c_eq_float(__pyx_t_float_complex a, __pyx_t_float_complex b) {
        return (a.real == b.real) && (a.imag == b.imag);
     }
-    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sumf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
+    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sum_float(__pyx_t_float_complex a, __pyx_t_float_complex b) {
         __pyx_t_float_complex z;
         z.real = a.real + b.real;
         z.imag = a.imag + b.imag;
         return z;
     }
-    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_difff(__pyx_t_float_complex a, __pyx_t_float_complex b) {
+    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_diff_float(__pyx_t_float_complex a, __pyx_t_float_complex b) {
         __pyx_t_float_complex z;
         z.real = a.real - b.real;
         z.imag = a.imag - b.imag;
         return z;
     }
-    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prodf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
+    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prod_float(__pyx_t_float_complex a, __pyx_t_float_complex b) {
         __pyx_t_float_complex z;
         z.real = a.real * b.real - a.imag * b.imag;
         z.imag = a.real * b.imag + a.imag * b.real;
         return z;
     }
-    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quotf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
-        __pyx_t_float_complex z;
-        float denom = b.real * b.real + b.imag * b.imag;
-        z.real = (a.real * b.real + a.imag * b.imag) / denom;
-        z.imag = (a.imag * b.real - a.real * b.imag) / denom;
-        return z;
+    #if 1
+    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quot_float(__pyx_t_float_complex a, __pyx_t_float_complex b) {
+        if (b.imag == 0) {
+            return __pyx_t_float_complex_from_parts(a.real / b.real, a.imag / b.real);
+        } else if (fabsf(b.real) >= fabsf(b.imag)) {
+            if (b.real == 0 && b.imag == 0) {
+                return __pyx_t_float_complex_from_parts(a.real / b.real, a.imag / b.imag);
+            } else {
+                float r = b.imag / b.real;
+                float s = 1.0 / (b.real + b.imag * r);
+                return __pyx_t_float_complex_from_parts(
+                    (a.real + a.imag * r) * s, (a.imag - a.real * r) * s);
+            }
+        } else {
+            float r = b.real / b.imag;
+            float s = 1.0 / (b.imag + b.real * r);
+            return __pyx_t_float_complex_from_parts(
+                (a.real * r + a.imag) * s, (a.imag * r - a.real) * s);
+        }
+    }
+    #else
+    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quot_float(__pyx_t_float_complex a, __pyx_t_float_complex b) {
+        if (b.imag == 0) {
+            return __pyx_t_float_complex_from_parts(a.real / b.real, a.imag / b.real);
+        } else {
+            float denom = b.real * b.real + b.imag * b.imag;
+            return __pyx_t_float_complex_from_parts(
+                (a.real * b.real + a.imag * b.imag) / denom,
+                (a.imag * b.real - a.real * b.imag) / denom);
+        }
     }
-    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_negf(__pyx_t_float_complex a) {
+    #endif
+    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_neg_float(__pyx_t_float_complex a) {
         __pyx_t_float_complex z;
         z.real = -a.real;
         z.imag = -a.imag;
         return z;
     }
-    static CYTHON_INLINE int __Pyx_c_is_zerof(__pyx_t_float_complex a) {
+    static CYTHON_INLINE int __Pyx_c_is_zero_float(__pyx_t_float_complex a) {
        return (a.real == 0) && (a.imag == 0);
     }
-    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conjf(__pyx_t_float_complex a) {
+    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conj_float(__pyx_t_float_complex a) {
         __pyx_t_float_complex z;
         z.real =  a.real;
         z.imag = -a.imag;
         return z;
     }
     #if 1
-        static CYTHON_INLINE float __Pyx_c_absf(__pyx_t_float_complex z) {
+        static CYTHON_INLINE float __Pyx_c_abs_float(__pyx_t_float_complex z) {
           #if !defined(HAVE_HYPOT) || defined(_MSC_VER)
             return sqrtf(z.real*z.real + z.imag*z.imag);
           #else
             return hypotf(z.real, z.imag);
           #endif
         }
-        static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_powf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
+        static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_pow_float(__pyx_t_float_complex a, __pyx_t_float_complex b) {
             __pyx_t_float_complex z;
             float r, lnr, theta, z_r, z_theta;
             if (b.imag == 0 && b.real == (int)b.real) {
@@ -45320,24 +47960,32 @@ bad:
                     case 1:
                         return a;
                     case 2:
-                        z = __Pyx_c_prodf(a, a);
-                        return __Pyx_c_prodf(a, a);
+                        z = __Pyx_c_prod_float(a, a);
+                        return __Pyx_c_prod_float(a, a);
                     case 3:
-                        z = __Pyx_c_prodf(a, a);
-                        return __Pyx_c_prodf(z, a);
+                        z = __Pyx_c_prod_float(a, a);
+                        return __Pyx_c_prod_float(z, a);
                     case 4:
-                        z = __Pyx_c_prodf(a, a);
-                        return __Pyx_c_prodf(z, z);
+                        z = __Pyx_c_prod_float(a, a);
+                        return __Pyx_c_prod_float(z, z);
                 }
             }
             if (a.imag == 0) {
                 if (a.real == 0) {
                     return a;
+                } else if (b.imag == 0) {
+                    z.real = powf(a.real, b.real);
+                    z.imag = 0;
+                    return z;
+                } else if (a.real > 0) {
+                    r = a.real;
+                    theta = 0;
+                } else {
+                    r = -a.real;
+                    theta = atan2f(0, -1);
                 }
-                r = a.real;
-                theta = 0;
             } else {
-                r = __Pyx_c_absf(a);
+                r = __Pyx_c_abs_float(a);
                 theta = atan2f(a.imag, a.real);
             }
             lnr = logf(r);
@@ -45350,8 +47998,8 @@ bad:
     #endif
 #endif
 
-/* None */
-        #if CYTHON_CCOMPLEX
+/* Declarations */
+          #if CYTHON_CCOMPLEX
   #ifdef __cplusplus
     static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) {
       return ::std::complex< double >(x, y);
@@ -45370,61 +48018,86 @@ bad:
     }
 #endif
 
-/* None */
-        #if CYTHON_CCOMPLEX
+/* Arithmetic */
+          #if CYTHON_CCOMPLEX
 #else
-    static CYTHON_INLINE int __Pyx_c_eq(__pyx_t_double_complex a, __pyx_t_double_complex b) {
+    static CYTHON_INLINE int __Pyx_c_eq_double(__pyx_t_double_complex a, __pyx_t_double_complex b) {
        return (a.real == b.real) && (a.imag == b.imag);
     }
-    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum(__pyx_t_double_complex a, __pyx_t_double_complex b) {
+    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum_double(__pyx_t_double_complex a, __pyx_t_double_complex b) {
         __pyx_t_double_complex z;
         z.real = a.real + b.real;
         z.imag = a.imag + b.imag;
         return z;
     }
-    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff(__pyx_t_double_complex a, __pyx_t_double_complex b) {
+    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff_double(__pyx_t_double_complex a, __pyx_t_double_complex b) {
         __pyx_t_double_complex z;
         z.real = a.real - b.real;
         z.imag = a.imag - b.imag;
         return z;
     }
-    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod(__pyx_t_double_complex a, __pyx_t_double_complex b) {
+    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod_double(__pyx_t_double_complex a, __pyx_t_double_complex b) {
         __pyx_t_double_complex z;
         z.real = a.real * b.real - a.imag * b.imag;
         z.imag = a.real * b.imag + a.imag * b.real;
         return z;
     }
-    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot(__pyx_t_double_complex a, __pyx_t_double_complex b) {
-        __pyx_t_double_complex z;
-        double denom = b.real * b.real + b.imag * b.imag;
-        z.real = (a.real * b.real + a.imag * b.imag) / denom;
-        z.imag = (a.imag * b.real - a.real * b.imag) / denom;
-        return z;
+    #if 1
+    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot_double(__pyx_t_double_complex a, __pyx_t_double_complex b) {
+        if (b.imag == 0) {
+            return __pyx_t_double_complex_from_parts(a.real / b.real, a.imag / b.real);
+        } else if (fabs(b.real) >= fabs(b.imag)) {
+            if (b.real == 0 && b.imag == 0) {
+                return __pyx_t_double_complex_from_parts(a.real / b.real, a.imag / b.imag);
+            } else {
+                double r = b.imag / b.real;
+                double s = 1.0 / (b.real + b.imag * r);
+                return __pyx_t_double_complex_from_parts(
+                    (a.real + a.imag * r) * s, (a.imag - a.real * r) * s);
+            }
+        } else {
+            double r = b.real / b.imag;
+            double s = 1.0 / (b.imag + b.real * r);
+            return __pyx_t_double_complex_from_parts(
+                (a.real * r + a.imag) * s, (a.imag * r - a.real) * s);
+        }
     }
-    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg(__pyx_t_double_complex a) {
+    #else
+    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot_double(__pyx_t_double_complex a, __pyx_t_double_complex b) {
+        if (b.imag == 0) {
+            return __pyx_t_double_complex_from_parts(a.real / b.real, a.imag / b.real);
+        } else {
+            double denom = b.real * b.real + b.imag * b.imag;
+            return __pyx_t_double_complex_from_parts(
+                (a.real * b.real + a.imag * b.imag) / denom,
+                (a.imag * b.real - a.real * b.imag) / denom);
+        }
+    }
+    #endif
+    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg_double(__pyx_t_double_complex a) {
         __pyx_t_double_complex z;
         z.real = -a.real;
         z.imag = -a.imag;
         return z;
     }
-    static CYTHON_INLINE int __Pyx_c_is_zero(__pyx_t_double_complex a) {
+    static CYTHON_INLINE int __Pyx_c_is_zero_double(__pyx_t_double_complex a) {
        return (a.real == 0) && (a.imag == 0);
     }
-    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj(__pyx_t_double_complex a) {
+    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj_double(__pyx_t_double_complex a) {
         __pyx_t_double_complex z;
         z.real =  a.real;
         z.imag = -a.imag;
         return z;
     }
     #if 1
-        static CYTHON_INLINE double __Pyx_c_abs(__pyx_t_double_complex z) {
+        static CYTHON_INLINE double __Pyx_c_abs_double(__pyx_t_double_complex z) {
           #if !defined(HAVE_HYPOT) || defined(_MSC_VER)
             return sqrt(z.real*z.real + z.imag*z.imag);
           #else
             return hypot(z.real, z.imag);
           #endif
         }
-        static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow(__pyx_t_double_complex a, __pyx_t_double_complex b) {
+        static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow_double(__pyx_t_double_complex a, __pyx_t_double_complex b) {
             __pyx_t_double_complex z;
             double r, lnr, theta, z_r, z_theta;
             if (b.imag == 0 && b.real == (int)b.real) {
@@ -45442,24 +48115,32 @@ bad:
                     case 1:
                         return a;
                     case 2:
-                        z = __Pyx_c_prod(a, a);
-                        return __Pyx_c_prod(a, a);
+                        z = __Pyx_c_prod_double(a, a);
+                        return __Pyx_c_prod_double(a, a);
                     case 3:
-                        z = __Pyx_c_prod(a, a);
-                        return __Pyx_c_prod(z, a);
+                        z = __Pyx_c_prod_double(a, a);
+                        return __Pyx_c_prod_double(z, a);
                     case 4:
-                        z = __Pyx_c_prod(a, a);
-                        return __Pyx_c_prod(z, z);
+                        z = __Pyx_c_prod_double(a, a);
+                        return __Pyx_c_prod_double(z, z);
                 }
             }
             if (a.imag == 0) {
                 if (a.real == 0) {
                     return a;
+                } else if (b.imag == 0) {
+                    z.real = pow(a.real, b.real);
+                    z.imag = 0;
+                    return z;
+                } else if (a.real > 0) {
+                    r = a.real;
+                    theta = 0;
+                } else {
+                    r = -a.real;
+                    theta = atan2(0, -1);
                 }
-                r = a.real;
-                theta = 0;
             } else {
-                r = __Pyx_c_abs(a);
+                r = __Pyx_c_abs_double(a);
                 theta = atan2(a.imag, a.real);
             }
             lnr = log(r);
@@ -45473,7 +48154,7 @@ bad:
 #endif
 
 /* CIntToPy */
-        static CYTHON_INLINE PyObject* __Pyx_PyInt_From_enum__NPY_TYPES(enum NPY_TYPES value) {
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_enum__NPY_TYPES(enum NPY_TYPES value) {
     const enum NPY_TYPES neg_one = (enum NPY_TYPES) -1, const_zero = (enum NPY_TYPES) 0;
     const int is_unsigned = neg_one > const_zero;
     if (is_unsigned) {
@@ -45481,14 +48162,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(enum NPY_TYPES) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(enum NPY_TYPES) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(enum NPY_TYPES) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(enum NPY_TYPES) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -45500,7 +48185,7 @@ bad:
 }
 
 /* CIntFromPy */
-        static CYTHON_INLINE int64_t __Pyx_PyInt_As_int64_t(PyObject *x) {
+          static CYTHON_INLINE int64_t __Pyx_PyInt_As_int64_t(PyObject *x) {
     const int64_t neg_one = (int64_t) -1, const_zero = (int64_t) 0;
     const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
@@ -45567,8 +48252,10 @@ bad:
 #endif
             if (sizeof(int64_t) <= sizeof(unsigned long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(int64_t, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(int64_t) <= sizeof(unsigned PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(int64_t, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
             }
         } else {
 #if CYTHON_USE_PYLONG_INTERNALS
@@ -45635,8 +48322,10 @@ bad:
 #endif
             if (sizeof(int64_t) <= sizeof(long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(int64_t, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(int64_t) <= sizeof(PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(int64_t, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -45685,7 +48374,7 @@ raise_neg_overflow:
 }
 
 /* CIntFromPy */
-        static CYTHON_INLINE uint64_t __Pyx_PyInt_As_uint64_t(PyObject *x) {
+          static CYTHON_INLINE uint64_t __Pyx_PyInt_As_uint64_t(PyObject *x) {
     const uint64_t neg_one = (uint64_t) -1, const_zero = (uint64_t) 0;
     const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
@@ -45752,8 +48441,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(uint64_t) <= sizeof(unsigned long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(uint64_t, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(uint64_t) <= sizeof(unsigned PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(uint64_t, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
             }
         } else {
 #if CYTHON_USE_PYLONG_INTERNALS
@@ -45820,8 +48511,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(uint64_t) <= sizeof(long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(uint64_t, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(uint64_t) <= sizeof(PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(uint64_t, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -45870,7 +48563,7 @@ raise_neg_overflow:
 }
 
 /* CIntFromPy */
-        static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
+          static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
     const int neg_one = (int) -1, const_zero = (int) 0;
     const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
@@ -45937,8 +48630,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(int) <= sizeof(unsigned long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
             }
         } else {
 #if CYTHON_USE_PYLONG_INTERNALS
@@ -46005,8 +48700,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(int) <= sizeof(long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -46055,7 +48752,7 @@ raise_neg_overflow:
 }
 
 /* CIntFromPy */
-        static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {
+          static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {
     const long neg_one = (long) -1, const_zero = (long) 0;
     const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
@@ -46122,8 +48819,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(long) <= sizeof(unsigned long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
             }
         } else {
 #if CYTHON_USE_PYLONG_INTERNALS
@@ -46190,8 +48889,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(long) <= sizeof(long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -46240,7 +48941,7 @@ raise_neg_overflow:
 }
 
 /* CIntFromPy */
-        static CYTHON_INLINE ADIOS_DATATYPES __Pyx_PyInt_As_ADIOS_DATATYPES(PyObject *x) {
+          static CYTHON_INLINE ADIOS_DATATYPES __Pyx_PyInt_As_ADIOS_DATATYPES(PyObject *x) {
     const ADIOS_DATATYPES neg_one = (ADIOS_DATATYPES) -1, const_zero = (ADIOS_DATATYPES) 0;
     const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
@@ -46307,8 +49008,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(ADIOS_DATATYPES) <= sizeof(unsigned long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(ADIOS_DATATYPES, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(ADIOS_DATATYPES) <= sizeof(unsigned PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(ADIOS_DATATYPES, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
             }
         } else {
 #if CYTHON_USE_PYLONG_INTERNALS
@@ -46375,8 +49078,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(ADIOS_DATATYPES) <= sizeof(long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(ADIOS_DATATYPES, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(ADIOS_DATATYPES) <= sizeof(PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(ADIOS_DATATYPES, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -46425,7 +49130,7 @@ raise_neg_overflow:
 }
 
 /* CIntFromPy */
-        static CYTHON_INLINE ADIOS_LOCKMODE __Pyx_PyInt_As_ADIOS_LOCKMODE(PyObject *x) {
+          static CYTHON_INLINE ADIOS_LOCKMODE __Pyx_PyInt_As_ADIOS_LOCKMODE(PyObject *x) {
     const ADIOS_LOCKMODE neg_one = (ADIOS_LOCKMODE) -1, const_zero = (ADIOS_LOCKMODE) 0;
     const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
@@ -46492,8 +49197,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(ADIOS_LOCKMODE) <= sizeof(unsigned long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(ADIOS_LOCKMODE, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(ADIOS_LOCKMODE) <= sizeof(unsigned PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(ADIOS_LOCKMODE, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
             }
         } else {
 #if CYTHON_USE_PYLONG_INTERNALS
@@ -46560,8 +49267,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(ADIOS_LOCKMODE) <= sizeof(long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(ADIOS_LOCKMODE, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(ADIOS_LOCKMODE) <= sizeof(PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(ADIOS_LOCKMODE, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -46610,7 +49319,7 @@ raise_neg_overflow:
 }
 
 /* CIntFromPy */
-        static CYTHON_INLINE ADIOS_READ_METHOD __Pyx_PyInt_As_ADIOS_READ_METHOD(PyObject *x) {
+          static CYTHON_INLINE ADIOS_READ_METHOD __Pyx_PyInt_As_ADIOS_READ_METHOD(PyObject *x) {
     const ADIOS_READ_METHOD neg_one = (ADIOS_READ_METHOD) -1, const_zero = (ADIOS_READ_METHOD) 0;
     const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
@@ -46677,8 +49386,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(ADIOS_READ_METHOD) <= sizeof(unsigned long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(ADIOS_READ_METHOD, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(ADIOS_READ_METHOD) <= sizeof(unsigned PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(ADIOS_READ_METHOD, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
             }
         } else {
 #if CYTHON_USE_PYLONG_INTERNALS
@@ -46745,8 +49456,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(ADIOS_READ_METHOD) <= sizeof(long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(ADIOS_READ_METHOD, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(ADIOS_READ_METHOD) <= sizeof(PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(ADIOS_READ_METHOD, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -46795,7 +49508,7 @@ raise_neg_overflow:
 }
 
 /* CheckBinaryVersion */
-        static int __Pyx_check_binary_version(void) {
+          static int __Pyx_check_binary_version(void) {
     char ctversion[4], rtversion[4];
     PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION);
     PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion());
@@ -46811,7 +49524,7 @@ raise_neg_overflow:
 }
 
 /* ModuleImport */
-        #ifndef __PYX_HAVE_RT_ImportModule
+          #ifndef __PYX_HAVE_RT_ImportModule
 #define __PYX_HAVE_RT_ImportModule
 static PyObject *__Pyx_ImportModule(const char *name) {
     PyObject *py_name = 0;
@@ -46829,7 +49542,7 @@ bad:
 #endif
 
 /* TypeImport */
-        #ifndef __PYX_HAVE_RT_ImportType
+          #ifndef __PYX_HAVE_RT_ImportType
 #define __PYX_HAVE_RT_ImportType
 static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name,
     size_t size, int strict)
@@ -46894,7 +49607,7 @@ bad:
 #endif
 
 /* InitStrings */
-        static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) {
+          static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) {
     while (t->p) {
         #if PY_MAJOR_VERSION < 3
         if (t->is_unicode) {
@@ -46995,7 +49708,9 @@ static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) {
    else return PyObject_IsTrue(x);
 }
 static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x) {
+#if CYTHON_USE_TYPE_SLOTS
   PyNumberMethods *m;
+#endif
   const char *name = NULL;
   PyObject *res = NULL;
 #if PY_MAJOR_VERSION < 3
@@ -47004,8 +49719,9 @@ static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x) {
   if (PyLong_Check(x))
 #endif
     return __Pyx_NewRef(x);
+#if CYTHON_USE_TYPE_SLOTS
   m = Py_TYPE(x)->tp_as_number;
-#if PY_MAJOR_VERSION < 3
+  #if PY_MAJOR_VERSION < 3
   if (m && m->nb_int) {
     name = "int";
     res = PyNumber_Int(x);
@@ -47014,11 +49730,14 @@ static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x) {
     name = "long";
     res = PyNumber_Long(x);
   }
-#else
+  #else
   if (m && m->nb_int) {
     name = "int";
     res = PyNumber_Long(x);
   }
+  #endif
+#else
+  res = PyNumber_Int(x);
 #endif
   if (res) {
 #if PY_MAJOR_VERSION < 3
diff --git a/wrappers/numpy/adios_mpi.pyx b/wrappers/numpy/adios_mpi.pyx
index b8fb588..60884ec 100644
--- a/wrappers/numpy/adios_mpi.pyx
+++ b/wrappers/numpy/adios_mpi.pyx
@@ -19,6 +19,8 @@ cimport mpi4py.MPI as MPI
 import cython
 cimport cython
 
+import tempfile
+
 from libc.stdlib cimport malloc, free
 from cpython.string cimport PyString_AsString
 from cpython.bytes cimport PyBytes_AsString, PyBytes_AS_STRING
@@ -177,22 +179,22 @@ cdef extern from "adios.h":
 
     cdef int adios_define_var_timescale (const char * timescale , int64_t group_id ,
                                          const char * name)
-    
+
     cdef int adios_define_var_timeseriesformat (const char * timeseries , int64_t group_id ,
                                                 const char * name)
-    
+
     cdef int adios_define_var_hyperslab (const char * hyperslab , int64_t group_id ,
                                          const char * name)
-    
+
     cdef int adios_define_mesh_timevarying (const char * timevarying , int64_t group_id ,
                                             const char * name)
-    
+
     cdef int adios_define_mesh_timesteps (const char * timesteps , int64_t group_id ,
                                           const char * name)
-    
+
     cdef int adios_define_mesh_timescale (const char * timescale , int64_t group_id ,
                                          const char * name)
-    
+
     cdef int adios_define_mesh_timeseriesformat (const char * timeseries , int64_t group_id ,
                                                  const char * name)
 
@@ -204,21 +206,21 @@ cdef extern from "adios.h":
                                    int64_t group_id,
                                    const char * name
                                   )
-    
+
     cdef int adios_define_mesh_rectilinear (char * dimensions,
                                        char * coordinates,
                                        char * nspace,
                                        int64_t group_id,
                                        const char * name
-                                      ) 
-    
+                                      )
+
     cdef int adios_define_mesh_structured (char * dimensions,
                                       char * points,
                                       char * nspace,
                                       int64_t group_id,
                                       const char * name
                                      )
-    
+
     cdef int adios_define_mesh_unstructured (char * points,
                                         char * data,
                                         char * count,
@@ -229,7 +231,7 @@ cdef extern from "adios.h":
                                         const char * name
                                        )
 
-    ### Bis hier 
+    ### Bis hier
 
     cdef int adios_define_attribute (int64_t group,
                                      char * name,
@@ -429,6 +431,12 @@ class LOCKMODE:
     CURRENT = 1
     ALL =2
 
+class STATISTICS:
+    NONE = adios_stat_no
+    MINMAX = adios_stat_minmax
+    FULL = adios_stat_full
+    DEFAULT = adios_stat_default
+
 cpdef __parse_index(index, ndim):
     # Fix index, handling ellipsis and incomplete slices.
     if not isinstance(index, tuple):
@@ -577,25 +585,25 @@ cpdef int define_var_timesteps (str timesteps, int64_t group_id, str name):
 
 cpdef int define_var_timescale (str timescale , int64_t group_id ,str name):
     return adios_define_var_timescale (s2b(timescale) , group_id ,s2b(name))
-                                         
+
 cpdef int define_var_timeseriesformat (str timeseries , int64_t group_id ,str name):
     return adios_define_var_timeseriesformat (s2b(timeseries) , group_id ,s2b(name))
-                                                
+
 cpdef int define_var_hyperslab (str hyperslab , int64_t group_id ,str name):
     return adios_define_var_hyperslab (s2b(hyperslab) , group_id ,s2b(name))
-                                         
+
 cpdef int define_mesh_timevarying (str timevarying , int64_t group_id ,str name):
     return adios_define_mesh_timevarying (s2b(timevarying) , group_id ,s2b(name))
-                                            
+
 cpdef int define_mesh_timesteps (str timesteps , int64_t group_id ,str name):
     return adios_define_mesh_timesteps (s2b(timesteps) , group_id ,s2b(name))
-                                          
+
 cpdef int define_mesh_timescale (str timescale , int64_t group_id ,str name):
     return adios_define_mesh_timescale (s2b(timescale) , group_id ,s2b(name))
-                                         
+
 cpdef int define_mesh_timeseriesformat (str timeseries , int64_t group_id ,str name):
     return adios_define_mesh_timeseriesformat (s2b(timeseries) , group_id ,s2b(name))
-                                                 
+
 cpdef int define_mesh_uniform (str dimensions,
                                    str origin,
                                    str spacing,
@@ -612,20 +620,20 @@ cpdef int define_mesh_uniform (str dimensions,
                                    group_id,
                                    s2b(name)
                                   )
-    
+
 cpdef int define_mesh_rectilinear (str dimensions,
                                        str coordinates,
                                        str nspace,
                                        int64_t group_id,
                                        str name
-                                      ): 
+                                      ):
     return adios_define_mesh_rectilinear (s2b(dimensions),
                                        s2b(coordinates),
                                        s2b(nspace),
                                        group_id,
                                        s2b(name)
-                                      ) 
-    
+                                      )
+
 cpdef int define_mesh_structured (str dimensions,
                                       str points,
                                       str nspace,
@@ -638,7 +646,7 @@ cpdef int define_mesh_structured (str dimensions,
                                       group_id,
                                       s2b(name)
                                      )
-    
+
 cpdef int define_mesh_unstructured (str points,
                                         str data,
                                         str count,
@@ -1916,6 +1924,7 @@ cdef class writer(object):
     cpdef bint is_noxml
     cpdef str mode
     cpdef MPI.Comm comm
+    cpdef int stats
 
     cpdef dict vars
     cpdef dict attrs
@@ -1960,17 +1969,21 @@ cdef class writer(object):
     def __init__(self, str fname,
                  bint is_noxml = True,
                  str mode = "w",
-                 MPI.Comm comm = MPI.COMM_WORLD):
+                 int stats = adios_stat_default,
+                 MPI.Comm comm = MPI.COMM_WORLD,
+                 str method = "POSIX1",
+                 str method_params = ""):
         self.gid = 0
         self.fname = fname
-        self.method = ""
-        self.method_params = ""
+        self.method = method
+        self.method_params = method_params
         self.is_noxml = is_noxml
         self.mode = mode
         self.comm = comm
         self.vars = dict()
         self.attrs = dict()
         self.timeaggregation_buffersize = 0
+        self.stats = stats
 
         init_noxml(comm)
     ##def __var_factory__(self, name, value):
@@ -1981,7 +1994,8 @@ cdef class writer(object):
 
     def declare_group(self, str gname = None,
                       str method = "POSIX1",
-                      str method_params = ""):
+                      str method_params = "",
+                      int stats = adios_stat_default):
         """
         Define a group associated with the file.
 
@@ -1989,6 +2003,7 @@ cdef class writer(object):
             gname (str): group name.
             method (str, optional): Adios write method (default: 'POSIX1')
             method_params (str, optional): parameters for the write method (default: '')
+            stats (int, optional): statistics (default: 'DEFAULT')
 
         Example:
 
@@ -1999,9 +2014,15 @@ cdef class writer(object):
             self.gname = gname
 
         if self.gname is None:
-            self.gname = "group"
+            rank = self.comm.Get_rank()
+            if rank == 0:
+                ftmp = tempfile.NamedTemporaryFile().name
+            else:
+                ftmp = ""
+            ftmp = self.comm.bcast(ftmp, root=0)
+            self.gname = 'group'+ftmp;
 
-        self.gid = declare_group(self.gname, "", adios_stat_default)
+        self.gid = declare_group(self.gname, "", stats)
         self.method = method
         self.method_params = method_params
         select_method(self.gid, self.method, self.method_params, "")
@@ -2084,9 +2105,9 @@ cdef class writer(object):
         Write variables and attributes to a file and close the writer.
         """
         if self.gid == 0:
-            self.declare_group()
+            self.declare_group(method=self.method, method_params=self.method_params, stats=self.stats)
 
-        fd = open(self.gname, self.fname, self.mode)
+        fd = open(self.gname, self.fname, self.mode, comm=self.comm)
 
         extra_vars = dict()
         extra_attrs = dict()
@@ -2229,7 +2250,8 @@ cdef class varinfo(object):
 
     def define(self, int64_t gid):
         if self.value is None:
-            raise TypeError("Value is none")
+            print ("Warning: skipping defining var(%r) with None value" %(self.name))
+            return
 
         ldim_ = self.ldim
         if isinstance(self.ldim, (tuple, list)):
@@ -2267,6 +2289,10 @@ cdef class varinfo(object):
 
     def write(self, int64_t fd):
         val_ = self.value
+
+        if val_ is None:
+            return
+
         if not isinstance(self.value, (np.ndarray)):
             val_ = np.array(self.value)
 
diff --git a/wrappers/numpy/adios_mpi2serial.sed b/wrappers/numpy/adios_mpi2serial.sed
index 7662b95..c80e0f2 100644
--- a/wrappers/numpy/adios_mpi2serial.sed
+++ b/wrappers/numpy/adios_mpi2serial.sed
@@ -16,3 +16,5 @@ s/comm.Clone()/comm/g
     int MPI_COMM_SELF/
 }
 s/adios_mpi/adios/g
+s/self.comm.Get_rank()/0/g
+s/self.comm.bcast(ftmp, root=0)/ftmp/g
diff --git a/wrappers/numpy/build-and-install.sh b/wrappers/numpy/build-and-install.sh
index 8de14d3..b644dc0 100755
--- a/wrappers/numpy/build-and-install.sh
+++ b/wrappers/numpy/build-and-install.sh
@@ -1,4 +1,6 @@
 #!/bin/bash -v
+export MACOSX_DEPLOYMENT_TARGET=10.11
+
 rm -rf ./build
 sed -f adios_mpi2serial.sed adios_mpi.pyx > adios.pyx
 cython -X embedsignature=True --cplus adios.pyx    
diff --git a/wrappers/numpy/doc/source/build.rst b/wrappers/numpy/doc/source/build.rst
index 8b4d31b..4a5b878 100644
--- a/wrappers/numpy/doc/source/build.rst
+++ b/wrappers/numpy/doc/source/build.rst
@@ -6,30 +6,52 @@ Installation
 Adios Python wrapper requires Adios built with the GNU C compiler with
 relocatable codes. Add -fPIC flag to CFLAGS before configuring Adios.
 
+::
+
+  $ ./configure --prefix=/dir/tp/install \
+            MPICC=mpicc MPICXX=mpicxx MPIFC=mpif90 \
+            CC=gcc CXX=g++ FC=gfortran \
+            CFLAGS="-fPIC"
+
+.. note:: Adios provides various functions (such as, staging, compression,
+          hdf5 conversion, etc) which can be turned with proper configure options.
+          Please check 'configure --help' for more options.
+
+::
+
+  $ ./configure --help
+
+
 Quick install with pip
 ----------------------
 
 ADIOS Python wrapper can be installed with pip. Check if pip is
 installed already. Otherwise, install pip first
 ::
-$ wget https://bootstrap.pypa.io/get-pip.py
-$ sudo python get-pip.py
+
+  $ wget https://bootstrap.pypa.io/get-pip.py
+  $ sudo python get-pip.py
+
+
 
 Or,
 ::
-$ python get-pip.py --user
+
+  $ python get-pip.py --user
 
 to install in a local directory, $HOME/.local
 
 Then, install Adios and Adios-MPI wrapper as follows:
 ::
-$ pip install adios
-$ pip install adios_mpi
+
+  $ pip install adios
+  $ pip install adios_mpi
 
 If you want to install in a custom directory, use the following:
 ::
-$ pip install --install-option="--prefix=$PREFIX" adios
-$ pip install --install-option="--prefix=$PREFIX" adios_mpi
+
+  $ pip install --install-option="--prefix=$PREFIX" adios
+  $ pip install --install-option="--prefix=$PREFIX" adios_mpi
 
 
 Trouble Shooting
@@ -41,8 +63,9 @@ Custom MPICC and MPICXX
 If one needs to use a custom MPICC and MPICXX command (e.g., Titan),
 then use the following command:
 ::
-$ pip --global-option=build_ext \
---global-option=--mpicc=cc --global-option=--mpicxx=CC adios
+
+  $ pip --global-option=build_ext \
+        --global-option=--mpicc=cc --global-option=--mpicxx=CC adios
 
 
 "Could not find any downloads that satisfy the requirement" with pip
@@ -50,6 +73,68 @@ $ pip --global-option=build_ext \
 
 If the error is caused by a certificate error, then, try
 ::
-$ wget http://curl.haxx.se/ca/cacert.pem
-$ pip --cert cacert.pem search adios
-$ pip --cert cacert.pem install adios
+
+  $ wget http://curl.haxx.se/ca/cacert.pem
+  $ pip --cert cacert.pem search adios
+  $ pip --cert cacert.pem install adios
+
+Custom MPI4py build
+^^^^^^^^^^^^^^^^^^^
+
+You may want to build mpi4py by yourself. The source code is available here[https://bitbucket.org/mpi4py/mpi4py/downloads/mpi4py-2.0.0.tar.gz]
+
+Then, run setup.py as follows:
+::
+  $ python setup.py build_ext --mpicc=cc --mpicxx=CC
+
+Install in a cutom location and set PYTHONPATH env:
+::
+  $ PREFIX=/dir/to/install
+  $ python setup.py install --prefix=$PREFIX
+  $ export PYTHONPATH=$PREFIX/lib/python2.7/site-packages:$PYTHONPATH
+
+
+Build script on Titan
+^^^^^^^^^^^^^^^^^^^^^
+
+The following script is a reference for building Adios python module on Titan:
+::
+  #!/bin/bash -ex
+  module unload PrgEnv-cray
+  module unload PrgEnv-pgi
+  module unload PrgEnv-intel
+  module unload PrgEnv-gnu
+  module unload python
+  module unload python_anaconda
+  module unload python_anaconda_mpi4py
+  module unload python_anaconda_adios
+
+  module load PrgEnv-gnu
+  module load python_anaconda
+  module load python_anaconda_mpi4py
+  module load adios/1.12-devel
+
+  git fetch origin
+  VER=`git describe --always`
+  PVER=1.11.1.post2
+
+  PREFIX=$WORLDWORK_CSC143/sw/python_anaconda_adios/$VER
+  PIP=`which pip`
+
+  [ ! -f cacert.pem ] && wget http://curl.haxx.se/ca/cacert.pem
+
+  $PIP install -I -U \
+      --global-option build_ext \
+      --global-option -lrt --install-option="--prefix=$PREFIX" \
+      --ignore-installed \
+      --cert cacert.pem \
+      adios==$PVER -v
+
+  $PIP install -I -U \
+      --global-option build_ext \
+      --global-option=--mpicc=cc \
+      --global-option=--mpicxx=CC \
+      --global-option -lrt --install-option="--prefix=$PREFIX" \
+      --ignore-installed \
+      --cert cacert.pem \
+      adios_mpi==$PVER -v
diff --git a/wrappers/numpy/doc/source/conf.py b/wrappers/numpy/doc/source/conf.py
index d2e70f2..3906d5e 100644
--- a/wrappers/numpy/doc/source/conf.py
+++ b/wrappers/numpy/doc/source/conf.py
@@ -59,9 +59,9 @@ author = u'Jong Choi (choij at ornl.gov)'
 # built documents.
 #
 # The short X.Y version.
-version = '1.8.0'
+version = '1.11.1'
 # The full version, including alpha/beta/rc tags.
-release = '1.8.1b3'
+release = '1.11.1.post1'
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
diff --git a/wrappers/numpy/doc/source/index.rst b/wrappers/numpy/doc/source/index.rst
index adfad2c..432bf54 100644
--- a/wrappers/numpy/doc/source/index.rst
+++ b/wrappers/numpy/doc/source/index.rst
@@ -17,6 +17,7 @@ Quick Start Guide
 
    quick
    build
+   gallery
    ref
 
 Indices and tables
diff --git a/wrappers/numpy/doc/source/quick.rst b/wrappers/numpy/doc/source/quick.rst
index 82f57bb..031542f 100644
--- a/wrappers/numpy/doc/source/quick.rst
+++ b/wrappers/numpy/doc/source/quick.rst
@@ -144,10 +144,9 @@ Then, we initialize Adios:
 
 >>> ad.init_noxml()
 
-Then, we give a file name to create and specify a group with Adios method:
+Then, we give a file name to create with Adios method:
 
->>> fw = ad.writer(fname)
->>> fw.declare_group('group', method='POSIX1')
+>>> fw = ad.writer(fname, method='POSIX1')
 
 "POSIX1" is one of many Adios's write methods. Others are "MPI",
 "MPI_AGGREGATE", "FLEXPATH", "DATASPACES", etc. More detailed
@@ -166,3 +165,22 @@ To write an attribute, we can do as follows:
 Finally, we let Adios to write a file by calling "close"
 
 >>> fw.close()
+
+Transform
+---------
+
+Adios provides transform methods for data reduction and compressions, such as ZFP, SZ, zlib, etc. For the full list, use ```adios_list_methods``` command.
+
+For an example, SZ transform method can be set by the following command:
+
+>>> fw['temperature'].transform = 'SZ'
+
+will compress temperature data with SZ with default parameters.
+
+Method specific parameters can be set like:
+
+>>> fw['temperature'].transform = 'SZ:errorBoundMode=ABS,absErrBound=1E-3'
+
+An example of ZFP is as follows:
+
+>>> fw['temperature'].transform = 'zfp:accuracy=0.001'
diff --git a/wrappers/numpy/example/staging/adios_read_mpi.py b/wrappers/numpy/example/staging/adios_read_mpi.py
index fede8fb..35d9dc3 100644
--- a/wrappers/numpy/example/staging/adios_read_mpi.py
+++ b/wrappers/numpy/example/staging/adios_read_mpi.py
@@ -22,15 +22,16 @@ print ">>> Method:", method, init
 ad.read_init(method, parameters=init)
 
 f = ad.file("temp.bp", method, is_stream=True, timeout_sec = 10.0)
-f.printself()
+print f
 
 i = 0
 while True:
     print ">>> step:", i
     v = f.var['temperature']
-    v.printself()
+    print v
 
-    val = v.read(nsteps=1)
+    #val = v.read(nsteps=1)
+    val = v[1:2, 1:5]
     print val
 
     if (f.advance() < 0):
diff --git a/wrappers/numpy/src/__init__.py b/wrappers/numpy/src/__init__.py
index 415bfcc..59eaace 100644
--- a/wrappers/numpy/src/__init__.py
+++ b/wrappers/numpy/src/__init__.py
@@ -1,2 +1,2 @@
 from .adios import *
-__version__ = '1.11.0b1'
+__version__ = '1.11.1.post1'
diff --git a/wrappers/numpy/src_mpi/__init__.py b/wrappers/numpy/src_mpi/__init__.py
index bb65a2d..4c1d0d0 100644
--- a/wrappers/numpy/src_mpi/__init__.py
+++ b/wrappers/numpy/src_mpi/__init__.py
@@ -1,2 +1,2 @@
 from .adios_mpi import *
-__version__ = '1.11.0b1'
+__version__ = '1.11.1.post1'
diff --git a/wrappers/numpy/test/test_adios_writer_unittest.py b/wrappers/numpy/test/test_adios_writer_unittest.py
index 5bc17a2..72e9c1e 100644
--- a/wrappers/numpy/test/test_adios_writer_unittest.py
+++ b/wrappers/numpy/test/test_adios_writer_unittest.py
@@ -21,8 +21,7 @@ class AdiosTestCase(ut.TestCase):
         val1 = np.array(list(range(NX)), dtype=np.int32)
         val2 = np.array(list(range(5)), dtype='f8')
 
-        fw = ad.writer(self.temp.path)
-        fw.declare_group("group", method="POSIX1")
+        fw = ad.writer(self.temp.path, method="POSIX1")
 
         fw.define_var("NX")
         fw.define_var("val1", "NX")
@@ -54,8 +53,7 @@ class AdiosTestCase(ut.TestCase):
         unicode_string = u"unicode"
         bytes_string = u"bytes"
 
-        fw = ad.writer(self.temp.path)
-        fw.declare_group("group", method="POSIX1")
+        fw = ad.writer(self.temp.path, method="POSIX1")
 
         fw.define_attr("single_string")
         fw.define_attr("three_string")
@@ -96,8 +94,7 @@ class AdiosTestCase(ut.TestCase):
         val1 = np.array(list(range(NX)), dtype=np.int32)
         val2 = np.array(list(range(5)), dtype='f8')
 
-        fw = ad.writer(self.temp.path)
-        fw.declare_group("group", method="POSIX1")
+        fw = ad.writer(self.temp.path, method="POSIX1")
 
         fw['NX'] = NX
         fw['val1'] = val1
@@ -116,8 +113,7 @@ class AdiosTestCase(ut.TestCase):
         val1 = np.array(list(range(NX)), dtype=np.int32)
         val2 = np.array(list(range(5)), dtype='f8')
 
-        fw = ad.writer(self.temp.path)
-        fw.declare_group("group", method="POSIX1")
+        fw = ad.writer(self.temp.path, method="POSIX1")
 
         fw.vars['NX'] = NX
         fw.vars['val1'] = val1
@@ -131,7 +127,7 @@ class AdiosTestCase(ut.TestCase):
 
     def test_writer_default_group(self):
         self.temp = TempFile()
-        fw = ad.writer(self.temp.path)
+        fw = ad.writer(self.temp.path, method="POSIX1")
         fw.close()
 
         f = ad.file(self.temp.path)
@@ -140,8 +136,7 @@ class AdiosTestCase(ut.TestCase):
     def test_writer_varname(self):
         self.temp = TempFile()
 
-        fw = ad.writer(self.temp.path)
-        fw.declare_group("group", method="POSIX1")
+        fw = ad.writer(self.temp.path, method="POSIX1")
 
         NVARS = 99
         fw.vars['nvars'] = NVARS
@@ -160,8 +155,7 @@ class AdiosTestCase(ut.TestCase):
         val1 = np.array(list(range(NX)), dtype=np.int32)
         val2 = np.array(list(range(5)), dtype='f8')
 
-        fw = ad.writer(self.temp.path)
-        fw.declare_group("group", method="POSIX1")
+        fw = ad.writer(self.temp.path, method="POSIX1")
 
         fw['NX'] = NX
         fw['val1'] = val1
@@ -181,8 +175,7 @@ class AdiosTestCase(ut.TestCase):
         val1 = np.array(list(range(NX)), dtype=np.int32)
         val2 = np.array(list(range(5)), dtype='f8')
 
-        fw = ad.writer(self.temp.path)
-        fw.declare_group("group", method="POSIX1")
+        fw = ad.writer(self.temp.path, method="POSIX1")
         fw.set_time_aggregation(3200)
 
         fw['NX'] = NX
@@ -196,5 +189,29 @@ class AdiosTestCase(ut.TestCase):
         self.assertTrue((f['val1'][:] == val1).all())
         self.assertTrue((f['val2'][:] == val2).all())
 
+    def test_writer_empty_define_(self):
+        self.temp = TempFile()
+
+        NX = 10
+        val1 = np.array(list(range(NX)), dtype=np.int32)
+        val2 = np.array(list(range(5)), dtype='f8')
+
+        fw = ad.writer(self.temp.path, method="POSIX1")
+
+        fw.define_var("NX")
+        fw.define_var("val1", "NX")
+        fw.define_var("val2", val2.shape)
+        fw.define_var("extra")
+
+        fw['NX'] = NX
+        fw['val1'] = val1
+        fw['val2'] = val2
+        fw.close()
+
+        f = ad.file(self.temp.path)
+        self.assertEqual(f['NX'][...], NX)
+        self.assertTrue((f['val1'][:] == val1).all())
+        self.assertTrue((f['val2'][:] == val2).all())
+
 if __name__ == '__main__':
     ut.main()
diff --git a/wrappers/numpy/tests/test_adios_mpi_writer.py b/wrappers/numpy/tests/test_adios_mpi_writer.py
index 8f44e0c..d6ff9fe 100644
--- a/wrappers/numpy/tests/test_adios_mpi_writer.py
+++ b/wrappers/numpy/tests/test_adios_mpi_writer.py
@@ -30,8 +30,8 @@ print("\n>>> Writing ... (rank = %d)\n" % rank)
 ad.init_noxml()
 ad.set_max_buffer_size (100);
 
-fw = ad.writer(fname, comm=comm)
-fw.declare_group('group', method='MPI')
+fw = ad.writer(fname, comm=comm, method='MPI')
+#fw.declare_group('group', method='MPI', stats=ad.STATISTICS.FULL)
 #fw.define_var('temperature', ldim=(1,NX), gdim=gdim, offset=offset, transform='zfp:accuracy=0.0001')
 #fw.define_var('temperature', ldim=(1,NX), gdim=gdim, offset=offset, transform='zlib')
 fw.define_var('temperature', ldim=ldim, gdim=gdim, offset=offset, transform='none')
diff --git a/wrappers/numpy/tests/test_adios_writer.py b/wrappers/numpy/tests/test_adios_writer.py
index 35be3d9..9185a36 100644
--- a/wrappers/numpy/tests/test_adios_writer.py
+++ b/wrappers/numpy/tests/test_adios_writer.py
@@ -20,8 +20,7 @@ print("\n>>> Writing ...\n")
 ad.init_noxml()
 ad.set_max_buffer_size (10)
 
-fw = ad.writer(fname)
-fw.declare_group('group', method='POSIX1')
+fw = ad.writer(fname, method='POSIX1')
 
 fw['NX'] = NX
 fw['size'] = size

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/adios.git



More information about the debian-science-commits mailing list