[med-svn] [Git][med-team/python-bx][master] 4 commits: bye bye Python 2

Michael R. Crusoe gitlab at salsa.debian.org
Tue Jul 23 14:51:12 BST 2019



Michael R. Crusoe pushed to branch master at Debian Med / python-bx


Commits:
e14ba32d by Michael R. Crusoe at 2019-07-23T13:08:44Z
bye bye Python 2

- - - - -
d00e2e62 by Michael R. Crusoe at 2019-07-23T13:09:56Z
New upstream version 0.8.4
- - - - -
6b86e1d8 by Michael R. Crusoe at 2019-07-23T13:09:58Z
Update upstream source from tag 'upstream/0.8.4'

Update to upstream version '0.8.4'
with Debian dir 92686d1069d5d6e3c39b848ba439cfcf7d686e33
- - - - -
8ba7414e by Michael R. Crusoe at 2019-07-23T13:48:25Z
0.8.4-1

- - - - -


23 changed files:

- .gitignore
- .travis.yml
- README.md
- debian/README.Debian
- debian/changelog
- debian/control
- + debian/lintian-overrides
- − debian/python-bx-tools.dirs
- − debian/python-bx-tools.lintian-overrides
- − debian/python-bx.dirs
- − debian/python-bx.install
- − debian/python3-bx-tools.dirs
- − debian/python3-bx-tools.lintian-overrides
- − debian/python3-bx.dirs
- − debian/python3-bx.install
- debian/rules
- doc/source/index.rst
- lib/bx/align/score_tests.py
- lib/bx/bbi/bpt_file.pyx
- lib/bx/bitset_tests.py
- lib/bx/seq/twobit.py
- setup.cfg
- setup.py


Changes:

=====================================
.gitignore
=====================================
@@ -22,3 +22,6 @@ nose*.egg
 
 # .eggs directory
 .eggs
+
+# Virtualenv
+.venv


=====================================
.travis.yml
=====================================
@@ -1,27 +1,59 @@
 language: python
-sudo: false
+cache: pip
 os:
-    - linux
-    ## - osx
+  - linux
 python:
