datastock 0.0.46__py3-none-any.whl → 0.0.47__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.
@@ -459,12 +459,18 @@ def _get_ix_for_refx_only_1or2d(
459
459
 
460
460
 
461
461
  def get_fupdate(handle=None, dtype=None, norm=None, bstr=None):
462
+
463
+ # Note: set_xdata() and set_ydata() do not accept scalar values
464
+ # Deprecation warning since matplotlib 3.7
465
+ # see https://github.com/matplotlib/matplotlib/pull/22329
466
+ # see https://github.com/matplotlib/matplotlib/issues/28927
467
+
462
468
  if dtype == 'xdata':
463
469
  def func(val, handle=handle):
464
- handle.set_xdata(val)
470
+ handle.set_xdata(np.atleast_1d(val))
465
471
  elif dtype == 'ydata':
466
472
  def func(val, handle=handle):
467
- handle.set_ydata(val)
473
+ handle.set_ydata(np.atleast_1d(val))
468
474
  elif dtype in ['data']: # Also works for imshow
469
475
  def func(val, handle=handle):
470
476
  handle.set_data(val)
@@ -588,4 +594,4 @@ def _update_mobile(k0=None, dmobile=None, dref=None, ddata=None):
588
594
  # ddata[dmobile[k0]['data'][ii]]['data'][
589
595
  # dmobile[k0]['func_slice'][ii](iref[ii])
590
596
  # ]
591
- # )
597
+ # )
@@ -550,6 +550,126 @@ def _obj_key(d0=None, short=None, key=None, ndigits=None):
550
550
  )
551
551
 
552
552
 
553
+ # #############################################################################
554
+ # #############################################################################
555
+ # Utilities for plotting
556
+ # #############################################################################
557
+
558
+
559
+ def _check_all_broadcastable(
560
+ return_full_arrays=None,
561
+ **kwdargs,
562
+ ):
563
+
564
+ # -------------------
565
+ # return_full_arrays
566
+ # -------------------
567
+
568
+ return_full_arrays = _check_var(
569
+ return_full_arrays, 'return_full_arrays',
570
+ types=bool,
571
+ default=False,
572
+ )
573
+
574
+ # -------------------
575
+ # Preliminary check
576
+ # -------------------
577
+
578
+ dout = {}
579
+ dfail = {}
580
+ for k0, v0 in kwdargs.items():
581
+ try:
582
+ dout[k0] = np.atleast_1d(v0)
583
+ except Exception:
584
+ dfail[k0] = f"Not convertible to np.ndarray! - {v0}"
585
+
586
+ # Raise Exception
587
+ if len(dfail) > 0:
588
+ lstr = [f"\t- {k0}: {v0}" for k0, v0 in dfail.items()]
589
+ msg = (
590
+ "The following kwdargs are non-conform:\n"
591
+ + "\n".join(lstr)
592
+ )
593
+ raise Exception(msg)
594
+
595
+ # -------------------
596
+ # check ndim
597
+ # -------------------
598
+
599
+ dndim = {k0: v0.ndim for k0, v0 in dout.items() if v0.shape != (1,)}
600
+ lndim = list(set(dndim.values()))
601
+
602
+ if len(lndim) == 0:
603
+ # all scalar
604
+ if return_full_arrays:
605
+ return dout, (1,)
606
+ else:
607
+ return {k0: v0[0] for k0, v0 in dout.items()}, None
608
+
609
+ elif len(lndim) == 1:
610
+ ndim = lndim[0]
611
+
612
+ else:
613
+ lstr = [f"-t {k0}: {v0}" for k0, v0 in dndim.items()]
614
+ msg = (
615
+ "Some keyword args have non-compatible dimensions:\n"
616
+ + "\n".join(lstr)
617
+ )
618
+ raise Exception(msg)
619
+
620
+ # -------------------
621
+ # check shapes
622
+ # -------------------
623
+
624
+ dfail = {}
625
+ shapef = np.ones((ndim,), dtype=int)
626
+ for k0, v0 in dout.items():
627
+
628
+ if v0.shape == (1,):
629
+ continue
630
+
631
+ for ii in range(ndim):
632
+ if v0.shape[ii] == 1:
633
+ pass
634
+ elif shapef[ii] == 1:
635
+ shapef[ii] = v0.shape[ii]
636
+ elif v0.shape[ii] == shapef[ii]:
637
+ pass
638
+ else:
639
+ dfail[k0] = f"Non-compatible shape = {v0.shape} (ii = {ii})"
640
+ continue
641
+
642
+ shapef = tuple(shapef)
643
+
644
+ # raise Exception if needed
645
+ if len(dfail) > 0:
646
+ lstr = [f"\t- {k0}: {v0}" for k0, v0 in dfail.items()]
647
+ msg = (
648
+ "The following keywords args have non-compatible shape:\n"
649
+ + "\n".join(lstr)
650
+ + f"\nReference shape: {shapef}\n"
651
+ )
652
+ raise Exception(msg)
653
+
654
+ # -------------------
655
+ # reshape output
656
+ # -------------------
657
+
658
+ if return_full_arrays is True:
659
+ for k0, v0 in dout.items():
660
+ if v0.shape == (1,):
661
+ dout[k0] = np.full(shapef, v0[0])
662
+ elif v0.shape != shapef:
663
+ dout[k0] = np.broadcast_to(v0, shapef)
664
+
665
+ else:
666
+ for k0, v0 in dout.items():
667
+ if v0.shape == (1,):
668
+ dout[k0] = v0[0]
669
+
670
+ return dout, shapef
671
+
672
+
553
673
  # #############################################################################
