dclab 0.62.9__cp38-cp38-win_amd64.whl → 0.62.11__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.9'
16
- __version_tuple__ = version_tuple = (0, 62, 9)
15
+ __version__ = version = '0.62.11'
16
+ __version_tuple__ = version_tuple = (0, 62, 11)
Binary file
@@ -178,42 +178,51 @@ def basin_definition_copy(src_h5file, dst_h5file, features_iter):
178
178
  relevant for the internal basin.
179
179
  """
180
180
  dst_h5file.require_group("basins")
181
- for b_key in src_h5file["basins"]:
181
+ # Load the basin information
182
+ basin_dicts = RTDC_HDF5.basin_get_dicts_from_h5file(src_h5file)
183
+ for bn in basin_dicts:
184
+ b_key = bn["key"]
185
+
182
186
  if b_key in dst_h5file["basins"]:
183
- # This basin already exists.
187
+ # already stored therein
184
188
  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
189
+
190
+ # sanity check
191
+ if b_key not in src_h5file["basins"]:
192
+ raise ValueError(
193
+ f"Failed to parse basin information correctly. Source file "
194
+ f"{src_h5file} does not contain basin {b_key} which I got "
195
+ f"from `RTDC_HDF5.basin_get_dicts_from_h5file`.")
196
+
197
+ if bn["type"] == "internal":
198
+ # Make sure we define the internal features selected
199
+ feat_used = [f for f in bn["features"] if f in features_iter]
200
+ if len(feat_used) == 0:
201
+ # We don't have any internal features, don't write anything
202
+ continue
203
+ elif feat_used != bn["features"]:
204
+ bn["features"] = feat_used
205
+ rewrite = True
199
206
  else:
200
- # We do not have an internal basin, just copy everything
201
207
  rewrite = False
208
+ else:
209
+ # We do not have an internal basin, just copy everything
210
+ rewrite = False
202
211
 
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)
212
+ if rewrite:
213
+ # Convert edited `bn` to JSON and write feature data
214
+ b_lines = json.dumps(bn, indent=2).split("\n")
215
+ key = hashobj(b_lines)
216
+ if key not in dst_h5file["basins"]:
217
+ with RTDCWriter(dst_h5file) as hw:
218
+ hw.write_text(dst_h5file["basins"], key, b_lines)
219
+ else:
220
+ # copy only
221
+ h5ds_copy(src_loc=src_h5file["basins"],
222
+ src_name=b_key,
223
+ dst_loc=dst_h5file["basins"],
224
+ dst_name=b_key,
225
+ recursive=False)
217
226
 
218
227
 
219
228
  def h5ds_copy(src_loc, src_name, dst_loc, dst_name=None,
@@ -319,18 +319,21 @@ class Export(object):
319
319
 
320
320
  # write export log
321
321
  hw.store_log(time.strftime("dclab-export_%Y-%m-%d_%H.%M.%S"),
322
- json.dumps({
323
- "dclab version": version_tuple,
324
- "kwargs": {
325
- "features": features,
326
- "filtered": filtered,
327
- "logs": logs,
328
- "tables": tables,
329
- "basins": basins,
330
- "meta_prefix": meta_prefix,
331
- "skip_checks": skip_checks
332
- }
333
- }).split("\n"))
322
+ json.dumps(
323
+ {"dclab version": version_tuple,
324
+ "kwargs": {
325
+ "features": features,
326
+ "filtered": filtered,
327
+ "logs": logs,
328
+ "tables": tables,
329
+ "basins": basins,
330
+ "meta_prefix": meta_prefix,
331
+ "skip_checks": skip_checks
332
+ }
333
+ },
334
+ indent=2,
335
+ sort_keys=True,
336
+ ).split("\n"))
334
337
 
335
338
  if logs:
336
339
  # write logs
@@ -30,11 +30,13 @@ class DCORTables:
30
30
  tables = {}
31
31
  for key in table_data:
32
32
  columns, data = table_data[key]
33
- ds_dt = np.dtype({'names': columns,
34
- 'formats': [np.float64] * len(columns)})
35
33
  tab_data = np.asarray(data)
36
- rec_arr = np.rec.array(tab_data, dtype=ds_dt)
37
- tables[key] = rec_arr
34
+ if columns is not None:
35
+ # We have a rec-array (named columns)
36
+ ds_dt = np.dtype({'names': columns,
37
+ 'formats': [np.float64] * len(columns)})
38
+ tab_data = np.rec.array(tab_data, dtype=ds_dt)
39
+ tables[key] = tab_data
38
40
 
39
41
  self._tables_cache = tables
40
42
  return self._tables_cache
@@ -616,7 +616,7 @@ class RTDCWriter:
616
616
  convfunc = dfn.get_config_value_func(sec, ck)
617
617
  self.h5file.attrs[idk] = convfunc(value)
618
618
 
619
- def store_table(self, name, cmp_array):
619
+ def store_table(self, name, cmp_array, h5_attrs=None):
620
620
  """Store a compound array table
