From b44cfd252bd06309f7b14b83df94d2a254ae9221 Mon Sep 17 00:00:00 2001 From: Corentin <> Date: Fri, 20 Jan 2023 15:52:05 +0100 Subject: [PATCH 1/4] starting the merge with streamlit version --- myoquant/commands/run_sdh.py | 32 ++++++----- myoquant/src/ATP_analysis.py | 19 +++++++ myoquant/src/HE_analysis.py | 1 + myoquant/src/SDH_analysis.py | 54 ++++++------------ myoquant/src/common_func.py | 45 +++++++++++++++ poetry.lock | 106 +++++++++++++++++++++-------------- setup.py | 2 +- 7 files changed, 163 insertions(+), 96 deletions(-) diff --git a/myoquant/commands/run_sdh.py b/myoquant/commands/run_sdh.py index 5f588f4..dd48d17 100644 --- a/myoquant/commands/run_sdh.py +++ b/myoquant/commands/run_sdh.py @@ -164,21 +164,23 @@ def sdh_analysis( progress.add_task(description="Reading all inputs...", total=None) image_ndarray_sdh = imread(image_path) - if mask_path is not None: - mask_ndarray = imread(mask_path) - if np.unique(mask_ndarray).shape[0] != 2: - console.print( - "The mask image should be a binary image with only 2 values (0 and 1).", - style="red", - ) - raise ValueError - if len(image_ndarray_sdh.shape) > 2: - mask_ndarray = np.repeat( - mask_ndarray.reshape(mask_ndarray.shape[0], mask_ndarray.shape[1], 1), - image_ndarray_sdh.shape[2], - axis=2, - ) - image_ndarray_sdh = image_ndarray_sdh * mask_ndarray + if mask_path is not None: + mask_ndarray = imread(mask_path) + if np.unique(mask_ndarray).shape[0] != 2: + console.print( + "The mask image should be a binary image with only 2 values (0 and 1).", + style="red", + ) + raise ValueError + if len(image_ndarray_sdh.shape) > 2: + mask_ndarray = np.repeat( + mask_ndarray.reshape( + mask_ndarray.shape[0], mask_ndarray.shape[1], 1 + ), + image_ndarray_sdh.shape[2], + axis=2, + ) + image_ndarray_sdh = image_ndarray_sdh * mask_ndarray if cellpose_path is not None: mask_cellpose = imread(cellpose_path) diff --git a/myoquant/src/ATP_analysis.py b/myoquant/src/ATP_analysis.py index c653df0..6ecc8a7 100644 --- a/myoquant/src/ATP_analysis.py +++ b/myoquant/src/ATP_analysis.py @@ -44,6 +44,25 @@ def estimate_threshold(intensity_list): return threshold +def plot_density(all_cell_median_intensity, intensity_threshold): + if intensity_threshold == 0: + intensity_threshold = estimate_threshold(all_cell_median_intensity) + fig, ax = plt.subplots(figsize=(10, 5)) + density = gaussian_kde(all_cell_median_intensity) + density.covariance_factor = lambda: 0.25 + density._compute_covariance() + + # Create a vector of 256 values going from 0 to 256: + xs = np.linspace(0, 255, 256) + density_xs_values = density(xs) + ax.plot(xs, density_xs_values, label="Estimated Density") + ax.axvline(x=intensity_threshold, color="red", label="Threshold") + ax.set_xlabel("Pixel Intensity") + ax.set_ylabel("Density") + ax.legend() + return fig + + def predict_all_cells(histo_img, cellpose_df, intensity_threshold): all_cell_median_intensity = get_all_intensity(histo_img, cellpose_df) if intensity_threshold is None: diff --git a/myoquant/src/HE_analysis.py b/myoquant/src/HE_analysis.py index a9a78b6..be92cf6 100644 --- a/myoquant/src/HE_analysis.py +++ b/myoquant/src/HE_analysis.py @@ -45,6 +45,7 @@ def single_cell_analysis( y_fiber, cell_label, internalised_threshold=0.75, + draw_and_return=False, ): n_nuc, n_nuc_intern, n_nuc_periph = 0, 0, 0 new_row_lst = [] diff --git a/myoquant/src/SDH_analysis.py b/myoquant/src/SDH_analysis.py index ae59542..a5e284e 100644 --- a/myoquant/src/SDH_analysis.py +++ b/myoquant/src/SDH_analysis.py @@ -4,9 +4,7 @@ import pandas as pd import tensorflow as tf -from rich.progress import track -from skimage.measure import regionprops_table - +from .common_func import extract_single_image, df_from_cellpose_mask from .gradcam import make_gradcam_heatmap, save_and_display_gradcam import numpy as np @@ -32,14 +30,7 @@ def resize_batch_cells(histo_img, cellpose_df): img_array_full = np.empty((len(cellpose_df), 256, 256, 3)) # for index in track(range(len(cellpose_df)), description="Resizing cells"): for index in range(len(cellpose_df)): - single_cell_img = histo_img[ - cellpose_df.iloc[index, 5] : cellpose_df.iloc[index, 7], - cellpose_df.iloc[index, 6] : cellpose_df.iloc[index, 8], - ].copy() - - single_cell_mask = cellpose_df.iloc[index, 9].copy() - single_cell_img[~single_cell_mask] = 0 - + single_cell_img = extract_single_image(histo_img, cellpose_df, index) img_array_full[index] = tf.image.resize(single_cell_img, (256, 256)) return img_array_full @@ -54,7 +45,9 @@ def predict_all_cells(histo_img, cellpose_df, _model_SDH): predicted_class_array[index_counter] = prediction_result.argmax() predicted_proba_array[index_counter] = np.amax(prediction_result) index_counter += 1 - return predicted_class_array, predicted_proba_array + cellpose_df["class_predicted"] = predicted_class_array + cellpose_df["proba_predicted"] = predicted_proba_array + return cellpose_df def paint_full_image(image_sdh, df_cellpose, class_predicted_all): @@ -78,43 +71,28 @@ def paint_full_image(image_sdh, df_cellpose, class_predicted_all): def run_sdh_analysis(image_array, model_SDH, mask_cellpose): - props_cellpose = regionprops_table( - mask_cellpose, - properties=[ - "label", - "area", - "centroid", - "eccentricity", - "bbox", - "image", - "perimeter", - ], - ) - df_cellpose = pd.DataFrame(props_cellpose) - class_predicted_all, proba_predicted_all = predict_all_cells( - image_array, df_cellpose, model_SDH - ) - df_cellpose["class_predicted"] = class_predicted_all - df_cellpose["proba_predicted"] = proba_predicted_all - count_per_label = np.unique(class_predicted_all, return_counts=True) - class_and_proba_df = pd.DataFrame( - list(zip(class_predicted_all, proba_predicted_all)), - columns=["class", "proba"], - ) + df_cellpose = df_from_cellpose_mask(mask_cellpose) + + df_cellpose = predict_all_cells(image_array, df_cellpose, model_SDH) + count_per_label = np.unique(df_cellpose["class_predicted"], return_counts=True) # Result table dict headers = ["Feature", "Raw Count", "Proportion (%)"] data = [] - data.append(["Muscle Fibers", len(class_predicted_all), 100]) + data.append(["Muscle Fibers", len(df_cellpose["class_predicted"]), 100]) for elem in count_per_label[0]: data.append( [ labels_predict[int(elem)], count_per_label[1][int(elem)], - 100 * count_per_label[1][int(elem)] / len(class_predicted_all), + 100 + * count_per_label[1][int(elem)] + / len(df_cellpose["class_predicted"]), ] ) result_df = pd.DataFrame(columns=headers, data=data) # Paint The Full Image - full_label_map = paint_full_image(image_array, df_cellpose, class_predicted_all) + full_label_map = paint_full_image( + image_array, df_cellpose, df_cellpose["class_predicted"] + ) return result_df, full_label_map, df_cellpose diff --git a/myoquant/src/common_func.py b/myoquant/src/common_func.py index cb1c643..92e35ed 100644 --- a/myoquant/src/common_func.py +++ b/myoquant/src/common_func.py @@ -130,6 +130,51 @@ def run_stardist(image, model_stardist, nms_thresh=0.4, prob_thresh=0.5): return mask_stardist +def df_from_cellpose_mask(mask): + props_cellpose = regionprops_table( + mask, + properties=[ + "label", + "area", + "centroid", + "eccentricity", + "bbox", + "image", + "perimeter", + "feret_diameter_max", + ], + ) + df_cellpose = pd.DataFrame(props_cellpose) + return df_cellpose + + +def df_from_stardist_mask(mask): + props_stardist = regionprops_table( + mask, + properties=[ + "label", + "area", + "centroid", + "eccentricity", + "bbox", + "image", + "perimeter", + ], + ) + df_stardist = pd.DataFrame(props_stardist) + return df_stardist + + +def extract_single_image(raw_image, df_props, index): + single_entity_img = raw_image[ + df_props.iloc[index, 5] : df_props.iloc[index, 7], + df_props.iloc[index, 6] : df_props.iloc[index, 8], + ].copy() + single_entity_mask = df_props.iloc[index, 9] + single_entity_img[~single_entity_mask] = 0 + return single_entity_img + + def label2rgb(img_ndarray, label_map): """Convert a label map to RGB image diff --git a/poetry.lock b/poetry.lock index af4de0c..f6f211b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -414,21 +414,6 @@ traitlets = ">=5.3" [package.extras] test = ["pytest"] -[[package]] -name = "commonmark" -version = "0.9.1" -description = "Python parser for the CommonMark Markdown spec" -category = "main" -optional = false -python-versions = "*" -files = [ - {file = "commonmark-0.9.1-py2.py3-none-any.whl", hash = "sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9"}, - {file = "commonmark-0.9.1.tar.gz", hash = "sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60"}, -] - -[package.extras] -test = ["flake8 (==3.7.8)", "hypothesis (==3.55.3)"] - [[package]] name = "contourpy" version = "1.0.7" @@ -1428,6 +1413,31 @@ importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} [package.extras] testing = ["coverage", "pyyaml"] +[[package]] +name = "markdown-it-py" +version = "2.1.0" +description = "Python port of markdown-it. Markdown parsing, done right!" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "markdown-it-py-2.1.0.tar.gz", hash = "sha256:cf7e59fed14b5ae17c0006eff14a2d9a00ed5f3a846148153899a0224e2c07da"}, + {file = "markdown_it_py-2.1.0-py3-none-any.whl", hash = "sha256:93de681e5c021a432c63147656fe21790bc01231e0cd2da73626f1aa3ac0fe27"}, +] + +[package.dependencies] +mdurl = ">=0.1,<1.0" + +[package.extras] +benchmarking = ["psutil", "pytest", "pytest-benchmark (>=3.2,<4.0)"] +code-style = ["pre-commit (==2.6)"] +compare = ["commonmark (>=0.9.1,<0.10.0)", "markdown (>=3.3.6,<3.4.0)", "mistletoe (>=0.8.1,<0.9.0)", "mistune (>=2.0.2,<2.1.0)", "panflute (>=2.1.3,<2.2.0)"] +linkify = ["linkify-it-py (>=1.0,<2.0)"] +plugins = ["mdit-py-plugins"] +profiling = ["gprof2dot"] +rtd = ["attrs", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] + [[package]] name = "markupsafe" version = "2.1.2" @@ -1565,6 +1575,18 @@ files = [ [package.dependencies] traitlets = "*" +[[package]] +name = "mdurl" +version = "0.1.2" +description = "Markdown URL utilities" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, + {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, +] + [[package]] name = "mergedeep" version = "1.3.4" @@ -1655,14 +1677,14 @@ files = [ [[package]] name = "mkdocstrings" -version = "0.19.1" +version = "0.20.0" description = "Automatic documentation from sources, for MkDocs." category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "mkdocstrings-0.19.1-py3-none-any.whl", hash = "sha256:32a38d88f67f65b264184ea71290f9332db750d189dea4200cbbe408d304c261"}, - {file = "mkdocstrings-0.19.1.tar.gz", hash = "sha256:d1037cacb4b522c1e8c164ed5d00d724a82e49dcee0af80db8fb67b384faeef9"}, + {file = "mkdocstrings-0.20.0-py3-none-any.whl", hash = "sha256:f17fc2c4f760ec302b069075ef9e31045aa6372ca91d2f35ded3adba8e25a472"}, + {file = "mkdocstrings-0.20.0.tar.gz", hash = "sha256:c757f4f646d4f939491d6bc9256bfe33e36c5f8026392f49eaa351d241c838e5"}, ] [package.dependencies] @@ -2769,18 +2791,18 @@ rsa = ["oauthlib[signedtoken] (>=3.0.0)"] [[package]] name = "rich" -version = "13.1.0" +version = "13.2.0" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" category = "main" optional = false python-versions = ">=3.7.0" files = [ - {file = "rich-13.1.0-py3-none-any.whl", hash = "sha256:f846bff22a43e8508aebf3f0f2410ce1c6f4cde429098bd58d91fde038c57299"}, - {file = "rich-13.1.0.tar.gz", hash = "sha256:81c73a30b144bbcdedc13f4ea0b6ffd7fdc3b0d3cc259a9402309c8e4aee1964"}, + {file = "rich-13.2.0-py3-none-any.whl", hash = "sha256:7c963f0d03819221e9ac561e1bc866e3f95a02248c1234daa48954e6d381c003"}, + {file = "rich-13.2.0.tar.gz", hash = "sha256:f1a00cdd3eebf999a15d85ec498bfe0b1a77efe9b34f645768a54132ef444ac5"}, ] [package.dependencies] -commonmark = ">=0.9.0,<0.10.0" +markdown-it-py = ">=2.1.0,<3.0.0" pygments = ">=2.6.0,<3.0.0" typing-extensions = {version = ">=4.0.0,<5.0", markers = "python_version < \"3.9\""} @@ -2804,28 +2826,28 @@ pyasn1 = ">=0.1.3" [[package]] name = "ruff" -version = "0.0.226" +version = "0.0.227" description = "An extremely fast Python linter, written in Rust." category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.0.226-py3-none-macosx_10_7_x86_64.whl", hash = "sha256:199afcebc851350f4ab87987c83b1bf489510210700742e15fb129b4750d889a"}, - {file = "ruff-0.0.226-py3-none-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:1baa384e94c42de9750b6e381807ca63c7572a3d283c98344a8347b93a17045d"}, - {file = "ruff-0.0.226-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:80856915feed3786f16cd29a6af32f3e1527b5b16931d92bac01c12400ecc4fe"}, - {file = "ruff-0.0.226-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ebb106e359bd4a686d370ee5726fca7e92ecdfee61611a50e3f4214751829330"}, - {file = "ruff-0.0.226-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22bb40dc76cff2460efd7d1e81f0604d8905a4e442e45ea7e95ca994a258b84a"}, - {file = "ruff-0.0.226-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:de5089659d977901d7798e4bc67533c208e2be1360799d67df9f55c1e2ce5336"}, - {file = "ruff-0.0.226-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c7bb7f88d6aa0b6525603069949d21faeacd775b83e0d6303bc9dafe133275f7"}, - {file = "ruff-0.0.226-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:32194ee22fc24c54ea5c9d05eaf3991bb6bc1f1ecbfb9372caba3e465b6e0834"}, - {file = "ruff-0.0.226-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:04130c170e2da762b5510ac73683ed80701d7b5efb8124228b374eba78eb465f"}, - {file = "ruff-0.0.226-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:e5c364352ff8fc5d01d0416bed2e38f1b094d0efcff3d4fd18f8825aa69c8d49"}, - {file = "ruff-0.0.226-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:f729a4f68f2f50538b03d4ad6ad753a895ce9256fa8c262bac374a85500ca82f"}, - {file = "ruff-0.0.226-py3-none-musllinux_1_2_i686.whl", hash = "sha256:275b3555662554253b319984380f70e3aa1f42cb2d074b33e4537bf672e83e3a"}, - {file = "ruff-0.0.226-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:5c8cb58c721a35cbd05342943eed14399eae2184c425d39220e4eff2e741aecc"}, - {file = "ruff-0.0.226-py3-none-win32.whl", hash = "sha256:cecc2c291660e5064704e51792c7ef084afcfbb124dc473936b5c233cf21aad3"}, - {file = "ruff-0.0.226-py3-none-win_amd64.whl", hash = "sha256:bd9182fff882e14687eab0997b55b5edbf692a4e17a88902a1404058b142804a"}, - {file = "ruff-0.0.226.tar.gz", hash = "sha256:988334f0ff4a80ef91faf46f447f10292b757f1eb94f5f9cf5d1eef400142c33"}, + {file = "ruff-0.0.227-py3-none-macosx_10_7_x86_64.whl", hash = "sha256:2571a607e099e8fdd9d5aaf7450942a722b0de70215129c7240c3512dd73a2c7"}, + {file = "ruff-0.0.227-py3-none-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:329a19f3fffbd4ac58f1e601c299f9970561b40c1c83bdd85c7233c04dd132b9"}, + {file = "ruff-0.0.227-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b2258a48901ac81cbefb971405c9baed7765fc6be3e4a939cdf4161a2e45e7f"}, + {file = "ruff-0.0.227-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cde152a5b29ed6ea33920d4a1e0bd57dd4ff854fcc4ec836e8d60fb42a5146ac"}, + {file = "ruff-0.0.227-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:091ce41b94e1c774dc6c89d10314fdba2f3646141ce9c7afea42f2943fc900da"}, + {file = "ruff-0.0.227-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:858869f6b1562472ded90c7de9d9cb9a1dac042200f2aba3d6fc42e92644a453"}, + {file = "ruff-0.0.227-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8494e55a7149b6ece0a63b7b3abb22babc0376580a2a03ee90b854961ed053b9"}, + {file = "ruff-0.0.227-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c22ac3899ce27e336a97520d978ce3a63d6a33f75c12fdd0aea0bb944fe279a"}, + {file = "ruff-0.0.227-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e117190dae6c3a7fe6386e8b6d18fe4e207c8abb3675f6b8d21a488ebc6018f"}, + {file = "ruff-0.0.227-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:2926a63c469da3a647195b3874a398fbcc1b703d8cea2e961747e5884b93c4b2"}, + {file = "ruff-0.0.227-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:79f9fe7d512e4fef9b448509cbdfe9ee67db17a0abd3f84c1e5d6efe8f544327"}, + {file = "ruff-0.0.227-py3-none-musllinux_1_2_i686.whl", hash = "sha256:956b9a806da5f8c1e5b54c933d6a1782a892849e401cfaa901d0e1f0a8542683"}, + {file = "ruff-0.0.227-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:f08ec3a4d9ecf70baee3922900d19098a56bf707410703411ea40e0e0db25fff"}, + {file = "ruff-0.0.227-py3-none-win32.whl", hash = "sha256:fbb2bb2a16041b192f10fee6ddab36f0ca847f0d33ca6a49128004ac1ba6d1ca"}, + {file = "ruff-0.0.227-py3-none-win_amd64.whl", hash = "sha256:59ee7ab9e610d43220ee12bc5f8845dddff0f857a48b08f630c87d337abcd5f0"}, + {file = "ruff-0.0.227.tar.gz", hash = "sha256:1da5eca99f4b35b8329391f0d5802b379c2672525a2526a2e0b64083e52adc03"}, ] [[package]] @@ -2986,14 +3008,14 @@ stats = ["scipy (>=1.3)", "statsmodels (>=0.10)"] [[package]] name = "setuptools" -version = "66.0.0" +version = "66.1.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "setuptools-66.0.0-py3-none-any.whl", hash = "sha256:a78d01d1e2c175c474884671dde039962c9d74c7223db7369771fcf6e29ceeab"}, - {file = "setuptools-66.0.0.tar.gz", hash = "sha256:bd6eb2d6722568de6d14b87c44a96fac54b2a45ff5e940e639979a3d1792adb6"}, + {file = "setuptools-66.1.0-py3-none-any.whl", hash = "sha256:fc19f9f62120a763300fd78e234b3cbd3417be098f08c156eaaf36420627e57b"}, + {file = "setuptools-66.1.0.tar.gz", hash = "sha256:78a02bdea8a5cb66dec1c507598c443bcc75562817d2556c1a17f7a344615bb4"}, ] [package.extras] diff --git a/setup.py b/setup.py index eaa2e4e..9b0742c 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ setup( name="myoquant", - version="0.1.0", + version="0.3.0", packages=find_packages(), install_requires=[], ) From 30cbc35b41b7e381dcc853ef1c6d95182d90efbf Mon Sep 17 00:00:00 2001 From: Corentin <> Date: Mon, 23 Jan 2023 17:07:37 +0100 Subject: [PATCH 2/4] reworking towards st demo --- myoquant/src/ATP_analysis.py | 23 ++-------- myoquant/src/HE_analysis.py | 88 +++++++++++++++++++----------------- myoquant/src/common_func.py | 5 +- pyproject.toml | 2 +- 4 files changed, 54 insertions(+), 64 deletions(-) diff --git a/myoquant/src/ATP_analysis.py b/myoquant/src/ATP_analysis.py index 6ecc8a7..98a439e 100644 --- a/myoquant/src/ATP_analysis.py +++ b/myoquant/src/ATP_analysis.py @@ -2,7 +2,7 @@ from skimage.measure import regionprops_table from scipy.stats import gaussian_kde from sklearn.mixture import GaussianMixture - +from .common_func import extract_single_image, df_from_cellpose_mask import numpy as np labels_predict = {1: "fiber type 1", 2: "fiber type 2"} @@ -12,13 +12,8 @@ def get_all_intensity(image_array, df_cellpose): all_cell_median_intensity = [] for index in range(len(df_cellpose)): - single_cell_img = image_array[ - df_cellpose.iloc[index, 5] : df_cellpose.iloc[index, 7], - df_cellpose.iloc[index, 6] : df_cellpose.iloc[index, 8], - ].copy() + single_cell_img = extract_single_image(image_array, df_cellpose, index) - single_cell_mask = df_cellpose.iloc[index, 9].copy() - single_cell_img[~single_cell_mask] = 0 # Calculate median pixel intensity of the cell but ignore 0 values single_cell_median_intensity = np.median(single_cell_img[single_cell_img > 0]) all_cell_median_intensity.append(single_cell_median_intensity) @@ -95,19 +90,7 @@ def paint_full_image(image_atp, df_cellpose, class_predicted_all): def run_atp_analysis(image_array, mask_cellpose, intensity_threshold=None): - props_cellpose = regionprops_table( - mask_cellpose, - properties=[ - "label", - "area", - "centroid", - "eccentricity", - "bbox", - "image", - "perimeter", - ], - ) - df_cellpose = pd.DataFrame(props_cellpose) + df_cellpose = df_from_cellpose_mask(mask_cellpose) class_predicted_all, intensity_all = predict_all_cells( image_array, df_cellpose, intensity_threshold ) diff --git a/myoquant/src/HE_analysis.py b/myoquant/src/HE_analysis.py index be92cf6..4ba50b7 100644 --- a/myoquant/src/HE_analysis.py +++ b/myoquant/src/HE_analysis.py @@ -1,39 +1,27 @@ import numpy as np import pandas as pd from skimage.draw import line -from skimage.measure import regionprops_table - -from .draw_line import * +from .common_func import ( + extract_single_image, + df_from_cellpose_mask, + df_from_stardist_mask, +) +from .draw_line import ( + line_equation, + calculate_intersection, + calculate_closest_point, + calculate_distance, +) +import matplotlib.pyplot as plt def extract_ROIs(histo_img, index, cellpose_df, mask_stardist): - single_cell_img = histo_img[ - cellpose_df.iloc[index, 5] : cellpose_df.iloc[index, 7], - cellpose_df.iloc[index, 6] : cellpose_df.iloc[index, 8], - ].copy() - nucleus_single_cell_img = mask_stardist[ - cellpose_df.iloc[index, 5] : cellpose_df.iloc[index, 7], - cellpose_df.iloc[index, 6] : cellpose_df.iloc[index, 8], - ].copy() + single_cell_img = extract_single_image(histo_img, cellpose_df, index) + nucleus_single_cell_img = extract_single_image(mask_stardist, cellpose_df, index) single_cell_mask = cellpose_df.iloc[index, 9] - single_cell_img[~single_cell_mask] = 0 - nucleus_single_cell_img[~single_cell_mask] = 0 - - props_nuc_single = regionprops_table( - nucleus_single_cell_img, - intensity_image=single_cell_img, - properties=[ - "label", - "area", - "centroid", - "eccentricity", - "bbox", - "image", - "perimeter", - "feret_diameter_max", - ], + df_nuc_single = df_from_stardist_mask( + nucleus_single_cell_img, intensity_image=single_cell_img ) - df_nuc_single = pd.DataFrame(props_nuc_single) return single_cell_img, nucleus_single_cell_img, single_cell_mask, df_nuc_single @@ -47,6 +35,11 @@ def single_cell_analysis( internalised_threshold=0.75, draw_and_return=False, ): + if draw_and_return: + fig_size = (5, 5) + f, ax = plt.subplots(figsize=fig_size) + ax.scatter(x_fiber, y_fiber, color="white") + n_nuc, n_nuc_intern, n_nuc_periph = 0, 0, 0 new_row_lst = [] new_col_names = df_nuc_single.columns.tolist() @@ -54,6 +47,8 @@ def single_cell_analysis( new_col_names.append("score_eccentricity") new_col_names.append("cell label") for _, value in df_nuc_single.iterrows(): + if draw_and_return: + ax.scatter(value[3], value[2], color="red") n_nuc += 1 value = value.tolist() # Extend line and find closest point @@ -69,6 +64,21 @@ def single_cell_analysis( m, b, (single_cell_img.shape[0], single_cell_img.shape[1]) ) border_point = calculate_closest_point(value[3], value[2], intersections_lst) + if draw_and_return: + ax.plot( + (x_fiber, border_point[0]), + (y_fiber, border_point[1]), + "ro--", + linewidth=1, + markersize=1, + ) + ax.plot( + (x_fiber, value[3]), + (y_fiber, value[2]), + "go--", + linewidth=1, + markersize=1, + ) rr, cc = line( int(y_fiber), int(x_fiber), @@ -96,6 +106,8 @@ def single_cell_analysis( value.append(ratio_dist) value.append(cell_label) new_row_lst.append(value) + if draw_and_return: + ax.scatter(coords[1], coords[0], color="red", s=10) break except IndexError: coords = list(zip(rr, cc))[index3 - 1] @@ -115,8 +127,13 @@ def single_cell_analysis( value.append(ratio_dist) value.append(cell_label) new_row_lst.append(value) + if draw_and_return: + ax.scatter(coords[1], coords[0], color="red", s=10) + ax.axis("off") break df_nuc_single_stats = pd.DataFrame(new_row_lst, columns=new_col_names) + if draw_and_return: + return n_nuc, n_nuc_intern, n_nuc_periph, df_nuc_single_stats, ax return n_nuc, n_nuc_intern, n_nuc_periph, df_nuc_single_stats @@ -173,20 +190,7 @@ def paint_histo_img(histo_img, cellpose_df, prediction_df): def run_he_analysis(image_ndarray, mask_cellpose, mask_stardist, eccentricity_thresh): - props_cellpose = regionprops_table( - mask_cellpose, - properties=[ - "label", - "area", - "centroid", - "eccentricity", - "bbox", - "image", - "perimeter", - "feret_diameter_max", - ], - ) - df_cellpose = pd.DataFrame(props_cellpose) + df_cellpose = df_from_cellpose_mask(mask_cellpose) df_nuc_analysis, all_nuc_df_stats = predict_all_cells( image_ndarray, df_cellpose, mask_stardist, eccentricity_thresh ) diff --git a/myoquant/src/common_func.py b/myoquant/src/common_func.py index 92e35ed..5252f5c 100644 --- a/myoquant/src/common_func.py +++ b/myoquant/src/common_func.py @@ -13,6 +13,8 @@ from tensorflow import keras import numpy as np from PIL import Image +from skimage.measure import regionprops_table +import pandas as pd # from .gradcam import make_gradcam_heatmap, save_and_display_gradcam from .random_brightness import RandomBrightness @@ -148,9 +150,10 @@ def df_from_cellpose_mask(mask): return df_cellpose -def df_from_stardist_mask(mask): +def df_from_stardist_mask(mask, intensity_image=None): props_stardist = regionprops_table( mask, + intensity_image=intensity_image, properties=[ "label", "area", diff --git a/pyproject.toml b/pyproject.toml index 1a9ac5b..17c5ed4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "myoquant" -version = "0.3.0" +version = "0.3.1" description = "MyoQuant🔬: a tool to automatically quantify pathological features in muscle fiber histology images." authors = ["Corentin Meyer "] maintainers = ["Corentin Meyer "] From fad29d9c4dc20ddfd666e6aa79d97e92f6b399a9 Mon Sep 17 00:00:00 2001 From: Corentin <> Date: Tue, 24 Jan 2023 14:57:55 +0100 Subject: [PATCH 3/4] fixing missing density plot import --- myoquant/src/ATP_analysis.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/myoquant/src/ATP_analysis.py b/myoquant/src/ATP_analysis.py index 98a439e..452e239 100644 --- a/myoquant/src/ATP_analysis.py +++ b/myoquant/src/ATP_analysis.py @@ -1,9 +1,9 @@ import pandas as pd -from skimage.measure import regionprops_table from scipy.stats import gaussian_kde from sklearn.mixture import GaussianMixture from .common_func import extract_single_image, df_from_cellpose_mask import numpy as np +import matplotlib.pyplot as plt labels_predict = {1: "fiber type 1", 2: "fiber type 2"} np.random.seed(42) From 6df17c48634de9950f6726bf042cf6acf907ce3d Mon Sep 17 00:00:00 2001 From: Corentin <> Date: Tue, 24 Jan 2023 15:11:37 +0100 Subject: [PATCH 4/4] update poetry --- poetry.lock | 264 ++++++++++++++++++++++++++-------------------------- 1 file changed, 132 insertions(+), 132 deletions(-) diff --git a/poetry.lock b/poetry.lock index f6f211b..ff85c1c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -129,14 +129,14 @@ uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "cachetools" -version = "5.2.1" +version = "5.3.0" description = "Extensible memoizing collections and decorators" category = "main" optional = false python-versions = "~=3.7" files = [ - {file = "cachetools-5.2.1-py3-none-any.whl", hash = "sha256:8462eebf3a6c15d25430a8c27c56ac61340b2ecf60c9ce57afc2b97e450e47da"}, - {file = "cachetools-5.2.1.tar.gz", hash = "sha256:5991bc0e08a1319bb618d3195ca5b6bc76646a49c21d55962977197b301cc1fe"}, + {file = "cachetools-5.3.0-py3-none-any.whl", hash = "sha256:429e1a1e845c008ea6c85aa35d4b98b65d6a9763eeef3e37e92728a12d1de9d4"}, + {file = "cachetools-5.3.0.tar.gz", hash = "sha256:13dfddc7b8df938c21a940dfa6557ce6e94a2f1cdfa58eb90c805721d58f2c14"}, ] [[package]] @@ -533,30 +533,30 @@ files = [ [[package]] name = "debugpy" -version = "1.6.5" +version = "1.6.6" description = "An implementation of the Debug Adapter Protocol for Python" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "debugpy-1.6.5-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:696165f021a6a17da08163eaae84f3faf5d8be68fb78cd78488dd347e625279c"}, - {file = "debugpy-1.6.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17039e392d6f38388a68bd02c5f823b32a92142a851e96ba3ec52aeb1ce9d900"}, - {file = "debugpy-1.6.5-cp310-cp310-win32.whl", hash = "sha256:62a06eb78378292ba6c427d861246574dc8b84471904973797b29dd33c7c2495"}, - {file = "debugpy-1.6.5-cp310-cp310-win_amd64.whl", hash = "sha256:9984fc00ab372c97f63786c400107f54224663ea293daab7b365a5b821d26309"}, - {file = "debugpy-1.6.5-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:048368f121c08b00bbded161e8583817af5055982d2722450a69efe2051621c2"}, - {file = "debugpy-1.6.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:74e4eca42055759032e3f1909d1374ba1d729143e0c2729bb8cb5e8b5807c458"}, - {file = "debugpy-1.6.5-cp37-cp37m-win32.whl", hash = "sha256:0f9afcc8cad6424695f3356dc9a7406d5b18e37ee2e73f34792881a44b02cc50"}, - {file = "debugpy-1.6.5-cp37-cp37m-win_amd64.whl", hash = "sha256:b5a74ecebe5253344501d9b23f74459c46428b30437fa9254cfb8cb129943242"}, - {file = "debugpy-1.6.5-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:9e809ef787802c808995e5b6ade714a25fa187f892b41a412d418a15a9c4a432"}, - {file = "debugpy-1.6.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:947c686e8adb46726f3d5f19854f6aebf66c2edb91225643c7f44b40b064a235"}, - {file = "debugpy-1.6.5-cp38-cp38-win32.whl", hash = "sha256:377391341c4b86f403d93e467da8e2d05c22b683f08f9af3e16d980165b06b90"}, - {file = "debugpy-1.6.5-cp38-cp38-win_amd64.whl", hash = "sha256:286ae0c2def18ee0dc8a61fa76d51039ca8c11485b6ed3ef83e3efe8a23926ae"}, - {file = "debugpy-1.6.5-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:500dd4a9ff818f5c52dddb4a608c7de5371c2d7d905c505eb745556c579a9f11"}, - {file = "debugpy-1.6.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f3fab217fe7e2acb2d90732af1a871947def4e2b6654945ba1ebd94bd0bea26"}, - {file = "debugpy-1.6.5-cp39-cp39-win32.whl", hash = "sha256:15bc5febe0edc79726517b1f8d57d7ac7c784567b5ba804aab8b1c9d07a57018"}, - {file = "debugpy-1.6.5-cp39-cp39-win_amd64.whl", hash = "sha256:7e84d9e4420122384cb2cc762a00b4e17cbf998022890f89b195ce178f78ff47"}, - {file = "debugpy-1.6.5-py2.py3-none-any.whl", hash = "sha256:8116e40a1cd0593bd2aba01d4d560ee08f018da8e8fbd4cbd24ff09b5f0e41ef"}, - {file = "debugpy-1.6.5.zip", hash = "sha256:5e55e6c79e215239dd0794ee0bf655412b934735a58e9d705e5c544f596f1603"}, + {file = "debugpy-1.6.6-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:0ea1011e94416e90fb3598cc3ef5e08b0a4dd6ce6b9b33ccd436c1dffc8cd664"}, + {file = "debugpy-1.6.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dff595686178b0e75580c24d316aa45a8f4d56e2418063865c114eef651a982e"}, + {file = "debugpy-1.6.6-cp310-cp310-win32.whl", hash = "sha256:87755e173fcf2ec45f584bb9d61aa7686bb665d861b81faa366d59808bbd3494"}, + {file = "debugpy-1.6.6-cp310-cp310-win_amd64.whl", hash = "sha256:72687b62a54d9d9e3fb85e7a37ea67f0e803aaa31be700e61d2f3742a5683917"}, + {file = "debugpy-1.6.6-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:78739f77c58048ec006e2b3eb2e0cd5a06d5f48c915e2fc7911a337354508110"}, + {file = "debugpy-1.6.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23c29e40e39ad7d869d408ded414f6d46d82f8a93b5857ac3ac1e915893139ca"}, + {file = "debugpy-1.6.6-cp37-cp37m-win32.whl", hash = "sha256:7aa7e103610e5867d19a7d069e02e72eb2b3045b124d051cfd1538f1d8832d1b"}, + {file = "debugpy-1.6.6-cp37-cp37m-win_amd64.whl", hash = "sha256:f6383c29e796203a0bba74a250615ad262c4279d398e89d895a69d3069498305"}, + {file = "debugpy-1.6.6-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:23363e6d2a04d726bbc1400bd4e9898d54419b36b2cdf7020e3e215e1dcd0f8e"}, + {file = "debugpy-1.6.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b5d1b13d7c7bf5d7cf700e33c0b8ddb7baf030fcf502f76fc061ddd9405d16c"}, + {file = "debugpy-1.6.6-cp38-cp38-win32.whl", hash = "sha256:70ab53918fd907a3ade01909b3ed783287ede362c80c75f41e79596d5ccacd32"}, + {file = "debugpy-1.6.6-cp38-cp38-win_amd64.whl", hash = "sha256:c05349890804d846eca32ce0623ab66c06f8800db881af7a876dc073ac1c2225"}, + {file = "debugpy-1.6.6-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:11a0f3a106f69901e4a9a5683ce943a7a5605696024134b522aa1bfda25b5fec"}, + {file = "debugpy-1.6.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a771739902b1ae22a120dbbb6bd91b2cae6696c0e318b5007c5348519a4211c6"}, + {file = "debugpy-1.6.6-cp39-cp39-win32.whl", hash = "sha256:549ae0cb2d34fc09d1675f9b01942499751d174381b6082279cf19cdb3c47cbe"}, + {file = "debugpy-1.6.6-cp39-cp39-win_amd64.whl", hash = "sha256:de4a045fbf388e120bb6ec66501458d3134f4729faed26ff95de52a754abddb1"}, + {file = "debugpy-1.6.6-py2.py3-none-any.whl", hash = "sha256:be596b44448aac14eb3614248c91586e2bc1728e020e82ef3197189aae556115"}, + {file = "debugpy-1.6.6.zip", hash = "sha256:b9c2130e1c632540fbf9c2c88341493797ddf58016e7cba02e311de9b0a96b67"}, ] [[package]] @@ -690,14 +690,14 @@ testing = ["covdefaults (>=2.2.2)", "coverage (>=7.0.1)", "pytest (>=7.2)", "pyt [[package]] name = "flatbuffers" -version = "23.1.4" +version = "23.1.21" description = "The FlatBuffers serialization format for Python" category = "main" optional = false python-versions = "*" files = [ - {file = "flatbuffers-23.1.4-py2.py3-none-any.whl", hash = "sha256:8bf47bcaef0deac76ae95586032e867e1d6d8fd429d00ca8d3d01e43fd3d1f8f"}, - {file = "flatbuffers-23.1.4.tar.gz", hash = "sha256:04d2141ea38866600beda17ffebf739b23f4f500cc22606076cc83079155106d"}, + {file = "flatbuffers-23.1.21-py2.py3-none-any.whl", hash = "sha256:2e4101b291b14f21e87ea20b7bf7127b11563f6084e352d2d708bddd545c9265"}, + {file = "flatbuffers-23.1.21.tar.gz", hash = "sha256:a948913bbb5d83c43a1193d7943c90e6c0ab732e7f2983111104250aeb61ff85"}, ] [[package]] @@ -919,32 +919,32 @@ six = "*" [[package]] name = "h5py" -version = "3.7.0" +version = "3.8.0" description = "Read and write HDF5 files from Python" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "h5py-3.7.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d77af42cb751ad6cc44f11bae73075a07429a5cf2094dfde2b1e716e059b3911"}, - {file = "h5py-3.7.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:63beb8b7b47d0896c50de6efb9a1eaa81dbe211f3767e7dd7db159cea51ba37a"}, - {file = "h5py-3.7.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:04e2e1e2fc51b8873e972a08d2f89625ef999b1f2d276199011af57bb9fc7851"}, - {file = "h5py-3.7.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f73307c876af49aa869ec5df1818e9bb0bdcfcf8a5ba773cc45a4fba5a286a5c"}, - {file = "h5py-3.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:f514b24cacdd983e61f8d371edac8c1b780c279d0acb8485639e97339c866073"}, - {file = "h5py-3.7.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:43fed4d13743cf02798a9a03a360a88e589d81285e72b83f47d37bb64ed44881"}, - {file = "h5py-3.7.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c038399ce09a58ff8d89ec3e62f00aa7cb82d14f34e24735b920e2a811a3a426"}, - {file = "h5py-3.7.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03d64fb86bb86b978928bad923b64419a23e836499ec6363e305ad28afd9d287"}, - {file = "h5py-3.7.0-cp37-cp37m-win_amd64.whl", hash = "sha256:e5b7820b75f9519499d76cc708e27242ccfdd9dfb511d6deb98701961d0445aa"}, - {file = "h5py-3.7.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a9351d729ea754db36d175098361b920573fdad334125f86ac1dd3a083355e20"}, - {file = "h5py-3.7.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6776d896fb90c5938de8acb925e057e2f9f28755f67ec3edcbc8344832616c38"}, - {file = "h5py-3.7.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0a047fddbe6951bce40e9cde63373c838a978c5e05a011a682db9ba6334b8e85"}, - {file = "h5py-3.7.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0798a9c0ff45f17d0192e4d7114d734cac9f8b2b2c76dd1d923c4d0923f27bb6"}, - {file = "h5py-3.7.0-cp38-cp38-win_amd64.whl", hash = "sha256:0d8de8cb619fc597da7cf8cdcbf3b7ff8c5f6db836568afc7dc16d21f59b2b49"}, - {file = "h5py-3.7.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f084bbe816907dfe59006756f8f2d16d352faff2d107f4ffeb1d8de126fc5dc7"}, - {file = "h5py-3.7.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1fcb11a2dc8eb7ddcae08afd8fae02ba10467753a857fa07a404d700a93f3d53"}, - {file = "h5py-3.7.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ed43e2cc4f511756fd664fb45d6b66c3cbed4e3bd0f70e29c37809b2ae013c44"}, - {file = "h5py-3.7.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9e7535df5ee3dc3e5d1f408fdfc0b33b46bc9b34db82743c82cd674d8239b9ad"}, - {file = "h5py-3.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:9e2ad2aa000f5b1e73b5dfe22f358ca46bf1a2b6ca394d9659874d7fc251731a"}, - {file = "h5py-3.7.0.tar.gz", hash = "sha256:3fcf37884383c5da64846ab510190720027dca0768def34dd8dcb659dbe5cbf3"}, + {file = "h5py-3.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:533d7dad466ddb7e3b30af274b630eb7c1a6e4ddf01d1c373a0334dc2152110a"}, + {file = "h5py-3.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c873ba9fd4fa875ad62ce0e4891725e257a8fe7f5abdbc17e51a5d54819be55c"}, + {file = "h5py-3.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3389b63222b1c7a158bb7fe69d11ca00066740ec5574596d47a2fe5317f563a"}, + {file = "h5py-3.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:7f3350fc0a8407d668b13247861c2acd23f7f5fe7d060a3ad9b0820f5fcbcae0"}, + {file = "h5py-3.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:db03e3f2c716205fbdabb34d0848459840585225eb97b4f08998c743821ca323"}, + {file = "h5py-3.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:36761693efbe53df179627a775476dcbc37727d6e920958277a7efbc18f1fb73"}, + {file = "h5py-3.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33b15aae79e9147aebe1d0e54099cbcde8d65e3e227cd5b59e49b1272aa0e09d"}, + {file = "h5py-3.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:9f6f6ffadd6bfa9b2c5b334805eb4b19ca0a5620433659d8f7fb86692c40a359"}, + {file = "h5py-3.8.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8f55d9c6c84d7d09c79fb85979e97b81ec6071cc776a97eb6b96f8f6ec767323"}, + {file = "h5py-3.8.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:377865821fe80ad984d003723d6f8890bd54ceeb5981b43c0313b9df95411b30"}, + {file = "h5py-3.8.0-cp37-cp37m-win_amd64.whl", hash = "sha256:0fef76e10b9216657fa37e7edff6d8be0709b25bd5066474c229b56cf0098df9"}, + {file = "h5py-3.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:26ffc344ec9984d2cd3ca0265007299a8bac8d85c1ad48f4639d8d3aed2af171"}, + {file = "h5py-3.8.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:bacaa1c16810dd2b3e4417f8e730971b7c4d53d234de61fe4a918db78e80e1e4"}, + {file = "h5py-3.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f47f757d1b76f0ecb8aa0508ec8d1b390df67a8b67ee2515dc1b046f3a1596ea"}, + {file = "h5py-3.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:f891b17e3a3e974e93f9e34e7cca9f530806543571ce078998676a555837d91d"}, + {file = "h5py-3.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:290e00fa2de74a10688d1bac98d5a9cdd43f14f58e562c580b5b3dfbd358ecae"}, + {file = "h5py-3.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:03890b1c123d024fb0239a3279737d5432498c1901c354f8b10d8221d1d16235"}, + {file = "h5py-3.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49bc857635f935fa30e92e61ac1e87496df8f260a6945a3235e43a9890426866"}, + {file = "h5py-3.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:5fd2252d1fc364ba0e93dd0b7089f4906b66805cb4e6aca7fa8874ac08649647"}, + {file = "h5py-3.8.0.tar.gz", hash = "sha256:6fead82f0c4000cf38d53f9c030780d81bfa0220218aee13b90b7701c937d95f"}, ] [package.dependencies] @@ -952,14 +952,14 @@ numpy = ">=1.14.5" [[package]] name = "identify" -version = "2.5.13" +version = "2.5.15" description = "File identification library for Python" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "identify-2.5.13-py2.py3-none-any.whl", hash = "sha256:8aa48ce56e38c28b6faa9f261075dea0a942dfbb42b341b4e711896cbb40f3f7"}, - {file = "identify-2.5.13.tar.gz", hash = "sha256:abb546bca6f470228785338a01b539de8a85bbf46491250ae03363956d8ebb10"}, + {file = "identify-2.5.15-py2.py3-none-any.whl", hash = "sha256:1f4b36c5f50f3f950864b2a047308743f064eaa6f6645da5e5c780d1c7125487"}, + {file = "identify-2.5.15.tar.gz", hash = "sha256:c22aa206f47cc40486ecf585d27ad5f40adbfc494a3fa41dc3ed0499a23b123f"}, ] [package.extras] @@ -979,36 +979,36 @@ files = [ [[package]] name = "imagecodecs" -version = "2022.12.24" +version = "2023.1.23" description = "Image transformation, compression, and decompression codecs" category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "imagecodecs-2022.12.24-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:46dee6866680ddb41406ed6c22d7be9b936f64edaa028779755eb5c42a6e6101"}, - {file = "imagecodecs-2022.12.24-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d84049fd3ce41799297f972c9a621e5495a332a4f04d2717e5441c4616adc4d0"}, - {file = "imagecodecs-2022.12.24-cp310-cp310-win32.whl", hash = "sha256:415537b3bfeddcf4ec2c5d15182a9fbffdb95ea96881e5b7498f22df11499f02"}, - {file = "imagecodecs-2022.12.24-cp310-cp310-win_amd64.whl", hash = "sha256:7989040f29281f168b7fa25e5a1416f129b2f649a01961f5e10f32c934c05525"}, - {file = "imagecodecs-2022.12.24-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c165250a3816a603674e215cf9b4d6e8e7b92169bdc3da032416c44b479f39e9"}, - {file = "imagecodecs-2022.12.24-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:898142f1a0e1137b5693affa53a2c88eb69afaea9833ecb23bdd7e1db91c7da4"}, - {file = "imagecodecs-2022.12.24-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:785427e15243495d3e498dd2c06406a036f5b36d8b64da033aa6c1485807d872"}, - {file = "imagecodecs-2022.12.24-cp311-cp311-win32.whl", hash = "sha256:cc68a098c3496cfd4a6c92806c75c6afab7b292060c213d6fbb7b7b382edc9a9"}, - {file = "imagecodecs-2022.12.24-cp311-cp311-win_amd64.whl", hash = "sha256:ff83c8bd6c3aa4c4dc98f22cb57d023bc75c598a7fa330ebf5a455bf3ba46c82"}, - {file = "imagecodecs-2022.12.24-cp311-cp311-win_arm64.whl", hash = "sha256:25e01c04c05907fdfb001e61ae6d2ee4c2dd79cf8f6cb6895654ef88a315ca58"}, - {file = "imagecodecs-2022.12.24-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8e811164f6c64ffee8f2fa5738dab2541112df13af811f9a2a2ab6c29632fad5"}, - {file = "imagecodecs-2022.12.24-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0798155618fda215289b5755f44034908c054a081f789703e93a95abb912b971"}, - {file = "imagecodecs-2022.12.24-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c001561f1dfc502a3cb6703ba10a9275e09bbb2f6c76f2a700e5ffe37b6068c1"}, - {file = "imagecodecs-2022.12.24-cp38-cp38-win32.whl", hash = "sha256:41ecaf0de5bede394910d257524245f17767fb29d83bd1f56539a11a6701090f"}, - {file = "imagecodecs-2022.12.24-cp38-cp38-win_amd64.whl", hash = "sha256:1612af9b2a4fd040e6a95b4587d7d6c1e7f54dc16e59cc210fefb64befcbc91d"}, - {file = "imagecodecs-2022.12.24-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0b5585a56bde778bcaab5c4b277f3e9fe67bd68c93d2eec61057149bc7fd18c3"}, - {file = "imagecodecs-2022.12.24-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:29409e1c53da3b2ff2eb6a20de838191649ab875fc456d94f61e418f77150c0d"}, - {file = "imagecodecs-2022.12.24-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad9e37a9782e810a7f2d3aad9213b42440365499df780922242470299dde6452"}, - {file = "imagecodecs-2022.12.24-cp39-cp39-win32.whl", hash = "sha256:97ab2ddb065cd232bb5bb06fa49065d3bb5843c03cc7ba9a285f9178dc20d298"}, - {file = "imagecodecs-2022.12.24-cp39-cp39-win_amd64.whl", hash = "sha256:e0f46869bc97f398786be1b4d61ae5608f131178e4a57472669f35b55d6068fd"}, - {file = "imagecodecs-2022.12.24-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c3d59769f51814ab601645cfbe29063d10382a693a683f6bfa6745d4e79c962"}, - {file = "imagecodecs-2022.12.24-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bde9ccee229e294f8ac30a702061250d6d7ae79fdf1097861d559be853e2dee6"}, - {file = "imagecodecs-2022.12.24-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:6ea15f88d3552591fa45665bff32f3f8855530f32cedbc2840097530d7ca08cf"}, - {file = "imagecodecs-2022.12.24.tar.gz", hash = "sha256:c5282a808786dadb8e3ee238bb213b2e065574f1bb0f4b51e8bf93747e0babb3"}, + {file = "imagecodecs-2023.1.23-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c40c16551c149a4f7d0e50085c1e771eb4919c0dfa9671392ffd0e74658987e0"}, + {file = "imagecodecs-2023.1.23-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:639e23902a11309e547067d06f04b02e3c3baf6aa30c3d693c9e1f782d5dc1b0"}, + {file = "imagecodecs-2023.1.23-cp310-cp310-win32.whl", hash = "sha256:6db6aa24c01a8f2ecd0cce2cb6e57a643583753310a210848b223e6ad3aacd7d"}, + {file = "imagecodecs-2023.1.23-cp310-cp310-win_amd64.whl", hash = "sha256:6688b663bb571592613ec211e85058c339207dd5d110d4fd276d136d9fe8470b"}, + {file = "imagecodecs-2023.1.23-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f032f773303bcca43d5aaee08febd2cb3d945c2be7dc478e50d68dd858da4f16"}, + {file = "imagecodecs-2023.1.23-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c3fc0e0b4e3fda3ad36f6e5c51ed8e9c3df7893b7659d83887e1f9480ecb9ae6"}, + {file = "imagecodecs-2023.1.23-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0499f54eed71342ec99225ac2fe076ff41cad6fec83ce3f1f2c9439f4d4928bf"}, + {file = "imagecodecs-2023.1.23-cp311-cp311-win32.whl", hash = "sha256:0f06a9e369311433b1e7f3b4eef2bc623df47727e052198f4d10f67b0f8a48ee"}, + {file = "imagecodecs-2023.1.23-cp311-cp311-win_amd64.whl", hash = "sha256:b06413eead06702f1c6b2c3041c62ee59f3ea1e86cf2b37f6d89aec980b0f66e"}, + {file = "imagecodecs-2023.1.23-cp311-cp311-win_arm64.whl", hash = "sha256:12886d03339fc3bc2730dddf0afdcf201feb445d7e28ae4261a566ceb818454a"}, + {file = "imagecodecs-2023.1.23-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6aeb31a6bf12e9ff281383d4e642d10e846af18a11373cadb5970159db9af5f6"}, + {file = "imagecodecs-2023.1.23-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7513b89ac304652c1314135621024e2e0b62ed974704b78324d167f79c37ffc7"}, + {file = "imagecodecs-2023.1.23-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:941614accc60b497391a69d7be749eaa31103a429e585867688b1550361d9d2c"}, + {file = "imagecodecs-2023.1.23-cp38-cp38-win32.whl", hash = "sha256:66078703958047c304035014a9a00d9e73d6c6c52a1b29a879f63db6ae117292"}, + {file = "imagecodecs-2023.1.23-cp38-cp38-win_amd64.whl", hash = "sha256:54804c6cd2659b0b7287f05283076040a6c96d5f340b63f6f0949e506ffe8a46"}, + {file = "imagecodecs-2023.1.23-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:27a1ff9364dc60ffd13ca11318446048e8723e5a2fcfbef03124fd80e31b836b"}, + {file = "imagecodecs-2023.1.23-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eaa1880e30bac060d7786734b226c5b791b25c84f45b056af884c845102ae0d7"}, + {file = "imagecodecs-2023.1.23-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:633e0bd0abce7706a6d7251d95423c9adcf70618869f1fc7a86439e8bdbe62b2"}, + {file = "imagecodecs-2023.1.23-cp39-cp39-win32.whl", hash = "sha256:e579b8ad1dabc58a65e768f80ccf727f16d7ccc52e614bbcd5301c48cd79864d"}, + {file = "imagecodecs-2023.1.23-cp39-cp39-win_amd64.whl", hash = "sha256:fb8efcf225768e28d4e864351a9051ec6b208c6f9ae1829657e21c136d11ebdb"}, + {file = "imagecodecs-2023.1.23-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a6a818ba0aaefeab699005fb6ab048c14bb32ac813a71b069413d08ec5bad29"}, + {file = "imagecodecs-2023.1.23-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfe458ecabff1069b449274acb552e7259b035c2bcf19beced165ed9b04b1eb1"}, + {file = "imagecodecs-2023.1.23-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:e9a97856ef9bd7cf042ecd0687af3403d10b383d3ede3f5e0964b58b5ba8dc3d"}, + {file = "imagecodecs-2023.1.23.tar.gz", hash = "sha256:1b4591839a2f5c90467e50ebe54117cbd9be42c18864abdf85fc7743223ac5b2"}, ] [package.dependencies] @@ -1019,14 +1019,14 @@ all = ["matplotlib", "numcodecs", "tifffile"] [[package]] name = "imageio" -version = "2.24.0" +version = "2.25.0" description = "Library for reading and writing a wide range of image, video, scientific, and volumetric data formats." category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "imageio-2.24.0-py3-none-any.whl", hash = "sha256:c4ccd0293a1aeb566c7fa04260d51897be064b8fb287a77548ce42050ec06d7a"}, - {file = "imageio-2.24.0.tar.gz", hash = "sha256:f240f8229f4f329a1546281194b52da5d6694141a524668fed3f81b0d07782fa"}, + {file = "imageio-2.25.0-py3-none-any.whl", hash = "sha256:9ef2fdef1235eef849b1aea399f08508493624a2a2c8cc3bba957dabb7d0b79f"}, + {file = "imageio-2.25.0.tar.gz", hash = "sha256:b80796a1f8c38c697a940a2ad7397ee28900d5c4e51061b9a67d16aca867f33e"}, ] [package.dependencies] @@ -1231,14 +1231,14 @@ test = ["codecov", "coverage", "ipykernel (>=6.12)", "ipython", "mypy", "pre-com [[package]] name = "jupyter-core" -version = "5.1.3" +version = "5.1.4" description = "Jupyter core package. A base package on which Jupyter projects rely." category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "jupyter_core-5.1.3-py3-none-any.whl", hash = "sha256:d23ab7db81ca1759f13780cd6b65f37f59bf8e0186ac422d5ca4982cc7d56716"}, - {file = "jupyter_core-5.1.3.tar.gz", hash = "sha256:82e1cff0ef804c38677eff7070d5ff1d45037fef01a2d9ba9e6b7b8201831e9f"}, + {file = "jupyter_core-5.1.4-py3-none-any.whl", hash = "sha256:fe812ffffd0ead286327dc570888684183cef4070e57d9ebadc92f3bd9c9a05d"}, + {file = "jupyter_core-5.1.4.tar.gz", hash = "sha256:80d29fef4210ca8d30f25018a28d06dcc582bb1a82b848f2eab61a349a007af1"}, ] [package.dependencies] @@ -2275,14 +2275,14 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "pre-commit" -version = "2.21.0" +version = "3.0.0" description = "A framework for managing and maintaining multi-language pre-commit hooks." category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pre_commit-2.21.0-py2.py3-none-any.whl", hash = "sha256:e2f91727039fc39a92f58a588a25b87f936de6567eed4f0e673e0507edc75bad"}, - {file = "pre_commit-2.21.0.tar.gz", hash = "sha256:31ef31af7e474a8d8995027fefdfcf509b5c913ff31f2015b4ec4beb26a6f658"}, + {file = "pre_commit-3.0.0-py2.py3-none-any.whl", hash = "sha256:6af0a0b4137c0903794632f77b7223c4af0373f5cd3337056d2dab32aa3a5caf"}, + {file = "pre_commit-3.0.0.tar.gz", hash = "sha256:de265f74325f0c3ff1a727a974449315ea9b11975cf6b02c11f26e50acfa48f1"}, ] [package.dependencies] @@ -2452,14 +2452,14 @@ plugins = ["importlib-metadata"] [[package]] name = "pymdown-extensions" -version = "9.9.1" +version = "9.9.2" description = "Extension pack for Python Markdown." category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "pymdown_extensions-9.9.1-py3-none-any.whl", hash = "sha256:8a8973933ab45b6fe8f5f8da1de25766356b1f91dee107bf4a34efd158dc340b"}, - {file = "pymdown_extensions-9.9.1.tar.gz", hash = "sha256:abed29926960bbb3b40f5ed5fa6375e29724d4e3cb86ced7c2bbd37ead1afeea"}, + {file = "pymdown_extensions-9.9.2-py3-none-any.whl", hash = "sha256:c3d804eb4a42b85bafb5f36436342a5ad38df03878bb24db8855a4aa8b08b765"}, + {file = "pymdown_extensions-9.9.2.tar.gz", hash = "sha256:ebb33069bafcb64d5f5988043331d4ea4929325dc678a6bcf247ddfcf96499f8"}, ] [package.dependencies] @@ -2826,28 +2826,28 @@ pyasn1 = ">=0.1.3" [[package]] name = "ruff" -version = "0.0.227" +version = "0.0.231" description = "An extremely fast Python linter, written in Rust." category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.0.227-py3-none-macosx_10_7_x86_64.whl", hash = "sha256:2571a607e099e8fdd9d5aaf7450942a722b0de70215129c7240c3512dd73a2c7"}, - {file = "ruff-0.0.227-py3-none-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:329a19f3fffbd4ac58f1e601c299f9970561b40c1c83bdd85c7233c04dd132b9"}, - {file = "ruff-0.0.227-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b2258a48901ac81cbefb971405c9baed7765fc6be3e4a939cdf4161a2e45e7f"}, - {file = "ruff-0.0.227-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cde152a5b29ed6ea33920d4a1e0bd57dd4ff854fcc4ec836e8d60fb42a5146ac"}, - {file = "ruff-0.0.227-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:091ce41b94e1c774dc6c89d10314fdba2f3646141ce9c7afea42f2943fc900da"}, - {file = "ruff-0.0.227-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:858869f6b1562472ded90c7de9d9cb9a1dac042200f2aba3d6fc42e92644a453"}, - {file = "ruff-0.0.227-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8494e55a7149b6ece0a63b7b3abb22babc0376580a2a03ee90b854961ed053b9"}, - {file = "ruff-0.0.227-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c22ac3899ce27e336a97520d978ce3a63d6a33f75c12fdd0aea0bb944fe279a"}, - {file = "ruff-0.0.227-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e117190dae6c3a7fe6386e8b6d18fe4e207c8abb3675f6b8d21a488ebc6018f"}, - {file = "ruff-0.0.227-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:2926a63c469da3a647195b3874a398fbcc1b703d8cea2e961747e5884b93c4b2"}, - {file = "ruff-0.0.227-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:79f9fe7d512e4fef9b448509cbdfe9ee67db17a0abd3f84c1e5d6efe8f544327"}, - {file = "ruff-0.0.227-py3-none-musllinux_1_2_i686.whl", hash = "sha256:956b9a806da5f8c1e5b54c933d6a1782a892849e401cfaa901d0e1f0a8542683"}, - {file = "ruff-0.0.227-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:f08ec3a4d9ecf70baee3922900d19098a56bf707410703411ea40e0e0db25fff"}, - {file = "ruff-0.0.227-py3-none-win32.whl", hash = "sha256:fbb2bb2a16041b192f10fee6ddab36f0ca847f0d33ca6a49128004ac1ba6d1ca"}, - {file = "ruff-0.0.227-py3-none-win_amd64.whl", hash = "sha256:59ee7ab9e610d43220ee12bc5f8845dddff0f857a48b08f630c87d337abcd5f0"}, - {file = "ruff-0.0.227.tar.gz", hash = "sha256:1da5eca99f4b35b8329391f0d5802b379c2672525a2526a2e0b64083e52adc03"}, + {file = "ruff-0.0.231-py3-none-macosx_10_7_x86_64.whl", hash = "sha256:3ec386c323d4faa4add9e891601c709a7bf55793eb11b9adab8514e77b9a8f46"}, + {file = "ruff-0.0.231-py3-none-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:d1517e587105a44c5e4cb17b10059d12bd5fefb22e54a7b52804323acd3de9e6"}, + {file = "ruff-0.0.231-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bde5ec76eb667b31729eff8dcc8adf1d1da894cc5827a33147c2b640ace5b54a"}, + {file = "ruff-0.0.231-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1aff23f080904003b664df97e301fe59714552b3c2c7e7213407547186be1618"}, + {file = "ruff-0.0.231-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f99b39496163880395d8dc8815445431c8feb94613738d67916984902811f7c4"}, + {file = "ruff-0.0.231-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:0ca593bb41c9ca363ed24c8985ae65faf483fc1f6831e9ca5dc5383f87737b2e"}, + {file = "ruff-0.0.231-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ef39e57d2cd21601c20c1861a5d580aa7f389aa5360403634ae354a14965b94b"}, + {file = "ruff-0.0.231-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:40bb1b071489523c18e4ca9a2b3f4e58fcf4d66f3707cdb6e706e44fa8e88abc"}, + {file = "ruff-0.0.231-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1d086a08ddda1b971ed875dd82b264b821c505687e1b71881b3d839feb22e5b"}, + {file = "ruff-0.0.231-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:1e39b1fbdb2147a000ca477111cb1f5929ec4dc75a499f9a929e4f5b8d2be763"}, + {file = "ruff-0.0.231-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:662cb063c90cb21f37e82ce6bd8b07a292d7c2718bf5926e2f9e1597791bdf20"}, + {file = "ruff-0.0.231-py3-none-musllinux_1_2_i686.whl", hash = "sha256:3f4c99e8e622c524b8e292c248f9f52eb84ede59b504904cddfc812005b0e8b5"}, + {file = "ruff-0.0.231-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:089c16bdfef873361328d22e9ef0dd6fd20566962d23661db3493f7e87ca5aed"}, + {file = "ruff-0.0.231-py3-none-win32.whl", hash = "sha256:4f5327669010b5d603a9176a37de862b3f0e7c60722f2bf9910d44f186e58f0f"}, + {file = "ruff-0.0.231-py3-none-win_amd64.whl", hash = "sha256:c3f47ecee98279366bc0cbcd3fa799641e7c8444cbc2be28fc5fb221a53b5730"}, + {file = "ruff-0.0.231.tar.gz", hash = "sha256:6f7e7a3251edece0bf37df83e3f0fa316a38b160e24fce7169440fa2a1eb4288"}, ] [[package]] @@ -3008,14 +3008,14 @@ stats = ["scipy (>=1.3)", "statsmodels (>=0.10)"] [[package]] name = "setuptools" -version = "66.1.0" +version = "66.1.1" description = "Easily download, build, install, upgrade, and uninstall Python packages" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "setuptools-66.1.0-py3-none-any.whl", hash = "sha256:fc19f9f62120a763300fd78e234b3cbd3417be098f08c156eaaf36420627e57b"}, - {file = "setuptools-66.1.0.tar.gz", hash = "sha256:78a02bdea8a5cb66dec1c507598c443bcc75562817d2556c1a17f7a344615bb4"}, + {file = "setuptools-66.1.1-py3-none-any.whl", hash = "sha256:6f590d76b713d5de4e49fe4fbca24474469f53c83632d5d0fd056f7ff7e8112b"}, + {file = "setuptools-66.1.1.tar.gz", hash = "sha256:ac4008d396bc9cd983ea483cb7139c0240a07bbc74ffb6232fceffedc6cf03a8"}, ] [package.extras] @@ -3207,31 +3207,31 @@ files = [ [[package]] name = "tensorflow-io-gcs-filesystem" -version = "0.29.0" +version = "0.30.0" description = "TensorFlow IO" category = "main" optional = false python-versions = ">=3.7, <3.12" files = [ - {file = "tensorflow_io_gcs_filesystem-0.29.0-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:d8eb242b118721c8a23d598af69c25ad450c1e18bd1cd7ef7e8274ae0e7781ca"}, - {file = "tensorflow_io_gcs_filesystem-0.29.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c826154e0c6bd9a1a0395a1b985976ac255a3d79d147d3eb10343b6d15710267"}, - {file = "tensorflow_io_gcs_filesystem-0.29.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9db8dc3f2c4ddfdf02f33a492600be35d0bca085aa12121a5feef173e6b5914e"}, - {file = "tensorflow_io_gcs_filesystem-0.29.0-cp310-cp310-win_amd64.whl", hash = "sha256:7ff4b18f1a74e1a56603fa204cf82b1af5b24ad18c579692c487b4fb4a2baec8"}, - {file = "tensorflow_io_gcs_filesystem-0.29.0-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:571fc6ba4960f3a749a362d487b60e248eb43f0abcfb0ace4f04ddb91ae04faf"}, - {file = "tensorflow_io_gcs_filesystem-0.29.0-cp311-cp311-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a6297b68677a17ce388594fcf76c70718b837dba59e858280898521a858a8e4c"}, - {file = "tensorflow_io_gcs_filesystem-0.29.0-cp311-cp311-win_amd64.whl", hash = "sha256:ff107ac28d56bdd4c50ac69b18cc237d3a9342be8c2d11e458e19a0fac31fb9d"}, - {file = "tensorflow_io_gcs_filesystem-0.29.0-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:6617054b8ac75cf2f19ec24ddf3a696a500758d1f755b847f3ba42aec6ad7b9e"}, - {file = "tensorflow_io_gcs_filesystem-0.29.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ec87a475a4024bc8c4427c6cbeba009fd76b1b95ad764755fdf958c234470acd"}, - {file = "tensorflow_io_gcs_filesystem-0.29.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:931e225b406d67d0a8a8f549242a0a1d173a02e0179d86b88351de19c393e06f"}, - {file = "tensorflow_io_gcs_filesystem-0.29.0-cp37-cp37m-win_amd64.whl", hash = "sha256:975b674d7816c08cf47a50cfc5b73a36ca0b3ef32d8e37a788b7cae38b9e1549"}, - {file = "tensorflow_io_gcs_filesystem-0.29.0-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:e114d672fc565985468d6a26a1e54e2f0002ab76c711f49a56d948ad05718c80"}, - {file = "tensorflow_io_gcs_filesystem-0.29.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:630372fe2f1c05b57c4ad0c9050b570bc67e474ec513cf046832f8889002fab7"}, - {file = "tensorflow_io_gcs_filesystem-0.29.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0736853c35030e027c0f9577f07355e5cd21463321008ef4ee8b390f913fdd6"}, - {file = "tensorflow_io_gcs_filesystem-0.29.0-cp38-cp38-win_amd64.whl", hash = "sha256:049b21d5056f57952b0450c2bac9c2bf2fabc4bbb571470abf0cba4243a41dfe"}, - {file = "tensorflow_io_gcs_filesystem-0.29.0-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:655af38843d83ef322db190d162e21060ca143935a04f4b64b29f60c1c4dc073"}, - {file = "tensorflow_io_gcs_filesystem-0.29.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8543e14b2f32771e7a7eca7a3d34a8fbdf1f4e9ae7d346bcacff011f43c693cb"}, - {file = "tensorflow_io_gcs_filesystem-0.29.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef5656932c1f4d4e4d366cdae469562344ecd38cd51de70ebf60e68ee0834da1"}, - {file = "tensorflow_io_gcs_filesystem-0.29.0-cp39-cp39-win_amd64.whl", hash = "sha256:bcb7405474ed136b3a2e2181a732968c52ba9f35a03fe296acc9f1ec4e7044ee"}, + {file = "tensorflow_io_gcs_filesystem-0.30.0-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:f5aa1aa0ec88b7d309ebf520c950ed12894ec1908c3d7335f080de9e16e88360"}, + {file = "tensorflow_io_gcs_filesystem-0.30.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5093c9afd1e7e5a8d23f878b8074ee50d25d2fb66269a350542d6d92d643b608"}, + {file = "tensorflow_io_gcs_filesystem-0.30.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:95812ed532f7b9087eb0cb4597dcc8443708b2698ba1c07367333233e20074ea"}, + {file = "tensorflow_io_gcs_filesystem-0.30.0-cp310-cp310-win_amd64.whl", hash = "sha256:ab82d9a39dcdad2f525840c42387e2f064666e8d3e65c46d64873ad8eaa92742"}, + {file = "tensorflow_io_gcs_filesystem-0.30.0-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:e4cea42fe5ab47cc6af7e146935489620ce2c4606a9483090bc9cac8f32ef111"}, + {file = "tensorflow_io_gcs_filesystem-0.30.0-cp311-cp311-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8d7d99a61d68d3ad750404b8f402fafceeae81bd6b8f14cb81a1313182411571"}, + {file = "tensorflow_io_gcs_filesystem-0.30.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd5ef0e38ed87696c2fbfbc9534a056484b6ee4ddd68967d644cc17e7d111018"}, + {file = "tensorflow_io_gcs_filesystem-0.30.0-cp311-cp311-win_amd64.whl", hash = "sha256:51f2ca3f4376b26d0e511c91a1468f089654a8736c76433404a8c4405c767d76"}, + {file = "tensorflow_io_gcs_filesystem-0.30.0-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:65f9cefcf52ef04caea1481faa0c3553b3cfd8ee65a01bcf7d9baf617361aaca"}, + {file = "tensorflow_io_gcs_filesystem-0.30.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cf2940b843c6f4d91d4abb0df181af80b4cb8c680f34ebed61082c1e388157f3"}, + {file = "tensorflow_io_gcs_filesystem-0.30.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c16dcee548a0aaff31793ac410a880a45a61401f1a1a8faee24f5ef506900796"}, + {file = "tensorflow_io_gcs_filesystem-0.30.0-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:e3bc68c76402b38a2486a0e2e710095c3eb6d6e84c131ad349f7ca034dfc345b"}, + {file = "tensorflow_io_gcs_filesystem-0.30.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f3cfcdd94de2cd4adffcb5659b95b2e5714e280c617b922c134b9d61b7f20429"}, + {file = "tensorflow_io_gcs_filesystem-0.30.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23eb36218b939e6a814cc4e4f4d9d4a8e2574d8589a5979e882f5f056a4264be"}, + {file = "tensorflow_io_gcs_filesystem-0.30.0-cp38-cp38-win_amd64.whl", hash = "sha256:86169a799752cf61c07d1a5a818e00d6233e3cb3ebe6bb144af5f0fed1dc2b89"}, + {file = "tensorflow_io_gcs_filesystem-0.30.0-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:649166ef120fa3af43e7550cb9f1c26ff54e41b0dcfc106ab13f92435fb9d21f"}, + {file = "tensorflow_io_gcs_filesystem-0.30.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b2eb2a48f0d31359603f49b813453e4532958db3ef686e2738396cba54b7dc28"}, + {file = "tensorflow_io_gcs_filesystem-0.30.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:49264b8a7b04e18d516ad07c2f75e660d4d607a6320d3f4a16e00c2bbecf4db4"}, + {file = "tensorflow_io_gcs_filesystem-0.30.0-cp39-cp39-win_amd64.whl", hash = "sha256:ed4244b6a2963972ca86bb2e1855b8b7dced99d12a60641221db4f0b8cd83e32"}, ] [package.extras] @@ -3270,21 +3270,21 @@ files = [ [[package]] name = "tifffile" -version = "2022.10.10" +version = "2023.1.23.1" description = "Read and write TIFF files" category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "tifffile-2022.10.10-py3-none-any.whl", hash = "sha256:87f3aee8a0d06b74655269a105de75c1958a24653e1930d523eb516100043503"}, - {file = "tifffile-2022.10.10.tar.gz", hash = "sha256:50b61ba943b866d191295bc38a00191c9fdab23ece063544c7f1a264e3f6aa8e"}, + {file = "tifffile-2023.1.23.1-py3-none-any.whl", hash = "sha256:2b626a8ee81b692e1fa5320201a4b70f1915d2567945e68665621a75a12b3730"}, + {file = "tifffile-2023.1.23.1.tar.gz", hash = "sha256:a3d0c149cc7faef796fd598856314f43fdcd0895c79c3cb662a38c1c1bd49572"}, ] [package.dependencies] -numpy = ">=1.19.2" +numpy = "*" [package.extras] -all = ["fsspec", "imagecodecs (>=2022.2.22)", "lxml", "matplotlib (>=3.3)", "zarr"] +all = ["defusedxml", "fsspec", "imagecodecs (>=2023.1.23)", "lxml", "matplotlib", "zarr"] [[package]] name = "tokenize-rt"