ChessAnalysisPipeline 0.0.12__py3-none-any.whl → 0.0.13__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.

Potentially problematic release.


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

CHAP/utils/general.py CHANGED
@@ -1417,8 +1417,8 @@ def select_roi_2d(
1417
1417
 
1418
1418
 
1419
1419
  def select_image_indices(
1420
- a, axis, b=None, preselected_indices=None, min_range=None,
1421
- min_num_indices=2, max_num_indices=2, title=None,
1420
+ a, axis, b=None, preselected_indices=None, axis_index_offset=0,
1421
+ min_range=None, min_num_indices=2, max_num_indices=2, title=None,
1422
1422
  title_a=None, title_b=None, row_label='row index',
1423
1423
  column_label='column index', interactive=True):
1424
1424
  """Display a 2D image and have the user select a set of image
@@ -1435,7 +1435,10 @@ def select_image_indices(
1435
1435
  :type b: numpy.ndarray, optional
1436
1436
  :param preselected_indices: Preselected image indices,
1437
1437
  defaults to `None`.
1438
- :type preselected_roi: tuple(int), list(int), optional
1438
+ :type preselected_indices: tuple(int), list(int), optional
1439
+ :param axis_index_offset: Offset in axes index range and
1440
+ preselected indices, defaults to `0`.
1441
+ :type axis_index_offset: int, optional
1439
1442
  :param min_range: The minimal range spanned by the selected
1440
1443
  indices, defaults to `None`
1441
1444
  :type min_range: int, optional
@@ -1531,12 +1534,14 @@ def select_image_indices(
1531
1534
  error_texts.pop()
1532
1535
  try:
1533
1536
  index = int(expression)
1534
- if not 0 <= index <= a.shape[axis]:
1537
+ if (index < axis_index_offset
1538
+ or index >= axis_index_offset+a.shape[axis]):
1535
1539
  raise ValueError
1536
1540
  except ValueError:
1537
1541
  change_error_text(
1538
1542
  f'Invalid {row_column} index ({expression}), enter an integer '
1539
- f'between 0 and {a.shape[axis]-1}')
1543
+ f'between {axis_index_offset} and '
1544
+ f'{axis_index_offset+a.shape[axis]-1}')
1540
1545
  else:
1541
1546
  try:
1542
1547
  add_index(index)
@@ -1585,9 +1590,13 @@ def select_image_indices(
1585
1590
  row_column = 'row'
1586
1591
  else:
1587
1592
  row_column = 'column'
1593
+ if not is_int(axis_index_offset, ge=0, log=False):
1594
+ raise ValueError(
1595
+ 'Invalid parameter axis_index_offset ({axis_index_offset})')
1588
1596
  if preselected_indices is not None:
1589
1597
  if not is_int_series(
1590
- preselected_indices, ge=0, le=a.shape[axis], log=False):
1598
+ preselected_indices, ge=axis_index_offset,
1599
+ le=axis_index_offset+a.shape[axis], log=False):
1591
1600
  if interactive:
1592
1601
  logger.warning(
1593
1602
  'Invalid parameter preselected_indices '
@@ -1607,7 +1616,7 @@ def select_image_indices(
1607
1616
  if a.shape[0] != b.shape[0]:
1608
1617
  raise ValueError(f'Inconsistent image shapes({a.shape} vs '
1609
1618
  f'{b.shape})')
1610
-
1619
+
1611
1620
  indices = []
1612
1621
  lines = []
1613
1622
  fig_title = []
@@ -1627,10 +1636,11 @@ def select_image_indices(
1627
1636
  fig, axs = plt.subplots(1, 2, figsize=(11, 8.5))
1628
1637
  else:
1629
1638
  fig, axs = plt.subplots(2, 1, figsize=(11, 8.5))
1630
- axs[0].imshow(a)
1639
+ extent = (0, a.shape[1], axis_index_offset+a.shape[0], axis_index_offset)
1640
+ axs[0].imshow(a, extent=extent)
1631
1641
  axs[0].set_title(title_a, fontsize='xx-large')
1632
1642
  if b is not None:
1633
- axs[1].imshow(b)
1643
+ axs[1].imshow(b, extent=extent)
1634
1644
  axs[1].set_title(title_b, fontsize='xx-large')
1635
1645
  if a.shape[0]+b.shape[0] > max(a.shape[1], b.shape[1]):
1636
1646
  axs[0].set_xlabel(column_label, fontsize='x-large')
@@ -1641,8 +1651,8 @@ def select_image_indices(
1641
1651
  axs[1].set_xlabel(column_label, fontsize='x-large')
1642
1652
  axs[1].set_ylabel(row_label, fontsize='x-large')
1643
1653
  for ax in axs:
1644
- ax.set_xlim(0, a.shape[1])
1645
- ax.set_ylim(a.shape[0], 0)
1654
+ ax.set_xlim(extent[0], extent[1])
1655
+ ax.set_ylim(extent[2], extent[3])
1646
1656
  fig.subplots_adjust(bottom=0.0, top=0.85)
1647
1657
 
1648
1658
  # Setup the preselected indices if provided
CHAP/utils/scanparsers.py CHANGED
@@ -49,7 +49,12 @@ class ScanParser:
49
49
 
50
50
  self._detector_data_path = None
51
51
 
52
- def __repr__(self):
52
+ if isinstance(self, FMBRotationScanParser) and scan_number > 1:
53
+ scanparser = FMBRotationScanParser(spec_file_name, scan_number-1)
54
+ if (scanparser.spec_macro in ('rams4_step_ome', 'rams4_fly_ome')
55
+ and len(scanparser.spec_args) == 5):
56
+ self._rams4_args = scanparser.spec_args
57
+
53
58
  return (f'{self.__class__.__name__}'
54
59
  f'({self.spec_file_name}, {self.scan_number}) '
55
60
  f'-- {self.spec_command}')
@@ -527,7 +532,17 @@ class FMBLinearScanParser(LinearScanParser, FMBScanParser):
527
532
 
528
533
  def get_spec_scan_motor_mnes(self):
529
534
  if self.spec_macro == 'flymesh':
530
- return (self.spec_args[0], self.spec_args[5])
535
+ m1_mne = self.spec_args[0]
536
+ try:
537
+ # Try post-summer-2022 format
538
+ dwell = float(self.spec_args[4])
539
+ except:
540
+ # Accommodate pre-summer-2022 format
541
+ m2_mne_i = 4
542
+ else:
543
+ m2_mne_i = 5
544
+ m2_mne = self.spec_args[m2_mne_i]
545
+ return (m1_mne, m2_mne)
531
546
  if self.spec_macro in ('flyscan', 'ascan'):
532
547
  return (self.spec_args[0],)
533
548
  if self.spec_macro in ('tseries', 'loopscan'):
@@ -537,12 +552,26 @@ class FMBLinearScanParser(LinearScanParser, FMBScanParser):
537
552
 
538
553
  def get_spec_scan_motor_vals(self):
539
554
  if self.spec_macro == 'flymesh':
540
- fast_mot_vals = np.linspace(float(self.spec_args[1]),
541
- float(self.spec_args[2]),
542
- int(self.spec_args[3])+1)
543
- slow_mot_vals = np.linspace(float(self.spec_args[6]),
544
- float(self.spec_args[7]),
545
- int(self.spec_args[8])+1)
555
+ m1_start = float(self.spec_args[1])
556
+ m1_end = float(self.spec_args[2])
557
+ m1_npt = int(self.spec_args[3]) + 1
558
+ try:
559
+ # Try post-summer-2022 format
560
+ dwell = float(self.spec_args[4])
561
+ except:
562
+ # Accommodate pre-summer-2022 format
563
+ m2_start_i = 5
564
+ m2_end_i = 6
565
+ m2_nint_i = 7
566
+ else:
567
+ m2_start_i = 6
568
+ m2_end_i = 7
569
+ m2_nint_i = 8
570
+ m2_start = float(self.spec_args[m2_start_i])
571
+ m2_end = float(self.spec_args[m2_end_i])
572
+ m2_npt = int(self.spec_args[m2_nint_i]) + 1
573
+ fast_mot_vals = np.linspace(m1_start, m1_end, m1_npt)
574
+ slow_mot_vals = np.linspace(m2_start, m2_end, m2_npt)
546
575
  return (fast_mot_vals, slow_mot_vals)
547
576
  if self.spec_macro in ('flyscan', 'ascan'):
548
577
  mot_vals = np.linspace(float(self.spec_args[1]),
@@ -556,8 +585,16 @@ class FMBLinearScanParser(LinearScanParser, FMBScanParser):
556
585
 
557
586
  def get_spec_scan_shape(self):
558
587
  if self.spec_macro == 'flymesh':
559
- fast_mot_npts = int(self.spec_args[3])+1
560
- slow_mot_npts = int(self.spec_args[8])+1
588
+ fast_mot_npts = int(self.spec_args[3]) + 1
589
+ try:
590
+ # Try post-summer-2022 format
591
+ dwell = float(self.spec_args[4])
592
+ except:
593
+ # Accommodate pre-summer-2022 format
594
+ m2_nint_i = 7
595
+ else:
596
+ m2_nint_i = 8
597
+ slow_mot_npts = int(self.spec_args[m2_nint_i]) + 1
561
598
  return (fast_mot_npts, slow_mot_npts)
562
599
  if self.spec_macro in ('flyscan', 'ascan'):
563
600
  mot_npts = int(self.spec_args[3])+1
@@ -568,7 +605,15 @@ class FMBLinearScanParser(LinearScanParser, FMBScanParser):
568
605
  f'for scans of type {self.spec_macro}')
569
606
 
570
607
  def get_spec_scan_dwell(self):
571
- if self.spec_macro in ('flymesh', 'flyscan', 'ascan'):
608
+ if self.macro == 'flymesh':
609
+ try:
610
+ # Try post-summer-2022 format
611
+ dwell = float(self.spec_args[4])
612
+ except:
613
+ # Accommodate pre-summer-2022 format
614
+ dwell = float(self.spec_args[8])
615
+ return dwell
616
+ if self.spec_macro in ('flyscan', 'ascan'):
572
617
  return float(self.spec_args[4])
573
618
  if self.spec_macro in ('tseries', 'loopscan'):
574
619
  return float(self.spec_args[1])
@@ -609,8 +654,10 @@ class FMBSAXSWAXSScanParser(FMBLinearScanParser):
609
654
  return f'{self.scan_name}_{self.scan_number:03d}'
610
655
 
611
656
  def get_detector_data_file(self, detector_prefix, scan_step_index:int):
612
- detector_files = list_fmb_saxswaxs_detector_files(self.detector_data_path, detector_prefix)
613
- return os.path.join(self.detector_data_path, detector_files[scan_step_index])
657
+ detector_files = list_fmb_saxswaxs_detector_files(
658
+ self.detector_data_path, detector_prefix)
659
+ return os.path.join(
660
+ self.detector_data_path, detector_files[scan_step_index])
614
661
 
615
662
  def get_detector_data(self, detector_prefix, scan_step_index:int):
616
663
  image_file = self.get_detector_data_file(detector_prefix,
@@ -793,7 +840,17 @@ class FMBRotationScanParser(RotationScanParser, FMBScanParser):
793
840
  with the typical tomography setup at FMB.
794
841
  """
795
842
 
843
+ def get_spec_scan_data(self):
844
+ spec_scan_data = super().get_spec_scan_data()
845
+ if hasattr(self, '_rams4_args'):
846
+ spec_scan_data['theta'] = np.linspace(
847
+ float(self._rams4_args[0]), float(self._rams4_args[1]),
848
+ 1+int(self._rams4_args[2]))
849
+ return spec_scan_data
850
+
796
851
  def get_spec_scan_npts(self):
852
+ if hasattr(self, '_rams4_args'):
853
+ return 1+int(self._rams4_args[2])
797
854
  if self.spec_macro == 'flyscan':
798
855
  if len(self.spec_args) == 2:
799
856
  return 1+int(self.spec_args[0])
@@ -802,12 +859,12 @@ class FMBRotationScanParser(RotationScanParser, FMBScanParser):
802
859
  raise RuntimeError(f'{self.scan_title}: cannot obtain number of '
803
860
  f'points from {self.spec_macro} with arguments '
804
861
  f'{self.spec_args}')
805
- elif self.spec_macro == 'ascan':
806
- if len(self.spec_args) == 5:
807
- return int(self.spec_args[3])
808
- raise RuntimeError(f'{self.scan_title}: cannot obtain number of '
809
- f'points from {self.spec_macro} with arguments '
810
- f'{self.spec_args}')
862
+ # if self.spec_macro == 'ascan':
863
+ # if len(self.spec_args) == 5:
864
+ # return int(self.spec_args[3])
865
+ # raise RuntimeError(f'{self.scan_title}: cannot obtain number of '
866
+ # f'points from {self.spec_macro} with arguments '
867
+ # f'{self.spec_args}')
811
868
  raise RuntimeError(f'{self.scan_title}: cannot determine rotation '
812
869
  f' angles for scans of type {self.spec_macro}')
813
870
 
@@ -815,21 +872,10 @@ class FMBRotationScanParser(RotationScanParser, FMBScanParser):
815
872
  return 0
816
873
 
817
874
  def get_starting_image_offset(self):
875
+ if hasattr(self, '_rams4_args'):
876
+ return int(self.spec_args[0]) - self.spec_scan_npts
818
877
  if self.spec_macro == 'flyscan':
819
- # if len(self.spec_args) == 2:
820
- # return 1
821
- # if len(self.spec_args) == 5:
822
- # return 1
823
878
  return 1
824
- # raise RuntimeError(f'{self.scan_title}: cannot obtain starting '
825
- # f'image offset {self.spec_macro} with arguments'
826
- # f' {self.spec_args}')
827
- # elif self.spec_macro == 'ascan':
828
- # if len(self.spec_args) == 5:
829
- # return 0
830
- # raise RuntimeError(f'{self.scan_title}: cannot obtain starting '
831
- # f'image offset {self.spec_macro} with arguments'
832
- # f' {self.spec_args}')
833
879
  raise RuntimeError(f'{self.scan_title}: cannot determine starting '
834
880
  f'image offset for scans of type {self.spec_macro}')
835
881
 
@@ -855,8 +901,6 @@ class FMBRotationScanParser(RotationScanParser, FMBScanParser):
855
901
  if scan_step_index is None:
856
902
  detector_data = h5_file['/entry/instrument/detector/data'][
857
903
  self.starting_image_offset:]
858
- # sum_det = list(np.sum(detector_data, (1,2)))
859
- # print(f'\n\nsum scanparser ({len(sum_det)}):\n{sum_det}')
860
904
  elif isinstance(scan_step_index, int):
861
905
  detector_data = h5_file['/entry/instrument/detector/data'][
862
906
  self.starting_image_offset+scan_step_index]
@@ -873,10 +917,8 @@ class FMBRotationScanParser(RotationScanParser, FMBScanParser):
873
917
  def get_detector_data(self, detector_prefix, scan_step_index=None):
874
918
  try:
875
919
  # Detector files in h5 format
876
- # print('data in h5 file')
877
920
  detector_data = self.get_all_detector_data_in_file(
878
921
  detector_prefix, scan_step_index)
879
- # print(f'detector_data {detector_prefix} {scan_step_index}:\n{detector_data.shape}')
880
922
  except:
881
923
  # Detector files in tiff format
882
924
  if scan_step_index is None:
@@ -999,19 +1041,16 @@ class SMBRotationScanParser(RotationScanParser, SMBScanParser):
999
1041
  f'file for scan step ({scan_step_index})')
