spacr 0.3.41__py3-none-any.whl → 0.3.42__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.
spacr/measure.py CHANGED
@@ -710,7 +710,7 @@ def _measure_crop_core(index, time_ls, file, settings):
710
710
  else:
711
711
  cell_mask = np.zeros_like(data[:, :, 0])
712
712
  settings['cytoplasm'] = False
713
- settings['include_uninfected'] = True
713
+ settings['uninfected'] = True
714
714
 
715
715
  if settings['nucleus_mask_dim'] is not None:
716
716
  nucleus_mask = data[:, :, settings['nucleus_mask_dim']].astype(data_type)
@@ -762,7 +762,7 @@ def _measure_crop_core(index, time_ls, file, settings):
762
762
  cytoplasm_mask = _filter_object(cytoplasm_mask, settings['cytoplasm_min_size'])
763
763
 
764
764
  if settings['cell_mask_dim'] is not None:
765
- cell_mask, nucleus_mask, pathogen_mask, cytoplasm_mask = _exclude_objects(cell_mask, nucleus_mask, pathogen_mask, cytoplasm_mask, include_uninfected=settings['include_uninfected'])
765
+ cell_mask, nucleus_mask, pathogen_mask, cytoplasm_mask = _exclude_objects(cell_mask, nucleus_mask, pathogen_mask, cytoplasm_mask, uninfected=settings['uninfected'])
766
766
 
767
767
  # Update data with the new masks
768
768
  if settings['cell_mask_dim'] is not None:
@@ -979,9 +979,9 @@ def measure_crop(settings):
979
979
  #_create_database(source_folder+'/measurements/measurements.db')
980
980
 
981
981
  if settings['cell_mask_dim'] is None:
982
- settings['include_uninfected'] = True
982
+ settings['uninfected'] = True
983
983
  if settings['pathogen_mask_dim'] is None:
984
- settings['include_uninfected'] = True
984
+ settings['uninfected'] = True
985
985
  if settings['cell_mask_dim'] is not None and settings['pathogen_min_size'] is not None:
986
986
  settings['cytoplasm'] = True
987
987
  elif settings['cell_mask_dim'] is not None and settings['nucleus_min_size'] is not None:
spacr/ml.py CHANGED
@@ -449,26 +449,28 @@ def perform_regression(settings):
449
449
  return df, n_gene
450
450
  else:
451
451
  return df
452
+
453
+
452
454
 
453
455
  settings = get_perform_regression_default_settings(settings)
454
456
  count_data_df, score_data_df = _perform_regression_read_data(settings)
455
457
  results_path, results_path_gene, results_path_grna, hits_path, res_folder, csv_path = _perform_regression_set_paths(settings)
456
458
  save_settings(settings, name='regression', show=True)
459
+
460
+ if isinstance(settings['filter_value'], list):
461
+ filter_value = settings['filter_value']
462
+ else:
463
+ filter_value = []
464
+ if isinstance(settings['filter_column'], str):
465
+ filter_column = settings['filter_column']
457
466
 
458
- score_data_df = clean_controls(score_data_df, settings['pc'], settings['nc'], settings['other'])
467
+ score_data_df = clean_controls(score_data_df, settings['filter_value'], settings['filter_column'])
459
468
  print(f"Dependent variable after clean_controls: {len(score_data_df)}")
460
469
 
461
470
  dependent_df, dependent_variable = process_scores(score_data_df, settings['dependent_variable'], settings['plate'], settings['min_cell_count'], settings['agg_type'], settings['transform'])
462
471
  print(f"Dependent variable after process_scores: {len(dependent_df)}")
463
472
 
464
- filter_value = [settings['nc'], settings['pc']]
465
-
466
- if settings['other'] is not None:
467
- if isinstance(settings['other'], str):
468
- settings['other'] = [settings['other']]
469
- filter_value.extend(settings['other'])
470
-
471
- independent_df = process_reads(count_data_df, settings['fraction_threshold'], settings['plate'], filter_column=settings['location_column'], filter_value=filter_value)
473
+ independent_df = process_reads(count_data_df, settings['fraction_threshold'], settings['plate'], filter_column=filter_column, filter_value=filter_value)
472
474
  independent_df, n_grna, n_gene = _count_variable_instances(independent_df, column_1='grna', column_2='gene')
473
475
 
474
476
  print(f"Independent variable after process_reads: {len(independent_df)}")
@@ -498,12 +500,14 @@ def perform_regression(settings):
498
500
  if settings['controls'] is not None:
