spacr 0.2.4__py3-none-any.whl → 0.2.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.
Files changed (60) hide show
  1. spacr/core.py +56 -67
  2. spacr/gui.py +20 -38
  3. spacr/gui_core.py +390 -489
  4. spacr/gui_elements.py +309 -59
  5. spacr/gui_utils.py +361 -73
  6. spacr/io.py +42 -46
  7. spacr/measure.py +198 -151
  8. spacr/plot.py +108 -42
  9. spacr/resources/font/open_sans/OFL.txt +93 -0
  10. spacr/resources/font/open_sans/OpenSans-Italic-VariableFont_wdth,wght.ttf +0 -0
  11. spacr/resources/font/open_sans/OpenSans-VariableFont_wdth,wght.ttf +0 -0
  12. spacr/resources/font/open_sans/README.txt +100 -0
  13. spacr/resources/font/open_sans/static/OpenSans-Bold.ttf +0 -0
  14. spacr/resources/font/open_sans/static/OpenSans-BoldItalic.ttf +0 -0
  15. spacr/resources/font/open_sans/static/OpenSans-ExtraBold.ttf +0 -0
  16. spacr/resources/font/open_sans/static/OpenSans-ExtraBoldItalic.ttf +0 -0
  17. spacr/resources/font/open_sans/static/OpenSans-Italic.ttf +0 -0
  18. spacr/resources/font/open_sans/static/OpenSans-Light.ttf +0 -0
  19. spacr/resources/font/open_sans/static/OpenSans-LightItalic.ttf +0 -0
  20. spacr/resources/font/open_sans/static/OpenSans-Medium.ttf +0 -0
  21. spacr/resources/font/open_sans/static/OpenSans-MediumItalic.ttf +0 -0
  22. spacr/resources/font/open_sans/static/OpenSans-Regular.ttf +0 -0
  23. spacr/resources/font/open_sans/static/OpenSans-SemiBold.ttf +0 -0
  24. spacr/resources/font/open_sans/static/OpenSans-SemiBoldItalic.ttf +0 -0
  25. spacr/resources/font/open_sans/static/OpenSans_Condensed-Bold.ttf +0 -0
  26. spacr/resources/font/open_sans/static/OpenSans_Condensed-BoldItalic.ttf +0 -0
  27. spacr/resources/font/open_sans/static/OpenSans_Condensed-ExtraBold.ttf +0 -0
  28. spacr/resources/font/open_sans/static/OpenSans_Condensed-ExtraBoldItalic.ttf +0 -0
  29. spacr/resources/font/open_sans/static/OpenSans_Condensed-Italic.ttf +0 -0
  30. spacr/resources/font/open_sans/static/OpenSans_Condensed-Light.ttf +0 -0
  31. spacr/resources/font/open_sans/static/OpenSans_Condensed-LightItalic.ttf +0 -0
  32. spacr/resources/font/open_sans/static/OpenSans_Condensed-Medium.ttf +0 -0
  33. spacr/resources/font/open_sans/static/OpenSans_Condensed-MediumItalic.ttf +0 -0
  34. spacr/resources/font/open_sans/static/OpenSans_Condensed-Regular.ttf +0 -0
  35. spacr/resources/font/open_sans/static/OpenSans_Condensed-SemiBold.ttf +0 -0
  36. spacr/resources/font/open_sans/static/OpenSans_Condensed-SemiBoldItalic.ttf +0 -0
  37. spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-Bold.ttf +0 -0
  38. spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-BoldItalic.ttf +0 -0
  39. spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-ExtraBold.ttf +0 -0
  40. spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-ExtraBoldItalic.ttf +0 -0
  41. spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-Italic.ttf +0 -0
  42. spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-Light.ttf +0 -0
  43. spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-LightItalic.ttf +0 -0
  44. spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-Medium.ttf +0 -0
  45. spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-MediumItalic.ttf +0 -0
  46. spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-Regular.ttf +0 -0
  47. spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-SemiBold.ttf +0 -0
  48. spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-SemiBoldItalic.ttf +0 -0
  49. spacr/resources/icons/logo.pdf +2786 -6
  50. spacr/resources/icons/logo_spacr.png +0 -0
  51. spacr/resources/icons/logo_spacr_1.png +0 -0
  52. spacr/settings.py +11 -83
  53. spacr/utils.py +13 -33
  54. {spacr-0.2.4.dist-info → spacr-0.2.5.dist-info}/METADATA +5 -1
  55. spacr-0.2.5.dist-info/RECORD +100 -0
  56. spacr-0.2.4.dist-info/RECORD +0 -58
  57. {spacr-0.2.4.dist-info → spacr-0.2.5.dist-info}/LICENSE +0 -0
  58. {spacr-0.2.4.dist-info → spacr-0.2.5.dist-info}/WHEEL +0 -0
  59. {spacr-0.2.4.dist-info → spacr-0.2.5.dist-info}/entry_points.txt +0 -0
  60. {spacr-0.2.4.dist-info → spacr-0.2.5.dist-info}/top_level.txt +0 -0
Binary file
Binary file
spacr/settings.py CHANGED
@@ -220,6 +220,7 @@ def get_measure_crop_settings(settings):
220
220
 
221
221
  settings.setdefault('src', 'path')
222
222
  settings.setdefault('verbose', False)
223
+ settings.setdefault('experiment', 'exp')
223
224
 
224
225
  # Test mode
225
226
  settings.setdefault('test_mode', False)
@@ -252,8 +253,6 @@ def get_measure_crop_settings(settings):
252
253
 
253
254
  # Operational settings
254
255
  settings.setdefault('plot',False)
255
- settings.setdefault('plot_filtration',False)
256
- settings.setdefault('representative_images', False)
257
256
  settings.setdefault('n_jobs', os.cpu_count()-2)
258
257
 
259
258
  # Object settings
@@ -268,24 +267,9 @@ def get_measure_crop_settings(settings):
268
267
  settings.setdefault('cytoplasm_min_size',0)
269
268
  settings.setdefault('merge_edge_pathogen_cells', True)
270
269
 