1000
1042
 
1001
1043
  def get_detector_data(self, detector_prefix, scan_step_index=None):
1002
- # print(f'\n\nin get_detector_data: {detector_prefix} {scan_step_index}')
1003
1044
  if scan_step_index is None:
1004
1045
  detector_data = []
1005
1046
  for index in range(self.spec_scan_npts):
1006
1047
  detector_data.append(
1007
1048
  self.get_detector_data(detector_prefix, index))
1008
1049
  detector_data = np.asarray(detector_data)
1009
- # print(f'detector_data shape {type(detector_data)} {detector_data.shape}:\n{detector_data}')
1010
1050
  elif isinstance(scan_step_index, int):
1011
1051
  image_file = self.get_detector_data_file(scan_step_index)
1012
1052
  with TiffFile(image_file) as tiff_file:
1013
1053
  detector_data = tiff_file.asarray()
1014
- # print(f'\t{scan_step_index} {image_file} {np.sum(np.asarray(detector_data))}')
1015
1054
  elif (isinstance(scan_step_index, (list, tuple))
1016
1055
  and len(scan_step_index) == 2):
1017
1056
  detector_data = []
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ChessAnalysisPipeline
3
- Version: 0.0.12
3
+ Version: 0.0.13
4
4
  Summary: CHESS analysis pipeline framework
