|
| 1 | +import collections |
1 | 2 | import datetime |
2 | 3 | import timeit |
3 | 4 | import argparse |
|
13 | 14 | from performance.reference.util import row_1d_filter as row_1d_filter_ref |
14 | 15 | from performance.reference.util import resolve_dtype as resolve_dtype_ref |
15 | 16 | from performance.reference.util import resolve_dtype_iter as resolve_dtype_iter_ref |
| 17 | +from performance.reference.util import dtype_from_element as dtype_from_element_ref |
16 | 18 | from performance.reference.util import array_deepcopy as array_deepcopy_ref |
17 | 19 | from performance.reference.util import isna_element as isna_element_ref |
18 | 20 |
|
|
27 | 29 | from arraykit import row_1d_filter as row_1d_filter_ak |
28 | 30 | from arraykit import resolve_dtype as resolve_dtype_ak |
29 | 31 | from arraykit import resolve_dtype_iter as resolve_dtype_iter_ak |
| 32 | +from arraykit import dtype_from_element as dtype_from_element_ak |
30 | 33 | from arraykit import array_deepcopy as array_deepcopy_ak |
31 | 34 | from arraykit import isna_element as isna_element_ak |
32 | 35 |
|
@@ -250,6 +253,45 @@ class ArrayGOPerfREF(ArrayGOPerf): |
250 | 253 | entry = staticmethod(ArrayGOREF) |
251 | 254 |
|
252 | 255 |
|
| 256 | +#------------------------------------------------------------------------------- |
| 257 | +class DtypeFromElementPerf(Perf): |
| 258 | + NUMBER = 1000 |
| 259 | + |
| 260 | + def pre(self): |
| 261 | + NT = collections.namedtuple('NT', tuple('abc')) |
| 262 | + |
| 263 | + self.values = [ |
| 264 | + np.longlong(-1), np.int_(-1), np.intc(-1), np.short(-1), np.byte(-1), |
| 265 | + np.ubyte(1), np.ushort(1), np.uintc(1), np.uint(1), np.ulonglong(1), |
| 266 | + np.half(1.0), np.single(1.0), np.float_(1.0), np.longfloat(1.0), |
| 267 | + np.csingle(1.0j), np.complex_(1.0j), np.clongfloat(1.0j), |
| 268 | + np.bool_(0), np.str_('1'), np.unicode_('1'), np.void(1), |
| 269 | + np.object(), np.datetime64('NaT'), np.timedelta64('NaT'), np.nan, |
| 270 | + 12, 12.0, True, None, float('NaN'), object(), (1, 2, 3), |
| 271 | + NT(1, 2, 3), datetime.date(2020, 12, 31), datetime.timedelta(14), |
| 272 | + ] |
| 273 | + |
| 274 | + # Datetime & Timedelta |
| 275 | + for precision in ['ns', 'us', 'ms', 's', 'm', 'h', 'D', 'M', 'Y']: |
| 276 | + for kind, ctor in (('m', np.timedelta64), ('M', np.datetime64)): |
| 277 | + self.values.append(ctor(12, precision)) |
| 278 | + |
| 279 | + for size in (1, 8, 16, 32, 64, 128, 256, 512): |
| 280 | + self.values.append(bytes(size)) |
| 281 | + self.values.append('x' * size) |
| 282 | + |
| 283 | + def main(self): |
| 284 | + for _ in range(40): |
| 285 | + for val in self.values: |
| 286 | + self.entry(val) |
| 287 | + |
| 288 | +class DtypeFromElementPerfAK(DtypeFromElementPerf): |
| 289 | + entry = staticmethod(dtype_from_element_ak) |
| 290 | + |
| 291 | +class DtypeFromElementPerfREF(DtypeFromElementPerf): |
| 292 | + entry = staticmethod(dtype_from_element_ref) |
| 293 | + |
| 294 | + |
253 | 295 | #------------------------------------------------------------------------------- |
254 | 296 | class IsNaElementPerf(Perf): |
255 | 297 | NUMBER = 1000 |
@@ -336,7 +378,6 @@ def main(): |
336 | 378 |
|
337 | 379 | records = [('cls', 'func', 'ak', 'ref', 'ref/ak')] |
338 | 380 | for cls_perf in Perf.__subclasses__(): # only get one level |
339 | | - print(cls_perf) |
340 | 381 | cls_map = {} |
341 | 382 | if match and cls_perf.__name__ not in match: |
342 | 383 | continue |
|
0 commit comments