test_tensor_data.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import unittest, struct
  2. from tinygrad import Tensor, dtypes
  3. # format types: https://docs.python.org/3/library/struct.html
  4. class TestTensorBytes(unittest.TestCase):
  5. def test_bytes(self):
  6. lst = Tensor(bytes(b"\xaa\xbb\xcc\xdd"))
  7. assert lst.tolist() == [170, 187, 204, 221]
  8. def test_float_bytes(self):
  9. lst = Tensor(bytes(struct.pack("ff", 0.234, 0.8585)), dtype=dtypes.float32)
  10. assert lst.shape == (2,)
  11. assert abs(lst.tolist()[0] - 0.234) < 1e-6
  12. assert abs(lst.tolist()[1] - 0.8585) < 1e-6
  13. class TestTensorData(unittest.TestCase):
  14. def test_data(self):
  15. a = Tensor([1,2,3,4], dtype=dtypes.int32)
  16. dat = a.data()
  17. assert dat.itemsize == 4
  18. assert list(dat) == [1,2,3,4]
  19. assert dat.shape == (4,)
  20. assert dat[0] == 1
  21. assert dat[1] == 2
  22. def test_data_uint8(self):
  23. a = Tensor([1,2,3,4], dtype=dtypes.uint8)
  24. dat = a.data()
  25. assert dat.format == "B"
  26. assert dat.itemsize == 1
  27. assert dat[0] == 1
  28. assert dat[1] == 2
  29. def test_data_nested(self):
  30. a = Tensor([[1,2],[3,4]], dtype=dtypes.int32)
  31. dat = a.data()
  32. assert dat.format == "i"
  33. assert dat.itemsize == 4
  34. assert dat.tolist() == [[1, 2], [3, 4]]
  35. assert dat.shape == (2,2)
  36. assert dat[0, 0] == 1
  37. assert dat[1, 1] == 4
  38. def test_data_const(self):
  39. a = Tensor(3, dtype=dtypes.int32)
  40. dat = a.data()
  41. assert dat.format == "i"
  42. assert dat.itemsize == 4
  43. assert dat.tolist() == 3
  44. assert dat.shape == ()
  45. def test_data_float32(self):
  46. a = Tensor([[1,2.5],[3,4]], dtype=dtypes.float32)
  47. dat = a.data()
  48. assert dat.format == "f"
  49. assert dat[0, 1] == 2.5
  50. @unittest.skip("requires python 3.12")
  51. def test_data_float16(self):
  52. a = Tensor([[1,2.5],[3,4]], dtype=dtypes.float16)
  53. dat = a.data()
  54. assert dat.format == "e"
  55. assert dat.shape == (2,2)
  56. # NOTE: python can't deref float16
  57. if __name__ == '__main__':
  58. unittest.main()