499
501
  control_coef_df = grna_coef_df[grna_coef_df['grna'].isin(settings['controls'])]
500
502
  mean_coef = control_coef_df['coefficient'].mean()
501
- variance_coef = control_coef_df['coefficient'].var()
502
- std_coef = control_coef_df['coefficient'].std()
503
- reg_threshold = mean_coef + (3 * std_coef)
504
-
505
- print('coef_df')
506
- display(coef_df)
503
+
504
+ if settings['threshold_method'] in ['var','variance']:
505
+ coef_mes = control_coef_df['coefficient'].var()
506
+ elif settings['threshold_method'] in ['std', 'standard_deveation']:
507
+ coef_mes = control_coef_df['coefficient'].std()
508
+ else:
509
+ raise ValueError(f"Unsupported threshold method {settings['threshold_method']}. Supported methods: ['var','variance','std','standard_deveation']")
510
+ reg_threshold = mean_coef + (settings['threshold_multiplier'] * coef_mes)
507
511
 
508
512
  coef_df.to_csv(results_path, index=False)
509
513
  gene_coef_df.to_csv(results_path_gene, index=False)
@@ -596,7 +600,7 @@ def process_reads(csv_path, fraction_threshold, plate, filter_column=None, filte
596
600
  if isinstance(filter_value, str):
597
601
  filter_value = [filter_value]
598
602
 
599
- if isinstance(filter_column, list):
603
+ if isinstance(filter_column, list):
600
604
  for filter_col in filter_column:
601
605
  for value in filter_value:
602
606
  csv_df = csv_df[csv_df[filter_col] != value]
@@ -659,16 +663,12 @@ def check_normality(data, variable_name, verbose=False):
659
663
  print(f"Normal distribution: The data for {variable_name} is not normally distributed.")
660
664
  return False
661
665
 
662
- def clean_controls(df,pc,nc,other):
663
- if 'col' in df.columns:
664
- df['column'] = df['col']
665
- if nc != None:
666
- df = df[~df['column'].isin([nc])]
667
- if pc != None:
668
- df = df[~df['column'].isin([pc])]
669
- if other != None:
670
- df = df[~df['column'].isin([other])]
671
- print(f'Removed data from {nc, pc, other}')
666
+ def clean_controls(df,values, column):
667
+ if column in df.columns:
668
+ if isinstance(values, list):
669
+ for value in values:
670
+ df = df[~df[column].isin([value])]
671
+ print(f'Removed data from {value}')
672
672
  return df
673
673
 
674
674
  def process_scores(df, dependent_variable, plate, min_cell_count=25, agg_type='mean', transform=None, regression_type='ols'):
spacr/settings.py CHANGED
@@ -261,7 +261,7 @@ def get_measure_crop_settings(settings={}):
261
261
  settings.setdefault('nucleus_mask_dim',None)
262
262
  settings.setdefault('pathogen_mask_dim',None)
263
263
  settings.setdefault('cytoplasm',False)
264
- settings.setdefault('include_uninfected',True)
264
+ settings.setdefault('uninfected',True)
265
265
  settings.setdefault('cell_min_size',0)
266
266
  settings.setdefault('nucleus_min_size',0)
267
267
  settings.setdefault('pathogen_min_size',0)
@@ -527,26 +527,31 @@ def set_generate_dataset_defaults(settings):
527
527
  return settings
528
528
 
529
529
  def get_perform_regression_default_settings(settings):
530
- settings.setdefault('highlight','239740')
531
- settings.setdefault('dependent_variable','predictions')
530
+ settings.setdefault('count_data','list of paths')
531
+ settings.setdefault('score_data','list of paths')
532
+ settings.setdefault('positive_control','239740')
533
+ settings.setdefault('negative_control','233460')
534
+ settings.setdefault('controls',['000000_1','000000_10','000000_11','000000_12','000000_13','000000_14','000000_15','000000_16','000000_17','000000_18','000000_19','000000_20','000000_21','000000_22','000000_23','000000_24','000000_25','000000_26','000000_27','000000_28','000000_29','000000_3','000000_30','000000_31','000000_32','000000_4','000000_5','000000_6','000000_8','000000_9'])
535
+ settings.setdefault('fraction_threshold',0.12)
536
+ settings.setdefault('dependent_variable','pred')
537
+ settings.setdefault('threshold_method','std')
538
+ settings.setdefault('threshold_multiplier',3)
532
539
  settings.setdefault('transform',None)
533
540
  settings.setdefault('agg_type','mean')
534
541
  settings.setdefault('min_cell_count',25)
535
542
  settings.setdefault('regression_type','ols')
536
543
  settings.setdefault('random_row_column_effects',False)
544
+ settings.setdefault('split_axis_lims','')
545
+ settings.setdefault('plate','')
546
+ settings.setdefault('cov_type',None)
537
547
  settings.setdefault('alpha',1)
538
- settings.setdefault('fraction_threshold',0.1)
539
- settings.setdefault('location_column','column')
540
- settings.setdefault('nc','c1')
541
- settings.setdefault('pc','c2')
542
- settings.setdefault('other','c3')
548
+ settings.setdefault('filter_value',['c1', 'c2', 'c3'])
549
+ settings.setdefault('filter_column','column')
543
550
  settings.setdefault('plate','plate1')
544
551
  settings.setdefault('class_1_threshold',None)
545
- settings.setdefault('cov_type',None)
546
552
  settings.setdefault('metadata_files',['/home/carruthers/Documents/TGME49_Summary.csv','/home/carruthers/Documents/TGGT1_Summary.csv'])
547
553
  settings.setdefault('toxo', True)
548
554
 
549
-
550
555
  if settings['regression_type'] == 'quantile':
551
556
  print(f"Using alpha as quantile for quantile regression, alpha: {settings['alpha']}")
552
557
  settings['agg_type'] = None
@@ -664,7 +669,7 @@ expected_types = {
664
669
  "png_dims": list,
665
670
  "normalize_by": str,
666
671
  "save_measurements": bool,
667
- "include_uninfected": bool,
672
+ "uninfected": bool,
668
673
  "dialate_pngs": bool,
669
674
  "dialate_png_ratios": list,
670
675
  "n_jobs": int,
@@ -893,7 +898,7 @@ expected_types = {
893
898
  categories = {"Paths":[ "src", "grna", "barcodes", "custom_model_path", "dataset","model_path","grna_csv","row_csv","column_csv"],
894
899
  "General": ["metadata_type", "custom_regex", "experiment", "channels", "magnification", "channel_dims", "apply_model_to_dataset", "generate_training_dataset", "train_DL_model", "segmentation_mode"],
895
900
  "Cellpose":["from_scratch", "n_epochs", "width_height", "model_name", "custom_model", "resample", "rescale", "CP_prob", "flow_threshold", "percentiles", "circular", "invert", "diameter", "grayscale", "background", "Signal_to_noise", "resize", "target_height", "target_width"],
896
- "Cell": ["cell_intensity_range", "cell_size_range", "cell_chann_dim", "cell_channel", "cell_background", "cell_Signal_to_noise", "cell_CP_prob", "cell_FT", "remove_background_cell", "cell_min_size", "cell_mask_dim", "cytoplasm", "cytoplasm_min_size", "include_uninfected", "merge_edge_pathogen_cells", "adjust_cells", "cells", "cell_loc"],
901
+ "Cell": ["cell_intensity_range", "cell_size_range", "cell_chann_dim", "cell_channel", "cell_background", "cell_Signal_to_noise", "cell_CP_prob", "cell_FT", "remove_background_cell", "cell_min_size", "cell_mask_dim", "cytoplasm", "cytoplasm_min_size", "uninfected", "merge_edge_pathogen_cells", "adjust_cells", "cells", "cell_loc"],
897
902
  "Nucleus": ["nucleus_intensity_range", "nucleus_size_range", "nucleus_chann_dim", "nucleus_channel", "nucleus_background", "nucleus_Signal_to_noise", "nucleus_CP_prob", "nucleus_FT", "remove_background_nucleus", "nucleus_min_size", "nucleus_mask_dim", "nucleus_loc"],
898
903
  "Pathogen": ["pathogen_intensity_range", "pathogen_size_range", "pathogen_chann_dim", "pathogen_channel", "pathogen_background", "pathogen_Signal_to_noise", "pathogen_CP_prob", "pathogen_FT", "pathogen_model", "remove_background_pathogen", "pathogen_min_size", "pathogen_mask_dim", "pathogens", "pathogen_loc", "pathogen_types", "pathogen_plate_metadata", ],
899
904
  "Measurements": ["remove_image_canvas", "remove_highly_correlated", "homogeneity", "homogeneity_distances", "radial_dist", "calculate_correlation", "manders_thresholds", "save_measurements", "tables", "image_nr", "dot_size", "filter_by", "remove_highly_correlated_features", "remove_low_variance_features", "channel_of_interest"],
@@ -1083,7 +1088,7 @@ def generate_fields(variables, scrollable_frame):
1083
1088
  "nuclei_limit": "(int) - Whether to include multinucleated cells in the analysis.",
1084
1089
  "pathogen_limit": "(int) - Whether to include multi-infected cells in the analysis.",
1085
1090
  "uninfected": "(bool) - Whether to include non-infected cells in the analysis.",
1086
- "include_uninfected": "(bool) - Whether to include uninfected cells in the analysis.",
1091
+ "uninfected": "(bool) - Whether to include uninfected cells in the analysis.",
1087
1092
  "init_weights": "(bool) - Whether to initialize weights for the model.",
1088
1093
  "src": "(str) - Path to the folder containing the images.",
1089
1094
  "intermedeate_save": "(bool) - Whether to save intermediate results.",
spacr/toxo.py CHANGED
@@ -136,6 +136,7 @@ def custom_volcano_plot(data_path, metadata_path, metadata_column='tagm_location
136
136
  data['variable'].fillna(data['feature'], inplace=True)
137
137
  split_columns = data['variable'].str.split('_', expand=True)
138
138
  data['gene_nr'] = split_columns[0]
139
+ data = data[data['variable'] != 'Intercept']
139
140
 
140
141
  # Load metadata
141
142
  if isinstance(metadata_path, pd.DataFrame):
@@ -158,11 +159,14 @@ def custom_volcano_plot(data_path, metadata_path, metadata_column='tagm_location
158
159
  merged_data['condition'],
159
160
  categories=['other','pc', 'nc', 'control'],
160
161
  ordered=True)
162
+
163
+
164
+ display(merged_data)
161
165
 
162
166
  # Create subplots with a broken y-axis
163
167
  figsize_2 = figsize / 2
164
168
  fig, (ax1, ax2) = plt.subplots(
165
- 2, 1, figsize=(figsize_2, figsize),
169
+ 2, 1, figsize=(figsize, figsize),
166
170
  sharex=True, gridspec_kw={'height_ratios': [1, 3]}
167
171
  )
168
172
 
@@ -178,11 +182,12 @@ def custom_volcano_plot(data_path, metadata_path, metadata_column='tagm_location
178
182
  data=merged_data,
179
183
  x='coefficient',
180
184
  y='-log10(p_value)',
181
- hue='condition',
182
- style=metadata_column if metadata_column else None,
185
+ hue='condition', # Keep colors but prevent them from showing in the final legend
186
+ style=metadata_column if metadata_column else None, # Shape-based legend
183
187
  s=point_size,
184
188
  edgecolor='black',
185
189
  palette=palette,
190
+ legend='brief', # Capture the full legend initially
186
191
  alpha=0.8,
187
192
  ax=ax2 # Lower plot
188
193
  )
@@ -196,6 +201,7 @@ def custom_volcano_plot(data_path, metadata_path, metadata_column='tagm_location
196
201
  s=point_size,
197
202
  palette=palette,
198
203
  edgecolor='black',
204
+ legend=False, # Suppress legend for upper plot
199
205
  alpha=0.8,
200
206
  ax=ax1 # Upper plot
201
207
  )
@@ -222,9 +228,24 @@ def custom_volcano_plot(data_path, metadata_path, metadata_column='tagm_location
222
228
  ax2.spines['top'].set_visible(False)
223
229
  ax1.tick_params(labelbottom=False)
224
230
 
225
- ax1.legend_.remove()
226
231
  if ax1.get_legend() is not None:
227
- ax1.get_legend().remove()
232
+ ax1.legend_.remove()
233
+ ax1.get_legend().remove() # Extract handles and labels from the legend
234
+ handles, labels = ax2.get_legend_handles_labels()
235
+
236
+ # Identify shape-based legend entries (skip color-based entries)
237
+ shape_handles = handles[len(set(merged_data['condition'])):]
238
+ shape_labels = labels[len(set(merged_data['condition'])):]
239
+
240
+ # Set the legend with only shape-based entries
241
+ ax2.legend(
242
+ shape_handles,
243
+ shape_labels,
244
+ bbox_to_anchor=(1.05, 1),
245
+ loc='upper left',
246
+ borderaxespad=0.
247
+ )
248
+
228
249
  ax1.tick_params(axis='x', which='both', bottom=False, top=False, labelbottom=False)
229
250
 
230
251
  # Add vertical threshold lines to both plots
spacr/utils.py CHANGED
@@ -2912,7 +2912,7 @@ def _relabel_parent_with_child_labels(parent_mask, child_mask):
2912
2912
 
2913
2913
  return parent_mask_new, child_mask
2914
2914
 
2915
- def _exclude_objects(cell_mask, nucleus_mask, pathogen_mask, cytoplasm_mask, include_uninfected=True):
2915
+ def _exclude_objects(cell_mask, nucleus_mask, pathogen_mask, cytoplasm_mask, uninfected=True):
2916
2916
  """
2917
2917
  Exclude objects from the masks based on certain criteria.
2918
2918
 
@@ -2921,7 +2921,7 @@ def _exclude_objects(cell_mask, nucleus_mask, pathogen_mask, cytoplasm_mask, inc
2921
2921
  nucleus_mask (ndarray): Mask representing nucleus.
2922
2922
  pathogen_mask (ndarray): Mask representing pathogens.
2923
2923
  cytoplasm_mask (ndarray): Mask representing cytoplasm.
2924
- include_uninfected (bool, optional): Whether to include uninfected cells. Defaults to True.
2924
+ uninfected (bool, optional): Whether to include uninfected cells. Defaults to True.
2925
2925
 
2926
2926
  Returns:
2927
2927
  tuple: A tuple containing the filtered cell mask, nucleus mask, pathogen mask, and cytoplasm mask.
@@ -2936,7 +2936,7 @@ def _exclude_objects(cell_mask, nucleus_mask, pathogen_mask, cytoplasm_mask, inc
2936
2936
  has_nucleus = np.any(nucleus_mask[cell_region])
2937
2937
  has_cytoplasm = np.any(cytoplasm_mask[cell_region])
2938
2938
  has_pathogen = np.any(pathogen_mask[cell_region])
2939
- if include_uninfected:
2939
+ if uninfected:
2940
2940
  if has_nucleus and has_cytoplasm:
2941
2941
  filtered_cells[cell_region] = cell_label
2942
2942
  else:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: spacr
3
- Version: 0.3.41
3
+ Version: 0.3.42
4
4
  Summary: Spatial phenotype analysis of crisp screens (SpaCr)
5
5
  Home-page: https://github.com/EinarOlafsson/spacr
6
6
  Author: Einar Birnir Olafsson
@@ -16,18 +16,18 @@ spacr/gui_elements.py,sha256=w-S1MZdyxt5O3DsNAHNNXy_WGfwBPg0NhwQtCsJeiao,137071
16
16
  spacr/gui_utils.py,sha256=7e9DsZIuV7-jh97kEf7v1In_cFzlFueV4SGcGYGpTxw,45454
17
17
  spacr/io.py,sha256=LN_gJq_oqjbf8y-lBtLLZtJi8DLbNdyoGEcBYyOjbhQ,143606
18
18
  spacr/logger.py,sha256=lJhTqt-_wfAunCPl93xE65Wr9Y1oIHJWaZMjunHUeIw,1538
19
- spacr/measure.py,sha256=BThn_sALgKrwGKnLOGpT4FyoJeRVoTZoP9SXbCtCMRw,54857
19
+ spacr/measure.py,sha256=KdboGXoi85BO5-_6er7932FgjFI7G7tuaQDnWSiEuew,54817
20
20
  spacr/mediar.py,sha256=FwLvbLQW5LQzPgvJZG8Lw7GniA2vbZx6Jv6vIKu7I5c,14743
21
- spacr/ml.py,sha256=e6nUQaiKBPwcDN_aZZKsbZG6qEa5k9B42wtuL8ipv3Q,50287
21
+ spacr/ml.py,sha256=vzuEnbQd96mn7T8h3GRsEDnpWSSpxd3ApGMXTiG6b2o,50507
22
22
  spacr/openai.py,sha256=5vBZ3Jl2llYcW3oaTEXgdyCB2aJujMUIO5K038z7w_A,1246
23
23
  spacr/plot.py,sha256=TDGMwiIHjvk6v94WFlIvemU-6JfEik_GmSez51vyvCc,135869
24
24
  spacr/sequencing.py,sha256=t18mgpK6rhWuB1LtFOsPxqgpFXxuUmrD06ecsaVQ0Gw,19655
25
- spacr/settings.py,sha256=AzP9NGiXI1MqT69bHObxwDSCUk0kdstBVvl1JpcD_-w,75960
25
+ spacr/settings.py,sha256=x3zcOpVbsxGvq4neW-H08CxzNl8thacy4WOxcIG4TAc,76607
26
26
  spacr/sim.py,sha256=1xKhXimNU3ukzIw-3l9cF3Znc_brW8h20yv8fSTzvss,71173
27
27
  spacr/submodules.py,sha256=AB7s6-cULsaqz-haAaCtXfGEIi8uPZGT4xoCslUJC3Y,18391
28
28
  spacr/timelapse.py,sha256=FSYpUtAVy6xc3lwprRYgyDTT9ysUhfRQ4zrP9_h2mvg,39465
29
- spacr/toxo.py,sha256=7dUJe5_HSvDCP16OIXtbYLyshh9LXb2JQ80Vtn-XdPk,15979
30
- spacr/utils.py,sha256=_8OxwGVCZaMNBiweB4_YOxBkqQX1LR9YstPSIFmeQKA,216420
29
+ spacr/toxo.py,sha256=MVDfkfTl6fhbzg3izLWdtr2arARYIhI1TdScnHtPVqI,16770
30
+ spacr/utils.py,sha256=Z8lmQJc8sdPvHi0ZmYOahuKtUmDcrYtRYlT4qNZORXU,216396
31
31
  spacr/version.py,sha256=axH5tnGwtgSnJHb5IDhiu4Zjk5GhLyAEDRe-rnaoFOA,409
32
32
  spacr/resources/MEDIAR/.gitignore,sha256=Ff1q9Nme14JUd-4Q3jZ65aeQ5X4uttptssVDgBVHYo8,152
33
33
  spacr/resources/MEDIAR/LICENSE,sha256=yEj_TRDLUfDpHDNM0StALXIt6mLqSgaV2hcCwa6_TcY,1065
@@ -150,9 +150,9 @@ spacr/resources/icons/umap.png,sha256=dOLF3DeLYy9k0nkUybiZMe1wzHQwLJFRmgccppw-8b
150
150
  spacr/resources/images/plate1_E01_T0001F001L01A01Z01C02.tif,sha256=Tl0ZUfZ_AYAbu0up_nO0tPRtF1BxXhWQ3T3pURBCCRo,7958528
151
151
  spacr/resources/images/plate1_E01_T0001F001L01A02Z01C01.tif,sha256=m8N-V71rA1TT4dFlENNg8s0Q0YEXXs8slIn7yObmZJQ,7958528
152
152
  spacr/resources/images/plate1_E01_T0001F001L01A03Z01C03.tif,sha256=Pbhk7xn-KUP6RSIhJsxQcrHFImBm3GEpLkzx7WOc-5M,7958528
153
- spacr-0.3.41.dist-info/LICENSE,sha256=SR-2MeGc6SCM1UORJYyarSWY_A-JaOMFDj7ReSs9tRM,1083
154
- spacr-0.3.41.dist-info/METADATA,sha256=zGZO-9iZjljHTjnVg9kAxQJjr2vqpobl7S7ZSQlgxP8,5949
155
- spacr-0.3.41.dist-info/WHEEL,sha256=HiCZjzuy6Dw0hdX5R3LCFPDmFS4BWl8H-8W39XfmgX4,91
156
- spacr-0.3.41.dist-info/entry_points.txt,sha256=BMC0ql9aNNpv8lUZ8sgDLQMsqaVnX5L535gEhKUP5ho,296
157
- spacr-0.3.41.dist-info/top_level.txt,sha256=GJPU8FgwRXGzKeut6JopsSRY2R8T3i9lDgya42tLInY,6
158
- spacr-0.3.41.dist-info/RECORD,,
153
+ spacr-0.3.42.dist-info/LICENSE,sha256=SR-2MeGc6SCM1UORJYyarSWY_A-JaOMFDj7ReSs9tRM,1083
154
+ spacr-0.3.42.dist-info/METADATA,sha256=_nbP3IjQELrampyAYyt6hfrQBukDHuhlS7CApsMPsQ0,5949
155
+ spacr-0.3.42.dist-info/WHEEL,sha256=HiCZjzuy6Dw0hdX5R3LCFPDmFS4BWl8H-8W39XfmgX4,91
156
+ spacr-0.3.42.dist-info/entry_points.txt,sha256=BMC0ql9aNNpv8lUZ8sgDLQMsqaVnX5L535gEhKUP5ho,296
157
+ spacr-0.3.42.dist-info/top_level.txt,sha256=GJPU8FgwRXGzKeut6JopsSRY2R8T3i9lDgya42tLInY,6
158
+ spacr-0.3.42.dist-info/RECORD,,
File without changes