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.
@@ -361,10 +361,14 @@ def compare_dict(
361
361
 
362
362
  # numpy arrays
363
363
  elif isinstance(d0[k0], np.ndarray):
364
- if d0[k0].shape != d1[k0].shape:
365
- dkeys[key] = f'!= shapes ({d0[k0].shape} vs {d1[k0].shape})'
366
- elif not np.allclose(d0[k0], d1[k0], equal_nan=True):
367
- dkeys[key] = "not allclose"
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
- try:
379
- if not d0[k0] == d1[k0]:
380
- dkeys[key] = "!= list/tuple values"
381
- except Exception as err:
382
- msg = (
383
- f"Don't know how to handle {key}:\n"
384
- f"\t- type: {type(d0[k0])}\n"
385
- f"\t- value: {d0[k0]}\n"
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.40'
2
+ __version__ = '0.0.41'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: datastock
3
- Version: 0.0.40
3
+ Version: 0.0.41
4
4
  Summary: A python library for generic class and data handling
5
5
  Home-page: https://github.com/ToFuProject/datastock
6
6
  Author: Didier VEZINET
@@ -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=iBsEQcVEoyN11-R5lMCZJzZUAksROkVD_gzKNvWXLvA,21381
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=A38lpxv8KL6cnTASv1MoiCv6r7-tiQedYIq6p93AnrA,80
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.40.dist-info/LICENSE,sha256=V1uXqi3vxR0QhB4QdFyjkynl6jpN4wZmlB5EMYJk0NM,1068
39
- datastock-0.0.40.dist-info/METADATA,sha256=3RtX-DeKoRjaxewU2stlRCb8oF5zuMqiI1BArp0HyII,8660
40
- datastock-0.0.40.dist-info/WHEEL,sha256=cVxcB9AmuTcXqmwrtPhNK88dr7IR_b6qagTj0UvIEbY,91
41
- datastock-0.0.40.dist-info/top_level.txt,sha256=BzJsLLK_zZw13WQCoMhC74qWVKalnVCjBxdPXvJn7HQ,25
42
- datastock-0.0.40.dist-info/RECORD,,
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,,