datastock 0.0.37__py3-none-any.whl → 0.0.39__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/_class1.py CHANGED
@@ -977,6 +977,37 @@ class DataStock1(DataStock0):
977
977
  def show_interactive(self):
978
978
  self.show(show_which=['axes', 'mobile', 'interactivity'])
979
979
 
980
+ def show_details(
981
+ self,
982
+ key=None,
983
+ which=None,
984
+ # pretty print options
985
+ sep=None,
986
+ line=None,
987
+ justify=None,
988
+ table_sep=None,
989
+ # bool options
990
+ verb=True,
991
+ returnas=False,
992
+ ):
993
+ """ Summary description of the object content """
994
+ return _class1_show.main_details(
995
+ coll=self,
996
+ which=which,
997
+ key=key,
998
+ # pretty print options
999
+ sep=sep,
1000
+ line=line,
1001
+ justify=justify,
1002
+ table_sep=table_sep,
1003
+ # bool options
1004
+ verb=verb,
1005
+ returnas=returnas,
1006
+ )
1007
+
1008
+ def _get_show_details(self, which=None, key=None):
1009
+ raise NotImplementedError()
1010
+
980
1011
  def __repr__(self):
981
1012
  try:
982
1013
  return self.show(returnas=str, verb=False)
@@ -1009,4 +1040,4 @@ class DataStock1(DataStock0):
1009
1040
 
1010
1041
  __all__ = [
1011
1042
  sorted([k0 for k0 in locals() if k0.startswith('DataStock')])[-1]
1012
- ]
1043
+ ]
@@ -12,6 +12,7 @@ import astropy.units as asunits
12
12
 
13
13
 
14
14
  from . import _generic_check
15
+ from . import _generic_utils
15
16
 
16
17
 