554
674
  # #############################################################################
555
675
  # Utilities for plotting
@@ -929,4 +1049,4 @@ def _check_cmap_vminvmax(data=None, cmap=None, vmin=None, vmax=None):
929
1049
  else:
930
1050
  vmax = nanmax
931
1051
 
932
- return cmap, vmin, vmax
1052
+ return cmap, vmin, vmax
@@ -14,6 +14,7 @@ import numpy as np
14
14
  import matplotlib.pyplot as plt
15
15
 
16
16
  # datastock-specific
17
+ from .._generic_check import _check_all_broadcastable
17
18
  from .._class import DataStock
18
19
  from .._saveload import load
19
20
 
@@ -228,6 +229,46 @@ class Test01_Instanciate():
228
229
  def test03_add_obj(self):
229
230
  _add_obj(st=self.st, nc=self.nc)
230
231
 
232
+ # ------------------------
233
+ # Tools
234
+ # ------------------------
235
+
236
+ def test04_check_all_broadcastable(self):
237
+ # all scalar
238
+ dout, shape = _check_all_broadcastable(a=1, b=2)
239
+
240
+ # scalar + arrays
241
+ dout, shape = _check_all_broadcastable(a=1, b=(1, 2, 3))
242
+
243
+ # all arrays
244
+ dout, shape = _check_all_broadcastable(
245
+ a=(1, 2, 3),
246
+ b=(1, 2, 3),
247
+ )
248
+
249
+ # all arrays - 2d
250
+ dout, shape = _check_all_broadcastable(
251
+ a=np.r_[1, 2, 3][:, None],
252
+ b=np.r_[10, 20][None, :],
253
+ )
254
+
255
+ # check flag
256
+ err = False
257
+ try:
258
+ dout, shape = _check_all_broadcastable(a=(1, 2), b=(1, 2, 3))
259
+ except Exception:
260
+ err = True
261
+ assert err is True
262
+
263
+ # all arrays - mix
264
+ dout, shape = _check_all_broadcastable(
265
+ a=np.r_[1, 2, 3][:, None],
266
+ b=np.r_[10, 20][None, :],
267
+ c=3,
268
+ return_full_arrays=True,
269
+ )
270
+ assert all([v0.shape == (3, 2) for v0 in dout.values()])
271
+
231
272
 
232
273
  #######################################################
233
274
  #
@@ -639,4 +680,4 @@ class Test02_Manipulate():
639
680
  msg = st2.__eq__(self.st, returnas=str)
640
681
  if msg is not True:
641
682
  raise Exception(msg)
642
- os.remove(pfe)
683
+ os.remove(pfe)
datastock/version.py CHANGED
@@ -1,2 +1,2 @@
1
1
  # Do not edit, pipeline versioning governed by git tags!
2
- __version__ = '0.0.46'
2
+ __version__ = '0.0.47'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: datastock
3
- Version: 0.0.46
3
+ Version: 0.0.47
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
@@ -13,12 +13,12 @@ datastock/_class1_interpolate.py,sha256=3VKGMDsiWFQUguMHxMaTQTyMhcN8Ikg1PmaH6TjI
13
13
  datastock/_class1_show.py,sha256=hqd-FeJ1NqiOzbrHzGMrwIo8_lLsjC199Zmw68NqkDQ,11745
14
14
  datastock/_class1_uniformize.py,sha256=dEJime_0SqmW8hX8ooZpHsPI_d8CIE9U9Yz9GhqsEUY,28433
15
15
  datastock/_class2.py,sha256=FG-ZGPVdZEdkRc_3Z9LRzYdRm9Xat7HI06E3-hI5rCk,45422
