Pack multiple vectors into one Test intrinsics: npyv_pack_b8_b16 npyv_pack_b8_b32 npyv_pack_b8_b64
(self)
| 197 | assert bin_tobits == bin(data_bits) |
| 198 | |
| 199 | def test_pack(self): |
| 200 | """ |
| 201 | Pack multiple vectors into one |
| 202 | Test intrinsics: |
| 203 | npyv_pack_b8_b16 |
| 204 | npyv_pack_b8_b32 |
| 205 | npyv_pack_b8_b64 |
| 206 | """ |
| 207 | if self.sfx not in ("b16", "b32", "b64"): |
| 208 | return |
| 209 | # create the vectors |
| 210 | data = self._data() |
| 211 | rdata = self._data(reverse=True) |
| 212 | vdata = self._load_b(data) |
| 213 | vrdata = self._load_b(rdata) |
| 214 | pack_simd = getattr(self.npyv, f"pack_b8_{self.sfx}") |
| 215 | # for scalar execution, concatenate the elements of the multiple lists |
| 216 | # into a single list (spack) and then iterate over the elements of |
| 217 | # the created list applying a mask to capture the first byte of them. |
| 218 | if self.sfx == "b16": |
| 219 | spack = [(i & 0xFF) for i in (list(rdata) + list(data))] |
| 220 | vpack = pack_simd(vrdata, vdata) |
| 221 | elif self.sfx == "b32": |
| 222 | spack = [(i & 0xFF) for i in (2 * list(rdata) + 2 * list(data))] |
| 223 | vpack = pack_simd(vrdata, vrdata, vdata, vdata) |
| 224 | elif self.sfx == "b64": |
| 225 | spack = [(i & 0xFF) for i in (4 * list(rdata) + 4 * list(data))] |
| 226 | vpack = pack_simd(vrdata, vrdata, vrdata, vrdata, |
| 227 | vdata, vdata, vdata, vdata) |
| 228 | assert vpack == spack |
| 229 | |
| 230 | @pytest.mark.parametrize("intrin", ["any", "all"]) |
| 231 | @pytest.mark.parametrize("data", ( |