621
621
 
622
622
  Tables are semi-metadata. They may contain information collected
@@ -629,16 +629,33 @@ class RTDCWriter:
629
629
  ----------
630
630
  name: str
631
631
  Name of the table
632
- cmp_array: np.recarray, h5py.Dataset, or dict
632
+ cmp_array: np.recarray, h5py.Dataset, np.ndarray, or dict
633
633
  If a np.recarray or h5py.Dataset are provided, then they
634
634
  are written as-is to the file. If a dictionary is provided,
635
635
  then the dictionary is converted into a numpy recarray.
636
+ If a numpy array is provided, then the array is written
637
+ as a raw table (no column names) to the file.
638
+ h5_attrs: dict, optional
639
+ Attributes to store alongside the corresponding HDF5 dataset
636
640
  """
637
- if isinstance(cmp_array, (np.recarray, h5py.Dataset)):
641
+ if h5_attrs is None:
642
+ h5_attrs = {}
643
+
644
+ if isinstance(cmp_array, np.recarray):
638
645
  # A table is a compound array (np.recarray). If we are here,
639
- # this means that the user passed an instance of np.recarray
640
- # or an instance h5py.Dataset (which we trust to be a proper
646
+ # this means that the user passed an instance of np.recarray.
647
+ pass
648
+ elif isinstance(cmp_array, h5py.Dataset):
649
+ # An instance of h5py.Dataset (which we trust to be a proper
641
650
  # compound dataset at this point). No additional steps needed.
651
+ h5_attrs.update(cmp_array.attrs)
652
+ pass
653
+ elif isinstance(cmp_array, np.ndarray):
654
+ # A numpy array was passed. This usually means we have something
655
+ # that we can look at, so we add image tags.
656
+ h5_attrs['CLASS'] = np.bytes_('IMAGE')
657
+ h5_attrs['IMAGE_VERSION'] = np.bytes_('1.2')
658
+ h5_attrs['IMAGE_SUBCLASS'] = np.bytes_('IMAGE_GRAYSCALE')
642
659
  pass
643
660
  elif isinstance(cmp_array, dict):
644
661
  # The user passed a dict which we now have to convert to a
@@ -659,16 +676,18 @@ class RTDCWriter:
659
676
  else:
660
677
  raise NotImplementedError(
661
678
  f"Cannot convert {type(cmp_array)} to table!")
679
+
680
+ # data
662
681
  group = self.h5file.require_group("tables")
663
682
  tab = group.create_dataset(
664
683
  name,
665
684
  data=cmp_array,
666
685
  fletcher32=True,
667
686
  **self.compression_kwargs)
668
- # Also store metadata
669
- if hasattr(cmp_array, "attrs"):
670
- for key in cmp_array.attrs:
671
- tab.attrs[key] = cmp_array.attrs[key]
687
+
688
+ # metadata
689
+ if h5_attrs:
690
+ tab.attrs.update(h5_attrs)
672
691
 
673
692
  def version_brand(self, old_version=None, write_attribute=True):
674
693
  """Perform version branding
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dclab
3
- Version: 0.62.9
3
+ Version: 0.62.11
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=NL_KF0HMvQA9ov7bA-jEvOCXhXF0zvRwnc5Mbv4n8RM,429
2
+ dclab/_version.py,sha256=6k5Rk2Ap5YBUoGawDNLFVJOIfoIxcLr4FCtSHL8cFtM,431
3
3
  dclab/cached.py,sha256=t01BYTf43VEsBYa0c-bMxgceF5vKoGV73b42UlLH6Lo,3014