16
- datastock/_class2_interactivity.py,sha256=b7ORi0wR-gcFIua10PhbKTEB12vJN1F4skuIJX0gnbw,16918
16
+ datastock/_class2_interactivity.py,sha256=glAqqkIyH8JBVj0AsgJPNlaltcTIXB0iCqNBq3gKSb8,17198
17
17
  datastock/_class3.py,sha256=CH1oD_lTfVlcDp29L_iwzSfP78vX6_edDmZG9aSb1Ks,10848
18
18
  datastock/_direct_calls.py,sha256=EHFwI2mGMDqGz8_Bv2BseMBX4J8dSdE_RcNX3pt0ZYY,1801
19
19
  datastock/_export_dataframe.py,sha256=fy-uJR3EhDlHvd9ls1EQna_C8fyha1jCJLu1DTKTkdo,1576
20
20
  datastock/_find_plateau.py,sha256=sqnAuy0361DXkqBb_Lo1MmIGjn35tnKFvcv6MW6hifs,2685
21
- datastock/_generic_check.py,sha256=x41ITg3NxOiMK4IyIQX9wYrrqwPy88991rlvCpkFy8w,24812
21
+ datastock/_generic_check.py,sha256=yKnxlLSJomRCYzBayEy-i0O6FhOGt1rR98iu2XSd37U,27940
22
22
  datastock/_generic_utils.py,sha256=_iV51SiujEmQfAlvyIEW4BvzIXdhPCD-vumV5DmUL44,23421
23
23
  datastock/_generic_utils_plot.py,sha256=xrWzeZFtdTAs-RO2DfpCRveJPqw_p4lRFtQuuAn1pD8,3709
24
24
  datastock/_plot_BvsA_as_distribution.py,sha256=fpRhlbv3Bk96buANC46Brc9hdLxkOAsoKpE5A9pohG0,15389
@@ -32,12 +32,12 @@ datastock/_plot_correlations.py,sha256=ITOypu_AEoKl0ihxocV-JVTXIHqut6p9TfG-xZmQy
32
32
  datastock/_plot_old_backup.py,sha256=XixTi2CiihKjtQP0TRycH0b25caWN1m35DgpsDeiWZE,21729
33
33
  datastock/_plot_text.py,sha256=wQPqjfpLyIioS2JeOt3E9C9HgYUJ49YEoOgRuKYvAR8,3143
34
34
  datastock/_saveload.py,sha256=1vAMp27KfqXbo5b_Pi8hJux0stsHq6dO5vy8k1d4_iA,14141
35
- datastock/version.py,sha256=TTZXyi6fkfPDWOJIxiEa00X66SrcWUHC11j32Bjcyh0,80
35
+ datastock/version.py,sha256=mPvpgVj454Vfs5m6V8fuocNdwJDUMd-Yv6J6PlDaGVA,80
36
36
  datastock/tests/__init__.py,sha256=teOo2xP0IO7PQMuMDmum61XVHe2TuxW3BiHiL73X8jQ,35
37
- datastock/tests/test_01_DataStock.py,sha256=Ngz0nbb7Qj3Sr0c4TV2OlK_v4R6aMBrQYXr8BWaYAnw,18048
37
+ datastock/tests/test_01_DataStock.py,sha256=aUseXH2zYnFtNDJSCuEROgPxfKKNeLCkCQSR--_Fheg,19176
38
38
  datastock/tests/output/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
- datastock-0.0.46.dist-info/LICENSE,sha256=V1uXqi3vxR0QhB4QdFyjkynl6jpN4wZmlB5EMYJk0NM,1068
40
- datastock-0.0.46.dist-info/METADATA,sha256=rs7ozSmlV2xJ4_yOJIwDrDj3brqxOHxqZRlG7W2hLqA,8660
41
- datastock-0.0.46.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
42
- datastock-0.0.46.dist-info/top_level.txt,sha256=BzJsLLK_zZw13WQCoMhC74qWVKalnVCjBxdPXvJn7HQ,25
43
- datastock-0.0.46.dist-info/RECORD,,
39
+ datastock-0.0.47.dist-info/LICENSE,sha256=V1uXqi3vxR0QhB4QdFyjkynl6jpN4wZmlB5EMYJk0NM,1068
40
+ datastock-0.0.47.dist-info/METADATA,sha256=pCzvjokhOrHGFpDFABU6QbnPT7MvBZ1NQW_Mbd1vxnQ,8660
41
+ datastock-0.0.47.dist-info/WHEEL,sha256=iAkIy5fosb7FzIOwONchHf19Qu7_1wCWyFNR5gu9nU0,91
42
+ datastock-0.0.47.dist-info/top_level.txt,sha256=BzJsLLK_zZw13WQCoMhC74qWVKalnVCjBxdPXvJn7HQ,25
43
+ datastock-0.0.47.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.3.0)
2
+ Generator: setuptools (75.3.2)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5