ChessAnalysisPipeline 0.0.11__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/parfile.py CHANGED
@@ -99,15 +99,7 @@ class ParFile():
99
99
  'data_type': 'smb_par'}
100
100
  for dim in par_dims] + other_dims
101
101
  }
102
- map_config = MapConfig(**map_config)
103
- map_size = np.prod(map_config.shape)
104
- if map_size != len(good_scans):
105
- raise ValueError(
106
- f'{self.par_file} has {len(good_scans)} good scans, '
107
- + 'but size of map along '
108
- + ', '.join([dim['name'] for dim in par_dims + other_dims])
109
- + f' is {map_size}.')
110
- return map_config
102
+ return MapConfig(**map_config)
111
103
 
112
104
  def good_scan_numbers(self, good_col_name='1/0'):
113
105
  """Return the numbers of scans marked with a "1" in the
CHAP/utils/scanparsers.py CHANGED
@@ -5,6 +5,7 @@
5
5
  # System modules
6
6
  from csv import reader
7
7
  from fnmatch import filter as fnmatch_filter
8
+ from functools import cache
8
9
  from json import load
9
10
  import os
10
11
  import re
@@ -48,7 +49,12 @@ class ScanParser:
48
49
 
49
50
  self._detector_data_path = None
50
51
 
51
- 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
+
52
58
  return (f'{self.__class__.__name__}'
53
59
  f'({self.spec_file_name}, {self.scan_number}) '
54
60
  f'-- {self.spec_command}')
@@ -359,7 +365,7 @@ class SMBScanParser(ScanParser):
359
365
 
360
366
  if par_dict is None:
361
367
  raise RuntimeError(f'{self.scan_title}: could not find scan pars '
362
- 'for scan number {self.scan_number}')
368
+ f'for scan number {self.scan_number}')
363
369
  return par_dict
364
370
 
365
371
  def get_counter_gain(self, counter_name):
@@ -526,7 +532,17 @@ class FMBLinearScanParser(LinearScanParser, FMBScanParser):
526
532
 
527
533
  def get_spec_scan_motor_mnes(self):
528
534
  if self.spec_macro == 'flymesh':
529
- 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)
530
546
  if self.spec_macro in ('flyscan', 'ascan'):
531
547
  return (self.spec_args[0],)
532
548
  if self.spec_macro in ('tseries', 'loopscan'):
@@ -536,12 +552,26 @@ class FMBLinearScanParser(LinearScanParser, FMBScanParser):
536
552
 
537
553
  def get_spec_scan_motor_vals(self):
538
554
  if self.spec_macro == 'flymesh':
539
- fast_mot_vals = np.linspace(float(self.spec_args[1]),
540
- float(self.spec_args[2]),
541
- int(self.spec_args[3])+1)
542
- slow_mot_vals = np.linspace(float(self.spec_args[6]),
543
- float(self.spec_args[7]),
544
- 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)
545
575
  return (fast_mot_vals, slow_mot_vals)
546
576
  if self.spec_macro in ('flyscan', 'ascan'):
547
577
  mot_vals = np.linspace(float(self.spec_args[1]),
@@ -555,8 +585,16 @@ class FMBLinearScanParser(LinearScanParser, FMBScanParser):
555
585
 
556
586
  def get_spec_scan_shape(self):
557
587
  if self.spec_macro == 'flymesh':
558
- fast_mot_npts = int(self.spec_args[3])+1
559
- 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
560
598
  return (fast_mot_npts, slow_mot_npts)
561
599
  if self.spec_macro in ('flyscan', 'ascan'):
562
600
  mot_npts = int(self.spec_args[3])+1
@@ -567,7 +605,15 @@ class FMBLinearScanParser(LinearScanParser, FMBScanParser):
567
605
  f'for scans of type {self.spec_macro}')
568
606
 
569
607
  def get_spec_scan_dwell(self):
570
- 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'):
571
617
  return float(self.spec_args[4])
572
618
  if self.spec_macro in ('tseries', 'loopscan'):
573
619
  return float(self.spec_args[1])
@@ -578,6 +624,27 @@ class FMBLinearScanParser(LinearScanParser, FMBScanParser):
578
624
  return os.path.join(self.scan_path, self.scan_title)
579
625
 
580
626
 
627
+
628
+ @cache
629
+ def list_fmb_saxswaxs_detector_files(detector_data_path, detector_prefix):
630
+ """Return a sorted list of all data files for the given detector
631
+ in the given directory. This function is cached to improve
632
+ performace for carrying our full FAMB SAXS/WAXS data-processing
633
+ workflows.
634
+
635
+ :param detector_data_path: directory in which to look for detector
636
+ data files
637
+ :type detector_data_path: str
638
+ :param detector_prefix: detector name to list files for
639
+ :type detector_prefix: str
640
+ :return: list of detector filenames
641
+ :rtype: list[str]
642
+ """
643
+ return sorted(
644
+ [f for f in os.listdir(detector_data_path)
645
+ if detector_prefix in f
646
+ and not f.endswith('.log')])
647
+
581
648
  class FMBSAXSWAXSScanParser(FMBLinearScanParser):
582
649
  """Concrete implementation of a class representing a scan taken