5
5
  Home-page: https://github.com/CHESSComputing/ChessAnalysisPipeline
6
6
  Author: Keara Soloway, Rolf Verberg, Valentin Kuznetsov
@@ -1,15 +1,15 @@
1
1
  CHAP/TaskManager.py,sha256=NEqg2jAq10kbScE18XtzY3liqkIdAtysaR-gMG5tBzs,6803
2
- CHAP/__init__.py,sha256=CuEa7CS9G-sEmvUo4967SV7YF6tujP7UwkOgWoK7_ME,1052
2
+ CHAP/__init__.py,sha256=fgkAhLmrMNcSnOgxfo_WLbanG5pOsqqtWctjRgtk1aw,1073
3
3
  CHAP/pipeline.py,sha256=nEoMJVn7ckn_hbo_O-B53tN-zo7MRZqcJsSlYWNbxNM,7358
4
4
  CHAP/processor.py,sha256=nqg1uK5jvADl35xuR6VIdU5uVGFVt-rzivnaZyOWruA,2639
5
5
  CHAP/reader.py,sha256=wGzAl_p5UnR7fC7Cie29S7RZTFFLcdOuhbViNDzH-4s,2534
6
6
  CHAP/runner.py,sha256=VdmCVA7wosGGI6QKJIAPuU1NFBMTCKPh1I1YZCR1qDc,6542
