teareduce 0.5.4__py3-none-any.whl → 0.5.5__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.
@@ -19,6 +19,7 @@ from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolb
19
19
  import numpy as np
20
20
  from rich import print
21
21
 
22
+ from .centerchildparent import center_on_parent
22
23
  from .definitions import MAX_PIXEL_DISTANCE_TO_CR
23
24
  from .imagedisplay import ImageDisplay
24
25
  from .interpolation_a import interpolation_a
@@ -30,15 +31,27 @@ from ..sliceregion import SliceRegion2D
30
31
  from ..zscale import zscale
31
32
 
32
33
  import matplotlib
34
+
33
35
  matplotlib.use("TkAgg")
34
36
 
35
37
 
36
38
  class ReviewCosmicRay(ImageDisplay):
37
39
  """Class to review suspected cosmic ray pixels."""
38
40
 
39
- def __init__(self, root, data, auxdata, cleandata_lacosmic, cr_labels, num_features,
40
- first_cr_index=1, single_cr=False,
41
- last_dilation=None, last_npoints=None, last_degree=None):
41
+ def __init__(
42
+ self,
43
+ root,
44
+ data,
45
+ auxdata,
46
+ cleandata_lacosmic,
47
+ cr_labels,
48
+ num_features,
49
+ first_cr_index=1,
50
+ single_cr=False,
51
+ last_dilation=None,
52
+ last_npoints=None,
53
+ last_degree=None,
54
+ ):
42
55
  """Initialize the review window.
43
56
 
44
57
  Parameters
@@ -153,22 +166,25 @@ class ReviewCosmicRay(ImageDisplay):
153
166
  self.last_dilation = last_dilation
154
167
  # Make a copy of the original labels to allow pixel re-marking
155
168
  self.cr_labels_original = self.cr_labels.copy()
156
- print(f"Number of cosmic ray pixels detected..: {np.sum(self.cr_labels > 0)}")
157
- print(f"Number of cosmic rays (grouped pixels): {self.num_features}")
169
+ sdum = str(np.sum(self.cr_labels > 0))
170
+ print(f"Number of cosmic ray pixels detected..: {sdum}")
171
+ print(f"Number of cosmic rays (grouped pixels): {self.num_features:>{len(sdum)}}")
158
172
  if self.num_features == 0:
159
- print('No CR hits found!')
173
+ print("No CR hits found!")
160
174
  else:
161
175
  self.cr_index = first_cr_index
162
176
  self.single_cr = single_cr
163
177
  self.create_widgets()
178
+ center_on_parent(child=self.root, parent=self.root.master, offset_x=50, offset_y=50)
164
179
 
165
180
  def create_widgets(self):
166
181
  """Create the GUI widgets for the review window."""
167
182
  # Row 1 of buttons
168
183
  self.button_frame1 = tk.Frame(self.root)
169
184
  self.button_frame1.pack(pady=5)
170
- self.ndeg_label = tk.Button(self.button_frame1, text=f"Npoints={self.npoints}, Degree={self.degree}",
171
- command=self.set_ndeg)
185
+ self.ndeg_label = tk.Button(
186
+ self.button_frame1, text=f"Npoints={self.npoints}, Degree={self.degree}", command=self.set_ndeg
187
+ )
172
188
  self.ndeg_label.pack(side=tk.LEFT, padx=5)
173
189
  self.remove_crosses_button = tk.Button(self.button_frame1, text="remove all x's", command=self.remove_crosses)
174
190
  self.remove_crosses_button.pack(side=tk.LEFT, padx=5)
@@ -194,14 +210,13 @@ class ReviewCosmicRay(ImageDisplay):
194
210
  # the function is trying to deactivate the buttons before they are created, which
195
211
  # would lead to an error; in addition, since I have two buttons calling the same function
196
212
  # with different arguments, using lambda allows to differentiate them)
197
- self.interp_s_button = tk.Button(self.button_frame2, text="[s]urface interp.",
198
- command=lambda: self.interp_a('surface'))
213
+ self.interp_s_button = tk.Button(
214
+ self.button_frame2, text="[s]urface interp.", command=lambda: self.interp_a("surface")
215
+ )
199
216
  self.interp_s_button.pack(side=tk.LEFT, padx=5)
200
- self.interp_d_button = tk.Button(self.button_frame2, text="me[d]ian",
201
- command=lambda: self.interp_a('median'))
217
+ self.interp_d_button = tk.Button(self.button_frame2, text="me[d]ian", command=lambda: self.interp_a("median"))
202
218
  self.interp_d_button.pack(side=tk.LEFT, padx=5)
203
- self.interp_m_button = tk.Button(self.button_frame2, text="[m]ean",
204
- command=lambda: self.interp_a('mean'))
219
+ self.interp_m_button = tk.Button(self.button_frame2, text="[m]ean", command=lambda: self.interp_a("mean"))
205
220
  self.interp_m_button.pack(side=tk.LEFT, padx=5)
206
221
  self.interp_l_button = tk.Button(self.button_frame2, text="[l]acosmic", command=self.use_lacosmic)
207
222
  self.interp_l_button.pack(side=tk.LEFT, padx=5)
@@ -229,8 +244,7 @@ class ReviewCosmicRay(ImageDisplay):
229
244
 
230
245
  # Figure
231
246
  if self.auxdata is not None:
232
- self.fig, (self.ax_aux, self.ax) = plt.subplots(
233
- ncols=2, figsize=(11, 5.5), constrained_layout=True)
247
+ self.fig, (self.ax_aux, self.ax) = plt.subplots(ncols=2, figsize=(11, 5.5), constrained_layout=True)
234
248
  else:
235
249
  self.fig, self.ax = plt.subplots(figsize=(8, 5.5), constrained_layout=True)
236
250
  self.canvas = FigureCanvasTkAgg(self.fig, master=self.root)
@@ -263,16 +277,17 @@ class ReviewCosmicRay(ImageDisplay):
263
277
  ycr_list, xcr_list = np.where(self.cr_labels == self.cr_index)
264
278
  ycr_list_original, xcr_list_original = np.where(self.cr_labels_original == self.cr_index)
265
279
  if self.first_plot:
266
- print(f"Cosmic ray {self.cr_index}: "
267
- f"Number of pixels = {len(xcr_list)}, "
268
- f"Centroid = ({np.mean(xcr_list)+1:.2f}, {np.mean(ycr_list)+1:.2f})")
280
+ print(
281
+ f"Cosmic ray {self.cr_index}: "
282
+ f"Number of pixels = {len(xcr_list)}, "
283
+ f"Centroid = ({np.mean(xcr_list)+1:.2f}, {np.mean(ycr_list)+1:.2f})"
284
+ )
269
285
  # Use original positions to define the region to display in order
270
286
  # to avoid image shifts when some pixels are unmarked or new ones are marked
271
287
  i0 = int(np.mean(ycr_list_original) + 0.5)
272
288
  j0 = int(np.mean(xcr_list_original) + 0.5)
273
289
  max_distance_from_center = np.max(
274
- [np.max(np.abs(ycr_list_original - i0)),
275
- np.max(np.abs(xcr_list_original - j0))]
290
+ [np.max(np.abs(ycr_list_original - i0)), np.max(np.abs(xcr_list_original - j0))]
276
291
  )
277
292
  semiwidth = int(np.max([max_distance_from_center, MAX_PIXEL_DISTANCE_TO_CR]))
278
293
  jmin = j0 - semiwidth if j0 - semiwidth >= 0 else 0
@@ -288,22 +303,35 @@ class ReviewCosmicRay(ImageDisplay):
288
303
  imax = np.min([2 * semiwidth, self.data.shape[0] - 1])
289
304
  elif imax == self.data.shape[0] - 1:
290
305
  imin = np.max([0, self.data.shape[0] - 1 - 2 * semiwidth])
291
- self.region = SliceRegion2D(f'[{jmin+1}:{jmax+1}, {imin+1}:{imax+1}]', mode='fits').python
306
+ self.region = SliceRegion2D(f"[{jmin+1}:{jmax+1}, {imin+1}:{imax+1}]", mode="fits").python
292
307
  self.ax.clear()
293
308
  vmin = self.get_vmin()
294
309
  vmax = self.get_vmax()
295
- xlabel = 'X pixel (from 1 to NAXIS1)'
296
- ylabel = 'Y pixel (from 1 to NAXIS2)'
297
- self.image, _, _ = imshow(self.fig, self.ax, self.data[self.region], colorbar=False,
298
- xlabel=xlabel, ylabel=ylabel,
299
- vmin=vmin, vmax=vmax)
310
+ xlabel = "X pixel (from 1 to NAXIS1)"
311
+ ylabel = "Y pixel (from 1 to NAXIS2)"
312
+ self.image, _, _ = imshow(
313
+ self.fig,
314
+ self.ax,
315
+ self.data[self.region],
316
+ colorbar=False,
317
+ xlabel=xlabel,
318
+ ylabel=ylabel,
319
+ vmin=vmin,
320
+ vmax=vmax,
321
+ )
300
322
  self.image.set_extent([jmin + 0.5, jmax + 1.5, imin + 0.5, imax + 1.5])
301
323
  if self.auxdata is not None:
302
324
  self.ax_aux.clear()
303
- self.image_aux, _, _ = imshow(self.fig, self.ax_aux, self.auxdata[self.region],
304
- colorbar=False,
305
- xlabel=xlabel, ylabel=ylabel,
306
- vmin=vmin, vmax=vmax)
325
+ self.image_aux, _, _ = imshow(
326
+ self.fig,
327
+ self.ax_aux,
328
+ self.auxdata[self.region],
329
+ colorbar=False,
330
+ xlabel=xlabel,
331
+ ylabel=ylabel,
332
+ vmin=vmin,
333
+ vmax=vmax,
334
+ )
307
335
  self.image_aux.set_extent([jmin + 0.5, jmax + 1.5, imin + 0.5, imax + 1.5])
308
336
  self.ax_aux.set_title("Auxiliary data")
309
337
  # Overplot cosmic ray pixels
@@ -313,10 +341,10 @@ class ReviewCosmicRay(ImageDisplay):
313
341
  xcr += 1 # from index to pixel
314
342
  ycr += 1 # from index to pixel
315
343
  if cleaned:
316
- self.ax.plot(xcr, ycr, 'C1o', markersize=4)
344
+ self.ax.plot(xcr, ycr, "C1o", markersize=4)
317
345
  else:
318
- self.ax.plot([xcr - 0.5, xcr + 0.5], [ycr + 0.5, ycr - 0.5], 'r-')
319
- self.ax.plot([xcr - 0.5, xcr + 0.5], [ycr - 0.5, ycr + 0.5], 'r-')
346
+ self.ax.plot([xcr - 0.5, xcr + 0.5], [ycr + 0.5, ycr - 0.5], "r-")
347
+ self.ax.plot([xcr - 0.5, xcr + 0.5], [ycr - 0.5, ycr + 0.5], "r-")
320
348
  self.ax.set_xlim(xlim)
321
349
  self.ax.set_ylim(ylim)
322
350
  self.ax.set_title(f"Cosmic ray #{self.cr_index}/{self.num_features}")
@@ -326,12 +354,12 @@ class ReviewCosmicRay(ImageDisplay):
326
354
 
327
355
  def set_ndeg(self):
328
356
  """Set the number of points and degree for interpolation."""
329
- new_npoints = simpledialog.askinteger("Set Npoints", "Enter Npoints:",
330
- initialvalue=self.npoints, minvalue=1)
357
+ new_npoints = simpledialog.askinteger("Set Npoints", "Enter Npoints:", initialvalue=self.npoints, minvalue=1)
331
358
  if new_npoints is None:
332
359
  return
333
- new_degree = simpledialog.askinteger("Set degree", "Enter Degree (min=0):",
334
- initialvalue=self.degree, minvalue=0)
360
+ new_degree = simpledialog.askinteger(
361
+ "Set degree", "Enter Degree (min=0):", initialvalue=self.degree, minvalue=0
362
+ )
335
363
  if new_degree is None:
336
364
  return
337
365
  self.degree = new_degree
@@ -362,14 +390,14 @@ class ReviewCosmicRay(ImageDisplay):
362
390
  cr_labels=self.cr_labels,
363
391
  cr_index=self.cr_index,
364
392
  npoints=self.npoints,
365
- degree=self.degree
393
+ degree=self.degree,
366
394
  )
367
395
  if interpolation_performed:
368
396
  self.num_cr_cleaned += 1
369
397
  self.set_buttons_after_cleaning_cr()
370
398
  self.update_display(cleaned=interpolation_performed)
371
399
  if len(xfit_all) > 0:
372
- self.ax.plot(np.array(xfit_all) + 1, np.array(yfit_all) + 1, 'mo', markersize=4) # +1: from index to pixel
400
+ self.ax.plot(np.array(xfit_all) + 1, np.array(yfit_all) + 1, "mo", markersize=4) # +1: from index to pixel
373
401
  self.canvas.draw_idle()
374
402
 
375
403
  def interp_y(self):
@@ -384,14 +412,14 @@ class ReviewCosmicRay(ImageDisplay):
384
412
  cr_labels=self.cr_labels,
385
413
  cr_index=self.cr_index,
386
414
  npoints=self.npoints,
387
- degree=self.degree
415
+ degree=self.degree,
388
416
  )
389
417
  if interpolation_performed:
390
418
  self.num_cr_cleaned += 1
391
419
  self.set_buttons_after_cleaning_cr()
392
420
  self.update_display(cleaned=interpolation_performed)
393
421
  if len(xfit_all) > 0:
394
- self.ax.plot(np.array(xfit_all) + 1, np.array(yfit_all) + 1, 'mo', markersize=4) # +1: from index to pixel
422
+ self.ax.plot(np.array(xfit_all) + 1, np.array(yfit_all) + 1, "mo", markersize=4) # +1: from index to pixel
395
423
  self.canvas.draw_idle()
396
424
 
397
425
  def interp_a(self, method):
@@ -409,14 +437,14 @@ class ReviewCosmicRay(ImageDisplay):
409
437
  cr_labels=self.cr_labels,
410
438
  cr_index=self.cr_index,
411
439
  npoints=self.npoints,
412
- method=method
440
+ method=method,
413
441
  )
414
442
  if interpolation_performed:
415
443
  self.num_cr_cleaned += 1
416
444
  self.set_buttons_after_cleaning_cr()
417
445
  self.update_display(cleaned=interpolation_performed)
418
446
  if len(xfit_all) > 0:
419
- self.ax.plot(np.array(xfit_all) + 1, np.array(yfit_all) + 1, 'mo', markersize=4) # +1: from index to pixel
447
+ self.ax.plot(np.array(xfit_all) + 1, np.array(yfit_all) + 1, "mo", markersize=4) # +1: from index to pixel
420
448
  self.canvas.draw_idle()
421
449
 
422
450
  def use_lacosmic(self):
@@ -515,39 +543,39 @@ class ReviewCosmicRay(ImageDisplay):
515
543
 
516
544
  def on_key(self, event):
517
545
  """Handle key press events."""
518
- if event.key == 'q':
546
+ if event.key == "q":
519
547
  pass # Ignore the "q" key to prevent closing the window
520
- elif event.key == 'r':
548
+ elif event.key == "r":
521
549
  if self.restore_cr_button.cget("state") != "disabled":
522
550
  self.restore_cr()
523
- elif event.key == 'x':
551
+ elif event.key == "x":
524
552
  if self.interp_x_button.cget("state") != "disabled":
525
553
  self.interp_x()
526
- elif event.key == 'y':
554
+ elif event.key == "y":
527
555
  if self.interp_y_button.cget("state") != "disabled":
528
556
  self.interp_y()
529
- elif event.key == 's':
557
+ elif event.key == "s":
530
558
  if self.interp_s_button.cget("state") != "disabled":
531
- self.interp_a('surface')
532
- elif event.key == 'd':
559
+ self.interp_a("surface")
560
+ elif event.key == "d":
533
561
  if self.interp_d_button.cget("state") != "disabled":
534
- self.interp_a('median')
535
- elif event.key == 'm':
562
+ self.interp_a("median")
563
+ elif event.key == "m":
536
564
  if self.interp_m_button.cget("state") != "disabled":
537
- self.interp_a('mean')
538
- elif event.key == 'l':
565
+ self.interp_a("mean")
566
+ elif event.key == "l":
539
567
  if self.interp_l_button.cget("state") != "disabled":
540
568
  self.use_lacosmic()
541
- elif event.key == 'a':
569
+ elif event.key == "a":
542
570
  if self.interp_aux_button.cget("state") != "disabled":
543
571
  self.use_auxdata()
544
- elif event.key == 'right' or event.key == 'c':
572
+ elif event.key == "right" or event.key == "c":
545
573
  self.continue_cr()
546
- elif event.key == ',':
574
+ elif event.key == ",":
547
575
  self.set_minmax()
548
- elif event.key == '/':
576
+ elif event.key == "/":
549
577
  self.set_zscale()
550
- elif event.key == 'e':
578
+ elif event.key == "e":
551
579
  self.exit_review()
552
580
  return # important: do not remove (to avoid errors)
553
581
  else:
@@ -557,8 +585,8 @@ class ReviewCosmicRay(ImageDisplay):
557
585
  """Handle mouse click events on the image."""
558
586
  if event.inaxes == self.ax:
559
587
  x, y = event.xdata, event.ydata
560
- ix = int(x+0.5) - 1 # from pixel to index
561
- iy = int(y+0.5) - 1 # from pixel to index
588
+ ix = int(x + 0.5) - 1 # from pixel to index
589
+ iy = int(y + 0.5) - 1 # from pixel to index
562
590
  if int(self.cr_labels[iy, ix]) == self.cr_index:
563
591
  self.cr_labels[iy, ix] = 0
564
592
  print(f"Pixel ({ix+1}, {iy+1}) unmarked as cosmic ray.")
teareduce/version.py CHANGED
@@ -9,7 +9,7 @@
9
9
  #
10
10
  """Module to define the version of the teareduce package."""
11
11
 
12
- VERSION = '0.5.4'
12
+ VERSION = '0.5.5'
13
13
 
14
14
 
15
15
  def main():
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: teareduce
3
- Version: 0.5.4
3
+ Version: 0.5.5
4
4
  Summary: Utilities for astronomical data reduction
5
5
  Author-email: Nicolás Cardiel <cardiel@ucm.es>
6
6
  License: GPL-3.0-or-later
@@ -15,33 +15,35 @@ teareduce/sdistortion.py,sha256=5ZsZn4vD5Sw2aoqO8-NIOH7H89Zmh7ZDkow6YbAotHU,5916
15
15
  teareduce/simulateccdexposure.py,sha256=cdbpca6GVuM3d7R1LGzlIZZvjTq_jzrlkk_Cli7aouQ,24636
16
16
  teareduce/sliceregion.py,sha256=Jdf8XvmGaY_vaY1cneTaRtSOYPxpUsJm9cXJDDMa0YM,18626
17
17
  teareduce/statsummary.py,sha256=VTNAnBV8z6suqiyB2Lhw3YjUUOjlmwUPX3enkOKRF54,5422
18
- teareduce/version.py,sha256=NFktR9ChV_md_EyG4ucsKzSvm8zi1vCPr_77lSgkfhQ,419
18
+ teareduce/version.py,sha256=x8qFVHj0LWtGzf-qBtcwzyAnbALRdsIJ4c4C_GQISJc,419
19
19
  teareduce/wavecal.py,sha256=2MewWz5Y3ms41c305UtWOM_LaLNdk1mugDXCtzf-fSw,68586
20
20
  teareduce/write_array_to_fits.py,sha256=kWDrEH9coJ1yIu56oQJpWtDqJL4c8HGmssE9jle4e94,617
21
21
  teareduce/zscale.py,sha256=SDgmcDD2N5GvDn46JADCgTQJPBF_N_jSKMHoeTz9Nsw,1152
22
22
  teareduce/cleanest/__init__.py,sha256=3O-eptEAQareN504tLALMrJVQPGCuBx7YTfQGqMKjmc,205
23
- teareduce/cleanest/__main__.py,sha256=mobw6PW6JauOBKt-0eNvUH0UCC_D-AjrbTlzfAu7joY,1732
24
- teareduce/cleanest/cleanest.py,sha256=tf1RdKRZfSXkGXbMVkN-Y0eudFb_XUfCl8Va2mJ0kK8,5070
25
- teareduce/cleanest/cosmicraycleanerapp.py,sha256=kBL5jQwSNrv9r9oDlyixZ3E1rRnk1oPvF3OPIgm4w98,36626
26
- teareduce/cleanest/definitions.py,sha256=pcq0gk_EnDVkRfatWseQvRIyF445jIarICkuWIW3oqE,2343
23
+ teareduce/cleanest/__main__.py,sha256=_wXGgwq62ete5-DlNDsKkZP0kATAVFVwTVrG9EspkU8,3298
24
+ teareduce/cleanest/centerchildparent.py,sha256=wHxOvNrrQ-KBLZAbtQ9bJAxYhGOzqYBF4LgdIQk7UF8,1285
25
+ teareduce/cleanest/cleanest.py,sha256=hDC_3jF9ovHCX8IRAPe9eEGFWt_LeVI5rzS7atK7oWI,5025
26
+ teareduce/cleanest/cosmicraycleanerapp.py,sha256=C-lGOREVXrlaqJsjEuJ66xVNx0z8axXq5f5GQh9dpMA,41226
27
+ teareduce/cleanest/definitions.py,sha256=HLv41cuhUOUyEicRHea0LRTv4Wagm24miSxFt4cZN3g,2546
27
28
  teareduce/cleanest/dilatemask.py,sha256=I5tHAv5VEO6V0Wed8Ar20uLt4F9P-tgjmLL5BAaFvgM,1276
28
29
  teareduce/cleanest/find_closest_true.py,sha256=mWdIvhipzAXDRKfePDrP7f0lP4U48cckpHiKwiB4jHI,1320
29
- teareduce/cleanest/imagedisplay.py,sha256=4FhoRcyskj_F6gaza4U37sLODpe-Sud3sunM8_-p5iY,5877
30
- teareduce/cleanest/interpolation_a.py,sha256=upbfZBU0i7YyXR4EJj-WdnMkWbajgDbnUDvJaoLAeEg,4039
30
+ teareduce/cleanest/imagedisplay.py,sha256=820Vn-Q0bJyHicOBsxDmfAZxuGOFepEEsm0LTxlPJjc,5848
31
+ teareduce/cleanest/interpolation_a.py,sha256=zE4VIrC41vapf0Vx9qmh1oacw2qkJwcuMnV3JpSDW8Y,4007
31
32
  teareduce/cleanest/interpolation_x.py,sha256=D5hKbobT6lJk18XktP3PXhzEN12zqed6U18yfQ-reLQ,3744
32
33
  teareduce/cleanest/interpolation_y.py,sha256=O6yw5nKKlTdV6qsP1Ku6CwGhXB6o3j0_YQirXyILi8c,3759
33
- teareduce/cleanest/interpolationeditor.py,sha256=F5_FyOLHgtvoan22Lfaoa9j-kdKrygaQARi1SYsDfPA,8179
34
- teareduce/cleanest/parametereditor.py,sha256=wfl1Zem_FI02YAVawq8r1FLGz5dXB5-S8RF1d_v6ZEQ,12495
35
- teareduce/cleanest/reviewcosmicray.py,sha256=L5X8omfJ0onRiUQ7av4P-OxmYPvUNUIkkcX0NLNZtKg,28083
34
+ teareduce/cleanest/interpolationeditor.py,sha256=EksuNwKOM79MyGlAgxb9j-v7pIFXV8QOcyZDLVQlQjU,13221
35
+ teareduce/cleanest/modalprogressbar.py,sha256=9anz3js_y_9JLjPyA7XxEsLpVwuMN_CTlnQnhf7m3uo,6355
36
+ teareduce/cleanest/parametereditor.py,sha256=IdaX6_VPicwnYw3dvRA0tKoTZYb6Gp-AZB5ksFClv1o,13390
37
+ teareduce/cleanest/reviewcosmicray.py,sha256=_qO9ifkAMqB4Wuvq2wIYZ8_DUniB2lWcxn9l404hXnY,28210
36
38
  teareduce/cookbook/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37
39
  teareduce/cookbook/get_cookbook_file.py,sha256=vde-iNii2lm1QII8GmLRsFsKNxkdsd7njCBE-8Z7io0,1088
38
40
  teareduce/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
41
  teareduce/tests/test_cleanest.py,sha256=0uiun1Uloh3rt5ppkv1aG04KUbOJvYZ9C5BvqNizLuI,5562
40
42
  teareduce/tests/test_sliceregion.py,sha256=S7Zoh2eEBFIEbfsXgWBEMCf7pottjw2oLhqlZJQkAwg,3785
41
43
  teareduce/tests/test_version.py,sha256=mKLnbXyvVNc1pATq5PxR8qeoFMPAFL_GilFV6IHLOi0,172
42
- teareduce-0.5.4.dist-info/licenses/LICENSE.txt,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
43
- teareduce-0.5.4.dist-info/METADATA,sha256=RSSBNUcaCHODGQJmnOpJrLBOUzNIMKFxbj8H0iAEw4k,3113
44
- teareduce-0.5.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
45
- teareduce-0.5.4.dist-info/entry_points.txt,sha256=6yBvig5jTL2ugqz5SF767AiszzrHKGRASsX1II84kqA,66
46
- teareduce-0.5.4.dist-info/top_level.txt,sha256=7OkwtX9zNRkGJ7ACgjk4ESgC74qUYcS5O2qcO0v-Si4,10
47
- teareduce-0.5.4.dist-info/RECORD,,
44
+ teareduce-0.5.5.dist-info/licenses/LICENSE.txt,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
45
+ teareduce-0.5.5.dist-info/METADATA,sha256=MIifKnlyWPEQyuxUG3OaqqRnydUaE7JYhcBIB-XDu7Q,3113
46
+ teareduce-0.5.5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
47
+ teareduce-0.5.5.dist-info/entry_points.txt,sha256=6yBvig5jTL2ugqz5SF767AiszzrHKGRASsX1II84kqA,66
48
+ teareduce-0.5.5.dist-info/top_level.txt,sha256=7OkwtX9zNRkGJ7ACgjk4ESgC74qUYcS5O2qcO0v-Si4,10
49
+ teareduce-0.5.5.dist-info/RECORD,,