diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml new file mode 100644 index 0000000..e3b16c8 --- /dev/null +++ b/.github/workflows/docker-publish.yml @@ -0,0 +1,64 @@ +name: Publish Docker image to ghcr.io +on: + push: + tags: + - "*" +jobs: + push_to_registries: + name: Build and publish Docker image + runs-on: ubuntu-latest + steps: + - name: Check out the repo + uses: actions/checkout@v3 + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + - name: Prepare + # In this preparation step, a few configurations are made + # according to tags that will be used to export the image + # for Docker Hub, as well as the name of the image itself + id: prep + run: | + DOCKER_IMAGE=ghcr.io/rhshah/iAnnotateSV + VERSION=noop + if [ "${{ github.event_name }}" = "schedule" ]; then + VERSION=nightly + elif [[ $GITHUB_REF == refs/tags/* ]]; then + VERSION=${GITHUB_REF#refs/tags/} + elif [[ $GITHUB_REF == refs/heads/* ]]; then + VERSION=$(echo ${GITHUB_REF#refs/heads/} | sed -r 's#/+#-#g') + fi + TAGS="${DOCKER_IMAGE}:${VERSION}" + if [[ $VERSION =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then + MINOR=${VERSION%.*} + MAJOR=${MINOR%.*} + TAGS="$TAGS,${DOCKER_IMAGE}:latest" + elif [[ $VERSION =~ ^v[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then + VERSION=$(echo ${VERSION#v}) + TAGS="${DOCKER_IMAGE}:${VERSION}" + elif [ "${{ github.event_name }}" = "push" ]; then + TAGS="$TAGS,${DOCKER_IMAGE}:sha-${GITHUB_SHA::8}" + fi + echo ::set-output name=version::${VERSION} + echo ::set-output name=tags::${TAGS} + - name: Login to GitHub Container Registry + #if: github.event_name != 'pull_request' + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.RS_PAT }} + - name: Push to GitHub Packages + uses: docker/build-push-action@v3 + with: + context: . + file: ./Dockerfile + push: true + tags: ${{ steps.prep.outputs.tags }} + build-args: | + iAnnotateSV_VERSION=${{ steps.prep.outputs.version }} + labels: | + org.opencontainers.image.title=${{ github.event.repository.name }} + org.opencontainers.image.description=${{ github.event.repository.description }} + org.opencontainers.image.version=${{ steps.prep.outputs.version }} diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml index 14d7ba3..cb3e5b9 100644 --- a/.github/workflows/python-package.yml +++ b/.github/workflows/python-package.yml @@ -15,17 +15,17 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: [2.7.18] + python-version: [3.10.14] steps: - name: Checkout github repo (+ download lfs dependencies) - uses: actions/checkout@v2 + uses: actions/checkout@v4 with: lfs: true - name: Checkout LFS objects run: git lfs checkout - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 + uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - name: Install dependencies diff --git a/.github/workflows/python-publish.yml b/.github/workflows/python-publish.yml new file mode 100644 index 0000000..794d331 --- /dev/null +++ b/.github/workflows/python-publish.yml @@ -0,0 +1,19 @@ +# This workflow will upload a Python Package using Twine when a release is created +# For more information see: https://help.github.com/en/actions/language-and-framework-guides/using-python-with-github-actions#publishing-to-package-registries + +name: Publish package to PyPI + +on: + push: + tags: + - "*.*.*" + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Build and publish to pypi + uses: JRubics/poetry-publish@v1.11 + with: + pypi_token: ${{ secrets.PYPI_API_TOKEN }} \ No newline at end of file diff --git a/.gitignore b/.gitignore index 36eb61b..00530d8 100644 --- a/.gitignore +++ b/.gitignore @@ -90,4 +90,7 @@ ENV/ # IDE settings .vscode/ -.idea/ \ No newline at end of file +.idea/ +.DS_Store +iAnnotateSV/.DS_Store +iAnnotateSV/data/.DS_Store diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index c04d0c0..0000000 --- a/.travis.yml +++ /dev/null @@ -1,19 +0,0 @@ -language: python -python: - - "2.7.15" -# command to install dependencies -install: "pip install -r requirements.txt" -# command to run tests -script: nosetests -v --with-coverage -deploy: - provider: pypi - distributions: sdist bdist_wheel - skip_cleanup: true - skip_existing: true - user: __token__ - password: - secure: pypi-AgEIcHlwaS5vcmcCJDg4ZjkzNGNkLTllZGYtNDg1My1iMThjLTMzMmIzNzRkYWI3NwACPHsicGVybWlzc2lvbnMiOiB7InByb2plY3RzIjogWyJpYW5ub3RhdGVzdiJdfSwgInZlcnNpb24iOiAxfQAABiDhmk7nEtxhl_TRlyhU030vSTHAQeBmK7h3VWPC-jQuAw - on: - tags: true - repo: rhshah/iAnnotateSV - python: 2.7.15 diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..05ed91b --- /dev/null +++ b/Dockerfile @@ -0,0 +1,39 @@ +################## Base Image ########## +ARG PYTHON_VERSION="3.10.14" +FROM --platform=linux/amd64 python:${PYTHON_VERSION} + +################## ARGUMENTS/Environments ########## +ARG BUILD_DATE +ARG BUILD_VERSION +ARG LICENSE="Apache-2.0" +ARG iAnnotateSV_VERSION +ARG VCS_REF + +################## METADATA ######################## +LABEL org.opencontainers.image.vendor="MSKCC" +LABEL org.opencontainers.image.authors="Ronak Shah (shahr2@mskcc.org)" + +LABEL org.opencontainers.image.created=${BUILD_DATE} \ + org.opencontainers.image.version=${BUILD_VERSION} \ + org.opencontainers.image.licenses=${LICENSE} \ + org.opencontainers.image.version.pvs=${iAnnotateSV_VERSION} \ + org.opencontainers.image.source.pv="https://pypi.org/project/iAnnotateSV" \ + org.opencontainers.image.vcs-url="https://github.com/rhshah/iAnnotateSV.git" \ + org.opencontainers.image.vcs-ref=${VCS_REF} + +LABEL org.opencontainers.image.description="This container uses python 3.10.14 as the base image to build \ + iAnnotateSV version ${iAnnotateSV_VERSION}" + +################## INSTALL ########################## + +WORKDIR /app +ADD . /app + +# install iAnnotateSV + +RUN apt-get update && apt-get install --no-install-recommends -y gcc g++ zlib1g-dev \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* \ + && make deps-install \ + && poetry build \ + && pip install dist/iAnnotateSV-*-py3-none-any.whl diff --git a/Makefile b/Makefile index eff8a6c..e9b3f7b 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,14 @@ -init: - pip install -r requirements.txt +# options +.ONESHELL: -test: - nosetests -v --with-coverage --cover-tests tests \ No newline at end of file + +.PHONY: deps-install +deps-install: ## install dependencies + pip install poetry + poetry install + +requirements.txt: poetry.lock + poetry export --format requirements.txt --output requirements.txt --without-hashes + +requirements-dev.txt: poetry.lock + poetry export --with dev --format requirements.txt --output requirements-dev.txt --without-hashes \ No newline at end of file diff --git a/README.rst b/README.rst index 69c3083..382b9a0 100755 --- a/README.rst +++ b/README.rst @@ -10,23 +10,9 @@ iAnnotateSV: Annotation of structural variants detected from NGS .. image:: https://img.shields.io/pypi/v/iAnnotateSV.svg :target: https://pypi.python.org/pypi/iAnnotateSV -.. image:: https://landscape.io/github/rhshah/iAnnotateSV/master/landscape.svg?style=flat - :target: https://landscape.io/github/rhshah/iAnnotateSV/master - :alt: Code Health - - .. image:: https://zenodo.org/badge/18929/rhshah/iAnnotateSV.svg :target: https://zenodo.org/badge/latestdoi/18929/rhshah/iAnnotateSV - -.. image:: https://travis-ci.org/rhshah/iAnnotateSV.svg?branch=master - :target: https://travis-ci.org/rhshah/iAnnotateSV - - -.. image:: https://codecov.io/gh/rhshah/iAnnotateSV/branch/master/graph/badge.svg - :target: https://codecov.io/gh/rhshah/iAnnotateSV - - iAnnotateSV is a Python library and command-line software toolkit to annotate and visualize structural variants detected from Next Generation DNA sequencing data. This works for majority is just re-writing of a tool called dRanger_annotate written in matlab by Mike Lawrence at Broad Institue. But it also has some additional functionality and control over the annotation w.r.t the what transcripts to be used for annotation. @@ -48,13 +34,13 @@ Required Packages ================= We require that you install: -:python: `v2.7.15 `_ -:pandas: `v0.24.2 `_ -:biopython: `v1.76 `_ -:Pillow: `v6.2.1 `_ -:openpyxl: `v2.6.4 `_ -:reportlab: `v3.5.2 `_ -:coloredlogs: `v14.0 `_ +:python: `v3.10.14 `_ +:pandas: `v2.2.2 `_ +:biopython: `v1.84 `_ +:Pillow: `v10.4.0 `_ +:openpyxl: `v3.1.5 `_ +:reportlab: `v3.6.13 `_ +:coloredlogs: `v15.0.1 `_ Quick Usage =========== diff --git a/docs/iAnnotateSV.rst b/docs/iAnnotateSV.rst index 7b05270..de27c99 100755 --- a/docs/iAnnotateSV.rst +++ b/docs/iAnnotateSV.rst @@ -6,13 +6,13 @@ Required Packages We require that you install: -:python: `v2.7.15 `_ -:pandas: `v0.24.2 `_ -:biopython: `v1.76 `_ -:Pillow: `v6.2.1 `_ -:openpyxl: `v2.6.4 `_ -:reportlab: `v3.5.2 `_ -:coloredlogs: `v14.0 `_ +:python: `v3.10.14 `_ +:pandas: `v2.2.2 `_ +:biopython: `v1.84 `_ +:Pillow: `v10.4.0 `_ +:openpyxl: `v3.1.5 `_ +:reportlab: `v3.6.13 `_ +:coloredlogs: `v15.0.1 `_ Quick Usage =========== diff --git a/docs/index.rst b/docs/index.rst index 011b2c3..2aeb704 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -21,22 +21,8 @@ short-read sequencing platforms such as Illumina. .. image:: https://img.shields.io/pypi/v/iAnnotateSV.svg :target: https://pypi.python.org/pypi/iAnnotateSV - -.. image:: https://landscape.io/github/rhshah/iAnnotateSV/master/landscape.svg?style=flat - :target: https://landscape.io/github/rhshah/iAnnotateSV/master - :alt: Code Health - - .. image:: https://zenodo.org/badge/18929/rhshah/iAnnotateSV.svg :target: https://zenodo.org/badge/latestdoi/18929/rhshah/iAnnotateSV - - -.. image:: https://travis-ci.org/rhshah/iAnnotateSV.svg?branch=master - :target: https://travis-ci.org/rhshah/iAnnotateSV - - -.. image:: https://codecov.io/gh/rhshah/iAnnotateSV/branch/master/graph/badge.svg - :target: https://codecov.io/gh/rhshah/iAnnotateSV Contents: diff --git a/iAnnotateSV/AddExternalAnnotations.py b/iAnnotateSV/AddExternalAnnotations.py index e289521..c446cdb 100644 --- a/iAnnotateSV/AddExternalAnnotations.py +++ b/iAnnotateSV/AddExternalAnnotations.py @@ -123,8 +123,8 @@ def main(command=None): # Repeat Region Data (rr_loc1, rr_loc2) = afr.AnnotateRepeatRegion( args.verbose, count, row.copy(), repeatRegionDict) - data.ix[count, 'repName-repClass-repFamily:-site1'] = "<=>".join(rr_loc1) - data.ix[count, 'repName-repClass-repFamily:-site2'] = "<=>".join(rr_loc2) + data.loc[count, 'repName-repClass-repFamily:-site1'] = "<=>".join(rr_loc1) + data.loc[count, "repName-repClass-repFamily:-site2"] = "<=>".join(rr_loc2) # Cosmic Consensus Data cc_SV = afc.AnnotateFromCosmicCensusFile(args.ccFilename, args.verbose, count, row.copy()) cct_SV = afc.AnnotateFromCosmicFusionCountsFile(args.cctFilename, args.verbose, count, row.copy()) @@ -136,16 +136,16 @@ def main(command=None): ccC.append(ccData[2]) ccD.append(ccData[3]) ccE.append(ccData[4]) - data.ix[count, 'Cosmic_Fusion_Counts'] = cct_SV - data.ix[count, 'CC_Chr_Band'] = "<=>".join(ccA) - data.ix[count, 'CC_Tumour_Types(Somatic)'] = "<=>".join(ccB) - data.ix[count, 'CC_Cancer_Syndrome'] = "<=>".join(ccC) - data.ix[count, 'CC_Mutation_Type'] = "<=>".join(ccD) - data.ix[count, 'CC_Translocation_Partner'] = "<=>".join(ccE) + data.loc[count, 'Cosmic_Fusion_Counts'] = cct_SV + data.loc[count, 'CC_Chr_Band'] = "<=>".join(ccA) + data.loc[count, 'CC_Tumour_Types(Somatic)'] = "<=>".join(ccB) + data.loc[count, 'CC_Cancer_Syndrome'] = "<=>".join(ccC) + data.loc[count, 'CC_Mutation_Type'] = "<=>".join(ccD) + data.loc[count, 'CC_Translocation_Partner'] = "<=>".join(ccE) # DGvData (dgv_loc1, dgv_loc2) = afd.AnnotateDGv(args.verbose, count, row.copy(), dgvDict) - data.ix[count, 'DGv_Name-DGv_VarType-site1'] = "<=>".join(dgv_loc1) - data.ix[count, 'DGv_Name-DGv_VarType-site2'] = "<=>".join(dgv_loc2) + data.loc[count, 'DGv_Name-DGv_VarType-site1'] = "<=>".join(dgv_loc1) + data.loc[count, 'DGv_Name-DGv_VarType-site2'] = "<=>".join(dgv_loc2) else: data = ReadSVFile(args) repeatRegionDict = afr.ReadRepeatFile(args.rrFilename, args.verbose) @@ -156,8 +156,8 @@ def main(command=None): cc_SV = afc.AnnotateFromCosmicCensusFile(args.ccFilename, args.verbose, count, row.copy()) cct_SV = afc.AnnotateFromCosmicFusionCountsFile(args.cctFilename, args.verbose, count, row.copy()) (dgv_loc1, dgv_loc2) = afd.AnnotateDGv(args.verbose, count, row.copy(), dgvDict) - data.ix[count, 'repName-repClass-repFamily:-site1'] = "<=>".join(rr_loc1) - data.ix[count, 'repName-repClass-repFamily:-site2'] = "<=>".join(rr_loc2) + data.loc[count, "repName-repClass-repFamily:-site1"] = "<=>".join(rr_loc1) + data.loc[count, "repName-repClass-repFamily:-site2"] = "<=>".join(rr_loc2) ccA, ccB, ccC, ccD = ([] for i in range(4)) for cc in cc_SV: ccData = cc.split('\t') @@ -165,14 +165,14 @@ def main(command=None): ccB.append(ccData[1]) ccC.append(ccData[2]) ccD.append(ccData[3]) - data.ix[count, 'Cosmic_Fusion_Counts'] = cct_SV - data.ix[count, 'CC_Chr_Band'] = "<=>".join(ccA) - data.ix[count, 'CC_Tumour_Types(Somatic)'] = "<=>".join(ccB) - data.ix[count, 'CC_Cancer_Syndrome'] = "<=>".join(ccC) - data.ix[count, 'CC_Mutation_Type'] = "<=>".join(ccD) - data.ix[count, 'CC_Translocation_Partner'] = "<=>".join(ccE) - data.ix[count, 'DGv_Name-DGv_VarType-site1'] = "<=>".join(dgv_loc1) - data.ix[count, 'DGv_Name-DGv_VarType-site2'] = "<=>".join(dgv_loc2) + data.loc[count, "Cosmic_Fusion_Counts"] = cct_SV + data.loc[count, "CC_Chr_Band"] = "<=>".join(ccA) + data.loc[count, "CC_Tumour_Types(Somatic)"] = "<=>".join(ccB) + data.loc[count, "CC_Cancer_Syndrome"] = "<=>".join(ccC) + data.loc[count, "CC_Mutation_Type"] = "<=>".join(ccD) + data.loc[count, "CC_Translocation_Partner"] = "<=>".join(ccE) + data.loc[count, "DGv_Name-DGv_VarType-site1"] = "<=>".join(dgv_loc1) + data.loc[count, "DGv_Name-DGv_VarType-site2"] = "<=>".join(dgv_loc2) # Print to TSV file data.to_csv(outFileTxt, sep='\t', index=False) diff --git a/iAnnotateSV/AnnotateEachBreakpoint.py b/iAnnotateSV/AnnotateEachBreakpoint.py index a2d527e..ddf6e88 100755 --- a/iAnnotateSV/AnnotateEachBreakpoint.py +++ b/iAnnotateSV/AnnotateEachBreakpoint.py @@ -110,8 +110,8 @@ def AnnotateEachBreakpoint(chromosome,position,strand,df,autoSelect): c = None d = None #In exonic region - exonStarts = filter(None,df.iloc[tindex]['exonStarts'].split(",")) - exonEnds = filter(None,df.iloc[tindex]['exonEnds'].split(",")) + exonStarts = list(filter(None,df.iloc[tindex]['exonStarts'].split(","))) + exonEnds = list(filter(None,df.iloc[tindex]['exonEnds'].split(","))) in_exon = None for k in range(len(exonStarts)): if(int(exonStarts[k])<= int(position) and int(exonEnds[k]) >= int(position)): @@ -131,7 +131,7 @@ def AnnotateEachBreakpoint(chromosome,position,strand,df,autoSelect): #In Intronic Region c = 2 exonCount = df.iloc[tindex]['exonCount'] - exonFrames = filter(None,df.iloc[tindex]['exonFrames'].split(",")) + exonFrames = list(filter(None,df.iloc[tindex]['exonFrames'].split(","))) for k in range(exonCount): if(int(exonEnds[k]) < int(position) and int(exonStarts[k+1]) > position ): if(df.iloc[tindex]['strand'] == '+'): @@ -158,7 +158,7 @@ def AnnotateEachBreakpoint(chromosome,position,strand,df,autoSelect): for y in 1000.0 ** (np.arange(1,4,0.3)): cmpDB = distBefore[distBefore <= y] if(not cmpDB.empty): - beforeIdx = cmpDB.idxmin(axis=1) + beforeIdx = cmpDB.idxmin() geneName = df.iloc[beforeIdx]['name2'] strandDirection = df.iloc[beforeIdx]['strand'] transcript = df.iloc[beforeIdx]['#name'] diff --git a/iAnnotateSV/AnnotationForKinaseDomain.py b/iAnnotateSV/AnnotationForKinaseDomain.py index 26218cd..56434a6 100644 --- a/iAnnotateSV/AnnotationForKinaseDomain.py +++ b/iAnnotateSV/AnnotationForKinaseDomain.py @@ -128,13 +128,14 @@ def run(svDFA, refPath, ctPath, allctPath, upPath, verbose): def processData(chrom, transcript, refDF, upDF): transcripts = (refDF[refDF['name'] == transcript]) if (len(transcripts) > 1): - transcriptIdx, = (transcripts[transcripts['chrom'] == chrom].index) + transcriptIdx = getValueOrDefault(transcripts[transcripts['chrom'] == chrom].index,0) else: try: - transcriptIdx, = (refDF[refDF['name'] == transcript].index) + transcriptIdx = getValueOrDefault(refDF[refDF['name'] == transcript].index,0) except ValueError: return (None, None, None) - + if transcriptIdx is None: + return (None, None, None) refTxSt = int(refDF.iloc[transcriptIdx]['txStart']) refTxEn = int(refDF.iloc[transcriptIdx]['txEnd']) # print "1:",transcriptIdx,"\n",refTxSt,"\n", refTxEn, "\n" @@ -284,3 +285,13 @@ def getKinaseInfo(chrom, pos, gene, egene1, egene2, transcript, refDF, upDF): kanno = "Kinase Domain Not Included" # print gene, pos, chromStart, chromEnd, transcript, strand, kanno return(kanno) + +def getValueOrDefault(value, index, default=None): + returnValue = default + + try: + returnValue = value[index] + except Exception: + pass + + return returnValue diff --git a/iAnnotateSV/__init__.py b/iAnnotateSV/__init__.py index 27c8cc4..b24a2e6 100755 --- a/iAnnotateSV/__init__.py +++ b/iAnnotateSV/__init__.py @@ -1,6 +1,6 @@ __title__ = 'iAnnotateSV' -__version__ = '1.2.1' +__version__ = '1.3.0' __author__ = 'Ronak H Shah' __license__ = 'Apache Software License' -__copyright__ = 'Copyright 2020 Ronak Hasmukh Shah' +__copyright__ = 'Copyright 2020 Ronak Shah' diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..43e3737 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,35 @@ +[tool.poetry] +name = "iAnnotateSV" +version = "1.3.0" +description = "iAnnotateSV is a Python library and command-line software toolkit to annotate and visualize structural variants detected from Next Generation DNA sequencing data." +authors = ["Ronak Shah "] +readme = "README.rst" +packages = [{include = "iAnnotateSV"}] +include = [ + "iAnnotateSV/data/*", + "iAnnotateSV/test/*" +] + +[tool.poetry.dependencies] +python = "^3.10.14" +biopython = "1.84" +numpy = "2.1.0" +pandas = "2.2.2" +pillow = "10.4.0" +openpyxl = "3.1.5" +reportlab = "3.6.13" +coloredlogs = "15.0.1" + +[tool.poetry.dev-dependencies] +flake8 = "*" +ruff = "*" +codecov = "*" +coverage = "*" +nose = "*" + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" + +[tool.poetry.scripts] +igv = "iAnnotateSV.iAnnotateSV:app" \ No newline at end of file diff --git a/requirements-dev.txt b/requirements-dev.txt new file mode 100644 index 0000000..b5f7dee --- /dev/null +++ b/requirements-dev.txt @@ -0,0 +1,12 @@ +numpy==2.1.0 +openpyxl==3.1.5 +pandas==2.2.2 +coloredlogs==15.0.1 +pillow==10.4.0 +biopython==1.84 +reportlab==3.6.13 +flake8 +ruff +codecov +coverage +nose \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 9b36839..ab7732b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,11 +1,7 @@ -numpy==1.16.5 -openpyxl==2.6.4 -nose==1.3.7 -pandas==0.24.2 -coloredlogs==14.0 -codecov==2.0.5 -coverage==4.3.4 -pillow==6.2.1 -biopython==1.76 -reportlab==3.5.42 -bump2version==0.5.11 +numpy==2.1.0 +openpyxl==3.1.5 +pandas==2.2.2 +coloredlogs==15.0.1 +pillow==10.4.0 +biopython==1.84 +reportlab==3.6.13 diff --git a/setup.cfg b/setup.cfg index 2340c7e..f9ebfce 100644 --- a/setup.cfg +++ b/setup.cfg @@ -7,7 +7,7 @@ keywords = structural, variants, NGS, MSK-IMPACT, MSK-ACCESS license = Apache Software License classifiers = Programming Language :: Python - Programming Language :: Python :: 2.7 + Programming Language :: Python :: 3.10.14 License :: OSI Approved :: Apache License Operating System :: OS Independent Intended Audience :: Science/Research @@ -15,7 +15,7 @@ classifiers = Development Status :: 5 - Production/Stable [bumpversion] -current_version = 1.2.1 +current_version = 1.3.0 commit = True tag = True diff --git a/setup.py b/setup.py index 65572d9..ccd1b44 100755 --- a/setup.py +++ b/setup.py @@ -30,29 +30,25 @@ def read(*filenames, **kwargs): long_description='See Readme', include_package_data=True, url='https://github.com/rhshah/iAnnotateSV', - download_url = 'https://github.com/rhshah/iAnnotateSV/tarball/1.2.0', + download_url = 'https://github.com/rhshah/iAnnotateSV/tarball/1.3.0', author=iAnnotateSV.__author__, author_email='rons.shah@gmail.com', license=iAnnotateSV.__license__, platforms='any', packages=['iAnnotateSV'], install_requires=[ - 'numpy==1.16.5', - 'openpyxl==2.6.4', - 'pandas==0.24.2', - 'nose==1.3.7', - 'codecov==2.0.5', - 'coverage==4.3.4', - 'pillow==6.2.1', - 'biopython==1.76', - 'reportlab==3.5.42', - 'coloredlogs==14.0', - 'bump2version==0.5.11' + 'numpy==2.1.0', + 'openpyxl==3.1.5', + 'pandas==2.2.2', + 'pillow==10.4.0', + 'biopython==1.84', + 'reportlab==3.6.13', + 'coloredlogs==15.0.1', ], zip_safe=False, classifiers=( 'Programming Language :: Python', - 'Programming Language :: Python :: 2.7', + 'Programming Language :: Python :: 3.10.14', 'License :: OSI Approved :: Apache Software License', 'Operating System :: OS Independent', 'Intended Audience :: Science/Research',