7
7
  CHAP/server.py,sha256=JAh5a7ZPh_Vx7fm0uI_g2WHLVxLn8s1uwBX8oMJ3G9c,3648
8
8
  CHAP/writer.py,sha256=9hed3_51AwSSH3kNisMR6Wq6mLInNGpgktPG5G_s-DM,2589
9
- CHAP/common/__init__.py,sha256=04js4qR7LriYbMfi0FBQ8o9NhQu0VkO0i7ubQPNF-6c,944
10
- CHAP/common/processor.py,sha256=ZIeJrSdnzBmrRvt692LOSEXqg6gj2xfGoBhqyAP8oPQ,25556
11
- CHAP/common/reader.py,sha256=sg9sMzwM6lDEqR9WSJblrULFX1ZB-euit6pJnBOkTD8,12406
12
- CHAP/common/writer.py,sha256=AuE5gJ5nzQ1hc1-5owwmdC18tMj0TLO2p6ZuA2NPGCA,10049
9
+ CHAP/common/__init__.py,sha256=xNKfvDLBW3NIKqcjCMH7LAl__I43BKwKFQRGn_Sei0c,1033
10
+ CHAP/common/processor.py,sha256=RJu-gGhY--cqmpJUQMaT3HW8MwdnFKk-sdQQ0I2FSsg,29183
11
+ CHAP/common/reader.py,sha256=iVlOluctVpfMTKQzI79bwuaXKqAwU6XJ52oZSqKf7-E,13557
12
+ CHAP/common/writer.py,sha256=Zk_LnYOwX-UwmlMAEwLbX3rmBooDGNV1O2o-lOxr2iQ,12242
13
13
  CHAP/common/models/__init__.py,sha256=MpmtY6biXgC7AaedznoSqFJJZ54YU8tBPgwzYJIVJ1c,200
