1
1
from __future__ import annotations
2
2
3
- from typing import Any # undone
3
+ from typing import Any , NamedTuple
4
4
5
5
import pytest
6
6
@@ -151,29 +151,37 @@ def test_lifetime2() -> None:
151
151
assert isinstance (px [0 , 0 ], int )
152
152
153
153
154
- UINT_ARR = (
155
- fl_uint8_4_type ,
156
- [1 ,2 ,3 ,4 ],
157
- 1
154
+ class DataShape (NamedTuple ):
155
+ dtype : Any
156
+ elt : Any
157
+ elts_per_pixel : int
158
+
159
+
160
+ UINT_ARR = DataShape (
161
+ dtype = fl_uint8_4_type ,
162
+ elt = [1 , 2 , 3 , 4 ], # array of 4 uint 8 per pixel
163
+ elts_per_pixel = 1 , # only one array per pixel
158
164
)
159
- UINT = (
160
- pyarrow .uint8 (),
161
- 3 ,
162
- 4
165
+
166
+ UINT = DataShape (
167
+ dtype = pyarrow .uint8 (),
168
+ elt = 3 , # one uint8,
169
+ elts_per_pixel = 4 , # but repeated 4x per pixel
163
170
)
164
- INT32 = (
165
- pyarrow .uint32 (),
166
- 0xabcdef45 ,
167
- 1
171
+
172
+ UINT32 = DataShape (
173
+ dtype = pyarrow .uint32 (),
174
+ elt = 0xABCDEF45 , # one packed int, doesn't fit in a int32 > 0x80000000
175
+ elts_per_pixel = 1 , # one per pixel
168
176
)
169
177
170
178
171
179
@pytest .mark .parametrize (
172
180
"mode, data_tp, mask" ,
173
181
(
174
- ("L" , (pyarrow .uint8 (), 3 , 1 ), None ),
175
- ("I" , (pyarrow .int32 (), 1 << 24 , 1 ), None ),
176
- ("F" , (pyarrow .float32 (), 3.14159 , 1 ), None ),
182
+ ("L" , DataShape (pyarrow .uint8 (), 3 , 1 ), None ),
183
+ ("I" , DataShape (pyarrow .int32 (), 1 << 24 , 1 ), None ),
184
+ ("F" , DataShape (pyarrow .float32 (), 3.14159 , 1 ), None ),
177
185
("LA" , UINT_ARR , [0 , 3 ]),
178
186
("LA" , UINT , [0 , 3 ]),
179
187
("RGB" , UINT_ARR , [0 , 1 , 2 ]),
@@ -188,7 +196,7 @@ def test_lifetime2() -> None:
188
196
("HSV" , UINT , [0 , 1 , 2 ]),
189
197
),
190
198
)
191
- def test_fromarray (mode : str , data_tp : tuple , mask : list [int ] | None ) -> None :
199
+ def test_fromarray (mode : str , data_tp : DataShape , mask : list [int ] | None ) -> None :
192
200
(dtype , elt , elts_per_pixel ) = data_tp
193
201
194
202
ct_pixels = TEST_IMAGE_SIZE [0 ] * TEST_IMAGE_SIZE [1 ]
@@ -201,15 +209,15 @@ def test_fromarray(mode: str, data_tp: tuple, mask: list[int] | None) -> None:
201
209
@pytest .mark .parametrize (
202
210
"mode, data_tp, mask" ,
203
211
(
204
- ("LA" , INT32 , [0 , 3 ]),
205
- ("RGB" , INT32 , [0 , 1 , 2 ]),
206
- ("RGBA" , INT32 , None ),
207
- ("CMYK" , INT32 , None ),
208
- ("YCbCr" , INT32 , [0 , 1 , 2 ]),
209
- ("HSV" , INT32 , [0 , 1 , 2 ]),
212
+ ("LA" , UINT32 , [0 , 3 ]),
213
+ ("RGB" , UINT32 , [0 , 1 , 2 ]),
214
+ ("RGBA" , UINT32 , None ),
215
+ ("CMYK" , UINT32 , None ),
216
+ ("YCbCr" , UINT32 , [0 , 1 , 2 ]),
217
+ ("HSV" , UINT32 , [0 , 1 , 2 ]),
210
218
),
211
219
)
212
- def test_from_int32array (mode : str , data_tp : tuple , mask : list [int ] | None ) -> None :
220
+ def test_from_int32array (mode : str , data_tp : DataShape , mask : list [int ] | None ) -> None :
213
221
(dtype , elt , elts_per_pixel ) = data_tp
214
222
215
223
ct_pixels = TEST_IMAGE_SIZE [0 ] * TEST_IMAGE_SIZE [1 ]
0 commit comments