datastock 0.0.40__py3-none-any.whl → 0.0.41__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- datastock/_generic_utils.py +108 -14
- datastock/version.py +1 -1
- {datastock-0.0.40.dist-info → datastock-0.0.41.dist-info}/METADATA +1 -1
- {datastock-0.0.40.dist-info → datastock-0.0.41.dist-info}/RECORD +7 -7
- {datastock-0.0.40.dist-info → datastock-0.0.41.dist-info}/LICENSE +0 -0
- {datastock-0.0.40.dist-info → datastock-0.0.41.dist-info}/WHEEL +0 -0
- {datastock-0.0.40.dist-info → datastock-0.0.41.dist-info}/top_level.txt +0 -0
datastock/_generic_utils.py
CHANGED
@@ -361,10 +361,14 @@ def compare_dict(
|
|
361
361
|
|
362
362
|
# numpy arrays
|
363
363
|
elif isinstance(d0[k0], np.ndarray):
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
364
|
+
msg = _compare_arrays(
|
365
|
+
dname=dname,
|
366
|
+
k0=k0,
|
367
|
+
d0=d0,
|
368
|
+
d1=d1,
|
369
|
+
)
|
370
|
+
if msg is not None:
|
371
|
+
dkeys[key] = msg
|
368
372
|
|
369
373
|
# sparse arrays
|
370
374
|
elif scpsp.issparse(d0[k0]):
|
@@ -375,16 +379,15 @@ def compare_dict(
|
|
375
379
|
|
376
380
|
# lists and tuples
|
377
381
|
elif isinstance(d0[k0], (list, tuple)):
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
raise NotImplementedError(msg)
|
382
|
+
msg = _compare_list_tuple(
|
383
|
+
dname=dname,
|
384
|
+
k0=k0,
|
385
|
+
d0=d0,
|
386
|
+
d1=d1,
|
387
|
+
key=key,
|
388
|
+
)
|
389
|
+
if msg is not None:
|
390
|
+
dkeys[key] = msg
|
388
391
|
|
389
392
|
# functions
|
390
393
|
elif callable(d0[k0]):
|
@@ -423,6 +426,97 @@ def compare_dict(
|
|
423
426
|
return _compare_dict_verb_return(dkeys, returnas, verb)
|
424
427
|
|
425
428
|
|
429
|
+
def _compare_arrays(
|
430
|
+
dname=None,
|
431
|
+
k0=None,
|
432
|
+
d0=None,
|
433
|
+
d1=None,
|
434
|
+
):
|
435
|
+
|
436
|
+
msg = None
|
437
|
+
|
438
|
+
# shape
|
439
|
+
if d0[k0].shape != d1[k0].shape:
|
440
|
+
msg = f'!= shapes ({d0[k0].shape} vs {d1[k0].shape})'
|
441
|
+
|
442
|
+
# dtype
|
443
|
+
elif not d0[k0].dtype == d1[k0].dtype:
|
444
|
+
msg = f"!= dtypes ({d0[k0].dtype} vs {d1[k0].dtype})"
|
445
|
+
|
446
|
+
# special case: array of str
|
447
|
+
if 'str' in d0[k0].dtype.name:
|
448
|
+
d0flat = d0[k0].ravel().tolist()
|
449
|
+
d1flat = d1[k0].ravel().tolist()
|
450
|
+
c0 = all([ss == d1flat[ii] for ii, ss in enumerate(d0flat)])
|
451
|
+
else:
|
452
|
+
try:
|
453
|
+
c0 = np.allclose(d0[k0], d1[k0], equal_nan=True)
|
454
|
+
except Exception as err:
|
455
|
+
msg = (
|
456
|
+
f"Failed to compare 2 arrays from '{dname}':\n"
|
457
|
+
f"\t- d0['{k0}'] = {d0[k0]}\n"
|
458
|
+
f"\t- d1['{k0}'] = {d1[k0]}\n"
|
459
|
+
)
|
460
|
+
raise Exception(msg) from err
|
461
|
+
|
462
|
+
if not c0:
|
463
|
+
msg = "not allclose"
|
464
|
+
|
465
|
+
return msg
|
466
|
+
|
467
|
+
|
468
|
+
def _compare_list_tuple(
|
469
|
+
dname=None,
|
470
|
+
k0=None,
|
471
|
+
d0=None,
|
472
|
+
d1=None,
|
473
|
+
key=None,
|
474
|
+
):
|
475
|
+
|
476
|
+
msg = None
|
477
|
+
|
478
|
+
# length
|
479
|
+
if len(d0[k0]) != len(d1[k0]):
|
480
|
+
msg = f'!= length ({len(d0[k0])} vs {len(d1[k0])})'
|
481
|
+
|
482
|
+
# content type
|
483
|
+
ltyp0 = [_simple_type(type(ss)) for ss in d0[k0]]
|
484
|
+
ltyp1 = [_simple_type(type(ss)) for ss in d1[k0]]
|
485
|
+
if any([t0 != t1 for t0, t1 in zip(ltyp0, ltyp1)]):
|
486
|
+
msg = f"!= content type ({ltyp0} vs {ltyp1})"
|
487
|
+
|
488
|
+
# content
|
489
|
+
for ii in range(len(d0[k0])):
|
490
|
+
|
491
|
+
if isinstance(d0[k0][ii], np.ndarray):
|
492
|
+
c0 = np.allclose(d0[k0][ii], d1[k0][ii])
|
493
|
+
|
494
|
+
else:
|
495
|
+
|
496
|
+
try:
|
497
|
+
c0 = d0[k0][ii] == d1[k0][ii]
|
498
|
+
except Exception as err:
|
499
|
+
msg = (
|
500
|
+
f"Don't know how to handle {key}:\n"
|
501
|
+
f"\t- type: {type(d0[k0])}\n"
|
502
|
+
f"\t- value: {d0[k0]}\n"
|
503
|
+
)
|
504
|
+
raise NotImplementedError(msg) from err
|
505
|
+
|
506
|
+
if not c0:
|
507
|
+
msg = f"!= content at position {ii} ({d0[k0][ii]} vs {d1[k0][ii]})"
|
508
|
+
break
|
509
|
+
|
510
|
+
return msg
|
511
|
+
|
512
|
+
|
513
|
+
def _simple_type(typ):
|
514
|
+
return ''.join([
|
515
|
+
ss for ss in typ.__name__.replace('_', '')
|
516
|
+
if not ss.isdigit()
|
517
|
+
])
|
518
|
+
|
519
|
+
|
426
520
|
def compare_obj(
|
427
521
|
obj0=None,
|
428
522
|
obj1=None,
|
datastock/version.py
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
# Do not edit, pipeline versioning governed by git tags!
|
2
|
-
__version__ = '0.0.
|
2
|
+
__version__ = '0.0.41'
|
@@ -18,7 +18,7 @@ datastock/_direct_calls.py,sha256=EHFwI2mGMDqGz8_Bv2BseMBX4J8dSdE_RcNX3pt0ZYY,18
|
|
18
18
|
datastock/_export_dataframe.py,sha256=fy-uJR3EhDlHvd9ls1EQna_C8fyha1jCJLu1DTKTkdo,1576
|
19
19
|
datastock/_find_plateau.py,sha256=sqnAuy0361DXkqBb_Lo1MmIGjn35tnKFvcv6MW6hifs,2685
|
20
20
|
datastock/_generic_check.py,sha256=x41ITg3NxOiMK4IyIQX9wYrrqwPy88991rlvCpkFy8w,24812
|
21
|
-
datastock/_generic_utils.py,sha256=
|
21
|
+
datastock/_generic_utils.py,sha256=_iV51SiujEmQfAlvyIEW4BvzIXdhPCD-vumV5DmUL44,23421
|
22
22
|
datastock/_generic_utils_plot.py,sha256=xrWzeZFtdTAs-RO2DfpCRveJPqw_p4lRFtQuuAn1pD8,3709
|
23
23
|
datastock/_plot_BvsA_as_distribution.py,sha256=fpRhlbv3Bk96buANC46Brc9hdLxkOAsoKpE5A9pohG0,15389
|
24
24
|
datastock/_plot_BvsA_as_distribution_check.py,sha256=2LoM3mGHtPu87_qf37hLcFuknWfeSydU8WDqpVo1Sco,13086
|
@@ -31,12 +31,12 @@ datastock/_plot_correlations.py,sha256=ITOypu_AEoKl0ihxocV-JVTXIHqut6p9TfG-xZmQy
|
|
31
31
|
datastock/_plot_old_backup.py,sha256=XixTi2CiihKjtQP0TRycH0b25caWN1m35DgpsDeiWZE,21729
|
32
32
|
datastock/_plot_text.py,sha256=wQPqjfpLyIioS2JeOt3E9C9HgYUJ49YEoOgRuKYvAR8,3143
|
33
33
|
datastock/_saveload.py,sha256=NdOykvmeCaPhpk0EF5WQezYzpuZM2Ul101Nqc4I3dnY,11729
|
34
|
-
datastock/version.py,sha256=
|
34
|
+
datastock/version.py,sha256=HlwZwixL3E8KCwqVjPmGBvXawDbglt-PvliSac_-yb4,80
|
35
35
|
datastock/tests/__init__.py,sha256=teOo2xP0IO7PQMuMDmum61XVHe2TuxW3BiHiL73X8jQ,35
|
36
36
|
datastock/tests/test_01_DataStock.py,sha256=QJSmrVXD6wX-plfrFdLyZou20IYZGAKzartSi84BfC0,16982
|
37
37
|
datastock/tests/output/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
38
|
-
datastock-0.0.
|
39
|
-
datastock-0.0.
|
40
|
-
datastock-0.0.
|
41
|
-
datastock-0.0.
|
42
|
-
datastock-0.0.
|
38
|
+
datastock-0.0.41.dist-info/LICENSE,sha256=V1uXqi3vxR0QhB4QdFyjkynl6jpN4wZmlB5EMYJk0NM,1068
|
39
|
+
datastock-0.0.41.dist-info/METADATA,sha256=QSbiL_qWjMq7TQ6DIQvaOJkHAGi_lwu3-Gx9RrxLB-o,8660
|
40
|
+
datastock-0.0.41.dist-info/WHEEL,sha256=cVxcB9AmuTcXqmwrtPhNK88dr7IR_b6qagTj0UvIEbY,91
|
41
|
+
datastock-0.0.41.dist-info/top_level.txt,sha256=BzJsLLK_zZw13WQCoMhC74qWVKalnVCjBxdPXvJn7HQ,25
|
42
|
+
datastock-0.0.41.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|