14
14
  CHAP/common/models/integration.py,sha256=0WM2Q15XFQf-uydMALh3snbpoop-c5N6Pnf_O7ikXW0,27175
15
15
  CHAP/common/models/map.py,sha256=YIDojY_bgXS4k4GFOpmzo__yi7IsXl1mCIquTBS5srA,38280
@@ -32,23 +32,23 @@ CHAP/sin2psi/processor.py,sha256=6ytGpsK5u6tyUTzOJqAlcRdaimA4QfXZ6xpwGf2QMFo,97
32
32
  CHAP/sin2psi/reader.py,sha256=O0KeZcqACsZ8ngrliPU6I3u8SeQT0Aq866jCTbruXqc,94
33
33
  CHAP/sin2psi/writer.py,sha256=Y1CXWMRU87XeeDp4g4-sUgPP2UbCguYZUR_Cg5Ci6l8,94
34
34
  CHAP/tomo/__init__.py,sha256=7cwm1ufJkDKqrp2OPH_z7tKAOQ0S_RJbNainK0soKNo,328
35
- CHAP/tomo/models.py,sha256=zYmADnAIevO2B_yE1K8M3Dq2dT_Ed9oRtrXfC0ygsKg,7799
36
- CHAP/tomo/processor.py,sha256=W6CPyZ3znf78hIgj-iArI36jQq-56GC_el1c80hD_pI,142090
35
+ CHAP/tomo/models.py,sha256=UPmn5rJl1MQe2cifBIOu7yBQO2qMmUtFu-KKw8XBMys,7889
36
+ CHAP/tomo/processor.py,sha256=evNtZ3yTPKWDsm-RNxcQm7Pw7ERnwwDZu74QOqVrIAI,153325
37
37
  CHAP/tomo/reader.py,sha256=7nNP_KyIR-ghrrajCR2k5IsJnrLm6BIy-eAXIDXrQe8,123
