diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 8a4789073d..182885b181 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -73,7 +73,7 @@ jobs: needs: build-linux strategy: matrix: - python-version: ['3.7','3.8','3.9','3.10', '3.11'] + python-version: ['3.8','3.9','3.10', '3.11', '3.12'] steps: - uses: actions/checkout@v3 - uses: actions/download-artifact@v3 diff --git a/.readthedocs.yaml b/.readthedocs.yaml index d87c2e6fc3..d95161e3dc 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -3,11 +3,13 @@ version: 2 build: os: ubuntu-22.04 tools: - python: "3.11" + python: "3.12" sphinx: configuration: docs/conf.py python: install: + - method: pip + path: . - requirements: docs/requirements.txt diff --git a/README.md b/README.md index 84d46be8d0..f3f614c210 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,6 @@ [![install with bioconda](https://img.shields.io/badge/install%20with-bioconda-brightgreen.svg?style=flat)](http://bioconda.github.io/recipes/deeptools/README.html) [![European Galaxy server](https://img.shields.io/badge/usegalaxy-.eu-brightgreen?logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAASCAYAAABB7B6eAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAsTAAALEwEAmpwYAAACC2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjE8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx0aWZmOlBob3RvbWV0cmljSW50ZXJwcmV0YXRpb24+MjwvdGlmZjpQaG90b21ldHJpY0ludGVycHJldGF0aW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KD0UqkwAAAn9JREFUOBGlVEuLE0EQruqZiftwDz4QYT1IYM8eFkHFw/4HYX+GB3/B4l/YP+CP8OBNTwpCwFMQXAQPKtnsg5nJZpKdni6/6kzHvAYDFtRUT71f3UwAEbkLch9ogQxcBwRKMfAnM1/CBwgrbxkgPAYqlBOy1jfovlaPsEiWPROZmqmZKKzOYCJb/AbdYLso9/9B6GppBRqCrjSYYaquZq20EUKAzVpjo1FzWRDVrNay6C/HDxT92wXrAVCH3ASqq5VqEtv1WZ13Mdwf8LFyyKECNbgHHAObWhScf4Wnj9CbQpPzWYU3UFoX3qkhlG8AY2BTQt5/EA7qaEPQsgGLWied0A8VKrHAsCC1eJ6EFoUd1v6GoPOaRAtDPViUr/wPzkIFV9AaAZGtYB568VyJfijV+ZBzlVZJ3W7XHB2RESGe4opXIGzRTdjcAupOK09RA6kzr1NTrTj7V1ugM4VgPGWEw+e39CxO6JUw5XhhKihmaDacU2GiR0Ohcc4cZ+Kq3AjlEnEeRSazLs6/9b/kh4eTC+hngE3QQD7Yyclxsrf3cpxsPXn+cFdenF9aqlBXMXaDiEyfyfawBz2RqC/O9WF1ysacOpytlUSoqNrtfbS642+4D4CS9V3xb4u8P/ACI4O810efRu6KsC0QnjHJGaq4IOGUjWTo/YDZDB3xSIxcGyNlWcTucb4T3in/3IaueNrZyX0lGOrWndstOr+w21UlVFokILjJLFhPukbVY8OmwNQ3nZgNJNmKDccusSb4UIe+gtkI+9/bSLJDjqn763f5CQ5TLApmICkqwR0QnUPKZFIUnoozWcQuRbC0Km02knj0tPYx63furGs3x/iPnz83zJDVNtdP3QAAAABJRU5ErkJggg==)](https://usegalaxy.eu/root?tool_id=deeptools_compute_matrix) ![test](https://github.com/deeptools/deepTools/actions/workflows/test.yml/badge.svg) -![planemo](https://github.com/deeptools/deepTools/actions/workflows/planemo.yml/badge.svg) ## User-friendly tools for exploring deep-sequencing data @@ -34,35 +33,26 @@ Our [Gallery](http://deeptools.readthedocs.org/en/latest/content/example_gallery deepTools are available for: -* Command line usage (via pip/anaconda/github) +* Command line usage (via pip / conda / github) * Integration into Galaxy servers (via toolshed/API/web-browser) -There are many easy ways to install deepTools. Details can be found [here](https://deeptools.readthedocs.io/en/latest/content/installation.html) +There are many easy ways to install deepTools. More details can be found [here](https://deeptools.readthedocs.io/en/latest/content/installation.html). -**Install by cloning this repository:** +In Brief: -You can install any one of the deepTools branches on command line (linux/mac) by cloning this git repository : +**Install through pypi** - $ git clone https://github.com/deeptools/deepTools - $ cd deepTools - $ python setup.py install - -By default, the script will install the python library and executable -codes globally, which means you need to be root or administrator of -the machine to complete the installation. If you need to -provide a nonstandard install prefix, or any other nonstandard -options, you can provide many command line options to the install -script. + $ pip install deeptools - $ python setup.py --help +**Install via conda** -For example, to install under a specific location use: + $ conda install -c bioconda deeptools - $ python setup.py install --prefix +**Install by cloning the repository** -To install into your home directory, use: - - $ python setup.py install --user + $ git clone https://github.com/deeptools/deepTools + $ cd deepTools + $ pip install . ### Galaxy Installation diff --git a/deeptools/alignmentSieve.py b/deeptools/alignmentSieve.py index 4f2aa18793..73a2473493 100644 --- a/deeptools/alignmentSieve.py +++ b/deeptools/alignmentSieve.py @@ -7,11 +7,8 @@ from deeptools import parserCommon from deeptools.bamHandler import openBam from deeptools.mapReduce import mapReduce -try: # keep python 3.7 support. - from importlib.metadata import version -except ModuleNotFoundError: - from importlib_metadata import version from deeptools.utilities import getTLen, smartLabels, getTempFileName +from importlib.metadata import version def parseArguments(): diff --git a/deeptools/bamPEFragmentSize.py b/deeptools/bamPEFragmentSize.py index ad63fa14fd..9138051717 100755 --- a/deeptools/bamPEFragmentSize.py +++ b/deeptools/bamPEFragmentSize.py @@ -18,10 +18,7 @@ # own tools from deeptools.parserCommon import writableFile from deeptools.getFragmentAndReadSize import get_read_and_fragment_length -try: # keep python 3.7 support. - from importlib.metadata import version -except ModuleNotFoundError: - from importlib_metadata import version +from importlib.metadata import version def parse_arguments(): diff --git a/deeptools/computeMatrix.py b/deeptools/computeMatrix.py index 440358c9b2..2202c1d1a0 100644 --- a/deeptools/computeMatrix.py +++ b/deeptools/computeMatrix.py @@ -7,14 +7,11 @@ import multiprocessing from deeptools.parserCommon import writableFile, numberOfProcessors -try: # keep python 3.7 support. - from importlib.metadata import version -except ModuleNotFoundError: - from importlib_metadata import version from deeptools import parserCommon from deeptools import heatmapper import deeptools.computeMatrixOperations as cmo import deeptools.deepBlue as db +from importlib.metadata import version def parse_arguments(args=None): diff --git a/deeptools/computeMatrixOperations.py b/deeptools/computeMatrixOperations.py index b246b9ce08..6b3272d4bd 100755 --- a/deeptools/computeMatrixOperations.py +++ b/deeptools/computeMatrixOperations.py @@ -6,10 +6,7 @@ import sys import os import csv -try: # keep python 3.7 support. - from importlib.metadata import version -except ModuleNotFoundError: - from importlib_metadata import version +from importlib.metadata import version def parse_arguments(): diff --git a/deeptools/deeptools_list_tools.py b/deeptools/deeptools_list_tools.py index 0e4b6a387f..32dcf7021f 100644 --- a/deeptools/deeptools_list_tools.py +++ b/deeptools/deeptools_list_tools.py @@ -3,10 +3,7 @@ import argparse import sys -try: # keep python 3.7 support. - from importlib.metadata import version -except ModuleNotFoundError: - from importlib_metadata import version +from importlib.metadata import version def parse_arguments(args=None): diff --git a/deeptools/estimateReadFiltering.py b/deeptools/estimateReadFiltering.py index 52fded5382..8c46a38419 100644 --- a/deeptools/estimateReadFiltering.py +++ b/deeptools/estimateReadFiltering.py @@ -5,10 +5,7 @@ from deeptools import parserCommon, bamHandler, utilities from deeptools.mapReduce import mapReduce from deeptools.utilities import smartLabels -try: # keep python 3.7 support. - from importlib.metadata import version -except ModuleNotFoundError: - from importlib_metadata import version +from importlib.metadata import version def parseArguments(): diff --git a/deeptools/estimateScaleFactor.py b/deeptools/estimateScaleFactor.py index 31acea3f57..549ecf7808 100644 --- a/deeptools/estimateScaleFactor.py +++ b/deeptools/estimateScaleFactor.py @@ -6,11 +6,7 @@ from deeptools.SES_scaleFactor import estimateScaleFactor from deeptools.parserCommon import numberOfProcessors -try: # keep python 3.7 support. - from importlib.metadata import version -except ModuleNotFoundError: - from importlib_metadata import version - +from importlib.metadata import version debug = 0 diff --git a/deeptools/getFragmentAndReadSize.py b/deeptools/getFragmentAndReadSize.py index 427d5308cf..0cf2dc8eba 100644 --- a/deeptools/getFragmentAndReadSize.py +++ b/deeptools/getFragmentAndReadSize.py @@ -76,7 +76,8 @@ def get_read_and_fragment_length(bamFile, return_lengths=False, blackListFileNam ------- d : dict tuple of two dictionaries, one for the fragment length and the other - for the read length. The dictionaries summarise the mean, median etc. values +for the read length. The dictionaries summarise the mean, median etc. values + """ bam_handle = bamHandler.openBam(bamFile) diff --git a/deeptools/multiBamSummary.py b/deeptools/multiBamSummary.py index b010001ff6..981a99e3c2 100644 --- a/deeptools/multiBamSummary.py +++ b/deeptools/multiBamSummary.py @@ -9,11 +9,7 @@ import deeptools.countReadsPerBin as countR from deeptools import parserCommon from deeptools.utilities import smartLabels -try: # keep python 3.7 support. - from importlib.metadata import version -except ModuleNotFoundError: - from importlib_metadata import version - +from importlib.metadata import version old_settings = np.seterr(all='ignore') diff --git a/deeptools/multiBigwigSummary.py b/deeptools/multiBigwigSummary.py index 50f40beef5..22789647b8 100644 --- a/deeptools/multiBigwigSummary.py +++ b/deeptools/multiBigwigSummary.py @@ -10,10 +10,7 @@ from deeptools.utilities import smartLabels import deeptools.getScorePerBigWigBin as score_bw import deeptools.deepBlue as db -try: # keep python 3.7 support. - from importlib.metadata import version -except ModuleNotFoundError: - from importlib_metadata import version +from importlib.metadata import version old_settings = np.seterr(all='ignore') diff --git a/deeptools/parserCommon.py b/deeptools/parserCommon.py index 37e9f359ab..8e726ea000 100755 --- a/deeptools/parserCommon.py +++ b/deeptools/parserCommon.py @@ -1,9 +1,6 @@ import argparse import os -try: # keep python 3.7 support. - from importlib.metadata import version -except ModuleNotFoundError: - from importlib_metadata import version +from importlib.metadata import version def check_float_0_1(value): diff --git a/deeptools/plotCorrelation.py b/deeptools/plotCorrelation.py index 2b8d9f790a..988cf559e2 100644 --- a/deeptools/plotCorrelation.py +++ b/deeptools/plotCorrelation.py @@ -10,13 +10,9 @@ matplotlib.rcParams['svg.fonttype'] = 'none' from deeptools import cm # noqa: F401 import matplotlib.pyplot as plt - +from importlib.metadata import version from deeptools.correlation import Correlation from deeptools.parserCommon import writableFile -try: # keep python 3.7 support. - from importlib.metadata import version -except ModuleNotFoundError: - from importlib_metadata import version old_settings = np.seterr(all='ignore') diff --git a/deeptools/plotCoverage.py b/deeptools/plotCoverage.py index e233dcb717..a3235955c9 100755 --- a/deeptools/plotCoverage.py +++ b/deeptools/plotCoverage.py @@ -14,14 +14,10 @@ import matplotlib.pyplot as plt import plotly.offline as py import plotly.graph_objs as go - +from importlib.metadata import version import deeptools.countReadsPerBin as countR from deeptools import parserCommon from deeptools.utilities import smartLabels -try: # keep python 3.7 support. - from importlib.metadata import version -except ModuleNotFoundError: - from importlib_metadata import version old_settings = np.seterr(all='ignore') diff --git a/deeptools/plotPCA.py b/deeptools/plotPCA.py index c43942b85b..bc17ed32b1 100644 --- a/deeptools/plotPCA.py +++ b/deeptools/plotPCA.py @@ -8,13 +8,9 @@ matplotlib.rcParams['pdf.fonttype'] = 42 matplotlib.rcParams['svg.fonttype'] = 'none' from deeptools import cm # noqa: F401 - +from importlib.metadata import version from deeptools.correlation import Correlation from deeptools.parserCommon import writableFile -try: # keep python 3.7 support. - from importlib.metadata import version -except ModuleNotFoundError: - from importlib_metadata import version def parse_arguments(args=None): diff --git a/docs/content/installation.rst b/docs/content/installation.rst index a8fcaaad60..f0ce0ef5c4 100644 --- a/docs/content/installation.rst +++ b/docs/content/installation.rst @@ -2,7 +2,7 @@ Installation ============= Remember -- deepTools are available for **command line usage** as well as for -**integration into Galaxy servers**! +**integration into Galaxy servers** ! .. contents:: :local: @@ -10,68 +10,53 @@ Remember -- deepTools are available for **command line usage** as well as for Command line installation using ``conda`` ----------------------------------------- -DeepTools (including the requirements) can be installed with conda: +The recommended way to install deepTools (including its requirements) is via `miniconda `_ or `anaconda `_. .. code:: bash $ conda install -c bioconda deeptools -Command line installation using ``pip`` from pypi --------------------------------------------------- +Command line installation using ``pip`` +--------------------------------------- -Install deepTools using the following command: -:: +deepTools can also be installed using `pip `_. +You can either install the latest release from `pypi `_: - $ pip install deeptools +.. code:: bash -All python requirements should be automatically installed. + $ pip install deeptools -If you need to specify a specific path for the installation of the tools, make use of `pip install`'s numerous options: +or a specific version with: .. code:: bash - $ pip install --install-option="--prefix=/MyPath/Tools/deepTools2.0" git+https://github.com/deeptools/deepTools.git - + $ pip install deeptools==3.5.3 -Command line installation using ``pip`` from source ---------------------------------------------------- +In case you would like to install an unreleased or development version, deepTools can also be installed from the repository: -You are highly recommended to use the 'pypi installation' rather than these more complicated steps. - -1. Download source code -:: +.. code:: bash $ git clone https://github.com/deeptools/deepTools.git - -or if you want a particular release, choose one from https://github.com/deeptools/deepTools/releases: -:: - - $ wget https://github.com/deeptools/deepTools/archive/1.5.12.tar.gz - $ tar -xzvf - -3. install the source code -:: - - $ python -m build - $ pip install dist/*whl + $ cd deepTools + $ pip install . Galaxy installation -------------------- -deepTools can be easily integrated into a local `Galaxy `_. +deepTools can be easily integrated into a local `Galaxy `_. All wrappers and dependencies are available in the `Galaxy Tool -Shed `_. +Shed `_. Installation via Galaxy API (recommended) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -First generate an `API Key `_ +First generate an `API Key `_ for your admin user and run the the installation script: :: $ python ./scripts/api/install_tool_shed_repositories.py \ --api YOUR_API_KEY -l http://localhost/ \ - --url http://toolshed.g2.bx.psu.edu/ \ + --url https://toolshed.g2.bx.psu.edu/ \ -o bgruening -r --name suite_deeptools \ --tool-deps --repository-deps --panel-section-name deepTools @@ -80,7 +65,7 @@ latest revision number from the test tool shed or with the following command: :: - $ hg identify http://toolshed.g2.bx.psu.edu/repos/bgruening/suite_deeptools + $ hg identify https://toolshed.g2.bx.psu.edu/repos/bgruening/suite_deeptools You can watch the installation status under: Top Panel --> Admin --> Manage installed tool shed repositories @@ -92,15 +77,3 @@ Installation via web browser - select *Search and browse tool sheds* - Galaxy tool shed --> Sequence Analysis --> deeptools - install deeptools - -Installation with Docker -^^^^^^^^^^^^^^^^^^^^^^^^ - -The deepTools Galaxy instance is also available as a docker container, for those wishing to use the Galaxy framework but who also prefer a virtualized solution. This container is quite simple to install: -:: - - $ sudo docker pull quay.io/bgruening/galaxy-deeptools - -To start and otherwise modify this container, please see the instructions on `the docker-galaxy-stable github repository `__. Note that you must use `bgruening/galaxy-deeptools` in place of `bgruening/galaxy-stable` in the examples, as the deepTools Galaxy container is built on top of the galaxy-stable container. - -.. tip:: For support or questions please make a post on `Biostars `__. For feature requests or bug reports please open an issue `on github `__. diff --git a/docs/content/list_of_tools.rst b/docs/content/list_of_tools.rst index 4a87409918..2191f3c235 100644 --- a/docs/content/list_of_tools.rst +++ b/docs/content/list_of_tools.rst @@ -1,16 +1,6 @@ The tools ========= -.. note:: With the release of deepTools 2.0, we renamed a couple of tools: - - * **heatmapper** to :doc:`tools/plotHeatmap` - * **profiler** to :doc:`tools/plotProfile` - * **bamCorrelate** to :doc:`tools/multiBamSummary` - * **bigwigCorrelate** to :doc:`tools/multiBigwigSummary` - * **bamFingerprint** to :doc:`tools/plotFingerprint`. - - For more, see :doc:`changelog`. - .. contents:: :local: @@ -68,11 +58,18 @@ A typical deepTools command could look like this: --ignoreDuplicates \ --scaleFactor 0.5 -You can always see all available command-line options via --help: +You can always see all available command-line options via --help or -h: .. code:: bash $ bamCoverage --help + $ bamCoverage -h + +And a minimal usage example can be shown by running a command without any arguments: + +.. code:: bash + + $ bamCoverage - Output format of plots should be indicated by the file ending, e.g. ``MyPlot.pdf`` will return a pdf file, ``MyPlot.png`` a png-file - All tools that produce plots can also output the underlying data - this can be useful in cases where you don't like the deepTools visualization, as you can then use the data matrices produced by deepTools with your favorite plotting tool, such as R @@ -82,14 +79,15 @@ Parameters to decrease the run time """"""""""""""""""""""""""""""""""" - ``numberOfProcessors`` - Number of processors to be used - For example, setting ``--numberOfProcessors 10`` will split up the - workload internally into 10 chunks, which will be - processed in parallel. + +For example, setting ``--numberOfProcessors 10`` will split up the workload internally into 10 chunks, which will be processed in parallel. +Note that for highly fragmented assemblies (> 1000 contigs) the runtime increases drastically. Consider to include only canonical chromosomes in cases like this. + - ``region`` - Process only a single genomic region. - This is particularly useful when you're still trying to figure out the best parameter setting. You can focus on a certain genomic region by setting, e.g., ``--region chr2`` or - ``--region chr2:100000-200000`` -These parameters are optional and available throughout almost all deepTools. +This is particularly useful when you're still trying to figure out the best parameter setting. You can focus on a certain genomic region by setting, e.g., ``--region chr2`` or ``--region chr2:100000-200000`` + +Both parameters are optional and available throughout almost all deepTools. Filtering BAMs while processing """"""""""""""""""""""""""""""" @@ -103,7 +101,7 @@ We offer several ways to filter those BAM files on the fly so that you don't nee Only reads with a mapping quality score of at least this are considered - ``samFlagInclude`` Include reads based on the SAM flag, e.g. ``--samFlagInclude 64`` gets reads that are first in a pair. For translating SAM flags into English, go to: `https://broadinstitute.github.io/picard/explain-flags.html `_ -- ``samFlagExclude`` +- ` `samFlagExclude`` Exclude reads based on the SAM flags - see previous explanation. These parameters are optional and available throughout deepTools. diff --git a/docs/index.rst b/docs/index.rst index a512e8c11b..1d739da733 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -56,7 +56,7 @@ that fulfills the following criteria: we can add more and more modules and make use of established methods) -.. tip:: For support or questions please post to `Biostars `__. For bug reports and feature requests please open an issue ``__. +.. tip:: For support or questions please post to `Biostars `__. For bug reports and feature requests please open an issue `on github `__. Please cite deepTools2 as follows: @@ -67,6 +67,6 @@ Steffen Heyne, Friederike Dündar, and Thomas Manke. .. image:: images/logo_mpi-ie.jpg -This tool suite is developed by the `Bioinformatics Facility `_ at the +This tool suite is developed by the `Bioinformatics Facility `_ at the `Max Planck Institute for Immunobiology and Epigenetics, -Freiburg `_. +Freiburg `_. diff --git a/docs/requirements.txt b/docs/requirements.txt index 0a9300aa91..56d41a584d 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,4 +1,4 @@ -sphinx -mock -sphinx_rtd_theme -sphinx-argparse \ No newline at end of file +sphinx==7.2.6 +mock==5.1.0 +sphinx_rtd_theme==1.3.0 +sphinx-argparse==0.4.0 \ No newline at end of file diff --git a/galaxy/wrapper/deepTools_macros.xml b/galaxy/wrapper/deepTools_macros.xml index 85cbcb2aaa..49c8dd9ed7 100755 --- a/galaxy/wrapper/deepTools_macros.xml +++ b/galaxy/wrapper/deepTools_macros.xml @@ -1,7 +1,7 @@ --numberOfProcessors "\${GALAXY_SLOTS:-4}" - 3.5.4 + 3.5.5 22.05 diff --git a/pyproject.toml b/pyproject.toml index 3b877aa5f3..5a902d1dba 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ requires = [ [project] name = "deepTools" -version = "3.5.4" +version = "3.5.5" authors = [ {name="Fidel Ramirez"}, {name="Devon P Ryan"}, @@ -19,7 +19,7 @@ authors = [ {name="Thomas Manke"}, {email="bioinfo-core@ie-freiburg.mpg.de"} ] -requires-python = ">=3.7" +requires-python = ">=3.8" dependencies = [ "numpy >= 1.9.0", "scipy >= 0.17.0", @@ -29,8 +29,7 @@ dependencies = [ "pyBigWig >= 0.2.1", "py2bit >= 0.2.0", "plotly >= 4.9", - "deeptoolsintervals >= 0.1.8", - "importlib-metadata" # python 3.7 support + "deeptoolsintervals >= 0.1.8" ] description = "Useful tools for exploring deep sequencing data." license = {file = "LICENSE.txt"}