17
18
  _DRESERVED_KEYS = {
@@ -198,12 +199,18 @@ def _check_conflicts(dd=None, dd0=None, dd_name=None, returnas=None):
198
199
 
199
200
 
200
201
  def _check_remove(key=None, dkey=None, name=None):
201
- c0 = isinstance(key, str) and key in dkey.keys()
202
- c1 = (
203
- isinstance(key, list)
204
- and all([isinstance(kk, str) and kk in dkey.keys() for kk in key])
202
+
203
+ # -----------------------
204
+ # check basic conformity
205
+
206
+ if isinstance(key, str):
207
+ key = [key]
208
+
209
+ c0 = (
210
+ isinstance(key, (list, tuple, set))
211
+ and all([isinstance(kk, str) for kk in key])
205
212
  )
206
- if not (c0 or c1):
213
+ if not c0:
207
214
  msg = (
208
215
  """
209
216
  Removed item must be a str already in self.d{}
@@ -213,8 +220,12 @@ def _check_remove(key=None, dkey=None, name=None):
213
220
  """.format(name, key, sorted(dkey.keys()))
214
221
  )
215
222
  raise Exception(msg)
216
- if c0:
217
- key = [key]
223
+
224
+ # -----------------------
225
+ # only keep relevant keys
226
+
227
+ key = [k0 for k0 in key if k0 in dkey.keys()]
228
+
218
229
  return key
219
230
 
220
231
 
@@ -327,7 +338,8 @@ def _remove_ref(
327
338
  for k0 in key:
328
339
  # Remove orphan ddata
329
340
  for k1 in dref0[k0]['ldata']:
330
- del ddata0[k1]
341
+ if k1 in ddata0.keys():
342
+ del ddata0[k1]
331
343
  del dref0[k0]
332
344
 
333
345
  # Double-check consistency
@@ -474,7 +486,7 @@ def _remove_obj(
474
486
  del dobj0[which][kk]
475
487
 
476
488
  # cleanup
477
- if propagate is True and len(dobj0.get(which, {})) == 0:
489
+ if propagate is True and dobj0.get(which) is not None and len(dobj0[which]) == 0:
478
490
  del dobj0[which]
479
491
 
480
492
  return _consistency(
@@ -1020,13 +1032,15 @@ def _check_dobj(
1020
1032
 
1021
1033
  # ----------------
1022
1034
  # Trivial case
1035
+ # ----------------
1036
+
1023
1037
  if dobj in [None, {}]:
1024
1038
  return {}
1025
1039
 
1026
- # ----------------
1027
- # Check conformity
1040
+ # ------------
1041
+ # Check type
1042
+ # ------------
1028
1043
 
1029
- # map possible non-conformities
1030
1044
  if not isinstance(dobj, dict):
1031
1045
  msg = (
1032
1046
  "Arg dobj must be a dict!\n"
@@ -1034,48 +1048,69 @@ def _check_dobj(
1034
1048
  )
1035
1049
  raise Exception(msg)
1036
1050
 
1051
+ # -----------------------------
1037
1052
  # Map possible non-conformities
1053
+ # -----------------------------
1054
+
1038
1055
  dc = {}
1039
1056
  dobj2 = {}
1040
1057
  for k0, v0 in dobj.items():
1041
1058
 
1059
+ # -----------------------
1042
1060
  # check types (str, dict)
1061
+
1043
1062
  c1 = isinstance(k0, str) and isinstance(v0, dict)
1044
1063
  if not c1:
1045
1064
  dc[k0] = "type(key) != str or type(value) != dict"
1046
1065
  continue
1047
1066
 
1048
- # check each key / value
1049
- lc2 = [
1050
- f'\t- {str(k1)}: type {type(v1)}'
1051
- f', key already in dobj0: {k1 in dobj0.get(k0, {}).keys()}'
1052
- for k1, v1 in v0.items()
1053
- if not (
1054
- (k1 is None or isinstance(k1, str))
1055
- and isinstance(v1, dict)
1056
- and k1 not in dobj0.get(k0, {}).keys()
1057
- )
1058
- ]
1059
- if len(lc2) > 0:
1060
- dc[k0] = (
1061
- f"The following keys of dobj['{k0}'] are not valid:\n"
1062
- + "\n".join(lc2)
1063
- )
1064
- continue
1065
1067
 
1066
- # set None to default keys if any None
1067
- dobj2[k0] = {}
1068
- for k1 in v0.keys():
1068
+ lc2 = []
1069
+ for k1, v1 in v0.items():
1069
1070
 
1071
+ # key
1070
1072
  key = _generic_check._obj_key(
1071
1073
  d0=dobj0.get(k0, {}),
1072
1074
  short=dshort.get(k0, k0[:4]),
1073
1075
  key=k1,
1074
1076
  )
1075
1077
 
1078
+ # value
1079
+ if not isinstance(v1, dict):
1080
+ lc2.append(f'\t- {key}: type {type(v1)}')
1081
+ continue
1082
+
1083
+ # key in dobj0
1084
+ if key in dobj0.get(k0, {}).keys():
1085
+
1086
+ isidentical = _generic_utils.compare_dict(
1087
+ d0=dobj0[k0][key],
1088
+ d1=v1,
1089
+ dname='v1',
1090
+ returnas=bool,
1091
+ verb=False,
1092
+ )
1093
+
1094
+ if not isidentical:
1095
+ lc2.append(f"\t- '{key}' already in dobj0['{k0}']")
1096
+ continue
1097
+
1098
+ # add to dobj2
1099
+ if dobj2.get(k0) is None:
1100
+ dobj2[k0] = {}
1076
1101
  dobj2[k0][key] = dict(dobj[k0][k1])
1077
1102
 
1103
+
1104
+ if len(lc2) > 0:
1105
+ dc[k0] = (
1106
+ f"The following keys of dobj['{k0}'] are not valid:\n"
1107
+ + "\n".join(lc2)
1108
+ )
1109
+
1110
+ # ----------------
1078
1111
  # Raise Exception
1112
+ # ----------------
1113
+
1079
1114
  if len(dc) > 0:
1080
1115
  msg = (
1081
1116
  "The following keys of dobj are non-conform:\n"
@@ -533,14 +533,6 @@ def _check_params(
533
533
  # ----
534
534
  # ndim
535
535
 
536
- if deriv not in [None, 0] and ndim > 1:
537
- msg = (
538
- "Arg deriv can only be used for 1d interpolations!\n"
539
- f"\t- ndim: {ndim}\n"
540
- f"\t- deriv: {deriv}\n"
541
- )
542
- raise Exception(msg)
543
-
544
536
  if ndim > 2:
545
537
  msg = (
546
538
  "Interpolations of more than 2 dimensions not implemented!\n"
@@ -551,12 +543,27 @@ def _check_params(
551
543
  # -----
552
544
  # deriv
553
545
 
554
- deriv = _generic_check._check_var(
555
- deriv, 'deriv',
556
- default=0,
557
- types=int,
558
- allowed=[ii for ii in range(deg + 1)],
559
- )
546
+ if ndim == 1:
547
+ deriv = _generic_check._check_var(
548
+ deriv, 'deriv',
549
+ default=0,
550
+ types=int,
551
+ allowed=[ii for ii in range(deg + 1)],
552
+ )
553
+
554
+ elif ndim == 2:
555
+
556
+ if np.isscalar(deriv):
557
+ deriv = (int(deriv), int(deriv))
558
+
559
+ deriv = tuple(_generic_check._check_var_iter(
560
+ deriv, 'deriv',
561
+ default=(0, 0),
562
+ types=(list, tuple),
563
+ types_iter=int,
564
+ size=2,
565
+ allowed=[ii for ii in range(deg + 1)],
566
+ ))
560
567
 
561
568
  # -------
562
569
  # log_log
@@ -1518,6 +1525,8 @@ def _interp2d(
1518
1525
  )(
1519
1526
  np.log(x0[slix]),
1520
1527
  np.log(x1[slix]),
1528
+ dx=deriv[0],
1529
+ dy=deriv[1],
1521
1530
  grid=False,
1522
1531
  )
1523
1532
  )
@@ -1533,6 +1542,8 @@ def _interp2d(
1533
1542
  )(
1534
1543
  x0[slix],
1535
1544
  x1[slix],
1545
+ dx=deriv[0],
1546
+ dy=deriv[1],
1536
1547
  grid=False,
1537
1548
  )
1538
1549
 
datastock/_class1_show.py CHANGED
@@ -13,7 +13,6 @@ from . import _generic_utils
13
13
  from . import _generic_check
14
14
 
15
15
 
16
-
17
16
  #############################################
18
17
  #############################################
19
18
  # Main
@@ -77,7 +76,13 @@ def main(
77
76
  for k0 in coll._dobj.keys():
78
77
  if 'obj' in show_which or k0 in show_which:
79
78
  func = coll._get_show_obj(k0)
80
- lcol, lar = func(coll=coll, which=k0, lcol=lcol, lar=lar, show=show)
79
+ lcol, lar = func(
80
+ coll=coll,
81
+ which=k0,
82
+ lcol=lcol,
83
+ lar=lar,
84
+ show=show,
85
+ )
81
86
 
82
87
  return _generic_utils.pretty_print(
83
88
  headers=lcol,
@@ -403,4 +408,116 @@ def _show_extract(dobj=None, lk=None):
403
408
  else:
404
409
  lv0.append(str(v0))
405
410
 
406
- return lv0
411
+ return lv0
412
+
413
+
414
+ #############################################
415
+ #############################################
416
+ # Main - details
417
+ #############################################
418
+
419
+
420
+ def main_details(
421
+ coll=None,
422
+ # options
423
+ which=None,
424
+ key=None,
425
+ # print parameters
426
+ sep=None,
427
+ line=None,
428
+ justify=None,
429
+ table_sep=None,
430
+ # bool options
431
+ verb=True,
432
+ returnas=False,
433
+ ):
434
+
435
+ # -------------
436
+ # check inputs
437
+ # -------------
438
+
439
+ which, key = _check_details(
440
+ coll=coll,
441
+ which=which,
442
+ key=key,
443
+ )
444
+
445
+ # intialize
446
+ lcol, lar = [], []
447
+
448
+ # -----------------------
449
+ # Build for dobj
450
+ # -----------------------
451
+
452
+ func = coll._get_show_details(which=which)
453
+ lcol, lar = func(
454
+ coll=coll,
455
+ key=key,
456
+ lcol=lcol,
457
+ lar=lar,
458
+ )
459
+
460
+ return _generic_utils.pretty_print(
461
+ headers=lcol,
462
+ content=lar,
463
+ sep=sep,
464
+ line=line,
465
+ table_sep=table_sep,
466
+ verb=verb,
467
+ returnas=returnas,
468
+ )
469
+
470
+
471
+ ###########################################################
472
+ ###########################################################
473
+ # check details
474
+ ###########################################################
475
+
476
+
477
+ def _check_details(
478
+ coll=None,
479
+ which=None,
480
+ key=None,
481
+ ):
482
+
483
+ # -------------
484
+ # key
485
+ # -------------
486
+
487
+ lok_which = list(coll._dobj.keys())
488
+ dkey = {}
489
+ for kw in lok_which:
490
+ dkey.update({
491
+ k1: kw for k1 in coll.dobj[kw].keys()
492
+ })
493
+
494
+ # check
495
+ try:
496
+ key = _generic_check._check_var(
497
+ key, 'key',
498
+ types=str,
499
+ allowed=list(dkey.keys()),
500
+ )
501
+
502
+ which = dkey[key]
503
+
504
+ except Exception:
505
+
506
+ # -------------
507
+ # show_which
508
+
509
+ lok = list(coll._dobj.keys())
510
+ which = _generic_check._check_var(
511
+ which, 'which',
512
+ types=str,
513
+ allowed=lok,
514
+ )
515
+
516
+ lok = [k1 for k1, kw in dkey.items() if kw == which]
517
+ key = _generic_check._check_var(
518
+ key, 'key',
519
+ types=str,
520
+ allowed=lok,
521
+ )
522
+
523
+ return which, key
@@ -140,6 +140,7 @@ def _check_var_iter(
140
140
  types=None,
141
141
  types_iter=None,
142
142
  default=None,
143
+ size=None,
143
144
  allowed=None,
144
145
  excluded=None,
145
146
  extra_msg=None,
@@ -188,6 +189,15 @@ def _check_var_iter(
188
189
  )
189
190
  raise Exception(_complete_extra_msg(msg, extra_msg))
190
191
 
192
+ # check size
193
+ if size is not None:
194
+ if len(var) != size:
195
+ msg = (
196
+ f"Arg {varname} must be an iterable of len = {size}\n"
197
+ f"Provided: {len(var)}"
198
+ )
199
+ raise Exception(_complete_extra_msg(msg, extra_msg))
200
+
191
201
  # check if allowed
192
202
  if allowed is not None:
193
203
  if any([vv not in allowed for vv in var]):
@@ -906,4 +906,4 @@ def get_data_str(dk=None, coll2=None, key=None, ndim=None, dscale=None):
906
906
  else:
907
907
  lab = f"{key} ({units})"
908
908
 
909
- return dk, key, lab
909
+ return dk, key, lab
@@ -783,4 +783,4 @@ def _label_axes(
783
783
  ax.set_xticks([])
784
784
  ax.set_yticks([])
785
785
 
786
- return dax
786
+ return dax
datastock/version.py CHANGED
@@ -1,2 +1,2 @@
1
1
  # Do not edit, pipeline versioning governed by git tags!
2
- __version__ = '0.0.37'
2
+ __version__ = '0.0.39'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: datastock
3
- Version: 0.0.37
3
+ Version: 0.0.39
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
@@ -3,13 +3,13 @@ datastock/_DataCollection_utils.py,sha256=hHf6HvGKMmM-psx3fj9QcY1TEmKrAtTdkRokH7
3
3
  datastock/__init__.py,sha256=i_Ijl-AM07n4zN52frWfbeGN1iB6v4e5oLzTuVIh_oM,217
4
4
  datastock/_class.py,sha256=Az9PS3aSskiPMb1ekt78Y2ynBujYVc_cDjJxW9xH9g4,47
5
5
  datastock/_class0.py,sha256=QULjNJke13jJrGLIeM7SWHZVziorDK_KCIlqq8LgS9U,5883
6
- datastock/_class1.py,sha256=PVlY3_kZQk_Nm4RL-GcdAGWoR7O4_h60NCveg2zAYgI,27591
6
+ datastock/_class1.py,sha256=0IDelA1ZXRJ7xAPWHnQUi9Hu-q8HOaDMN2SCKOm13ro,28347
7
7
  datastock/_class1_binning.py,sha256=LWHv2LIfgZfSFWYwqdcN0DKpNe6q7Go3sxfcJqmzTrI,28085
8
- datastock/_class1_check.py,sha256=UrbNtikISmNiIT96NQmjfVbhyxXrFmEJrjB8Yq5XvvI,49956
8
+ datastock/_class1_check.py,sha256=0oWF07MOo2c_G7219H7Dz-gRjBiTDDqbZ5loq9mC8ko,50574
9
9
  datastock/_class1_compute.py,sha256=yHdG0afYc_YtjpR6RvMh7SeRtWEyuHZ5y9VOPRIYVDo,31671
10
10
  datastock/_class1_domain.py,sha256=bkuCl29QO7C3RchC8qZyreU90QxmdDYNVYDmzuCLCUY,6252
11
- datastock/_class1_interpolate.py,sha256=-nuljuZfu6VxC40ydZ3JcRBkjOswQfFd7I_Od9iTwjI,37543
12
- datastock/_class1_show.py,sha256=J_CVhfxIYaicqtBoub6NvXwRHNmKHPnFTUt2cYb7I6M,9490
11
+ datastock/_class1_interpolate.py,sha256=3LRKK6aOepJLSnRoRpsS8RAnobqTdE-QZrkdQrnIaqc,37825
12
+ datastock/_class1_show.py,sha256=hqd-FeJ1NqiOzbrHzGMrwIo8_lLsjC199Zmw68NqkDQ,11745
13
13
  datastock/_class1_uniformize.py,sha256=NtriKnQAMhzdEAc766rgYWouz4GFEG1MVAVhu9VcaOk,26918
14
14
  datastock/_class2.py,sha256=ag8bfEtAF1G_ET4ufpWh8uM609cVUUfhAO6L8L7hc14,45322
15
15
  datastock/_class2_interactivity.py,sha256=YdM4cEjDrgh-bSsOzkkwtu-pqKoeqhSyfiZl2Udkl3E,16632
@@ -17,26 +17,26 @@ datastock/_class3.py,sha256=CH1oD_lTfVlcDp29L_iwzSfP78vX6_edDmZG9aSb1Ks,10848
17
17
  datastock/_direct_calls.py,sha256=EHFwI2mGMDqGz8_Bv2BseMBX4J8dSdE_RcNX3pt0ZYY,1801
18
18
  datastock/_export_dataframe.py,sha256=fy-uJR3EhDlHvd9ls1EQna_C8fyha1jCJLu1DTKTkdo,1576
19
19
  datastock/_find_plateau.py,sha256=sqnAuy0361DXkqBb_Lo1MmIGjn35tnKFvcv6MW6hifs,2685
20
- datastock/_generic_check.py,sha256=bxO453Q5WHyk7xUTRmEK8635ghiyqGMm3nqrcnCkmiI,24515
20
+ datastock/_generic_check.py,sha256=x41ITg3NxOiMK4IyIQX9wYrrqwPy88991rlvCpkFy8w,24812
21
21
  datastock/_generic_utils.py,sha256=iBsEQcVEoyN11-R5lMCZJzZUAksROkVD_gzKNvWXLvA,21381
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
25
- datastock/_plot_as_array.py,sha256=DwumZrzfKmAUeUF_y6v33mVBH1mVDBAlIbZ-wHnvn5E,22707
25
+ datastock/_plot_as_array.py,sha256=bnYui-3gli_AFnwYrbULCQVEq3i2TF7tUPWdqcJhDYQ,22708
26
26
  datastock/_plot_as_array_1d.py,sha256=6J-95zRTH2RPn_3g8GzDLX8HAGiLU39awNYi-EB2t7o,6611
27
- datastock/_plot_as_array_234d.py,sha256=k1AcKyseuObcte8yPm-FSn2g01rK-m_-japUA738IbA,21999
27
+ datastock/_plot_as_array_234d.py,sha256=-j33lga5no4K3IBNN4Iy0ziBhassDtWVo4KZuezhyiQ,22000
28
28
  datastock/_plot_as_mobile_lines.py,sha256=QSmJZUMKrNa__SzUCJO96KpnQPoNB_qpjK_ZRJt11oY,23289
29
29
  datastock/_plot_as_profile1d.py,sha256=ebOrzcV1m197Ua1CE04EV6mno_LryrumCpwGcrrDZ5Y,23740
30
30
  datastock/_plot_correlations.py,sha256=ITOypu_AEoKl0ihxocV-JVTXIHqut6p9TfG-xZmQysc,10175
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=Nn5V6g5Fni_GmDG2991HOKltYIl-MPDURNj8ze_u6oQ,80
34
+ datastock/version.py,sha256=Bb6NW7Kw8uEjYqVT0BzNF9HwbmuDI1NDZNdzzrPAbbU,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.37.dist-info/LICENSE,sha256=V1uXqi3vxR0QhB4QdFyjkynl6jpN4wZmlB5EMYJk0NM,1068
39
- datastock-0.0.37.dist-info/METADATA,sha256=QXFNu5BxSKujUX1jgwp84hVt3PnkpWP22OyEOUkbKf8,8666
40
- datastock-0.0.37.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
41
- datastock-0.0.37.dist-info/top_level.txt,sha256=BzJsLLK_zZw13WQCoMhC74qWVKalnVCjBxdPXvJn7HQ,25
42
- datastock-0.0.37.dist-info/RECORD,,
38
+ datastock-0.0.39.dist-info/LICENSE,sha256=V1uXqi3vxR0QhB4QdFyjkynl6jpN4wZmlB5EMYJk0NM,1068
39
+ datastock-0.0.39.dist-info/METADATA,sha256=az228ShtdPfti88S7_DpvjMCUMKVqmmCKsiY6HEB7uw,8666
40
+ datastock-0.0.39.dist-info/WHEEL,sha256=mguMlWGMX-VHnMpKOjjQidIo1ssRlCFu4a4mBpz1s2M,91
41
+ datastock-0.0.39.dist-info/top_level.txt,sha256=BzJsLLK_zZw13WQCoMhC74qWVKalnVCjBxdPXvJn7HQ,25
42
+ datastock-0.0.39.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.42.0)
2
+ Generator: setuptools (70.1.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5