4
- dclab/downsampling.cp38-win_amd64.pyd,sha256=XQU_KjcUsxy_JnqR-tw2R6V7jqBHC6aQ37mo-1Csj40,188416
4
+ dclab/downsampling.cp38-win_amd64.pyd,sha256=Cja8o_nAfEghPl5QWchDSeo0XHR3BjrEVR7vBK9awTA,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
@@ -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=w1ki1KOaPiGNx2YdWm2O5fSRGj9jUFaIV1CATKpErDU,143360
38
+ dclab/external/skimage/_find_contours_cy.cp38-win_amd64.pyd,sha256=qI8cmG0oKKLnp4X1zdWasThrkvlYcdvUWkaYeHQEIv4,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=wp6bA4-bCIzfjzvBP1AvT9a5JbOIpAgOg7QJySzPke4,159232
40
+ dclab/external/skimage/_pnpoly.cp38-win_amd64.pyd,sha256=sfQRn1BbmMQbUEq5tA8aTZHoKQJSLAdKLTgBFfaIHfk,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=yH5tAYkqm75XVjR9I8Wrsv_KUevp4eYHE5885yyb_js,21504
45
+ dclab/external/skimage/_shared/geometry.cp38-win_amd64.pyd,sha256=ir0LVlLVx0sHKIO8PDHK-37vFfCoija2Tm-eZpxQ9TM,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
@@ -82,9 +82,9 @@ dclab/lme4/wrapr.py,sha256=tZYvUy5LUM7sM3d8NiOIlxbrtu89LAihG4hqI6MSv2Q,15403
82
82
  dclab/rtdc_dataset/__init__.py,sha256=BuWKEUm7QUe-Kj1wMR0AXON_XN2mzXlbOgouHdnvAw4,501
83
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=f8ySDHnuSWfZYI_kPCCrzickTOo6NqovBGvzMTCbK4M,14339
85
+ dclab/rtdc_dataset/copier.py,sha256=imD0ijAz9BY0nksF2zUBeoGmeo_dUTUnBgY9TqRaD4g,14528
86
86
  dclab/rtdc_dataset/core.py,sha256=7pQOcFGEO2AnI7r8rJLjXkAi8mXkY4GCQ41eXfBHMx0,38999
87
- dclab/rtdc_dataset/export.py,sha256=iqWzj9BjPVhs-d3898DLM9y5rLxTSIaN0S3po42IPdU,30219
87
+ dclab/rtdc_dataset/export.py,sha256=gdcg8FSacFBdIfCPbquEOV7J96FlHAvWu9PpK2KTdkc,30351
88
88
  dclab/rtdc_dataset/feat_basin.py,sha256=nDMMkjBmVrH26_lhSJ4pmgUfcwdV1wDON-Hu-864is8,21622
89
89
  dclab/rtdc_dataset/feat_temp.py,sha256=5QiF8Nc8MVoTtinYlvfoSuoopND-uvWVWKjMggBTHLw,3796
90
90
  dclab/rtdc_dataset/filter.py,sha256=IRaEUt0tWtZGLKYvtqzfYO2kN5yhqx9eLoHd3VOLCTE,10286
@@ -92,7 +92,7 @@ dclab/rtdc_dataset/fmt_dict.py,sha256=-tlzOwsOCh4Vt3rSiBUvMKW7vBgrRNubU7ZHdGMB3g
92
92
  dclab/rtdc_dataset/fmt_http.py,sha256=XzcgvJ4lm-eWbveBraBc5PPJeGWeUGC35p8ptnxBycc,3476
93
93
  dclab/rtdc_dataset/fmt_s3.py,sha256=35ZNCSbfpn75QHqrciMur2MUAiViddCAZsXkzql6uv0,10962
94
94
  dclab/rtdc_dataset/load.py,sha256=IKRtlZbHGAHNCNaZQPRXFxJjnnMH5HXnhNuIwqYmHzo,2545
