senoquant 1.0.0b2__py3-none-any.whl → 1.0.0b4__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 (57) hide show
  1. senoquant/__init__.py +6 -2
  2. senoquant/_reader.py +1 -1
  3. senoquant/_widget.py +9 -1
  4. senoquant/reader/core.py +201 -18
  5. senoquant/tabs/__init__.py +2 -0
  6. senoquant/tabs/batch/backend.py +76 -27
  7. senoquant/tabs/batch/frontend.py +127 -25
  8. senoquant/tabs/quantification/features/marker/dialog.py +26 -6
  9. senoquant/tabs/quantification/features/marker/export.py +97 -24
  10. senoquant/tabs/quantification/features/marker/rows.py +2 -2
  11. senoquant/tabs/quantification/features/spots/dialog.py +41 -11
  12. senoquant/tabs/quantification/features/spots/export.py +163 -10
  13. senoquant/tabs/quantification/frontend.py +2 -2
  14. senoquant/tabs/segmentation/frontend.py +46 -9
  15. senoquant/tabs/segmentation/models/cpsam/model.py +1 -1
  16. senoquant/tabs/segmentation/models/default_2d/model.py +22 -77
  17. senoquant/tabs/segmentation/models/default_3d/model.py +8 -74
  18. senoquant/tabs/segmentation/stardist_onnx_utils/_csbdeep/tools/create_zip_contents.py +0 -0
  19. senoquant/tabs/segmentation/stardist_onnx_utils/onnx_framework/inspect/probe.py +13 -13
  20. senoquant/tabs/segmentation/stardist_onnx_utils/onnx_framework/stardist_libs.py +171 -0
  21. senoquant/tabs/spots/frontend.py +96 -5
  22. senoquant/tabs/spots/models/rmp/details.json +3 -9
  23. senoquant/tabs/spots/models/rmp/model.py +341 -266
  24. senoquant/tabs/spots/models/ufish/details.json +32 -0
  25. senoquant/tabs/spots/models/ufish/model.py +327 -0
  26. senoquant/tabs/spots/ufish_utils/__init__.py +13 -0
  27. senoquant/tabs/spots/ufish_utils/core.py +387 -0
  28. senoquant/tabs/visualization/__init__.py +1 -0
  29. senoquant/tabs/visualization/backend.py +306 -0
  30. senoquant/tabs/visualization/frontend.py +1113 -0
  31. senoquant/tabs/visualization/plots/__init__.py +80 -0
  32. senoquant/tabs/visualization/plots/base.py +152 -0
  33. senoquant/tabs/visualization/plots/double_expression.py +187 -0
  34. senoquant/tabs/visualization/plots/spatialplot.py +156 -0
  35. senoquant/tabs/visualization/plots/umap.py +140 -0
  36. senoquant/utils.py +1 -1
  37. senoquant-1.0.0b4.dist-info/METADATA +162 -0
  38. {senoquant-1.0.0b2.dist-info → senoquant-1.0.0b4.dist-info}/RECORD +53 -30
  39. {senoquant-1.0.0b2.dist-info → senoquant-1.0.0b4.dist-info}/top_level.txt +1 -0
  40. ufish/__init__.py +1 -0
  41. ufish/api.py +778 -0
  42. ufish/model/__init__.py +0 -0
  43. ufish/model/loss.py +62 -0
  44. ufish/model/network/__init__.py +0 -0
  45. ufish/model/network/spot_learn.py +50 -0
  46. ufish/model/network/ufish_net.py +204 -0
  47. ufish/model/train.py +175 -0
  48. ufish/utils/__init__.py +0 -0
  49. ufish/utils/img.py +418 -0
  50. ufish/utils/log.py +8 -0
  51. ufish/utils/spot_calling.py +115 -0
  52. senoquant/tabs/spots/models/udwt/details.json +0 -103
  53. senoquant/tabs/spots/models/udwt/model.py +0 -482
  54. senoquant-1.0.0b2.dist-info/METADATA +0 -193
  55. {senoquant-1.0.0b2.dist-info → senoquant-1.0.0b4.dist-info}/WHEEL +0 -0
  56. {senoquant-1.0.0b2.dist-info → senoquant-1.0.0b4.dist-info}/entry_points.txt +0 -0
  57. {senoquant-1.0.0b2.dist-info → senoquant-1.0.0b4.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,140 @@
1
+ """UMAP plot handler for visualization."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from pathlib import Path
6
+ from typing import Iterable
7
+
8
+ from .base import PlotData, SenoQuantPlot
9
+
10
+
11
+ class UMAPData(PlotData):
12
+ """Configuration data for UMAP plot."""
13
+
14
+ pass
15
+
16
+
17
+ class UMAPPlot(SenoQuantPlot):
18
+ """UMAP dimensionality reduction plot handler."""
19
+
20
+ feature_type = "UMAP"
21
+ order = 1
22
+
23
+ def build(self) -> None:
24
+ """Build the UI for UMAP plot configuration."""
25
+ # Minimal UI for now; can add controls for n_components, metric, etc. later
26
+ pass
27
+
28
+ def plot(
29
+ self,
30
+ temp_dir: Path,
31
+ input_path: Path,
32
+ export_format: str,
33
+ markers: list[str] | None = None,
34
+ thresholds: dict[str, float] | None = None,
35
+ ) -> Iterable[Path]:
36
+ """Generate UMAP plot from input CSV.
37
+
38
+ Parameters
39
+ ----------
40
+ temp_dir : Path
41
+ Temporary directory to write plot output.
42
+ input_path : Path
43
+ Path to input CSV file or folder containing CSV files.
44
+ export_format : str
45
+ Output format ("png", "svg", or "pdf").
46
+ markers : list of str, optional
47
+ List of selected markers to include.
48
+ thresholds : dict, optional
49
+ Dictionary of {marker_name: threshold_value} for filtering.
50
+
51
+ Returns
52
+ -------
53
+ iterable of Path
54
+ Paths to generated plot files.
55
+ """
56
+ try:
57
+ try:
58
+ import pandas as pd
59
+ except ImportError:
60
+ print("[UMAPPlot] pandas is not installed; skipping plot generation.")
61
+ return []
62
+ try:
63
+ import matplotlib.pyplot as plt
64
+ except ImportError:
65
+ print("[UMAPPlot] matplotlib is not installed; skipping plot generation.")
66
+ return []
67
+ try:
68
+ from umap import UMAP as UMAPReducer
69
+ except ImportError:
70
+ print("[UMAPPlot] umap-learn is not installed; skipping plot generation.")
71
+ return []
72
+
73
+ print(f"[UMAPPlot] Starting with input_path={input_path}")
74
+ # Find the first data file (CSV or Excel) in the input folder
75
+ data_files = list(input_path.glob("*.csv")) + list(input_path.glob("*.xlsx")) + list(input_path.glob("*.xls"))
76
+ print(f"[UMAPPlot] Found {len(data_files)} data files")
77
+ if not data_files:
78
+ print(f"[UMAPPlot] No CSV/Excel files found in {input_path}")
79
+ return []
80
+
81
+ data_file = data_files[0]
82
+ print(f"[UMAPPlot] Reading {data_file}")
83
+ if data_file.suffix.lower() in ('.xlsx', '.xls'):
84
+ df = pd.read_excel(data_file)
85
+ else:
86
+ df = pd.read_csv(data_file)
87
+ print(f"[UMAPPlot] Loaded dataframe with shape {df.shape}")
88
+ if df.empty:
89
+ print(f"[UMAPPlot] DataFrame is empty")
90
+ return []
91
+
92
+ # Apply thresholds if provided
93
+ if thresholds:
94
+ for marker, thresh in thresholds.items():
95
+ col_name = f"{marker}_mean_intensity"
96
+ if col_name in df.columns:
97
+ # Clip values below threshold to 0
98
+ df.loc[df[col_name] < thresh, col_name] = 0
99
+
100
+ # Select numeric columns for UMAP
101
+ if markers:
102
+ numeric_cols = [f"{m}_mean_intensity" for m in markers if f"{m}_mean_intensity" in df.columns]
103
+ print(f"[UMAPPlot] Using {len(numeric_cols)} selected markers for UMAP")
104
+ else:
105
+ numeric_cols = df.select_dtypes(include=["number"]).columns
106
+ print(f"[UMAPPlot] Found {len(numeric_cols)} numeric columns (default)")
107
+
108
+ if len(numeric_cols) < 2:
109
+ print(f"[UMAPPlot] Need at least 2 numeric columns for UMAP, found {len(numeric_cols)}")
110
+ return []
111
+
112
+ X = df[numeric_cols].values
113
+
114
+ # Fit UMAP
115
+ print(f"[UMAPPlot] Fitting UMAP with {len(X)} samples")
116
+ reducer = UMAPReducer(n_components=2, random_state=42)
117
+ embedding = reducer.fit_transform(X)
118
+ print(f"[UMAPPlot] UMAP embedding created with shape {embedding.shape}")
119
+
120
+ # Create plot
121
+ fig, ax = plt.subplots(figsize=(8, 6))
122
+ ax.scatter(embedding[:, 0], embedding[:, 1], alpha=0.6, s=20)
123
+ ax.set_xlabel("UMAP 1")
124
+ ax.set_ylabel("UMAP 2")
125
+ ax.set_title("UMAP Plot")
126
+
127
+ # Save plot
128
+ output_file = temp_dir / f"umap_plot.{export_format}"
129
+ print(f"[UMAPPlot] Saving to {output_file}")
130
+ fig.savefig(str(output_file), dpi=150, bbox_inches="tight")
131
+ plt.close(fig)
132
+ print(f"[UMAPPlot] Plot saved successfully")
133
+
134
+ return [output_file]
135
+
136
+ except Exception as e:
137
+ import traceback
138
+ print(f"[UMAPPlot] ERROR generating UMAP plot: {e}")
139
+ print(traceback.format_exc())
140
+ return []
senoquant/utils.py CHANGED
@@ -11,7 +11,7 @@ def layer_data_asarray(layer, *, squeeze: bool = True) -> np.ndarray:
11
11
  Parameters
12
12
  ----------
13
13
  layer : object
14
- Napari layer instance providing a ``data`` attribute.
14
+ napari layer instance providing a ``data`` attribute.
15
15
  squeeze : bool, optional
16
16
  Whether to remove singleton dimensions.
17
17
 
@@ -0,0 +1,162 @@
1
+ Metadata-Version: 2.4
2
+ Name: senoquant
3
+ Version: 1.0.0b4
4
+ Summary: napari plugin for spatial quantification of senescence markers in tissue imaging
5
+ Author: SenoQuant Contributors
6
+ Maintainer: SenoQuant Contributors
7
+ License: BSD-3-Clause
8
+ Project-URL: Homepage, https://github.com/HaamsRee/senoquant
9
+ Project-URL: Documentation, https://haamsree.github.io/senoquant/
10
+ Project-URL: Repository, https://github.com/HaamsRee/senoquant
11
+ Project-URL: Bug Tracker, https://github.com/HaamsRee/senoquant/issues
12
+ Keywords: napari,plugin,senescence,quantification,microscopy,image analysis,segmentation,spot detection
13
+ Classifier: Development Status :: 4 - Beta
14
+ Classifier: Framework :: napari
15
+ Classifier: Intended Audience :: Science/Research
16
+ Classifier: License :: OSI Approved :: BSD License
17
+ Classifier: Operating System :: OS Independent
18
+ Classifier: Programming Language :: Python :: 3
19
+ Classifier: Programming Language :: Python :: 3.11
20
+ Classifier: Programming Language :: Python :: 3.12
21
+ Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
22
+ Classifier: Topic :: Scientific/Engineering :: Image Processing
23
+ Requires-Python: >=3.11
24
+ Description-Content-Type: text/markdown
25
+ License-File: LICENSE
26
+ Requires-Dist: bioio>=3.2.0
27
+ Requires-Dist: bioio-czi>=2.4.2
28
+ Requires-Dist: bioio-dv>=1.2.0
29
+ Requires-Dist: bioio-imageio>=1.3.0
30
+ Requires-Dist: bioio-lif>=1.4.0
31
+ Requires-Dist: bioio-nd2>=1.6.0
32
+ Requires-Dist: bioio-ome-tiff>=1.4.0
33
+ Requires-Dist: bioio-ome-zarr>=3.2.1
34
+ Requires-Dist: bioio-sldy>=1.4.0
35
+ Requires-Dist: bioio-tifffile>=1.3.0
36
+ Requires-Dist: bioio-tiff-glob>=1.2.0
37
+ Requires-Dist: numpy<=1.26.4,>=1.23
38
+ Requires-Dist: pandas>=2.0
39
+ Requires-Dist: cellpose==4.0.8
40
+ Requires-Dist: onnx>=1.16
41
+ Requires-Dist: onnxruntime>=1.21.0; platform_system == "Darwin"
42
+ Requires-Dist: onnxruntime-gpu>=1.21.0; platform_system != "Darwin"
43
+ Requires-Dist: openpyxl>=3.1
44
+ Requires-Dist: huggingface_hub>=0.23.0
45
+ Requires-Dist: scikit-image<0.25,>=0.22
46
+ Requires-Dist: PyWavelets>=1.5
47
+ Requires-Dist: scipy>=1.8
48
+ Requires-Dist: senoquant-stardist-ext>=0.1.1
49
+ Requires-Dist: dask[array]>=2024.4
50
+ Requires-Dist: dask[distributed]>=2024.4
51
+ Requires-Dist: matplotlib>=3.8
52
+ Requires-Dist: umap-learn>=0.5
53
+ Provides-Extra: all
54
+ Requires-Dist: napari[all]; extra == "all"
55
+ Requires-Dist: bioio>=3.2.0; extra == "all"
56
+ Requires-Dist: bioio-czi>=2.4.2; extra == "all"
57
+ Requires-Dist: bioio-dv>=1.2.0; extra == "all"
58
+ Requires-Dist: bioio-imageio>=1.3.0; extra == "all"
59
+ Requires-Dist: bioio-lif>=1.4.0; extra == "all"
60
+ Requires-Dist: bioio-nd2>=1.6.0; extra == "all"
61
+ Requires-Dist: bioio-ome-tiff>=1.4.0; extra == "all"
62
+ Requires-Dist: bioio-ome-zarr>=3.2.1; extra == "all"
63
+ Requires-Dist: bioio-sldy>=1.4.0; extra == "all"
64
+ Requires-Dist: bioio-tifffile>=1.3.0; extra == "all"
65
+ Requires-Dist: bioio-tiff-glob>=1.2.0; extra == "all"
66
+ Requires-Dist: numpy<=1.26.4,>=1.23; extra == "all"
67
+ Requires-Dist: pandas>=2.0; extra == "all"
68
+ Requires-Dist: cellpose==4.0.8; extra == "all"
69
+ Requires-Dist: onnx>=1.16; extra == "all"
70
+ Requires-Dist: onnxruntime>=1.21.0; platform_system == "Darwin" and extra == "all"
71
+ Requires-Dist: onnxruntime-gpu>=1.21.0; platform_system != "Darwin" and extra == "all"
72
+ Requires-Dist: openpyxl>=3.1; extra == "all"
73
+ Requires-Dist: huggingface_hub>=0.23.0; extra == "all"
74
+ Requires-Dist: scikit-image<0.25,>=0.22; extra == "all"
75
+ Requires-Dist: PyWavelets>=1.5; extra == "all"
76
+ Requires-Dist: scipy>=1.8; extra == "all"
77
+ Requires-Dist: senoquant-stardist-ext>=0.1.1; extra == "all"
78
+ Requires-Dist: dask[array]>=2024.4; extra == "all"
79
+ Requires-Dist: dask[distributed]>=2024.4; extra == "all"
80
+ Requires-Dist: matplotlib>=3.8; extra == "all"
81
+ Requires-Dist: umap-learn>=0.5; extra == "all"
82
+ Dynamic: license-file
83
+
84
+ # SenoQuant
85
+
86
+ ![tests](https://github.com/HaamsRee/senoquant/actions/workflows/tests.yml/badge.svg)
87
+ [![PyPI version](https://badge.fury.io/py/senoquant.svg)](https://badge.fury.io/py/senoquant)
88
+ [![Python 3.11+](https://img.shields.io/badge/python-3.11+-blue.svg)](https://www.python.org/downloads/)
89
+ [![License](https://img.shields.io/badge/License-BSD_3--Clause-blue.svg)](https://opensource.org/licenses/BSD-3-Clause)
90
+
91
+ SenoQuant is a versatile [napari](https://napari.org/stable/index.html) plugin designed for comprehensive, accurate,
92
+ and unbiased spatial quantification and prediction of senescence markers
93
+ across diverse tissue contexts.
94
+
95
+ ## Features
96
+
97
+ - Segment nuclei and cytoplasm with built-in models, including StarDist ONNX, Cellpose SAM, and morphology-based models.
98
+ - Detect punctate spots with a U-FISH-based detector.
99
+ - Quantify marker intensity, morphology, spot counts, and spot colocalization.
100
+ - Run batch workflows across folders, including profile save/load and multi-scene support.
101
+ - Read microscopy formats via BioIO, including OME-TIFF, ND2, LIF, CZI, Zarr, and more.
102
+ - *Upcoming*: Integrate custom models for predicting senescence markers.
103
+
104
+ ## Installation
105
+
106
+ ### Installer (recommended)
107
+
108
+ #### Windows
109
+
110
+ Download the Windows installer (`.exe`) from the [latest release](https://github.com/HaamsRee/senoquant/releases/latest).
111
+
112
+ #### macOS
113
+
114
+ Download the macOS installer (`.pkg`) from the [latest release](https://github.com/HaamsRee/senoquant/releases/latest).
115
+
116
+ #### Linux
117
+
118
+ Installer support for Linux is under construction.
119
+
120
+ ### Manual installation
121
+
122
+ For conda/pip/uv setup, see the [developer installation guide](https://haamsree.github.io/senoquant/developer/installation/).
123
+
124
+ ## Quick start
125
+
126
+ Use the documentation workflow for the most up-to-date instructions.
127
+
128
+ - Start with the [installation guide](https://haamsree.github.io/senoquant/user/installation/).
129
+ - Follow the [quick start guide](https://haamsree.github.io/senoquant/user/quickstart/).
130
+ - Then use tab-specific guides for [segmentation](https://haamsree.github.io/senoquant/user/segmentation/), [spots](https://haamsree.github.io/senoquant/user/spots/), [quantification](https://haamsree.github.io/senoquant/user/quantification/), and [batch](https://haamsree.github.io/senoquant/user/batch/).
131
+
132
+ ## Documentation
133
+
134
+ Full documentation is available at [https://haamsree.github.io/senoquant/](https://haamsree.github.io/senoquant/).
135
+
136
+ - [Installation guide](https://haamsree.github.io/senoquant/user/installation/).
137
+ - [Quick start tutorial](https://haamsree.github.io/senoquant/user/quickstart/).
138
+ - [Segmentation models](https://haamsree.github.io/senoquant/user/segmentation/).
139
+ - [Spot detection](https://haamsree.github.io/senoquant/user/spots/).
140
+ - [Quantification features](https://haamsree.github.io/senoquant/user/quantification/).
141
+ - [Batch processing](https://haamsree.github.io/senoquant/user/batch/).
142
+ - [API reference](https://haamsree.github.io/senoquant/api/).
143
+
144
+ ## Development
145
+
146
+ See the [contributing guide](https://haamsree.github.io/senoquant/developer/contributing/) for development setup instructions.
147
+
148
+ ## How to cite
149
+
150
+ If you use SenoQuant in your research, please cite it using the metadata in `CITATION.cff`.
151
+
152
+ On GitHub, open the repository page and click `Cite this repository` in the right sidebar to copy a formatted citation.
153
+
154
+ ## Acknowledgements
155
+
156
+ SenoQuant builds on and integrates excellent open-source projects.
157
+
158
+ - [napari](https://napari.org/).
159
+ - [StarDist](https://github.com/stardist/stardist).
160
+ - [Cellpose](https://github.com/MouseLand/cellpose).
161
+ - [U-FISH](https://github.com/UFISH-Team/U-FISH).
162
+ - [BioIO](https://github.com/bioio-devs/bioio).
@@ -1,50 +1,50 @@
1
- senoquant/__init__.py,sha256=wuZx1cvZLPaNnraFygnXsvfwrIQaNk65ke-N2HZpQ40,132
2
- senoquant/_reader.py,sha256=4klOi8rQ77pK-DdyE17cTTwv7_DYxMecQc0KMYwwQWc,154
3
- senoquant/_widget.py,sha256=nuNaKvWAx7aKXORAipOUf7sUI5I3DvZazXnwrJcBqcw,1102
1
+ senoquant/__init__.py,sha256=UbZDFUGVkGaxQFqjwIfVZt0x2mckTYJpbFUXQBGg5FA,269
2
+ senoquant/_reader.py,sha256=HVGhwQTuuDbvNM9tEkUpE6js_Lzh7vTHXdYfDCqvvXk,154
3
+ senoquant/_widget.py,sha256=83J186GFmImr_lY3wo3bZKouW_AHR_xannIlJZwtv1M,1233
4
4
  senoquant/napari.yaml,sha256=2r1EpZcV1B3mLv0z3FwjS8e1T-yIMzoWvNj2SBqmftI,1664
5
- senoquant/utils.py,sha256=JAE1S_UUkrcNrEg2JKDB33VPqt4UWOFtH45hY5uPrbo,641
5
+ senoquant/utils.py,sha256=XpvJjaoN_9DMD-cxURCStFccBYNccttdJtGnFO6PD2E,641
6
6
  senoquant/reader/__init__.py,sha256=3lDuOpQC8TGUdfXdpLrr7MaszOVCqKMYM9YaTdq3DVQ,92
7
- senoquant/reader/core.py,sha256=C1BycDll6dgalqd6ikF28-KiI3gI2e0fonR60SZdpx8,10226
8
- senoquant/tabs/__init__.py,sha256=DnIT3E7XRSw2CmlZ-Ma4aYpoUFSFjF-66kMDNPaZEmU,371
7
+ senoquant/reader/core.py,sha256=GGEU_FVFohhWR0KkbuTl50wdS04WzroBBC67gbwfLtA,15809
8
+ senoquant/tabs/__init__.py,sha256=YvagQQzYgZNMsquHD8gvNwJJv6TfdKoycWORSLOjrLk,448
9
9
  senoquant/tabs/batch/__init__.py,sha256=0-xDYyAEEch9Yq7OhGeTkgoXus52Y_SQjqvtIbI-I20,291
10
- senoquant/tabs/batch/backend.py,sha256=rFjpObFsnF4rpYxrcrctE7UGy9qSah_V1v1AlyL4KSw,24166
10
+ senoquant/tabs/batch/backend.py,sha256=0npTLVEHP_ZWrAhCy3vyQiH59j7lwD1KoYLqBZABhwo,26683
11
11
  senoquant/tabs/batch/config.py,sha256=w6DR0Nw6BL0hrFacQPIAHb-wCirYnogYJgmAPy2j9zo,8639
12
- senoquant/tabs/batch/frontend.py,sha256=dFubaU1uvqRCKMAyx2owyTPERjkiRIrfXBkdZvujgUw,51811
12
+ senoquant/tabs/batch/frontend.py,sha256=4nT8_4YrTKIHPL0IfV-RQVMVG8U5FBGZWHFkQ71Dgec,56289
13
13
  senoquant/tabs/batch/io.py,sha256=mggktbDDsGr4hQvpu4oj1eJcxG-xiPwfquO7QBesdDk,8382
14
14
  senoquant/tabs/batch/layers.py,sha256=JjWS6WVZ3YOd-KZ4AjqstRF0qTPwOxOgGHd5FXrer08,2078
15
15
  senoquant/tabs/quantification/__init__.py,sha256=iCqW7cg9QFfUdnYF7JSwOEus_tm66IZXdxSShy7RxwA,34
16
16
  senoquant/tabs/quantification/backend.py,sha256=uEHV-JNEXddj5jptKDSrz6Lnt3MIYTzmBu0aV0vjLDY,7337
17
- senoquant/tabs/quantification/frontend.py,sha256=HKMlkzUf5b8_N9OA5Ki6J5hW02JouBgr4IGtI6AUulQ,29068
17
+ senoquant/tabs/quantification/frontend.py,sha256=veDnWxwyVkXt60fdq85Nrv8XZJTowNxX5mpxaMO8qQA,29068
18
18
  senoquant/tabs/quantification/features/__init__.py,sha256=XR8nPIAGuVpDT8bqWH0qaI-GeZGp9JOKUD7F77dOd7s,2076
19
19
  senoquant/tabs/quantification/features/base.py,sha256=OIH_qwKYyKbTwXGhjQzgwNzoabMURActvmA-gUEoU_8,4018
20
20
  senoquant/tabs/quantification/features/roi.py,sha256=wLvFJJ1a2W5x4BOUDrLvou_rje1KmDzUp5nwQvzooTU,11397
21
21
  senoquant/tabs/quantification/features/marker/__init__.py,sha256=8twYCiUtoau-6rfcLCVndyKkaG1i9v9fGo6IfQ_Eyuo,98
22
22
  senoquant/tabs/quantification/features/marker/config.py,sha256=H0n4xY8ZFSVDIKmsDnQZr_nW0zPpL4PLyKMCtYOrprE,1793
23
- senoquant/tabs/quantification/features/marker/dialog.py,sha256=pnQVzt2RGSjAQ6oqswr2WY7sMk0skMSsLOj55hXFBw0,14886
24
- senoquant/tabs/quantification/features/marker/export.py,sha256=Tbk-TvK2cLCg-x8YH4F2jNXEXW2jOJ8-4-PqvZGJGXA,27210
23
+ senoquant/tabs/quantification/features/marker/dialog.py,sha256=89q5OjHAPG8wjoPKtdNLuFYRDAzLR1ysGJrxhcAJ7wU,15616
24
+ senoquant/tabs/quantification/features/marker/export.py,sha256=SNChfDTyr3rTwLmEs2sfYkLZ_EbdqTofKgbZeUyhJbI,29874
25
25
  senoquant/tabs/quantification/features/marker/feature.py,sha256=cWZqUm_KTR-vdQpVXK5FiHKCdMlSkJJ8IJjV3bhLUpM,3917
26
26
  senoquant/tabs/quantification/features/marker/morphology.py,sha256=eIwhZgTIoPXtJOUHLR9GJ4okaSCVBoJ3NFSzTQycZiI,8676
27
- senoquant/tabs/quantification/features/marker/rows.py,sha256=Uycekb1O5g7YXggUusgsL6rhJNJhT7IjEZUbKM6LcWI,23528
27
+ senoquant/tabs/quantification/features/marker/rows.py,sha256=PyvXVRodq3DjPuRj1o4IlqMzZh-N8bRT8Dy_fXiWjJQ,23528
28
28
  senoquant/tabs/quantification/features/marker/thresholding.py,sha256=jwyc_G774NgmWXElI29Z8j4cX0A8CPqs4PtsobCHCxc,1213
29
29
  senoquant/tabs/quantification/features/spots/__init__.py,sha256=XpfiHRHNCmCeaBWuTZsyy_qybswkYYVS_Y4oY885xe0,95
30
30
  senoquant/tabs/quantification/features/spots/config.py,sha256=wLSnDvYFWZRN7_D2ih4aCugSlTtNaC5CW3NzGKYoyCM,1616
31
- senoquant/tabs/quantification/features/spots/dialog.py,sha256=Ho5cgolzY9YPba4LdaAeE4IeJaMEV4TAUvPc0Gn68m0,15965
32
- senoquant/tabs/quantification/features/spots/export.py,sha256=e67oHcWg6v2wYUoFOGUROLVPSZictLVlEVAB6SbEiYA,42127
31
+ senoquant/tabs/quantification/features/spots/dialog.py,sha256=SzVR2je0HwrluK3KPOjoy-YBN4t6cevIvdFC8rJpfIg,17025
32
+ senoquant/tabs/quantification/features/spots/export.py,sha256=6f4BJEpTZYfDZlWH8aYhTdOzBYolb3KLc8YF-fj5R6Y,47525
33
33
  senoquant/tabs/quantification/features/spots/feature.py,sha256=8Zk-SbJDA-Ge9kx46oEisacVVrCJL3cb7LA_zivqWkw,3896
34
34
  senoquant/tabs/quantification/features/spots/morphology.py,sha256=toK9exTD3CDX3vEKFN2CcT14f-03ASTJxSpQv8ZfC1M,8498
35
35
  senoquant/tabs/quantification/features/spots/rows.py,sha256=9FPrWmNLN6MPeVKpi3knPakkwJ8kR0b4sW0WIMLgaoM,7291
36
36
  senoquant/tabs/segmentation/__init__.py,sha256=YKSbKlgW372MFEA7xxY3_CUUkXfKX6VSwdoHh_btIaU,32
37
37
  senoquant/tabs/segmentation/backend.py,sha256=9DCVEUEFG0zdl0c_IXa7vAiwLCZetkfGJVK_zdrXsIQ,4295
38
- senoquant/tabs/segmentation/frontend.py,sha256=CVvCbbErVaOG5y-Ds4Ot9y2_0YDYAiCH0-TOtmy-GtI,36560
38
+ senoquant/tabs/segmentation/frontend.py,sha256=8hJeyC9h-sjWso25A5SOIgaut0khXljI1uN2HpFOEq0,37987
39
39
  senoquant/tabs/segmentation/models/__init__.py,sha256=0_Jxlyc6wGeOoCPhLxKtcfWa8MqFhFm4-_3ca0zDhME,138
40
40
  senoquant/tabs/segmentation/models/base.py,sha256=ND518fqg0XuBNT2AWdlf796LEx8xOX9Jq2Ofcf-MsDY,4335
41
41
  senoquant/tabs/segmentation/models/hf.py,sha256=Ns9o3slFSq7Ipyj3u1KrJbJ9zKxykh8A6kjxkzH1A58,1845
42
42
  senoquant/tabs/segmentation/models/cpsam/details.json,sha256=A_obIZzrnSLw_JPCPX5wq2ZtqYuo0QE6Ctn_BpgwBC4,1239
43
- senoquant/tabs/segmentation/models/cpsam/model.py,sha256=U-NiFbci3xLx0e1OKcEq_AYtGAOY0_E-YTrJxvLPFAo,5175
43
+ senoquant/tabs/segmentation/models/cpsam/model.py,sha256=-Y4sqVH67LEj0A8C16aeDhj8KU5BUUbb75QYXRRg23I,5175
44
44
  senoquant/tabs/segmentation/models/default_2d/details.json,sha256=S5H14Fk2_dmQNI2_TsXyB6j8PxspmjWC7tNh23VnG80,1338
45
- senoquant/tabs/segmentation/models/default_2d/model.py,sha256=naNlaFMksND0iSjs2Q-sL-E49eIgsOL1LJxImiy1JA0,23619
45
+ senoquant/tabs/segmentation/models/default_2d/model.py,sha256=LzGyo_X3flZHjprHM4i5qkAry-dJJ-OXwD6l8w6az6Q,21647
46
46
  senoquant/tabs/segmentation/models/default_3d/details.json,sha256=a-5YI9Po-IYTG9qHylPd4MMm7ydkRZj2s3EV9sxwGLY,1348
47
- senoquant/tabs/segmentation/models/default_3d/model.py,sha256=oeJzb5G5Mgox1s8ddglxS6CVCQgVxLzj0E03pxeZ-mI,24196
47
+ senoquant/tabs/segmentation/models/default_3d/model.py,sha256=x8zBcoEXXLMMkS2cYGYnZTnl33n9_OjTHJzRJV3aAeM,21758
48
48
  senoquant/tabs/segmentation/models/nuclear_dilation/__init__.py,sha256=5rgBUSDK5ZoD6tKVSzF0OUtF2bbBA29HMffJ_CjPJkA,43
49
49
  senoquant/tabs/segmentation/models/nuclear_dilation/details.json,sha256=Vx3XY7PvgrM3EMwhRDeFTr9i7GdWohzO2If1eJ-oQoU,510
50
50
  senoquant/tabs/segmentation/models/nuclear_dilation/model.py,sha256=onLX1R9U-n0s3Dc64jmBbYBuyTRvems3czclgbqHAP4,3048
@@ -112,13 +112,14 @@ senoquant/tabs/segmentation/stardist_onnx_utils/_stardist/scripts/__init__.py,sh
112
112
  senoquant/tabs/segmentation/stardist_onnx_utils/_stardist/scripts/predict2d.py,sha256=h2eywW4LQZJTaktncG0LOuWr9DdR344O8aOzM6_RTqw,3442
113
113
  senoquant/tabs/segmentation/stardist_onnx_utils/_stardist/scripts/predict3d.py,sha256=rpdnoA5XPDjRQ-imu1GO4unbfaO5w8PlFLqd_5lAjvY,3581
114
114
  senoquant/tabs/segmentation/stardist_onnx_utils/onnx_framework/__init__.py,sha256=uyQVHS-vUdONhvI1CDR718AmWPzMXPl9-6F0bL7sFBU,1430
115
+ senoquant/tabs/segmentation/stardist_onnx_utils/onnx_framework/stardist_libs.py,sha256=caM1arDjZE4vfJVp61AkH2vqbrXUHssHHcTcL7eKu1I,5788
115
116
  senoquant/tabs/segmentation/stardist_onnx_utils/onnx_framework/convert/__init__.py,sha256=uimduhVV20E3qfJHjSXZlztQfODxdXm5hO4O7dnbsJc,349
116
117
  senoquant/tabs/segmentation/stardist_onnx_utils/onnx_framework/convert/cli.py,sha256=l4u5YhqO_aYVm-uNxfTUrndhmphBXvPDR7hCxTk2nYE,1356
117
118
  senoquant/tabs/segmentation/stardist_onnx_utils/onnx_framework/convert/core.py,sha256=eRx2psv-jjBa5LThNZgxSEI9UjhRtyyWdxDutg3elQE,9038
118
119
  senoquant/tabs/segmentation/stardist_onnx_utils/onnx_framework/inspect/__init__.py,sha256=bYIgnsxd_5Ek9XS5sHWuA5WMIpMpoQshId95FWPUm2I,438
119
120
  senoquant/tabs/segmentation/stardist_onnx_utils/onnx_framework/inspect/cli.py,sha256=WlpZOHVqENkpUWMLHnH6AkmW5U6BAOQJaY0Nqlka_tQ,1082
120
121
  senoquant/tabs/segmentation/stardist_onnx_utils/onnx_framework/inspect/divisibility.py,sha256=OwOpWxui47XI3J1xZTEJdu6El7qqqMSLDeEdIZTTMds,7212
121
- senoquant/tabs/segmentation/stardist_onnx_utils/onnx_framework/inspect/probe.py,sha256=gf-y55GBI50n94UkCGijH9kVa-OZgeOAs5KwXVvLE9g,3220
122
+ senoquant/tabs/segmentation/stardist_onnx_utils/onnx_framework/inspect/probe.py,sha256=9iDqCc_XAXXS9LQyT3vucCTB9TjnJcOpMssNKIHUFos,3219
122
123
  senoquant/tabs/segmentation/stardist_onnx_utils/onnx_framework/inspect/receptive_field.py,sha256=XfwzLZaKX16Y6ybvUggRpsrXcWdFOHUpORhnD694r7Q,6213
123
124
  senoquant/tabs/segmentation/stardist_onnx_utils/onnx_framework/inspect/rf_cli.py,sha256=mZ5TkHSWWEM8WKNQ-I7qVAOmS0mQ81n7CmsjzBejJzY,1325
124
125
  senoquant/tabs/segmentation/stardist_onnx_utils/onnx_framework/inspect/valid_sizes.py,sha256=Zec8DPn5EWgXwuiQ0Tw907Y-kxlRCTx5YUgRpbyevGI,7913
@@ -133,16 +134,38 @@ senoquant/tabs/settings/backend.py,sha256=ZVtmrUYNsox7DiVMlcS666XRyLG7GksgC818oo
133
134
  senoquant/tabs/settings/frontend.py,sha256=_hTWJHZeEtU6n6qke31R6Es63knKeHhWZYUZj0ep79s,721
134
135
  senoquant/tabs/spots/__init__.py,sha256=dYrAIzX3A5w4TOLRRadxL2agOte_Z0ennuEIOCbJD5w,25
135
136
  senoquant/tabs/spots/backend.py,sha256=LZdkNzw-bpK0NClbeLttpg4C_8AqnIFg1W4NaxepTSs,4547
136
- senoquant/tabs/spots/frontend.py,sha256=34rq06tOw1gBcuc6NGzM73QWvKbwLUxKLAAifruUGOY,26816
137
+ senoquant/tabs/spots/frontend.py,sha256=2uRrhWXT8q_8MySYVDoGQyETq8RDHLua5haCwnXehi4,30262
137
138
  senoquant/tabs/spots/models/__init__.py,sha256=OKnBIi-aaBsuXmwQNeg4EKeV66gSscedXyZ1-O3cJhY,123
138
139
  senoquant/tabs/spots/models/base.py,sha256=VABmb2E7xvWOW8J60ZZkog0ZEG4XyW96qeXJMZVuKT8,2786
139
- senoquant/tabs/spots/models/rmp/details.json,sha256=ocSkURk8jrwZQidQhU6cwcpPukErmpq1RwLkyGn4-Nc,1243
140
- senoquant/tabs/spots/models/rmp/model.py,sha256=VwJluYX5NlF4crMsKfzncE9c5cPzX8c9x1l3xi7_pP4,17022
141
- senoquant/tabs/spots/models/udwt/details.json,sha256=wlZLTFdDFC2JD9Za5D-4fgIAbnZGRO6bSnV2j0pz9nE,2209
142
- senoquant/tabs/spots/models/udwt/model.py,sha256=Erg-HeFbz773rVyP28I8CAZ1UhbqNWpA4XwQhtWVjJU,14046
143
- senoquant-1.0.0b2.dist-info/licenses/LICENSE,sha256=wJjNEZJA6A7m6ozqNeq3tXi4X5gzbEGraFm2jw5ahG0,1509
144
- senoquant-1.0.0b2.dist-info/METADATA,sha256=SaAvLT9BIRXBWOGrb_VE8eBS5oH2twOmFgCWxvdT1AI,7279
145
- senoquant-1.0.0b2.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
146
- senoquant-1.0.0b2.dist-info/entry_points.txt,sha256=_HUyyJcDeBQVdUKjY3ZW9fqvHLWFn2mPXS_9KBPIzuU,52
147
- senoquant-1.0.0b2.dist-info/top_level.txt,sha256=zD3JsHkIEr7T58xOr2E7mnQ7fqeju6swI2kSkKUPfX4,10
148
- senoquant-1.0.0b2.dist-info/RECORD,,
140
+ senoquant/tabs/spots/models/rmp/details.json,sha256=FIuLJmA0HPvhUkLd04IPY47Hg2duV7dlwpl9BcN4G9w,1128
141
+ senoquant/tabs/spots/models/rmp/model.py,sha256=pdeYaXbQ1lQK1D_ZUhn0Chf9XSDV4dG2Nn4Jht3v3mI,19181
142
+ senoquant/tabs/spots/models/ufish/details.json,sha256=TW1pagjfQI2CYFAIRJ6pB14_bI1nU7EsoW5PLZtMcJg,602
143
+ senoquant/tabs/spots/models/ufish/model.py,sha256=YxCH5k2R3E9gk7H8CAbxrIQ2qa5yPOEYv7uj-hM8N-g,11074
144
+ senoquant/tabs/spots/ufish_utils/__init__.py,sha256=QH8ReVcWtg2_Mgx2Oxg6OZbcQ8ntp42lOMlaJoT3ZSE,394
145
+ senoquant/tabs/spots/ufish_utils/core.py,sha256=agSR6KD7potqvKrUQlcGTcOuhQTykPkTcgwYI6JwHBw,11764
146
+ senoquant/tabs/visualization/__init__.py,sha256=RV8qmD1xqR5i2PlAk_1Dx-6XRig9q7D7H2kwcFPGruc,33
147
+ senoquant/tabs/visualization/backend.py,sha256=z0_mHft-fnzqSE_qv0JTX5UgWhCJ7vf11Cpa210NQDo,10877
148
+ senoquant/tabs/visualization/frontend.py,sha256=E4h7jBmyF7ZBnKUH1Hhvfj9YDzrbnJljp6h1k6PYLRg,42580
149
+ senoquant/tabs/visualization/plots/__init__.py,sha256=fyic7xGD_h4CNoDI9Ui1UrZZwgPwqJPwJ16YFRW6aXE,1965
150
+ senoquant/tabs/visualization/plots/base.py,sha256=hUsX7Oz2TlQb-g3eAKZL82URyoB2pbyQPCPNvGQdCzg,4297
151
+ senoquant/tabs/visualization/plots/double_expression.py,sha256=jcYEDt_taHtm4uSUx7viv3J2BW4MP7cGax33guwo1bc,6637
152
+ senoquant/tabs/visualization/plots/spatialplot.py,sha256=4GR4w8ChBFZ_hsh03_kRo3yKCfkCEbfqIeJvC3IxQ_M,5673
153
+ senoquant/tabs/visualization/plots/umap.py,sha256=fQuwtmsuMyWmUMcmmcuMOVqKrON0aBi-xMQ0W_vxyeA,5134
154
+ senoquant-1.0.0b4.dist-info/licenses/LICENSE,sha256=wJjNEZJA6A7m6ozqNeq3tXi4X5gzbEGraFm2jw5ahG0,1509
155
+ ufish/__init__.py,sha256=ls1camlIoMxEZz9gSkZ1OJo-MXqHWwKPtdPbZJmwp7E,22
156
+ ufish/api.py,sha256=Nezcny6yTGMwdmB8qZv5dyCAeDq1RCSvMcAiZmGcn1s,29658
157
+ ufish/model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
158
+ ufish/model/loss.py,sha256=J6Oj2Fg1Zt04NneBhdjTpvb0BBvDc4wWfSsAf5cY8RA,1707
159
+ ufish/model/train.py,sha256=jt4kciKbtnrRyHcu9x8RXvvKk3L01_KA_U7xxgQjZlY,6025
160
+ ufish/model/network/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
161
+ ufish/model/network/spot_learn.py,sha256=yvyqXwqNHuc4bISo812GS7t6oJ_ZKcUuhlmpLYPeRek,1619
162
+ ufish/model/network/ufish_net.py,sha256=ssxuV1qoa7Iod1KiNwQDtnYR41_fOH9cuAroco_sRcw,6424
163
+ ufish/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
164
+ ufish/utils/img.py,sha256=8CkEZyWCKriCFuSq_qPphwmj-WPUrFMDyMGnRPQCA3k,12904
165
+ ufish/utils/log.py,sha256=_nF9sJJAMFqQJvvIUYI5o2ffAMTHmQhDVkp2EI3rsvc,280
166
+ ufish/utils/spot_calling.py,sha256=y7lSWOuxG7ca1nFz2uKC7x7aSzocqQu2p3tCijvvLSI,3970
167
+ senoquant-1.0.0b4.dist-info/METADATA,sha256=23gWiyLwY3INGiBy-N5-heQUVt0xirsQPguswkV8XQE,7297
168
+ senoquant-1.0.0b4.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
169
+ senoquant-1.0.0b4.dist-info/entry_points.txt,sha256=_HUyyJcDeBQVdUKjY3ZW9fqvHLWFn2mPXS_9KBPIzuU,52
170
+ senoquant-1.0.0b4.dist-info/top_level.txt,sha256=n-FXEO-BsEDOq-ur29UIHcQLD-PgvSbN2eV1onngiSU,16
171
+ senoquant-1.0.0b4.dist-info/RECORD,,
ufish/__init__.py ADDED
@@ -0,0 +1 @@
1
+ __version__ = '0.1.1'