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