95
- dclab/rtdc_dataset/writer.py,sha256=f4xU55FvxJEoxwzjqEQzXrlr1eZe3PFaprh_8g4qyf8,41417
95
+ dclab/rtdc_dataset/writer.py,sha256=IWD4hepdcF-x0fTe_90WQuOu0XEZ4UQ2kcPhWg05xI4,42157
96
96
  dclab/rtdc_dataset/feat_anc_core/__init__.py,sha256=j7vtbQGJid3hchXryo19cxnwanepdDQ_RuJVf740mZs,488
97
97
  dclab/rtdc_dataset/feat_anc_core/af_basic.py,sha256=7pM6Gn1ZkuttHNfkaLijPudddAu0jMDPGJS9HzKh8rE,2268
98
98
  dclab/rtdc_dataset/feat_anc_core/af_emodulus.py,sha256=lsJpQ409EsxnMtyhO7igquWnJxIhXz_w9f8vtIq7F1M,6830
@@ -109,7 +109,7 @@ dclab/rtdc_dataset/fmt_dcor/api.py,sha256=v7xAxZtjPpQiSRq9AgYhrV6I9iM7KpPv38WzSE
109
109
  dclab/rtdc_dataset/fmt_dcor/base.py,sha256=i9VWbKtPlY3K1WeFll3iAKXEhznVvJjQE1jVaEM2c9g,6788
110
110
  dclab/rtdc_dataset/fmt_dcor/basin.py,sha256=JzofdU45r-TTBGl8Nnvo-j-YsnT23X2gXnvaOSINJxg,2599
111
111
  dclab/rtdc_dataset/fmt_dcor/logs.py,sha256=e1BiJ8we4IghbxVAZM56K4P4IjJDHIBfHH_Uz-p2w9g,609
112
- dclab/rtdc_dataset/fmt_dcor/tables.py,sha256=rCkKnSoJpQPhjhCgG9hAd6L1wimlIMd7qM5vaNATgbM,1109
112
+ dclab/rtdc_dataset/fmt_dcor/tables.py,sha256=5-RFH8NAQ04LRiOnq0f22FqFirr7lUBkE9_WgxvLzBI,1223
113
113
  dclab/rtdc_dataset/fmt_hdf5/__init__.py,sha256=UnitCqiMkY8mMcUKgfLBRVBP5srpTNLrZd3BIRr2tZE,276
114
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
@@ -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.9.dist-info/LICENSE,sha256=ayjnuJcdf_kpkDyD61tUcVqVAQaNSYXJ73m5HVB4G8s,18474
133
- dclab-0.62.9.dist-info/METADATA,sha256=u-w5rYXwQgpAm20yw-JZO8O5NlxpWX8aJRS5U7Vc0_s,4900
134
- dclab-0.62.9.dist-info/WHEEL,sha256=rTcqimtzpX3smAWAhGmiRSWAxTY4PqYPNE-p4kscHDQ,99
135
- dclab-0.62.9.dist-info/entry_points.txt,sha256=eOpjgznu-eW-9utUpLU-77O5098YyUEgGF3ksGMdtec,273
136
- dclab-0.62.9.dist-info/top_level.txt,sha256=irvwZMgs1edY1Zj60ZFk7Almb9Zhk4k6E6aC4YPFnnM,6
137
- dclab-0.62.9.dist-info/RECORD,,
132
+ dclab-0.62.11.dist-info/LICENSE,sha256=ayjnuJcdf_kpkDyD61tUcVqVAQaNSYXJ73m5HVB4G8s,18474
133
+ dclab-0.62.11.dist-info/METADATA,sha256=yScCpW0rlmyuFdYBYo8cWeP-kL6Y05RCmmo-Sy6ZwS4,4901
134
+ dclab-0.62.11.dist-info/WHEEL,sha256=rTcqimtzpX3smAWAhGmiRSWAxTY4PqYPNE-p4kscHDQ,99
135
+ dclab-0.62.11.dist-info/entry_points.txt,sha256=eOpjgznu-eW-9utUpLU-77O5098YyUEgGF3ksGMdtec,273
136
+ dclab-0.62.11.dist-info/top_level.txt,sha256=irvwZMgs1edY1Zj60ZFk7Almb9Zhk4k6E6aC4YPFnnM,6
137
+ dclab-0.62.11.dist-info/RECORD,,