583
650
  with the typical SAXS/WAXS setup at FMB.
@@ -587,20 +654,10 @@ class FMBSAXSWAXSScanParser(FMBLinearScanParser):
587
654
  return f'{self.scan_name}_{self.scan_number:03d}'
588
655
 
589
656
  def get_detector_data_file(self, detector_prefix, scan_step_index:int):
590
- scan_step = self.get_scan_step(scan_step_index)
591
- file_indices = [f'{scan_step[i]:03d}'
592
- for i in range(len(self.spec_scan_shape))
593
- if self.spec_scan_shape[i] != 1]
594
- if len(file_indices) == 0:
595
- file_indices = ['000']
596
- file_name = f'{self.scan_name}_{detector_prefix}_' \
597
- f'{self.scan_number:03d}_{"_".join(file_indices)}.tiff'
598
- file_name_full = os.path.join(self.detector_data_path, file_name)
599
- if os.path.isfile(file_name_full):
600
- return file_name_full
601
- raise RuntimeError(f'{self.scan_title}: could not find detector image '
602
- f'file for detector {detector_prefix} scan step '
603
- f'({scan_step})')
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])
604
661
 
605
662
  def get_detector_data(self, detector_prefix, scan_step_index:int):
606
663
  image_file = self.get_detector_data_file(detector_prefix,
@@ -783,7 +840,17 @@ class FMBRotationScanParser(RotationScanParser, FMBScanParser):
783
840
  with the typical tomography setup at FMB.
784
841
  """
785
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
+
786
851
  def get_spec_scan_npts(self):
852
+ if hasattr(self, '_rams4_args'):
853
+ return 1+int(self._rams4_args[2])
787
854
  if self.spec_macro == 'flyscan':
788
855
  if len(self.spec_args) == 2:
789
856
  return 1+int(self.spec_args[0])
@@ -792,12 +859,12 @@ class FMBRotationScanParser(RotationScanParser, FMBScanParser):
792
859
  raise RuntimeError(f'{self.scan_title}: cannot obtain number of '
793
860
  f'points from {self.spec_macro} with arguments '
794
861
  f'{self.spec_args}')
795
- elif self.spec_macro == 'ascan':
796
- if len(self.spec_args) == 5:
797
- return int(self.spec_args[3])
798
- raise RuntimeError(f'{self.scan_title}: cannot obtain number of '
799
- f'points from {self.spec_macro} with arguments '
800
- 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}')
801
868
  raise RuntimeError(f'{self.scan_title}: cannot determine rotation '
802
869
  f' angles for scans of type {self.spec_macro}')
803
870
 
@@ -805,21 +872,10 @@ class FMBRotationScanParser(RotationScanParser, FMBScanParser):
805
872
  return 0
806
873
 
807
874
  def get_starting_image_offset(self):
875
+ if hasattr(self, '_rams4_args'):
876
+ return int(self.spec_args[0]) - self.spec_scan_npts
808
877
  if self.spec_macro == 'flyscan':
809
- # if len(self.spec_args) == 2:
810
- # return 1
811
- # if len(self.spec_args) == 5:
812
- # return 1
813
878
  return 1
814
- # raise RuntimeError(f'{self.scan_title}: cannot obtain starting '
815
- # f'image offset {self.spec_macro} with arguments'
816
- # f' {self.spec_args}')
817
- # elif self.spec_macro == 'ascan':
818
- # if len(self.spec_args) == 5:
819
- # return 0
820
- # raise RuntimeError(f'{self.scan_title}: cannot obtain starting '
821
- # f'image offset {self.spec_macro} with arguments'
822
- # f' {self.spec_args}')
823
879
  raise RuntimeError(f'{self.scan_title}: cannot determine starting '
824
880
  f'image offset for scans of type {self.spec_macro}')
825
881
 
@@ -845,8 +901,6 @@ class FMBRotationScanParser(RotationScanParser, FMBScanParser):
845
901
  if scan_step_index is None:
846
902
  detector_data = h5_file['/entry/instrument/detector/data'][
847
903
  self.starting_image_offset:]
848
- # sum_det = list(np.sum(detector_data, (1,2)))
849
- # print(f'\n\nsum scanparser ({len(sum_det)}):\n{sum_det}')
850
904
  elif isinstance(scan_step_index, int):
851
905
  detector_data = h5_file['/entry/instrument/detector/data'][
852
906
  self.starting_image_offset+scan_step_index]
@@ -863,10 +917,8 @@ class FMBRotationScanParser(RotationScanParser, FMBScanParser):
863
917
  def get_detector_data(self, detector_prefix, scan_step_index=None):
864
918
  try:
865
919
  # Detector files in h5 format
866
- # print('data in h5 file')
867
920
  detector_data = self.get_all_detector_data_in_file(
868
921
  detector_prefix, scan_step_index)
869
- # print(f'detector_data {detector_prefix} {scan_step_index}:\n{detector_data.shape}')
870
922
  except:
871
923
  # Detector files in tiff format
872
924
  if scan_step_index is None:
@@ -989,19 +1041,16 @@ class SMBRotationScanParser(RotationScanParser, SMBScanParser):
989
1041
  f'file for scan step ({scan_step_index})')
990
1042
 
991
1043
  def get_detector_data(self, detector_prefix, scan_step_index=None):
992
- # print(f'\n\nin get_detector_data: {detector_prefix} {scan_step_index}')
993
1044
  if scan_step_index is None:
994
1045
  detector_data = []
995
1046
  for index in range(self.spec_scan_npts):
996
1047
  detector_data.append(
997
1048
  self.get_detector_data(detector_prefix, index))
998
1049
  detector_data = np.asarray(detector_data)
999
- # print(f'detector_data shape {type(detector_data)} {detector_data.shape}:\n{detector_data}')
1000
1050
  elif isinstance(scan_step_index, int):
1001
1051
  image_file = self.get_detector_data_file(scan_step_index)
1002
1052
  with TiffFile(image_file) as tiff_file:
1003
1053
  detector_data = tiff_file.asarray()
1004
- # print(f'\t{scan_step_index} {image_file} {np.sum(np.asarray(detector_data))}')
1005
1054
  elif (isinstance(scan_step_index, (list, tuple))
1006
1055
  and len(scan_step_index) == 2):
1007
1056
  detector_data = []
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ChessAnalysisPipeline
3
- Version: 0.0.11
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,23 +1,23 @@
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=_FGzgv2RP-eVVKio9BM3Gy5he_8AAICK0YrsGjhbj70,25448
11
- CHAP/common/reader.py,sha256=aCxjudjnpkT0sRMW_E9SkZPLR8wXIEuOfm5p1OlRRlI,12336
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
- CHAP/common/models/map.py,sha256=wBSF2A6Ibq_xOBMxDh5Y_8pXR1ce-5KVFSZrHcFM1Oo,32585
15
+ CHAP/common/models/map.py,sha256=YIDojY_bgXS4k4GFOpmzo__yi7IsXl1mCIquTBS5srA,38280
16
16
  CHAP/edd/__init__.py,sha256=w3qmOjaoeiY69pf0ombi6TPRHcm60_T3sbTms5393pQ,422
17
- CHAP/edd/models.py,sha256=N9E_ktUczZRZ0YH3tbYdDJpoI60hTwav-xMsCr-rYHo,26630
18
- CHAP/edd/processor.py,sha256=WJQbNxTt6DHNGDfisq0Wo2ewcisXG7dZq97vWq3KGuo,45325
17
+ CHAP/edd/models.py,sha256=60xqOyClZefLngLFLN2lHM9c0UQKti8ZTylj5h9pJek,35075
18
+ CHAP/edd/processor.py,sha256=s2w7qqcn0ajld6QBy3uMg8PzrE-Re0DR7yCt7330qkQ,56335
19
19
  CHAP/edd/reader.py,sha256=O0KeZcqACsZ8ngrliPU6I3u8SeQT0Aq866jCTbruXqc,94
20
- CHAP/edd/utils.py,sha256=NGSNm3Q6DeQ0e-Zbot_r6F6q9JtH7u_Tx40oszlQnq4,14669
20
+ CHAP/edd/utils.py,sha256=9K_OnSUNcRL_oLDqivXkqbwbxE9HmP1cXf-6vkkPDxI,35095
21
21
  CHAP/edd/writer.py,sha256=Y1CXWMRU87XeeDp4g4-sUgPP2UbCguYZUR_Cg5Ci6l8,94
22
22
  CHAP/inference/__init__.py,sha256=GwpEKEMHY1-3AE7HWKBdBz_i7N1sz7xwve6y9tZ7Skk,263
23
23
  CHAP/inference/processor.py,sha256=TYYPtZ3YlZS1kgvGr6I_9RvSaR0kn9PKL98A3QwqeDI,2065
@@ -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=evhLS63LXWgQP4LWTstFpq3x9jspQJQoy96Kb0v0DSs,7631
36
- CHAP/tomo/processor.py,sha256=Ftvurc-Zbss-FN842sQ0cIpaAMvRyXT7iR8Di3TH6tc,137837
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
- CHAP/utils/fit.py,sha256=Pda4XTyRUWIaXyWio2VnMgRJgjO0v4lSqMOWsIrpUW0,123758
41
- CHAP/utils/general.py,sha256=TOUbWcqQZvYoMwItOhHtvuy8cisD6f54KbQ2V3fDRxQ,60844
40
+ CHAP/utils/fit.py,sha256=VEhqAkNqkDpjBQ_kbOfGlNCEwmaPCh8RBc5SxHUy-OM,127878
41
+ CHAP/utils/general.py,sha256=E1aKdoIEZCIDJoFGmOqSn0rRRA1rfbpImCmzhhyRGfY,67565
42
42
  CHAP/utils/material.py,sha256=NnLHAin3PrDxZiG6of8v7vFma0nAeOIRZJuXxSN_xj8,11495
43
- CHAP/utils/parfile.py,sha256=ueHPPM6pWBAXD1HveDZ1QgY_cyLFN8z0Cr22oxxnwgM,7601
44
- CHAP/utils/scanparsers.py,sha256=N9e1l_2tRl1hw1csgeFdhy_cM_a3e_yEeXnrEVQjNzQ,43773
43
+ CHAP/utils/parfile.py,sha256=GxBWG6EVKQnV1I_r_m4nfJrCb0VGAn6tjEfuxVTg-aA,7227
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.11.dist-info/LICENSE,sha256=GrJL25aZivxje_x-zBbeWASvdmgztxv8kBMhIP4XSMo,1075
50
- ChessAnalysisPipeline-0.0.11.dist-info/METADATA,sha256=2Cj7HXeX2kipCl3RoTf0Qn6BDYetnZDiBVo6fhuRUBk,1542
51
- ChessAnalysisPipeline-0.0.11.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
52
- ChessAnalysisPipeline-0.0.11.dist-info/entry_points.txt,sha256=w-KIKdUjmj5GCobrFC4_jexCsFB4yMXYjrsMWrhI6Co,42
53
- ChessAnalysisPipeline-0.0.11.dist-info/top_level.txt,sha256=BKhggOWLb9dD6oQm1RXrkJPnXm-zJxVzQef1iXYtt2k,11
54
- ChessAnalysisPipeline-0.0.11.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