271
- # Miscellaneous settings
272
- settings.setdefault('experiment', 'exp')
273
- settings.setdefault('cells', ['HeLa'])
274
- settings.setdefault('cell_loc', None)
275
- settings.setdefault('pathogens', ['ME49Dku80WT', 'ME49Dku80dgra8:GRA8', 'ME49Dku80dgra8', 'ME49Dku80TKO'])
276
- settings.setdefault('pathogen_loc', [['c1', 'c2', 'c3', 'c4', 'c5', 'c6'], ['c7', 'c8', 'c9', 'c10', 'c11', 'c12'], ['c13', 'c14', 'c15', 'c16', 'c17', 'c18'], ['c19', 'c20', 'c21', 'c22', 'c23', 'c24']])
277
- settings.setdefault('treatments', ['BR1', 'BR2', 'BR3'])
278
- settings.setdefault('treatment_loc', [['c1', 'c2', 'c7', 'c8', 'c13', 'c14', 'c19', 'c20'], ['c3', 'c4', 'c9', 'c10', 'c15', 'c16', 'c21', 'c22'], ['c5', 'c6', 'c11', 'c12', 'c17', 'c18', 'c23', 'c24']])
279
- settings.setdefault('channel_of_interest', 2)
280
- settings.setdefault('compartments', ['pathogen', 'cytoplasm'])
281
- settings.setdefault('measurement', 'mean_intensity')
282
- settings.setdefault('nr_imgs', 32)
283
- settings.setdefault('um_per_pixel', 0.1)
284
-
285
270
  if settings['test_mode']:
286
271
  settings['verbose'] = True
287
272
  settings['plot'] = True
288
- settings['plot_filtration'] = True
289
273
  test_imgs = settings['test_nr']
290
274
  print(f'Test mode enabled with {test_imgs} images, plotting set to True')
291
275
 
@@ -554,8 +538,6 @@ expected_types = {
554
538
  "png_dims": list,
555
539
  "normalize_by": str,
556
540
  "save_measurements": bool,
557
- "representative_images": bool,
558
- "plot_filtration": bool,
559
541
  "include_uninfected": bool,
560
542
  "dialate_pngs": bool,
561
543
  "dialate_png_ratios": list,
@@ -742,60 +724,6 @@ expected_types = {
742
724
  "fraction_threshold": float,
743
725
  }
744
726
 
745
- def check_settings_v1(vars_dict, expected_types,q=None):
746
- from .gui_utils import parse_list
747
- settings = {}
748
- # Define the expected types for each key, including None where applicable
749
-
750
- for key, (label, widget, var) in vars_dict.items():
751
- if key not in expected_types:
752
- if key not in ["General","Nucleus","Cell","Pathogen","Timelapse","Plot","Object Image","Annotate Data","Measurements","Advanced","Miscellaneous","Test"]:
753
- q.put(f"Key {key} not found in expected types.")
754
- continue
755
-
756
- value = var.get()
757
- expected_type = expected_types.get(key, str)
758
-
759
- try:
760
- if key in ["png_size", "pathogen_plate_metadata", "treatment_plate_metadata"]:
761
- parsed_value = ast.literal_eval(value) if value else None
762
- if isinstance(parsed_value, list):
763
- if all(isinstance(i, list) for i in parsed_value) or all(not isinstance(i, list) for i in parsed_value):
764
- settings[key] = parsed_value
765
- else:
766
- raise ValueError("Invalid format: Mixed list and list of lists")
767
- else:
768
- raise ValueError("Invalid format for list or list of lists")
769
- elif expected_type == list:
770
- settings[key] = parse_list(value) if value else None
771
- elif expected_type == bool:
772
- settings[key] = value if isinstance(value, bool) else value.lower() in ['true', '1', 't', 'y', 'yes']
773
- elif expected_type == (int, type(None)):
774
- settings[key] = int(value) if value else None
775
- elif expected_type == (float, type(None)):
776
- settings[key] = float(value) if value else None
777
- elif expected_type == (int, float):
778
- settings[key] = float(value) if '.' in value else int(value)
779
- elif expected_type == (str, type(None)):
780
- settings[key] = str(value) if value else None
781
- elif isinstance(expected_type, tuple):
782
- for typ in expected_type:
783
- try:
784
- settings[key] = typ(value) if value else None
785
- break
786
- except (ValueError, TypeError):
787
- continue
788
- else:
789
- raise ValueError
790
- else:
791
- settings[key] = expected_type(value) if value else None
792
- except (ValueError, SyntaxError):
793
- expected_type_name = ' or '.join([t.__name__ for t in expected_type]) if isinstance(expected_type, tuple) else expected_type.__name__
794
- q.put(f"Error: Invalid format for {key}. Expected type: {expected_type_name}.")
795
- return
796
-
797
- return settings
798
-
799
727
  def check_settings(vars_dict, expected_types, q=None):
800
728
  from .gui_utils import parse_list
801
729
 
@@ -805,7 +733,7 @@ def check_settings(vars_dict, expected_types, q=None):
805
733
 
806
734
  settings = {}
807
735
 
808
- for key, (label, widget, var) in vars_dict.items():
736
+ for key, (label, widget, var, _) in vars_dict.items():
809
737
  if key not in expected_types:
810
738
  if key not in ["General", "Nucleus", "Cell", "Pathogen", "Timelapse", "Plot", "Object Image", "Annotate Data", "Measurements", "Advanced", "Miscellaneous", "Test"]:
811
739
  q.put(f"Key {key} not found in expected types.")
@@ -856,7 +784,7 @@ def check_settings(vars_dict, expected_types, q=None):
856
784
 
857
785
  def generate_fields(variables, scrollable_frame):
858
786
  from .gui_utils import create_input_field
859
- from .gui_elements import spacrToolTip
787
+ from .gui_elements import set_dark_style, spacrToolTip
860
788
  row = 1
861
789
  vars_dict = {}
862
790
  tooltips = {
@@ -1014,7 +942,6 @@ def generate_fields(variables, scrollable_frame):
1014
942
  "plot_by_cluster": "(bool) - Whether to plot images by clusters.",
1015
943
  "plot_cluster_grids": "(bool) - Whether to plot grids of clustered images.",
1016
944
  "plot_control": "(dict) - Control settings for plotting.",
1017
- "plot_filtration": "(bool) - Whether to plot the filtration steps.",
1018
945
  "plot_images": "(bool) - Whether to plot images.",
1019
946
  "plot_nr": "(int) - Number of plots to generate.",
1020
947
  "plot_outlines": "(bool) - Whether to plot outlines of segmented objects.",
@@ -1036,7 +963,6 @@ def generate_fields(variables, scrollable_frame):
1036
963
  "remove_image_canvas": "(bool) - Whether to remove the image canvas after plotting.",
1037
964
  "remove_low_variance_features": "(bool) - Whether to remove low variance features from the analysis.",
1038
965
  "remove_row_column_effect": "(bool) - Whether to remove row and column effects from the data.",
1039
- "representative_images": "(bool) - Whether to save representative images of the segmented objects (Not working yet).",
1040
966
  "resize": "(bool) - Resize factor for the images.",
1041
967
  "resample": "(bool) - Whether to resample the images during processing.",
1042
968
  "rescale": "(float) - Rescaling factor for the images.",
@@ -1080,17 +1006,19 @@ def generate_fields(variables, scrollable_frame):
1080
1006
  "um_per_pixel": "(float) - The micrometers per pixel for the images."
1081
1007
  }
1082
1008
 
1083
-
1084
1009
  for key, (var_type, options, default_value) in variables.items():
1085
- label, widget, var = create_input_field(scrollable_frame.scrollable_frame, key, row, var_type, options, default_value)
1086
- vars_dict[key] = (label, widget, var) # Store the label, widget, and variable
1010
+ label, widget, var, frame = create_input_field(scrollable_frame.scrollable_frame, key, row, var_type, options, default_value)
1011
+ vars_dict[key] = (label, widget, var, frame) # Store the label, widget, and variable
1087
1012
 
1088
1013
  # Add tooltip to the label if it exists in the tooltips dictionary
1089
1014
  if key in tooltips:
1090
1015
  spacrToolTip(label, tooltips[key])
1016
+
1091
1017
  row += 1
1018
+
1092
1019
  return vars_dict
1093
1020
 
1021
+
1094
1022
  categories = {
1095
1023
  "General": ["src", "metadata_type", "custom_regex", "experiment", "channels", "magnification", "channel_dims"],
1096
1024
  "Paths":["grna", "barcodes"],
@@ -1100,9 +1028,9 @@ categories = {
1100
1028
  "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"],
1101
1029
  "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"],
1102
1030
  "Timelapse": ["fps", "timelapse_displacement", "timelapse_memory", "timelapse_frame_limits", "timelapse_remove_transient", "timelapse_mode", "timelapse_objects", "compartments"],
1103
- "Plot": ["plot_control", "plot_nr", "plot_filtration", "examples_to_plot", "normalize_plots", "normalize", "cmap", "figuresize", "plot_cluster_grids", "img_zoom", "row_limit", "color_by", "plot_images", "smooth_lines", "plot_points", "plot_outlines", "black_background", "plot_by_cluster", "heatmap_feature","grouping","min_max","cmap","save_figure"],
1031
+ "Plot": ["plot_control", "plot_nr", "examples_to_plot", "normalize_plots", "normalize", "cmap", "figuresize", "plot_cluster_grids", "img_zoom", "row_limit", "color_by", "plot_images", "smooth_lines", "plot_points", "plot_outlines", "black_background", "plot_by_cluster", "heatmap_feature","grouping","min_max","cmap","save_figure"],
1104
1032
  "Object Image": ["save_png", "dialate_pngs", "dialate_png_ratios", "png_size", "png_dims", "save_arrays", "normalize_by", "dialate_png_ratios", "crop_mode", "dialate_pngs", "normalize", "use_bounding_box"],
1105
- "Annotate Data": ["nc_loc", "pc_loc", "nc", "pc", "cell_plate_metadata","pathogen_types", "pathogen_plate_metadata", "treatment_plate_metadata", "metadata_types", "cell_types", "target","positive_control","negative_control", "location_column", "treatment_loc", "cells", "cell_loc", "pathogens", "pathogen_loc", "channel_of_interest", "measurement", "treatments", "representative_images", "um_per_pixel", "nr_imgs", "exclude", "exclude_conditions", "mix", "pos", "neg"],
1033
+ "Annotate Data": ["nc_loc", "pc_loc", "nc", "pc", "cell_plate_metadata","pathogen_types", "pathogen_plate_metadata", "treatment_plate_metadata", "metadata_types", "cell_types", "target","positive_control","negative_control", "location_column", "treatment_loc", "cells", "cell_loc", "pathogens", "pathogen_loc", "channel_of_interest", "measurement", "treatments", "um_per_pixel", "nr_imgs", "exclude", "exclude_conditions", "mix", "pos", "neg"],
1106
1034
  "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"],