38
38
  CHAP/tomo/writer.py,sha256=J7q_nmsqi_zbgAS-LvAciiBqtYD8hHJ4QmwS2oZAM2Q,123
39
39
  CHAP/utils/__init__.py,sha256=3blWv3cFKA4woMNUUI8d1WZFc4izlgMbfUPNAyBDiRs,183
40
40
  CHAP/utils/fit.py,sha256=VEhqAkNqkDpjBQ_kbOfGlNCEwmaPCh8RBc5SxHUy-OM,127878
41
- CHAP/utils/general.py,sha256=m8RyF5ZK-HgSd-K_IdOOa4x0AMh4wLkvNawCB9DYDl4,66955
41
+ CHAP/utils/general.py,sha256=E1aKdoIEZCIDJoFGmOqSn0rRRA1rfbpImCmzhhyRGfY,67565
42
42
  CHAP/utils/material.py,sha256=NnLHAin3PrDxZiG6of8v7vFma0nAeOIRZJuXxSN_xj8,11495
43
43
  CHAP/utils/parfile.py,sha256=GxBWG6EVKQnV1I_r_m4nfJrCb0VGAn6tjEfuxVTg-aA,7227
44
- CHAP/utils/scanparsers.py,sha256=PAyhB9MWDd61zgU7BNeJhWSmvvWfo0ExxRnhKUzUj3U,43927
44
+ CHAP/utils/scanparsers.py,sha256=zCyad4P6OTytozM-rJjmIKXrOqeotbUHmr8Xc4YhpG8,44881
45
45
  MLaaS/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
46
46
  MLaaS/ktrain.py,sha256=SPDUOQgjBDSx7sI8vZNXog9orvSyKmzpe6TdGHol9qM,7467
47
47
  MLaaS/mnist_img.py,sha256=ppDtlo6yrNQy0oIhFZVOnLvHJrR3ZPZ3PjZTtJY8l0E,2738
48
48
  MLaaS/tfaas_client.py,sha256=zpZ201wwcQBW1XkzDakD9Kl_NRSESAUdbnN6k6Ey15A,14889
49
- ChessAnalysisPipeline-0.0.12.dist-info/LICENSE,sha256=GrJL25aZivxje_x-zBbeWASvdmgztxv8kBMhIP4XSMo,1075
50
- ChessAnalysisPipeline-0.0.12.dist-info/METADATA,sha256=k_0KsJROERCMKLjL-n6CWWujII_QvFmiqXIAijRfqKg,1542
51
- ChessAnalysisPipeline-0.0.12.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
52
- ChessAnalysisPipeline-0.0.12.dist-info/entry_points.txt,sha256=w-KIKdUjmj5GCobrFC4_jexCsFB4yMXYjrsMWrhI6Co,42
53
- ChessAnalysisPipeline-0.0.12.dist-info/top_level.txt,sha256=BKhggOWLb9dD6oQm1RXrkJPnXm-zJxVzQef1iXYtt2k,11
54
- ChessAnalysisPipeline-0.0.12.dist-info/RECORD,,
49
+ ChessAnalysisPipeline-0.0.13.dist-info/LICENSE,sha256=GrJL25aZivxje_x-zBbeWASvdmgztxv8kBMhIP4XSMo,1075
50
+ ChessAnalysisPipeline-0.0.13.dist-info/METADATA,sha256=KTZzy22v8P2ISFOgRLCXMDc6ytFoR2yayPtficwLHZA,1542
51
+ ChessAnalysisPipeline-0.0.13.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
52
+ ChessAnalysisPipeline-0.0.13.dist-info/entry_points.txt,sha256=w-KIKdUjmj5GCobrFC4_jexCsFB4yMXYjrsMWrhI6Co,42
53
+ ChessAnalysisPipeline-0.0.13.dist-info/top_level.txt,sha256=BKhggOWLb9dD6oQm1RXrkJPnXm-zJxVzQef1iXYtt2k,11
54
+ ChessAnalysisPipeline-0.0.13.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.41.2)
2
+ Generator: bdist_wheel (0.42.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5