#!/usr/bin/env python

"""Simple benchmark for testing chunkshapes and nrowsinbuf."""

import numpy, tables
from time import time

L = 20
N = 2000
M = 30
complevel = 1

recarray = numpy.empty(shape=2, dtype='(2,2,2)i4,(2,3,3)f8,i4,i8')

f = tables.openFile("chunkshape.h5", mode = "w")

# t = f.createTable(f.root, 'table', recarray, "mdim recarray")

# a0 = f.createArray(f.root, 'field0', recarray['f0'], "mdim int32 array")
# a1 = f.createArray(f.root, 'field1', recarray['f1'], "mdim float64 array")

# c0 = f.createCArray(f.root, 'cfield0',
#                     tables.Int32Atom(), (2,2,2),
#                     "mdim int32 carray")
# c1 = f.createCArray(f.root, 'cfield1',
#                     tables.Float64Atom(), (2,3,3),
#                     "mdim float64 carray")

f1 = tables.openFile("chunkshape1.h5", mode = "w")
c1 = f.createCArray(f1.root, 'cfield1',
                    tables.Int32Atom(), (L, N, M),
                    "scalar int32 carray", tables.Filters(complevel=0))

t1=time()
c1[:] = numpy.empty(shape=(L,1,1), dtype="int32")
print "carray1 populate time:", time()-t1
f1.close()


f2 = tables.openFile("chunkshape2.h5", mode = "w")
c2 = f.createCArray(f2.root, 'cfield2',
                    tables.Int32Atom(), (L, M, N),
                    "scalar int32 carray", tables.Filters(complevel))

t1=time()
c2[:] = numpy.empty(shape=(L,1,1), dtype="int32")
print "carray2 populate time:", time()-t1
f2.close()

f0 = tables.openFile("chunkshape0.h5", mode = "w")
e0 = f.createEArray(f0.root, 'efield0',
                    tables.Int32Atom(), (0, L, M),
                    "scalar int32 carray", tables.Filters(complevel),
                    expectedrows=N)

t1=time()
e0.append(numpy.empty(shape=(N, L, M), dtype="int32"))
print "earray0 populate time:", time()-t1
f0.close()

f1 = tables.openFile("chunkshape1.h5", mode = "w")
e1 = f.createEArray(f1.root, 'efield1',
                    tables.Int32Atom(), (L, 0, M),
                    "scalar int32 carray", tables.Filters(complevel),
                    expectedrows=N)

t1=time()
e1.append(numpy.empty(shape=(L, N, M), dtype="int32"))
print "earray1 populate time:", time()-t1
f1.close()


f2 = tables.openFile("chunkshape2.h5", mode = "w")
e2 = f.createEArray(f2.root, 'efield2',
                    tables.Int32Atom(), (L, M, 0),
                    "scalar int32 carray", tables.Filters(complevel),
                    expectedrows=N)

t1=time()
e2.append(numpy.empty(shape=(L, M, N), dtype="int32"))
print "earray2 populate time:", time()-t1
f2.close()

# t1=time()
# c2[:] = numpy.empty(shape=(M, N), dtype="int32")
# print "carray populate time:", time()-t1

# f3 = f.createCArray(f.root, 'cfield3',
#                     tables.Float64Atom(), (3,),
#                     "scalar float64 carray", chunkshape=(32,))

# e2 = f.createEArray(f.root, 'efield2',
#                     tables.Int32Atom(), (0, M),
#                     "scalar int32 carray", expectedrows=N)
# t1=time()
# e2.append(numpy.empty(shape=(N, M), dtype="int32"))
# print "earray populate time:", time()-t1

# t1=time()
# c2._f_copy(newname='cfield2bis')
# print "carray copy time:", time()-t1
# t1=time()
# e2._f_copy(newname='efield2bis')
# print "earray copy time:", time()-t1

f.close()
