1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161
|
import os
from abc import ABCMeta, abstractmethod
import numpy as np
from h5py import File
from hdmf.array import SortedArray, LinSpace
from hdmf.query import HDMFDataset, Query
from hdmf.testing import TestCase
class AbstractQueryMixin(metaclass=ABCMeta):
@abstractmethod
def getDataset(self):
raise NotImplementedError('Cannot run test unless getDataset is implemented')
def setUp(self):
self.dset = self.getDataset()
self.wrapper = HDMFDataset(self.dset)
def test_get_dataset(self):
array = self.wrapper.dataset
self.assertIsInstance(array, SortedArray)
def test___gt__(self):
'''
Test wrapper greater than magic method
'''
q = self.wrapper > 5
self.assertIsInstance(q, Query)
result = q.evaluate()
expected = [False, False, False, False, False,
False, True, True, True, True]
expected = slice(6, 10)
self.assertEqual(result, expected)
def test___ge__(self):
'''
Test wrapper greater than or equal magic method
'''
q = self.wrapper >= 5
self.assertIsInstance(q, Query)
result = q.evaluate()
expected = [False, False, False, False, False,
True, True, True, True, True]
expected = slice(5, 10)
self.assertEqual(result, expected)
def test___lt__(self):
'''
Test wrapper less than magic method
'''
q = self.wrapper < 5
self.assertIsInstance(q, Query)
result = q.evaluate()
expected = [True, True, True, True, True,
False, False, False, False, False]
expected = slice(0, 5)
self.assertEqual(result, expected)
def test___le__(self):
'''
Test wrapper less than or equal magic method
'''
q = self.wrapper <= 5
self.assertIsInstance(q, Query)
result = q.evaluate()
expected = [True, True, True, True, True,
True, False, False, False, False]
expected = slice(0, 6)
self.assertEqual(result, expected)
def test___eq__(self):
'''
Test wrapper equals magic method
'''
q = self.wrapper == 5
self.assertIsInstance(q, Query)
result = q.evaluate()
expected = [False, False, False, False, False,
True, False, False, False, False]
expected = 5
self.assertTrue(np.array_equal(result, expected))
def test___ne__(self):
'''
Test wrapper not equal magic method
'''
q = self.wrapper != 5
self.assertIsInstance(q, Query)
result = q.evaluate()
expected = [True, True, True, True, True,
False, True, True, True, True]
expected = [slice(0, 5), slice(6, 10)]
self.assertTrue(np.array_equal(result, expected))
def test___getitem__(self):
'''
Test wrapper getitem using slice
'''
result = self.wrapper[0:5]
expected = [0, 1, 2, 3, 4]
self.assertTrue(np.array_equal(result, expected))
def test___getitem__query(self):
'''
Test wrapper getitem using query
'''
q = self.wrapper < 5
result = self.wrapper[q]
expected = [0, 1, 2, 3, 4]
self.assertTrue(np.array_equal(result, expected))
class SortedQueryTest(AbstractQueryMixin, TestCase):
path = 'SortedQueryTest.h5'
def getDataset(self):
self.f = File(self.path, 'w')
self.input = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
self.d = self.f.create_dataset('dset', data=self.input)
return SortedArray(self.d)
def tearDown(self):
self.f.close()
if os.path.exists(self.path):
os.remove(self.path)
class LinspaceQueryTest(AbstractQueryMixin, TestCase):
path = 'LinspaceQueryTest.h5'
def getDataset(self):
return LinSpace(0, 10, 1)
class CompoundQueryTest(TestCase):
def getM(self):
return SortedArray(np.arange(10, 20, 1))
def getN(self):
return SortedArray(np.arange(10.0, 20.0, 0.5))
def setUp(self):
self.m = HDMFDataset(self.getM())
self.n = HDMFDataset(self.getN())
# TODO: test not completed
# def test_map(self):
# q = self.m == (12, 16) # IN operation
# q.evaluate() # [2,3,4,5]
# q.evaluate(False) # RangeResult(2,6)
# r = self.m[q] # noqa: F841
# r = self.m[q.evaluate()] # noqa: F841
# r = self.m[q.evaluate(False)] # noqa: F841
def tearDown(self):
pass
|