diff --git a/README.md b/README.md index f56cc23..97d6484 100755 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ Version 1.x documentation (deprecated): https://imctools.readthedocs.io Preferable way to install `imctools` is via official PyPI registry. Please define package version explicitly in order to avoid incompatibilities between v1.x and v2.x versions: ``` -pip install imctools==2.0.1 +pip install imctools==2.1.0 ``` In old IMC segmentation pipelines versions 1.x should be used! ``` diff --git a/docs/cli.html b/docs/cli.html index 879917c..0f2c305 100644 --- a/docs/cli.html +++ b/docs/cli.html @@ -3,7 +3,7 @@ - + imctools.cli API documentation @@ -268,7 +268,7 @@

Index

\ No newline at end of file diff --git a/docs/converters/exportacquisitioncsv.html b/docs/converters/exportacquisitioncsv.html index 75df0ad..577ee6d 100644 --- a/docs/converters/exportacquisitioncsv.html +++ b/docs/converters/exportacquisitioncsv.html @@ -3,7 +3,7 @@ - + imctools.converters.exportacquisitioncsv API documentation @@ -190,7 +190,7 @@

Index

\ No newline at end of file diff --git a/docs/converters/index.html b/docs/converters/index.html index 996bec1..0103604 100644 --- a/docs/converters/index.html +++ b/docs/converters/index.html @@ -3,7 +3,7 @@ - + imctools.converters API documentation @@ -93,7 +93,7 @@

Index

\ No newline at end of file diff --git a/docs/converters/mcdfolder2imcfolder.html b/docs/converters/mcdfolder2imcfolder.html index 845428d..a5dbd60 100644 --- a/docs/converters/mcdfolder2imcfolder.html +++ b/docs/converters/mcdfolder2imcfolder.html @@ -3,7 +3,7 @@ - + imctools.converters.mcdfolder2imcfolder API documentation @@ -98,11 +98,13 @@

Module imctools.converters.mcdfolder2imcfolder @@ -210,7 +212,7 @@

Index

\ No newline at end of file diff --git a/docs/converters/ome2analysis.html b/docs/converters/ome2analysis.html index 5f822b5..0a073c9 100644 --- a/docs/converters/ome2analysis.html +++ b/docs/converters/ome2analysis.html @@ -3,7 +3,7 @@ - + imctools.converters.ome2analysis API documentation @@ -495,7 +495,7 @@

Index

\ No newline at end of file diff --git a/docs/converters/ome2histocat.html b/docs/converters/ome2histocat.html index 29bd983..9e7d429 100644 --- a/docs/converters/ome2histocat.html +++ b/docs/converters/ome2histocat.html @@ -3,7 +3,7 @@ - + imctools.converters.ome2histocat API documentation @@ -369,7 +369,7 @@

Index

\ No newline at end of file diff --git a/docs/converters/v1tov2.html b/docs/converters/v1tov2.html index 2342420..3a079a3 100644 --- a/docs/converters/v1tov2.html +++ b/docs/converters/v1tov2.html @@ -3,7 +3,7 @@ - + imctools.converters.v1tov2 API documentation @@ -243,7 +243,7 @@

Index

\ No newline at end of file diff --git a/docs/data/acquisition.html b/docs/data/acquisition.html index 47f9776..29803f6 100644 --- a/docs/data/acquisition.html +++ b/docs/data/acquisition.html @@ -3,7 +3,7 @@ - + imctools.data.acquisition API documentation @@ -872,7 +872,7 @@

-

Generated by pdoc 0.8.4.

+

Generated by pdoc 0.8.5.

\ No newline at end of file diff --git a/docs/data/acquisitiondata.html b/docs/data/acquisitiondata.html index ad95e3b..f28a879 100644 --- a/docs/data/acquisitiondata.html +++ b/docs/data/acquisitiondata.html @@ -3,7 +3,7 @@ - + imctools.data.acquisitiondata API documentation @@ -900,7 +900,7 @@

-

Generated by pdoc 0.8.4.

+

Generated by pdoc 0.8.5.

\ No newline at end of file diff --git a/docs/data/channel.html b/docs/data/channel.html index abb5eeb..775c330 100644 --- a/docs/data/channel.html +++ b/docs/data/channel.html @@ -3,7 +3,7 @@ - + imctools.data.channel API documentation @@ -412,7 +412,7 @@

-

Generated by pdoc 0.8.4.

+

Generated by pdoc 0.8.5.

\ No newline at end of file diff --git a/docs/data/index.html b/docs/data/index.html index c1cc84d..6ce8726 100644 --- a/docs/data/index.html +++ b/docs/data/index.html @@ -3,7 +3,7 @@ - + imctools.data API documentation @@ -94,7 +94,7 @@

Index

\ No newline at end of file diff --git a/docs/data/panorama.html b/docs/data/panorama.html index 8237525..18d920d 100644 --- a/docs/data/panorama.html +++ b/docs/data/panorama.html @@ -3,7 +3,7 @@ - + imctools.data.panorama API documentation @@ -486,7 +486,7 @@

-

Generated by pdoc 0.8.4.

+

Generated by pdoc 0.8.5.

\ No newline at end of file diff --git a/docs/data/session.html b/docs/data/session.html index b1cd349..8a59ce3 100644 --- a/docs/data/session.html +++ b/docs/data/session.html @@ -3,7 +3,7 @@ - + imctools.data.session API documentation @@ -41,7 +41,7 @@

Module imctools.data.session

from imctools.data.channel import Channel, ChannelDict from imctools.data.panorama import Panorama, PanoramaDict from imctools.data.slide import Slide, SlideDict -from imctools.io.utils import META_CSV_SUFFIX +from imctools.io.utils import META_CSV_SUFFIX, sort_acquisition_channels if sys.version_info >= (3, 8): from typing import TypedDict # pylint: disable=no-name-in-module @@ -217,6 +217,9 @@

Module imctools.data.session

acquisition.channels[channel.id] = channel session.channels[channel.id] = channel + # Sort acquisitions channels by ORDER_NUMBER + sort_acquisition_channels(session) + return session @property @@ -236,7 +239,9 @@

Module imctools.data.session

import timeit tic = timeit.default_timer() - session = Session.load("/home/anton/Downloads/imc_from_mcd/20190919_FluidigmBrCa_SE_session.json") + session = Session.load( + "/home/anton/Downloads/imc_folder_v2/20170905_Fluidigmworkshopfinal_SEAJa/20170905_Fluidigmworkshopfinal_SEAJa_session.json" + ) print(timeit.default_timer() - tic)
@@ -428,6 +433,9 @@

Parameters

acquisition.channels[channel.id] = channel session.channels[channel.id] = channel + # Sort acquisitions channels by ORDER_NUMBER + sort_acquisition_channels(session) + return session @property @@ -685,7 +693,7 @@

-

Generated by pdoc 0.8.4.

+

Generated by pdoc 0.8.5.

\ No newline at end of file diff --git a/docs/data/slide.html b/docs/data/slide.html index dfd99c9..9ffc98f 100644 --- a/docs/data/slide.html +++ b/docs/data/slide.html @@ -3,7 +3,7 @@ - + imctools.data.slide API documentation @@ -491,7 +491,7 @@

-

Generated by pdoc 0.8.4.

+

Generated by pdoc 0.8.5.

\ No newline at end of file diff --git a/docs/index.html b/docs/index.html index ce499b2..30002f0 100644 --- a/docs/index.html +++ b/docs/index.html @@ -3,7 +3,7 @@ - + imctools API documentation @@ -49,7 +49,7 @@

Prerequisites

Installation

Preferable way to install imctools is via official PyPI registry. Please define package version explicitly in order to avoid incompatibilities between v1.x and v2.x versions:

-
pip install imctools==2.0.1
+
pip install imctools==2.1.0
 

In old IMC segmentation pipelines versions 1.x should be used!

pip install imctools==1.0.8
@@ -57,7 +57,7 @@ 

Installation

Usage of version 2.x

imctools is often used from Jupyter as part of the pre-processing pipeline, mainly using the converters wrapper functions. Please check the following example as a template.

Further imctools can be directly used as a module:

-
from imctools.io.mcd.mcdparser import McdParser
+
from imctools.io.mcd.mcdparser import McdParser
 
 fn_mcd = "/home/vitoz/Data/varia/201708_instrument_comp/mcd/20170815_imccomp_zoidberg_conc5_acm1.mcd"
 
@@ -93,7 +93,7 @@ 

Usage of version 2.x

parser.close()

Usage of previous version 1.x

-
import imctools.io.mcdparser as mcdparser
+
import imctools.io.mcdparser as mcdparser
 import imctools.io.txtparser as txtparser
 import imctools.io.ometiffparser as omeparser
 import imctools.io.mcdxmlparser as meta
@@ -140,7 +140,7 @@ 

Usage of previous version 1.x

__author__ = """Vito Zanotelli, Anton Rau""" __email__ = "vito.zanotelli@uzh.ch, anton.rau@uzh.ch" -__version__ = "2.0.1"
+__version__ = "2.1.0"
@@ -200,7 +200,7 @@

Index

\ No newline at end of file diff --git a/docs/io/errors.html b/docs/io/errors.html index 6a45207..47cab79 100644 --- a/docs/io/errors.html +++ b/docs/io/errors.html @@ -3,7 +3,7 @@ - + imctools.io.errors API documentation @@ -83,7 +83,7 @@

-

Generated by pdoc 0.8.4.

+

Generated by pdoc 0.8.5.

\ No newline at end of file diff --git a/docs/io/imc/imcparser.html b/docs/io/imc/imcparser.html index 425c10b..d42709c 100644 --- a/docs/io/imc/imcparser.html +++ b/docs/io/imc/imcparser.html @@ -3,7 +3,7 @@ - + imctools.io.imc.imcparser API documentation @@ -26,8 +26,7 @@

Module imctools.io.imc.imcparser

Expand source code -
import os
-from pathlib import Path
+
from pathlib import Path
 from typing import Union
 
 import tifffile
@@ -261,7 +260,7 @@ 

-

Generated by pdoc 0.8.4.

+

Generated by pdoc 0.8.5.

\ No newline at end of file diff --git a/docs/io/imc/imcwriter.html b/docs/io/imc/imcwriter.html index e4e7cdb..d99b2f3 100644 --- a/docs/io/imc/imcwriter.html +++ b/docs/io/imc/imcwriter.html @@ -3,7 +3,7 @@ - + imctools.io.imc.imcwriter API documentation @@ -392,7 +392,7 @@

-

Generated by pdoc 0.8.4.

+

Generated by pdoc 0.8.5.

\ No newline at end of file diff --git a/docs/io/imc/index.html b/docs/io/imc/index.html index 335c3e7..520cde5 100644 --- a/docs/io/imc/index.html +++ b/docs/io/imc/index.html @@ -3,7 +3,7 @@ - + imctools.io.imc API documentation @@ -64,7 +64,7 @@

Index

\ No newline at end of file diff --git a/docs/io/index.html b/docs/io/index.html index 7790220..8870d16 100644 --- a/docs/io/index.html +++ b/docs/io/index.html @@ -3,7 +3,7 @@ - + imctools.io API documentation @@ -84,7 +84,7 @@

Index

\ No newline at end of file diff --git a/docs/io/mcd/constants.html b/docs/io/mcd/constants.html index 0d0544c..8b12d2c 100644 --- a/docs/io/mcd/constants.html +++ b/docs/io/mcd/constants.html @@ -3,7 +3,7 @@ - + imctools.io.mcd.constants API documentation @@ -126,7 +126,7 @@

Index

\ No newline at end of file diff --git a/docs/io/mcd/index.html b/docs/io/mcd/index.html index 80a0f9c..6ebc6dc 100644 --- a/docs/io/mcd/index.html +++ b/docs/io/mcd/index.html @@ -3,7 +3,7 @@ - + imctools.io.mcd API documentation @@ -69,7 +69,7 @@

Index

\ No newline at end of file diff --git a/docs/io/mcd/mcdparser.html b/docs/io/mcd/mcdparser.html index 5ef5c03..62d5824 100644 --- a/docs/io/mcd/mcdparser.html +++ b/docs/io/mcd/mcdparser.html @@ -3,7 +3,7 @@ - + imctools.io.mcd.mcdparser API documentation @@ -323,9 +323,7 @@