-    - 2.7
-    - 3.3
+  - '2.7'
+  - '3.5'
+
+env:
+  global:
+    - PYTHON=python
+    - TWINE_USERNAME=nsoranzo
+    - secure: 'kFoqHCxat/ETS2SUc2q9M7YvzvnlR7sgHmx7SRvVgTyLkk1efpJ++YPwDBEYZ3v+GLf2nRfc20GxtZkH6ey1f//aj4CT2q2CJiUsKAlkFAOHzKo/3mTLl/WDHkPAr9MW7AdnbNk6W8sIPCKqFsyKL2FTH70dBcxa1e7trQ2RC64hnOOkt/tm2cQhj6sX0gROggN5QrpHE8tDZb9ugF0uf92L/CGxeClAebWgb7zVChHDMTNsmnOvWUF9m6LZOvkgFmuIeh70EPuOWh6LxU/n5JyevYIGO5vVDbjgfmNELlG2KUTm6dWeoyofcj6hUqYmQsmI1ATrf7ThY1+b6asQGy+Exp/76MBXiYRh+RgVKifwaZMOWehzfjDQvPYOGvf6rXOVGeVZ+nBkskr0HARsX1KnyDE+k+XPoP7zqvW6mCic9ZQ+IdQJtxMHOTxxFjuPAlunvaUqDNM9VP6YEWOI4UqIOO1nQh4E2zkPhXI2yY744q+BV/5+3HHqNQj1+5qFPoZeyDEuNXwgDCjrJ8i3hna/LTTvRigx6/YQL1PF/C30R4h/nkqp8ghA4VpNRPnQ8nOO+oD6AdN7Pswc3C4qGPEwoeqfNzEIR1KfEWzB7HsfTFbgyGFFNGuQ/P26DMK+kPBNZ6GhZ9wb5/xT226OA+ovcAmVGn/Hnt/qVaylXNk='
+
+_deploy_common: &deploy_common
+  if: tag IS present
+  install:
+    - $PYTHON -m pip install cibuildwheel twine
+
+matrix:
+  include:
+    - stage: deploy
+      python: '3.5'
+      services:
+        - docker
+      env: CIBW_BEFORE_BUILD="yum install -y zlib-devel && pip install Cython numpy"
+      <<: *deploy_common
+      script:
+        - cibuildwheel --output-dir dist
+        - $PYTHON -m pip install Cython nose numpy python-lzo six
+        - $PYTHON setup.py build_ext --inplace
+        - $PYTHON setup.py sdist
+        - twine check dist/*
+        - twine upload --skip-existing dist/*
+    - stage: deploy
+      os: osx
+      language: generic
+      env:
+        - PYTHON=python3
+        - CIBW_BEFORE_BUILD="pip install Cython numpy"
+      addons: {}
+      <<: *deploy_common
+      script:
+        - cibuildwheel --output-dir dist
+        - twine check dist/*
+        - twine upload --skip-existing dist/*
+
 addons:
-    apt:
-        packages:
-            - liblzo2-dev
-before_install:
-    # Use miniconda for dependencies, pip is too slow -- https://gist.github.com/zonca/9958333
-    - wget http://repo.continuum.io/miniconda/Miniconda-latest-Linux-x86_64.sh -O miniconda.sh
-    - chmod +x miniconda.sh
-    - ./miniconda.sh -b
-    - export PATH=/home/travis/miniconda2/bin:$PATH
-    - conda update --yes conda
-install: 
-    - conda create --yes -n testenv python=$TRAVIS_PYTHON_VERSION Cython numpy nose
-    - source activate testenv
-    - pip install python-lzo
-    - python setup.py build_ext --inplace
-    - python setup.py install
-script: 
-    - nosetests
+  apt:
+    packages:
+      - liblzo2-dev
+
+install:
+  - $PYTHON -m pip install Cython nose numpy python-lzo six
+  - $PYTHON setup.py build_ext --inplace
+  - $PYTHON setup.py install
+
+script:
+  - nosetests


=====================================
README.md
=====================================
@@ -7,7 +7,7 @@
 The bx-python project is a python library and associated set of scripts to allow for rapid implementation of genome scale analyses. The library contains a variety of useful modules, but the particular strengths are:
 
   * Classes for reading and working with genome-scale multiple local alignments (in MAF, AXT, and LAV formats)
-  * Generic data structure for indexing on disk files that contain blocks of data associated with intervals on various sequences (used, for example, to provide random access to individual alignments in huge files; optomized for use over network filesystems)
+  * Generic data structure for indexing on disk files that contain blocks of data associated with intervals on various sequences (used, for example, to provide random access to individual alignments in huge files; optimized for use over network filesystems)
   * Data structures for working with intervals on sequences
     * "Binned bitsets" which act just like chromosome sized bit arrays, but lazily allocate regions and allow large blocks of all set or all unset bits to be stored compactly
     * "Intersecter" for performing fast intersection tests that preserve both query and target intervals and associated annotation


=====================================
debian/README.Debian
=====================================
@@ -1,10 +1,6 @@
 python-bx for Debian
 --------------------
 
-The situation is somewhat unfortunate in that both python2 and python3
-occupy the same location in /usr/bin. The -tools packages separate those
-binaries from the modules.
-
 The language suffix ".py" was left for the time being for compatibility
 with the installation of the same on other distributions and wary of
 reverse dependencies.


=====================================
debian/changelog
=====================================
@@ -1,3 +1,9 @@
+python-bx (0.8.4-1) unstable; urgency=medium
+
+  * New upstream release. Removed Python2 binary packages; enabled the tests
+
+ -- Michael R. Crusoe <michael.crusoe at gmail.com>  Tue, 23 Jul 2019 15:10:11 +0200
+
 python-bx (0.8.2-1) unstable; urgency=low
 
   * New upstream version.


=====================================
debian/control
=====================================
@@ -8,55 +8,26 @@ Build-Depends:
 	debhelper (>= 9),
 	dh-python,
 	zlib1g-dev,
-# Python2
-	python-setuptools,
-	python-all-dev,
-	python-nose,
-	python-numpy,
-	cython,
-# Python3
 	python3-setuptools,
 	python3-all-dev,
+	python3-lzo,
 	python3-nose,
 	python3-numpy,
+	python3-six,
 	cython3
 Standards-Version: 4.2.1
 Homepage:  https://github.com/bxlab/bx-python
 Vcs-Git: https://salsa.debian.org/med-team/python-bx.git
 Vcs-Browser: https://salsa.debian.org/med-team/python-bx
 
-Package: python-bx
-Architecture: any
-Depends:
-	${shlibs:Depends},
-	${misc:Depends},
-	${python:Depends},
-Description: library to manage genomic data and its aligment
- The bx-python project is a python library and associated set of scripts to
- allow for rapid implementation of genome scale analyses. The library contains
- a variety of useful modules, but the particular strengths are:
-  * Classes for reading and working with genome-scale multiple local
-  alignments (in MAF, AXT, and LAV formats)
-  * Generic data structure for indexing on disk files that contain blocks of
-  data associated with intervals on various sequences (used, for example, to
-  provide random access to individual alignments in huge files; optimized for
-  use over network filesystems)
-  * Data structures for working with intervals on sequences
-  * "Binned bitsets" which act just like chromosome sized bit arrays, but
-  lazily allocate regions and allow large blocks of all set or all unset bits
-  to be stored compactly
-  * "Intersecter" for performing fast intersection tests that preserve both
-  query and target intervals and associated annotation
- .
- This package provides the Python 2 library.
-
 Package: python3-bx
 Architecture: any
-Depends:
-	${shlibs:Depends},
-	${misc:Depends},
-	${python3:Depends},
-Recommends: python-bx-tools
+Depends: python3-lzo,
+	 ${shlibs:Depends},
+         ${misc:Depends},
+         ${python3:Depends},
+Replaces: python3-bx-tools
+Provides: python3-bx-tools
 Description: library to manage genomic data and its alignment
  The bx-python project is a python library and associated set of scripts to
  allow for rapid implementation of genome scale analyses. The library contains
@@ -73,21 +44,3 @@ Description: library to manage genomic data and its alignment
   to be stored compactly
   * "Intersecter" for performing fast intersection tests that preserve both
   query and target intervals and associated annotation
- .
- This package provides the Python 3 library.
-
-Package: python-bx-tools
-Architecture: all
-Conflicts: python3-bx-tools
-Depends: python-bx, ${misc:Depends}, ${python:Depends}
-Description: command line interface to python3-bx
- This package collects all command line tools to access the functionality
- of the python-bx library. All scripts have python2 in their shebang line.
-
-Package: python3-bx-tools
-Architecture: all
-Conflicts: python-bx-tools
-Depends: python3-bx, ${misc:Depends}, ${python3:Depends}
-Description: command line interface to python3-bx
- This package collects all command line tools to access the functionality
- of the python-bx library. All scripts have python3 in their shebang line.


=====================================
debian/lintian-overrides
=====================================
@@ -0,0 +1,97 @@
+# Not fiddling with .py endings because of reverse-dependencies expected from toil
+# We shall revisit this decision once all packages for toil are in the distribution
+# and we have learned more about how bx is used in the community in 3rd party scripts.
+python3-bx: script-with-language-extension usr/bin/aggregate_scores_in_intervals.py
+python3-bx: script-with-language-extension usr/bin/align_print_template.py
+python3-bx: script-with-language-extension usr/bin/axt_extract_ranges.py
+python3-bx: script-with-language-extension usr/bin/axt_to_fasta.py
+python3-bx: script-with-language-extension usr/bin/axt_to_lav.py
+python3-bx: script-with-language-extension usr/bin/axt_to_maf.py
+python3-bx: script-with-language-extension usr/bin/bed_bigwig_profile.py
+python3-bx: script-with-language-extension usr/bin/bed_build_windows.py
+python3-bx: script-with-language-extension usr/bin/bed_complement.py
+python3-bx: script-with-language-extension usr/bin/bed_count_by_interval.py
+python3-bx: script-with-language-extension usr/bin/bed_count_overlapping.py
+python3-bx: script-with-language-extension usr/bin/bed_coverage.py
+python3-bx: script-with-language-extension usr/bin/bed_coverage_by_interval.py
+python3-bx: script-with-language-extension usr/bin/bed_diff_basewise_summary.py
+python3-bx: script-with-language-extension usr/bin/bed_extend_to.py
+python3-bx: script-with-language-extension usr/bin/bed_intersect.py
+python3-bx: script-with-language-extension usr/bin/bed_intersect_basewise.py
+python3-bx: script-with-language-extension usr/bin/bed_merge_overlapping.py
+python3-bx: script-with-language-extension usr/bin/bed_rand_intersect.py
+python3-bx: script-with-language-extension usr/bin/bed_subtract_basewise.py
+python3-bx: script-with-language-extension usr/bin/bnMapper.py
+python3-bx: script-with-language-extension usr/bin/div_snp_table_chr.py
+python3-bx: script-with-language-extension usr/bin/find_in_sorted_file.py
+python3-bx: script-with-language-extension usr/bin/gene_fourfold_sites.py
+python3-bx: script-with-language-extension usr/bin/get_scores_in_intervals.py
+python3-bx: script-with-language-extension usr/bin/int_seqs_to_char_strings.py
+python3-bx: script-with-language-extension usr/bin/interval_count_intersections.py
+python3-bx: script-with-language-extension usr/bin/interval_join.py
+python3-bx: script-with-language-extension usr/bin/lav_to_axt.py
+python3-bx: script-with-language-extension usr/bin/lav_to_maf.py
+python3-bx: script-with-language-extension usr/bin/line_select.py
+python3-bx: script-with-language-extension usr/bin/lzop_build_offset_table.py
+python3-bx: script-with-language-extension usr/bin/mMK_bitset.py
+python3-bx: script-with-language-extension usr/bin/maf_build_index.py
+python3-bx: script-with-language-extension usr/bin/maf_chop.py
+python3-bx: script-with-language-extension usr/bin/maf_chunk.py
+python3-bx: script-with-language-extension usr/bin/maf_col_counts.py
+python3-bx: script-with-language-extension usr/bin/maf_col_counts_all.py
+python3-bx: script-with-language-extension usr/bin/maf_count.py
+python3-bx: script-with-language-extension usr/bin/maf_covered_ranges.py
+python3-bx: script-with-language-extension usr/bin/maf_covered_regions.py
+python3-bx: script-with-language-extension usr/bin/maf_div_sites.py
+python3-bx: script-with-language-extension usr/bin/maf_drop_overlapping.py
+python3-bx: script-with-language-extension usr/bin/maf_extract_chrom_ranges.py
+python3-bx: script-with-language-extension usr/bin/maf_extract_ranges.py
+python3-bx: script-with-language-extension usr/bin/maf_extract_ranges_indexed.py
+python3-bx: script-with-language-extension usr/bin/maf_filter.py
+python3-bx: script-with-language-extension usr/bin/maf_filter_max_wc.py
+python3-bx: script-with-language-extension usr/bin/maf_gap_frequency.py
+python3-bx: script-with-language-extension usr/bin/maf_gc_content.py
+python3-bx: script-with-language-extension usr/bin/maf_interval_alignibility.py
+python3-bx: script-with-language-extension usr/bin/maf_limit_to_species.py
+python3-bx: script-with-language-extension usr/bin/maf_mapping_word_frequency.py
+python3-bx: script-with-language-extension usr/bin/maf_mask_cpg.py
+python3-bx: script-with-language-extension usr/bin/maf_mean_length_ungapped_piece.py
+python3-bx: script-with-language-extension usr/bin/maf_percent_columns_matching.py
+python3-bx: script-with-language-extension usr/bin/maf_percent_identity.py
+python3-bx: script-with-language-extension usr/bin/maf_print_chroms.py
+python3-bx: script-with-language-extension usr/bin/maf_print_scores.py
+python3-bx: script-with-language-extension usr/bin/maf_randomize.py
+python3-bx: script-with-language-extension usr/bin/maf_region_coverage_by_src.py
+python3-bx: script-with-language-extension usr/bin/maf_select.py
+python3-bx: script-with-language-extension usr/bin/maf_shuffle_columns.py
+python3-bx: script-with-language-extension usr/bin/maf_species_in_all_files.py
+python3-bx: script-with-language-extension usr/bin/maf_split_by_src.py
+python3-bx: script-with-language-extension usr/bin/maf_thread_for_species.py
+python3-bx: script-with-language-extension usr/bin/maf_tile.py
+python3-bx: script-with-language-extension usr/bin/maf_tile_2.py
+python3-bx: script-with-language-extension usr/bin/maf_tile_2bit.py
+python3-bx: script-with-language-extension usr/bin/maf_to_axt.py
+python3-bx: script-with-language-extension usr/bin/maf_to_concat_fasta.py
+python3-bx: script-with-language-extension usr/bin/maf_to_fasta.py
+python3-bx: script-with-language-extension usr/bin/maf_to_int_seqs.py
+python3-bx: script-with-language-extension usr/bin/maf_translate_chars.py
+python3-bx: script-with-language-extension usr/bin/maf_truncate.py
+python3-bx: script-with-language-extension usr/bin/maf_word_frequency.py
+python3-bx: script-with-language-extension usr/bin/mask_quality.py
+python3-bx: script-with-language-extension usr/bin/nib_chrom_intervals_to_fasta.py
+python3-bx: script-with-language-extension usr/bin/nib_intervals_to_fasta.py
+python3-bx: script-with-language-extension usr/bin/nib_length.py
+python3-bx: script-with-language-extension usr/bin/one_field_per_line.py
+python3-bx: script-with-language-extension usr/bin/out_to_chain.py
+python3-bx: script-with-language-extension usr/bin/prefix_lines.py
+python3-bx: script-with-language-extension usr/bin/pretty_table.py
+python3-bx: script-with-language-extension usr/bin/qv_to_bqv.py
+python3-bx: script-with-language-extension usr/bin/random_lines.py
+python3-bx: script-with-language-extension usr/bin/table_add_column.py
+python3-bx: script-with-language-extension usr/bin/table_filter.py
+python3-bx: script-with-language-extension usr/bin/tfloc_summary.py
+python3-bx: script-with-language-extension usr/bin/ucsc_gene_table_to_intervals.py
+python3-bx: script-with-language-extension usr/bin/wiggle_to_array_tree.py
+python3-bx: script-with-language-extension usr/bin/wiggle_to_binned_array.py
+python3-bx: script-with-language-extension usr/bin/wiggle_to_chr_binned_array.py
+python3-bx: script-with-language-extension usr/bin/wiggle_to_simple.py


=====================================
debian/python-bx-tools.dirs deleted
=====================================
@@ -1 +0,0 @@
-usr


=====================================
debian/python-bx-tools.lintian-overrides deleted
=====================================
@@ -1,97 +0,0 @@
-# Not fiddling with .py endings because of reverse-dependencies expected from toil
-# We shall revisit this decision once all packages for toil are in the distribution
-# and we have learned more about how bx is used in the community in 3rd party scripts.
-python-bx-tools: script-with-language-extension usr/bin/aggregate_scores_in_intervals.py
-python-bx-tools: script-with-language-extension usr/bin/align_print_template.py
-python-bx-tools: script-with-language-extension usr/bin/axt_extract_ranges.py
-python-bx-tools: script-with-language-extension usr/bin/axt_to_fasta.py
-python-bx-tools: script-with-language-extension usr/bin/axt_to_lav.py
-python-bx-tools: script-with-language-extension usr/bin/axt_to_maf.py
-python-bx-tools: script-with-language-extension usr/bin/bed_bigwig_profile.py
-python-bx-tools: script-with-language-extension usr/bin/bed_build_windows.py
-python-bx-tools: script-with-language-extension usr/bin/bed_complement.py
-python-bx-tools: script-with-language-extension usr/bin/bed_count_by_interval.py
-python-bx-tools: script-with-language-extension usr/bin/bed_count_overlapping.py
-python-bx-tools: script-with-language-extension usr/bin/bed_coverage.py
-python-bx-tools: script-with-language-extension usr/bin/bed_coverage_by_interval.py
-python-bx-tools: script-with-language-extension usr/bin/bed_diff_basewise_summary.py
-python-bx-tools: script-with-language-extension usr/bin/bed_extend_to.py
-python-bx-tools: script-with-language-extension usr/bin/bed_intersect.py
-python-bx-tools: script-with-language-extension usr/bin/bed_intersect_basewise.py
-python-bx-tools: script-with-language-extension usr/bin/bed_merge_overlapping.py
-python-bx-tools: script-with-language-extension usr/bin/bed_rand_intersect.py
-python-bx-tools: script-with-language-extension usr/bin/bed_subtract_basewise.py
-python-bx-tools: script-with-language-extension usr/bin/bnMapper.py
-python-bx-tools: script-with-language-extension usr/bin/div_snp_table_chr.py
-python-bx-tools: script-with-language-extension usr/bin/find_in_sorted_file.py
-python-bx-tools: script-with-language-extension usr/bin/gene_fourfold_sites.py
-python-bx-tools: script-with-language-extension usr/bin/get_scores_in_intervals.py
-python-bx-tools: script-with-language-extension usr/bin/int_seqs_to_char_strings.py
-python-bx-tools: script-with-language-extension usr/bin/interval_count_intersections.py
-python-bx-tools: script-with-language-extension usr/bin/interval_join.py
-python-bx-tools: script-with-language-extension usr/bin/lav_to_axt.py
-python-bx-tools: script-with-language-extension usr/bin/lav_to_maf.py
-python-bx-tools: script-with-language-extension usr/bin/line_select.py
-python-bx-tools: script-with-language-extension usr/bin/lzop_build_offset_table.py
-python-bx-tools: script-with-language-extension usr/bin/mMK_bitset.py
-python-bx-tools: script-with-language-extension usr/bin/maf_build_index.py
-python-bx-tools: script-with-language-extension usr/bin/maf_chop.py
-python-bx-tools: script-with-language-extension usr/bin/maf_chunk.py
-python-bx-tools: script-with-language-extension usr/bin/maf_col_counts.py
-python-bx-tools: script-with-language-extension usr/bin/maf_col_counts_all.py
-python-bx-tools: script-with-language-extension usr/bin/maf_count.py
-python-bx-tools: script-with-language-extension usr/bin/maf_covered_ranges.py
-python-bx-tools: script-with-language-extension usr/bin/maf_covered_regions.py
-python-bx-tools: script-with-language-extension usr/bin/maf_div_sites.py
-python-bx-tools: script-with-language-extension usr/bin/maf_drop_overlapping.py
-python-bx-tools: script-with-language-extension usr/bin/maf_extract_chrom_ranges.py
-python-bx-tools: script-with-language-extension usr/bin/maf_extract_ranges.py
-python-bx-tools: script-with-language-extension usr/bin/maf_extract_ranges_indexed.py
-python-bx-tools: script-with-language-extension usr/bin/maf_filter.py
-python-bx-tools: script-with-language-extension usr/bin/maf_filter_max_wc.py
-python-bx-tools: script-with-language-extension usr/bin/maf_gap_frequency.py
-python-bx-tools: script-with-language-extension usr/bin/maf_gc_content.py
-python-bx-tools: script-with-language-extension usr/bin/maf_interval_alignibility.py
-python-bx-tools: script-with-language-extension usr/bin/maf_limit_to_species.py
-python-bx-tools: script-with-language-extension usr/bin/maf_mapping_word_frequency.py
-python-bx-tools: script-with-language-extension usr/bin/maf_mask_cpg.py
-python-bx-tools: script-with-language-extension usr/bin/maf_mean_length_ungapped_piece.py
-python-bx-tools: script-with-language-extension usr/bin/maf_percent_columns_matching.py
-python-bx-tools: script-with-language-extension usr/bin/maf_percent_identity.py
-python-bx-tools: script-with-language-extension usr/bin/maf_print_chroms.py
-python-bx-tools: script-with-language-extension usr/bin/maf_print_scores.py
-python-bx-tools: script-with-language-extension usr/bin/maf_randomize.py
-python-bx-tools: script-with-language-extension usr/bin/maf_region_coverage_by_src.py
-python-bx-tools: script-with-language-extension usr/bin/maf_select.py
-python-bx-tools: script-with-language-extension usr/bin/maf_shuffle_columns.py
-python-bx-tools: script-with-language-extension usr/bin/maf_species_in_all_files.py
-python-bx-tools: script-with-language-extension usr/bin/maf_split_by_src.py
-python-bx-tools: script-with-language-extension usr/bin/maf_thread_for_species.py
-python-bx-tools: script-with-language-extension usr/bin/maf_tile.py
-python-bx-tools: script-with-language-extension usr/bin/maf_tile_2.py
-python-bx-tools: script-with-language-extension usr/bin/maf_tile_2bit.py
-python-bx-tools: script-with-language-extension usr/bin/maf_to_axt.py
-python-bx-tools: script-with-language-extension usr/bin/maf_to_concat_fasta.py
-python-bx-tools: script-with-language-extension usr/bin/maf_to_fasta.py
-python-bx-tools: script-with-language-extension usr/bin/maf_to_int_seqs.py
-python-bx-tools: script-with-language-extension usr/bin/maf_translate_chars.py
-python-bx-tools: script-with-language-extension usr/bin/maf_truncate.py
-python-bx-tools: script-with-language-extension usr/bin/maf_word_frequency.py
-python-bx-tools: script-with-language-extension usr/bin/mask_quality.py
-python-bx-tools: script-with-language-extension usr/bin/nib_chrom_intervals_to_fasta.py
-python-bx-tools: script-with-language-extension usr/bin/nib_intervals_to_fasta.py
-python-bx-tools: script-with-language-extension usr/bin/nib_length.py
-python-bx-tools: script-with-language-extension usr/bin/one_field_per_line.py
-python-bx-tools: script-with-language-extension usr/bin/out_to_chain.py
-python-bx-tools: script-with-language-extension usr/bin/prefix_lines.py
-python-bx-tools: script-with-language-extension usr/bin/pretty_table.py
-python-bx-tools: script-with-language-extension usr/bin/qv_to_bqv.py
-python-bx-tools: script-with-language-extension usr/bin/random_lines.py
-python-bx-tools: script-with-language-extension usr/bin/table_add_column.py
-python-bx-tools: script-with-language-extension usr/bin/table_filter.py
-python-bx-tools: script-with-language-extension usr/bin/tfloc_summary.py
-python-bx-tools: script-with-language-extension usr/bin/ucsc_gene_table_to_intervals.py
-python-bx-tools: script-with-language-extension usr/bin/wiggle_to_array_tree.py
-python-bx-tools: script-with-language-extension usr/bin/wiggle_to_binned_array.py
-python-bx-tools: script-with-language-extension usr/bin/wiggle_to_chr_binned_array.py
-python-bx-tools: script-with-language-extension usr/bin/wiggle_to_simple.py


=====================================
debian/python-bx.dirs deleted
=====================================
@@ -1 +0,0 @@
-usr/bin


=====================================
debian/python-bx.install deleted
=====================================
@@ -1 +0,0 @@
-#usr/bin


=====================================
debian/python3-bx-tools.dirs deleted
=====================================
@@ -1 +0,0 @@
-usr


=====================================
debian/python3-bx-tools.lintian-overrides deleted
=====================================
@@ -1,97 +0,0 @@
-# Not fiddling with .py endings because of reverse-dependencies expected from toil
-# We shall revisit this decision once all packages for toil are in the distribution
-# and we have learned more about how bx is used in the community in 3rd party scripts.
-python3-bx-tools: script-with-language-extension usr/bin/aggregate_scores_in_intervals.py
-python3-bx-tools: script-with-language-extension usr/bin/align_print_template.py
-python3-bx-tools: script-with-language-extension usr/bin/axt_extract_ranges.py
-python3-bx-tools: script-with-language-extension usr/bin/axt_to_fasta.py
-python3-bx-tools: script-with-language-extension usr/bin/axt_to_lav.py
-python3-bx-tools: script-with-language-extension usr/bin/axt_to_maf.py
-python3-bx-tools: script-with-language-extension usr/bin/bed_bigwig_profile.py
-python3-bx-tools: script-with-language-extension usr/bin/bed_build_windows.py
-python3-bx-tools: script-with-language-extension usr/bin/bed_complement.py
-python3-bx-tools: script-with-language-extension usr/bin/bed_count_by_interval.py
-python3-bx-tools: script-with-language-extension usr/bin/bed_count_overlapping.py
-python3-bx-tools: script-with-language-extension usr/bin/bed_coverage.py
-python3-bx-tools: script-with-language-extension usr/bin/bed_coverage_by_interval.py
-python3-bx-tools: script-with-language-extension usr/bin/bed_diff_basewise_summary.py
-python3-bx-tools: script-with-language-extension usr/bin/bed_extend_to.py
-python3-bx-tools: script-with-language-extension usr/bin/bed_intersect.py
-python3-bx-tools: script-with-language-extension usr/bin/bed_intersect_basewise.py
-python3-bx-tools: script-with-language-extension usr/bin/bed_merge_overlapping.py
-python3-bx-tools: script-with-language-extension usr/bin/bed_rand_intersect.py
-python3-bx-tools: script-with-language-extension usr/bin/bed_subtract_basewise.py
-python3-bx-tools: script-with-language-extension usr/bin/bnMapper.py
-python3-bx-tools: script-with-language-extension usr/bin/div_snp_table_chr.py
-python3-bx-tools: script-with-language-extension usr/bin/find_in_sorted_file.py
-python3-bx-tools: script-with-language-extension usr/bin/gene_fourfold_sites.py
-python3-bx-tools: script-with-language-extension usr/bin/get_scores_in_intervals.py
-python3-bx-tools: script-with-language-extension usr/bin/int_seqs_to_char_strings.py
-python3-bx-tools: script-with-language-extension usr/bin/interval_count_intersections.py
-python3-bx-tools: script-with-language-extension usr/bin/interval_join.py
-python3-bx-tools: script-with-language-extension usr/bin/lav_to_axt.py
-python3-bx-tools: script-with-language-extension usr/bin/lav_to_maf.py
-python3-bx-tools: script-with-language-extension usr/bin/line_select.py
-python3-bx-tools: script-with-language-extension usr/bin/lzop_build_offset_table.py
-python3-bx-tools: script-with-language-extension usr/bin/mMK_bitset.py
-python3-bx-tools: script-with-language-extension usr/bin/maf_build_index.py
-python3-bx-tools: script-with-language-extension usr/bin/maf_chop.py
-python3-bx-tools: script-with-language-extension usr/bin/maf_chunk.py
-python3-bx-tools: script-with-language-extension usr/bin/maf_col_counts.py
-python3-bx-tools: script-with-language-extension usr/bin/maf_col_counts_all.py
-python3-bx-tools: script-with-language-extension usr/bin/maf_count.py
-python3-bx-tools: script-with-language-extension usr/bin/maf_covered_ranges.py
-python3-bx-tools: script-with-language-extension usr/bin/maf_covered_regions.py
-python3-bx-tools: script-with-language-extension usr/bin/maf_div_sites.py
-python3-bx-tools: script-with-language-extension usr/bin/maf_drop_overlapping.py
-python3-bx-tools: script-with-language-extension usr/bin/maf_extract_chrom_ranges.py
-python3-bx-tools: script-with-language-extension usr/bin/maf_extract_ranges.py
-python3-bx-tools: script-with-language-extension usr/bin/maf_extract_ranges_indexed.py
-python3-bx-tools: script-with-language-extension usr/bin/maf_filter.py
-python3-bx-tools: script-with-language-extension usr/bin/maf_filter_max_wc.py
-python3-bx-tools: script-with-language-extension usr/bin/maf_gap_frequency.py
-python3-bx-tools: script-with-language-extension usr/bin/maf_gc_content.py
-python3-bx-tools: script-with-language-extension usr/bin/maf_interval_alignibility.py
-python3-bx-tools: script-with-language-extension usr/bin/maf_limit_to_species.py
-python3-bx-tools: script-with-language-extension usr/bin/maf_mapping_word_frequency.py
-python3-bx-tools: script-with-language-extension usr/bin/maf_mask_cpg.py
-python3-bx-tools: script-with-language-extension usr/bin/maf_mean_length_ungapped_piece.py
-python3-bx-tools: script-with-language-extension usr/bin/maf_percent_columns_matching.py
-python3-bx-tools: script-with-language-extension usr/bin/maf_percent_identity.py
-python3-bx-tools: script-with-language-extension usr/bin/maf_print_chroms.py
-python3-bx-tools: script-with-language-extension usr/bin/maf_print_scores.py
-python3-bx-tools: script-with-language-extension usr/bin/maf_randomize.py
-python3-bx-tools: script-with-language-extension usr/bin/maf_region_coverage_by_src.py
-python3-bx-tools: script-with-language-extension usr/bin/maf_select.py
-python3-bx-tools: script-with-language-extension usr/bin/maf_shuffle_columns.py
-python3-bx-tools: script-with-language-extension usr/bin/maf_species_in_all_files.py
-python3-bx-tools: script-with-language-extension usr/bin/maf_split_by_src.py
-python3-bx-tools: script-with-language-extension usr/bin/maf_thread_for_species.py
-python3-bx-tools: script-with-language-extension usr/bin/maf_tile.py
-python3-bx-tools: script-with-language-extension usr/bin/maf_tile_2.py
-python3-bx-tools: script-with-language-extension usr/bin/maf_tile_2bit.py
-python3-bx-tools: script-with-language-extension usr/bin/maf_to_axt.py
-python3-bx-tools: script-with-language-extension usr/bin/maf_to_concat_fasta.py
-python3-bx-tools: script-with-language-extension usr/bin/maf_to_fasta.py
-python3-bx-tools: script-with-language-extension usr/bin/maf_to_int_seqs.py
-python3-bx-tools: script-with-language-extension usr/bin/maf_translate_chars.py
-python3-bx-tools: script-with-language-extension usr/bin/maf_truncate.py
-python3-bx-tools: script-with-language-extension usr/bin/maf_word_frequency.py
-python3-bx-tools: script-with-language-extension usr/bin/mask_quality.py
-python3-bx-tools: script-with-language-extension usr/bin/nib_chrom_intervals_to_fasta.py
-python3-bx-tools: script-with-language-extension usr/bin/nib_intervals_to_fasta.py
-python3-bx-tools: script-with-language-extension usr/bin/nib_length.py
-python3-bx-tools: script-with-language-extension usr/bin/one_field_per_line.py
-python3-bx-tools: script-with-language-extension usr/bin/out_to_chain.py
-python3-bx-tools: script-with-language-extension usr/bin/prefix_lines.py
-python3-bx-tools: script-with-language-extension usr/bin/pretty_table.py
-python3-bx-tools: script-with-language-extension usr/bin/qv_to_bqv.py
-python3-bx-tools: script-with-language-extension usr/bin/random_lines.py
-python3-bx-tools: script-with-language-extension usr/bin/table_add_column.py
-python3-bx-tools: script-with-language-extension usr/bin/table_filter.py
-python3-bx-tools: script-with-language-extension usr/bin/tfloc_summary.py
-python3-bx-tools: script-with-language-extension usr/bin/ucsc_gene_table_to_intervals.py
-python3-bx-tools: script-with-language-extension usr/bin/wiggle_to_array_tree.py
-python3-bx-tools: script-with-language-extension usr/bin/wiggle_to_binned_array.py
-python3-bx-tools: script-with-language-extension usr/bin/wiggle_to_chr_binned_array.py
-python3-bx-tools: script-with-language-extension usr/bin/wiggle_to_simple.py


=====================================
debian/python3-bx.dirs deleted
=====================================
@@ -1 +0,0 @@
-usr/bin


=====================================
debian/python3-bx.install deleted
=====================================
@@ -1 +0,0 @@
-#usr/bin


=====================================
debian/rules
=====================================
@@ -6,15 +6,11 @@
 export LC_ALL=C.UTF-8
 
 export NOSE_VERBOSE=2
-
-export PYBUILD_DESTDIR_python2=debian/python-bx/
-#export PYBUILD_DESTDIR_python2-dbg=debian/python-foo-dbg/
-export PYBUILD_DESTDIR_python3=debian/python3-bx/
-#export PYBUILD_DESTDIR_python3-dbg=debian/python3-foo-dbg/
-
+export PYBUILD_NAME=bx-python
+export PYBUILD_BEFORE_TEST=cp -r {dir}/test_data {build_dir}/
 
 %:
-	dh $@ --with python2,python3 --buildsystem=pybuild
+	dh $@ --with python3 --buildsystem=pybuild
 
 override_dh_auto_clean:
 	dh_auto_clean
@@ -24,13 +20,9 @@ override_dh_auto_clean:
 # Changes perpetually redone
 	rm -rf lib/bx_python.egg-info
 
-override_dh_install:
-	dh_install --autodest
-	dh_install
-	mkdir -p $(CURDIR)/debian/python-bx-tools/usr
-	mv $(CURDIR)/debian/python-bx/usr/bin $(CURDIR)/debian/python-bx-tools/usr/
-	mkdir -p $(CURDIR)/debian/python3-bx-tools/usr
-	mv $(CURDIR)/debian/python3-bx/usr/bin $(CURDIR)/debian/python3-bx-tools/usr/
+# override_dh_install:
+# 	dh_install --autodest
+# 	dh_install
+# 	mkdir -p $(CURDIR)/debian/python3-bx-tools/usr
+# 	mv $(CURDIR)/debian/python3-bx/usr/bin $(CURDIR)/debian/python3-bx-tools/usr/
 
-override_dh_auto_test:
-	# skipped


=====================================
doc/source/index.rst
=====================================
@@ -4,7 +4,7 @@ About bx-python
 The bx-python project is a python library and associated set of scripts to allow for rapid implementation of genome scale analyses. The library contains a variety of useful modules, but the particular strengths are:
 
  * Classes for reading and working with genome-scale multiple local alignments (in MAF, AXT, and LAV formats)
- * Generic data structure for indexing on disk files that contain blocks of data associated with intervals on various sequences (used, for example, to provide random access to individual alignments in huge files; optomized for use over network filesystems)
+ * Generic data structure for indexing on disk files that contain blocks of data associated with intervals on various sequences (used, for example, to provide random access to individual alignments in huge files; optimized for use over network filesystems)
  * Data structures for working with intervals on sequences
  * "Binned bitsets" which act just like chromosome sized bit arrays, but lazily allocate regions and allow large blocks of all set or all unset bits to be stored compactly
  * "Intersecter" for performing fast intersection tests that preserve both query and target intervals and associated annotation 


=====================================
lib/bx/align/score_tests.py
=====================================
@@ -1,7 +1,6 @@
 """
 Tests for `bx.align.score`.
 """
-import sys
 import unittest
 
 from numpy import array, cumsum, allclose
@@ -10,22 +9,21 @@ from six import StringIO
 import bx.align.maf
 import bx.align.score
 
-aligns = [ ( "CCACTAGTTTTTAAATAATCTACTATCAAATAAAAGATTTGTTAATAATAAATTTTAAATCATTAACACTT",
-             "CCATTTGGGTTCAAAAATTGATCTATCA----------TGGTGGATTATTATTTAGCCATTAAGGACAAAT", 
-             -111 ),
-           ( "CCACTAGTTTTTAAATAATCTAC-----AATAAAAGATTTGTTAATAAT---AAATTTTAAATCATTAA-----CACTT",
-             "CCATTTGGGTTCAAAAATTGATCTATCA----------TGGTGGAT---TATTATTT-----AGCCATTAAGGACAAAT", 
-             -3626 ),
-           ( "CCACTAGTTTTTGATTC",
-             "CCATTTGGGTTC-----", 
-             -299 ),
-           ( "CTTAGTTTTTGATCACC",
-             "-----CTTGGGTTTACC", 
-             -299 ),
-           ( "gggaattgaacaatgagaacacatggacacaggaaggggaacatcacacacc----------ggggcctgttgtggggtggggggaag",
-             "ggaactagaacaagggagacacatacaaacaacaacaacaacaacacagcccttcccttcaaagagcttatagtctgatggaggagag",
-             1690 )
-         ]
+aligns = [("CCACTAGTTTTTAAATAATCTACTATCAAATAAAAGATTTGTTAATAATAAATTTTAAATCATTAACACTT",
+           "CCATTTGGGTTCAAAAATTGATCTATCA----------TGGTGGATTATTATTTAGCCATTAAGGACAAAT",
+           -111),
+          ("CCACTAGTTTTTAAATAATCTAC-----AATAAAAGATTTGTTAATAAT---AAATTTTAAATCATTAA-----CACTT",
+           "CCATTTGGGTTCAAAAATTGATCTATCA----------TGGTGGAT---TATTATTT-----AGCCATTAAGGACAAAT",
+           -3626),
+          ("CCACTAGTTTTTGATTC",
+           "CCATTTGGGTTC-----",
+           -299),
+          ("CTTAGTTTTTGATCACC",
+           "-----CTTGGGTTTACC",
+           -299),
+          ("gggaattgaacaatgagaacacatggacacaggaaggggaacatcacacacc----------ggggcctgttgtggggtggggggaag",
+           "ggaactagaacaagggagacacatacaaacaacaacaacaacaacacagcccttcccttcaaagagcttatagtctgatggaggagag",
+           1690)]
 
 mafs = """##maf
 a score=2883.0
@@ -38,54 +36,51 @@ s panTro1.chr1          49673 40 + 229575298 TGCGTGATTAATGCCTGAGATTGTGTGAAGTAAAA
 s rheMac1.SCAFFOLD45837 26063 33 -     31516 TGTGTGATTAATGCCTGAGATTGTGTGAAGTAA-------
 """
 
-nonsymm_scheme = bx.align.score.build_scoring_scheme ( """  A    C    G    T
+nonsymm_scheme = bx.align.score.build_scoring_scheme("""  A    C    G    T
                                                            91    0  -31 -123
                                                          -114  100 -125  -31
                                                           -31 -125  100 -114
-                                                         -123  -31 -114   91 """, 400, 30 )
+                                                         -123  -31 -114   91 """, 400, 30)
 
-aligns_for_nonsymm_scheme = [ ( "AAAACCCCGGGGTTTT",
-                                "ACGTACGTACGTACGT", 
-                                -580 )
-                            ]
+aligns_for_nonsymm_scheme = [("AAAACCCCGGGGTTTT",
+                              "ACGTACGTACGTACGT",
+                              -580)]
 
-
-asymm_scheme = bx.align.score.build_scoring_scheme ( """    01   02    A    C    G    T
+asymm_scheme = bx.align.score.build_scoring_scheme("""    01   02    A    C    G    T
                                                        01  200 -200  -50  100  -50  100
                                                        02 -200  200  100  -50  100  -50 """,
-                                                       0, 0, gap1='\x00' )
+                                                   0, 0, gap1='\x00')
 
-aligns_for_asymm_scheme = [ ( "\x01\x01\x01\x01\x01\x01",
-                              "ACGT\x01\x02", 
-                              100 )
-                          ]
+aligns_for_asymm_scheme = [("\x01\x01\x01\x01\x01\x01",
+                            "ACGT\x01\x02",
+                            100)]
 
 
-class BasicTests( unittest.TestCase ):
+class BasicTests(unittest.TestCase):
 
-    def test_scoring_text( self ):
+    def test_scoring_text(self):
         ss = bx.align.score.hox70
         for t1, t2, score in aligns:
-            self.assertEquals( bx.align.score.score_texts( ss, t1, t2 ), score )
-            
-    def test_align( self ):
+            self.assertEqual(bx.align.score.score_texts(ss, t1, t2), score)
+
+    def test_align(self):
         ss = bx.align.score.hox70
-        for block in bx.align.maf.Reader( StringIO( mafs ) ):
-            self.assertEquals( bx.align.score.score_alignment( ss, block ), float( block.score ) )
-            
-    def test_accumulate( self ):
+        for block in bx.align.maf.Reader(StringIO(mafs)):
+            self.assertEqual(bx.align.score.score_alignment(ss, block), float(block.score))
+
+    def test_accumulate(self):
         ss = bx.align.score.hox70
-        self.assert_( allclose( bx.align.score.accumulate_scores( ss, "-----CTTT", "CTTAGTTTA"  ),
-                           cumsum( array( [ -430, -30, -30, -30, -30, -31, 91, 91, -123 ] ) ) ) )
-        self.assert_( allclose( bx.align.score.accumulate_scores( ss, "-----CTTT", "CTTAGTTTA", skip_ref_gaps=True ),
-                           cumsum( array( [ -581, 91, 91, -123 ] ) ) ) )
+        self.assert_(allclose(bx.align.score.accumulate_scores(ss, "-----CTTT", "CTTAGTTTA"),
+                              cumsum(array([-430, -30, -30, -30, -30, -31, 91, 91, -123]))))
+        self.assert_(allclose(bx.align.score.accumulate_scores(ss, "-----CTTT", "CTTAGTTTA", skip_ref_gaps=True),
+                              cumsum(array([-581, 91, 91, -123]))))
 
-    def test_nonsymm_scoring( self ):
+    def test_nonsymm_scoring(self):
         ss = nonsymm_scheme
         for t1, t2, score in aligns_for_nonsymm_scheme:
-            self.assertEquals( bx.align.score.score_texts( ss, t1, t2 ), score )
+            self.assertEqual(bx.align.score.score_texts(ss, t1, t2), score)
 
-    def test_asymm_scoring( self ):
+    def test_asymm_scoring(self):
         ss = asymm_scheme
         for t1, t2, score in aligns_for_asymm_scheme:
-            self.assertEquals( bx.align.score.score_texts( ss, t1, t2 ), score )
+            self.assertEqual(bx.align.score.score_texts(ss, t1, t2), score)


=====================================
lib/bx/bbi/bpt_file.pyx
=====================================
@@ -54,7 +54,7 @@ cdef class BPTFile:
             self.reader.read( self.key_size )
             offset = self.reader.read_uint64()
             # Loop until correct subtree is found
-            for i from 0 <= i < child_count:
+            for i from 0 <= i < child_count - 1:
                 node_key = self.reader.read( self.key_size )
                 if node_key > key:
                     break


=====================================
lib/bx/bitset_tests.py
=====================================
@@ -5,108 +5,115 @@ Tests for `bx.bitset`.
 import bx.bitset
 import unittest
 
-class AbstractTests( object ):
-
-    def assert_bits( self, bits, list ):
-        assert bits.size == len( list ), "Bitset size and verification list size do not match"
-        for i in range( bits.size ):
-            self.assertEquals( bits[i], list[i] )
-
-    def test_overflow_create( self ):
-        self.assertRaises( ValueError, self.new_bits, 4000000000 )
-        
-    def test_overflow_access( self ):
-        bits = self.new_bits( 100 )
-        self.assertRaises( IndexError, bits.set, -5 )
-        self.assertRaises( IndexError, bits.set, 110 )
-
-    def test_access( self ):
+
+class AbstractTests(object):
+
+    def assert_bits(self, bits, list):
+        assert bits.size == len(list), "Bitset size and verification list size do not match"
+        for i in range(bits.size):
+            self.assertEqual(bits[i], list[i])
+
+    def test_overflow_create(self):
+        self.assertRaises(ValueError, self.new_bits, 4000000000)
+
+    def test_overflow_access(self):
+        bits = self.new_bits(100)
+        self.assertRaises(IndexError, bits.set, -5)
+        self.assertRaises(IndexError, bits.set, 110)
+
+    def test_access(self):
         # Create and assert empty
-        bits = self.new_bits( 100 )
-        l = [ 0 ] * 100
-        self.assert_bits( bits, l )
+        bits = self.new_bits(100)
+        l = [0] * 100
+        self.assert_bits(bits, l)
         # Set some positions
-        for pos in ( 11, 14, 70, 16 ):
-            bits.set( pos )
-            l[ pos ] = 1
+        for pos in (11, 14, 70, 16):
+            bits.set(pos)
+            l[pos] = 1
         # Clear some positions
-        for pos in ( 14, 80, 16 ):
-            bits.clear( pos )
-            l[ pos ] = 0
-        self.assert_bits( bits, l )
+        for pos in (14, 80, 16):
+            bits.clear(pos)
+            l[pos] = 0
+        self.assert_bits(bits, l)
 
-    def test_range_access( self ):
+    def test_range_access(self):
         # Create and assert empty
-        bits = self.new_bits( 100 )
-        l = [ 0 ] * 100
-        self.assert_bits( bits, l )
+        bits = self.new_bits(100)
+        l = [0] * 100
+        self.assert_bits(bits, l)
         # Set some positions
-        for b, e in ( ( 11, 14 ), (20,75), (90,99) ):
-            bits.set_range( b, e-b)
-            for pos in range( b, e ): l[ pos ] = 1
-        self.assert_bits( bits, l )
+        for b, e in ((11, 14), (20, 75), (90, 99)):
+            bits.set_range(b, e-b)
+            for pos in range(b, e):
+                l[pos] = 1
+        self.assert_bits(bits, l)
 
-    def test_count( self ):
+    def test_count(self):
         # Create and assert empty
-        bits = self.new_bits( 100 )
+        bits = self.new_bits(100)
         # Set some positions
-        for b, e in ( ( 11, 14 ), (20,75), (90,100) ):
-            bits.set_range( b, e-b)
-        self.assertEquals( bits.count_range( 0, 0 ), 0 )
-        self.assertEquals( bits.count_range( 0, 20 ), 3 )
-        self.assertEquals( bits.count_range( 25, 25 ), 25 )
-        self.assertEquals( bits.count_range( 80, 20 ), 10 )
-        self.assertEquals( bits.count_range( 0, 100 ), 68 )
-
-    def test_find( self ):
+        for b, e in ((11, 14), (20, 75), (90, 100)):
+            bits.set_range(b, e-b)
+        self.assertEqual(bits.count_range(0, 0), 0)
+        self.assertEqual(bits.count_range(0, 20), 3)
+        self.assertEqual(bits.count_range(25, 25), 25)
+        self.assertEqual(bits.count_range(80, 20), 10)
+        self.assertEqual(bits.count_range(0, 100), 68)
+
+    def test_find(self):
         # Create and assert empty
-        bits = self.new_bits( 100 )
+        bits = self.new_bits(100)
         # Set some positions
-        for b, e in ( ( 11, 14 ), (20,75), (90,100) ):
-            bits.set_range( b, e-b)
+        for b, e in ((11, 14), (20, 75), (90, 100)):
+            bits.set_range(b, e-b)
         # Next set
-        self.assertEquals( bits.next_set( 0 ), 11 )
-        self.assertEquals( bits.next_set( 13 ), 13 )
-        self.assertEquals( bits.next_set( 15 ), 20 )
+        self.assertEqual(bits.next_set(0), 11)
+        self.assertEqual(bits.next_set(13), 13)
+        self.assertEqual(bits.next_set(15), 20)
         # Next clear
-        self.assertEquals( bits.next_clear( 0 ), 0 )
-        self.assertEquals( bits.next_clear( 11 ), 14 )
-        self.assertEquals( bits.next_clear( 20 ), 75 )
-        self.assertEquals( bits.next_clear( 92 ), 100 )
-
-    def test_and( self ):
-        bits1 = self.new_bits( 100 )
-        bits2 = self.new_bits( 100 )
-        bits1.set_range( 20, 40 )
-        bits2.set_range( 50, 25 )
-        bits1.iand( bits2 )
+        self.assertEqual(bits.next_clear(0), 0)
+        self.assertEqual(bits.next_clear(11), 14)
+        self.assertEqual(bits.next_clear(20), 75)
+        self.assertEqual(bits.next_clear(92), 100)
+
+    def test_and(self):
+        bits1 = self.new_bits(100)
+        bits2 = self.new_bits(100)
+        bits1.set_range(20, 40)
+        bits2.set_range(50, 25)
+        bits1.iand(bits2)
         l = [0]*100
-        for i in range( 50, 60 ): l[i] = 1
-        self.assert_bits( bits1, l )
-    
-    def test_or( self ):
-        bits1 = self.new_bits( 100 )
-        bits2 = self.new_bits( 100 )
-        bits1.set_range( 20, 40 )
-        bits2.set_range( 50, 25 )
-        bits1.ior( bits2 )
+        for i in range(50, 60):
+            l[i] = 1
+        self.assert_bits(bits1, l)
+
+    def test_or(self):
+        bits1 = self.new_bits(100)
+        bits2 = self.new_bits(100)
+        bits1.set_range(20, 40)
+        bits2.set_range(50, 25)
+        bits1.ior(bits2)
         l = [0]*100
-        for i in range( 20, 75 ): l[i] = 1
-        self.assert_bits( bits1, l )
-        
-    def test_not( self ):
-        bits = self.new_bits( 100 )
-        bits.set_range( 20, 40 )
+        for i in range(20, 75):
+            l[i] = 1
+        self.assert_bits(bits1, l)
+
+    def test_not(self):
+        bits = self.new_bits(100)
+        bits.set_range(20, 40)
         bits.invert()
         l = [1]*100
-        for i in range( 20, 60 ): l[i] = 0
-        self.assert_bits( bits, l )
-        
-class BitSetTests( AbstractTests, unittest.TestCase ):
-    def new_bits( self, size ):
-        return bx.bitset.BitSet( size ) 
-
-class BinnedBitSetTests( AbstractTests, unittest.TestCase ):
-    def new_bits( self, size ):
-        granularity = size % 11 
-        return bx.bitset.BinnedBitSet( size, granularity ) 
\ No newline at end of file
+        for i in range(20, 60):
+            l[i] = 0
+        self.assert_bits(bits, l)
+
+
+class BitSetTests(AbstractTests, unittest.TestCase):
+    def new_bits(self, size):
+        return bx.bitset.BitSet(size)
+
+
+class BinnedBitSetTests(AbstractTests, unittest.TestCase):
+    def new_bits(self, size):
+        granularity = size % 11
+        return bx.bitset.BinnedBitSet(size, granularity)


=====================================
lib/bx/seq/twobit.py
=====================================
@@ -1,9 +1,7 @@
 """
 Access to files containing sequence data in 'twobit' format.
 """
-import sys
-
-from struct import *
+from struct import calcsize, unpack
 from collections import Mapping
 
 from . import _twobit
@@ -14,8 +12,9 @@ TWOBIT_MAGIC_SIZE = 4
 
 TWOBIT_VERSION = 0
 
-class TwoBitSequence( object ):
-    def __init__( self, tbf, header_offset=None ):
+
+class TwoBitSequence(object):
+    def __init__(self, tbf, header_offset=None):
         self.tbf = tbf
         self.header_offset = header_offset
         self.sequence_offset = None
@@ -23,18 +22,18 @@ class TwoBitSequence( object ):
         self.n_blocks = None
         self.masked_blocks = None
         self.loaded = False
-        
-    def __getitem__( self, slice ):
-        start, stop, stride = slice.indices( self.size )
+
+    def __getitem__(self, slice):
+        start, stop, stride = slice.indices(self.size)
         assert stride == 1, "Striding in slices not supported"
         if stop - start < 1:
             return ""
-        return _twobit.read( self.tbf.file, self, start, stop, self.tbf.do_mask  )
-        
-    def __len__( self ):
+        return _twobit.read(self.tbf.file, self, start, stop, self.tbf.do_mask)
+
+    def __len__(self):
         return self.size
-        
-    def get( self, start, end ):
+
+    def get(self, start, end):
         # Trim start / stop
         if start < 0:
             start = 0
@@ -42,46 +41,47 @@ class TwoBitSequence( object ):
             end = self.size
         out_size = end - start
         if out_size < 1:
-            raise Exception( "end before start (%s,%s)" % ( start,end ) )
+            raise Exception("end before start (%s,%s)" % (start, end))
         # Find position of packed portion
-        dna = _twobit.read( self.tbf.file, self, start, end, self.tbf.do_mask )
+        dna = _twobit.read(self.tbf.file, self, start, end, self.tbf.do_mask)
         # Return
         return dna
-        
-class TwoBitFile( Mapping ):
-    def __init__( self, file, do_mask=True ):
+
+
+class TwoBitFile(Mapping):
+    def __init__(self, file, do_mask=True):
         self.do_mask = do_mask
         # Read magic and determine byte order
         self.byte_order = ">"
-        strng = file.read( TWOBIT_MAGIC_SIZE )
-        magic = unpack( ">L", strng )[0]
+        strng = file.read(TWOBIT_MAGIC_SIZE)
+        magic = unpack(">L", strng)[0]
         if magic != TWOBIT_MAGIC_NUMBER:
-            if magic == TWOBIT_MAGIC_NUMBER_SWAP: 
+            if magic == TWOBIT_MAGIC_NUMBER_SWAP:
                 self.byte_order = "<"
-            else: 
-                raise Exception( "Not a NIB file" )
+            else:
+                raise Exception("Not a NIB file")
         self.magic = magic
         self.file = file
         # Read version
-        self.version = self.read( "L" )
+        self.version = self.read("L")
         if self.version != TWOBIT_VERSION:
-            raise Exception( "File is version '%d' but I only know about '%d'" % ( self.version, TWOBIT_VERSION ) )
+            raise Exception("File is version '%d' but I only know about '%d'" % (self.version, TWOBIT_VERSION))
         # Number of sequences in file
-        self.seq_count = self.read( "L" )
+        self.seq_count = self.read("L")
         # Header contains some reserved space
-        self.reserved = self.read( "L" )
+        self.reserved = self.read("L")
         # Read index of sequence names to offsets
         index = dict()
-        for i in range( self.seq_count ):
+        for i in range(self.seq_count):
             name = self.read_p_string()
-            offset = self.read( "L" )
-            index[name] = TwoBitSequence( self, offset )
+            offset = self.read("L")
+            index[name] = TwoBitSequence(self, offset)
         self.index = index
 
-    def __getitem__( self, name ):
+    def __getitem__(self, name):
         seq = self.index[name]
         if not seq.loaded:
-            self.load_sequence( name )
+            self.load_sequence(name)
         return seq
 
     def __iter__(self):
@@ -89,42 +89,41 @@ class TwoBitFile( Mapping ):
 
     def __len__(self):
         return len(self.index)
-        
-    def load_sequence( self, name ):
+
+    def load_sequence(self, name):
         seq = self.index[name]
         # Seek to start of sequence block
-        self.file.seek( seq.header_offset )
+        self.file.seek(seq.header_offset)
         # Size of sequence
-        seq.size = self.read( "L" )
+        seq.size = self.read("L")
         # Read N and masked block regions
         seq.n_block_starts, seq.n_block_sizes = self.read_block_coords()
         seq.masked_block_starts, seq.masked_block_sizes = self.read_block_coords()
         # Reserved
-        self.read( "L" )
+        self.read("L")
         # Save start of actualt sequence
         seq.sequence_offset = self.file.tell()
         # Mark as loaded
         seq.loaded = True
-        
-    def read_block_coords( self ):
-        blocks = []
-        block_count = self.read( "L" )
+
+    def read_block_coords(self):
+        block_count = self.read("L")
         if block_count == 0:
             return [], []
-        starts = self.read( str( block_count ) + "L", untuple=False )
-        sizes = self.read( str( block_count ) + "L", untuple=False  )
-        return list( starts ), list( sizes )
-        
-    def read( self, pattern, untuple=True ):
-        rval = unpack( self.byte_order + pattern, 
-                       self.file.read( calcsize( self.byte_order + pattern ) ) )
-        if untuple and len( rval ) == 1: 
+        starts = self.read(str(block_count) + "L", untuple=False)
+        sizes = self.read(str(block_count) + "L", untuple=False)
+        return list(starts), list(sizes)
+
+    def read(self, pattern, untuple=True):
+        rval = unpack(self.byte_order + pattern,
+                      self.file.read(calcsize(self.byte_order + pattern)))
+        if untuple and len(rval) == 1:
             return rval[0]
         return rval
-        
-    def read_p_string( self ):
+
+    def read_p_string(self):
         """
-        Read a length-prefixed string 
+        Read a length-prefixed string
         """
-        length = self.read( "B" )
-        return self.file.read( length )
+        length = self.read("B")
+        return self.file.read(length)


=====================================
setup.cfg
=====================================
@@ -2,6 +2,9 @@
 snapshot = egg_info -rb_DEV bdist_egg rotate -m.egg -k1
 build_docs = build_sphinx build_apidocs
 
+[flake8]
+ignore = E226,E501,E741
+
 [nosetests]
 tests=lib/, script_tests/
 #verbosity=2


=====================================
setup.py
=====================================
@@ -19,7 +19,7 @@ def main():
 
     metadata = \
       dict( name = "bx-python",
-            version = "0.8.2",
+            version = "0.8.4",
             setup_requires=['numpy', 'cython'],
             install_requires=['numpy', 'six'],
             py_modules = [ 'psyco_full' ],



View it on GitLab: https://salsa.debian.org/med-team/python-bx/compare/6f027516b60b06a62249ce405b98dbc87ac7a8cd...8ba7414e6c63650488dd76a932e6e4b3f10bc006

-- 
View it on GitLab: https://salsa.debian.org/med-team/python-bx/compare/6f027516b60b06a62249ce405b98dbc87ac7a8cd...8ba7414e6c63650488dd76a932e6e4b3f10bc006
You're receiving this email because of your account on salsa.debian.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/debian-med-commit/attachments/20190723/27c63cc3/attachment-0001.html>


More information about the debian-med-commit mailing list