test_h5s.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import numpy as np
  2. from h5py import h5s
  3. from h5py._selector import Selector
  4. class Helper:
  5. def __init__(self, shape: tuple):
  6. self.shape = shape
  7. def __getitem__(self, item) -> h5s.SpaceID:
  8. if not isinstance(item, tuple):
  9. item = (item,)
  10. space = h5s.create_simple(self.shape)
  11. sel = Selector(space)
  12. sel.make_selection(item)
  13. return space
  14. def test_same_shape():
  15. s1 = Helper((5, 6))[:3, :4]
  16. s2 = Helper((5, 6))[2:, 2:]
  17. assert s1.select_shape_same(s2)
  18. s3 = Helper((5, 6))[:4, :3]
  19. assert not s1.select_shape_same(s3)
  20. def test_select_copy():
  21. s1 = h5s.create_simple((50,))
  22. s1.select_hyperslab((5,), (1,), block=(5,), op=h5s.SELECT_SET)
  23. s2 = h5s.create_simple((50,))
  24. s2.select_hyperslab((23,), (1,), block=(3,), op=h5s.SELECT_SET)
  25. s2.select_copy(s1)
  26. np.testing.assert_array_equal(
  27. s1.get_select_hyper_blocklist(), s2.get_select_hyper_blocklist()
  28. )
  29. def test_combine_select():
  30. # combine_select should create a new space without modifying the original
  31. s1 = h5s.create_simple((50,))
  32. s1.select_hyperslab((5,), (1,), block=(5,), op=h5s.SELECT_SET)
  33. s2 = h5s.create_simple((50,))
  34. s2.select_hyperslab((20,), (1,), block=(2,), op=h5s.SELECT_SET)
  35. s3 = s1.combine_select(s2, op=h5s.SELECT_OR)
  36. s2.select_hyperslab((5,), (1,), block=(5,), op=h5s.SELECT_OR)
  37. np.testing.assert_array_equal(
  38. s3.get_select_hyper_blocklist(), s2.get_select_hyper_blocklist()
  39. )
  40. assert not np.array_equal(
  41. s3.get_select_hyper_blocklist(), s1.get_select_hyper_blocklist()
  42. )
  43. def test_modify_select():
  44. # combine_select should create a new space without modifying the original
  45. s1 = h5s.create_simple((50,))
  46. s1.select_hyperslab((5,), (1,), block=(5,), op=h5s.SELECT_SET)
  47. s2 = h5s.create_simple((50,))
  48. s2.select_hyperslab((20,), (1,), block=(2,), op=h5s.SELECT_SET)
  49. s1.modify_select(s2, op=h5s.SELECT_OR)
  50. s2.select_hyperslab((5,), (1,), block=(5,), op=h5s.SELECT_OR)
  51. np.testing.assert_array_equal(
  52. s1.get_select_hyper_blocklist(), s2.get_select_hyper_blocklist()
  53. )