Module imctools.io.mcd.mcdparser

tic = timeit.default_timer() parser = McdParser( - Path( - "/home/anton/Documents/IMC Workshop 2019/Data/iMC_workshop_2019/20190919_FluidigmBrCa_SE/20190919_FluidigmBrCa_SE.mcd" - ) + Path("/home/anton/Downloads/20170905_Fluidigmworkshopfinal_SEAJa/20170905_Fluidigmworkshopfinal_SEAJa.mcd") ) print(timeit.default_timer() - tic)

@@ -954,7 +952,7 @@

-

Generated by pdoc 0.8.4.

+

Generated by pdoc 0.8.5.

\ No newline at end of file diff --git a/docs/io/mcd/mcdxmlparser.html b/docs/io/mcd/mcdxmlparser.html index 67d6929..f644bb3 100644 --- a/docs/io/mcd/mcdxmlparser.html +++ b/docs/io/mcd/mcdxmlparser.html @@ -3,7 +3,7 @@ - + imctools.io.mcd.mcdxmlparser API documentation @@ -37,6 +37,7 @@

Module imctools.io.mcd.mcdxmlparser

import imctools.io.mcd.constants as const from imctools import __version__ from imctools.data import Acquisition, Channel, Panorama, Session, Slide +from imctools.io.utils import sort_acquisition_channels class McdXmlParser: @@ -197,6 +198,9 @@

Module imctools.io.mcd.mcdxmlparser

channel.acquisition = ac ac.channels[channel.id] = channel + # Sort acquisitions channels by ORDER_NUMBER + sort_acquisition_channels(session) + self._session = session @property @@ -400,6 +404,9 @@

Parameters

channel.acquisition = ac ac.channels[channel.id] = channel + # Sort acquisitions channels by ORDER_NUMBER + sort_acquisition_channels(session) + self._session = session @property @@ -493,7 +500,7 @@

-

Generated by pdoc 0.8.4.

+

Generated by pdoc 0.8.5.

\ No newline at end of file diff --git a/docs/io/ometiff/index.html b/docs/io/ometiff/index.html index 4b5ef31..d647827 100644 --- a/docs/io/ometiff/index.html +++ b/docs/io/ometiff/index.html @@ -3,7 +3,7 @@ - + imctools.io.ometiff API documentation @@ -59,7 +59,7 @@

Index

\ No newline at end of file diff --git a/docs/io/ometiff/ometiffparser.html b/docs/io/ometiff/ometiffparser.html index c094b27..5da870d 100644 --- a/docs/io/ometiff/ometiffparser.html +++ b/docs/io/ometiff/ometiffparser.html @@ -3,7 +3,7 @@ - + imctools.io.ometiff.ometiffparser API documentation @@ -169,7 +169,7 @@

Module imctools.io.ometiff.ometiffparser

tic = timeit.default_timer() with OmeTiffParser( - "/home/anton/Downloads/imc_folder/20170905_Fluidigmworkshopfinal_SEAJa/20170905_Fluidigmworkshopfinal_SEAJa_s0_a0_ac.ome.tiff" + "/home/anton/Downloads/imc_folder_v2/20170905_Fluidigmworkshopfinal_SEAJa/20170905_Fluidigmworkshopfinal_SEAJa_s0_a0_ac.ome.tiff" ) as parser: ac = parser.get_acquisition_data() pass @@ -448,7 +448,7 @@

-

Generated by pdoc 0.8.4.

+

Generated by pdoc 0.8.5.

\ No newline at end of file diff --git a/docs/io/txt/index.html b/docs/io/txt/index.html index 48c4b58..f3f56ab 100644 --- a/docs/io/txt/index.html +++ b/docs/io/txt/index.html @@ -3,7 +3,7 @@ - + imctools.io.txt API documentation @@ -59,7 +59,7 @@

Index

\ No newline at end of file diff --git a/docs/io/txt/txtparser.html b/docs/io/txt/txtparser.html index 1db00d1..966d50a 100644 --- a/docs/io/txt/txtparser.html +++ b/docs/io/txt/txtparser.html @@ -3,7 +3,7 @@ - + imctools.io.txt.txtparser API documentation @@ -142,9 +142,9 @@

Module imctools.io.txt.txtparser

dtype={c: np.float32 for c in header_cols[3:]}, ) data = df.values - names = [col for col in header_cols if col not in ("Start_push", "End_push", "Pushes_duration")] - channel_names = TxtParser._extract_channel_names(names) - channel_labels = TxtParser._extract_channel_labels(names) + channel_labels = [col for col in header_cols if col not in ("Start_push", "End_push", "Pushes_duration")] + channel_names = channel_labels[:] + channel_names[3:] = TxtParser._extract_channel_names(channel_names[3:]) return data, channel_names, channel_labels @staticmethod @@ -157,31 +157,31 @@

Module imctools.io.txt.txtparser

names CSV file column names. """ - r = re.compile(r"^.*\((.*?)\)[^(]*$") - r_number = re.compile(r"\d+") - result = [] - for name in names: - n = ( - r.sub(r"\g<1>", name.strip("\r").strip("\n").replace("(", "").replace(")", "").strip()) - .rstrip("di") - .rstrip("Di") - ) - metal_name = r_number.sub("", n) - metal_mass = n.replace(metal_name, "") - metal_mass = f"({metal_mass})" if metal_mass != "" else "" - result.append(f"{metal_name}{metal_mass}") - return result + # find which version it is + names = [n.strip("\r") for n in names] + names = [n.strip("\n") for n in names] + names = [n.strip() for n in names] + # string of sort asbsdf(mn123di) + if names[0].rfind(")") == (len(names[0]) - 1): + # get m123di - @staticmethod - def _extract_channel_labels(names: Sequence[str]): - """Returns channel labels in Fluidigm compatible format, i.e. Myelope_276((2669))Y89(Y89Di) or 80ArAr(ArAr80Di). + names = [n[(n.rfind("(") + 1) : (n.rfind(")"))] for n in names] - Parameters - ---------- - names - CSV file column names. - """ - return [name.strip("\r").strip("\n").strip() for name in names] + # string of sort aasbas_mn123 + elif "_" in names[0]: + names = [n.split("_")[-1] for n in names] + + # else do nothing + else: + return names + + # else there is the bug where (123123di) + names = [n.rstrip("di") for n in names] + names = [n.rstrip("Di") for n in names] + if names[0][0].isdigit(): + names = [n[(int(len(n) / 2)) :] for n in names] + + return names def __enter__(self): return self @@ -196,7 +196,7 @@

Module imctools.io.txt.txtparser

tic = timeit.default_timer() with TxtParser( - "/home/anton/Documents/IMC Workshop 2019/Data/iMC_workshop_2019/20190919_FluidigmBrCa_SE/20190919_FluidigmBrCa_SE_BreastCa_1_1.txt" + "/home/anton/Downloads/20170905_Fluidigmworkshopfinal_SEAJa/Site1_0_ROI_1_upperleft_0.txt" ) as parser: ac = parser.get_acquisition_data() pass @@ -326,9 +326,9 @@

Classes

dtype={c: np.float32 for c in header_cols[3:]}, ) data = df.values - names = [col for col in header_cols if col not in ("Start_push", "End_push", "Pushes_duration")] - channel_names = TxtParser._extract_channel_names(names) - channel_labels = TxtParser._extract_channel_labels(names) + channel_labels = [col for col in header_cols if col not in ("Start_push", "End_push", "Pushes_duration")] + channel_names = channel_labels[:] + channel_names[3:] = TxtParser._extract_channel_names(channel_names[3:]) return data, channel_names, channel_labels @staticmethod @@ -341,31 +341,31 @@

Classes

names CSV file column names. """ - r = re.compile(r"^.*\((.*?)\)[^(]*$") - r_number = re.compile(r"\d+") - result = [] - for name in names: - n = ( - r.sub(r"\g<1>", name.strip("\r").strip("\n").replace("(", "").replace(")", "").strip()) - .rstrip("di") - .rstrip("Di") - ) - metal_name = r_number.sub("", n) - metal_mass = n.replace(metal_name, "") - metal_mass = f"({metal_mass})" if metal_mass != "" else "" - result.append(f"{metal_name}{metal_mass}") - return result + # find which version it is + names = [n.strip("\r") for n in names] + names = [n.strip("\n") for n in names] + names = [n.strip() for n in names] + # string of sort asbsdf(mn123di) + if names[0].rfind(")") == (len(names[0]) - 1): + # get m123di - @staticmethod - def _extract_channel_labels(names: Sequence[str]): - """Returns channel labels in Fluidigm compatible format, i.e. Myelope_276((2669))Y89(Y89Di) or 80ArAr(ArAr80Di). + names = [n[(n.rfind("(") + 1) : (n.rfind(")"))] for n in names] - Parameters - ---------- - names - CSV file column names. - """ - return [name.strip("\r").strip("\n").strip() for name in names] + # string of sort aasbas_mn123 + elif "_" in names[0]: + names = [n.split("_")[-1] for n in names] + + # else do nothing + else: + return names + + # else there is the bug where (123123di) + names = [n.rstrip("di") for n in names] + names = [n.rstrip("Di") for n in names] + if names[0][0].isdigit(): + names = [n[(int(len(n) / 2)) :] for n in names] + + return names def __enter__(self): return self @@ -483,7 +483,7 @@

-

Generated by pdoc 0.8.4.

+

Generated by pdoc 0.8.5.

\ No newline at end of file diff --git a/docs/io/utils.html b/docs/io/utils.html index 2f2a306..546a5c1 100644 --- a/docs/io/utils.html +++ b/docs/io/utils.html @@ -3,7 +3,7 @@ - + imctools.io.utils API documentation @@ -26,12 +26,17 @@

Module imctools.io.utils

Expand source code -
import xml.etree.ElementTree as ET
-from typing import Optional, Sequence
+
from __future__ import annotations
+
+import xml.etree.ElementTree as ET
+from typing import TYPE_CHECKING, Optional, Sequence
 
 import numpy as np
 import xtiff
 
+if TYPE_CHECKING:
+    from imctools.data import Session
+
 SESSION_JSON_SUFFIX = "_session.json"
 SCHEMA_XML_SUFFIX = "_schema.xml"
 OME_TIFF_SUFFIX = "_ac.ome.tiff"
@@ -127,7 +132,18 @@ 

Module imctools.io.utils

ET.SubElement(original_metadata_element, "Key").text = "MCD-XML" ET.SubElement(original_metadata_element, "Value").text = xml_metadata.replace("\r\n", "") - return element_tree
+ return element_tree + + +def sort_acquisition_channels(session: Session): + """Sort entries of acquisition channels dictionary by channel order number""" + for a in session.acquisitions.values(): + ordered_dict = dict() + ac_channels = list(a.channels.values()) + ac_channels.sort(key=lambda x: x.order_number) + for c in ac_channels: + ordered_dict[c.id] = c + a.channels = ordered_dict

@@ -138,7 +154,7 @@

Module imctools.io.utils

Functions

-def get_ome_xml(img: numpy.ndarray, image_name: Union[str, NoneType], channel_names: Union[Sequence[str], NoneType], big_endian: bool, pixel_size: Union[float, NoneType], pixel_depth: Union[float, NoneType], creator: Union[str, NoneType] = None, acquisition_date: Union[str, NoneType] = None, channel_fluors: Union[Sequence[str], NoneType] = None, xml_metadata: Union[str, NoneType] = None, **ome_xml_kwargs) ‑> xml.etree.ElementTree.ElementTree +def get_ome_xml(img: np.ndarray, image_name: Optional[str], channel_names: Optional[Sequence[str]], big_endian: bool, pixel_size: Optional[float], pixel_depth: Optional[float], creator: Optional[str] = None, acquisition_date: Optional[str] = None, channel_fluors: Optional[Sequence[str]] = None, xml_metadata: Optional[str] = None, **ome_xml_kwargs) ‑> xml.etree.ElementTree.ElementTree

Helper function for xtiff library to get a proper OME-TIFF XML

@@ -194,7 +210,7 @@

Functions

-def reshape_long_2_cyx(data: numpy.memmap, is_sorted: bool = True, shape: Union[numpy.ndarray, NoneType] = None, channel_indices: Union[Sequence[int], NoneType] = None) +def reshape_long_2_cyx(data: np.memmap, is_sorted: bool = True, shape: Optional[np.ndarray] = None, channel_indices: Optional[Sequence[int]] = None)

