dclab 0.62.6__cp38-cp38-win_amd64.whl → 0.62.8__cp38-cp38-win_amd64.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.

Potentially problematic release.


This version of dclab might be problematic. Click here for more details.

dclab/_version.py CHANGED
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '0.62.6'
16
- __version_tuple__ = version_tuple = (0, 62, 6)
15
+ __version__ = version = '0.62.8'
16
+ __version_tuple__ = version_tuple = (0, 62, 8)
@@ -161,7 +161,17 @@ CFG_METADATA = {
161
161
  ["subtract mean", fbool, "Subtract mean before processing"],
162
162
  # pipeline_kws
163
163
  ["filter name", str, "Fourier filter used"],
164
- # Corresponds to `filter_size_interpretation="frequency index"`
164
+ # qpretrieve defines the keyword argument `filter_size_interpretation`
165
+ # for determining the filter size in Fourier space. In DC, we
166
+ # need a well-defined value for the filter size. The most logical
167
+ # choice is to interpret the filter size as "frequency index", which
168
+ # is independent of the image shape and yields a good approximation
169
+ # of the actual resolution one can expect. The default value
170
+ # ("sideband distance") is a good choice for general QPI analysis,
171
+ # but there is no meaningful information one could extract from it
172
+ # by just looking at the number. Thus, the "filter size" that we
173
+ # see here corresponds to a filter size set in qpretrieve where
174
+ # `filter_size_interpretation="frequency index"`.
165
175
  ["filter size", float, "Fourier filter size [1/pix]"],
166
176
  ["scale to filter", fboolorfloat, "Scale QPI data to filter size"],
167
177
  # x, y coordinates, don't set if you wish None to be the default
Binary file
@@ -193,7 +193,7 @@ class IntegrityChecker(object):
193
193
  else:
194
194
  with warnings.catch_warnings(record=True) as ws:
195
195
  warnings.simplefilter("always")
196
- self.ds = load_file(path_or_ds)
196
+ self.ds = load_file(path_or_ds, enable_basins=False)
197
197
  for ww in ws:
198
198
  self.warn_cues.append(ICue(
199
199
  msg=f"{ww.category.__name__}: {ww.message}",
@@ -260,13 +260,24 @@ class IntegrityChecker(object):
260
260
  level="alert",
261
261
  category="basin data",
262
262
  ))
263
- for feat in bn["features"]:
264
- if feat not in self.ds.h5file[bpaths[0]]:
263
+ else:
264
+ if "basin_events" not in self.ds.h5file:
265
265
  cues.append(
266
- ICue(msg=f"Missing internal basin feature {feat}",
266
+ ICue(msg="Missing internal basin group "
267
+ "'basin_events', although an internal "
268
+ "basin is defined",
267
269
  level="violation",
268
270
  category="basin data",
269
271
  ))
272
+ else:
273
+ for feat in bn["features"]:
274
+ if feat not in self.ds.h5file["basin_events"]:
275
+ cues.append(
276
+ ICue(msg=f"Missing internal basin "
277
+ f"feature {feat}",
278
+ level="violation",
279
+ category="basin data",
280
+ ))
270
281
  return cues
271
282
 
272
283
  def check_compression(self, **kwargs):
@@ -1,6 +1,7 @@
1
1
  """Helper methods for copying .rtdc data"""
2
2
  from __future__ import annotations
3
3
 
4
+ import json
4
5
  import re
5
6
  from typing import List, Literal
6
7
 
@@ -10,8 +11,10 @@ import hdf5plugin
10
11
  import numpy as np
11
12
 
12
13
  from ..definitions import feature_exists, scalar_feature_exists
14
+ from ..util import hashobj
13
15
 
14
- from .fmt_hdf5 import DEFECTIVE_FEATURES
16
+ from .fmt_hdf5 import DEFECTIVE_FEATURES, RTDC_HDF5
17
+ from .writer import RTDCWriter
15
18
 
16
19
 
17
20
  def rtdc_copy(src_h5file: h5py.Group,
@@ -44,8 +47,7 @@ def rtdc_copy(src_h5file: h5py.Group,
44
47
  Add this prefix to the name of the logs and tables in `dst_h5file`.
45
48
  """
46
49
  # metadata
47
- for akey in src_h5file.attrs:
48
- dst_h5file.attrs[akey] = src_h5file.attrs[akey]
50
+ dst_h5file.attrs.update(src_h5file.attrs)
49
51
 
50
52
  # events in source file
51
53
  if "events" in src_h5file:
@@ -57,19 +59,6 @@ def rtdc_copy(src_h5file: h5py.Group,
57
59
  events_src += list(src_h5file["basin_events"].keys())
58
60
  events_src = sorted(set(events_src))
59
61
 
60
- # basins
61
- if include_basins and "basins" in src_h5file:
62
- dst_h5file.require_group("basins")
63
- for b_key in src_h5file["basins"]:
64
- if b_key in dst_h5file["basins"]:
65
- # This basin already exists.
66
- continue
67
- h5ds_copy(src_loc=src_h5file["basins"],
68
- src_name=b_key,
69
- dst_loc=dst_h5file["basins"],
70
- dst_name=b_key,
71
- recursive=False)
72
-
73
62
  # logs
74
63
  if include_logs and "logs" in src_h5file:
75
64
  dst_h5file.require_group("logs")
@@ -94,11 +83,12 @@ def rtdc_copy(src_h5file: h5py.Group,
94
83
  # dst_loc=dst_h5file["tables"],
95
84
  # dst_name=meta_prefix + tkey,
96
85
  # recursive=False)
97
- dst_h5file["tables"].create_dataset(
86
+ copy_table = dst_h5file["tables"].create_dataset(
98
87
  name=tkey,
99
88
  data=src_h5file["tables"][tkey][:],
100
89
  fletcher32=True,
101
90
  **hdf5plugin.Zstd(clevel=5))
91
+ copy_table.attrs.update(src_h5file["tables"][tkey].attrs)
102
92
 
103
93
  # events
104
94
  if isinstance(features, list):
@@ -130,6 +120,12 @@ def rtdc_copy(src_h5file: h5py.Group,
130
120
  if feat in feature_iter:
131
121
  feature_iter.remove(feat)
132
122
 
123
+ # copy basin definitions
124
+ if include_basins and "basins" in src_h5file:
125
+ basin_definition_copy(src_h5file=src_h5file,
126
+ dst_h5file=dst_h5file,
127
+ features_iter=feature_iter)
128
+
133
129
  if feature_iter:
134
130
  dst_h5file.require_group("events")
135
131
  for feat in feature_iter:
@@ -170,6 +166,56 @@ def rtdc_copy(src_h5file: h5py.Group,
170
166
  )
171
167
 
172
168
 
169
+ def basin_definition_copy(src_h5file, dst_h5file, features_iter):
170
+ """Copy basin definitions `src_h5file["basins"]` to the new file
171
+
172
+ Normally, we would just use :func:`h5ds_copy` to copy basins from
173
+ one dataset to another. However, if we are e.g. only copying scalar
174
+ features, and there are non-scalar features in the internal basin,
175
+ then we must rewrite the basin definition of the internal basin.
176
+
177
+ The `features_iter` list of features defines which features are
178
+ relevant for the internal basin.
179
+ """
180
+ dst_h5file.require_group("basins")
181
+ for b_key in src_h5file["basins"]:
182
+ if b_key in dst_h5file["basins"]:
183
+ # This basin already exists.
184
+ continue
185
+ # Load the basin information
186
+ basin_dicts = RTDC_HDF5.basin_get_dicts_from_h5file(src_h5file)
187
+ for bn in basin_dicts:
188
+ if bn["type"] == "internal":
189
+ # Make sure we define the internal features selected
190
+ feat_used = [f for f in bn["features"] if f in features_iter]
191
+ if len(feat_used) == 0:
192
+ # We don't have any internal features, don't write anything
193
+ continue
194
+ elif feat_used != bn["features"]:
195
+ bn["features"] = feat_used
196
+ rewrite = True
197
+ else:
198
+ rewrite = False
199
+ else:
200
+ # We do not have an internal basin, just copy everything
201
+ rewrite = False
202
+
203
+ if rewrite:
204
+ # Convert edited `bn` to JSON and write feature data
205
+ b_lines = json.dumps(bn, indent=2).split("\n")
206
+ key = hashobj(b_lines)
207
+ if key not in dst_h5file["basins"]:
208
+ with RTDCWriter(dst_h5file) as hw:
209
+ hw.write_text(dst_h5file["basins"], key, b_lines)
210
+ else:
211
+ # copy only
212
+ h5ds_copy(src_loc=src_h5file["basins"],
213
+ src_name=b_key,
214
+ dst_loc=dst_h5file["basins"],
215
+ dst_name=b_key,
216
+ recursive=False)
217
+
218
+
173
219
  def h5ds_copy(src_loc, src_name, dst_loc, dst_name=None,
174
220
  ensure_compression=True, recursive=True):
175
221
  """Copy an HDF5 Dataset from one group to another
@@ -257,8 +303,7 @@ def h5ds_copy(src_loc, src_name, dst_loc, dst_name=None,
257
303
  for chunk in src.iter_chunks():
258
304
  dst[chunk] = src[chunk]
259
305
  # Also write all the attributes
260
- for key in src.attrs:
261
- dst.attrs[key] = src.attrs[key]
306
+ dst.attrs.update(src.attrs)
262
307
  else:
263
308
  # Copy the Dataset to the destination as-is.
264
309
  h5py.h5o.copy(src_loc=src_loc.id,
@@ -224,6 +224,7 @@ class Export(object):
224
224
  skip_checks: bool
225
225
  Disable checking whether all features have the same length.
226
226
 
227
+
227
228
  .. versionchanged:: 0.58.0
228
229
 
229
230
  The ``basins`` keyword argument was added, and it is now possible
@@ -17,6 +17,10 @@ import numpy as np
17
17
  from ..util import copy_if_needed
18
18
 
19
19
 
20
+ class BasinFeatureMissingWarning(UserWarning):
21
+ """Used when a badin feature is defined but not stored"""
22
+
23
+
20
24
  class CyclicBasinDependencyFoundWarning(UserWarning):
21
25
  """Used when a basin is defined in one of its sub-basins"""
22
26
 
@@ -498,6 +502,19 @@ class InternalH5DatasetBasin(Basin):
498
502
  if self._features is None:
499
503
  raise ValueError("You must specify features when defining "
500
504
  "internal basins.")
505
+ # Redefine the features if necessary
506
+ h5root = self._basinmap_referrer().h5file
507
+ available_features = []
508
+ for feat in self._features:
509
+ if self.location in h5root and feat in h5root[self.location]:
510
+ available_features.append(feat)
511
+ else:
512
+ warnings.warn(
513
+ f"Feature '{feat}' is defined as an internal basin, "
514
+ f"but it cannot be found in '{self.location}'.",
515
+ BasinFeatureMissingWarning)
516
+ self._features.clear()
517
+ self._features += available_features
501
518
 
502
519
  def _load_dataset(self, location, **kwargs):
503
520
  from .fmt_dict import RTDC_Dict
@@ -509,8 +526,7 @@ class InternalH5DatasetBasin(Basin):
509
526
  return RTDC_Dict(ds_dict)
510
527
 
511
528
  def is_available(self):
512
- h5root = self._basinmap_referrer().h5file
513
- return self.location in h5root
529
+ return bool(self._features)
514
530
 
515
531
  def verify_basin(self, *args, **kwargs):
516
532
  """It's not necessary to verify internal basins"""
@@ -175,10 +175,15 @@ class RTDC_HDF5(RTDCBase):
175
175
 
176
176
  def basins_get_dicts(self):
177
177
  """Return list of dicts for all basins defined in `self.h5file`"""
178
+ return self.basin_get_dicts_from_h5file(self.h5file)
179
+
180
+ @staticmethod
181
+ def basin_get_dicts_from_h5file(h5file):
182
+ """Return list of dicts for all basins defined in `h5file`"""
178
183
  basins = []
179
184
  # Do not sort anything here, sorting is done in `RTDCBase`.
180
- for bk in self.h5file.get("basins", []):
181
- bdat = list(self.h5file["basins"][bk])
185
+ for bk in h5file.get("basins", []):
186
+ bdat = list(h5file["basins"][bk])
182
187
  if isinstance(bdat[0], bytes):
183
188
  bdat = [bi.decode("utf") for bi in bdat]
184
189
  bdict = json.loads(" ".join(bdat))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dclab
3
- Version: 0.62.6
3
+ Version: 0.62.8
4
4
  Summary: Library for real-time deformability cytometry (RT-DC)
5
5
  Author: Benedikt Hartmann, Eoghan O'Connell, Maik Herbig, Maximilian Schlögel, Nadia Sbaa, Paul Müller, Philipp Rosendahl, Raghava Alajangi
6
6
  Maintainer-email: Paul Müller <dev@craban.de>
@@ -1,7 +1,7 @@
1
1
  dclab/__init__.py,sha256=7_y6YtYcoL_a5M6Q9PiwZPzHSxS66yCTgs_uuK5C1dg,835
2
- dclab/_version.py,sha256=LEliG6wuW6OUmRLksdbgGKe5vSPL1gmSvPeQPRsZxm4,429
2
+ dclab/_version.py,sha256=qVziVuodFeRMjE4HHLtmm_Yy49iMpeo90iqYHmVvyE0,429
3
3
  dclab/cached.py,sha256=t01BYTf43VEsBYa0c-bMxgceF5vKoGV73b42UlLH6Lo,3014
4
- dclab/downsampling.cp38-win_amd64.pyd,sha256=mTBK6IaiiXx-c4nVHwRa1oDF2vEKdqhEFW3xlEGOsXU,188416
4
+ dclab/downsampling.cp38-win_amd64.pyd,sha256=ulqx8_pGQ4S_WlSXrdgKFqhWZLTPm3HyE3mUsVBl6RA,188416
5
5
  dclab/downsampling.pyx,sha256=Ez6MbNbzCUzs2IXXKtAYsjtYqP22kI8hdA1IE-3mqvY,7488
6
6
  dclab/http_utils.py,sha256=nneq9Cx8dw8ChQx5oIg2pN0xGkvNWCMSY5VYmttqyXA,11232
7
7
  dclab/kde_contours.py,sha256=k0Y1UsJNtuYY8iqYmfQ-Nml-dFpJAcigd3vmt9U6zsY,6967
@@ -22,7 +22,7 @@ dclab/cli/task_verify_dataset.py,sha256=OFy7aWHvA6NInndnMBg0MVZSBibvJeNHhc_C79_9
22
22
  dclab/definitions/__init__.py,sha256=cubgnqpBbPgk_c1_uUPggRsmtUd-baV1haybLqbMf8k,2860
23
23
  dclab/definitions/feat_const.py,sha256=I772sd6aSNv8PzhT9MHnNKbGhx6ZJt3z3_FVs5oxMtw,9836
24
24
  dclab/definitions/feat_logic.py,sha256=uMHXInzESTtBWPBsk9PxqSFFrSM1vNbTDxOlso9zhT0,6006
25
- dclab/definitions/meta_const.py,sha256=WnCUyfSdpwWIM4FsNJjiPomEgXM95C4pyGRSP2QzESI,12641
25
+ dclab/definitions/meta_const.py,sha256=X3U3orhlY_i78TYN4DUBJaOGBltNnXaRsQauH1LxuJ0,13377
26
26
  dclab/definitions/meta_logic.py,sha256=no6fTCmKFrwpmirs_9358-Ysh5aZeib1xJrL_30WkqU,4305
27
27
  dclab/definitions/meta_parse.py,sha256=UtgSm7hkfqnyj6FAbDmctbXqfZOHU9d4uoMf3EcYWtQ,2487
28
28
  dclab/external/__init__.py,sha256=cnwVRsdIQOHQrys3-g_dslbTEUi1hfTL709TaZ6hFVY,97
@@ -35,14 +35,14 @@ dclab/external/packaging/version.py,sha256=NgEgv7me4UCvFMyiNYD-nc_28b9UHUvBVh8RD
35
35
  dclab/external/skimage/LICENSE,sha256=Tdv08zzxYV32WRdYnco9P3nVyS5w17OTxIAFeRSd1wc,1480
36
36
  dclab/external/skimage/__init__.py,sha256=icOIlThkyn_hxmnM_i7OpbU7fhvqYWNpGdNGD38qthU,74
37
37
  dclab/external/skimage/_find_contours.py,sha256=auRMNfZg7B73DX7kPXxgD8gMXXB3Lk9QDWt4wlQnUWg,9556
38
- dclab/external/skimage/_find_contours_cy.cp38-win_amd64.pyd,sha256=pR4kGBT_u7W6lDT5wt1kwk7frjY89SW6HTh59kTb0hI,143360
38
+ dclab/external/skimage/_find_contours_cy.cp38-win_amd64.pyd,sha256=JdDeLPcg72y02Mbm7pYumkbp9UxL8bMnazadOElmTCU,143360
39
39
  dclab/external/skimage/_find_contours_cy.pyx,sha256=c-EobLhKjZNCpuqWxmvrcH35uAY_Bu-_hZiUHbXODms,7349
40
- dclab/external/skimage/_pnpoly.cp38-win_amd64.pyd,sha256=7NiSKwxzVPO8gYq3ScQv8QT_3zJvgAIhTCUMGcY26eY,159232
40
+ dclab/external/skimage/_pnpoly.cp38-win_amd64.pyd,sha256=DshPeQLCgW7P83qUgIum_COMU052pXQyCdvBwfNjsvU,159232
41
41
  dclab/external/skimage/_pnpoly.pyx,sha256=eHV3DlIGcBhAQ12-Y58EYq8xcq0Sibyc4xTxzX9NJsk,2603
42
42
  dclab/external/skimage/measure.py,sha256=rzyI0HCr9O9GJNieVW8pcqDjTGRAdSehDUawD8QkIAE,254
43
43
  dclab/external/skimage/pnpoly.py,sha256=zB4rSxjHJyY1OsGZ7QfFQqxIEDLGK8CWPehwutoFqm4,1400
44
44
  dclab/external/skimage/_shared/__init__.py,sha256=q29esTsNh0HfQxcd2EuwdYNbEBJwo_qY4dfv7RihzoA,38
45
- dclab/external/skimage/_shared/geometry.cp38-win_amd64.pyd,sha256=HBLtD3K6cCU0t4_U3WXqEdaGPHYyvfcp1eR36xB2_0I,21504
45
+ dclab/external/skimage/_shared/geometry.cp38-win_amd64.pyd,sha256=_9ADx4RD-i1HshD1MyxXx0M50S4eKSs-x_1SiRT2jyg,21504
46
46
  dclab/external/skimage/_shared/geometry.pxd,sha256=3gJ7fbXXsxJunSN4biE0dzEbZpX9ZqzR4cUDDN0JnAU,352
47
47
  dclab/external/skimage/_shared/geometry.pyx,sha256=b6hADE8chse63haO1Kdt13_oQ54J9tkBf7dVA22-s-M,1722
48
48
  dclab/external/statsmodels/LICENSE,sha256=8D7nwukc6YgsZCdN9mG0psM3I9j-z8fuUgFyVhnMXpU,1672
@@ -80,12 +80,12 @@ dclab/lme4/lme4_template.R,sha256=9jRrdMVh9UlfzyE4BsktRTlFzeWI6AvbwzZXzNO5EfI,26
80
80
  dclab/lme4/rsetup.py,sha256=_3ov0QlBH_CguoAanKmsm09JfgjfADhRimqMR16FnMk,6094
81
81
  dclab/lme4/wrapr.py,sha256=tZYvUy5LUM7sM3d8NiOIlxbrtu89LAihG4hqI6MSv2Q,15403
82
82
  dclab/rtdc_dataset/__init__.py,sha256=BuWKEUm7QUe-Kj1wMR0AXON_XN2mzXlbOgouHdnvAw4,501
83
- dclab/rtdc_dataset/check.py,sha256=pNxnTLxaKHmxc5dq4rfX-2DHi1EADTM2wYKJ3fw7lXw,35273
83
+ dclab/rtdc_dataset/check.py,sha256=l2QoIL3gno_Z2-e8RvYHAurHZP_oLGtZk8l6jUDiuTA,35908
84
84
  dclab/rtdc_dataset/config.py,sha256=HVJiqKlqd-SpYqnNTKSr1yUsq2Bkfq5s5zluT-8PUc0,17965
85
- dclab/rtdc_dataset/copier.py,sha256=zg9iuokrH6E-yqF-guZhvDs6JyaDK0kAK9tNzWEJI-I,12289
85
+ dclab/rtdc_dataset/copier.py,sha256=f8ySDHnuSWfZYI_kPCCrzickTOo6NqovBGvzMTCbK4M,14339
86
86
  dclab/rtdc_dataset/core.py,sha256=yTxpOPqb6Ihaqmq5wJLRtkxHzpPQNUN3O3DyOw0dZJ4,38663
87
- dclab/rtdc_dataset/export.py,sha256=4hvuRM2Ta7RW0H7Dp7sD4QojBdcbMDD6vhrxJACLVjI,30217
88
- dclab/rtdc_dataset/feat_basin.py,sha256=gMvnrbuoj8g0qkGHVLAxQOUA9yWyLLmo5NqzEDuj1EU,20566
87
+ dclab/rtdc_dataset/export.py,sha256=iqWzj9BjPVhs-d3898DLM9y5rLxTSIaN0S3po42IPdU,30219
88
+ dclab/rtdc_dataset/feat_basin.py,sha256=Gi9Ct5TRABieacG5fVMONBocVbik_D5p6Ii1NYNdgVM,21241
89
89
  dclab/rtdc_dataset/feat_temp.py,sha256=5QiF8Nc8MVoTtinYlvfoSuoopND-uvWVWKjMggBTHLw,3796
90
90
  dclab/rtdc_dataset/filter.py,sha256=IRaEUt0tWtZGLKYvtqzfYO2kN5yhqx9eLoHd3VOLCTE,10286
91
91
  dclab/rtdc_dataset/fmt_dict.py,sha256=-tlzOwsOCh4Vt3rSiBUvMKW7vBgrRNubU7ZHdGMB3gE,3112
@@ -111,7 +111,7 @@ dclab/rtdc_dataset/fmt_dcor/basin.py,sha256=JzofdU45r-TTBGl8Nnvo-j-YsnT23X2gXnva
111
111
  dclab/rtdc_dataset/fmt_dcor/logs.py,sha256=e1BiJ8we4IghbxVAZM56K4P4IjJDHIBfHH_Uz-p2w9g,609
112
112
  dclab/rtdc_dataset/fmt_dcor/tables.py,sha256=rCkKnSoJpQPhjhCgG9hAd6L1wimlIMd7qM5vaNATgbM,1109
113
113
  dclab/rtdc_dataset/fmt_hdf5/__init__.py,sha256=UnitCqiMkY8mMcUKgfLBRVBP5srpTNLrZd3BIRr2tZE,276
114
- dclab/rtdc_dataset/fmt_hdf5/base.py,sha256=hwcOc7vvdzqdWX-C3WBKJig7ecPivvpeGUigifYAzCE,6393
114
+ dclab/rtdc_dataset/fmt_hdf5/base.py,sha256=CAcYaN_6X10NK-R1IvlJj6y70lNyAVyT0OnGMs4VMB4,6583
115
115
  dclab/rtdc_dataset/fmt_hdf5/basin.py,sha256=qbYgj0RKS9k6RTu5XmYEtgdcbqnVNokD3rAxogyrWrU,822
116
116
  dclab/rtdc_dataset/fmt_hdf5/events.py,sha256=6u2K86vqxd4qWaYk_hzRA5LMQRrduNvMxmloWWt4aMc,8488
117
117
  dclab/rtdc_dataset/fmt_hdf5/feat_defect.py,sha256=w7dfs6pULUVJ8Ypz2VBYIKokKVhCn6as6fn3GL8Z7s0,6704
@@ -129,9 +129,9 @@ dclab/rtdc_dataset/fmt_tdms/event_mask.py,sha256=cW-Tw2PIe6X1Hc4UZJ22-mI_qFaIMWA
129
129
  dclab/rtdc_dataset/fmt_tdms/event_trace.py,sha256=ktWnXfMir1v5Wfeo7tOd0txSOe1bgsXotf9Ul5T5-B4,5361
130
130
  dclab/rtdc_dataset/fmt_tdms/exc.py,sha256=FfxUY4LGIMPGJTYmGITmEm7X5iu8GBsj7OfZR8Zb-IE,850
131
131
  dclab/rtdc_dataset/fmt_tdms/naming.py,sha256=SFeWiwIN7sg0qNe0Aya2bZshN1Zbw4YcOKunZ6kfIGM,5524
132
- dclab-0.62.6.dist-info/LICENSE,sha256=ayjnuJcdf_kpkDyD61tUcVqVAQaNSYXJ73m5HVB4G8s,18474
133
- dclab-0.62.6.dist-info/METADATA,sha256=mLRU5G0RnPKsM-5X2pDGDOriLjcXPYk9gZLfaWAs3vE,4900
134
- dclab-0.62.6.dist-info/WHEEL,sha256=BiKefS7XHc6W0zY4ROW4fxXTZBRH27JLKtM6pqE4hBs,99
135
- dclab-0.62.6.dist-info/entry_points.txt,sha256=eOpjgznu-eW-9utUpLU-77O5098YyUEgGF3ksGMdtec,273
136
- dclab-0.62.6.dist-info/top_level.txt,sha256=irvwZMgs1edY1Zj60ZFk7Almb9Zhk4k6E6aC4YPFnnM,6
137
- dclab-0.62.6.dist-info/RECORD,,
132
+ dclab-0.62.8.dist-info/LICENSE,sha256=ayjnuJcdf_kpkDyD61tUcVqVAQaNSYXJ73m5HVB4G8s,18474
133
+ dclab-0.62.8.dist-info/METADATA,sha256=XEPR3tgdPJL4PXaajLI_JCjmeYH0H9Zlf91vRVluadc,4900
134
+ dclab-0.62.8.dist-info/WHEEL,sha256=rTcqimtzpX3smAWAhGmiRSWAxTY4PqYPNE-p4kscHDQ,99
135
+ dclab-0.62.8.dist-info/entry_points.txt,sha256=eOpjgznu-eW-9utUpLU-77O5098YyUEgGF3ksGMdtec,273
136
+ dclab-0.62.8.dist-info/top_level.txt,sha256=irvwZMgs1edY1Zj60ZFk7Almb9Zhk4k6E6aC4YPFnnM,6
137
+ dclab-0.62.8.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.2.0)
2
+ Generator: setuptools (75.3.0)
3
3
  Root-Is-Purelib: false
4
4
  Tag: cp38-cp38-win_amd64
5
5