1107
1035
  "Advanced": ["plate_dict", "target_intensity_min", "cells_per_well", "include_multinucleated", "include_multiinfected", "include_noninfected", "backgrounds", "plot", "timelapse", "schedule", "test_size","exclude","n_repeats","top_features", "model_type","minimum_cell_count","n_estimators","preprocess", "remove_background", "normalize", "lower_percentile", "merge_pathogens", "batch_size", "filter", "save", "masks", "verbose", "randomize", "n_jobs", "train_mode","amsgrad","use_checkpoint","gradient_accumulation","gradient_accumulation_steps","intermedeate_save","pin_memory","n_jobs","channels","augment"],
1108
1036
  "Clustering": ["eps","min_samples","analyze_clusters","clustering","remove_cluster_noise"],
@@ -1114,7 +1042,7 @@ categories = {
1114
1042
  }
1115
1043
 
1116
1044
  descriptions = {
1117
- 'mask': "Generate Cellpose masks for Cells, Nuclei, and Pathogens. Function: preprocess_generate_masks from spacr.core.\n\nKey Features:\n- Automated Mask Generation: Automatically generate accurate masks for various cellular components using Cellpose, a robust deep learning model for cell segmentation.\n- Versatility: Capable of handling different types of biological samples, including cells, nuclei, and pathogens.\n- Integration: Directly integrates with other modules, providing the foundational masks required for subsequent analysis.",
1045
+ 'mask': "\n\nHelp:\n- Generate Cells, Nuclei, Pathogens, and Cytoplasm masks from intensity images in src.\n- To ensure that spacr is installed correctly:\n- 1. Downloade the training set (click Download).\n- 2. Import settings (click settings navigate to downloaded dataset settings folder and import preprocess_generate_masks_settings.csv).\n- 3. Run the module.\n- 4. Proceed to the Measure module (click Measure in the menue bar).\n- For further help, click the Help button in the menue bar.",
1118
1046
 
1119
1047
  'measure': "Capture Measurements from Cells, Nuclei, Pathogens, and Cytoplasm objects. Generate single object PNG images for one or several objects. (Requires masks from the Mask module). Function: measure_crop from spacr.measure.\n\nKey Features:\n- Comprehensive Measurement Capture: Obtain detailed measurements for various cellular components, including area, perimeter, intensity, and more.\n- Image Generation: Create high-resolution PNG images of individual objects, facilitating further analysis and visualization.\n- Mask Dependency: Requires accurate masks generated by the Mask module to ensure precise measurements.",
1120
1048
 
spacr/utils.py CHANGED
@@ -1,4 +1,4 @@
1
- import sys, os, re, sqlite3, torch, torchvision, random, string, shutil, cv2, tarfile, glob, psutil, platform, signal
1
+ import sys, os, re, sqlite3, torch, torchvision, random, string, shutil, cv2, tarfile, glob, psutil, platform
2
2
 
3
3
  import numpy as np
4
4
  from cellpose import models as cp_models
@@ -87,33 +87,12 @@ from scipy.stats import f_oneway, kruskal
87
87
  from sklearn.cluster import KMeans
88
88
  from scipy import stats
89
89
 
90
- def print_progress_v1(files_processed, files_to_process, n_jobs, time_ls=None, batch_size=None, operation_type=""):
91
- if isinstance(files_processed, list):
92
- files_processed = len(files_processed)
93
- if isinstance(files_to_process, list):
94
- files_to_process = len(files_to_process)
95
- if isinstance(batch_size, list):
96
- batch_size = len(batch_size)
97
-
98
- if time_ls is not None:
99
- average_time = np.mean(time_ls) if len(time_ls) > 0 else 0
100
- time_left = (((files_to_process-files_processed)*average_time)/n_jobs)/60
101
- if batch_size is None:
102
- print(f'Time/image: {average_time:.3f}sec')
103
- print(f'Time_left: {time_left:.3f} min.')
104
- else:
105
- average_time_img = average_time/batch_size
106
- print(f'Time/batch:{average_time:.3f}sec')
107
- print(f'Time/image {average_time_img:.3f}')
108
- print(f'Time_left: {time_left:.3f} min.')
109
-
110
- print(f'Progress: {files_processed}/{files_to_process}, operation_type: {operation_type}')
111
90
 
112
91
  def print_progress(files_processed, files_to_process, n_jobs, time_ls=None, batch_size=None, operation_type=""):
113
92
  if isinstance(files_processed, list):
114
- files_processed = len(files_processed)
93
+ files_processed = len(set(files_processed))
115
94
  if isinstance(files_to_process, list):
116
- files_to_process = len(files_to_process)
95
+ files_to_process = len(set(files_to_process))
117
96
  if isinstance(batch_size, list):
118
97
  batch_size = len(batch_size)
119
98
 
@@ -2989,11 +2968,13 @@ def _choose_model(model_name, device, object_type='cell', restore_type=None, obj
2989
2968
  if restore_type == None:
2990
2969
  if model_name in ['cyto', 'cyto2', 'cyto3', 'nuclei']:
2991
2970
  model = cp_models.Cellpose(gpu=torch.cuda.is_available(), model_type=model_name, device=device)
2992
-
2971
+ return model
2993
2972
  else:
2994
2973
  if object_type == 'nucleus':
2995
2974
  restore = f'{type}_nuclei'
2996
2975
  model = denoise.CellposeDenoiseModel(gpu=torch.cuda.is_available(), model_type="nuclei",restore_type=restore, chan2_restore=False, device=device)
2976
+ return model
2977
+
2997
2978
  else:
2998
2979
  restore = f'{type}_cyto3'
2999
2980
  if model_name =='cyto2':
@@ -3001,8 +2982,7 @@ def _choose_model(model_name, device, object_type='cell', restore_type=None, obj
3001
2982
  if model_name =='cyto':
3002
2983
  chan2_restore = False
3003
2984
  model = denoise.CellposeDenoiseModel(gpu=torch.cuda.is_available(), model_type="cyto3",restore_type=restore, chan2_restore=chan2_restore, device=device)
3004
-
3005
- return model
2985
+ return model
3006
2986
 
3007
2987
  class SelectChannels:
3008
2988
  def __init__(self, channels):
@@ -3648,22 +3628,22 @@ def delete_folder(folder_path):
3648
3628
  def measure_test_mode(settings):
3649
3629
 
3650
3630
  if settings['test_mode']:
3651
- if not os.path.basename(settings['input_folder']) == 'test':
3652
- all_files = os.listdir(settings['input_folder'])
3631
+ if not os.path.basename(settings['src']) == 'test':
3632
+ all_files = os.listdir(settings['src'])
3653
3633
  random_files = random.sample(all_files, settings['test_nr'])
3654
3634
 
3655
- src = os.path.join(os.path.dirname(settings['input_folder']),'test', 'merged')
3635
+ src = os.path.join(os.path.dirname(settings['src']),'test', 'merged')
3656
3636
  if os.path.exists(src):
3657
3637
  delete_folder(src)
3658
3638
  os.makedirs(src, exist_ok=True)
3659
3639
 
3660
3640
  for file in random_files:
3661
- shutil.copy(os.path.join(settings['input_folder'], file), os.path.join(src,file))
3641
+ shutil.copy(os.path.join(settings['src'], file), os.path.join(src,file))
3662
3642
 
3663
- settings['input_folder'] = src
3643
+ settings['src'] = src
3664
3644
  print(f'Changed source folder to {src} for test mode')
3665
3645
  else:
3666
- print(f'Test mode enabled, using source folder {settings["input_folder"]}')
3646
+ print(f'Test mode enabled, using source folder {settings["src"]}')
3667
3647
 
3668
3648
  return settings
3669
3649
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: spacr
3
- Version: 0.2.4
3
+ Version: 0.2.5
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
@@ -39,6 +39,10 @@ Requires-Dist: ttf-opensans >=2020.10.30
39
39
  Requires-Dist: customtkinter <6.0,>=5.2.2
40
40
  Requires-Dist: biopython <2.0,>=1.80
41
41
  Requires-Dist: lxml <6.0,>=5.1.0
42
+ Requires-Dist: psutil <6.0,>=5.9.8
43
+ Requires-Dist: gputil <2.0,>=1.4.0
44
+ Requires-Dist: gpustat <2.0,>=1.1.1
45
+ Requires-Dist: pyautogui <1.0,>=0.9.54
42
46
  Requires-Dist: huggingface-hub <0.25,>=0.24.0
43
47
  Provides-Extra: dev
44
48
  Requires-Dist: pytest <3.11,>=3.9 ; extra == 'dev'
@@ -0,0 +1,100 @@
1
+ spacr/__init__.py,sha256=pJ7Mm7Kb1DhHIdLmNgMILFVWJ9QAG47pT0M6wtiXl8E,1465
2
+ spacr/__main__.py,sha256=bkAJJD2kjIqOP-u1kLvct9jQQCeUXzlEjdgitwi1Lm8,75
3
+ spacr/app_annotate.py,sha256=nEIL7Fle9CDKGo3sucG_03DgjUQt5W1M1IHBIpVBr08,2171
4
+ spacr/app_classify.py,sha256=urTP_wlZ58hSyM5a19slYlBxN0PdC-9-ga0hvq8CGWc,165
5
+ spacr/app_make_masks.py,sha256=pqDhRpluiHZz-kPX2Zh_KbYe4TsU43qYBa_7f-rsjpw,1694
6
+ spacr/app_mask.py,sha256=l-dBY8ftzCMdDe6-pXc2Nh_u-idNL9G7UOARiLJBtds,153
7
+ spacr/app_measure.py,sha256=_K7APYIeOKpV6e_LcqabBjvEi7mfq9Fch8175x1x0k8,162
8
+ spacr/app_sequencing.py,sha256=DjG26jy4cpddnV8WOOAIiExtOe9MleVMY4MFa5uTo5w,157
9
+ spacr/app_umap.py,sha256=ZWAmf_OsIKbYvolYuWPMYhdlVe-n2CADoJulAizMiEo,153
10
+ spacr/chris.py,sha256=YlBjSgeZaY8HPy6jkrT_ISAnCMAKVfvCxF0I9eAZLFM,2418
11
+ spacr/core.py,sha256=WBVZfuVJPqI7hXaZVLPWCbe-CCLDNjsCB3nHCF2Axmg,148064
12
+ spacr/deep_spacr.py,sha256=ASBsN4JpHp_3S-91JUsB34IWTjTGPYI7jKV2qZnUR5M,37005
13
+ spacr/graph_learning.py,sha256=1tR-ZxvXE3dBz1Saw7BeVFcrsUFu9OlUZeZVifih9eo,13070
14
+ spacr/gui.py,sha256=NoqaHYjqvyiexfXMsFWrRYjcyqAOhEIYnR-82LkKzdk,7277
15
+ spacr/gui_core.py,sha256=UqX0JE7mCi_4TlVCtEMMTHSUEC2BvZSVUmWzue2HYok,30756
16
+ spacr/gui_elements.py,sha256=ISGt_gEozMx_BWWgXvcgEEKeqvCxfmoCDVHWlrJ1roQ,106811
17
+ spacr/gui_utils.py,sha256=nRH1bEXjrTsfgp01H7ayIkimN0v7G163XjiruGwySP0,28050
18
+ spacr/io.py,sha256=UYISLJgwpwyoTxKy1v1wzFQ6cLX77h2rHh4t5fF1_4w,115461
19
+ spacr/logger.py,sha256=7Zqr3TuuOQLWT32gYr2q1qvv7x0a2JhLANmZcnBXAW8,670
20
+ spacr/measure.py,sha256=A_n7y6cF4FL2VDggLaeeKdoWLx8UeHmUZL54NFM_jvI,54742
21
+ spacr/plot.py,sha256=4o9X76ur2kBe6TtOrbIPfo04iC60OZ1rNJoegBxtLmk,72361
22
+ spacr/sequencing.py,sha256=fHZRnoMSxmhMdadkei3lUeBdckqFyptWdQyWsDW3aaU,83304
23
+ spacr/settings.py,sha256=QS8D7zrhxyArRsavfz2w2bh6VnYJk3rUBwoGdE5Qqfc,61254
24
+ spacr/sim.py,sha256=FveaVgBi3eypO2oVB5Dx-v0CC1Ny7UPfXkJiiRRodAk,71212
25
+ spacr/sim_app.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
+ spacr/timelapse.py,sha256=KMYCgHzf9LTZe-lWl5mvH2EjbKRE6OhpwdY13wEumGc,39504
27
+ spacr/utils.py,sha256=TT2gb2nmhNSwkHheaOfpDPXhpE90_6Er3nA77gAbO3U,188225
28
+ spacr/version.py,sha256=axH5tnGwtgSnJHb5IDhiu4Zjk5GhLyAEDRe-rnaoFOA,409
29
+ spacr/resources/font/open_sans/OFL.txt,sha256=bGMoWBRrE2RcdzDiuYiB8A9OVFlJ0sA2imWwce2DAdo,4484
30
+ "spacr/resources/font/open_sans/OpenSans-Italic-VariableFont_wdth,wght.ttf",sha256=QSoWv9h46CRX_fdlqFM3O2d3-PF3R1srnb4zUezcLm0,580280
31
+ "spacr/resources/font/open_sans/OpenSans-VariableFont_wdth,wght.ttf",sha256=E3RLvAefD0kuT7OxShXSQrjZYA-qzUI9WM35N_6nzms,529700
32
+ spacr/resources/font/open_sans/README.txt,sha256=-ZB4ocy30PWpgUpWm_djuTyBe_NiE1yEFG7H-zODBbA,3518
33
+ spacr/resources/font/open_sans/static/OpenSans-Bold.ttf,sha256=vHPEXlgQoJcevq7062w13shGB9vgLaZ1f59D2Vi22l8,130860
34
+ spacr/resources/font/open_sans/static/OpenSans-BoldItalic.ttf,sha256=tiGd9Fy-5vh25rKPZoNI4YB7H7mtEY6n1ocEHw0zI4Q,136360
35
+ spacr/resources/font/open_sans/static/OpenSans-ExtraBold.ttf,sha256=DAeBB3dmNBMRYr5Go4JFOZBAwr7MSV6T1p2bbt1lqY0,131244
36
+ spacr/resources/font/open_sans/static/OpenSans-ExtraBoldItalic.ttf,sha256=oDRGYhCusJ9__bySUKzNH1w-L7isv9O-iqFUmT7EPZs,136928
37
+ spacr/resources/font/open_sans/static/OpenSans-Italic.ttf,sha256=XqvWf-PYtbXu5kUE6p5KXvdmW2Q1d-8Rfzwy_aZ80p8,136604
38
+ spacr/resources/font/open_sans/static/OpenSans-Light.ttf,sha256=RurTiXjijzKtfcENRn7-jYtXhv-YAgw3GKKW-I738cw,130804
39
+ spacr/resources/font/open_sans/static/OpenSans-LightItalic.ttf,sha256=TqxQLBDa9mCOU-fbhteXaYkDc-u9VHKle7y3V4m8URA,136896
40
+ spacr/resources/font/open_sans/static/OpenSans-Medium.ttf,sha256=KrFWKUJKzobUKdvA5ae-sw0q89uZiisDpxYB7mllwzQ,130976
41
+ spacr/resources/font/open_sans/static/OpenSans-MediumItalic.ttf,sha256=v0NvTDTSySHQ8tSZfnhUBQpg_qqJu6zGBK6JatJUyos,136796
42
+ spacr/resources/font/open_sans/static/OpenSans-Regular.ttf,sha256=ZTBIAnfaYu_eBH6ybnin5TLRz67skWA-aNY4drlmnw0,130832
43
+ spacr/resources/font/open_sans/static/OpenSans-SemiBold.ttf,sha256=5gMTXMOxIAxyYLNPN_nLHyF4pCs2MDfiah4YJ2q3i_A,130760
44
+ spacr/resources/font/open_sans/static/OpenSans-SemiBoldItalic.ttf,sha256=sb8sWCggtXA9vNM5tdyXI1wUUYXQ-ruwnCJO-HIVJms,136724
45
+ spacr/resources/font/open_sans/static/OpenSans_Condensed-Bold.ttf,sha256=CIWGlNIDGR-928YD8NguGNEEwnlBYir6S4_wzKyhK2A,130372
46
+ spacr/resources/font/open_sans/static/OpenSans_Condensed-BoldItalic.ttf,sha256=dd_-wIDY3AM6l5T_JTYUo4D1H34Tmq5I2vEuvpqkrsQ,136240
47
+ spacr/resources/font/open_sans/static/OpenSans_Condensed-ExtraBold.ttf,sha256=98s7bdAITVn2b6nlI4tLuBkq1pSfmaFnPJELgyripT4,130812
48
+ spacr/resources/font/open_sans/static/OpenSans_Condensed-ExtraBoldItalic.ttf,sha256=Yh7na-RGr-rH4T_uNLv6cGefmQfyALsb1Qrf4c5xp30,136652
49
+ spacr/resources/font/open_sans/static/OpenSans_Condensed-Italic.ttf,sha256=K8gjp2YPH9NLDCpX3ZrNRv7fCser4yoUbS6JXojzkQI,136588
50
+ spacr/resources/font/open_sans/static/OpenSans_Condensed-Light.ttf,sha256=wcbhJiAM7-BGpJ82qwIMDcyEQJVnGXcTJzlFmAR4etY,130472
51
+ spacr/resources/font/open_sans/static/OpenSans_Condensed-LightItalic.ttf,sha256=4eYPQJMjKmJ_QuIVuP6hQag4mVYxg5wVJFV8h28zd_c,136760
52
+ spacr/resources/font/open_sans/static/OpenSans_Condensed-Medium.ttf,sha256=acH5RzYjKjt9ePPfhjwvdWHau9FxkgVNCCVzxUBUM6Y,130520
53
+ spacr/resources/font/open_sans/static/OpenSans_Condensed-MediumItalic.ttf,sha256=vL_D1ucljgIr9sz4FSoWkg38QLVbxMglTBX0_01o3Vo,136700
54
+ spacr/resources/font/open_sans/static/OpenSans_Condensed-Regular.ttf,sha256=9ZSB0mD3qvxsRpbdhgjMvhJxTJjmT41hQi7nWvuUl7U,130492
55
+ spacr/resources/font/open_sans/static/OpenSans_Condensed-SemiBold.ttf,sha256=F5ld4DVfj5bpv37MfcrisKrdWosy6C85CVibgmFpMhw,130524
56
+ spacr/resources/font/open_sans/static/OpenSans_Condensed-SemiBoldItalic.ttf,sha256=bDVD8CkRaVOD96JJBURtnawSs8vspPKCNsBHW9SCBk0,136792
57
+ spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-Bold.ttf,sha256=saQFKWcgcpqcyyIV744l-gMfKKdKI6eC7gA7Eg2SqIc,131168
58
+ spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-BoldItalic.ttf,sha256=wTHNHKW51uSs5WjuDM881pe51U25ezzIg4pKiQkkksE,137104
59
+ spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-ExtraBold.ttf,sha256=NWASkgz4LTrSPDAipCY41ul2Z5XDMeUleDE8C7Nt6RI,131744
60
+ spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-ExtraBoldItalic.ttf,sha256=PZSxtpkBYq79eWqnTh4KcwtaoAd_QFA6AYfdtvZI-bc,137584
61
+ spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-Italic.ttf,sha256=bHPr5WeX4zrP-VaVVHquxysTBlnRog8lfrh2z2ydf1g,137000
62
+ spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-Light.ttf,sha256=ks1IgCjNng7ksZNOSKaqBefxvwTGXrgQTySGy0nfIJY,131128
63
+ spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-LightItalic.ttf,sha256=-Xa1RlfcMxM1QYpjMNbNRv-a5ka8m5o5h-3P7gsMoRs,137220
64
+ spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-Medium.ttf,sha256=a-MrWOsGFqIGqpQXeaZyxruXqU3hMC2eHpWNa4wq8RE,130976
65
+ spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-MediumItalic.ttf,sha256=vJfOBlOVmx_MXbkgSdxHdzSSeALkd253C4Srr84Qvq8,137068
66
+ spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-Regular.ttf,sha256=skg4DCl15zL9ZD4MAL9fOt4WjonKYBUOMj46ItSAe5Q,130848
67
+ spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-SemiBold.ttf,sha256=uCiR97jg6sUHtGKVPNtJEg1zZG5Y9ArQ-raqBGjaeGg,130856
68
+ spacr/resources/font/open_sans/static/OpenSans_SemiCondensed-SemiBoldItalic.ttf,sha256=a5-0oOIrtJltQRa64uFKCdtcjzPvEJ71f_cYavG2i3E,137132
69
+ spacr/resources/icons/abort.png,sha256=avtIRT7aCJsdZ1WnY_rZStm6cCji5bYPLnlptdcTNcM,6583
70
+ spacr/resources/icons/annotate.png,sha256=GFgh7DiUMwPG_-xE6W1qU8V_qzSwBi1xKenfoaQxeFA,15495
71
+ spacr/resources/icons/cellpose_all.png,sha256=HVWOIOBF8p3-On-2UahwMyQXp7awsoC5yWExU1ahDag,20271
72
+ spacr/resources/icons/cellpose_masks.png,sha256=HVWOIOBF8p3-On-2UahwMyQXp7awsoC5yWExU1ahDag,20271
73
+ spacr/resources/icons/classify.png,sha256=-iv4sqAwUVJO3CG6fHKHf3_BB0s-I2i4prg-iR7dSBM,35897
74
+ spacr/resources/icons/default.png,sha256=KoNhaSHukO4wDyivyYEgSbb5mGj-sAxmhKikLLtNpWs,20341
75
+ spacr/resources/icons/download.png,sha256=1nUoWRaTc4vIsK6gompdeqk0cIv2GdH-gCNHaEBX6Mc,20467
76
+ spacr/resources/icons/logo.pdf,sha256=VB4cS41V3VV_QxD7l6CwdQKQiYLErugLBxWoCoxjQU0,377925
77
+ spacr/resources/icons/logo_spacr.png,sha256=qG3e3bdrAefhl1281rfo0R2XP0qA-c-oaBCXjxMGXkw,42587
78
+ spacr/resources/icons/logo_spacr_1.png,sha256=g9y2ZmnV3hab8r1idDfytm8AaHbBiQdu_93Jd7YKzwA,610892
79
+ spacr/resources/icons/make_masks.png,sha256=iB4kaTgbgyygSJSNstVKhRIXKSgWYkeh7Gt3ox-kWDI,42493
80
+ spacr/resources/icons/map_barcodes.png,sha256=ED6yCopk3hP7tICSvT8U_qA1bOOb0WHqmxVkmRxnbtE,7896
81
+ spacr/resources/icons/mask.png,sha256=DcBes-3UJ7XjRfj_P4RttRp680ZKZeH9a-DSk7bIF5U,37658
82
+ spacr/resources/icons/measure.png,sha256=Gd-dlN-3Z8D_XngJnChNme8D63KEJMFs_cBv7wT2vOY,40938
83
+ spacr/resources/icons/ml_analyze.png,sha256=Wc9a_LpG2XffiMfXxn0yUmGP40IXzlAV7bHXQf7m_2o,15754
84
+ spacr/resources/icons/recruitment.png,sha256=dlVh2ebV_f3rhRFBiL0hDtlUeBSIeg0d4vny8A8IAdo,25067
85
+ spacr/resources/icons/regression.png,sha256=WIrKY4fSojBOCDkHno4Qb-KH7jcHh6G67dOKzczaU1I,42267
86
+ spacr/resources/icons/run.png,sha256=ICzyAvsRBCXNAbdn5N3PxCxxVyqxkfC4zOI5Zc8vbxQ,8974
87
+ spacr/resources/icons/sequencing.png,sha256=P9E_Y76ZysWMKst3_hAw-_4F510XPW1l1TsDElVzt4o,17775
88
+ spacr/resources/icons/settings.png,sha256=y5Ow5BxJDDsrqom0VNbOMDGGUs6odxbSMDy6y4r_F0w,22269
89
+ spacr/resources/icons/spacr_logo_rotation.gif,sha256=bgIx1Hx41Ob90SY-q3PBa3CSxtVRnF9XX-ApUSr0wvY,1502560
90
+ spacr/resources/icons/train_cellpose.png,sha256=_PZ_R_B6azuUACmscScAkugmgLZvCPKQFGIAsszqNLk,3858
91
+ spacr/resources/icons/umap.png,sha256=dOLF3DeLYy9k0nkUybiZMe1wzHQwLJFRmgccppw-8bI,27457
92
+ spacr/resources/models/cp/toxo_plaque_cyto_e25000_X1120_Y1120.CP_model,sha256=z8BbHWZPRnE9D_BHO0fBREE85c1vkltDs-incs2ytXQ,26566572
93
+ spacr/resources/models/cp/toxo_plaque_cyto_e25000_X1120_Y1120.CP_model_settings.csv,sha256=fBAGuL_B8ERVdVizO3BHozTDSbZUh1yFzsYK3wkQN68,420
94
+ spacr/resources/models/cp/toxo_pv_lumen.CP_model,sha256=2y_CindYhmTvVwBH39SNILF3rI3x9SsRn6qrMxHy3l0,26562451
95
+ spacr-0.2.5.dist-info/LICENSE,sha256=SR-2MeGc6SCM1UORJYyarSWY_A-JaOMFDj7ReSs9tRM,1083
96
+ spacr-0.2.5.dist-info/METADATA,sha256=fiV7Ivmrb4xlR-6ACV2hT5in8bRgPkiqZrB3K4TP-Ds,5194
97
+ spacr-0.2.5.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
98
+ spacr-0.2.5.dist-info/entry_points.txt,sha256=BMC0ql9aNNpv8lUZ8sgDLQMsqaVnX5L535gEhKUP5ho,296
99
+ spacr-0.2.5.dist-info/top_level.txt,sha256=GJPU8FgwRXGzKeut6JopsSRY2R8T3i9lDgya42tLInY,6
100
+ spacr-0.2.5.dist-info/RECORD,,
@@ -1,58 +0,0 @@
1
- spacr/__init__.py,sha256=pJ7Mm7Kb1DhHIdLmNgMILFVWJ9QAG47pT0M6wtiXl8E,1465
2
- spacr/__main__.py,sha256=bkAJJD2kjIqOP-u1kLvct9jQQCeUXzlEjdgitwi1Lm8,75
3
- spacr/app_annotate.py,sha256=nEIL7Fle9CDKGo3sucG_03DgjUQt5W1M1IHBIpVBr08,2171
4
- spacr/app_classify.py,sha256=urTP_wlZ58hSyM5a19slYlBxN0PdC-9-ga0hvq8CGWc,165
5
- spacr/app_make_masks.py,sha256=pqDhRpluiHZz-kPX2Zh_KbYe4TsU43qYBa_7f-rsjpw,1694
6
- spacr/app_mask.py,sha256=l-dBY8ftzCMdDe6-pXc2Nh_u-idNL9G7UOARiLJBtds,153
7
- spacr/app_measure.py,sha256=_K7APYIeOKpV6e_LcqabBjvEi7mfq9Fch8175x1x0k8,162
8
- spacr/app_sequencing.py,sha256=DjG26jy4cpddnV8WOOAIiExtOe9MleVMY4MFa5uTo5w,157
9
- spacr/app_umap.py,sha256=ZWAmf_OsIKbYvolYuWPMYhdlVe-n2CADoJulAizMiEo,153
10
- spacr/chris.py,sha256=YlBjSgeZaY8HPy6jkrT_ISAnCMAKVfvCxF0I9eAZLFM,2418
11
- spacr/core.py,sha256=iAH6de2dW0nKVtVeBjdWOhSW_KoHlVDVOoOsHb6vGC0,148884
12
- spacr/deep_spacr.py,sha256=ASBsN4JpHp_3S-91JUsB34IWTjTGPYI7jKV2qZnUR5M,37005
13
- spacr/graph_learning.py,sha256=1tR-ZxvXE3dBz1Saw7BeVFcrsUFu9OlUZeZVifih9eo,13070
14
- spacr/gui.py,sha256=bA1Qy6D9aeL_Qe0Xeql8bRkbbFajAMGTZZR3uBzIW1Q,8495
15
- spacr/gui_core.py,sha256=4II8TscaDHDvRXc4D-azQyAeVGNkqyN6_HaNhkjij4s,35546
16
- spacr/gui_elements.py,sha256=Qo22e4t3Mut_hsHqBGlpyS4ZRThLhu0l_DurBXBgzW8,96354
17
- spacr/gui_utils.py,sha256=ySSDDYmY80h_Wk2Nb1oxbugRU2TWt6N7BwusUl_-wRo,14970
18
- spacr/io.py,sha256=Dehuqn_oGo0gcyezQIw9rUUvO7oOHDWuMkPDSCgyrp8,115521
19
- spacr/logger.py,sha256=7Zqr3TuuOQLWT32gYr2q1qvv7x0a2JhLANmZcnBXAW8,670
20
- spacr/measure.py,sha256=W5_yuLnsFSafuZNcKzVsCTJSTfpbNgrGTuxG1OVb0iU,55283
21
- spacr/plot.py,sha256=DYJEoK1kz2ih6ZGvKiA3xTqeIeKQNhuQKwgrscopFxA,69101
22
- spacr/sequencing.py,sha256=fHZRnoMSxmhMdadkei3lUeBdckqFyptWdQyWsDW3aaU,83304
23
- spacr/settings.py,sha256=deX0pNwTqyHojpCTiF060RSK5oPeSEcS_s6UlVc0x3Q,65442
24
- spacr/sim.py,sha256=FveaVgBi3eypO2oVB5Dx-v0CC1Ny7UPfXkJiiRRodAk,71212
25
- spacr/sim_app.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
- spacr/timelapse.py,sha256=KMYCgHzf9LTZe-lWl5mvH2EjbKRE6OhpwdY13wEumGc,39504
27
- spacr/utils.py,sha256=r23Cd94HT3q1kMIbyEmyvJVnnDOY16plvUXVwxuX1PE,189256
28
- spacr/version.py,sha256=axH5tnGwtgSnJHb5IDhiu4Zjk5GhLyAEDRe-rnaoFOA,409
29
- spacr/resources/icons/abort.png,sha256=avtIRT7aCJsdZ1WnY_rZStm6cCji5bYPLnlptdcTNcM,6583
30
- spacr/resources/icons/annotate.png,sha256=GFgh7DiUMwPG_-xE6W1qU8V_qzSwBi1xKenfoaQxeFA,15495
31
- spacr/resources/icons/cellpose_all.png,sha256=HVWOIOBF8p3-On-2UahwMyQXp7awsoC5yWExU1ahDag,20271
32
- spacr/resources/icons/cellpose_masks.png,sha256=HVWOIOBF8p3-On-2UahwMyQXp7awsoC5yWExU1ahDag,20271
33
- spacr/resources/icons/classify.png,sha256=-iv4sqAwUVJO3CG6fHKHf3_BB0s-I2i4prg-iR7dSBM,35897
34
- spacr/resources/icons/default.png,sha256=KoNhaSHukO4wDyivyYEgSbb5mGj-sAxmhKikLLtNpWs,20341
35
- spacr/resources/icons/download.png,sha256=1nUoWRaTc4vIsK6gompdeqk0cIv2GdH-gCNHaEBX6Mc,20467
36
- spacr/resources/icons/logo_spacr.png,sha256=g9y2ZmnV3hab8r1idDfytm8AaHbBiQdu_93Jd7YKzwA,610892
37
- spacr/resources/icons/make_masks.png,sha256=iB4kaTgbgyygSJSNstVKhRIXKSgWYkeh7Gt3ox-kWDI,42493
38
- spacr/resources/icons/map_barcodes.png,sha256=ED6yCopk3hP7tICSvT8U_qA1bOOb0WHqmxVkmRxnbtE,7896
39
- spacr/resources/icons/mask.png,sha256=DcBes-3UJ7XjRfj_P4RttRp680ZKZeH9a-DSk7bIF5U,37658
40
- spacr/resources/icons/measure.png,sha256=Gd-dlN-3Z8D_XngJnChNme8D63KEJMFs_cBv7wT2vOY,40938
41
- spacr/resources/icons/ml_analyze.png,sha256=Wc9a_LpG2XffiMfXxn0yUmGP40IXzlAV7bHXQf7m_2o,15754
42
- spacr/resources/icons/recruitment.png,sha256=dlVh2ebV_f3rhRFBiL0hDtlUeBSIeg0d4vny8A8IAdo,25067
43
- spacr/resources/icons/regression.png,sha256=WIrKY4fSojBOCDkHno4Qb-KH7jcHh6G67dOKzczaU1I,42267
44
- spacr/resources/icons/run.png,sha256=ICzyAvsRBCXNAbdn5N3PxCxxVyqxkfC4zOI5Zc8vbxQ,8974
45
- spacr/resources/icons/sequencing.png,sha256=P9E_Y76ZysWMKst3_hAw-_4F510XPW1l1TsDElVzt4o,17775
46
- spacr/resources/icons/settings.png,sha256=y5Ow5BxJDDsrqom0VNbOMDGGUs6odxbSMDy6y4r_F0w,22269
47
- spacr/resources/icons/spacr_logo_rotation.gif,sha256=bgIx1Hx41Ob90SY-q3PBa3CSxtVRnF9XX-ApUSr0wvY,1502560
48
- spacr/resources/icons/train_cellpose.png,sha256=_PZ_R_B6azuUACmscScAkugmgLZvCPKQFGIAsszqNLk,3858
49
- spacr/resources/icons/umap.png,sha256=dOLF3DeLYy9k0nkUybiZMe1wzHQwLJFRmgccppw-8bI,27457
50
- spacr/resources/models/cp/toxo_plaque_cyto_e25000_X1120_Y1120.CP_model,sha256=z8BbHWZPRnE9D_BHO0fBREE85c1vkltDs-incs2ytXQ,26566572
51
- spacr/resources/models/cp/toxo_plaque_cyto_e25000_X1120_Y1120.CP_model_settings.csv,sha256=fBAGuL_B8ERVdVizO3BHozTDSbZUh1yFzsYK3wkQN68,420
52
- spacr/resources/models/cp/toxo_pv_lumen.CP_model,sha256=2y_CindYhmTvVwBH39SNILF3rI3x9SsRn6qrMxHy3l0,26562451
53
- spacr-0.2.4.dist-info/LICENSE,sha256=SR-2MeGc6SCM1UORJYyarSWY_A-JaOMFDj7ReSs9tRM,1083
54
- spacr-0.2.4.dist-info/METADATA,sha256=CK0hbhbcv2TXBF8zRgO8fQRLnWDiEWPn5xmkjtfMSIQ,5049
55
- spacr-0.2.4.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
56
- spacr-0.2.4.dist-info/entry_points.txt,sha256=BMC0ql9aNNpv8lUZ8sgDLQMsqaVnX5L535gEhKUP5ho,296
57
- spacr-0.2.4.dist-info/top_level.txt,sha256=GJPU8FgwRXGzKeut6JopsSRY2R8T3i9lDgya42tLInY,6
58
- spacr-0.2.4.dist-info/RECORD,,
File without changes
File without changes