Reshape data from long format into cyx format (channels, y, x).

@@ -253,6 +269,26 @@

Parameters

return NotImplemented
+
+def sort_acquisition_channels(session: Session) +
+
+

Sort entries of acquisition channels dictionary by channel order number

+
+ +Expand source code + +
def sort_acquisition_channels(session: Session):
+    """Sort entries of acquisition channels dictionary by channel order number"""
+    for a in session.acquisitions.values():
+        ordered_dict = dict()
+        ac_channels = list(a.channels.values())
+        ac_channels.sort(key=lambda x: x.order_number)
+        for c in ac_channels:
+            ordered_dict[c.id] = c
+        a.channels = ordered_dict
+
+
@@ -273,13 +309,14 @@

Index

\ No newline at end of file diff --git a/imctools/__init__.py b/imctools/__init__.py index 8cfd016..05fb436 100644 --- a/imctools/__init__.py +++ b/imctools/__init__.py @@ -6,4 +6,4 @@ __author__ = """Vito Zanotelli, Anton Rau""" __email__ = "vito.zanotelli@uzh.ch, anton.rau@uzh.ch" -__version__ = "2.0.1" +__version__ = "2.1.0" diff --git a/imctools/converters/mcdfolder2imcfolder.py b/imctools/converters/mcdfolder2imcfolder.py index c8b680b..a37d80e 100644 --- a/imctools/converters/mcdfolder2imcfolder.py +++ b/imctools/converters/mcdfolder2imcfolder.py @@ -70,11 +70,13 @@ def mcdfolder_to_imcfolder(input: Union[str, Path], output_folder: Union[str, Pa tic = timeit.default_timer() mcdfolder_to_imcfolder( - Path("/home/anton/Downloads/20170905_Fluidigmworkshopfinal_SEAJa.zip"), + # Path("/home/anton/Downloads/20170905_Fluidigmworkshopfinal_SEAJa.zip"), + "/home/anton/Downloads/20170905_Fluidigmworkshopfinal_SEAJa", + # "/home/anton/Documents/merrick/IMC/20200904_MS_XRF_epithelial_panel_4_titration.zip", # "/home/anton/Documents/IMC Workshop 2019/Data/iMC_workshop_2019/20190919_FluidigmBrCa_SE", # "/home/anton/Downloads/test", # "/home/anton/Data/ForAnton/20200123_IMMUcan_reproducibility_day1_sl1_cp_panel_1_1.06.zip", - Path("/home/anton/Downloads/imc_folder"), + Path("/home/anton/Downloads/imc_folder_v2"), ) print(timeit.default_timer() - tic) diff --git a/imctools/data/session.py b/imctools/data/session.py index 2285f41..fd612af 100644 --- a/imctools/data/session.py +++ b/imctools/data/session.py @@ -13,7 +13,7 @@ from imctools.data.channel import Channel, ChannelDict from imctools.data.panorama import Panorama, PanoramaDict from imctools.data.slide import Slide, SlideDict -from imctools.io.utils import META_CSV_SUFFIX +from imctools.io.utils import META_CSV_SUFFIX, sort_acquisition_channels if sys.version_info >= (3, 8): from typing import TypedDict # pylint: disable=no-name-in-module @@ -189,6 +189,9 @@ def _rebuild_object_tree(data: SessionDict): acquisition.channels[channel.id] = channel session.channels[channel.id] = channel + # Sort acquisitions channels by ORDER_NUMBER + sort_acquisition_channels(session) + return session @property @@ -208,5 +211,7 @@ def __repr__(self): import timeit tic = timeit.default_timer() - session = Session.load("/home/anton/Downloads/imc_from_mcd/20190919_FluidigmBrCa_SE_session.json") + session = Session.load( + "/home/anton/Downloads/imc_folder_v2/20170905_Fluidigmworkshopfinal_SEAJa/20170905_Fluidigmworkshopfinal_SEAJa_session.json" + ) print(timeit.default_timer() - tic) diff --git a/imctools/io/imc/imcparser.py b/imctools/io/imc/imcparser.py index c1c2b9f..ff01e8f 100644 --- a/imctools/io/imc/imcparser.py +++ b/imctools/io/imc/imcparser.py @@ -1,4 +1,3 @@ -import os from pathlib import Path from typing import Union diff --git a/imctools/io/mcd/mcdparser.py b/imctools/io/mcd/mcdparser.py index f53f3ed..041ed0d 100644 --- a/imctools/io/mcd/mcdparser.py +++ b/imctools/io/mcd/mcdparser.py @@ -295,9 +295,7 @@ def __exit__(self, type, value, traceback): tic = timeit.default_timer() parser = McdParser( - Path( - "/home/anton/Documents/IMC Workshop 2019/Data/iMC_workshop_2019/20190919_FluidigmBrCa_SE/20190919_FluidigmBrCa_SE.mcd" - ) + Path("/home/anton/Downloads/20170905_Fluidigmworkshopfinal_SEAJa/20170905_Fluidigmworkshopfinal_SEAJa.mcd") ) print(timeit.default_timer() - tic) diff --git a/imctools/io/mcd/mcdxmlparser.py b/imctools/io/mcd/mcdxmlparser.py index 54e8de4..bff8638 100644 --- a/imctools/io/mcd/mcdxmlparser.py +++ b/imctools/io/mcd/mcdxmlparser.py @@ -9,6 +9,7 @@ import imctools.io.mcd.constants as const from imctools import __version__ from imctools.data import Acquisition, Channel, Panorama, Session, Slide +from imctools.io.utils import sort_acquisition_channels class McdXmlParser: @@ -169,6 +170,9 @@ def __init__(self, mcd_xml: str, source_path: str, process_namespaces=False): channel.acquisition = ac ac.channels[channel.id] = channel + # Sort acquisitions channels by ORDER_NUMBER + sort_acquisition_channels(session) + self._session = session @property diff --git a/imctools/io/ometiff/ometiffparser.py b/imctools/io/ometiff/ometiffparser.py index 1038db0..d7a097d 100644 --- a/imctools/io/ometiff/ometiffparser.py +++ b/imctools/io/ometiff/ometiffparser.py @@ -141,7 +141,7 @@ def __exit__(self, type, value, traceback): tic = timeit.default_timer() with OmeTiffParser( - "/home/anton/Downloads/imc_folder/20170905_Fluidigmworkshopfinal_SEAJa/20170905_Fluidigmworkshopfinal_SEAJa_s0_a0_ac.ome.tiff" + "/home/anton/Downloads/imc_folder_v2/20170905_Fluidigmworkshopfinal_SEAJa/20170905_Fluidigmworkshopfinal_SEAJa_s0_a0_ac.ome.tiff" ) as parser: ac = parser.get_acquisition_data() pass diff --git a/imctools/io/txt/txtparser.py b/imctools/io/txt/txtparser.py index 1316d4e..779dba3 100644 --- a/imctools/io/txt/txtparser.py +++ b/imctools/io/txt/txtparser.py @@ -114,9 +114,9 @@ def _parse_csv(filepath: Path): dtype={c: np.float32 for c in header_cols[3:]}, ) data = df.values - names = [col for col in header_cols if col not in ("Start_push", "End_push", "Pushes_duration")] - channel_names = TxtParser._extract_channel_names(names) - channel_labels = TxtParser._extract_channel_labels(names) + channel_labels = [col for col in header_cols if col not in ("Start_push", "End_push", "Pushes_duration")] + channel_names = channel_labels[:] + channel_names[3:] = TxtParser._extract_channel_names(channel_names[3:]) return data, channel_names, channel_labels @staticmethod @@ -129,31 +129,31 @@ def _extract_channel_names(names: Sequence[str]): names CSV file column names. """ - r = re.compile(r"^.*\((.*?)\)[^(]*$") - r_number = re.compile(r"\d+") - result = [] - for name in names: - n = ( - r.sub(r"\g<1>", name.strip("\r").strip("\n").replace("(", "").replace(")", "").strip()) - .rstrip("di") - .rstrip("Di") - ) - metal_name = r_number.sub("", n) - metal_mass = n.replace(metal_name, "") - metal_mass = f"({metal_mass})" if metal_mass != "" else "" - result.append(f"{metal_name}{metal_mass}") - return result + # find which version it is + names = [n.strip("\r") for n in names] + names = [n.strip("\n") for n in names] + names = [n.strip() for n in names] + # string of sort asbsdf(mn123di) + if names[0].rfind(")") == (len(names[0]) - 1): + # get m123di - @staticmethod - def _extract_channel_labels(names: Sequence[str]): - """Returns channel labels in Fluidigm compatible format, i.e. Myelope_276((2669))Y89(Y89Di) or 80ArAr(ArAr80Di). + names = [n[(n.rfind("(") + 1) : (n.rfind(")"))] for n in names] - Parameters - ---------- - names - CSV file column names. - """ - return [name.strip("\r").strip("\n").strip() for name in names] + # string of sort aasbas_mn123 + elif "_" in names[0]: + names = [n.split("_")[-1] for n in names] + + # else do nothing + else: + return names + + # else there is the bug where (123123di) + names = [n.rstrip("di") for n in names] + names = [n.rstrip("Di") for n in names] + if names[0][0].isdigit(): + names = [n[(int(len(n) / 2)) :] for n in names] + + return names def __enter__(self): return self @@ -168,7 +168,7 @@ def __exit__(self, type, value, traceback): tic = timeit.default_timer() with TxtParser( - "/home/anton/Documents/IMC Workshop 2019/Data/iMC_workshop_2019/20190919_FluidigmBrCa_SE/20190919_FluidigmBrCa_SE_BreastCa_1_1.txt" + "/home/anton/Downloads/20170905_Fluidigmworkshopfinal_SEAJa/Site1_0_ROI_1_upperleft_0.txt" ) as parser: ac = parser.get_acquisition_data() pass diff --git a/imctools/io/utils.py b/imctools/io/utils.py index 2755cce..3adc36f 100644 --- a/imctools/io/utils.py +++ b/imctools/io/utils.py @@ -1,9 +1,14 @@ +from __future__ import annotations + import xml.etree.ElementTree as ET -from typing import Optional, Sequence +from typing import TYPE_CHECKING, Optional, Sequence import numpy as np import xtiff +if TYPE_CHECKING: + from imctools.data import Session + SESSION_JSON_SUFFIX = "_session.json" SCHEMA_XML_SUFFIX = "_schema.xml" OME_TIFF_SUFFIX = "_ac.ome.tiff" @@ -100,3 +105,14 @@ def get_ome_xml( ET.SubElement(original_metadata_element, "Value").text = xml_metadata.replace("\r\n", "") return element_tree + + +def sort_acquisition_channels(session: Session): + """Sort entries of acquisition channels dictionary by channel order number""" + for a in session.acquisitions.values(): + ordered_dict = dict() + ac_channels = list(a.channels.values()) + ac_channels.sort(key=lambda x: x.order_number) + for c in ac_channels: + ordered_dict[c.id] = c + a.channels = ordered_dict diff --git a/poetry.lock b/poetry.lock index cd4e21b..a43989c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,69 +1,65 @@ [[package]] -category = "dev" -description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." name = "appdirs" +version = "1.4.4" +description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +category = "dev" optional = false python-versions = "*" -version = "1.4.4" [[package]] -category = "dev" -description = "An abstract syntax tree for Python with inference support." name = "astroid" +version = "2.4.2" +description = "An abstract syntax tree for Python with inference support." +category = "dev" optional = false python-versions = ">=3.5" -version = "2.4.2" [package.dependencies] lazy-object-proxy = ">=1.4.0,<1.5.0" six = ">=1.12,<2.0" +typed-ast = {version = ">=1.4.0,<1.5", markers = "implementation_name == \"cpython\" and python_version < \"3.8\""} wrapt = ">=1.11,<2.0" -[package.dependencies.typed-ast] -python = "<3.8" -version = ">=1.4.0,<1.5" - [[package]] -category = "dev" -description = "Atomic file writes." -marker = "sys_platform == \"win32\"" name = "atomicwrites" +version = "1.4.0" +description = "Atomic file writes." +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "1.4.0" [[package]] -category = "dev" -description = "Classes Without Boilerplate" name = "attrs" +version = "20.2.0" +description = "Classes Without Boilerplate" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "19.3.0" [package.extras] -azure-pipelines = ["coverage", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface", "pytest-azurepipelines"] -dev = ["coverage", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface", "sphinx", "pre-commit"] -docs = ["sphinx", "zope.interface"] -tests = ["coverage", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface"] +dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface", "sphinx", "sphinx-rtd-theme", "pre-commit"] +docs = ["sphinx", "sphinx-rtd-theme", "zope.interface"] +tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface"] +tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six"] [[package]] -category = "dev" -description = "Removes unused imports and unused variables" name = "autoflake" +version = "1.4" +description = "Removes unused imports and unused variables" +category = "dev" optional = false python-versions = "*" -version = "1.3.1" [package.dependencies] pyflakes = ">=1.1.0" [[package]] -category = "dev" -description = "The uncompromising code formatter." name = "black" +version = "19.10b0" +description = "The uncompromising code formatter." +category = "dev" optional = false python-versions = ">=3.6" -version = "19.10b0" [package.dependencies] appdirs = "*" @@ -78,62 +74,58 @@ typed-ast = ">=1.4.0" d = ["aiohttp (>=3.3.2)", "aiohttp-cors"] [[package]] -category = "dev" -description = "Version-bump your software with a single command!" name = "bump2version" +version = "1.0.1" +description = "Version-bump your software with a single command!" +category = "dev" optional = false python-versions = ">=3.5" -version = "1.0.0" [[package]] -category = "dev" -description = "Composable command line interface toolkit" name = "click" +version = "7.1.2" +description = "Composable command line interface toolkit" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -version = "7.1.2" [[package]] -category = "dev" -description = "Cross-platform colored terminal text." -marker = "sys_platform == \"win32\"" name = "colorama" +version = "0.4.4" +description = "Cross-platform colored terminal text." +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -version = "0.4.3" [[package]] -category = "dev" -description = "Code coverage measurement for Python" name = "coverage" +version = "4.4.2" +description = "Code coverage measurement for Python" +category = "dev" optional = false python-versions = "*" -version = "4.4.2" [[package]] -category = "dev" -description = "the modular source code checker: pep8 pyflakes and co" name = "flake8" +version = "3.8.4" +description = "the modular source code checker: pep8 pyflakes and co" +category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" -version = "3.8.3" [package.dependencies] +importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} mccabe = ">=0.6.0,<0.7.0" pycodestyle = ">=2.6.0a1,<2.7.0" pyflakes = ">=2.2.0,<2.3.0" -[package.dependencies.importlib-metadata] -python = "<3.8" -version = "*" - [[package]] -category = "main" -description = "Image transformation, compression, and decompression codecs" name = "imagecodecs" +version = "2020.5.30" +description = "Image transformation, compression, and decompression codecs" +category = "main" optional = false python-versions = ">=3.6" -version = "2020.5.30" [package.dependencies] numpy = ">=1.15.1" @@ -142,13 +134,12 @@ numpy = ">=1.15.1" all = ["matplotlib (>=3.1)", "tifffile (>=2020.5.25)"] [[package]] -category = "dev" -description = "Read metadata from Python packages" -marker = "python_version < \"3.8\"" name = "importlib-metadata" +version = "2.0.0" +description = "Read metadata from Python packages" +category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" -version = "1.7.0" [package.dependencies] zipp = ">=0.5" @@ -158,20 +149,20 @@ docs = ["sphinx", "rst.linker"] testing = ["packaging", "pep517", "importlib-resources (>=1.3)"] [[package]] -category = "dev" -description = "iniconfig: brain-dead simple config-ini parsing" name = "iniconfig" +version = "1.1.1" +description = "iniconfig: brain-dead simple config-ini parsing" +category = "dev" optional = false python-versions = "*" -version = "1.0.1" [[package]] -category = "dev" -description = "A Python utility / library to sort Python imports." name = "isort" +version = "4.3.21" +description = "A Python utility / library to sort Python imports." +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "4.3.21" [package.extras] pipfile = ["pipreqs", "requirementslib"] @@ -180,20 +171,20 @@ requirements = ["pipreqs", "pip-api"] xdg_home = ["appdirs (>=1.4.0)"] [[package]] -category = "dev" -description = "A fast and thorough lazy object proxy." name = "lazy-object-proxy" +version = "1.4.3" +description = "A fast and thorough lazy object proxy." +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "1.4.3" [[package]] -category = "dev" -description = "A super-fast templating language that borrows the best ideas from the existing templating languages." name = "mako" +version = "1.1.3" +description = "A super-fast templating language that borrows the best ideas from the existing templating languages." +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "1.1.3" [package.dependencies] MarkupSafe = ">=0.9.2" @@ -203,52 +194,42 @@ babel = ["babel"] lingua = ["lingua"] [[package]] -category = "dev" -description = "Python implementation of Markdown." name = "markdown" +version = "3.3.1" +description = "Python implementation of Markdown." +category = "dev" optional = false -python-versions = ">=3.5" -version = "3.2.2" +python-versions = ">=3.6" [package.dependencies] -[package.dependencies.importlib-metadata] -python = "<3.8" -version = "*" +importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} [package.extras] testing = ["coverage", "pyyaml"] [[package]] -category = "dev" -description = "Safely add untrusted strings to HTML/XML markup." name = "markupsafe" +version = "1.1.1" +description = "Safely add untrusted strings to HTML/XML markup." +category = "dev" optional = false python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*" -version = "1.1.1" [[package]] -category = "dev" -description = "McCabe checker, plugin for flake8" name = "mccabe" -optional = false -python-versions = "*" version = "0.6.1" - -[[package]] +description = "McCabe checker, plugin for flake8" category = "dev" -description = "More routines for operating on iterables, beyond itertools" -name = "more-itertools" optional = false -python-versions = ">=3.5" -version = "8.4.0" +python-versions = "*" [[package]] -category = "dev" -description = "Optional static typing for Python" name = "mypy" +version = "0.790" +description = "Optional static typing for Python" +category = "dev" optional = false python-versions = ">=3.5" -version = "0.782" [package.dependencies] mypy-extensions = ">=0.4.3,<0.5.0" @@ -259,40 +240,40 @@ typing-extensions = ">=3.7.4" dmypy = ["psutil (>=4.0)"] [[package]] -category = "dev" -description = "Experimental type system extensions for programs checked with the mypy typechecker." name = "mypy-extensions" +version = "0.4.3" +description = "Experimental type system extensions for programs checked with the mypy typechecker." +category = "dev" optional = false python-versions = "*" -version = "0.4.3" [[package]] -category = "main" -description = "NumPy is the fundamental package for array computing with Python." name = "numpy" +version = "1.19.2" +description = "NumPy is the fundamental package for array computing with Python." +category = "main" optional = false python-versions = ">=3.6" -version = "1.19.1" [[package]] -category = "main" -description = "Core utilities for Python packages" name = "packaging" +version = "20.4" +description = "Core utilities for Python packages" +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "20.4" [package.dependencies] pyparsing = ">=2.0.2" six = "*" [[package]] -category = "main" -description = "Powerful data structures for data analysis, time series, and statistics" name = "pandas" +version = "1.1.3" +description = "Powerful data structures for data analysis, time series, and statistics" +category = "main" optional = false python-versions = ">=3.6.1" -version = "1.1.0" [package.dependencies] numpy = ">=1.15.4" @@ -303,122 +284,116 @@ pytz = ">=2017.2" test = ["pytest (>=4.0.2)", "pytest-xdist", "hypothesis (>=3.58)"] [[package]] -category = "dev" -description = "Utility library for gitignore style pattern matching of file paths." name = "pathspec" +version = "0.8.0" +description = "Utility library for gitignore style pattern matching of file paths." +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -version = "0.8.0" [[package]] -category = "dev" -description = "Auto-generate API documentation for Python projects." name = "pdoc3" +version = "0.8.5" +description = "Auto-generate API documentation for Python projects." +category = "dev" optional = false python-versions = ">= 3.5" -version = "0.8.4" [package.dependencies] mako = "*" markdown = ">=3.0" [[package]] -category = "dev" -description = "plugin and hook calling mechanisms for python" name = "pluggy" +version = "0.13.1" +description = "plugin and hook calling mechanisms for python" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "0.13.1" [package.dependencies] -[package.dependencies.importlib-metadata] -python = "<3.8" -version = ">=0.12" +importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} [package.extras] dev = ["pre-commit", "tox"] [[package]] -category = "dev" -description = "library with cross-python path, ini-parsing, io, code, log facilities" name = "py" +version = "1.9.0" +description = "library with cross-python path, ini-parsing, io, code, log facilities" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "1.9.0" [[package]] -category = "dev" -description = "Python style guide checker" name = "pycodestyle" +version = "2.6.0" +description = "Python style guide checker" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "2.6.0" [[package]] -category = "dev" -description = "passive checker of Python programs" name = "pyflakes" +version = "2.2.0" +description = "passive checker of Python programs" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "2.2.0" [[package]] -category = "dev" -description = "python code static checker" name = "pylint" +version = "2.6.0" +description = "python code static checker" +category = "dev" optional = false python-versions = ">=3.5.*" -version = "2.5.3" [package.dependencies] astroid = ">=2.4.0,<=2.5" -colorama = "*" -isort = ">=4.2.5,<5" +colorama = {version = "*", markers = "sys_platform == \"win32\""} +isort = ">=4.2.5,<6" mccabe = ">=0.6,<0.7" toml = ">=0.7.1" [[package]] -category = "main" -description = "Python parsing module" name = "pyparsing" +version = "2.4.7" +description = "Python parsing module" +category = "main" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" -version = "2.4.7" [[package]] -category = "dev" -description = "pytest: simple powerful testing with Python" name = "pytest" +version = "6.1.1" +description = "pytest: simple powerful testing with Python" +category = "dev" optional = false python-versions = ">=3.5" -version = "6.0.1" [package.dependencies] -atomicwrites = ">=1.0" +atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""} attrs = ">=17.4.0" -colorama = "*" +colorama = {version = "*", markers = "sys_platform == \"win32\""} +importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} iniconfig = "*" -more-itertools = ">=4.0.0" packaging = "*" pluggy = ">=0.12,<1.0" py = ">=1.8.2" toml = "*" -[package.dependencies.importlib-metadata] -python = "<3.8" -version = ">=0.12" - [package.extras] checkqa_mypy = ["mypy (0.780)"] testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"] [[package]] -category = "dev" -description = "Pytest plugin for measuring coverage." name = "pytest-cov" +version = "2.10.1" +description = "Pytest plugin for measuring coverage." +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -version = "2.10.0" [package.dependencies] coverage = ">=4.4" @@ -428,131 +403,136 @@ pytest = ">=4.6" testing = ["fields", "hunter", "process-tests (2.0.2)", "six", "pytest-xdist", "virtualenv"] [[package]] -category = "main" -description = "Extensions to the standard Python datetime module" name = "python-dateutil" +version = "2.8.1" +description = "Extensions to the standard Python datetime module" +category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" -version = "2.8.1" [package.dependencies] six = ">=1.5" [[package]] -category = "main" -description = "World timezone definitions, modern and historical" name = "pytz" +version = "2020.1" +description = "World timezone definitions, modern and historical" +category = "main" optional = false python-versions = "*" -version = "2020.1" [[package]] -category = "dev" -description = "Alternative regular expression module, to replace re." name = "regex" +version = "2020.10.11" +description = "Alternative regular expression module, to replace re." +category = "dev" optional = false python-versions = "*" -version = "2020.7.14" [[package]] -category = "main" -description = "Python 2 and 3 compatibility utilities" name = "six" +version = "1.15.0" +description = "Python 2 and 3 compatibility utilities" +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" -version = "1.15.0" [[package]] -category = "main" -description = "Read and write TIFF(r) files" name = "tifffile" +version = "2020.10.1" +description = "Read and write TIFF(r) files" +category = "main" optional = false -python-versions = ">=3.6" -version = "2020.8.13" +python-versions = ">=3.7" [package.dependencies] numpy = ">=1.15.1" [package.extras] -all = ["imagecodecs (>=2020.2.18)", "matplotlib (>=3.1)", "lxml"] +all = ["imagecodecs (>=2020.5.30)", "matplotlib (>=3.2)", "lxml"] [[package]] -category = "dev" -description = "Python Library for Tom's Obvious, Minimal Language" name = "toml" +version = "0.10.1" +description = "Python Library for Tom's Obvious, Minimal Language" +category = "dev" optional = false python-versions = "*" -version = "0.10.1" [[package]] -category = "dev" -description = "a fork of Python 2 and 3 ast modules with type comment support" name = "typed-ast" +version = "1.4.1" +description = "a fork of Python 2 and 3 ast modules with type comment support" +category = "dev" optional = false python-versions = "*" -version = "1.4.1" [[package]] -category = "main" -description = "Backported and Experimental Type Hints for Python 3.5+" name = "typing-extensions" +version = "3.7.4.3" +description = "Backported and Experimental Type Hints for Python 3.5+" +category = "main" optional = false python-versions = "*" -version = "3.7.4.2" [[package]] -category = "dev" -description = "Find dead code" name = "vulture" +version = "2.1" +description = "Find dead code" +category = "dev" optional = false python-versions = ">=3.6" -version = "2.0" + +[package.dependencies] +toml = "*" [[package]] -category = "dev" -description = "Module for decorators, wrappers and monkey patching." name = "wrapt" +version = "1.12.1" +description = "Module for decorators, wrappers and monkey patching." +category = "dev" optional = false python-versions = "*" -version = "1.12.1" [[package]] -category = "main" -description = "Makes working with XML feel like you are working with JSON" name = "xmltodict" +version = "0.12.0" +description = "Makes working with XML feel like you are working with JSON" +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "0.12.0" [[package]] -category = "main" -description = "A tiny Python 3 library for writing multi-channel TIFF stacks" name = "xtiff" +version = "0.6.2" +description = "A tiny Python 3 library for writing multi-channel TIFF stacks" +category = "main" optional = false python-versions = ">=3.7" -version = "0.6.1" [package.dependencies] numpy = "*" -tifffile = "*" +tifffile = ">=2020.6.3,<2020.7.17 || >2020.7.17" + +[package.extras] +xtiff_support = ["xtiff"] [[package]] -category = "dev" -description = "Backport of pathlib-compatible object wrapper for zip files" -marker = "python_version < \"3.8\"" name = "zipp" +version = "3.3.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +category = "dev" optional = false python-versions = ">=3.6" -version = "3.1.0" [package.extras] docs = ["sphinx", "jaraco.packaging (>=3.2)", "rst.linker (>=1.9)"] -testing = ["jaraco.itertools", "func-timeout"] +testing = ["pytest (>=3.5,<3.7.3 || >3.7.3)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pytest-cov", "jaraco.test (>=3.2.0)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"] [metadata] -content-hash = "dd6c9c2164e589708fde98ff53a32acb63350ba74d28a83267c3a771493bd402" -lock-version = "1.0" +lock-version = "1.1" python-versions = ">=3.7" +content-hash = "e15e7e6c724344f684bb20df7909e85291985b5b1f51633c2279fa0a44ee27db" [metadata.files] appdirs = [ @@ -568,27 +548,26 @@ atomicwrites = [ {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"}, ] attrs = [ - {file = "attrs-19.3.0-py2.py3-none-any.whl", hash = "sha256:08a96c641c3a74e44eb59afb61a24f2cb9f4d7188748e76ba4bb5edfa3cb7d1c"}, - {file = "attrs-19.3.0.tar.gz", hash = "sha256:f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72"}, + {file = "attrs-20.2.0-py2.py3-none-any.whl", hash = "sha256:fce7fc47dfc976152e82d53ff92fa0407700c21acd20886a13777a0d20e655dc"}, + {file = "attrs-20.2.0.tar.gz", hash = "sha256:26b54ddbbb9ee1d34d5d3668dd37d6cf74990ab23c828c2888dccdceee395594"}, ] autoflake = [ - {file = "autoflake-1.3.1.tar.gz", hash = "sha256:680cb9dade101ed647488238ccb8b8bfb4369b53d58ba2c8cdf7d5d54e01f95b"}, + {file = "autoflake-1.4.tar.gz", hash = "sha256:61a353012cff6ab94ca062823d1fb2f692c4acda51c76ff83a8d77915fba51ea"}, ] black = [ {file = "black-19.10b0-py36-none-any.whl", hash = "sha256:1b30e59be925fafc1ee4565e5e08abef6b03fe455102883820fe5ee2e4734e0b"}, {file = "black-19.10b0.tar.gz", hash = "sha256:c2edb73a08e9e0e6f65a0e6af18b059b8b1cdd5bef997d7a0b181df93dc81539"}, ] bump2version = [ - {file = "bump2version-1.0.0-py2.py3-none-any.whl", hash = "sha256:477f0e18a0d58e50bb3dbc9af7fcda464fd0ebfc7a6151d8888602d7153171a0"}, - {file = "bump2version-1.0.0.tar.gz", hash = "sha256:cd4f3a231305e405ed8944d8ff35bd742d9bc740ad62f483bd0ca21ce7131984"}, + {file = "bump2version-1.0.1-py2.py3-none-any.whl", hash = "sha256:37f927ea17cde7ae2d7baf832f8e80ce3777624554a653006c9144f8017fe410"}, + {file = "bump2version-1.0.1.tar.gz", hash = "sha256:762cb2bfad61f4ec8e2bdf452c7c267416f8c70dd9ecb1653fd0bbb01fa936e6"}, ] click = [ {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"}, {file = "click-7.1.2.tar.gz", hash = "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a"}, ] colorama = [ - {file = "colorama-0.4.3-py2.py3-none-any.whl", hash = "sha256:7d73d2a99753107a36ac6b455ee49046802e59d9d076ef8e47b61499fa29afff"}, - {file = "colorama-0.4.3.tar.gz", hash = "sha256:e96da0d330793e2cb9485e9ddfd918d456036c7149416295932478192f4436a1"}, + {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, ] coverage = [ {file = "coverage-4.4.2-cp26-cp26m-macosx_10_10_x86_64.whl", hash = "sha256:d1ee76f560c3c3e8faada866a07a32485445e16ed2206ac8378bd90dadffb9f0"}, @@ -633,8 +612,8 @@ coverage = [ {file = "coverage-4.4.2.win32-py3.6.exe", hash = "sha256:f98b461cb59f117887aa634a66022c0bd394278245ed51189f63a036516e32de"}, ] flake8 = [ - {file = "flake8-3.8.3-py2.py3-none-any.whl", hash = "sha256:15e351d19611c887e482fb960eae4d44845013cc142d42896e9862f775d8cf5c"}, - {file = "flake8-3.8.3.tar.gz", hash = "sha256:f04b9fcbac03b0a3e58c0ab3a0ecc462e023a9faf046d57794184028123aa208"}, + {file = "flake8-3.8.4-py2.py3-none-any.whl", hash = "sha256:749dbbd6bfd0cf1318af27bf97a14e28e5ff548ef8e5b1566ccfb25a11e7c839"}, + {file = "flake8-3.8.4.tar.gz", hash = "sha256:aadae8761ec651813c24be05c6f7b4680857ef6afaae4651a4eccaef97ce6c3b"}, ] imagecodecs = [ {file = "imagecodecs-2020.5.30-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:110318270910b3b62941da60fed009dd669434d6344675c48d25df5207cdafa1"}, @@ -660,12 +639,11 @@ imagecodecs = [ {file = "imagecodecs-2020.5.30.tar.gz", hash = "sha256:c8c776922d3a60824d8d3d31ba674a250d1b4d429e81349b5c88c34d4353ddb5"}, ] importlib-metadata = [ - {file = "importlib_metadata-1.7.0-py2.py3-none-any.whl", hash = "sha256:dc15b2969b4ce36305c51eebe62d418ac7791e9a157911d58bfb1f9ccd8e2070"}, - {file = "importlib_metadata-1.7.0.tar.gz", hash = "sha256:90bb658cdbbf6d1735b6341ce708fc7024a3e14e99ffdc5783edea9f9b077f83"}, + {file = "importlib_metadata-2.0.0-py2.py3-none-any.whl", hash = "sha256:cefa1a2f919b866c5beb7c9f7b0ebb4061f30a8a9bf16d609b000e2dfaceb9c3"}, + {file = "importlib_metadata-2.0.0.tar.gz", hash = "sha256:77a540690e24b0305878c37ffd421785a6f7e53c8b5720d211b211de8d0e95da"}, ] iniconfig = [ - {file = "iniconfig-1.0.1-py3-none-any.whl", hash = "sha256:80cf40c597eb564e86346103f609d74efce0f6b4d4f30ec8ce9e2c26411ba437"}, - {file = "iniconfig-1.0.1.tar.gz", hash = "sha256:e5f92f89355a67de0595932a6c6c02ab4afddc6fcdc0bfc5becd0d60884d3f69"}, + {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, ] isort = [ {file = "isort-4.3.21-py2.py3-none-any.whl", hash = "sha256:6e811fcb295968434526407adb8796944f1988c5b65e8139058f2014cbe100fd"}, @@ -699,8 +677,8 @@ mako = [ {file = "Mako-1.1.3.tar.gz", hash = "sha256:8195c8c1400ceb53496064314c6736719c6f25e7479cd24c77be3d9361cddc27"}, ] markdown = [ - {file = "Markdown-3.2.2-py3-none-any.whl", hash = "sha256:c467cd6233885534bf0fe96e62e3cf46cfc1605112356c4f9981512b8174de59"}, - {file = "Markdown-3.2.2.tar.gz", hash = "sha256:1fafe3f1ecabfb514a5285fca634a53c1b32a81cb0feb154264d55bf2ff22c17"}, + {file = "Markdown-3.3.1-py3-none-any.whl", hash = "sha256:10db1204a6c4aff7c7cf3cf25cc02761703baea54b6fb5e2b9ce2c186d81116f"}, + {file = "Markdown-3.3.1.tar.gz", hash = "sha256:c3ce9ebb035c078cac0f2036068d054e7dc34354eeecc49c173c33c96b124af6"}, ] markupsafe = [ {file = "MarkupSafe-1.1.1-cp27-cp27m-macosx_10_6_intel.whl", hash = "sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161"}, @@ -741,86 +719,82 @@ mccabe = [ {file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"}, {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"}, ] -more-itertools = [ - {file = "more-itertools-8.4.0.tar.gz", hash = "sha256:68c70cc7167bdf5c7c9d8f6954a7837089c6a36bf565383919bb595efb8a17e5"}, - {file = "more_itertools-8.4.0-py3-none-any.whl", hash = "sha256:b78134b2063dd214000685165d81c154522c3ee0a1c0d4d113c80361c234c5a2"}, -] mypy = [ - {file = "mypy-0.782-cp35-cp35m-macosx_10_6_x86_64.whl", hash = "sha256:2c6cde8aa3426c1682d35190b59b71f661237d74b053822ea3d748e2c9578a7c"}, - {file = "mypy-0.782-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9c7a9a7ceb2871ba4bac1cf7217a7dd9ccd44c27c2950edbc6dc08530f32ad4e"}, - {file = "mypy-0.782-cp35-cp35m-win_amd64.whl", hash = "sha256:c05b9e4fb1d8a41d41dec8786c94f3b95d3c5f528298d769eb8e73d293abc48d"}, - {file = "mypy-0.782-cp36-cp36m-macosx_10_6_x86_64.whl", hash = "sha256:6731603dfe0ce4352c555c6284c6db0dc935b685e9ce2e4cf220abe1e14386fd"}, - {file = "mypy-0.782-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:f05644db6779387ccdb468cc47a44b4356fc2ffa9287135d05b70a98dc83b89a"}, - {file = "mypy-0.782-cp36-cp36m-win_amd64.whl", hash = "sha256:b7fbfabdbcc78c4f6fc4712544b9b0d6bf171069c6e0e3cb82440dd10ced3406"}, - {file = "mypy-0.782-cp37-cp37m-macosx_10_6_x86_64.whl", hash = "sha256:3fdda71c067d3ddfb21da4b80e2686b71e9e5c72cca65fa216d207a358827f86"}, - {file = "mypy-0.782-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:d7df6eddb6054d21ca4d3c6249cae5578cb4602951fd2b6ee2f5510ffb098707"}, - {file = "mypy-0.782-cp37-cp37m-win_amd64.whl", hash = "sha256:a4a2cbcfc4cbf45cd126f531dedda8485671545b43107ded25ce952aac6fb308"}, - {file = "mypy-0.782-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6bb93479caa6619d21d6e7160c552c1193f6952f0668cdda2f851156e85186fc"}, - {file = "mypy-0.782-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:81c7908b94239c4010e16642c9102bfc958ab14e36048fa77d0be3289dda76ea"}, - {file = "mypy-0.782-cp38-cp38-win_amd64.whl", hash = "sha256:5dd13ff1f2a97f94540fd37a49e5d255950ebcdf446fb597463a40d0df3fac8b"}, - {file = "mypy-0.782-py3-none-any.whl", hash = "sha256:e0b61738ab504e656d1fe4ff0c0601387a5489ca122d55390ade31f9ca0e252d"}, - {file = "mypy-0.782.tar.gz", hash = "sha256:eff7d4a85e9eea55afa34888dfeaccde99e7520b51f867ac28a48492c0b1130c"}, + {file = "mypy-0.790-cp35-cp35m-macosx_10_6_x86_64.whl", hash = "sha256:bd03b3cf666bff8d710d633d1c56ab7facbdc204d567715cb3b9f85c6e94f669"}, + {file = "mypy-0.790-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:2170492030f6faa537647d29945786d297e4862765f0b4ac5930ff62e300d802"}, + {file = "mypy-0.790-cp35-cp35m-win_amd64.whl", hash = "sha256:e86bdace26c5fe9cf8cb735e7cedfe7850ad92b327ac5d797c656717d2ca66de"}, + {file = "mypy-0.790-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e97e9c13d67fbe524be17e4d8025d51a7dca38f90de2e462243ab8ed8a9178d1"}, + {file = "mypy-0.790-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:0d34d6b122597d48a36d6c59e35341f410d4abfa771d96d04ae2c468dd201abc"}, + {file = "mypy-0.790-cp36-cp36m-win_amd64.whl", hash = "sha256:72060bf64f290fb629bd4a67c707a66fd88ca26e413a91384b18db3876e57ed7"}, + {file = "mypy-0.790-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:eea260feb1830a627fb526d22fbb426b750d9f5a47b624e8d5e7e004359b219c"}, + {file = "mypy-0.790-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:c614194e01c85bb2e551c421397e49afb2872c88b5830e3554f0519f9fb1c178"}, + {file = "mypy-0.790-cp37-cp37m-win_amd64.whl", hash = "sha256:0a0d102247c16ce93c97066443d11e2d36e6cc2a32d8ccc1f705268970479324"}, + {file = "mypy-0.790-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cf4e7bf7f1214826cf7333627cb2547c0db7e3078723227820d0a2490f117a01"}, + {file = "mypy-0.790-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:af4e9ff1834e565f1baa74ccf7ae2564ae38c8df2a85b057af1dbbc958eb6666"}, + {file = "mypy-0.790-cp38-cp38-win_amd64.whl", hash = "sha256:da56dedcd7cd502ccd3c5dddc656cb36113dd793ad466e894574125945653cea"}, + {file = "mypy-0.790-py3-none-any.whl", hash = "sha256:2842d4fbd1b12ab422346376aad03ff5d0805b706102e475e962370f874a5122"}, + {file = "mypy-0.790.tar.gz", hash = "sha256:2b21ba45ad9ef2e2eb88ce4aeadd0112d0f5026418324176fd494a6824b74975"}, ] mypy-extensions = [ {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, ] numpy = [ - {file = "numpy-1.19.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b1cca51512299841bf69add3b75361779962f9cee7d9ee3bb446d5982e925b69"}, - {file = "numpy-1.19.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:c9591886fc9cbe5532d5df85cb8e0cc3b44ba8ce4367bd4cf1b93dc19713da72"}, - {file = "numpy-1.19.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:cf1347450c0b7644ea142712619533553f02ef23f92f781312f6a3553d031fc7"}, - {file = "numpy-1.19.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:ed8a311493cf5480a2ebc597d1e177231984c818a86875126cfd004241a73c3e"}, - {file = "numpy-1.19.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:3673c8b2b29077f1b7b3a848794f8e11f401ba0b71c49fbd26fb40b71788b132"}, - {file = "numpy-1.19.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:56ef7f56470c24bb67fb43dae442e946a6ce172f97c69f8d067ff8550cf782ff"}, - {file = "numpy-1.19.1-cp36-cp36m-win32.whl", hash = "sha256:aaf42a04b472d12515debc621c31cf16c215e332242e7a9f56403d814c744624"}, - {file = "numpy-1.19.1-cp36-cp36m-win_amd64.whl", hash = "sha256:082f8d4dd69b6b688f64f509b91d482362124986d98dc7dc5f5e9f9b9c3bb983"}, - {file = "numpy-1.19.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e4f6d3c53911a9d103d8ec9518190e52a8b945bab021745af4939cfc7c0d4a9e"}, - {file = "numpy-1.19.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:5b6885c12784a27e957294b60f97e8b5b4174c7504665333c5e94fbf41ae5d6a"}, - {file = "numpy-1.19.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:1bc0145999e8cb8aed9d4e65dd8b139adf1919e521177f198529687dbf613065"}, - {file = "numpy-1.19.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:5a936fd51049541d86ccdeef2833cc89a18e4d3808fe58a8abeb802665c5af93"}, - {file = "numpy-1.19.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:ef71a1d4fd4858596ae80ad1ec76404ad29701f8ca7cdcebc50300178db14dfc"}, - {file = "numpy-1.19.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:b9792b0ac0130b277536ab8944e7b754c69560dac0415dd4b2dbd16b902c8954"}, - {file = "numpy-1.19.1-cp37-cp37m-win32.whl", hash = "sha256:b12e639378c741add21fbffd16ba5ad25c0a1a17cf2b6fe4288feeb65144f35b"}, - {file = "numpy-1.19.1-cp37-cp37m-win_amd64.whl", hash = "sha256:8343bf67c72e09cfabfab55ad4a43ce3f6bf6e6ced7acf70f45ded9ebb425055"}, - {file = "numpy-1.19.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e45f8e981a0ab47103181773cc0a54e650b2aef8c7b6cd07405d0fa8d869444a"}, - {file = "numpy-1.19.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:667c07063940e934287993366ad5f56766bc009017b4a0fe91dbd07960d0aba7"}, - {file = "numpy-1.19.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:480fdd4dbda4dd6b638d3863da3be82873bba6d32d1fc12ea1b8486ac7b8d129"}, - {file = "numpy-1.19.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:935c27ae2760c21cd7354402546f6be21d3d0c806fffe967f745d5f2de5005a7"}, - {file = "numpy-1.19.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:309cbcfaa103fc9a33ec16d2d62569d541b79f828c382556ff072442226d1968"}, - {file = "numpy-1.19.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:7ed448ff4eaffeb01094959b19cbaf998ecdee9ef9932381420d514e446601cd"}, - {file = "numpy-1.19.1-cp38-cp38-win32.whl", hash = "sha256:de8b4a9b56255797cbddb93281ed92acbc510fb7b15df3f01bd28f46ebc4edae"}, - {file = "numpy-1.19.1-cp38-cp38-win_amd64.whl", hash = "sha256:92feb989b47f83ebef246adabc7ff3b9a59ac30601c3f6819f8913458610bdcc"}, - {file = "numpy-1.19.1-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:e1b1dc0372f530f26a03578ac75d5e51b3868b9b76cd2facba4c9ee0eb252ab1"}, - {file = "numpy-1.19.1.zip", hash = "sha256:b8456987b637232602ceb4d663cb34106f7eb780e247d51a260b84760fd8f491"}, + {file = "numpy-1.19.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b594f76771bc7fc8a044c5ba303427ee67c17a09b36e1fa32bde82f5c419d17a"}, + {file = "numpy-1.19.2-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:e6ddbdc5113628f15de7e4911c02aed74a4ccff531842c583e5032f6e5a179bd"}, + {file = "numpy-1.19.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:3733640466733441295b0d6d3dcbf8e1ffa7e897d4d82903169529fd3386919a"}, + {file = "numpy-1.19.2-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:4339741994c775396e1a274dba3609c69ab0f16056c1077f18979bec2a2c2e6e"}, + {file = "numpy-1.19.2-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:7c6646314291d8f5ea900a7ea9c4261f834b5b62159ba2abe3836f4fa6705526"}, + {file = "numpy-1.19.2-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:7118f0a9f2f617f921ec7d278d981244ba83c85eea197be7c5a4f84af80a9c3c"}, + {file = "numpy-1.19.2-cp36-cp36m-win32.whl", hash = "sha256:9a3001248b9231ed73894c773142658bab914645261275f675d86c290c37f66d"}, + {file = "numpy-1.19.2-cp36-cp36m-win_amd64.whl", hash = "sha256:967c92435f0b3ba37a4257c48b8715b76741410467e2bdb1097e8391fccfae15"}, + {file = "numpy-1.19.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d526fa58ae4aead839161535d59ea9565863bb0b0bdb3cc63214613fb16aced4"}, + {file = "numpy-1.19.2-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:eb25c381d168daf351147713f49c626030dcff7a393d5caa62515d415a6071d8"}, + {file = "numpy-1.19.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:62139af94728d22350a571b7c82795b9d59be77fc162414ada6c8b6a10ef5d02"}, + {file = "numpy-1.19.2-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:0c66da1d202c52051625e55a249da35b31f65a81cb56e4c69af0dfb8fb0125bf"}, + {file = "numpy-1.19.2-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:2117536e968abb7357d34d754e3733b0d7113d4c9f1d921f21a3d96dec5ff716"}, + {file = "numpy-1.19.2-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:54045b198aebf41bf6bf4088012777c1d11703bf74461d70cd350c0af2182e45"}, + {file = "numpy-1.19.2-cp37-cp37m-win32.whl", hash = "sha256:aba1d5daf1144b956bc87ffb87966791f5e9f3e1f6fab3d7f581db1f5b598f7a"}, + {file = "numpy-1.19.2-cp37-cp37m-win_amd64.whl", hash = "sha256:addaa551b298052c16885fc70408d3848d4e2e7352de4e7a1e13e691abc734c1"}, + {file = "numpy-1.19.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:58d66a6b3b55178a1f8a5fe98df26ace76260a70de694d99577ddeab7eaa9a9d"}, + {file = "numpy-1.19.2-cp38-cp38-manylinux1_i686.whl", hash = "sha256:59f3d687faea7a4f7f93bd9665e5b102f32f3fa28514f15b126f099b7997203d"}, + {file = "numpy-1.19.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:cebd4f4e64cfe87f2039e4725781f6326a61f095bc77b3716502bed812b385a9"}, + {file = "numpy-1.19.2-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:c35a01777f81e7333bcf276b605f39c872e28295441c265cd0c860f4b40148c1"}, + {file = "numpy-1.19.2-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:d7ac33585e1f09e7345aa902c281bd777fdb792432d27fca857f39b70e5dd31c"}, + {file = "numpy-1.19.2-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:04c7d4ebc5ff93d9822075ddb1751ff392a4375e5885299445fcebf877f179d5"}, + {file = "numpy-1.19.2-cp38-cp38-win32.whl", hash = "sha256:51ee93e1fac3fe08ef54ff1c7f329db64d8a9c5557e6c8e908be9497ac76374b"}, + {file = "numpy-1.19.2-cp38-cp38-win_amd64.whl", hash = "sha256:1669ec8e42f169ff715a904c9b2105b6640f3f2a4c4c2cb4920ae8b2785dac65"}, + {file = "numpy-1.19.2-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:0bfd85053d1e9f60234f28f63d4a5147ada7f432943c113a11afcf3e65d9d4c8"}, + {file = "numpy-1.19.2.zip", hash = "sha256:0d310730e1e793527065ad7dde736197b705d0e4c9999775f212b03c44a8484c"}, ] packaging = [ {file = "packaging-20.4-py2.py3-none-any.whl", hash = "sha256:998416ba6962ae7fbd6596850b80e17859a5753ba17c32284f67bfff33784181"}, {file = "packaging-20.4.tar.gz", hash = "sha256:4357f74f47b9c12db93624a82154e9b120fa8293699949152b22065d556079f8"}, ] pandas = [ - {file = "pandas-1.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:47a03bfef80d6812c91ed6fae43f04f2fa80a4e1b82b35aa4d9002e39529e0b8"}, - {file = "pandas-1.1.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:0210f8fe19c2667a3817adb6de2c4fd92b1b78e1975ca60c0efa908e0985cbdb"}, - {file = "pandas-1.1.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:35db623487f00d9392d8af44a24516d6cb9f274afaf73cfcfe180b9c54e007d2"}, - {file = "pandas-1.1.0-cp36-cp36m-win32.whl", hash = "sha256:4d1a806252001c5db7caecbe1a26e49a6c23421d85a700960f6ba093112f54a1"}, - {file = "pandas-1.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:9f61cca5262840ff46ef857d4f5f65679b82188709d0e5e086a9123791f721c8"}, - {file = "pandas-1.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:182a5aeae319df391c3df4740bb17d5300dcd78034b17732c12e62e6dd79e4a4"}, - {file = "pandas-1.1.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:40ec0a7f611a3d00d3c666c4cceb9aa3f5bf9fbd81392948a93663064f527203"}, - {file = "pandas-1.1.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:16504f915f1ae424052f1e9b7cd2d01786f098fbb00fa4e0f69d42b22952d798"}, - {file = "pandas-1.1.0-cp37-cp37m-win32.whl", hash = "sha256:fc714895b6de6803ac9f661abb316853d0cd657f5d23985222255ad76ccedc25"}, - {file = "pandas-1.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:a15835c8409d5edc50b4af93be3377b5dd3eb53517e7f785060df1f06f6da0e2"}, - {file = "pandas-1.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0bc440493cf9dc5b36d5d46bbd5508f6547ba68b02a28234cd8e81fdce42744d"}, - {file = "pandas-1.1.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:4b21d46728f8a6be537716035b445e7ef3a75dbd30bd31aa1b251323219d853e"}, - {file = "pandas-1.1.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:0227e3a6e3a22c0e283a5041f1e3064d78fbde811217668bb966ed05386d8a7e"}, - {file = "pandas-1.1.0-cp38-cp38-win32.whl", hash = "sha256:ed60848caadeacecefd0b1de81b91beff23960032cded0ac1449242b506a3b3f"}, - {file = "pandas-1.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:60e20a4ab4d4fec253557d0fc9a4e4095c37b664f78c72af24860c8adcd07088"}, - {file = "pandas-1.1.0.tar.gz", hash = "sha256:b39508562ad0bb3f384b0db24da7d68a2608b9ddc85b1d931ccaaa92d5e45273"}, + {file = "pandas-1.1.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:882012763668af54b48f1412bab95c5cc0a7ccce5a2a8221cfc3839a6e3394ef"}, + {file = "pandas-1.1.3-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:206d7c3e5356dcadf082e64dc25c24bc8541718045826074f96346e9d6d05a20"}, + {file = "pandas-1.1.3-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:ca31ac8578d48da354cf66a473d4d5ff99277ca71d321dc7ea4e6fad3c6bb0fd"}, + {file = "pandas-1.1.3-cp36-cp36m-win32.whl", hash = "sha256:ca71a5aa9eeb3ef5b31feca7d9b6369d6b3d0b2e9c85d7a89abe3ecb013f1e86"}, + {file = "pandas-1.1.3-cp36-cp36m-win_amd64.whl", hash = "sha256:54f5f564058b0280d588c3758abde82e280702c440db5faf0c686b80336096f9"}, + {file = "pandas-1.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3a038cd5da602b955d335aa80cbaa0e5774f68501ff47b9c21509906981478da"}, + {file = "pandas-1.1.3-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:24f61f40febe47edac271eda45d683e42838b7db2bd0f82574d9800259d2b182"}, + {file = "pandas-1.1.3-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:427be9938b2f79ab298de84f87693914cda238a27cf10580da96caf3dff64115"}, + {file = "pandas-1.1.3-cp37-cp37m-win32.whl", hash = "sha256:c22e40f1b4d162ca18eb6b2c572e63eef220dbc9cc3de0241cefb77972621bb7"}, + {file = "pandas-1.1.3-cp37-cp37m-win_amd64.whl", hash = "sha256:920d30fdff65a079f071db635d282b4f583c2b26f2b58d5dca218aac7c59974d"}, + {file = "pandas-1.1.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d6b1f9d506dc23da2915bcae5c5968990049c9cec44108bd9855d2c7c89d91dc"}, + {file = "pandas-1.1.3-cp38-cp38-manylinux1_i686.whl", hash = "sha256:b11b496c317dbe007898de699fd59eaf687d0fe8c1b7dad109db6010155d28ae"}, + {file = "pandas-1.1.3-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:d89dbc58aec1544722a8d5046f880b597c497ef8a82c5fe695b4b2effafac5ec"}, + {file = "pandas-1.1.3-cp38-cp38-win32.whl", hash = "sha256:a605054fbca71ed1d08bb2aef6f73c84a579bbac956bfe8f9718d5e84cb41248"}, + {file = "pandas-1.1.3-cp38-cp38-win_amd64.whl", hash = "sha256:84a4ffe668df357e31f98c829536e3a7142c3036c82f996e639f644c5d32eda1"}, + {file = "pandas-1.1.3.tar.gz", hash = "sha256:babbeda2f83b0686c9ad38d93b10516e68cdcd5771007eb80a763e98aaf44613"}, ] pathspec = [ {file = "pathspec-0.8.0-py2.py3-none-any.whl", hash = "sha256:7d91249d21749788d07a2d0f94147accd8f845507400749ea19c1ec9054a12b0"}, {file = "pathspec-0.8.0.tar.gz", hash = "sha256:da45173eb3a6f2a5a487efba21f050af2b41948be6ab52b6a1e3ff22bb8b7061"}, ] pdoc3 = [ - {file = "pdoc3-0.8.4.tar.gz", hash = "sha256:9b2ec2279b004372810ab6b7465489ccf402428625dfecf3bd3f13b45aa5a3ea"}, + {file = "pdoc3-0.8.5.tar.gz", hash = "sha256:63e59a7f723869e06d854c73215831dc04098f7038d9da3a1715be698e0d9551"}, ] pluggy = [ {file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"}, @@ -839,20 +813,20 @@ pyflakes = [ {file = "pyflakes-2.2.0.tar.gz", hash = "sha256:35b2d75ee967ea93b55750aa9edbbf72813e06a66ba54438df2cfac9e3c27fc8"}, ] pylint = [ - {file = "pylint-2.5.3-py3-none-any.whl", hash = "sha256:d0ece7d223fe422088b0e8f13fa0a1e8eb745ebffcb8ed53d3e95394b6101a1c"}, - {file = "pylint-2.5.3.tar.gz", hash = "sha256:7dd78437f2d8d019717dbf287772d0b2dbdfd13fc016aa7faa08d67bccc46adc"}, + {file = "pylint-2.6.0-py3-none-any.whl", hash = "sha256:bfe68f020f8a0fece830a22dd4d5dddb4ecc6137db04face4c3420a46a52239f"}, + {file = "pylint-2.6.0.tar.gz", hash = "sha256:bb4a908c9dadbc3aac18860550e870f58e1a02c9f2c204fdf5693d73be061210"}, ] pyparsing = [ {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"}, {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"}, ] pytest = [ - {file = "pytest-6.0.1-py3-none-any.whl", hash = "sha256:8b6007800c53fdacd5a5c192203f4e531eb2a1540ad9c752e052ec0f7143dbad"}, - {file = "pytest-6.0.1.tar.gz", hash = "sha256:85228d75db9f45e06e57ef9bf4429267f81ac7c0d742cc9ed63d09886a9fe6f4"}, + {file = "pytest-6.1.1-py3-none-any.whl", hash = "sha256:7a8190790c17d79a11f847fba0b004ee9a8122582ebff4729a082c109e81a4c9"}, + {file = "pytest-6.1.1.tar.gz", hash = "sha256:8f593023c1a0f916110285b6efd7f99db07d59546e3d8c36fc60e2ab05d3be92"}, ] pytest-cov = [ - {file = "pytest-cov-2.10.0.tar.gz", hash = "sha256:1a629dc9f48e53512fcbfda6b07de490c374b0c83c55ff7a1720b3fccff0ac87"}, - {file = "pytest_cov-2.10.0-py2.py3-none-any.whl", hash = "sha256:6e6d18092dce6fad667cd7020deed816f858ad3b49d5b5e2b1cc1c97a4dba65c"}, + {file = "pytest-cov-2.10.1.tar.gz", hash = "sha256:47bd0ce14056fdd79f93e1713f88fad7bdcc583dcd7783da86ef2f085a0bb88e"}, + {file = "pytest_cov-2.10.1-py2.py3-none-any.whl", hash = "sha256:45ec2d5182f89a81fc3eb29e3d1ed3113b9e9a873bcddb2a71faaab066110191"}, ] python-dateutil = [ {file = "python-dateutil-2.8.1.tar.gz", hash = "sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c"}, @@ -863,35 +837,41 @@ pytz = [ {file = "pytz-2020.1.tar.gz", hash = "sha256:c35965d010ce31b23eeb663ed3cc8c906275d6be1a34393a1d73a41febf4a048"}, ] regex = [ - {file = "regex-2020.7.14-cp27-cp27m-win32.whl", hash = "sha256:e46d13f38cfcbb79bfdb2964b0fe12561fe633caf964a77a5f8d4e45fe5d2ef7"}, - {file = "regex-2020.7.14-cp27-cp27m-win_amd64.whl", hash = "sha256:6961548bba529cac7c07af2fd4d527c5b91bb8fe18995fed6044ac22b3d14644"}, - {file = "regex-2020.7.14-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:c50a724d136ec10d920661f1442e4a8b010a4fe5aebd65e0c2241ea41dbe93dc"}, - {file = "regex-2020.7.14-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:8a51f2c6d1f884e98846a0a9021ff6861bdb98457879f412fdc2b42d14494067"}, - {file = "regex-2020.7.14-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:9c568495e35599625f7b999774e29e8d6b01a6fb684d77dee1f56d41b11b40cd"}, - {file = "regex-2020.7.14-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:51178c738d559a2d1071ce0b0f56e57eb315bcf8f7d4cf127674b533e3101f88"}, - {file = "regex-2020.7.14-cp36-cp36m-win32.whl", hash = "sha256:9eddaafb3c48e0900690c1727fba226c4804b8e6127ea409689c3bb492d06de4"}, - {file = "regex-2020.7.14-cp36-cp36m-win_amd64.whl", hash = "sha256:14a53646369157baa0499513f96091eb70382eb50b2c82393d17d7ec81b7b85f"}, - {file = "regex-2020.7.14-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:1269fef3167bb52631ad4fa7dd27bf635d5a0790b8e6222065d42e91bede4162"}, - {file = "regex-2020.7.14-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:d0a5095d52b90ff38592bbdc2644f17c6d495762edf47d876049cfd2968fbccf"}, - {file = "regex-2020.7.14-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:4c037fd14c5f4e308b8370b447b469ca10e69427966527edcab07f52d88388f7"}, - {file = "regex-2020.7.14-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:bc3d98f621898b4a9bc7fecc00513eec8f40b5b83913d74ccb445f037d58cd89"}, - {file = "regex-2020.7.14-cp37-cp37m-win32.whl", hash = "sha256:46bac5ca10fb748d6c55843a931855e2727a7a22584f302dd9bb1506e69f83f6"}, - {file = "regex-2020.7.14-cp37-cp37m-win_amd64.whl", hash = "sha256:0dc64ee3f33cd7899f79a8d788abfbec168410be356ed9bd30bbd3f0a23a7204"}, - {file = "regex-2020.7.14-cp38-cp38-manylinux1_i686.whl", hash = "sha256:5ea81ea3dbd6767873c611687141ec7b06ed8bab43f68fad5b7be184a920dc99"}, - {file = "regex-2020.7.14-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:bbb332d45b32df41200380fff14712cb6093b61bd142272a10b16778c418e98e"}, - {file = "regex-2020.7.14-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:c11d6033115dc4887c456565303f540c44197f4fc1a2bfb192224a301534888e"}, - {file = "regex-2020.7.14-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:75aaa27aa521a182824d89e5ab0a1d16ca207318a6b65042b046053cfc8ed07a"}, - {file = "regex-2020.7.14-cp38-cp38-win32.whl", hash = "sha256:d6cff2276e502b86a25fd10c2a96973fdb45c7a977dca2138d661417f3728341"}, - {file = "regex-2020.7.14-cp38-cp38-win_amd64.whl", hash = "sha256:7a2dd66d2d4df34fa82c9dc85657c5e019b87932019947faece7983f2089a840"}, - {file = "regex-2020.7.14.tar.gz", hash = "sha256:3a3af27a8d23143c49a3420efe5b3f8cf1a48c6fc8bc6856b03f638abc1833bb"}, + {file = "regex-2020.10.11-cp27-cp27m-win32.whl", hash = "sha256:4f5c0fe46fb79a7adf766b365cae56cafbf352c27358fda811e4a1dc8216d0db"}, + {file = "regex-2020.10.11-cp27-cp27m-win_amd64.whl", hash = "sha256:39a5ef30bca911f5a8a3d4476f5713ed4d66e313d9fb6755b32bec8a2e519635"}, + {file = "regex-2020.10.11-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:7c4fc5a8ec91a2254bb459db27dbd9e16bba1dabff638f425d736888d34aaefa"}, + {file = "regex-2020.10.11-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:d537e270b3e6bfaea4f49eaf267984bfb3628c86670e9ad2a257358d3b8f0955"}, + {file = "regex-2020.10.11-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:a8240df4957a5b0e641998a5d78b3c4ea762c845d8cb8997bf820626826fde9a"}, + {file = "regex-2020.10.11-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:4302153abb96859beb2c778cc4662607a34175065fc2f33a21f49eb3fbd1ccd3"}, + {file = "regex-2020.10.11-cp36-cp36m-win32.whl", hash = "sha256:c077c9d04a040dba001cf62b3aff08fd85be86bccf2c51a770c77377662a2d55"}, + {file = "regex-2020.10.11-cp36-cp36m-win_amd64.whl", hash = "sha256:46ab6070b0d2cb85700b8863b3f5504c7f75d8af44289e9562195fe02a8dd72d"}, + {file = "regex-2020.10.11-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:d629d750ebe75a88184db98f759633b0a7772c2e6f4da529f0027b4a402c0e2f"}, + {file = "regex-2020.10.11-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:8e7ef296b84d44425760fe813cabd7afbb48c8dd62023018b338bbd9d7d6f2f0"}, + {file = "regex-2020.10.11-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:e490f08897cb44e54bddf5c6e27deca9b58c4076849f32aaa7a0b9f1730f2c20"}, + {file = "regex-2020.10.11-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:850339226aa4fec04916386577674bb9d69abe0048f5d1a99f91b0004bfdcc01"}, + {file = "regex-2020.10.11-cp37-cp37m-win32.whl", hash = "sha256:60c4f64d9a326fe48e8738c3dbc068e1edc41ff7895a9e3723840deec4bc1c28"}, + {file = "regex-2020.10.11-cp37-cp37m-win_amd64.whl", hash = "sha256:8ba3efdd60bfee1aa784dbcea175eb442d059b576934c9d099e381e5a9f48930"}, + {file = "regex-2020.10.11-cp38-cp38-manylinux1_i686.whl", hash = "sha256:2308491b3e6c530a3bb38a8a4bb1dc5fd32cbf1e11ca623f2172ba17a81acef1"}, + {file = "regex-2020.10.11-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:b8806649983a1c78874ec7e04393ef076805740f6319e87a56f91f1767960212"}, + {file = "regex-2020.10.11-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:a2a31ee8a354fa3036d12804730e1e20d58bc4e250365ead34b9c30bbe9908c3"}, + {file = "regex-2020.10.11-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:d9d53518eeed12190744d366ec4a3f39b99d7daa705abca95f87dd8b442df4ad"}, + {file = "regex-2020.10.11-cp38-cp38-win32.whl", hash = "sha256:3d5a8d007116021cf65355ada47bf405656c4b3b9a988493d26688275fde1f1c"}, + {file = "regex-2020.10.11-cp38-cp38-win_amd64.whl", hash = "sha256:f579caecbbca291b0fcc7d473664c8c08635da2f9b1567c22ea32311c86ef68c"}, + {file = "regex-2020.10.11-cp39-cp39-manylinux1_i686.whl", hash = "sha256:8c8c42aa5d3ac9a49829c4b28a81bebfa0378996f9e0ca5b5ab8a36870c3e5ee"}, + {file = "regex-2020.10.11-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:c529ba90c1775697a65b46c83d47a2d3de70f24d96da5d41d05a761c73b063af"}, + {file = "regex-2020.10.11-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:6cf527ec2f3565248408b61dd36e380d799c2a1047eab04e13a2b0c15dd9c767"}, + {file = "regex-2020.10.11-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:671c51d352cfb146e48baee82b1ee8d6ffe357c292f5e13300cdc5c00867ebfc"}, + {file = "regex-2020.10.11-cp39-cp39-win32.whl", hash = "sha256:a63907332531a499b8cdfd18953febb5a4c525e9e7ca4ac147423b917244b260"}, + {file = "regex-2020.10.11-cp39-cp39-win_amd64.whl", hash = "sha256:1a16afbfadaadc1397353f9b32e19a65dc1d1804c80ad73a14f435348ca017ad"}, + {file = "regex-2020.10.11.tar.gz", hash = "sha256:463e770c48da76a8da82b8d4a48a541f314e0df91cbb6d873a341dbe578efafd"}, ] six = [ {file = "six-1.15.0-py2.py3-none-any.whl", hash = "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"}, {file = "six-1.15.0.tar.gz", hash = "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259"}, ] tifffile = [ - {file = "tifffile-2020.8.13-py3-none-any.whl", hash = "sha256:d4505ed63982367781a88a2c53fcab41d7fa4f298e99235e769f0fa6ca6f68e2"}, - {file = "tifffile-2020.8.13.tar.gz", hash = "sha256:60043e50adab5a1b9f13c3fb1a23992b9af00e1ada13d7ffe48c1ad7e0062cb8"}, + {file = "tifffile-2020.10.1-py3-none-any.whl", hash = "sha256:9611ac348b4db6844b6555db2b5f8f2be1715728a0011352acb55e0171ee2949"}, + {file = "tifffile-2020.10.1.tar.gz", hash = "sha256:799feeccc91965b69e1288c51a1d1118faec7f40b2eb89ad2979591b85324830"}, ] toml = [ {file = "toml-0.10.1-py2.py3-none-any.whl", hash = "sha256:bda89d5935c2eac546d648028b9901107a595863cb36bae0c73ac804a9b4ce88"}, @@ -921,13 +901,13 @@ typed-ast = [ {file = "typed_ast-1.4.1.tar.gz", hash = "sha256:8c8aaad94455178e3187ab22c8b01a3837f8ee50e09cf31f1ba129eb293ec30b"}, ] typing-extensions = [ - {file = "typing_extensions-3.7.4.2-py2-none-any.whl", hash = "sha256:f8d2bd89d25bc39dabe7d23df520442fa1d8969b82544370e03d88b5a591c392"}, - {file = "typing_extensions-3.7.4.2-py3-none-any.whl", hash = "sha256:6e95524d8a547a91e08f404ae485bbb71962de46967e1b71a0cb89af24e761c5"}, - {file = "typing_extensions-3.7.4.2.tar.gz", hash = "sha256:79ee589a3caca649a9bfd2a8de4709837400dfa00b6cc81962a1e6a1815969ae"}, + {file = "typing_extensions-3.7.4.3-py2-none-any.whl", hash = "sha256:dafc7639cde7f1b6e1acc0f457842a83e722ccca8eef5270af2d74792619a89f"}, + {file = "typing_extensions-3.7.4.3-py3-none-any.whl", hash = "sha256:7cb407020f00f7bfc3cb3e7881628838e69d8f3fcab2f64742a5e76b2f841918"}, + {file = "typing_extensions-3.7.4.3.tar.gz", hash = "sha256:99d4073b617d30288f569d3f13d2bd7548c3a7e4c8de87db09a9d29bb3a4a60c"}, ] vulture = [ - {file = "vulture-2.0-py2.py3-none-any.whl", hash = "sha256:d61fd85cc9b43e263e6b813c1ab4936e7000e0fee6558e63461074c893fef3d9"}, - {file = "vulture-2.0.tar.gz", hash = "sha256:ab0dce458ab746212cc02ac10cf31912c43bbfdcccb49025745b00850beab086"}, + {file = "vulture-2.1-py2.py3-none-any.whl", hash = "sha256:f4b3a422a6cb0285ec9df0ed46241a8577fa53ec3c43f8c70bd2a4d708c95377"}, + {file = "vulture-2.1.tar.gz", hash = "sha256:933bf7f3848e9e39ecab6a12faa59d5185471c887534abac13baea6fe8138cc2"}, ] wrapt = [ {file = "wrapt-1.12.1.tar.gz", hash = "sha256:b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7"}, @@ -937,9 +917,9 @@ xmltodict = [ {file = "xmltodict-0.12.0.tar.gz", hash = "sha256:50d8c638ed7ecb88d90561beedbf720c9b4e851a9fa6c47ebd64e99d166d8a21"}, ] xtiff = [ - {file = "xtiff-0.6.1-py3-none-any.whl", hash = "sha256:4cfe4cdea895528d0907b738c911e7ccd4b604775430311db575e8dfeaa4c03b"}, + {file = "xtiff-0.6.2.tar.gz", hash = "sha256:ec070246fdb6c99481e7afd970428a58815d7e110e4c0f1a48f8d29036df330d"}, ] zipp = [ - {file = "zipp-3.1.0-py3-none-any.whl", hash = "sha256:aa36550ff0c0b7ef7fa639055d797116ee891440eac1a56f378e2d3179e0320b"}, - {file = "zipp-3.1.0.tar.gz", hash = "sha256:c599e4d75c98f6798c509911d08a22e6c021d074469042177c8c86fb92eefd96"}, + {file = "zipp-3.3.0-py3-none-any.whl", hash = "sha256:eed8ec0b8d1416b2ca33516a37a08892442f3954dee131e92cfd92d8fe3e7066"}, + {file = "zipp-3.3.0.tar.gz", hash = "sha256:64ad89efee774d1897a58607895d80789c59778ea02185dd846ac38394a8642b"}, ] diff --git a/pyproject.toml b/pyproject.toml index ad1c847..0a556e4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "poetry.masonry.api" [tool.poetry] name = "imctools" -version = "2.0.1" +version = "2.1.0" description = "Tools to handle Fluidigm IMC data" license = "MIT" authors = ["Vito Zanotelli ", "Anton Rau "] @@ -29,7 +29,7 @@ packaging = "*" pandas = "^1.0" typing_extensions = ">=3.7.4.2" xmltodict = ">=0.12.0" -xtiff = ">=0.6.1" +xtiff = ">=0.6.2" [tool.poetry.dev-dependencies] autoflake = "^1.3.1" diff --git a/setup.cfg b/setup.cfg index 2edb76f..479143b 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 2.0.1 +current_version = 2.1.0 commit = False tag = False diff --git a/tests/test_mcdparser.py b/tests/test_mcdparser.py index 44e13f8..eb19cc7 100644 --- a/tests/test_mcdparser.py +++ b/tests/test_mcdparser.py @@ -7,7 +7,7 @@ sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) -TEST_DATA_URL = 'https://dl.dropboxusercontent.com/s/g1zs5jy49804133/testdata_v2.zip' +TEST_DATA_URL = 'https://dl.dropboxusercontent.com/s/d8jk9zpi6rzcmsf/testdata_v2.1.zip' TEST_DATA_FOLDER = os.path.join(os.path.dirname(__file__), 'testdata') TEST_ACQUISITIONS = os.path.join(TEST_DATA_FOLDER, 'acquisitions') TEST_RESULTS = os.path.join(TEST_DATA_FOLDER, 'test_results') @@ -41,7 +41,7 @@ def test_parser(self): def _get_test_cases(): if not os.path.exists(TEST_DATA_FOLDER): os.makedirs(TEST_DATA_FOLDER) - zip_file = os.path.join(TEST_DATA_FOLDER, 'testdata_v2.zip') + zip_file = os.path.join(TEST_DATA_FOLDER, 'testdata_v2.1.zip') if not os.path.isfile(zip_file): urlretrieve(TEST_DATA_URL, zip_file)